Objasnjenje je ukratko ako neko zeli da sazna vise o pojedinim djelovima neka pita slobodno.
Poslije upaljivanja prvo sto procesor radi je povecava logicnu vrijednost pina RESET koji se nalazi na njemu,poslije cega su neki registri postavljeni na fixirane vrijednosti,znaci tu prvenestveno mislim na CS i EIP,koji odredjuju instrukciju koja ce biti izvrsena a to je svima dobro poznat BIOS i njegove rutine koji se nalaze na fizickoj adresi 0xfffffff0.Bios upotrebljava real mode adresiranje kao jedino dostupno kada je masina upaljena.O nacinima adresiranja i hardverskim kolima koji to omogucavaju u nekom drugom textu.Da kazemo sta BIOS radi na masini:Izvrsava nekoliko testova da bi utvrdio koji hardware postoji i radi,tu su prikazane razne poruke na monitoru,koje je svak od vas vidio,ako nesto krene kako nevalja u ovoj fazi to znaci da je nadjem hardware konflikt,poslije toga slijedi inicijalizacija hardware djelova i utvdjivanje table instaliranih PCI-a u kompu.Slijedeca faza je trazenje OS-a koji se dize,a trazi se na mediju koji je postavljen u biosu kao prvi.Recimo da je stavljen disk BIOS uzima njegov prvi boot sektor,koji je ustvari boot loader i stavlja ga na memorijsku adresu 0x00007c00.Znaci programiranje operativnog sistema pocinje od boot loadera,do tog trenutka hardware radi za nas.Boot loader LILO omogucava nam da biramo particiju(OS) koji cemo da butujemo.Kada izaberemo linux,lilo kopira posebni boot loader koji je intergrisan u samom kernelu na adresu 0x00090200 a ostatak kernela na 0x00010000.Poslije toga pocinje se sa izvrsavanjem setup() funkcije,ciji je galvni zadatak da preskoci u protected modetako sto ce izgraditi GDT(global desciptor table),inizijalizirati sadv hardware(slicno biosu).Kada se postavi PE bit u kontrolnom registru cr0 onda je enablirano paging adresiranje.U setup() takodje je reprogramiran PIC za irqove.Poslije toga skace se na startup_32() funkciju.Ona se nalazi u /usr/src/linux/arch/i386/boot/compressed/head.S fajlu.Poslije setup() ova funkcija je kopirana na 0x00100000.Ona inizijalizira segment registre i dekompresira kernel.Dekompresiran kernel se stavlja opet na 0x00100000 i funkcija skace na tu adresu,koja opet pocinje DRUGOM startup_32() funkcijom i ../arch/i386/kernel/head.S fajla,koja postavlja kernel mode stack,IDT(interrupt desicriptor table) i u gdtr i idtr registre postavlja adrese GDT-a i IDT-a.Poslije toga slijedi start_kernel funkcija.
start_kernel() je zadnja funkcija u inicijalizaciji kernela,ona izvrsava sledece funkcije redom:
paging_init()
mem_init()
trap_init() i init_irq()
kmem_cache_init() i kmem_sizes_init()
time_init()
Mislim da ove funkcije mozete da zakljucite sta rade,a ako neko ima pitanja mozemo opsirno govoriti o njima.Sad je glavno da start_kernel() ivrsava kernel_thread() funkciju cime kreira prvi proces u sistemu,koji je u zaduzen za kreiranje ostalih procesa(httpd,lpd...),i on pokrece /sbin/init program.
U zadnjoj fazi prikazane su razne poruke kao sto su verzija linuxa.Na kraju dolazi dobro poznat konzolni ili graficki login prompt.
To je bilo ukratko ako ima ikakvih pitanja pitajte sve sto vas zanima da zajedno nadjemo odgovor.
Pozdrav za sve