Alglaadimine

**Alglaadimine** (slängis **buutimine**) on protsess, mis leiab, laeb ja käivitab arvuti sisselülitamisel arvutis oleva operatsioonisüsteemi. 

Alates 1950. aastate keskpaigast kuni tänapäevani on buutimist (edaspidi alglaadimist) kasutatud operatsioonisüsteemi laadimiseks arvuti põhimälusse. 

Sõna "boot" (ingl. k. saabas) ise tuleb sõnast "bootstrap", mis tähendab saapasääre tagaserva külge kinnitatud aasa, mis aitab saabast hõlpsasti jalga tõmmata. See mõiste viitab paradoksile, et arvuti ei suuda käivituda ilma alglaadimistarkvarata, kuigi peab töötama enne, kui tarkvara saab laaditud.

Lisaks alglaadimisele on kasutusel ka mõiste taaskäivitamine ehk "reboot", mis tähendab arvuti töö peatamist ja kohest alglaadimist. 

### Ajalugu
1950. aastate arvutites hakkas alglaadimisnupu vajutamisel spetsiaalne programm lugema alglaadimistoiminguid perfokaardilt, magnetlindilt, magnetmälust või magnetkõvakettalt. Pärast info sisselugemist või töötlemist käivitati alglaadimisprogramm, mille abil laaditi järgmised suuremad programmide süsteemid vastavatelt meediumitelt mällu ilma operaatori sekkumiseta.

Terminit "boot" on kasutatud sellises tähenduses alates 1958. aastast. Näiteks arvutil IBM 701 (eksisteeris aastatel 1952–1956) oli laadimisnupp, mis alustas koodi lugemist esimesest 36-bitisest sõnast perfokaardilt, magnetlindilt või magnettrumlilt. Vasakpoolne 18-bitine poolsõna oli sel juhul antud juhisena, mille abil oli võimalik lugeda täiendavad sõnad mällu. Sarnaselt kasutas ka IBM 1401 (aastal 1958) kaardilugerit selleks, et laadida programm arvutisse mitmelt perfokaardilt. Igalt kaardilt loeti 80 tähemärki. Esimeses märgis oli käsk liigutada loetud info mälus õigesse asukohta ja viimases märgis oli käsk lugeda sisse järgmine perfokaart. Sisuliselt oli see järjestikune protsess, kus iga perfokaart "bootstrappis" mällu järgmise. Lõpuks oli arvuti mälus kõikide kaartide pealt loetud programmi kood.

### Alglaadur
Arvuti keskprotsessor saab käivitada ainult programmi koodi, mis asub püsimälus (ROM), muutmälus (RAM) või (1950.–1970. aastate arvutites) arvuti esipaneeli lülitites. Uutes arvutites hoitakse rakenduste koodi ja andmeid seadmetes, mis suudavad infot hoida ka siis, kui need seadmed pole vooluvõrgus või sisse lülitatud. Nendeks on enamasti kõvakettad ja SSD-d, CD-d, DVD-d, välkmälud (SD-kaardid), USB-mälupulgad ja flopid/disketid. Kui arvuti esimest korda sisse lülitada, siis tavaliselt ei ole operatsioonisüsteem salvestatud ei püsimällu ega muutmällu. Arvuti peab esmalt käivitama suhteliselt väikese püsimällu salvestatud programmi, mille abil operatsioonisüsteemi programmid ja andmed laaditakse muutmällu. 

See väike programm on alglaadur (ka buudilaadur ja *"bootstrap"*). Alglaaduri töö on kontrollida ka riistvara töövõimelisust, ühendatud seamete olemasolu ning teisi arvuti töö jaoks vajalikke tingimusi. Alglaaduri töö koosneb tihti mitmest eri etapist. Sel juhul laaditakse need alamprogrrammid ja protsessid üksteise järel ahellaadimisena.

