Kezdőoldal » Számítástechnika » Programozás » Amikor valaki egy operációs...

Amikor valaki egy operációs rendszert ír, akkor azt hogyan tudja lefordítani?

Figyelt kérdés
Arra gondolok, hogy pl. ahogy Linus Torvalds elkezdte annak idején, akkor ugye egy sima memória foglalás (malloc) is rendszerhíváson keresztül történik, de ugye még nincs semmilyen rendszer meg memóriakezelés. Szóval milyen fordítója volt, ami semmilyen rendszerhívást nem használ? Vagy speciális módon kellett írni az elején? Utána saját magának kellett megírni mondjuk az malloc kódját, hogy az mire forduljon?

2014. máj. 29. 15:53
1 2
 11/17 anonim ***** válasza:
67%

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?"


Jól bizony!

Kénytelen vagyok megállapitani, hogy akik neked válaszoltak, azok szorulnának rá a segitségre, nem te.

A rendszerhivásaidat is te irod meg. Mindent te irsz meg.

Az első függvénytől az utolsóig, mindent neked kell megcsinálnod. Gyakorlatilag a hardvert programozod, legyen az PIC, floppy meghajtó motor ki vagy bekapcsolása, képernyőre irás, scrollozás, kurzormozgatás, bill. kezelés, stb. Ha a keyen lenyomod pl. egy 'a' betű billentyűjét, akkor azt is neked kell leprogramoznod, hogy ez esetben mi is történjen.

2014. szept. 24. 09:15
Hasznos számodra ez a válasz?
 12/17 A kérdező kommentje:
#11, Csak most olvastam a válaszod, de köszönöm! :)
2014. szept. 27. 19:24
 13/17 anonim ***** válasza:

Egy kis anekdota a MINIX-ről:


A MINIX egy nyílt forrású, ingyenes, Unix-szerű operációs rendszer, amely mikrokernel architektúrára épül. Szerzője, Andrew S. Tanenbaum az oktatásban kívánta felhasználni, de a későbbiekben a MINIX önálló rendszerré vált. A MINIX inspirálta Linus Torvalds-ot, hogy elkészítse a Linux rendszermagot. A MINIX név a minimal és Unix szavakból származik.


A hallgatók első házi feladata az volt, hogy írjanak floppy drivert az operációs rendszerükhöz. Ahogy az előttem szóló is mondta, ez konkrétan azt jelenti hogy rendszerszinten megírták, hogy a floppy meghajtó motorja feszültséget kapjon és a fej olvasson egyet. És így tovább.

2014. szept. 29. 12:49
Hasznos számodra ez a válasz?
 14/17 A kérdező kommentje:
Engem épp az érdekel, hogy mit jelent a "rendszerszinten megírták". Milyen fordítót használtak hozzá, esetleg assemblyben lehet csak megcsinálni?
2014. szept. 30. 08:16
 15/17 anonim ***** válasza:

Nyilván voltak már saját libraryk. De azokat Tanenbaum írta, vagy iratta meg. A minix forrása egyébként C nyelvű, minimális asm betétekkel.

A forditó semmi mást nem fordít csak pure gépi kódot készít a forrásból. Tehát az már lefut, nem igényel külön libeket, vagy ha mégis, akkor azok a saját libjeid lesznek. Nem függenek semmitől, csak az adott hadvertől.

Ha pl. egy olyan progit akarsz irni, amely kiir egy a betűt és ESC billentyúre kilép, akkor meg kell irj egy boot szektort (ezt szokták ASM-ben). A boot folyamat a köv.: a gép elmegy magától a floppy meghajtóig, ott a behelyezett lemez első (nulladik) szektorát beolvassa és ráadja a vezérlést. Te akár ebbe a boot szektorba is elhelyezheted a kódodat, amely lehet akármi. Jelen esetben a progi amely a betűt ir ki és ESC-re kilép.

Ekkor a c forrásod mást nem fog tartalmazni, csak azt hogy a képernyő memória le legyen kezelve és egy print_char függvényt, amely megjeleniti az a betűt. Ezen kivül egy rutint ami figyeli a billentyűzetet (ill. annak portját) (loop) és ha az ESC-nek megfelelő scan kódot olvas onnan be, akkor mondjuk egy far jamppal ujrainditja a gépet.

A bill kezelést is megirhatod többféleképpen, lehet megszakitásos, vagy polling is akár.


Egy a fontos, mindent te irsz meg. Standard függvények használata nélkül. Ha kellenek függvények (library) akkor azokat is neked kell megirnod.


Szerintem nézz körül az osdev.org-on és ott konkrét példákat is találsz. Például barebone C oprendszer kezdeményt. Az egész nem több 20-40 sornál. Ott majd látni fogod a lényeget. Sok sikert.

2014. okt. 2. 01:05
Hasznos számodra ez a válasz?
 16/17 anonim ***** válasza:

"Milyen fordítót használtak hozzá, esetleg assemblyben lehet csak megcsinálni?"


Nem csak asm-ben lehet megcsinálni. C forditó, megfelelően paraméterezve, std. libc használata nélkül.

Ekkor nem fog a forditó stub-ot (betöltőt) illeszteni a leforditott kódod elé, nem lesznek benne OS specifikus függvényhivások sem, csak pure gépi kód.


gcc -c kernel.c -o kernel.o -std=gnu99 -ffreestanding -O2 -Wall -Wextra


Itt egy részlet egy barebone C OS kódból, két saját függvény (putchar és writestring, érdemes észrevenni, hogy a witestring a putchar-t hivogatja (paraméterként átadva neki az aktuális karaktert), igy jelenit meg egy stringet (a putchar pedig egyetlen karakter megjelenitésére képes, értelemszerüen)):


void terminal_putchar(char c)

{

terminal_putentryat(c, terminal_color, terminal_column, terminal_row);

if ( ++terminal_column == VGA_WIDTH )

{

terminal_column = 0;

if ( ++terminal_row == VGA_HEIGHT )

{

terminal_row = 0;

}

}

}


void terminal_writestring(const char* data)

{

size_t datalen = strlen(data);

for ( size_t i = 0; i < datalen; i++ )

terminal_putchar(data[i]);

}

2014. okt. 2. 01:24
Hasznos számodra ez a válasz?
 17/17 A kérdező kommentje:

Asszem értem.

Korrekt válasz volt, köszönöm szépen!

2014. okt. 4. 04:08
1 2

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

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!