Zavaděč operačního systému

1     Popis geometrie disku.. 3

1.1      Základní pojmy.. 3

1.2      Prokládání dat.. 4

1.3      Zápis dat.. 5

1.4      Čtení dat.. 6

2     Popis použitých služeb BIOSu.. 6

2.1      Služby BIOSu pro přímý přístup k disku.. 7

2.2      CHS formát (Cylinder Head Sector) 7

2.3      LBA formát (Linear Block Address) 7

2.4      Rozšířené služby BIOSu.. 13

2.5      Video služby.. 17

2.6      Chybové kódy diskových operací 19

2.7      Chybové kódy  rozšířené paměti 21

3     Popis Master Boot Recordu (MBR) 21

3.1      Master Boot (MB) 21

3.2      Partitions table (PT) 22

4     Boot Record (BR) 26

5     Popis startu počítače architektury INTEL86. 27

6     Úloha Boot Manažeru v zaváděcím procesu.. 29

7     Mapa paměti pro zavedení jádra OS GNU/LINUX.. 29

7.1      Setup kód.. 31

7.2      Historie verzí boot protokolu.. 31

8     Popis a rozbor zavaděče. 34

8.1      MBR.BIN.. 36

8.2      LINX.BIN.. 39

Seznam použité literatury.. 43

 

Úvod

Mnoho uživatelů používá různé na sobě nezávislé operační systémy. Avšak existuje i mnoho firem, které vlastní starší programy vyžadující jiný operační systém, než mají nainstalován. V tomto případě by mohly připadnout v potaz dvě možnosti. Buď se vzdát svého zastaralého programu ve prospěch operačního systému, nebo využít služeb boot manažeru pro zavedení různých operačních systémů.

Tvorba boot managerů je ojedinělou záležitostí vzhledem k nízké úrovni programovacího jazyka assembler, ve kterém se zavaděče programují. Většina boot managerů pochází od firem zabývajících se přímo tvorbou operačních systémů, např. Windows NT, OS/2 a mnohá další.

 

 

 


1         Popis geometrie disku

1.1      Základní pojmy

·             pevný disk (harddisk) – tvořen několika plotnami neboli talíři disku, které jsou umístěny nad sebou a jsou uloženy ve vzduchotěsné a prachotěsné schránce.

·             povrch, strana (surface, side) – vrchní nebo spodní strana plotny harddisku.

·             hlava (head) – čtecí a zapisovací zařízení. Počet hlav pevného disku většinou souhlasí s počtem povrchů harddisku.

·             stopa (track) – jeden soustředný kruh na jednom povrchu, je číslována od nuly. Čím více stop se na pevném disku dá naformátovat, tím větší je jeho hustota.

·             válec (cylinder) – stopa promítnutá na všech površích. Označení „válec“ se používá častěji u disku.

·             sektor (sector) – na každé stopě je pevný počet úseků (sektorů) o neměnné velikosti, obvykle 512 bajtů.

Celková kapacita disku v bajtech = počet povrchů * počet stop * počet sektorů * velikost sektoru

Celá první stopa za tabulkou rozdělení disku (obvykle první stopa na disku) je vyhrazena pro systém. Většinou jsou v ní uloženy boot zavaděče, boot managery nebo bootovací viry.

 

 

 

Textové pole:

Obrázek 1.1.1: Popisující geometrii disku

 

1.2      Prokládání dat

Rychlost otáčení ploten je poměrně vysoká, může se stát, že poté, co je přečten (zapsán) jeden sektor a data jsou předána dále, dojde k pootočení disků, takže čtecí (zapisovací) hlavy se nenacházejí nad následujícím sektorem, ale až nad některým z dalších sektorů. Bylo by tedy nutné čekat další otáčku, než čtecí (zapisovací) hlavy budou nad požadovaným sektorem, a pak by se situace znovu opakovala. Protože tento způsob by velmi zpomaloval práci pevného disku, zavádí se tzv. faktor prokládání pevného disku. Jedná se o techniku, při které nejsou data zapisována (a posléze čtena) do za sebou následujících sektorů, ale jsou během jedné otáčky disku zapisována vždy do každého n-tého sektoru (faktor prokládání 1:n). Číslo n je voleno tak, aby po přečtení a zpracování dat z jednoho sektoru byla čtecí (zapisovací) hlava nad dalším požadovaným sektorem.

Vzhledem k tomu, že se pohybují současně všechny (čtecí/zapisovací) hlavičky, je rychlejší zapisovat do stejné stopy na více plotnách, než zaplňovat nejdříve jedenu plotnu a pak postupně další.

Textové pole: Obrázek 1.2.1 Prokládání
 
faktor prokládání 1:1
Textové pole: Obrázek 1.2.2 Prokládání
 
faktor prokládání 1:3
                                                      

 

1.3      Zápis dat

 

Textové pole:
Obrázek 1.3.1: Směr magnetizace

Cívka, kterou prochází proud, vytváří magnetické pole, které je vedeno přes jádro zapisovací hlavy k magnetické vrstvě. V místě štěrbiny působí magnetické pole na materiál. Směr magnetizace závisí na směru zápisového proudu. Velikost zmagnetování závisí na šířce štěrbiny.

 

Textové pole:
Obrázek 1.3.2: Zápis dat přes cívku

 

1.4      Čtení dat

Je založeno na principu elektromagnetické indukce. Na vývodech cívky, která se nachází v magnetickém poli, lze naměřit napětí vždy ve chvíli, kdy se toto pole mění. tzn. při přechodu 0 na 1 a z 1 na 0 se indukuje v cívce napětí. Z tohoto napětí se získává (odvozuje) zapsaná informace.

Textové pole:
Obrázek 1.4.1: Čtení zapsané informace

 

2         Popis použitých služeb BIOSu

Služeb BIOSu je možné využít hned po startu počítače. Přes tyto služby se přistupuje ke grafické kartě, seznamu zařízení, velikosti volné paměti, diskovým operacím, portům, klávesnici, tiskárně atd.

2.1      Služby BIOSu pro přímý přístup k disku

Přes přerušení (interrupt - INT) 13H lze přistupovat přímo k řadiči diskety nebo harddisku. V mnoha případech bezpečnostních systémů se tato služba „zastřešuje“, to znamená, že vývojář je donucen přistupovat k disku v rámci poskytnutých služeb operačního systému. Jakoukoliv jinou cestu k disku systém zamítne. Pro adresaci jednoho sektoru v rámci disku se nejčastěji používají formáty CHS a LBA.

