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

OS programiranje u C-u

[es] :: Kernel i OS programiranje :: OS programiranje u C-u

[ Pregleda: 5034 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

enterx_
friderich shaiz
ex yu

Član broj: 14874
Poruke: 24
*.math.hr



Profil

icon OS programiranje u C-u23.10.2003. u 14:41 - pre 248 meseci
zanima me :

1). dali je mougece napraviti os u C-u bez uporabe asm koda?
2). kako citati i pisati na hard recimo od pozicije 0 do npr 512 Byta(MBR) sa C-om?
3). kako pokrenuti svoj recimo exe napravljen u C-u nakon ucitavanja MBR-a bez os-a (exe je os)?(ili mozda .com bi mi trebao?)


... mozda je ovo trebalo biti u C sekciji ? ....
Kompletnu odgovornost za sadržaj objavljenih tekstova snose isključivo njihovi autori, čiji je pseudonim jasno označen pored sadržaja teksta.


 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.verat.net

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


+2 Profil

icon Re: OS programiranje u C-u23.10.2003. u 17:28 - pre 248 meseci
Citat:
enterx_:
1). dali je mougece napraviti os u C-u bez uporabe asm koda?

Ne. Razlog za to je vrlo jednostavan: kako pokrenuti C program koji si napisao.

Ako uspeš da ga pokreneš, onda sve ostalo može u C-u, ali će takav operativni sistem biti značajno ograničen (npr. nešto slabiji od DOS-a :-), zato što C jezik ne definiše hardverske funkcije kao što su podešavanje memorije, procesora, ...

Citat:
2). kako citati i pisati na hard recimo od pozicije 0 do npr 512 Byta(MBR) sa C-om?

Moraćeš da koristiš ili BIOS (ako radiš u realnom režimu), ili IDE drajver (ili SCSI, ...).

Ako radiš na nekom postojećem operativnom sistemu (neki Unix tipa) onda je dovoljno da čitaš sa fread() odgovarajući uređaj (npr. GNU/Linux sistemi često imaju /dev/hda koji predstavlja prvi disk).

Citat:
3). kako pokrenuti svoj recimo exe napravljen u C-u nakon ucitavanja MBR-a bez os-a (exe je os)?(ili mozda .com bi mi trebao?)

Mislim da ne želiš da koristiš EXE. On sadrži i zaglavlja i slične gluposti koje će ti samo otežati posao. COM fajl predstavlja čist izvršni kod, a da bi njega pokrenuo, imaš nekoliko varijanti. Prva je da ti taj program bude manji od 512 bajtova, i da ga onda smestiš u sam boot sektor. Druga je da koristiš neki postojeći boot loader za učitavanje ovog programa.

Uopšte, primer dvofaznog učitavanja imaš u malom (i nedovršenom) jezgru na http://alas.matf.bg.ac.yu/~mm01142/racunarstvo/programiranje

Tu je opisano i kako to sve radi u kratkim crtama, a možeš pogledati i sam maturski rad koji daje uvod u razvoj operativnih sistema.

Ipak, preporučio bih ti da postaviš GRUB u MBR koji može da pokreće gomilu operativnih sistema, i da koristiš „multiboot“ ELF jezgra. To znači da možeš da koristiš obično kompajliranje GCC-om za izradu jezgra, a to svakako ima mnoge prednosti.

Citat:
... mozda je ovo trebalo biti u C sekciji ? ....

Ne, mislim da je ovde zaista prikladnije. Ako treba i neka konkretna pomoć, a kod u okviru „4o“ nije dovoljan, slobodno izvoli i priupitaj.

U svakom slučaju, pošto si još uvek na početku (tj. u sezoni bootsektora :-), mislim da će ti biti zanimljiv kod koji sam ja radio. Boot sektor je, naravno, napisan u asembleru (konkretno u NASM-u), pošto je C-om veoma teško dobiti programče od ispod 512 bajtova.

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

enterx_
friderich shaiz
ex yu

Član broj: 14874
Poruke: 24
*.cmu.carnet.hr



Profil

icon Re: OS programiranje u C-u23.10.2003. u 17:49 - pre 248 meseci
kako bi isla naredba fread()?
nesto kao :

char polje[512];
fp=fopen("/dev/hda","r");
fread(fp,&polje,sizeof(polje),0);

jel bi mi mogao poslati taj boot loader u *.asm fileu?
ova čirilica mi je teža od asemblera (bilo je to davno kad sam citao i pisao)
Kompletnu odgovornost za sadržaj objavljenih tekstova snose isključivo njihovi autori, čiji je pseudonim jasno označen pored sadržaja teksta.


 
Odgovor na temu

tOwk
Danilo Šegan
Zemun/Beograd

Član broj: 94
Poruke: 2743
*.verat.net

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


+2 Profil

icon Re: OS programiranje u C-u23.10.2003. u 17:57 - pre 248 meseci
Citat:
enterx_:
char polje[512];
fp=fopen("/dev/hda","r");
fread(fp,&polje,sizeof(polje),0);

Da, tako nešto, uz naravno odgovarajuće dozvole.

Citat:
jel bi mi mogao poslati taj boot loader u *.asm fileu?

Samo pronađi koja veza pokazuje na .tar.gz, i to preuzmi. Takođe, i maturski rad u PDF-u je pisan latinicom, te ti možda može koristiti.

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

ljudi
Zg

Član broj: 16038
Poruke: 56
*.cmu.carnet.hr



Profil

icon Re: OS programiranje u C-u26.12.2003. u 11:15 - pre 246 meseci
mene zanima zasto se kernel programira bas u c-u, a ne u c++-u(recimo)?
 
Odgovor na temu

Sundance

Član broj: 7510
Poruke: 2559
*.cmu.carnet.hr



Profil

icon Re: OS programiranje u C-u26.12.2003. u 12:33 - pre 246 meseci
Windows DDK preporuca uporabu cistog C-a za kernel-mode programiranje. Za vecinu C programera koji su navikli da se jednostavne C naredbe mapiraju u jednostavan asm kod veliki je overhead razmisljati koliko ce jednostavna "a=b" naredba pozvati copy konstruktora, alokacija i sl. Stog moze vrtoglavo rasti ako koristis jednostavnu sintaxu za instanciranje objekata na njemu i pozivanje metoda sa objektima kao parametrima.

Windoze kernel/executive koristi iskljucivo SEH kojim C programi pristupaju preko _try/_except, C++ rukovanje iznimkama nije podrzano (try/catch/throw) iz jednostavnog razloga sto SEH ne poziva destruktore kad vrsi stack unwinding za vrijeme uhvacene iznimke. Iz istog razloga ne mozes koristiti ni STL :(

Dodaj jos tome RTTI, virtualne funkcije i ostale divote jezika za koje prevoditelj na kraju ukljucuje gomilu dodatnog koda, tablica (vtable) i sl, i mozes samo gledati kako performanse padaju i padaju...

Uostalom, zar kernel nije po svojoj prirodi event-driven?
 
Odgovor na temu

[es] :: Kernel i OS programiranje :: OS programiranje u C-u

[ Pregleda: 5034 | Odgovora: 5 ] > FB > Twit

Postavi temu Odgovori

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