Hogyan álljak neki egy operációs rendszerhez?
Kezdő C++ programozó vagyok nem mára meg holnapra tervezem ezt az egészet mert a szintem kb 9-10 :D na mind1 tudnátok linkelni pár olyan dolgot ami segítene elinduláshoz kernelek milyen kernelt fejlesszek kernel után mivel folytathassam ...
UI:Most kezdtem Ubuntun szóval még sok fogalmam nincs a dolgokról :D
> Kezdő C++ programozó
Előbb a "kezdőt" kéne "profi"-ra cserélni, és gyanítom C-ben (is).
És Tannenbaum - Operációs rendszerek c. könyvével nem lövök nagyon mellé szerintem.
Két tulajdonság kell, hogy összegeződjön benned, pontosabban inkább három.
Az egyik a szűk látókörűség a másik az önhittség, a harmadik a makacsság.
Ha ezek egyike is hiányzik, akkor inkább bele se fogj. Ha azt hiszed, hogy viccelek, akkor tévedsz.
Az első lépés, hogy be tudj bootolni. Ez úgy történik, hogy a géped bekapcs után elmászik a meghajtóba behelyezett lemez első szektoráig, ez a boot szektor, azt beolvassa a memóriába majd ráadja a vezérlést. Ez a szektor egyébként 512 byte hosszú (mondjuk a többi is, de ez ne zavarjon).
Ide kell elhelyezned a saját kódodat, amely abból kell álljon, hogy a floppyn lévő kerneledet benyálazza a memóriába, inicializálja a rendszert (tehát, mondjuk védett módba kapcsol, stb.) majd a kernel kezdőcímére adja a vezérlést. Ja, a kód végén hexa AA55 kell, hogy szerepeljen, máskülönben baxhatod.
Ha ez megvan akkor következik a saját library-k megírása, merthogy a fejlesztő eszközöd (ASM vagy C) libjeit nem használhatod. Tehát szépen pöttyről pöttyre megírod a képernyőkezelést, a char, string, stb. megjelenítő rutinokat.
Ha ez megvan akkor a kerneled már úgy tud bootolni, hogy ki tudja írni, hogy 'hello, fucked world' és esetleg az általa lefoglalt vagy talált memo méretét is tudatni képes veled, a tulajdon apjával. Ekkor már csak két lépés választ el attól, hogy az oprencered működőképessé, értsd: használhatóvá váljon.
Ezek egyike a billentyűzet lekezelése. Tehát ha lenyomsz egy bötűt, akkor az meg is jelenjen a képernyőn. Ha ez is kész, akkor már csak egy parancsértelmezőt kell faragnod - de hát mi az neked? -, hogy az oprencerkédet vezérelni is tudd.
Aztán ha ezzel megvagy akkor jöhet a védett mód, a ring 0 és a ring 3, a memó lapozása, címzése, a taszkok, a szemaforok, a pipe-ok szerepe, a kivételkezelés, a hibatűrés, a megszakításrendszer, az ütemező, a taszk switch, stb, stb.... Jó mulatást.
Még annyit, hogy a Tannenbaum féle könyvet egyelőre felejtsd el. Drága is meg szahar is. Legalábbis abszolút kezdőknek. Ahelyett szerezd be Horváth Gábor, Operációs rendszerek c. művét, amely elég jól eligazít egy kezdőt minden szükséges dologban. Kezdve a munkakörnyezet kialakitásától a megválasztott fejlesztő eszközök beállításán át egészen a multitaszkos OS-ekig. Emellett lépésről lépésre elmagyaráz szépen mindent, kódrészletekkel vastagon meghintve. Gyakorlatilag egy mini, 32 bites multitaszkos oprendszer készítését mutatja be.
Ubuntut fejeltsd el, az nem fehér embernek való, azért is barna. Helyette tegyél fel egy slackware-t. Az legalább linux.
Azt előre megmondom, hogy te nem fogsz írni 15-21 év múlva semmiféle oprendszert.
Azt is elárulom, hogy nagy valószinűséggel vért fogsz pisilni addig, amíg eljutsz oda, hogy egy sima de interaktív rendszert legyél képes futtatni. Persze csak ha kellően makacs vagy, mert ha nem akkor még a saját boot lemezedből sem lesz soha semmi.
Persze ha veszed a fáradságot és áldozol rá időt, akkor eljutsz majd mondjuk egy DOS képességű karaktergrafikus valamiig és ott fogod abbahagyni. DE! Addig olyan elméleti és gyakorlati tudás birtokában leszel, amelyre akár a jövődet felépítheted, lehet belőled pl. jól fizetett rendszerprogramozó.
Itt egy minimál, semmire sem jó 'oprendszer':
[ORG 0x7c00]
xor ax, ax
mov ds, ax
mov si, msg
ch_loop:lodsb
or al, al
jz hang
mov ah, 0x0E
int 0x10
jmp ch_loop
hang:
jmp hang
msg db 'Hello fucked world', 13, 10, 0
times 510-($-$$) db 0
db 0x55
db 0xAA
----------------
Üdv. R.R.
Az a baj, hogy az ubuntu pont kevéssé alkalmas fejlesztő gépnek. Ezért ajánlottam a Slackware-t helyette.
A kódrészt nem én írtam, csak bemásoltam, mert nem volt kedvem előszedni az én bootszektorom forrását (amúgy valóban assembly). Mivel ez lényegében csak egy stupid boot kód, nem is oprencer.
Az opre írással az a gond, hogy még gyakorlott programfejlesztőknek is komoly kihívás, mert mélyrehatóan ismerni kell hozzá a hardvert. A CPU felépítését, a gép huzalozását, a részeit, a teljes hardvert. Ha nem ismered a soros portot, a floppy meghajtót, a PIC-et, a PIT-et, a keyboardot, akkor programozni sem fogod tudni őket.
Emellett gond az is, hogy lassan kapod meg azt az eredményt, ami sikerélményt okoz és arra sarkall, hogy tovább csináld.
Egyenlőre marad ubuntu azt majd átváltok :D
hát ja elég tré lehet operációs rendszert írni :D
De amúgy imádom a programozást, de azért olyan szintre sose fogok eljutni, hogy sikerüljön :D
Amúgy most tanulok majd gép szerelőnek azért hogy megismerjem a hardvereket mert a gép belsejét sosem ismertem :D
Hát, bizony, nem könnyű. :))
Én amikor vagy 15-16 éve elkezdtem, akkor már írtam eszközmeghajtót saját hardverhez, vezérléseket, de mégis igen kemény diónak bizonyult. Akkor még nem volt ennyi sok infó sem, magamnak kellett kitalálnom sok mindent.
Nagyon nagy kitartást igényel, ezért írtam a makacsságot. A szűklátókörűség, önhittség meg azért kell, mert ha előre tudod, hogy mibe kezdesz bele, akkor bele se igen fogsz. 15-20 év múlva te is leszel olyan érett, tapasztalt, hogy tudd, mit jelent ez munkában és akkor már nem fogsz nekikezdeni ilyesminek. :)
Érdemes az osdev.org oldalon körülnézni, ott találsz a projektek között sokat amelyekrők kiderül, hogy mikor kezdték el és hogy általában évek alatt hova jutottak.
Én egy év alatt jutottam el egy olyan rendszerig, ami kb. úgy szűk félannyit tudott mint egy DOS. Persze 32 bites volt, multitaszkos meg persze védett módú. Arra volt jó csak, hogy serial/paralell porton keresztül, vagy saját kártyával vezérléseket automatizáljak vele. De azért ez sem kevés.
Neked azt javaslom, hogy mielőtt belefogsz, olvass sokat a témában, ismerd meg mi az a boot folyamat, milyen a PC memóriaszervezése, mi az a védett mód, stb. Ha ezekről elég infód van, akkor kialakíthatsz egy munkakörnyezetet, PC emulátor (pl. bochs), C és asm fordító, scriptek, esetleg források, doksik begyűjtése, a környezet bekonfigurálása, stb. (csak ez kb. 2-3 nap) és a többi már csak rajtad múlik.
Sok sikert!
Üdv., R. R.
Kapcsolódó kérdések:
Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!