2.2      CHS formát (Cylinder Head Sector)

U CHS formátu je sektor definován Cylindrem/Hlavou/Sektorem což znamená, že jde o fyzické umístění sektoru na médiu (třírozměrná adresa). U fyzického číslování začíná sektor od hodnoty jedna. CHS formát je používán všemi BIOSy, ale je omezený velikostí disku (viz tabulka 2.3.3).

2.3      LBA formát (Linear Block Address)

LBA znamená sekvenční přístup k sektorům disku. Ty mají jedinečné číslo a jsou číslovány od nuly. Na celé médium je pohlíženo jako na jednorozměrné pole sektorů. LBA formát je podporován pouze BIOSy, které nejsou příliš staré.

 

Textové pole: Obrázek 2.3.1: Vztah mezi CHS a LBA sektory na disketě 720KB. Hlav (povrchů) 2, stop 80, sektorů 9

 

Tabulka 2.3.1: Souhrn použitých funkcí INT 13H

registr

AH

popis

00H

reset disku – také rekalibrace kontroléru

02H

čti sektory do paměti

42H

čti sektory do paměti - ROZŠÍŘENÁ SLUŽBA BIOSu

 

 

Tabulka 2.3.2: Resert-rekalibrace disku (AH=00H)

AH=00H

registr 

popis

vstup

DL

číslo diskové jednotky (7 bit je pro hard disk)

výstup

-

-

Jak už název funkce napovídá, jedná se o rekalibraci diskových hlav a posun na 0. stopu.

 

Tabulka 2.3.3: Čti sektory do paměti (AH=02H)

AH=02H

registr 

popis

vstup

AL

počet sektorů ke čtení (nesmí být nula)

 

CH

číslo cylindru 0-1023 (bity 0-9)

 

CL

číslo sektoru 1-63 (bity 0-5) viz obrázek 3.2.1

 

DH

číslo hlavy

 

DL

číslo diskové jednotky (7 bit je pro hard disk)

 

Tabulka 2.3.3: pokračování

vstup

ES:BX

adresa buferu

výstup

AH

kód chyby disku, je-li CF nastaven na CY (viz tabulka 2.6.1)

 

ES:BX

adresa buferu obsahující přečtená data

 

AL

počet přečtených sektorů

V dnešní době je tato funkce zastaralá. Problém spočívá v možnosti přistupovat k maximální kapacitě disku 8 455 716 864 bytů (8 GiB). Ve formátu CHS, který je uložen v Partition table (viz PT 3.2). Při volání BIOSových funkcí, je možné použít maximálně 24 bitů. S 24-bitovou hodnotou a sektorem o velikosti 512 bajtů, lze přistupovat ke všem sektorům na disku do již zmíněné hranice 8 GiB. Kvůli zachování funkčnosti starších operačních systémů, zůstala služba AH=02H nezměněna. Registry ES:BX musí ukazovat na adresu alokované paměti, kde budou data po přečtení z disku uložena.

 

Tabulka 2.3.4: Rozsahy geometrie disku u funkce AH=02H

cylindr

hlava

sektor

0..1023 (10 bitů)

0..255 (8 bitů)

1..63 (6 bitů)

 

Příklad 2.3.1:

Výpočet maximální velikosti disku u služby AH=02H

(C * H * S) * 512 = (1024 * 63 * 256) * 512 = 8 455 716 864 bajtů

 

Příklad 2.3.2:

 

Je předpokládáno, že je již alokovaná paměť o velikosti nejméně 512 bajtů a registry BX:ES jsou nastaveny na tuto paměť. Připravené hodnoty pro čtení dat jsou: hlava = 0, cylindr = 550, sektor =1.

;ES:BX - adresa alokované paměti

MOV     DL,80H                          ; disk hda

MOV     DH,BYTE PTR [Param]             ; číslo hlavy

MOV     CX,WORD PTR [Param+01H]         ; číslo sektoru + cylindru

MOV     AH,02H                          ; funkce pro čtení dat

MOV     AL,01H                          ; počet sektorů k přečtení

INT     13H                             ; volání služby BIOSu

NOP                                     ; prázdná instrukce

Param   DB      00H,81H,26H             ; uložené parametry C/H/S

 

 

Tabulka 2.3.5: Čti sektory do paměti (AH=42H) – ROZŠÍŘENÁ SLUŽBA BIOSu

AH=42H

registr 

popis

vstup

DL

číslo diskové jednotky (7 bit je pro hard disk)

 

DS:SI

adresa struktury LBA (viz tabulka 2.3.6)

výstup

AH

kód chyby disku, je-li CF nastaven na CY (viz tabulka 2.6.1)

Problém přístupu k větším diskům, něž je 8 GiB, řeší služba AH=42H, která umí pracovat s diskem o velikosti 2^64 sektorů, tedy 8 biliónů TB. V dnešní době je pro LBA adresování rezervována 32-bitová hodnota v partition table o velikosti 2048 GB tedy 2^32. Toto adresování se nazývá LBA32. Registry DS:SI ukazují na adresu struktury (viz níže).

 

 

Tabulka 2.3.6: Formát paketu LBA

relativní adresa

délka

popis

00H

BYTE

velikost paketu (10H nebo 18H)

01H

BYTE

rezervováno (0)

02H

WORD

velikost bloku k přenosu (maximálně 007Fh pro Phoenix)

04H

DWORD

cílová adresa buferu

08H

QWORD

začátek absolutního bloku (LBA zařízení)

10H

QWORD

64-bitová cílová adresa buferu; použije se jestliže pole 04h je rovno FFFFH:FFFFH

 

Příklad 2.3.3:

Přepočet hodnoty z C/H/S do LBA. Geometrie disku: cylindr = 609, hlav = 32, sektor = 63. Blok o velikosti 512 bajtů, který se má přečíst z disku je uložen v cylindru = 319, hlav = 22, sektor = 54.

početSektorůNaStopu = sektor = 63 ; CelkemHlav = hlav = 32

(VybranýCylindr * CelkemHlav + VybranáHlava) * početSektorůNaStopu + VybranýSector - 1 = (319 * 32 + 22) * 63 + 54 – 1 = 644 543 LBA32

 

Příklad 2.3.4:

Výpočet hodnoty z LBA do C/H/S. Geometrie disku je stejná jako u příkladu 2.3.3

sektor = (LBA32 MOD CelkemSektorůNaStopu)+1 = 644 543 % 63 + 1 = 54