Varasematel arvutitel (IBM 650, DEC PDP-5 – PDP-8, PDP-11 esimesed mudelid ja algsed mikroarvutid, nagu näiteks Altair 8800) oli rida valikuid ja lüliteid esipaneelil.  Need võimaldasid arvuti operaatoril alglaadimisjuhised käsitsi mällu sisestada ja seejärel juhtimine CPU-le edasi anda. Nende valikute ja lülitite abil sai juhiseid ka otse protsessorile saata. Huvitaval kombel omas PDP-1 riistvarasse sisseehitatud laadurit – sellist, kus operaator pidi ainult vajutama "laadmislülitit" ja perfolindiluger luges automaatselt koodi otse tuumamälusse.

Väiksemad arvutid kasutavad tihti vähem paindlikke, kuid rohkem automatiseeritud alglaadimismehhanisme, et kindlustada arvuti võimalikult kiire käivitus ja etteantud tarkvara konfiguratsiooni normaalne üleslaadimine. Paljudes lauaarvutites käivitub alglaadimisprotsess siis, kui CPU käivitab tarkavara, mis asub ROM-il (näiteks BIOS IBM PC-l) (ka mõned CPU-d, sh Inteli x86 seeria, on välja töötatud seda tarkvara käivitama ka pärast lähtestamist ja seda ilma välise abita). See tarkvara sisaldab algelist funktsiooni, mis otsib alglaadimisel osalevaid seadmeid. Seega laadivad nad väikese programmi kõige lootustandvama seadme spetsiaalsest sektsioonist (enamasti alglaadimissektsioonist). Mõnedel arvutitel on operatsioonisüsteem ja riistvara omavahel nii tugevalt seotud, et on võimalik kasutada ainult ühte, standardset operatsioonisüsteemi või selle variante. Selline alglaadimine on väga jäik, aga suhteliselt veavaba ja töökindel. Üks võimalik lahendus sellise olukorra jaoks on luua eraldi alglaadur, mis töötab standardse operatsioonisüsteemi programmina. Seejärel võtab alglaadur süsteemi üle ja laadib teise, alternatiivse OS-i. Sellist tehnikat kasutati ka Apple'il A/UX UNIX-i implementeerimisel ning seda on kopeerinud ka mitmesugusted vabavaralised operatsioonisüsteemid.

Üldiselt sisaldavad peamised alglaadurid järgmisi komponente:
* BIOS
* EFI
* OpenBIOS
* OpenBoot
* SLOF

### Teise taseme alglaadur

Teise taseme alglaadurid (näiteks GRUB, BOOTMGR, Syslinux, LILO või NTLDR) enamasti ei ole operatsioonisüsteemid, ent samas on need võimelised operatsioonisüsteemi käivitama ja on võimelised juhtimist operatsioonisüsteemidele üle andma. Operatsioonisüsteemid ise on võimelised ennast initsialiseerima ja laadima arvutiriistvarale draivereid. Draiverid on eelkõige vajalikud riistvaraga suhtlemiseks. Kui draiverid on laaditud, hakkab operatsioonisüsteem laadima tavaliselt süsteemis olevaid programme.

Tavaliste arvutite alglaadimisel on tihti määratud teatud ajaline viivitus, mille käigus saab kasutaja mõnda klahvi vajutades alglaadimise peatada või seda seadistada. Mitmeid alglaadureid (nt GRUB, BOOTMGR, LILO, ja NTLDR) saab konfigureerida nii, et kasutajal on võimalus valida operatsioonisüsteem, mida ta soovib käivitada. Need alglaadurid tekitavad iseseisvalt nimekirja eri operatsioonisüsteemidest, mis on kõvakettale paigaldatud. Veel on võimalus valida ühe operatsioonisüsteemi erinevaid versioone ja alglaadimisparameetreid (näiteks alglaadimine taasterežiimis või alglaadimine mõne vanema tuuma ehk kerneliga). Alglaadur tunneb ära ka eraldiseisvad, operatsioonisüsteemita käivituvad programmid, näiteks mälutesterid ja mõned mängud. 

