12.2. A rendszerindítás problémája

Az operációs rendszer elindítása a számítógép bekapcsolása után egy felettébb érdekes problémát vet fel. Definíció szerint a számítógép ugyanis egy lépést sem tud megtenni az operációs rendszer elindulása nélkül. Például nem tud programokat futtatni a lemezről. Eszerint ha a számítógépünk nem képes programokat futtatni a lemezről az operációs rendszer segítsége nélkül, viszont az operációs rendszer programjai a lemezen vannak, mégis hogyan képes elindulni maga az operációs rendszer?

Maga a probléma a Münchhausen báró kalandjai c. könyvben leírtakhoz hasonló. A történet szerint ugyanis a főszereplő egy mocsárban ragadt derék lovával, azonban sikerült kihúznia magát belőle a saját hajánál fogva. Ez a motívum vált a számítógépek hőskorában a rendszerbetöltés alapjává, vagyis ahogyan betöltötték az operációs rendszereket. (Ford.: ezt az angolban bootstrappingnek hívják, mivel a történet angol változata szerint a csizmáján (boot) emelkedett ki. Ebből alakult ki később az elterjedt bootolás szó is.)

Az x86-os konfigurációkon a BIOS (Basic Input/Output System, avagy alapvető be- és kimeneti rendszer) felelős az operációs rendszer betöltéséért. Ehhez a BIOS először megkeresi a merevlemez egy speciális helyén található Master Boot Record-ot (MBR). A BIOS elegendő tudással rendelkezik az MBR beolvasásához és lefuttatásához, és feltételezi, hogy az MBR majd elvégzi az operációs rendszer betöltéséhez szükséges további feladatokat, helyenként a BIOS közreműködésével.

Az MBR-ben található programkódot hívják általában boot managernek, kiváltképp abban az esetben, amikor az a felhasználóval is kommunikál. Ilyenkor a boot manager többnyire további kódot tartalmaz a lemez első sávján vagy az egyik állományrendszerben. (A boot managereket néha boot loadernek is nevezzük, de a FreeBSD-s terminológia ezt a kifejezést a rendszerindítás egy későbbi fokozatára használja.) Népszerűbb boot managerek: boot0 (avagy Boot Easy, a FreeBSD alapvető boot managere), GRUB, GAG és a LILO. (Ezek közül egyedül csak a boot0 fér el az MBR-ben.)

Amennyiben merevlemezeinken csupán egyetlen operációs rendszer foglal helyet, akkor egy szabványos MBR tökéletesen megfelelő. Ez az MBR megkeresi az első indítható (más néven aktív) slice-ot a lemezen, majd lefuttatja a benne található indítókódot az operációs rendszer többi részének felélesztéséhez. Az fdisk(8) által alapértelmezés szerint telepített MBR pontosan ilyen. Ennek alapja a /boot/mbr állomány.

Ha viszont több operációs rendszert is telepítettünk a lemezeinkre, akkor egy ettől eltérő boot managert érdemes használnunk, olyat, amely képes felsorolni a rendelkezésre álló operációs rendszereket, lehetővé téve, hogy választani lehessen az indításuk között. Ezek közül kettőről esik szó a következő alfejezetekben.

A FreeBSD rendszertöltő alrendszerének fennmaradó része három fokozatra bontható. Az első fokozatot az MBR indítja el, amely pontosan eleget tud ahhoz, hogy a számítógépet egy előre megadott állapotba hozza és lefuttassa rajta a második fokozatot. A második fokozat ennél már egy kicsivel többre képes, majd ezt követi a harmadik fokozat. Ez a fokozat zárja le végül az operációs rendszer betöltésének feladatát. A munka tehát ezen három fokozat között oszlik meg, mivel a PC-szabványok komoly korlátozásokat tesznek az első, illetve második fokozatban futtatható programok méretére. Ha így fűzzük össze a feladatokat, akkor a FreeBSD számára egy sokkal rugalmasabb betöltőt kapunk.

Ezután beindul a rendszermag (más néven kernel), és nekilát a számítógépben rendelkezésre álló hardvereszközök keresésének, majd előkészíti őket a használatra. Ahogy a rendszermag beindításának folyamata véget ért, az átadja a vezérlést az init(8) nevű felhasználói programnak, amely megbizonyosodik a lemezek használhatóságáról. Az init(8) ezt követően megkezdi az erőforrások felhasználói szintű konfigurálását: csatlakoztatja az állományrendszereket, beállítja a hálózati kártyá(ka)t, és elindítja mindazon programokat, amelyeknek egy FreeBSD rendszer indulásakor futnia kell.

Ha kérdése van a FreeBSD-vel kapcsolatban, a következő címre írhat (angolul): <questions@FreeBSD.org>.

Ha ezzel a dokumentummal kapcsolatban van kérdése, kérjük erre a címre írjon: <gabor@FreeBSD.org>.