temp = ( LBA32 / CelkemSektorůNaStopu) = 644 543 / 63 = 10 230

hlav = temp MOD CelkemHlavNaCylinder = 10230 % 32 = 22

cylindr = temp / CelkemHlavNaCylinder = 10230 / 32 = 319

MOD  – dělení modulo (tj. zbytek po dělení)

    /       - celočíselné dělení

 

 

 

Příklad 2.3.5:

Segment a ofset alokované paměti o velikosti 512 bajtů se uloží do položky Adr struktury LBA. Jestliže bude tato položka obsahovat adresu 0FFFFH:0FFFFH je nutné změnit velikost paketu v položce VelPack na hodnotu 18H a zároveň vyplnit i položku AdrEMS, která bude obsahovat adresu zabrané paměti v EMS.

 

 

;ES:BX - adresa alokované paměti

MOV     AH,42H                          ; funkce pro čtení dat LBA

MOV     DL,80H                          ; disk

MOV     SI,OFFSET(LBA)                  ; ofsetová část struktury

MOV     WORD PTR [Adr][2],ES            ; segmentová cílová adresa

MOV     WORD PTR [Adr][0],BX            ; ofsetová cílová adresa

INT     13H                             ; volání služby BIOSu

NOP                                     ; prázdná instrukce

 

LBA:                                    ; struktura LBA paketu

VelPack DB      10H                     ; velikost paketu

Rez     DB      00H                     ; rezervováno

VelBlk  DW      0001H                   ; velikost bloku k přenosu

Adr     DD      00000000H               ; cílová adresa buferu

Pozice  DQ      000000000009D5BFH       ; hodnota LBA32

AdrEMS  DB      08H     DUP(0)          ; adresa rozšířené paměti

 

2.4      Rozšířené služby BIOSu

Přerušení 15H poskytuje různé služby pro zařízení AT (služby OS, EMS, kazetopásková jednotka).

 

Tabulka 2.4.1: Souhrn služeb INT 15h

registr AH

popis

87H

přesuň blok z/do přídavné paměti

88H

vrať velikost přídavné (extended) paměti

 

 

Tabulka 2.4.2: Přesuň blok přídavné paměti (AH=87H)

AH=87H

registr 

popis

vstup

CX

počet přesunovaných 16ti bytových slov (max. 8000H=32K)

 

ES:SI

Globální Tabulka Deskriptorů (GDT) (viz tabulka 2.4.3)

výstup

AH

kód chyby disku, je-li CF nastaven na CY (viz tabulka 2.7.1)

Funkce AH=87H přesouvá blok dat z/do přídavné paměti mezi 1 Megabajtem a 16MB na počítačích 286 a vyšší). Před voláním funkce přesuň blok přídavné paměti je nutné řádně vyplnit tabulku deskriptorů, na kterou ukazují registry ES:SI (viz níže), podle které BIOS rozpozná, zda budou data přenášena z EMS do základní  paměti či naopak. Po úspěšném ukončení volané funkce je registr AH naplněn hodnotou 0. V opačném případě chybovým kódem (viz tabulka 2.7.1). Obecně se nedoporučuje přenášet velké bloky. Při provádění této funkce je nastaven zákaz přerušení.

 

Tabulka 2.4.3: Globální tabulka deskriptorů (GDT - Global Descriptor Table)

relativní adresa

délka

popis

00H

16BYTEs

využito BIOSem (nastavené hodnoty 0)

10H

WORD

délka přenášených dat v bytech (2*CX-1 nebo větší)

12H

3BYTEs

24-bitová lineární zdrojová adresa, první bajt je nižší

15H

BYTE

bajt přístupových práv (93H)

16H

WORD

využito BIOSem (nastavené hodnoty 0)

18H

WORD

délka přenášených dat v bajtech (2*CX-1 nebo větší)

1AH

3BYTEs

24-bitová lineární cílová adresa, první bajt je nižší

1DH

BYTE

bajt přístupových práv (93H)

1EH

WORD

využito BIOSem (nastavené hodnoty 0)

20H

16BYTEs

využito BIOSem (nastavená hodnota 0)

 

Tabulka 2.4.4: Vrať velikost přídavné (extended) paměti (AH=87H)

AH=87H

registr 

popis

vstup

-

-

výstup

AX

velikost rozšířené paměti v KB

 

 

Obrázek 2.4.1: Rozvržení základní paměti v reálném módu a EMS paměti v chráněném mód

 

Textové pole:

Výsledná hodnota této funkce je uložena do registru AX, která určuje počet navazujících 1K bloků nad 1M (1024K). Maximální hodnota v registru AX může být 16MB. I zde má tato funkce svou rozšířenou podobu AH=0C7H a registry DS:SI musí ukazovat na strukturu o velikosti 42 bajtů. Maximální výsledná hodnota paměti u této funkce je 4GB.

 

Příklad. 2.4.1:

Přenos jednoho bloku dat o velikosti 512 bajtů ze základní paměti do rozšířené[1].

Předpoklad: Zdrojová adresa je již alokována a obsahuje přečtená data ze souboru nebo výsledky výpočtu, které jsou nutné k pozdějšímu zpracování. Nejsou zde ošetřeny případné chybové stavy.

 

;ES:BX - 5000H:8400H (alokovaná zdrojová adresa)

MOV     AH,88H          ; Vrať velikost rozšířené paměti

INT     15H             ; volání služby BIOSu

 

MOV     BYTE PTR [OFFSET(SRC_LO)],00H

MOV     WORD PTR [OFFSET(SRC_HI)],0584H

                        ; do GDT tabulky uloží zdrojovou adresu

MOV     BYTE PTR [OFFSET(DEST_LO)],00H

MOV     WORD PTR [OFFSET(DEST_HI)],1000H

                        ; do GDT tabulky uloží cílovou adresu

MOV     AH,87H          ; funkce pro přesun bloku do EMS paměti

MOV     CX,100H         ; počet přenášených dat (WORD)

MOV     SI,OFFSET(GDT)  ; získání ofsetové adresy GDT tabulky

INT     15H             ; volání služby BIOSu

NOP                     ; prázdná instrukce

 

GDT:                    ; Globální Tabulka Deskriptorů

DB      10H     DUP(0)  ; využito BIOSem (nastavené hodnoty 0)

DW              0FFFFH  ; délka přenášených dat v bytech

SRC_LO:

DB              00H     ; lineární zdrojová adresa SRC_LO