Alglaadimisprotsessi võib lugeda lõpetatuks, kui arvuti on võimeline suhtlema kasutajaga või operatsioonisüsteem on võimeline iseseisvalt käivitama ja töös hoidma programme ning protsesse. Tüüpilise tänapäevase arvuti alglaadimiseks kulub kuni üks minut ning see aeg lüheneb tänu tehnika ja tarkvara kiirele arengule. Sellest ajast umbes 15 sekundit võtab enesetest (POST – power-on self test) või video BIOS-i laadimine. Suurtel serveritel kulub mitu minutit, kuni süsteem saab kõik vajalikud alglaadimised tehtud. Paljud sisseehitatud süsteemid teevad alglaadimist viivitamatult. Näiteks kui digitelevisiooni või nutiseadme alglaadimine võtaks aega üle minuti, siis ilmselgelt kasutajad sellega rahul ei oleks. Seepärast on sellistes süsteemides tarkvara otse laaditud ROM-i või mõnda kiiresse välkmällu, nii et seade hakkaks toimima võimalikult kiiresti.

### Alglaadimine arvutivõrgust või serverist

Paljud tavalised arvutid on võimelised tegema alglaadimist üle arvutivõrgu. Sel juhul on operatsioonisüsteem salvestatud serveri kõvakettale. Enamasti toimub suhtlus kliendi (alglaadimist sooritava arvuti) ja serveri vahel üle lihtsa protokolli, milleks on Trivial File Transfer Protocol. Pärast teatud etappe kliendi ja serveri vahel võtab alglaadimisel operatsioonisüsteem sujuvalt juhtimise üle.

### Alglaadimisseadmed (IBM PC)

Alglaadimisseade on seade, millelt laaditakse operatsioonisüsteem. Moodsad PC BIOS-id toetavad alglaadimist mitmelt seadmelt, tavaliselt kõvakettalt (või selle partitsioonidelt), optilistelt seadmetelt, USB-seadmetelt, mälukaartidelt ja ka võrguseadmetelt, kasutades PXE-d. Vanemad, vähem levinud alglaadimisseadmed sisaldasid flopikettaid, SCSI-seadmeid, Zip-kettaid ja LS-120-kettaid. Tavaliselt võimaldab BIOS-i kasutajal alglaadimisjärjekorda muuta. Näiteks kui alglaadimisjärjekorras panna esimeseks DVD-draiv, teiseks kõvaketas, siis BIOS vaikimisi teeb alglaadimise DVD-seadmelt. Kui see ebaõnnestub (juhul kui pole DVD plaati sisestatud või kui plaat ei toeta alglaadimist), proovib BIOS teha automaatselt alglaadimist järgmiselt seadmelt nimekirjas, antud näites on selleks kõvaketas.

### Alglaadimise turvalisus
Alglaadimisest saab alguse kogu ülejäänud operatsioonisüsteemi ja seadme turvalisus - võimalus käivitada erinevaid operatsioonisüsteeme või nende režiime, ligipääs seadmetele ja liidestele, ligipääs seadmes asuvatele turvavõtmetele või krüpteeritud salvestusseadmetele. Turvalisus võib seejuures olla suunatud nii seadme kasutaja kaitseks kui tema vastu. Näiteks võib telefoni tootja soovida, et selle riistvara peal ei saaks kasutada konkurendi operatsioonisüsteemi, või võib ettevõtte administraator nõuda, et ettevõtte arvutid kasutaks ainult ettevõtte poolt määratud süsteemi. Operatsioonisüsteemi tootja ise võib tahta kontrollida, et operatsioonisüsteem ja selle litsents on legaalsed, et süsteemi olulised osad on rikkumata ning et arvutis ei ole pahavara. 

Lahendused alglaadimise turbe jaoks sõltuvad konkreetsest seadmetüübist. 

PC-tüüpi arvutitel on olnud võimalus seada arvuti alglaadimisele salasõna ("BIOS password"). Ilma seda teadmata ei saa arvutit ei käivitada ega selle seadeid muuta. Sellest turvameetmest on siiski võimalik mitmel viisil mööda minna ning see ei kaitse ka arvuti kõvaketaste sisu.  

