Amikor valaki egy operációs rendszert ír, akkor azt hogyan tudja lefordítani?
Gondolom nehéz lenne utánakeresni legalább a wikipédián:
Egyébként létezett a linuxon kívül más operációs rendszer is, amin futtathatott gcc-t. (az x86 assemblyben meg nincs malloc, ugyebár)
Általánosan annyi a válasz, hogy Assembly/Machine code.
Egy fordítóval.
Nyilván másik gépen.
Köszönjük a kérdésedet.
Na, akkor még egyszer...
Szóval mondjuk, hogy nagyon okos vagyok, és leülök kernelt írni. Előbb-utóbb olyan utasításokat kell használnom, amik más esetben valamilyen rendszerhívásra épülnek. Olyan fordítót honnan szerzek, ami az általam kitalált rendszerhívásokat ismeri?
Én egyébként úgy képzelem, hogy első körben pl. az ilyen rendszerhívásokat kiszolgáló részeket kell megírni, utána implementálni az őket használó utasítások, és függvénykönyvtárként megadni a fordítónak. Csak azóta már a GNU eleve így adja pl. a Linux gcc-t. Jól gondolom?
1.)
"Előbb-utóbb olyan utasításokat kell használnom, amik más esetben valamilyen rendszerhívásra épülnek."
Már miért is? Éppen azt a kernelt írod, amit majd mások hivogatnak...
2) Az MS-DOS bármelyik verziója valaki szerint komoly oprendszer? vagy miért lettem lepontozva vajon?
@05-30 23:54
"
"Előbb-utóbb olyan utasításokat kell használnom, amik más esetben valamilyen rendszerhívásra épülnek."
Már miért is? Éppen azt a kernelt írod, amit majd mások hivogatnak... "
"
Más esetben az azt jelenti , hogy olyan esetben amikor nem ő írja meg a kernelt hanem már az kész van.
"Az MS-DOS bármelyik verziója valaki szerint komoly oprendszer? vagy miért lettem lepontozva vajon?
"
Annak számított évtizedekkel ezelőtt.
----------------------------
@kérdező
"Szóval mondjuk, hogy nagyon okos vagyok, és leülök kernelt írni. Előbb-utóbb olyan utasításokat kell használnom, amik más esetben valamilyen rendszerhívásra épülnek. Olyan fordítót honnan szerzek, ami az általam kitalált rendszerhívásokat ismeri?"
Olyan fordító nyilván nincs ami alapból ismeri. A gcc fordító képes fordítani rengeteg célhardverhoz is (azaz pl. beágyazott rendszerekre). Pontosan hogyan azt sosem próbáltam, a gcc manual-ja több száz képernyőnyi rengeteg kapcsolója van melyeknek csak egy kis részét tudom fejből is. Pl -S Assembly kódot készít, -E: Csak a elõfeldolgozást végzi el, melyet a standard outputra ír stb.
A fordítás 4 fázisból áll alapesetben: 1:elõfeldolgozás azaz preprocesszálás (preprocessing); 2:fordítás (compilation); 3:összeállítás (assembly); 4:szerkesztés (linking).
A 2.-ik fázis pl. Assembly kódot állít elõ. Nem költelező minden fázison végigmenni, lehet csak pl. a 3-asig menni, meg lehet pl. a 2-estől kezdeni.
A kernel írástól elrugaszkodott példa:
Aki nagyon profi azaz egyes fázisokat ki tudja cserélni másra ha akarja, ha kell akkor belenyúl a gcc forrásába és újrafordítja. Mondjuk meg lehet azt is csinálni , hogy c-ről pascal-ra fordítson. Elég absztrakt szinten nézve az mindegy hogy szokásos módon vagy más platformra fordít vagy másik prog. nyelvre.
Visszatérve a kernelhez, ott kénytelen vagy használni Assembly kódot ha tetszik ha nem.
Nekem ugy tünik, itt senki nem értette meg a kérdésedet.
A (vélhetően helyes) válasz:
A forditót használod, de csak azt. Semmiféle libc-re való hivatkozás nem lehet a kódodban, értelemszerüen.
Azt, mármint a libc-t neked kell megirnod. Semmire nem támaszkodhatsz. A képernyőkezelést, a kurzormozgatást, a printf függvényt (meg az összes többi szahart) is neked kell megirnod. Aztán ha van ilyen library-d, azzal már forditgathatsz a saját rendszerednek megfelelő kódot.
"Visszatérve a kernelhez, ott kénytelen vagy használni Assembly kódot ha tetszik ha nem."
Nem kénytelen haszánlni. Miért is lenne kénytelen?
Assembly kikerülhetetlenül csak a boothoz kell, már ha nem elégedett a GRUB-bal, a LILO-val vagy más értelmesebb boot menedzserrel. Mert ha igen, akkor elég a C, nem kell egy sor asm kódot sem irnia. Persze olyan is lesz a rendszere, de akkor sem kell neki - ha nem akar - assembly-zni.
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!