SRC_HI:

DW              0000H   ; lineární zdrojová adresa SRC_HI

DB              93H     ; byte přístupových prav

DW              0000H   ; využito BIOSem (nastavené hodnoty 0)

DW              0FFFFH  ; délka přenášených dat v bytech

DEST_LO:

DB              00H     ; lineární cílová adresa DEST_LO

DEST_HI:

DW              0000H   ; lineární cílová adresa DEST_HI

DB              93H     ; byte přístupových prav

DW              0000H   ; Využito BIOSem (nastavené hodnoty 0)

DB      10H     DUP(0)  ; Využito BIOSem (nastavené hodnoty 0)

 

2.5      Video služby

Video služby (INT 10H) slouží k zobrazení údajů na monitor v grafickém i v textovém režimu.

 

Tabulka 2.5.1: Souhrn video služeb INT 10H

registr AH

popis

02H

nastav pozici kurzoru

06H

roluj okno nahoru

0EH

zapiš znak (emulace TTY)

 

Tabulka 2.5.2: Nastav pozici kurzoru (AH=02H)

AH = 02H

registr

popis

vstup

BH

video stránka (0..)

 

DH

řádka (0..)

 

DL

sloupec (0..)

výstup

-

-

Nastaví kurzor na určenou pozici. Při nastavení kurzoru pod poslední řádku obrazovky. Pak bude neviditelný, ale klasické procedury výstupu (používající funkci 0EH - TTY) nemusí pracovat korektně.

 

Tabulka 2.5.3: Roluj okno nahoru (AH=06H)

AH=06H

registr

popis

vstup

CH

řádka levého horního rohu okna (0..)

 

CL

sloupec levého horního rohu okna (0..)

 

DH

řádka pravého dolního rohu okna (0..)

 

DL

sloupec pravého dolního rohu okna (0..)

 

AL

počet řádek, které mají být odrolovány (0 = smaže celé okno)

 

BH

video atribut, kterým mají být vyplněny nové řádky

výstup

-

-

Tato funkce může odrolovat nebo smazat okno na obrazovce. Roluje obdélník o 1 či více řádcích. Obdoba této funkce je „roluj okno dolu“ registr AH=07H.

 

Tabulka 2.5.4: Zapiš znak (emulace TTY) (AH=0EH)

AH=0EH

registr

popis

vstup

AL

ASCII znak

 

BL

barva popředí (pro grafický mód)

výstup

-

-

Funkce zapíše znak na stávající pozici kurzoru, aktivní video stránku a posune kurzor o znak doprava. Na konci řádku bude kurzor přemístěn na začátek nového řádku. Na posledním řádku se obraz odroluje. Znaky 0DH (CR), 0AH (LF) a 07H (BELL) jsou interpretovány jako řídící znaky.

 

2.6      Chybové kódy diskových operací

Každá volaná služba BIOSu pro práci s diskem vrací chybové kódy disku. Jestliže byla operace úspěšně dokončena, je nastaven příznak přenosu CF (carry flag) na hodnotu 0. V opačném případě se CF rovná hodnotě 1 a registr AH nebo AL obsahuje upřesňující číselnou hodnotu chyby (viz níže).

 

Tabulka 2.6.1: Výsledné hodnoty diskových operací

registr AH

význam číselné hodnoty

00H

úspěch

01H

neznámá volaná funkce v AH nebo špatný parametr

02H

cíl adresy nenalezen

04H

sektor nenalezen/chyba při čtení

05H

restart neproveden (jen u harddisku)

07H

diskový parametr selhal v činnosti (jen u harddisku)

09H

datové rozhraní selhalo (upozornění DMA přesáhlo hranici 64K nebo >80h sektorů)

0AH

nalezen chybný sektor (jen u harddisku)

0BH

nalezena špatná stopa (jen u harddisku)

0CH

neznámé číslo stopy nebo chybné zařízení

0DH

špatné číslo sektoru ve formátu (PS/2 harddisk)

0EH

kontrolér datové adresy označil chybu (jen u harddisku)

20H

selhal kontrolér

32H

nesprávný typ zařízení uložený v CMOS (BIOS Compaq)

40H

selhal odskok na jiné místo (seek)

80H

nedostatek času (zařízení neodpovídá)

AAH

zařízení není připraveno (jen u harddisku)

B1H

jednotka je uzamčena (u INT 13 rozšířené)

B3H

jednotka je používána (u INT 13 rozšířené)

B4H

zámek překročil počet (u INT 13 rozšířené)

B6H

jednotka je zapojená, ale chráněná proti čtení (u INT 13 rozšířené)

BBH

nedefinovaná chyba (jen u harddisku)

E0H

chyba stavu registru (jen u harddisku)

FFH

operace selhala (jen u harddisku)

 

 

2.7      Chybové kódy  rozšířené paměti

Jestliže při ukončení volané funkce AH=87H nebo 88H (INT 15H) je nastaven příznak přenosu CF (carry flag) na hodnotu 1, pak registr AH obsahuje následující chybové kódy.

 

Tabulka 2.7.1: Výsledné hodnoty přídavných operací

registr AH

význam číselné hodnoty

01H

chyba parity

02H

chyba přerušení

03H

chyba adresové linky A20

80H

neznámý příkaz (PC,PCjr)

86H

funkce není podporována

 

 

3         Popis Master Boot Recordu (MBR)

Master boot record je označení sektoru, který se nalézá na disku (válec 0, hlava 0, sektor 1) a je načten BIOSem při startu počítače do operační paměti. MBR lze vytvořit např. programem FDISK nebo jinými operačními systémy, které musí zhotovit funkční MBR strukturu, která obsahuje master boot (hlavní zavaděč operačního systému) a partitions table (tabulku oblastí).

 

3.1      Master Boot (MB)

Má za úkol zjistit, zda je nějaká oblast označená jako aktivní, načíst z ní boot rekord (viz 4 BR) do paměti a předat řízení. V opačném případě master boot zobrazí chybovou zprávu ve smyslu „Operační systém nenalezen“ nebo „System not found“, poté následuje volání přerušení 18H (ROM BIOSu).

 

3.2      Partitions table (PT)

Též tabulka rozdělení disku. Je uložena na konci MBR od adresy 1BEH a skládá ze čtyř položek, z nichž každá je dlouhá 16 bajtů, plus závěrečná identifikace přítomnosti partition table. Každý logický disk, na který ukazuje PT, musí být zformátován a přistupuje se k němu stejně jako např. k disketě.