Standardne mehhanism PC-tüüpi arvutite alglaadimise turbe jaoks on "UEFI Secure Boot". See suudab kasutada arvutites olevat riistvaralist turvamoodulit (TPM) ja tagada nii operatsioonisüsteemi tootja (Microsofti) kui arvuti kasutaja või administraatori turvanõuete täitmise. Apple arvutites on sarnane mehhanism ning turvamoodul (Apple T2). Ka mobiiltelefonide ja muude nutiseadmete alglaadimise turvamiseks on kasutusel samasugused mehhanismid. Nutiseadmete puhul on kasutaja valikuvõimalused alglaadimise seadistamiseks või selle käiku sekkumiseks enamasti väga piiratud ning paindlikkus ei ole üldiselt eesmärk.   

Alglaadimise turvalisus on pideva andmeturbe-alase uurismitöö ("security research") teema. Otsitakse nii olemasolevate lahenduste nõrkusi kui tehnilisi võimalusi uute seadmete, eriti nutitelefonide ja ärikasutuses olevate arvutite turvalisust tõsta.  

### Ülejäänud buutimisjärjekorrad

Mõnel protsessoril on kasutusel teistsugune alglaadimise režiim.

CPU ja mikrokontrollerite buutimiseks on olemas alternatiivseid tehnikaid.

* Mõnedes kaasaegsetes protsessorites ja mikrokontrollerites (näiteks TI OMAP ja DSP) võib olla alglaadimis-ROM, millel on alglaadimiskood integreeritud otse ränisse. Nendeks võivad olla protsessorid, mis suudavad täita üsna keerukaid alglaadimisjärjekordasid ning laadida alglaadimisprogramme erinevatele seadmetele nagu näiteks NAND flash, SD või MMC. Alglaadimis-ROM-i kasutamine võimaldab paindlikumaid alglaadimisjärjestusi, mida riistvaraline loogika ei suudaks pakkuda. Näiteks alglaadimis-ROM-il on võimalus teha alglaadimist mitmest alglaadimiskohast. Samuti on alglaadimis-ROM sageli võimeline laadima alglaaduri või diagnoosimisprogrammi läbi serial-liideste, nendeks võiksid olla näiteks UART, SPI, USB jt ühendusmeetodid. Seda funktsiooni kasutatakse sageli süsteemi taastamiseks, kui mingil põhjusel on tavalise buutimistarkvara püsimälu kustunud või kahjustunud. Lisaks saab seda tehnikat kasutada ka esialgse mittepöörleva (*flash*) mälu programmeerimisel.
* Lisaks on võimalus kontrollida süsteemi, kasutades JTAG nimelist riistvara silumise keskkonda. Selliseid liideseid kasutatakse alglaadimisprogrammi alglaaditavasse mittepöörlevasse mällu (nagu *flash*) kirjutamiseks. Seejärel juhendatakse protsessori tuumasid, et täita vajalikud ülesanded. Silumiskeskkonda võib olla vaja ka selleks, et laadida mõnda alglaadimiskoodi RAM-i ning protsessori tuuma käivitamisel juhendatakse üleslaaditud kood käivitamisele. Mõned mikrokontrollerid suudavad pakkuda spetsiaalseid riistvara liideseid. Neid seadmeid ei saa suvaliselt enda kontrolli alla võtta ega saa ka koodi otse riistvaralt käivitada. Tavaliselt on sellistele mikrokontrolleritele võimalik sisestada alglaadimiskood buutivasse mittepöörlevasse mällu (nagu *flash*) lihtsate protokollidega. Pärast süsteemi taaskäivitamist või lähtestamist käivitab mikrokontroller välkmällu programmeeritud koodi nii nagu tavaliselt kasutavad protsessorid ROM-i alglaadimisel.
*Virtuaalarvutite lai kasutus, eriti pilvepõhised arvutuskeskkonnad on loonud uue kategooria arvuteid, millel ei ole otsest ligipääsu reaalsele riistvarale ega seadmetele. Sellise arvuti alglaadimine on virtualiseerimiskeskkonna kontrolli all. Samas on endiselt kasutusel füüsiliste arvutite paradigmad nagu BIOS, EFI / UEFI, seadmete ohjurid (draiverid) jne. 

## Viited

## Välislingid
* Booting, what is
* Boot, vallaste.ee
* Boot, webopedia.com