Autor: Libor Bešenyi
2010 Poznámka: Článok bol pôvodne písany v dobe hlbokého DOSu - princíp sa však veľmi dodneska nezmenil.
2004 Poznámka: Keďže dosť značné percento ľudí, ktorí hlasovali v ankete, do ktorej kategórie by sa zaradili klikli na užívateľ, Devnet prinesie sériu na sebe voľne nadväzujúcich článkov o fungovaní počítačov. Tieto články som vyhrabal ešte z mojich začiatkoch a preto ich nechcem veľmi upravovať, lebo sa jedná o pomerne „autentický“ pohľad.
Ách, zlatá éra objavovania a plesania nad každou maličkosťou – nostalgia... Kde bolo tušenie o existencii diskrétnej matematiky... No, ono potom prišlo, hoci sme mnohí nevedeli, že sa jedná práve o matematiku :) ale o tom možno v inom seriáli...
Taká poznámočka, ak patríte medzi fakticky úplného čitateľa a hardware nemáte v hlave ešte pekne klasifikované, pripravujeme práve o týchto základoch, preto nebudem ďalej rozvádzať pojmy ako CMOS apod.
Pri zapnutí počítača prebieha tzv. post (Power on Self Test). Rozumieme pod tým celý proces spúšťania PC do štartu načítania operačného systému. Program je vpálený do ROM pamäte (Read Only Memory). Naťahovanie operačného systému ďalej budeme nazývať boot a operačný systém skratkou OS. Takže chronologicky sa štart PC môžeme popísať:
1. Číta sa pamäť CMOS (v nej sú uložené základné nastavenia, ktoré sa uchovávajú aj po vypnutí PC. Táto pamäť je napájaná na tzv. CMOS batériu, ktorá ma 5V. Proces zisťuje, aké periférie sú pripojené podľa nastavenia vlajky v zozname – teda napr. ak HDD ma vlajku 48 – ukazuje na automatické hľadanie HDD, lebo v zozname pod 48 je funkcia auto...).
2. Kontoluje sa RAM pamäť (zápisom na celú kapacitu a v prípade chyby spätného načítania sa označí daný blok ako vadný a ďalej sa zakáže ku nemu pristupovať) – iniciujú sa ďalšie kontroly: DMA, prerušenia, disky, klávesnica. Prerušenia sú akési premostenia BIOSu ku vstupu na zariadenie (firmware), aby sa nemuselo priamo volať zariadenie a hlavne aby sa unifikovali jednotlivé firmware (aby bol poriadok, takto sú výrobcovia nútený vyvíjať zariadenia pracujúce na rovnakých pravidlách).
3. Kontrola vonkajších zariadení na slotoch atď. To sa nazýva ROM-scan a následné zavádzanie firmware (firmware je akýsi už hardwarový ovládač, ktoré obsahuje takmer každé zariadenie, slúži totiž ku detekcii o aké zariadenie ide, jeho klasifikáciu, možnú kompatibilitu s iným hardware apod.). Teda napr. pri sieťových kartách je vďaka firmware možné hneď na úvode načítať operačný systém z iného počítača (bezdiskové stanice). Tento firmware je v OS ďalej doplnený a tzv. softwarové ovládače (drivers) už vytvárajú komunikačný medzičlánok medzi užívateľom, OS a zariadenia. OS niekedy blokujú priamy prístup ku firmware, jedná sa hlavne o otázku bezpečnosti a napríklad programátor sa môže odvolávať len na softwarový ovládač, priame ovládanie HW „mimo“ OS je zakázané. Jedná sa o otázku stability (zariadenia nemusia mať ošetrené niektoré vstupy a nekorektná práca by mohla spôsobiť pád celého systému, pričom užívateľ by nenadával na výrobcu zariadenia ale na výrobcu OS), alebo sa jedná o už spomínanú otázku bezpečnosti – lebo ak by napríklad OS nemal plnú kontrolu nad všetkým medzi software a hardware, tak škodlivé vírusy by sa mohli prípadne zapisovať priamo do interných pamätí a tak sa skrývať pred antivírusovými systémami apod.
4. Samotné nahrávanie OS
OS sa nahráva predovšetkým z diskových zariadení, či z iného PC. Ak sa nenájde žiaden OS, tak POST predáva riadenie ROM-Basicu – ak sa ROM-Basicu nepodarí nahrať systém z diskového zariadenia, použije sa tento vektor (18h). To umožňuje externým zariadeniam ROM-modulom presmerovať si tento vektor na seba.
Teda ľudskejšie. CMOS obsahuje informácie ako čas, dátum, ale aj to, z ktorého zariadenia a v akom poradí sa načíta OS. Áno, jedná sa o konfiguráciu BIOSu. Ak napríklad prenášame PC ku kamarátovi a tam ho zapojíme, stále si pamätá čas! Ako je to možné?! Ako sme si spomínali, na príčine je práve CMOS pamäť a tá je vyživovaná „CMOS“ batériou (ktorá sa môže vybiť).
Takže pri POSTe sa pozriem na spomínaný vektor presmerovania štartu. Ak dané zariadenie nekomunikuje korektne, zo zoznamu sa vyberie nasledujúce zariadenia a analogicky sa pokračuje ďalej.
Ako sme si z opisu mohli všimnúť jedná sa o vrstevný systém, s akým sa stretávame takmer na každom stupni ovládania systému (OSI...). Ak si zhrnieme štart, elektrika „obživí“ elektrónky (hardware), začnú pracovať aj ich čipové sady, ktoré obsahujú špeciálny (strojový) software – firmware, ktorý sa počítaču vedieť o prítomnosti „svojho zariadenia“ (výnimkou boli staré ISA „natívne“ karty). POST zahrnie zariadenie do „zoznamu súčastí“ a pozrie sa do nastavení BIOSu, ktorému z tohto zoznamu prenechá zvyšok štartu (boot systému). Ak takéto zariadenie nenájde (poškodenie, „vymontovanie“, alebo chybná konfigurácia), hodí sa hlásenie ROM-Basicu (nepliesť si to s hlásením zo zabudnutej nesystémovej diskety v mechanike pri štarte, tam sa našlo zariadenie, ktoré dokázalo prevziať „bootvaciu“ kontrolu, ale zlyhalo).
Predstavme si, že systém sme našli na pevnom disku. Dalo by sa povedať, že loader OS je na úrovni strojového kódu z firmware – je úplne univerzálny a nachádza sa na nultom sektore, tzv. MBR (Master Boot Record). Ten sa zavádza do pamäti (ako firmware, teda spolupracuje priamo s BIOSom, ale už nie tak, že poskytuje „svoje služby“, ale „berie“ to, čo mu ponúka, teda stavia na POSTe).
HDD ako vieme je rozdelený na sektory, cylindre, partície atď. Sektor MBR je najdôležitejšou súčasťou OS. Posledná časť sektoru obsahuje tabuľku rozdelenia (partition). S ňou pracuje napríklad program FDISK. Teda, keď sa načíta „firmware“ operačného systému, ktorý nazývame boot loader, tak prichádza na rad rozdelenie disku. Tento loader si musí vedieť predstaviť štruktúru HDD, aby vedel, kde ma „ďalej“ predať kontrolu načítania. Ako bolo spomínané, táto informácia sa nachádza na konci MBR. Tu je to „naše“ rozdelenie jedného disku na časť „C“ a „D“... Nie je to síce takto úplne jednoduché, ale nám to stačí. Teraz sa tento loader pozrie, na ktorom disku ma uložený štart OS a kontrolu predáva už priamo systému. Tento loader mnohí „nevidia“, ale jedná sa o univerzálny zavádzač, ktorý „má na svedomí“ to, že môžeme na jednom disku mať viacej operačných systémov. My si vyberieme zo zoznamu a on už predá kontrolu vyberanému zavádzačovi. A teda, keď si na WinXP nainštalujeme Linux, implicitne sa tam doinštaluje tzv. program LILO a pri štarte si vyberáme z pokračovanie z neho. Ak však vymažeme Linux, mnohí sa divia, prečo LILO ostalo. Je to prosté – LILO nie je Linux, je to iba „firmware OS“.
Teraz nasleduje časť skôr pre začínajúcich programátorov... Štruktúra záznamov partition o rozdelení disku:
Offset |
Veľkosť |
Časti |
Popis |
0 |
1 |
Boot |
Vlajka bootu: 0h – nie je aktívny 80h – aktívny |
1 |
1 |
Hl |
Číslo hlavy |
2 |
2 |
Sek – cyl |
Sektor a cylinder boot sektoru * |
4 |
1 |
Sys |
Kód systému ** |
5 |
1 |
Hl |
Číslo hlavy |
6 |
2 |
Sek – cyl |
Sektor a cylinder posledného vektoru |
8 |
4 |
Nižší-vyšší |
Číslo počiatočného relatívneho cylindru |
0ch |
4 |
Nižší-vyšší |
Veľkosť (celkom sektorov) |
10h |
|
|
Začiatok ďalšieho partition záznamu, alebo koniec 0aa55h |
Asi vám táto tabuľka veľa nehovorí. Každí sektor sa skladá z bajtov a pri MBR preberá kontrolu procesor. Takýto sektor je univerzálny a ďalšie sektory závisia od OS.
* sektory a cylindre sú 6bitové, resp. 10bitové :
5 |
4 |
3 |
2 |
1 |
0 |
9 |
8 |
7 |
6 |
5 |
4 |
3 |
2 |
1 |
0 |
c |
c |
c |
c |
c |
c |
c |
c |
C |
c |
S |
s |
s |
s |
s |
s |
** Napr:
01h FAT12
02h Xenix
04h FAT16
05h Extended DOS Partition
06h Big DOS
07h HPFS
64h Novell
Tento sektor bol častým cieľom inteligentných vírusov, pretože odkaz na boot sektor radi presmerujú na seba, zavedú do pamäte svoje telo pred zavedením OS (a potom oni zavedú systém, čím získajú plnú kontrolu nad všetkým, čo sa v systéme robí a pre antivírusový program sa stanú takmer neviditeľné). Tieto vírusy boli dosť nebezpečné, pretože emulovali niektoré BIOSacké inštrukcie, teda keď napríklad OS chcel zapísať údaje na disk, prikázal to o vrstvu nižšie – BIOSu. Ale, keďže vírus bol medzi OS a BIOSom, mohol preberať kontrolu a tváriť sa ako BIOS, pritom dáta v medzikomunikácií zašifrovať a takto ich odovzdať BIOSu na zápis (ktorý odovzdral firmware). Na tomto princípe pracoval aj u nás zrodení a známi vírus One-Half. Okrem toho, že dáta kódoval, ak OS chcel dáta naspäť tak BIOS vracal cez tento vírus zašifrované údaje a One-Hlaf ich spätne dešifroval a takto poslal OS. Tým pádom, užívateľ nemusel mať ani zdanie, že nejaký vírus existuje (ak by nebol deštrukčného charakteru) a ak by sa ho pokúsil odstrániť, všetky dáta by ostali na disku zakódované...
Dnešné OS, sa práve preto nespoliehajú na BIOS, ale pristupujú priamo ku firmware. Ešte Win9x to takto nerobili, ale napríklad Linux od vzniku zavádzal vlastnú inštrukčnú sadu!
Toto je zavádzací sektor OS na disku, ak by chcel niekto napísať vlastné „LILO“. Mal by vyzerať takto:
Offset Veľkosť Obsah
0 3 JMP + xx:xx Near skok na počiatok rutiny boot
3 8 WIN 32 Názov výrobcu OS
0bh 2 Počet bytov na sektor
0dh 1 Počet sektorov na alokačnú jednotku
0eh 2 Rezervované sektory
10h 1 Počet alokačných tabuliek sektoru
11h 2 Maximálny počet adr. položiek základného adresáru
13h 2 Celkový počet sektorov na zariadení
15h 1 Dekriptor média
16h 2 Počet sektorov v jednej FAT
18h 2 Počet sektorov na stope (cylinder)
1ah 2 Počet hláv
1ch 2 Počet skrytých sektorov
1eh 4 Special Hidden Sectors (Špeciálne skryté sektory)
20h 4 Big total number of sector (Veľký, celkový počet sektorov)
24h 2 Fyzické číslo disku
26h 1 Extended Boot Record Signature (Signatúra rozšíreného boot sek.)
27h 4 Volume Serial Number (Sériové číslo zväzku)
2bh 12 Názov zväzku doplnený medzerami
36h 8 Názov systému súborov (FAT16)