Typy diskových oblastí z hlediska funkčnosti:

·             primární (primary) – není možné další rozdělení a na jednom disku mohou být dohromady nejvýše čtyři primární oblasti.

·             rozšířený (extended) – při vytváření více jak čtyř diskových oblastí je možné vytvořit rozšířenou oblast, kterou lze dále členit na oblast logickou.

·             logický (logical) – je součástí oddílu rozšířeného, dále jej nelze dělit.

 

Tabulka 3.2.1: Tabulka rozdělení disku

adresa

délka

obsah

1BEH

16 B

údaje o oblasti 1

1CEH

16 B

údaje o oblasti 2

1DEH

16 B

údaje o oblasti 3

1EEH

16 B

údaje o oblasti 4

1FEH

1 W

identifikační slovo 55AAH

 

Tabulka 3.2.2: Význam údajů v tabulce oblastí

relativní adresa

délka

význam

00H

1 B

příznak aktivní oblasti – aktivní = 80H, neaktivní = 00H; Aktivní oblast smí bít pouze jedna a musí obsahovat  zaváděcí kód v Boot sektoru

01H

1 B

číslo povrchu počátku oblasti, by měla být vždy 0 – výjimku tvoří pouze první oblast

02H

2 B

číslo cylindru a sektoru počátku oblasti; Sektor by měl být vždy 1; Způsob uložení (viz obrázek 3.2.1)

04H

1 B

příznak typu operačního systému (viz tabulka 3.2.3)

05H

1 B

číslo povrchu konce oblasti; Mělo by být vždy nejvyšší číslo povrchu

06H

2 B

číslo cylindru a sektoru konce oblasti; Mělo by být vždy číslo posledního sektoru na stopě; Způsob uložení (viz obrázek 3.2.1)

08H

2 W

relativní posun prvního sektoru oblasti; O kolik sektorů je oblast posunuta oproti Master Boot sektoru

0CH

2 W

velikost oblasti v sektorech

 

Obrázek 3.2.1: Způsob uložení cylindru a sektoru

Textové pole:

 

 

Obrázek 3.2.2: Výpis PT a dekódování jednotlivých položek

adresa

obsah

 

 

 

01BEH

00 01 01 00

83 1F BF 25

3F 00 00 00

01 EB 10 00

01CEH

80 00 81 26

06 1F BF 60

40 EB 10 00

A0 D0 01 00

01DEH

00 00 00 00

00 00 00 00

00 00 00 00

00 00 00 00

01EEH

00 00 00 00

00 00 00 00

00 00 00 00

00 00 00 00

01EFH

55 AA

 

 

 

 

 

 

Obrázek 3.2.3: Dekódování výpisu

1BE-1CD

disk EXT3: (Primary Linux Partition)

00

- neaktivní oblast

01

- počáteční povrch

0100

- cylindr 0, sektor 1; bitově 000 0001 0000 0000

83

- linux (viz tabulka. 3.2.3)

1F

- koncový povrch 31

BF25

- cylindr 549, sektor 63; bitově 1011 1111 0010 0101

0000003F

- relativní posun 63 sektorů

0010EB01

- počet sektorů v oblasti 1108737

 

1CE-1DD

disk C: (Primary DOS Partition)

80

- aktivní oblast

00

- počáteční povrch

8126

- cylindr 550, sektor 1; bitově 1000 0001 0010 0110

06

- FAT 16 (viz tabulka. 3.2.3)

1F

- koncový povrch 31

BF60

- cylindr 608, sektor 63; bitově 1011 1111 0110 0000

0010EB40

- relativní posun 1108800 sektorů; (tj. 1108737 + 63)

0001D0A0

- počet sektorů v oblasti 118944

 

 

Tabulka 3.2.3: Číselné hodnoty určující typ systému souborů

hodnota

typ systému souborů

00H

prázdná partitions table

04H

DOS 16-bit FAT (více než 32M)

06H

DOS 3.31+ Large File System (16-bit FAT, větší něž 32M)

07H

OS/2 HPFS; Windows NT NTFS

0BH

Windows95 s 32-bit FAT

0CH

Windows95 s 32-bit FAT (LBA-mód)

0FH

logický disk 32-bit FAT (LBA-mód)

17H

NTFS partition (skrytá)

1BH

Windows95 s 32-bit FAT (skrytá)

1CH

Windows95 s 32-bit FAT (LBA-mód - skrytá)

82H

Solaris (Unix); Linux swap

83H

Linux native file system (ext2fs/xiafs)

85H

Linux EXT

A5H

FreeBSD, BSD/386

B3H-B4H

rezervováno

 

 

4         Boot Record (BR)

Též Boot sektor, musí být uložen v nultém sektoru oblasti pevného disku, kde je nahrán operační systém. Každý operační systém má svůj vlastní boot record. Úkolem kódu v boot recordu je zavést a nastartovat jádro daného systému.

 

5         Popis startu počítače architektury INTEL86

Po přivedení napětí a startu hodinového taktu se na sběrnici ustálí signál POWERGOOD. Provede se reset CPU a nastartování 8086 reálného režimu. Všechny segmentové registry jsou vynulovány, kromě registrů CS:IP, které jsou nastaveny na adresu FFFFH: FFF0H, kde je v ROM uložen programový kód BIOS Power On Self Testu (POST).

Provádění programového kódu BIOS POST, probíhá víceméně v okamžiku, kdy počítač „počítá“ paměť. Přerušení jsou zakázána a tabulka adres přerušení (IVT) je inicializována na 0. U víceprocesorového systému pracuje při testu jen jeden procesor  „boot procesor“.

Podle zjištěného hardwaru a hodnot zadaných uživatelem se nastaví celá řada parametrů pro chipset (čipovou logiku) základní desky - tyto parametry ovlivňují jak rychlost, tak spolehlivost a funkčnost systému. Dále se inicializuje zařízení Plug and Play (PnP).

Do registru DL je BIOSem nastaveno číslo zařízení (80H = fyz. disk, 00H = disketa, atd), ze kterého se zavede systém. Volání služby INT 19H provede nahrání MBR (sektor jedna, hlava nula, cylindr nula) bootovacího zařízení na adresu 0000H:7C00H, kde je předáno řízení.

