utorak, 23 aprila, 2024
Sam svoj majstor

(Ne) želite da napravite svoj OS!

Autor: Nikola Hardi

Zašto napraviti svoj OS?

Put mladih hakera vodi do svakakvih ideja za projekte. Među takvim idejama se često nalaze igre, sajtovi, a ponekad čak i operativni sistemi. Cilj ovog teksta nije građenje novog operativnog sistema već predstavljanje problema koji ovakav projekat čine složenim.

Pre svega, potrebno je postaviti pitanje zašto želimo da se upustimo u ovakav, naizgled sulud i nemoguć, projekat. Neki od odgovora mogu biti:

  • Želim da učim;
  • Želim da izvežbam svoje programerske veštine;
  • Želim da popravim nešto;
  • Želim to da uradim iz zabave.

Svi ovi odgovori su dovoljno dobar razlog za upuštanje u ovakvu pustolovinu. Ukoliko svoj odgovor niste našli među ponuđenima, a potrebni su vam savet ili pomoć, slobodno nam se javite.

Počnimo od prvog odgovora: Želim da učim

Igranje računarima može da bude aktivno i pasivno. Nekada je taj izraz imao malo drugačije značenje i podrazumevao je učenje i stvaranje. Danas se, nažalost, uglavnom povezuje sa upotrebom programa zabavnog karaktera koje popularno zovemo „video igrice”.

Računari su čudne i složene sprave. Da bismo ih koristili, pred nama se nalaze programi koji se oslanjaju na gotovo pola veka modernog računarstva i više od celog veka građenja teorije. Koliko dobro zaista poznajete računarske sisteme kada je u pitanju hardver? Kako računar vidi memoriju? Da li računar može da radi bez čvrstog diska? Kako računari komuniciraju međusobno? Na koji način računari upravljaju drugim, priključnim, uređajima? To su sva pitanja za koje se valja pripremiti. Ova pitanja pokrivaju temu hardvera. Međutim, računarski sistem se sastoji od hardvera i softvera koji su nerazdvojivi i jedan bez drugog neupotrebljivi. Pravljenje operativnog sistema je sjajan način da se istraži ovaj hardverski deo jednog modernog računarskog sistema.

Ukoliko vas ne zanima sam hardver, postoji drugi skup pitanja na koji možda niste dovoljno spremni. Svi znamo da osim korisničkih uslužnih programa (aplikacija) postoji i ona druga strana koju zovemo operativnim sistemom, ali koji su tačno zadaci jednog operativnog sistema? Kako i da li možemo zaista da pokrenemo praktično neograničen broj procesa? Koja je razlika između programa i procesa? Kako jedan proces vidi računar? Koji resursi su potrebni procesu? Kako su povezani korisnički programi i operativni sistem? Gde su u celoj toj priči upravljački programi ili tzv. drajveri (eng. drivers)? Kako se pokreće jedan operativni sistem od trenutka kada pritisnemo taster za startovanje računara? Kako i gde su smeštene datoteke? Kako se zaista pokreću programi („klikom na ikonicu” je pogrešan odgovor). Sva ova pitanja su tek početak koji vodi do teorije problema operativnih sistema.

Drugi odgovor glasi: Želim da izvežbam svoje programerske veštine

U prethodnom odeljku smo spomenuli teorijsku stranu problema projektovanja i implementacije jednog modernog operativnog sistema. Problemi koji su u pitanju mogu biti vrlo složeni i zahtevaju optimalna rešenja. Ne želite da vaš sistem zahteva nekoliko gigabajta radne memorije po pokretanju, zar ne? Procesi se karakterišu po svom načinu ponašanja. Za neke procese je važno da „ne koče” dok je za neke druge prihvatljivo da se njihovo izvršavanje malo oduži. Kako odrediti te prioritete? Osim toga, treba voditi računa o konzistentnosti podataka što zahteva pedantnost. Kod može da naraste do znatnog broja linija, što zahteva urednost. Konkurentno programiranje je izvor vrlo podlih i neuhvatljivih grešaka što samo po sebi stvara nove izazove. Neki delovi sistema su vrlo osetljivi na pojam vremena pa ti delovi moraju da budu optimizovani po pitanju brzine izvršavanja. Sve u svemu, pisanje operativnog sistema može da bude izvor vrlo zanimljivih programerskih problema, što u kombinaciji sa nivoom apstrakcije (radite blisko hardveru) i nedostatka dokumentacije (nećete tako lako pronaći rešenje na popularnim sajtovima gde se obično nalazi dosta rešenja za razne probleme) dodaje još složenosti.

Treći odgovor: Želim da napravim nešto novo

