Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Od upaljivanja do prompta

[es] :: Kernel i OS programiranje :: Od upaljivanja do prompta

[ Pregleda: 4142 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

Nikola Krivokapic
Beograd

Član broj: 7267
Poruke: 49
*.cg.yu



Profil

icon Od upaljivanja do prompta09.01.2003. u 13:54 - pre 258 meseci
U ovom textu pokusacu da objasnim sta se desava od trenutka kada upalite svoj x86 do dobro poznatog login prompta za logovanje u linux system.Znaci podrazumijevacemo linux kao instaliran OS.
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

VANDIT
 
Odgovor na temu

ventura

Član broj: 32
Poruke: 7781
*.verat.net



+6455 Profil

icon Re: Od upaljivanja do prompta09.01.2003. u 14:28 - pre 258 meseci
Tekst ti je potpuno bez veze...

U tekstu ides veoma opsirno i generalno pricas o svemu, i onda skaces u veoma specificne detalje, ne kazes nista tim detaljima, i onda opet nastavjlas sa generalnim tekstom...

Ako vec hoces da napises ovakav tekst (mada ne vidim svrhu), onda treba ili:
1. Koristis svugde generalne fraze bez mnogo 'tehnikalija'
2. Ides u detalje sa svim tehnikalijama...

u 1. slucaju tekst bi ti bio duplo ovoliki najmanje. U 2. slucaju mogao bi solidnu knjigu da napises.

 
Odgovor na temu

Nikola Krivokapic
Beograd

Član broj: 7267
Poruke: 49
*.cg.yu



Profil

icon Re: Od upaljivanja do prompta09.01.2003. u 15:45 - pre 258 meseci
Pa znas kako i nisam se puno trudio oko texta uglavnom mi je bio cilj da nacnemo neku temu,i da ljudi pokusaju da shvate koncept,al stvarno priznajem da nije neki text.
A sto se tice svrhe nisam upoznat o tome koliko ljudi ovdje posjeduju znanja,pa bolje da pocnemo i tako nego odmah da krenemo sa opisivanjem buddy system algorithma ili tako neceg jos komplikovanijeg.
VANDIT
 
Odgovor na temu

ventura

Član broj: 32
Poruke: 7781
*.verat.net



+6455 Profil

icon Re: Od upaljivanja do prompta09.01.2003. u 16:22 - pre 258 meseci
Na taj racun je i moja glavna zamerka... Znaci ili da se ide kompletno sa opisom svih detalja, ili sa generalnim opisom bez tehnickih detalja...
 
Odgovor na temu

Nikola Krivokapic
Beograd

Član broj: 7267
Poruke: 49
*.cg.yu



Profil

icon Re: Od upaljivanja do prompta09.01.2003. u 17:06 - pre 258 meseci
Da,al lose je sto ljude slabo zanima ova tema evo vidis niko jos nepostavlja pitanja.Neznam ima li ljudi koje to uopste zanima.Ako ne kernel bar programiranje modula koji se dinamicki ugradjuju u njega.
VANDIT
 
Odgovor na temu

random
Vladimir Vrzić
Beograd

Član broj: 85
Poruke: 3866
*.dial.InfoSky.Net

Sajt: www.last.fm/user/vrza


+4 Profil

icon Re: Od upaljivanja do prompta09.01.2003. u 19:12 - pre 258 meseci
O ovome smo pričali pre par meseci, na Linux forumu. Pa sam ja napisao neko objašnjenje, evo citiraću ga i u ovu temu, pošto je relevatno. Opet kažem, to je sve dobro dokumentovano u Kernel Hackers' Guide-u, i mislim da nije previše zanimljivo za ovaj forum, obzirom da nas ne interesuje koje f-je u kojim fajlovima koristi Linux, već opšti koncepti. Svejedno, evo tog teksta.

Citat:
random:
Ma tekst je prilično loš — samo jedan pasus je potrošio na sve što se dešava otkako se upali računar do trenutka kad se podigne init, pa je onda naširoko prepričavao RH init skriptove, koje možeš i sam da pročitaš. Mnogo je zanimljivije reći, npr. da LILO nije jedini način da se podigne kernel (tu su loadlin loadlin, grub). A čak i ako se koristi LILO, i tu ima mnogo šta da se kaže.

1) Računar se upali, x86 procesor inicijalizuje sve svoje registre, bafere i cache na neke default vrednosti i ulazi u realni mod. IP (instruction pointer) registar se postavlja na 0xFFF0, CS (segmentni registar) dpokazuje na baznu adresu 0xFFFF0000 — i izvršavanje instrukcija znači počinje na adresi 0xFFFFFFF0, a to je početna adresa dela memorije gde je čipset mapirao EPROM. Kôd u EPROMu uglavnom setuje IDT (deskriptor tabelu prekidnih rutina) i zatim startuje BIOS. BIOS uradi POST, zatim na osnovu informacija pohranjenih u CMOS-u bira disk sa koga će se bootovati sistem. Čita prvi sektor 512 bajtova sa tog diska (koristeći interapt 19h) — u slučaju hdd-a to je tzv. Master Boot Record — oni se mapiraju u memoriju na adresu 0x7C00 i izvršava ih kao čist real-mode asm. Zapravo pre no što počne da ih izvršava proveri da li su dva zadnja bajta u sektoru AA55h, što je neka gruba provera da li je u pitanju butabilan disk ili ne. Zadatak ovih 512 bajtova je, recimo ako je u slučaju LILO, da prvo učitaju ostatak kôda za bootloader (jer ne može ceo onaj meni i kôd za parsiranje opcija da stanu u 512B, probajte da napravite LILO sa 20 kernela), koji se nalazi u /boot pri instalaciji LILO-a, pri čemu LILO pamti fizičke adrese tih fajlova, kao i kernel image-a, jer, opet, u 512B ne može da se smesti drajver za ext2fs.