Na začátku MBR je uložen sled instrukcí, které musí přesunout vlastní kód (MBR) na volnou adresu (viz tabulka 5.1.1). Následuje skok na adresu kopie obsahující MBR. Poté se vykoná zbytek kódu, který najde a nahraje BR z aktivní oblasti disku na adresu 0000H:7C00H a dojde opět k předání řízení.

Boot rekord obsahuje zaváděcí kód, který při instalaci operačního systému implementuje instalátor, např. DOS, WINDOWS a LINUX. Vybraný zavaděč nahraje jádro na příslušné adresy a spustí jej.

 

Tabulka 5.1.1: Mapa paměti po startu počítače

od

do

popis

0000H:0400H

0000H:0463H

rezervováno (BIOS)

0000H:0465H

0000H:048EH

rezervováno (BIOS)

0000H:048FH

F000H:FFFEH

volné místo pro zavaděč

 


 

6         Úloha Boot Manažeru v zaváděcím procesu

Účelem boot manažeru je poskytnout uživateli zavedení různých operačních systémů z téhož počítače. Různé operační systémy obsahují vlastní boot manažer, např. ntdldr ve Windows NT nebo LILO a GRUB v Linuxu. Konfigurace boot manažerů je dosti obtížná a vyžaduje detailní systémové znalosti.

Boot manažery používají grafické rozhraní, odpočítávání času pro spuštění přednastaveného systému.

 

 

7         Mapa paměti pro zavedení jádra OS GNU/LINUX

Vlastní jádro, např. soubor pod názvem „vmlinuz-2.4.18-3“, se skládá ze tří částí. Každý díl musí být zaveden na příslušné adresy. Začátek souboru vmlinuz obsahuje boot sektor o velikosti 512 bajtů. Jde o zkompilovaný soubor bootsect.S, který zavede OS Linux z diskety/disku, za předpokladu, že jádro je uloženo na disketě/disku od nulté stopy. Zavaděč se přesune z fyzické adresy 0x07C00 (0000:7C00) na adresu 0x90000 (9000:0000). Odtud  načte další část souboru vmlinuz na adresu 0x90200 (9020:0000). Tato část kódu se nazývá „setup“ a obsahuje zkompilovaný kód ze souboru setup.S. Jeho délka je uložena na konci boot zavaděče v proměnné setup_sects (viz tabulka 7.2.1). Třetí částí souboru vmlinuz, která se načítá, je samotné jádro. Adresa, kde bude jádro uloženo, se řídí hodnotou v proměnné loadflags a verzí protokolu.

 

is_bzImage = (protocol >= 0x0200) && (loadflags & 0x01);

load_address = is_bzImage ? 0x100000 : 0x10000;

 

Pro komunikaci mezi zavaděčem a jádrem slouží příkazová řádka o délce 255 znaků plus finální nula. Nyní stačí nastavit root zařízení, video mód a předat řízení části setup kódu na adresu 0x90200.

Důležité! Aby došlo ke spuštění části setup kódu, musí se použít adresa ve tvaru 9020:0000.

 

Textové pole:

Obrázek 7.1.1: Paměťová mapa pro zavaděč jádra Image/zImage/bzImage

 

7.1      Setup kód

Je robustní, vzhledem k tomu, že zjišťuje celkovou kapacitu paměti, následně provede standardní nastavení klávesnice,  detekci textových a grafických režimů, inicializuje diskový řadič, kontroluje PS/2, testuje, zda je přítomna zdokonalená podpora úspory energie (APM), provede kontrolu pozice jádra načteného do paměti, které se může nacházet v:

·             základní paměti - jádro bylo zkompilováno příkazem make jako Image/zImage. Rozsah volné základní paměti je od 0x10000 do 0x90000. Celé jádro nesmí přesáhnout délku 8x64KB = 512KB.

·             rozšířené paměti – jádro je typu bzImage a jeho délka je omezena pouze velikostí rozšířené paměti. Začátek adresy jádra v rozšířené paměti je od 1 MB (0x100000).

Jestliže se nachází jádro v EMS paměti, je zde ponecháno. V opačném případě dojde k přesunu jádra ze základní paměti do rozšířené. Další části testů prováděných setupem jsou: nastavení tabulky přerušení (Interrupt Descriptor Table - IDT a Global Descriptor Table – GDT), test přítomnosti floating point unit (fpu), případně jeho restart a přepnutí procesoru z reálného režimu do chráněného.

Nyní dochází k dekompresi jádra do volné paměti a zobrazení textu „Uncompressing Linux . ..“ na obrazovku. Rozpakované jádro se pak přesouvá zpět na adresu 0x100000. V tuto chvíli je vše připraveno ke spuštění jádra odskokem na adresu, která je uložena v hodnotě code32_start (viz tabulka 7.2.1).

 

7.2      Historie verzí boot protokolu

V současné době existují čtyři verze LINUX boot protokolů.

·             Protokol 2.00 - (Jádro 1.3.73) Přidána podpora bzImage a initrd Dále upřesněn způsob komunikaci mezi boot zavaděčem a jádrem.

·             Protokol 2.01 - (Kernel 1.3.76) Přidáno upozornění přetečení heapu

·             Protokol 2.02 - (Kernel 2.4.0-test3-pre3) Přidán nový protokol příkazové řádky. Snížení horní meze základní paměti. Tradiční oblast setupu se již nepřepisuje. Uvažuje se o vypuštění zImage, ale zatím je podporován.

·             Protokol 2.03 - (Kernel 2.4.18-pre1) Umožňuje boot zavaděči použít nejvyšší možné dosažitelné adresy pro initrd.

 

Tabulka 7.2.1: Popis protokolu vmlinuz

adresa

délka [byte]

verze jádra

název

popis

1F1H

1

všechny

setup_sects

délka setupu v sektorech

1F2H

2

všechny

root_flags

jestli nastaven na hodnotu 1, připojuje se kořenový adresář pro čtení

1F4H

2

všechny

Syssize

použito pro bootsect.S

1F6H

2

všechny

swap_dev

zastaralý

1F8H

2

všechny

ram_size

použito pro bootsect.S

1FAH

2

všechny

vid_mode

nastavení video módu 0xFFFFH

1FCH

2

všechny

root_dev

číslo přípojného bodu root zařízení

1FEH

2

všechny

boot_flag

identifikační slovo 55AAH

200H

2

2.00+

Jump

instrukce odskoku

202H

4

2.00+

header

identifikační signatura "HdrS"

206H

2

2.00+

version

podporovaná verze boot protokolu

208H

4

2.00+

realmode_ swtch