Ovde ćemo morati malo da vas zaustavimo. Pre nego što počnete da stvarate nešto novo, morate da znate šta je do sada već urađeno. Jako je važno poznavati istorijski tok razvoja operativnih sistema, još od najranijih oblika iz šezdesetih godina. U nastavku teksta osvrnućemo se na neke od sistema vredne pažnje. Kada znamo šta je do sada već napravljeno i šta tačno želimo da unapredimo, tek tada možemo da počnemo da stvaramo nešto novo. Preporuka je da se počne sa kopiranjem postojećih rešenja čisto da bi se stekao utisak o složenosti problema i da se stekne određeno iskustvo u sistemskom programiranju i arhitekturi računarskih sistema.

Četvrti, i naš poslednji ponuđeni odgovor: Želim da se igram

Ovo je najslađi način da se započne projekat ovog tipa. Bilo da želite da pokrenete neki stari računar, ili želite da radite na svojem računaru ili virtuelnoj mašini, jako je lep osećaj kada na ekranu vidite prve znake života svog operativnog sistema. Ova putanja ne zahteva izgradnju kompletnog sistema i može da se odnosi samo na rad u drugačijem okruženju, bez podrške biblioteka i usluga koje nude standardni sistemi na koje smo navikli da su uvek tu.

Predlog puta do cilja

Koliko god da se potrudimo, ne možemo dovoljno da naglasimo koliko je znanja potrebno za rad na tom nivou. Zbog toga predlažemo da projekat započnete iz delova, bez velikih očekivanja i zahteva. Druga vrlo važna stvar je da za početak ne provodite previše vremena u planiranju. Planiranje bez konkretnih rezultata može da zamori i da nakon svega projekat ostane na početnoj fazi u obliku dokumentacije. Krenite malim koracima, a pročitajte u nastavku teksta koji to koraci mogu da budu.

Jedan možda malo neobičan savet je da započnete sa isprobavanjem drugačijih distribucija linuksa. Možemo da preporučimo Arč linuks kao način da se upoznate sa grafičkim interfejsom, okruženjem radne površi, podešavanjem programa za učitavanje sistema (eng. bootloader), itd. Sledeći korak bi mogao da bude instaliranje Džentu (eng. Gentoo) linuksa, koji zahteva još finije poznavanje operativnog sistema, nudi još više mogućnosti za podešavanje i dobar je način da se upozna sa podešavanjem, kompajliranjem i instaliranjem jezgra (eng. kernel). Ove dve stavke mogu da donesu i do nekoliko godina svakodnevne zabave, ali postoji i nastavak. Postoji distribucija „LFS” (eng. Linux From Scratch) koja je baš sve prepustila korisniku. Ne postoji intuitivan i automatizovan način ni za instaliranje ni za podešavanje. Moramo da naglasimo da ne preporučujemo LFS kao sistem za svakodnevni rad već više kao način za učenje. Poslednja stanica je zajednica koja se posvetila dokumentovanju stvaranja pojedinih delova operativnog sistema. Reč je o „OS-dev” zajednici, a nju možete pronaći na sajtu wiki.osdev.org.

Pokušajte da napravite program koji će se pokrenuti umesto operativnog sistema. Program koji ne zahteva operativni sistem, a radi nešto. Neka za početak ispiše barem nekoliko slova na ekranu. Dodajte unos sa tastature. Pokušajte da pokrenete više od jednog programa, odvojeno pa istovremeno. Dodajte podršku za rukovanje datotekama, komunicirajte sa mrežnom opremom, ili dodajte sprega ka grafičkoj kartici. Koliko složeno može da bude napraviti radni okvir nalik na Kjut (Qt) ili GTK? Posebno zanimljiv cilj je pokretanje nekog od postojećih programa na nečemu što sada već možemo da nazovemo operativnim sistemom.

Ukoliko smatrate da je ovo prevelik zalogaj, ili ste odlučili da ne želite da stvarate kompletan operativni sistem, možda želite da detaljnije izučite neki od postojećih. Pisanje modula za Linuks jezgro ili drajvere nije toliko složeno. Preporučujemo ipak da takve poduhvate isprobavate u virtuelnoj mašini i da budete oprezni da ne pokvarite svoj postojeći sistem.

Za kraj

Nadamo se da smo uspeli da vas zainteresujemo i ohrabrimo, ali i pripremimo za pravljenje jednostavnog operativnog sistema. U ovom članku smo otvorili mnogo više pitanja, nego što smo ponudili odgovora. Potrudićemo se da u narednim brojevima damo što više odgovora na ova pitanja, kroz praktične primere koje možete da isprobate, ili kroz predstavljanje postojećih projekata. U sledećem broju očekujte kratak pregled operativnih sistema koji su doveli do nastanka linuksa.