Baasvahetussüsteem

**Baasvahetussüsteem** (inglise keeles *basic input/output system* ehk **BIOS**) on personaalarvuti riistvara juhtimiseks mõeldud madala taseme tarkvara, mis toimib liidesena riistvara ja operatsioonisüsteemi vahel.

Baasvahetussüsteem on mälus käitatav tarkvara ja see hõlmab riistvara operatsioonisüsteemiga liidestavaid seadmedraivereid. BIOS erineb muust tarkvarast selle poolest, et lisaks muutmällu laaditud süsteemiosale on osa süsteemist eellaaditud püsimällu.

Baasvahetussüsteem on esimene programm, mis arvuti sisselülitamisel käivitub. Selle ülesanne on tuvastada, käivitada ja testida riistvara (näiteks kõvaketas, videokaart jne) ning viia arvuti seisu, kus on võimalik kasutaja tarkvara käivitada. Arvuti kasutajal ei ole baasvahetussüsteemile juurdepääsu, kuid tavaliselt on arvutil olemas vahendid BIOS-i konfigureerimiseks.

Personaalarvuti baasvahetussüsteem võib asuda kolmes kohas:
* emaplaadi püsimälus;
* laienduskaartide püsimälus (näiteks videokaardil);
* kettal, millelt see laaditakse muutmällu (seadmedraiverid).

## Esimesed baasvahetussüsteemid

Personaalarvuti algusaegadel hõlmas baasvahetussüsteemi tarkvara kõiki süsteemi jaoks vajalikke draivereid ja asus emaplaadi püsimälu kiipidel kõrvuti käivitustesti (inglise keeles *power-on self test* ehk **POST**) ja alglaaduriga (inglise keeles *bootstrap loader*). Draiverid olid iseseisvad ja püsimälust igal ajal kasutatavad. Alglaadeprogramm oli disainitud disketil või kõvakettal asuva alglaadesektori olemasolu kontrollimiseks ja sellelt operatsioonisüsteemi laadimiseks. Pärast operatsioonisüsteemi laadimist võis see välja kutsuda baasvahetussüsteemis asuvaid madala taseme arvutiprogramme (seadmedraivereid) riistvaraga suhtlemiseks. Algselt säilitati kõik baasvahetussüsteemi seadmedraiverid emaplaadi püsimälus. Nendeks olid draiverid klaviatuuri, videokaardi, jada- ja rööpvärati, disketiseadme ja kõvaketta kontrolleri, juhtkangi ning kella jaoks.

## Emaplaadi püsimälu baasvahetussüsteem

Personaalarvuti emaplaadil asub püsimälu baasvahetussüsteemi kiip, mis koondab süsteemi käitamiseks ja riistvara liidestamiseks vajalikke alglaadimisprogramme ja draivereid. Süsteemi käivitamisel testivad käivitustestid süsteemi põhilisi komponente. Samuti on võimalik käivitada seadistusprogrammi, mis salvestab süsteemiseadeid CMOS-kiibile (inglise keeles *complementary metal-oxide semiconductor* ehk täiendav metalloksiid-pooljuht). CMOS-muutmälu nimetatakse sageli ka säilmäluks, kuna selle voolutarve on väike (üks mikroamper) ja see on võimeline andmeid säilitama mitme aasta vältel. CMOS-kiibi toitmiseks kasutatakse emaplaadil asuvat väikest liitiumpatareid.