adresa 16-bitového reálného módu, (použito zavaděčem LoadLin)

20CH

2

2.00+

start_sys

adresa segmentu pro načtení jádra do základní paměti 0x1000 (zastaralé)

20EH

2

2.00+

kernel_ version

ukazatel na řetězec verze jádra

210H

1

2.00+

type_of_ loader

identifikace zavaděče 0-LILO; 1-LoadLin; 2-bootsect-loader; 4-EtherBoot

211H

1

2.00+

loadflags

hodnota 1 – EMS; 0 – základní paměť

212H

2

2.00+

setup_ move_size

délka setupu k přesunu do EMS paměti (použito LoadLin)

214H

4

2.00+

code32_ start

ukazatel na adresu jádra pro předání řízení (použito LoadLin)

218H

4

2.00+

ramdisk_ image

načítací adresa initrd (nastaveno zavaděčem)

21CH

4

2.00+

ramdisk_ size

délka initrd (nastaveno zavaděčem)

220H

4

2.00+

bootsect_ kludge

použito pro bootsect.S

224H

2

2.01+

heap_end_ptr

ofsetová část adresy volné paměti za koncem setupu

226H

2

N/A

pad1

rezervováno

228H

4

2.02+

cmd_line_ ptr

32-bitový ukazatel na příkazovou řádku jádra

22CH

4

2.03+

initrd_ addr_max

největší povolená adresa pro initrd

 

 

8         Popis a rozbor zavaděče

Celý projekt se skládá z několika částí, které jsou mezi sebou úzce spjaty. Hlavní instalační program LINX je napsán v jazyku C pro OS Linux. Jeho náplní je přidat boot manager (viz 8.1 mbr.bin) do MBR a modifikovat soubory mbr.bin a linx.bin (viz 8.2 linx.bin). Dále vytváří mapy pro zavaděč Linx, které ukládá do souboru a do nulté stopy disku. Při ukládání dat do prostoru MBR dochází i k záloze přepisovaných dat. Pomocí této zálohy je možné vrátit data zpět o jeden krok. V příkazovém řádku jde o parametr „-u“ a ukládací soubor je permanentně nastaven do /boot/savembr.bin. Avšak před spuštěním tohoto programu je nutné vytvořit nebo editovat konfigurační soubor „linx.cfg“ v adresáři /etc.

V konfiguračním souboru „linx.cfg“ si uživatel určí, které operační systémy chce mít v nabídce při startu počítače.

Struktura souboru „linx.cfg“

 

Nastavení bootování LINUXu

[Název]

      ROOT = /dev/hda1

      VMLINUZ = /boot/vmlinuz

      MAP = /boot/vmlinuz.map

      CMD = “single”

 

Nastavení bootování WINDOWSu

[Název]

ROOT = /dev/hda2

 

Do položky název” napíše uživatel jméno operačního systému, který se zobrazí v bootovací nabídce (viz obrázek 8.1.1). Následuje vyhrazené slovo ROOT = /dev/hda2”, kde označení /dev/hda2 určuje v případě LINUXu přípojný bod kořenového adresáře a ve Windows oddíl, který obsahuje BR. Další položky jsou závislé jen na OS Linux. Za vyhrazeným slovem VMLINUZ se uvádí cesta k souboru jádra. Řádka s vyhrazeným slovem MAP určuje jméno a cestu souboru, jenž bude obsahovat mapu sektorů jádra v LBA32 formátu. Posledním vyhrazeným slovem je CMD, jde o příkazovou řádku pro komunikaci mezi zavaděčem a jádrem.

Při běhu programu LINX, se upraví soubor mbr.bin. Ten bude obsahovat informace o tom, kde se nachází jednotlivé části operačních systémů. Pokud bude ve struktuře linx.cfg nutné zavedení systému Linux, vytvoří se mapa (map= …). Následně je nutné poznamenat pozice sektorů, kde se nachází soubor za vyhrazeným slovem MAP a ty uložit do n-tého sektoru v nulté stopě.  Díky těmto mapám dokáže linx.bin zavést jádro na příslušné paměťové adresy bez větších obtíží (viz obrázek 7.1.1). Parametry příkazového řádku se ukládají též do n-tého sektoru, hned za pozici posledního LBA32 záznamu mapy (viz obrázek 8.1). Důvodem, proč program LINX vytváří dvě mapy, je ten, že jádro je robustní (přes 1 MB) a uložení jeho mapy by zabralo v nulté stopě cca. 12 sektorů, ale s využitím druhé mapy je to jen 1 sektor v nulté stopě.

Textové pole:

Obrázek 8.1: Struktůra uložených map a Linx zavaděčů v nulté stopě disku

 

8.1      MBR.BIN

Slouží jako boot manažer. Obsahuje textové menu, které dává uživateli na výběr, jaký operační systém chce zavést (viz obrázek 8.1.1).

 

Struktura menu v jazyku Assembler

OS_Menu_Str:

OS1             DB      '1.                ',00H,00H

CHS1            DB      00H,00H,00H             ; C.S/H -> C/H/S

 

OS2             DB      '2.                ',00H,00H

CHS2            DB      00H,00H,00H             ; C.S/H -> C/H/S

 

OS3             DB      '3.                ',00H,00H

CHS3            DB      00H,00H,00H             ; C.S/H -> C/H/S

 

OS4             DB      '4.                ',00H,00H

CHS4            DB      00H,00H,00H             ; C.S/H -> C/H/S

 

Struktura jedné položky menu v jazyku C

struct POLOZKA {

        byte            pozice[0x3];

        byte            text[15];

        byte            set;

        byte            lin;

        CHS             chs;

};

 

Textové pole:
Obrázek 8.1.1: Menu boot manažeru

Po spuštění se boot manager přesune z 0x007C00 na adresu 0x000600.

Kód přesunu z 0x007C00 na adresu 0x000600

MOV     SI,SP                   ; registr SI=0000h

MOV     DS,AX

LES     DI,[Adr_presunu]-100H+7C00H

                                ; přečte hodnoty z adresy

                                ; DS:[Adr_presunu] do registrů

                                ; ES:DI

PUSH    ES                      ; uloží registr ES do zásobníku

MOV     CX,OFFSET(Konec)-100H   ; počet bajtů k přesunu

STI                             ; nastavení příznaku povolení

                                ; přerušení do stavu 1 (set

                                ; interrupt enable flag)

CLD                             ; nulování příznaku směru

                                ; zpracování řetězce