2) Kad je LILO učitan, radi parsiranje opcija i njihovo predavanje kernelu (samo o ovome postoji čitav jedan HOWTO!). Najvažnija od ovih opcija je navođenje particije koja će biti privremeno mountovana kao / i sa koje će se učitati init, kao i informacije o zahtevanom video modu.

3) Lilo startuje kernel. Kernel je zapravo jedan (ne)običan program, možete ga gledati kao jednu vrstu izvršnog fajla. Prvi deo Linux kernela je napisan u asm-u (arch/i386/boot/bootsect.S). Ovaj kôd učita prvo sebe na adresu 0x90000, i ostatak kernela na 0x10000. Prikazuje se poruka „Loading....”. Zatim se izvršava kôd iz boot/Setup.S. Ovaj kôd identifikuje neke najosnovnije podatke o sistemu, kao i tip grafičke karte. Ako mu je predata odgovarajuća opcija on traži od korisnika da izabere VGA mod za konzolu. Zatim kopira ceo sistem sa 0x10000 na 0x1000, prebacuje sistem u protected mode, zatim postavlja EIP na 0x1000 i tu se nastavlja podizanje sistema.

4) Eto nas u protected modu! Kôd na adresi 0x1000 je onaj iz boot/head.S, služi da inicijalizuje registre i raspakuje kernel (decompress_kernel() funkcija koja koristi kôd iz inflate.c, unzip.c i misc.c). Raspakovani kernel ide na adresu 0x100000.

5) Inicijalizuju se tabele prekidnih rutina, paging, identifikuju se procesor i koprocesor, i startuje se start_kernel() funkcija (i iz nje se više nikad ne izađe). Tu se radi inicijalizacija memorije, IRQ kanala, schedulera, svih drajvera, kao i parsiranje opcija komandne linije (koje je kernelu predao LILO), i još neke stvari. Tu se negde pri kraju i mountuje inicijalno root particija kao read-only.

6. Kernel "ručno" kreira proces sa rednim brojem 0 (idle process). Prelazi u user mode, gde idle process fork()-uje init (koji dobija PID 1). Tradicionalno na UNIX sistemima proces 0 (koji je jedini proces na bilo kom UNIXu koji se ne kreira pomoću fork() sistemskog poziva), kada fork()-uje init, postaje proces po imenu swapper i kontroliše rad sa virtuelnom memorijom.

7. init proces pokušava da exec()-uje program koji mu je zadat parametrom init=<nešto>, ili /sbin/init ako ovaj parametar nije prosleđen. Ako ne nađe init program eventualno će pokušati da fork()-uje interaktivni shell.