Emaplaadi püsimälu sisaldab ühel või mitmel kiibil asuvat programmikogumit, mis arvuti sisselülitamisel käivitub esimesena (enne operatsioonisüsteemi laadimist). Suurem osa personaalarvutite baasvahetussüsteemidest täidavad peamiselt nelja funktsiooni:
* Käivitustest (**POST**) – testib arvuti protsessorit, mälu, kiibistikku, videokaarti, kettakontrollereid, kettaid, klaviatuuri ja teisi komponente;
* Häälestamine – süsteemi seadistusprogramm võimaldab määrata emaplaadi ning kiibistiku seadeid. Seadistusprogrammi saab tavaliselt juhtida menüüde abil, mis aktiveeritakse käivitustesti ajal spetsiaalse klahvi vajutamisega. Selle programmi abil saab muuta kuupäeva, aega, paroole, toitehaldust, kettaid ja (ketta)seadmete järjekorda alglaadimisel ning teisi süsteemiseadeid, mõnel süsteemil ka protsessori taktsageduse kordajat. Mõnel vanemal 286 ja 386 süsteemil ei asunud häälestusprogramm püsimälus, vaid see käivitati spetsiaalsetelt alglaadeketastelt ja mõned uuemad süsteemid kasutavad seadistamiseks Windowsi-baasil töötavat rakendust;
* Alglaadimine – programm, mis loeb kettaseadmete esimest füüsilist sektorit, otsides korrektset peabuutsektorit (inglise keeles *master boot sector* ehk **MBR**). Kui üks neist vastab teatud tingimusele (sektor lõppeb signatuurbaitidega 55h ja AAh), siis käivitatakse sektori alguse ja signatuuribaitide vahel asuv programmkood. Peabuutsektori programm jätkab alglaadeprotsessi, lugedes sisse esimese füüsilise sektori buuditavalt draivilt (füüsiliselt salvestusüksusest, näiteks kõvaketas, flopiketas, CD-ROM jne), mis on draivi buutsektori (inglise keeles *volume boot sector* ehk **VBR**) alguseks. Draivi buutsektor laadib seejärel esimese operatsioonisüsteemi faili, milleks on tavaliselt IO.SYS (Windows 9x/Me), ntldr (Windows XP/2000/NT) või bootmgr (Windows 7/Vista). Sellest alates kontrollib ja viib edasi alglaadeprotsessi juba operatsioonisüsteem.
* Baasvahetussüsteem (BIOS) – see viitab kogumile, mis on süsteemi töötamise ajal põhiliideseks operatsioonisüsteemi ja riistvara vahel. Kui käitada operatsioonisüsteemi DOS’i või Windowsi nn turvalises režiimis (inglise keeles *safe mode*), siis süsteemi käitatakse peaaegu vaid püsimälu baasvahetussüsteemi draiverite abil.

## Püsimälu riistvara

Püsimälu (ROM) on teatavat tüüpi mälu, mis saab püsivalt või poolpüsivalt hoida andmeid. Seda kutsutakse *püsivaks*, sest sellele on võimatu või keeruline kirjutada. Püsimälu kutsutakse ka säilmäluks, sest andmed, mis on salvestatud püsimällu, jäävad alles ka siis, kui toide on välja lülitatud, mis teeb sellest ideaalse koha, kuhu paigutada personaalarvuti käivitamisinstruktsioonid ehk tarkvara, mis laadib süsteemi üles.

Kui personaalarvuti käivitatakse, siis "hüppab" selle protsessor automaatselt mäluaadressile FFFF0h, lootes sealt leida eest instruktsioonid, mille protsessor peab järgmisena täitma. See asukoht on muutmälus, täpselt 16 baiti enne esimese megabaidi lõppu. Kui see koht oleks ühendatud tavaliste muutmälu kiipidega, siis mistahes sinna salvestatud andmed kaoksid pärast toite väljalülitamist ja protsessor ei leiaks enam ühtegi instruktsiooni, mida täita, kui toide taas sisse lülitatakse. Püsimälukiibi paigutamisel just sellele aadressile on alglaadeprogramm püsivalt laaditud püsimällu ja kättesaadav iga kord, kui süsteem lülitatakse sisse.

Tavaliselt algab süsteemi püsimälu aadressilt E0000h või F0000h, mis on 128 kB või 64 kB enne esimese megabaidi lõppu. Kuna püsimälu kiibi suurus on tavaliselt kuni 128 kB, võivad püsimälu programmid enda alla haarata terve viimase 128 kB ploki esimesest megabaidist, sh kriitilise FFFF0h alglaadeinstruktsiooni asukoha aadressi, mis asub 16 baidi kaugusel baasvahetussüsteemi lõpust. Mõne emaplaadi püsimälu kiibid on suuremad: kuni 256 kB või 512 kB. Nendes olev täiendav kood käitub videokaardi püsimäluna (aadressivahemik C0000h-C7FFFh) emaplaatidel, kus videokaart on sisseehitatud ja võivad isegi sisaldada püsimälu draivereid aadressivahemikus C8000h kuni DFFFFh, et toetada teisigi sisseehitatud seadmeid, näiteks SCSI-d või võrguseadmeid.

Laienduskaartide püsimälud skaneeritakse ja loetakse automaatselt emaplaadi püsimälu poolt varases alglaadeprotsessi etapis käivitustesti ajal. Emaplaadi püsimälu skaneerib spetsiaalset muutmälu ala, mis on reserveeritud laienduskaartide püsimälule (aadressid C0000h-DFFFFh), otsides 55AAh signatuurbaite. See ala viitab püsimälu algusele.