REP MOVSB                       ; přesun do adresy 0000:0600 =

                                ; ES:DI o velikosti CX

MOV     DI,OFFSET(Copy)-100H+0600H

PUSH    DI                      ; ukládá register DI do zásobníku

RETF                            ; odskok na adresu 0000:0600

                                ; hodnoty jsou brány ze zásobníku

·             Pro systémy Windows slouží jako tzv. chainloader (na svoje bývalé místo v paměti nahraje zavaděč Windows z boot recordu).

·             V případě Linuxu dojde k načtení linx.bin z n-tého sektoru nulté stopy na svoje bývalé místo v paměti.

Před spuštěním systému dojde ke kontrole signatury načtených dat. Poté může být předáno řízení.

 

Načtení a kontrola signatury Linx.bin nebo boot recordu

MOV     DL,80H                          ; disk hda

MOV     DH,ES:[SI+02]                   ; číslo hlavy

MOV     CX,ES:[SI]                      ; cylindry+stopy

MOV     BX,7C00H                        ; ofsetová adresa

CALL    Rekalibrace                     ; rekalibrace zařízení

CALL    Cti_Sektor                      ; přečte zvolený sektor na

                                        ; adresu ES:BX

MOV     DI,7DFEH

 

CMP     ES:BYTE PTR [SI-01H],01H        ; test zda jde o Linux

JE      Cti_Linux

 

Cti_Dos:

CMP     WORD PTR [DI],0AA55H            ; test zda přečtená data

                                        ; obsahují značku 0xAA55

                                        ; boot sektoru

JNZ     Sign_Error

JMP     Predej_rizeni

 

Cti_Linux:

CMP     WORD PTR [DI-0AH],0584CH        ; test zda přečtená data 

                                        ; obsahují značku 0x584C

                                        ; boot sektoru

JNZ     Sign_Error

 

 

Instrukce pro předání řízení Linx.bin nebo boot recordu

Predej_rizeni:

PUSH    ES                              ; ulož adresu na zásobník

PUSH    BX                              ; adresa je 0000:7C00H

XOR     SI,SI                           ; nuluj register SI

CALL    Roluj_Okno_Nahoru               ; odroluj okno

MOV     DH,24

XOR     BH,BH

CALL    Nastav_Radku                    ; nastavi pozici kurzoru k

                                        ; levenu dolnim

                                        ; u okraji obrazovky

RETF                                    ; skok na adresu

                                        ; 0000:7C00H

 

8.2      LINX.BIN

Pracuje se mapami, zavádí jádro a setup.S na správné paměťové místo a předává parametry z příkazového řádku, které jsou uloženy v n-tém sektoru nulté stopy (viz obrázek 8.1). Poté předá řízení setup.S. Adresy jádra vmlinuz (viz obrázek 7.1.1).

 

Textové pole:
Obrázek 8.2.1: Použité adresy zavaděčem LINX.BIN

 

Načítání jádra a práce s mapou

LES     BX,[Adr_LBA_Map]-100H+7C00H     ; nastaví adresu pro mapu

                                        ; „map“ 0000:8000H

MOV     AX,WORD PTR [MapLBA]-100H+7C00H

MOV     CX,WORD PTR [MapLBA+02H]-100H+7C00H

CALL    Cti_Sektor                      ; přečte mapu „map.bin“

Map:

MOV     AX,0E2EH                        ; zobrazí tečku

INT     10H

XOR     DI,DI

CMP     BYTE PTR [CountMap]-100H+7C00H,00H

                                        ; test přečtených všech

                                        ; LBA z mapy „map.bin“

JE      Predej_Rizeni                   ; předává řízení „setup.S“

CALL    Cti_Map                         ; načte mapu vmlinuz na

                                        ; adresu 0000:8200

;Přečte LBA (VmLinuz) ze souboru map.bin

Vmlinuz:

MOV     BX,8200H

DEC     WORD PTR [BX+1FEH]              ; dekrementuje počet

                                        ; načtených LBA dat z mapy

                                        ; vmlinuz

CMP     BYTE PTR [CountSetup]-100H+7C00H,00H

                                        ; test počtu načtených

                                        ; „setup.S“

JE      WriteToEMS                      ; čtení jádra do EMS

DEC     [CountSetup]-100H+7C00H         ; dekrementuje zbývající

                                        ; délku „setup.S“

MOV     AX,WORD PTR [BX+DI]             ; hodnota LBA32.[HI]

                                        ; vmlinuz

MOV     CX,WORD PTR [BX+DI+02H]         ; hodnota LBA32.[LO]

                                        ; vmlinuz

PUSH    ES

LES     BX,DWORD PTR [AdrSetup]-100H+7C00H

                                        ; získání adresy pozice

                                        ; „setup.S“ v paměti

CALL    Cti_Sektor                      ; načte sektor na adresu

                                        ; 9000:0000+200

ADD     DI,04H

POP     ES

ADD     WORD PTR [OFFSET(AdrSetup)+02H]-100H+7C00H,20H

                                        ; zvýšení adresy „setup.S“

JMP     Vmlinuz

WriteToEMS:

MOV     AX,WORD PTR [BX+DI]             ; hodnota LBA32.[HI]

                                        ; vmlinuz

MOV     CX,WORD PTR [BX+DI+02H]         ; hodnota LBA32.[LO]

                                        ; vmlinuz

MOV     BX,8400H

CALL    Cti_Sektor                      ; načte sektor na adresu

                                        ; 0000:8400

CALL    SaveToEMS                       ; ukládá přečtený sektor

                                        ; do EMS

ADD     DI,04H

CMP     WORD PTR [BX-200H+1FEH],00H     ; test zda byly přečteny

                                        ; všechny sektory z mapy

                                        ; vmlinuz

JE      Map

JMP     Vmlinuz


Seznam použité literatury

[1]     Černý Vladislav: MS-DOS 6.2, 6.22 prakticky, Kopp, 1995

Zdroje z Internetu

[1]     URL=http://www.linuxgazette.com

[2]     URL=http://www.pcguide.com

[3]     URL=http://www.nondot.org

[4]     URL=http://www.fi.muni.cz

[5]     URL=http://home.att.net/~rayknights

[6]     URL=http://tldp.org/LDP/sag

Ostatní

Použita dokumentace OS Linux (/usr/src/linux/Documentation/i386/boot.txt, /usr/src/linux/Documentation/devices.txt)

 



[1] Rozšířená paměť – standart pro rozšíření původní paměti nad 1MB