Bootning

Från Wikipedia
(Omdirigerad från Boota)

Bootning, Initial Program Load eller svenska kallstart[1] är en term för processen som startar igång ett operativsystem på en apparat när strömmen slås på. Med bootsekvens avses de operationer som apparat genomför efter strömpåslag som leder till att datorn är driftklar.

Ordets ursprung[redigera | redigera wikitext]

Ordet "bootning" kommer från det engelska substantivet booting, en förkortning av bootstrapping, som i sin tur är en sammanfattning av det paradoxala engelska uttrycket lift oneself up by the bootstraps (att lyfta sig själv i stövelremmarna). Uttrycket syftar på en legend om Baron von Münchhausen som kunde lyfta upp sig ur ett träsk genom att dra sig själv i håret; denna legend förändrades i senare versioner till att han använde sig av sina stövelremmar för att dra ut sig ur havet. Uttrycket syftar således på någonting som verkar enkelt men egentligen inte går att göra - Att få en dator att köra programmen som behövs för att starta datorn kräver egentligen att datorn redan är startad.

Bootloader[redigera | redigera wikitext]

De flesta datorer kan enbart utföra instruktioner som befinner sig i minnet (antingen RAM eller ROM). Moderna operativsystem lagras på hårddiskar, eller ibland på Live-CD:er, flashminnen eller andra icke-flyktiga lagringsenheter. När datorn först slås på finns inte operativsystemet i minnet, och datorns hårdvara kan inte på egen hand genomföra en sådan komplex operation som att läsa in ett program från disk. Programmen för att läsa från disk ligger normalt i operativsystemet. Alltså en paradox: för att kunna läsa in operativsystemet, verkar det som om man måste redan ha operativsystemet laddat.

Lösningen på paradoxen är att använda ett litet specialskrivet program, kallat bootloader, vars enda uppgift är att läsa in andra program för att hjälpa igång operativsystemet. Detta program ligger i ROM, alltså minne varifrån processorn direkt kan exekvera, men som inte försvinner när strömmen stängts av. Ofta används flerstegs-bootloaders, där flera program läser in och anropar varandra successivt tills det sist läser in själva operativsystemet. Det steg i en PC som kan läsa hårddisken utan att ha laddat något från hårddisken kallas BIOS eller på nyare datorer UEFI. Nästa steg ligger på en fast plats på hårddisken, oftast först, och det körs sedan och vet hur operativsystemet ska laddas. Det kallas också bootloader, åtminstone i Windows. För att göra datorn snabbare ligger rutinerna som normalt läser hårddisken i RAM och hör till operativsystemet som alltså måste laddas.

Tidiga datorsystem hade en rad med strömbrytare på sin frontpanel som tillät operatören att manuellt mata in bootloaderns maskinkodsinstruktioner i minnet, för att sedan starta CPU:n. Bootloadern kunde sedan läsa in operativsystemet från ett extern medium som hålremsa, hålkort eller trumminne. Pseudokoden för en sådan bootloader kan vara så enkel som den följande:

0: ge registret P värdet 8
1: kolla om läsaren är beredd
2: om så inte är fallet, gå till steg 1
3: läs in en byte från läsaren till register A
4: om läsaren har läst slut remsan, hoppa till 8
5: lagra A i minnesadressen P
6: öka P med 1
7: gå till steg 1

I moderna datorer börjar processen med att processorn börjar exekvera maskinkodsinstruktioner på en fast adress (hos en x86-kompatibel processor är denna adress 0xF000:0xFFF0). På PC-kompatibla datorer finns BIOSets startinstruktioner just där. BIOS bootloader letar då efter enheter som går att boota ifrån, väljer den lämpligaste av dessa, och läser ett litet program från en speciell sektion av enheten, oftast bootsektorn.

Bootloaders möter stora begränsningar, framförallt storleksmässiga. Exempelvis måste det första steget i en bootloader på en PC-kompatibel dator få plats i de första 446 bytes i MBR, för att ge plats åt partitionstabellen (64 byte) och en tvåbytes 'signatur' (0xAA 0x55) som BIOS kräver för att identifiera en bootloader.

Det lilla programmet som BIOS hämtat från enheten är oftast inte i sig ett komplett operativsystem, men bara en 'sekundär bootloader'. Några exempel på sådana är NTLDR, LILO eller GRUB. Dessa måste nu i sin tur läsa in resten av operativsystemet i minnet och sedan ge över kontrollen till det. Operativsystemet initierar sig då, läser in fler drivrutiner och startar ytterliga program som krävs för att operativsystemet skall fungera.

Bootningen betraktas som klar när datorn är färdig att användas. Det tar ungefär en minut för typiska moderna PC-datorer att boota, varav ungefär 15 sekunder består i BIOS självtest (POST), medan somliga servrar kan ta många minuter att boota och starta alla tjänster.

De flesta inbyggda system måste boota nästan omedelbart, då få konsumenter skulle acceptera att vänta kanske en minut innan en TV kommer igång eller en bil ska starta. Därför har sådana system sina operativsystem helt i ROM- eller flashminnen så att det kan exekveras direkt (ändå tar det ofta några sekunder, under vilken det ofta körs en kul animation för att försöka hålla otåliga användare nöjda). Vid nedladdning av programvara i dessa system dyker särskilda problem upp, att programmet för att programmera minnet måste ligga i RAM, vilket löses med en särskild bootloader som läses till RAM.

BIOS-bootenheter[redigera | redigera wikitext]

BIOS-bootenheterna är de enheter som måste vara initierade före operativsystemet läses in. Bland dessa räknas dels det som behövs för att möjliggöra konfiguration och felsökning av lagringsenheten, såsom den primära inenheten (tangentbord, ev. mus) och den primära utenheten (bildskärm). Dels själva lagringsenheten som operativsystemet är lagrat på (diskett, hårddisk, CD-ROM, flashminne, ett nätverkskort som använder sig av PXE m.fl.) I ett modernt BIOS kan användaren rangordna en lista av flera enheter från vilka BIOS gör försök att boota. Hittar BIOS inte ett bootbart operativsystem på den första enheten i listan försöker den boota på nästa enhet i listan tills antingen ett operativsystem är laddat eller listan tar slut. Bootningen har i det sista fallet misslyckats och ett felmeddelande visas på skärmen.

Källhänvisningar[redigera | redigera wikitext]