Kõik laienduskaartide püsimälud peavad algama baitide 55AAh-ga, muidu ei tunne emaplaat neid ära. Kolmas bait viitab püsimälu suurusele 512-baidistes ühikutes, mida kutsutakse paragrahvideks, ja neljas bait on tegelik draiveriprogrammide algus. Suuruse baiti kasutab emaplaadi püsimälu testimisel. Emaplaadi püsimälu liidab kõik püsimälude peal olevad baidid kokku ja jagab saadud summa baitide arvuga. Selle tulemusel peaks tekkima jääk, mis on 100h. Programmeerija kasutabki laienduskaardile püsimälu luues tavaliselt nn täitebaite, et kontrollsumma (inglise keeles *checksum*) tuleks õige. Kasutades kontrollsummat, testib emaplaat käivitustesti ajal igat laienduskaardi püsimälu ja märgib ära kõik need, mis on rikutud.

Emaplaadi püsimälu käivitab kõik skaneerimise ajal leitud programmid, mis asuvad laienduskaartide püsimäludes. Seda näeb enamikus süsteemides, kui need käivitada, ja ka käivitustesti ajal, kui videokaardi baasvahetussüsteem initsialiseerib ja annab teada oma kohalolekust.

## Püsimälu varjutamine

Püsimälu kiibid on väga aeglased, omades 150-nanosekundilist pöördumisaega, võrreldes dünaamilise muutmälu (inglise keeles *dynamic random access memory* ehk **DRAM**) pöördumisajaga, mis on enamikus süsteemides alla 10 nanosekundi. Seetõttu on praktiliselt kõikides süsteemides olevad püsimälud varjutatud, mis tähendab, et nad on kopeeritud muutmällu alglaadimise ajal, seda kiirema juurdepääsu saavutamise eesmärgil tavapärase kasutamise ajaks. Varjutamise protseduur kopeerib püsimälu muutmällu ja määrab siis muutmälule sama aadressi, mida püsimälu eelnevalt kasutas, blokeerides protsessi käigus tegeliku püsimälu. Seda võib vaadelda ka kui püsimälu, mis töötab muutmälu kiirusega.

Jõudluse kasv laienduskaartide varjutamisel on väga vähene ja võib tekitada probleeme, kui see pole korrektselt seadistatud. Seetõttu oleks enamasti mõistlik varjutada ainult emaplaadi püsimälu (ja võib-olla ka videokaardi oma) ja jätta teised rahule.

Tüüpiliselt on varjutamine kasulik ainult 16-bitiste operatsioonisüsteemide kasutamisel, näiteks DOS ja Windows 3.x-i puhul. Kui käitada 32-bitist või 64-bitist operatsioonisüsteemi, siis on varjutamine praktiliselt kasutu, sest need operatsioonisüsteemid ei kasuta töötamise ajal 16-bitist püsimälu koodi. Selle asemel need operatsioonisüsteemid laadivad draiverid muutmällu, mis asendavad 16-bitist püsimälu koodi, mida kasutatakse ainult alglaadimisel.

## Püsimälukiibi tüübid

Personaalarvutites kasutatavad põhilised püsimälutüübid on järgmised:
* püsimälu (ROM);
* programmeeritav püsimälu (PROM);
* ümberprogrammeeritav püsimälu (EPROM);
* elektriliselt ümberprogrammeeritav püsimälu (EEPROM), tuntud ka välk-püsimälu (*flash* ROM) nime all.

Olenemata püsimälu tüübist, mida süsteem kasutab, on selles salvestatud andmed püsivad ja jäävadki selliseks, juhul kui neid meelega ei kustutata või üle ei kirjutata (nendes, kus on see võimalik).

Kuni 1990. alguseni salvestati BIOS ROM- ja PROM-kiipide peale, mida ei saa ümber programmeerida. Kui süsteemid läksid keerulisemaks ja ümberprogrammeeritavad mälud muutusid odavamaks, hakati kasutama EEPROM- ja flash-mäluseadmeid.

## Püsimälu baasvahetussüsteemi tootjad

Mitmed populaarsed baasvahetussüsteemide tootjad tänasel turul varustavad valdava osa emaplaatide ja süsteemide tootjate püsimälusid oma koodiga.

Mitmed ettevõtted on spetsialiseerunud ühilduva püsimälu baasvahetussüsteemi toote arendamisele. Kolm suuremat nendest on American Megatrends, Inc. (AMI), Phoenix Technologies ja Award Software (nüüdne omanik on Phoenix Technologies). Iga ettevõte litsentsib oma püsimälu baasvahetussüsteemi emaplaadi tootjatele nii, et tootjad saavad keskenduda pigem riistvarale kui tarkvarale. Saamaks ühte sellist püsimälu oma emaplaadi peale, peab originaalseadmete tootja (inglise keeles *original equipment manufacturer* – OEM) vastama paljudele küsimustele süsteemi disaini kohta, mis võimaldaks arendada või valida olemasolevate hulgast sobivat baasvahetussüsteemi. Püsimälu baasvahetussüsteemi kombineerimine ei ole õnnele toetuv ülesanne, samas ei ole ka olemas ühte kindlat ja üldist ning kõigega ühilduvat püsimälu. AMI, Award ja Phoenix tarnivad mitmeid variatsioone oma baasvahetussüsteemi koodist paljudele emaplaaditootjatele, igaüks neist on valminud eritellimusena spetsiifilisele emaplaadile.

