Hvala, ali me ne zanima toliko pisanje OS-a i ostalih stvari u assembleru, samo onih djelova koji se moraju kao bootloader, a ostalo bih pokusao ako bi opce to meni islo u C++u
MiniOS Tutorial?
- poruka: 38
- |
- čitano: 4.061
- |
- moderatori:
Lazarus Long, XXX-Man, vincimus
Hvala, ali me ne zanima toliko pisanje OS-a i ostalih stvari u assembleru, samo onih djelova koji se moraju kao bootloader, a ostalo bih pokusao ako bi opce to meni islo u C++u
Velim ti, prvo teorija. Ne možeš raditi nešto o ćemu ne znaš ništa ili znaš jako malo. Neke su stvari nužne za napraviti u asembleru, jednostvno, treba brzine i robusnoti... C++? Par stvari eventualno. Bez C-a teško da ćeš dogurati negdje...
Budem krenuo po vašim uputama, tako je najbolje :), nego zanima me zasto c++ nije dobar nego baš c mora biti?
C++ je izmišljen kao nadogradnja C-a, točnije ono što C-u nedostaje, a to je objektno orijentirano programiranje. No, OOP je previše apstraktan i previše high level za nešto kao što je OS (imaj na umu da OS direktno komunicira s hardverom, to je poželjno raditi na što nižoj razini), nije da se ne može napraviti, Bože moj, pa postoji i OS pisan u C#, ali to nije to. Što niže, dakle C/asembler. To je moje mišljenje i savjet.
Predložio bih ti da prvo proučiš neku literaturu vezanu uz operacijske sustave, recimo
Tanenbaum - Operating Systems Design and Implementation.
Zatim, imaš na netu recimo BareMetal OS, operacijski sustav u potpunosti pisan u asembleru te je njegov kod dostupan za edukacijske svrhe. Zatim, tu je Minix čiji je kod također dostupan, operacijski sustav koji je praktički i pokrenuo grudu zvanu Linux. Naposlijetku, tu je i sam Linux. No prije svega, moja preporuka je, puno literature, tek onda proučavanje kodova, a onda tek kodiranje. Iza operacijskih sustava stoji puno teorije, strašno puno, od datotečnih sustava, preko U/I naprava, memory managementa, security-a do semafora, monitora tj. općenito sinkronizacijskih mehanizama. Ima toga. No, sve se da naučiti. Eto to su ti neke smjernice. Sretno!
Što su U/I naprave??
Ulazno/izlazne naprave (kao monitor, mis, tipkovnica ... )
Vish, može bit :)
Enivej zgodno miješanje novo hrvatskog i Pidgin Englisha
EDIT: Samo da nadodam da termin nije ništa manje nepotreban, nego što je smiješan. Jer svaki komad harvdera je ulazna, izlazna ili ulazno izlazna "naprava".
Budem krenuo po vašim uputama, tako je najbolje :), nego zanima me zasto c++ nije dobar nego baš c mora biti?
C++ ima neke mehanizme koji se oslanjanju na odredene pomocne rutine i bez kojih se njegov kôd ne moze izvrsavati (tu mi pada na pamet recimo exception handling, ali ima toga jos a ja nisam bas vican u c++) Ugl. ako si gledao malo one linkove sto sam ti dao vidjet ces da se moze i u C++ ALI postoje neke stvari koje ne mozes koristiti, i moras izvorni kôd kompajlirati na poseban nacin. Na kraju nakon svega tog petljanja dobijes nesto sto po funkcionalnosti nije nista bolje nego da je pisano u C-u.
Eh, ali nije ni C puno bolji, zapamti da nemas runtime biblioteke, znaci nema malloc(), nema printf(), nema gets(). Ako ih zelis koristiti moras ih sâm isprogramirati.
Drugi problem kod HL jezika je sto niti jedan kompajler ne proizvodi izvrsne datoteke koje tvoj OS moze izvrsavati, tj. ako zelis da tvoj OS moze izvrsavati te datoteke moras isprogramirati loader za njih. Sto znaci da moras poznavati strukturu recimo Portable Executable (windows) ili ELF (linux) formata. Assembly, koliko god ruzan bio, proizvodi takozvani "flat binary" tj cisti kod kojeg doslovce odmah mozes izvrsavati.
Ne znam jesi li gledao ovo, tu ima toliko korisnih stvari da ti se sve isplati procitati.
I stavak 7. sa ovog linka:
7. Understand what you are coding.
This seemingly obvious suggestion amazingly is not followed by many OS devers. It is a must that you understand what you are coding. And no borrowing code that you don't understand either. If you don't understand what the code does, you will eventually get some nasty bug(s) that you are going to have a hard time fixing. If you know how the code works, and understand it, fixing bugs is relativly easy.
Ne mogu dovoljno naglasiti koliko je to bitno. Nikada ne uzimaj kôd iz nekih izvora, sve otipkaj sâm i pobrini se da znas tocno sto svaka linija radi. Zato nisam pobornik citanja knjiga o OS developmentu. Mozes doci u iskusenje jednostavno ubaciti kôd koji si vidio u knjizi. Treba poticati kreativnost i vlastite ideje.
Znaci nakon bootloadera, na red dolazi jednostavan memory manager koji ce ucitati kernel sa diska na odredenu memorijsku adresu i prebaciti procesor u zasticeni rezim rada (ako radis 32 bitni OS), te nakon njega kernel (koji ce u sebi sadrzavati sofisticiraniji memory manager, mehanizan za multitasking, softverske interrupte putem kojih ce se vrsiti komunikacija sa visim djelovima OS-a).
Tek kod kernela mozes razmisljati o nekom visem jeziku, sve prije toga se radi u assembleru.
EDIT: ne mogu vjerovati da sam zaboravio ovog lika, knjiga mu odlicno pokriva 32 bitni assembly i osnove assemblya opcenito, svi materijali se mogu besplatno skinuti s njegove stranice.