Baasvahetussüsteem

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.

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ä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 Megatrands, 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 ehk 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 algupäraselt Phoenixi baasvahetussüsteemi tuuma oma emaplaatidel 1995. aasta lõpuni, pärast mida see vahetati AMI vastu. AMI omi kasutati kuni aastani 1997, misjärel vahetati nende tarnija tagasi Phoenix’i 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.