Üle aastate on toimunud suured muutused baasvahetussüsteemitööstuses. Intel, võib-olla suurim baasvahetusüsteemide klient, on vahetanud nende tarnijat Phoenixi ja AMI vahel oma enamuse emaplaatide jaoks. Intel kasutas Phoenixi baasvahetussüsteemi tuuma oma emaplaatidel 1995. aasta lõpuni, siis vahetati see AMI vastu. AMI omi kasutati kuni 1997. aastani, misjärel vahetati nende tarnija tagasi Phoenixi vastu. Aastal 1999 Intel vahetas jälle, tol korral jälle AMI vastu. Pole vahet, kas Intel sai oma baasvahetussüsteemi tuuma Phoenixilt või AMI-lt, on need tugevalt kohandatud vastavalt eraldi emaplaatide jaoks, kuhu nad on paigaldatud.

Teine suur areng toimus 1998. aasta lõpus, kui Phoenix ostis Awardi. Sellest alates on Phoenix müünud mõlemaid Phoenixi ja Awardi baasvahetussüsteemi erinevate toodetena. Award’i baasvahetussüsteemi müüakse kui standardset toodet, samal ajal kui Phoenixi baasvahetussüsteemi müüakse kui võimalusterohket baasvahetussüsteemi keerulistemate süsteemide jaoks. Hetkel on baasvahetussüsteemiturg enamuselt jagatud AMI ja Phoenixi vahel, aga Phoenix ei arenda ainult baasvahetussüsteemi mitmetele süsteemidele, vaid on ka esmane baasvahetussüsteemi arendaja, kes vastutab uute baasvahetussüsteemide arenduse ja nende stardardimise eest.

## Baasvahetussüsteemi tark- ja riistvara

Süsteemi alglaadimise võimekuse tagamiseks peavad olulised draiverid olema süsteemi alglaadimise ajal aktiivsed, näiteks peab minimaalne hulk kõvakettadraivereid olema eellaaditud kas emaplaadi või laienduskaardi püsimällu.

Paljud laienduskaardid on alati varustatud püsimäluga:

* Videokaart – kõik on varustatud baasvahetussüsteemiga.
* RAID-kaardid (*Redundant Array of Independent Disks* ehk sõltumate ketaste liiasmassiiv) – laienduskaardid, mis võimaldavad lisada palju kettaseadmeid ja paigutada neid eri viisil, tõhustamaks töökindlust, liiasust ja/või jõudlust. Need laienduskaardid vajavad samal kaardil asuvat baasvahetussüsteemi, mis võimaldaks sellel kettamassiivil olla alglaaditav.
* Võrgukaardid – alglaadimise püsimäluga (inglise keeles *boot* ROM) ehk alglaaduriga (*initial program load*) kaardid võimaldavad alglaadimist teha otse failiserverist, mis võimaldab personaalarvuti seadistada kohtvõrgus töötavaks kettata tööjaamaks. Selliseid tööjaamu nimetatakse ka võrguarvutiteks, õhukesteks klientideks või nutikateks terminalideks.
* ATA/SATA või disketiseadmete uuenduskaardid – kaardid, mis võimaldavad ühendada rohkem või erinevaid kettaseadmeid, mida tavaliselt toetab ainult emaplaat. Need kaardid vajavad samuti samal kaardil asuvat baasvahetussüsteemi, mis võimaldaks neil ketastel olla alglaaditavad.
* SCSI adapterid – sellised, mis võimaldavad alglaadimist SCSI kõvaketastelt või optilistelt seadmetelt.
* Y2K kaardid – kaardid, mis hõlmavad baasvahetussüsteemi parandusi, uuendamaks sajandibaiti CMOS muutmälus. Nendel kaartidel on väike draiver baasvahetussüsteemis, mis jälgib aastabaidi muutumist 99-st 00-ks. Kui see juhtub, siis see draiver uuendab sajandibaiti 19-st 20-ks, parandades viga, mis esineb mõnedes vanemates emaplaatide püsimälu baasvahetussüsteemides.

## Viited

## Välislingid
* What BIOS Does
* System BIOS
* BIOS Basics