8. Ako ga nađe, init se startuje (poruka INIT: version x.xx booting) i izvršava prvi rc skript — od ove tačke nadalje već sve zavisi od distribucije.

9. Dalje neću da pišem, pročitajte init skriptove.

Eto, ovo je samo pogled iz aviona na ono što se dešava pri bootovanju Linuxa, a ipak je u poređenju sa tim onaj tekst pogled iz svemirskog broda u orbiti oko Plutona. E, da, ako ima grešaka, konsultovao sam ovde Kernel Hacker's Guide (potražiti na linuxdoc.org), pa je moguće da se nešto sitno promenilo do verzije 2.4, ali u principu je to to.

int rand(void);

Those who do not understand Unix are condemned to reinvent it, poorly.

Upali lampicu — koristi Jabber!
 
Odgovor na temu

Nikola Krivokapic
Beograd

Član broj: 7267
Poruke: 49
*.cg.yu



Profil

icon Re: Od upaljivanja do prompta09.01.2003. u 20:23 - pre 258 meseci
Hm,bez obzira na temu,text je stvarno detaljno napisan.
VANDIT
 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.beograd-3.tehnicom.net

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


+2 Profil

icon Re: Od upaljivanja do prompta12.01.2003. u 01:08 - pre 258 meseci
Mada je prilično lepo sve objašnjeno, dodaću jednu ispravku.

U koraku 1. najverovatnije si mislio da se dobije adresa 0xffff0, pošto se radi o realnom modu na IA procesorima (1MB memorije).

Ali, ovo i nije toliko bitno za sve potencijalne pisce operativnih sistema, pošto je to posao koji CPU sam obavlja, i dotiče se samo onih koji pišu BIOS (u našim uslovima, BIOS za Bochs :)

Druga ispravka bi bila u prethodnoj poruci: ,,nekoliko meseci'' sa ,,nekoliko godina'' :)
Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
 
Odgovor na temu

gandalf
Goran Raovic
senior network engineer
Belgrade

Član broj: 52
Poruke: 248
*.181.EUnet.yu

Jabber: goran.raovic@gmail.com


+44 Profil

icon Re: Od upaljivanja do prompta25.06.2003. u 03:10 - pre 252 meseci
Citat:
Nikola Krivokapic:
U setup() takodje je reprogramiran PIC za irqove.


Sta je PIC???

 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.beograd-3.tehnicom.net

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


+2 Profil

icon Re: Od upaljivanja do prompta25.06.2003. u 16:12 - pre 252 meseci
„Programmable Interrupt Controller“ — za detalje, Gugl.
Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
 
Odgovor na temu

salec

Član broj: 6527
Poruke: 1738
*.rcub.bg.ac.yu



+25 Profil

icon Re: Od upaljivanja do prompta25.06.2003. u 16:52 - pre 252 meseci
Da li je dekompresija kernela neophodan korak? S obzirom na velicine danasnjih diskova, zar nije brze, jednostavnije i pouzdanije cuvati ceo imidz raspakovanog kernela na disku, pa ga samo kopirati u memoriju? Postoji li mogucnost za to?
 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.beograd-3.tehnicom.net

ICQ: 9344053
Sajt: alas.matf.bg.ac.yu/~mm011..


+2 Profil

icon Re: Od upaljivanja do prompta25.06.2003. u 17:01 - pre 252 meseci
Dekompresija kernela nije neophodan korak, i lako je zaobići je, ali ne vidim zašto bi to bilo problem — pa brže je sa diska učitati kernel u memoriju, i dekompresovati ga tu, nego učitati 5 puta više podataka sa diska (pod uslovom da je dekompresija u memoriji postupak koji traje manje od 4 čitanja kompresovanog kernela, što je najčešće slučaj ;-). Čak i da nije tako, taj postupak se vrši jednom pri pokretanju računara, a svi znamo da GNU/Linux sistemi, kada se jednom pokrenu, rade bez problema i nekoliko meseci ;-)

Možda se moje mišljenje promenilo, ali ne i činjenica da sam u pravu.
 
Odgovor na temu

[es] :: Kernel i OS programiranje :: Od upaljivanja do prompta

[ Pregleda: 4142 | Odgovora: 11 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.