You are on page 1of 21

SEMINARSKI RAD

MINIX
Sveučilište u Zagrebu
Fakultet Prometnih Znanosti
Vukelićeva 4

1. SADRŽAJ

1. SADRŽAJ.........................................................................................................2
2. RAZVOJ............................................................................................................3
3. MINIX 2.0 MOGUĆNOSTI.............................................................................3
4. PROCESI U MINIX-U.....................................................................................4
4.1. UNUTRAŠNJA STRUKTURA MINIX-A....................................................5
4.2. UPRAVLJANJE PROCESIMA.....................................................................6
4.4. RASPOREĐIVANJE POSLOVA..................................................................8
4.5. IMPLEMENTACIJA PROCESA..................................................................9
4.6. ORGANIZACIJA IZVORNOG KODA........................................................9
5. MEMORIJA....................................................................................................14
5.1. PREGLED UPRAVLJANJA MEMORIJOM U MINIX-U.........................14
5.2. ORGANIZACIJA MEMORIJE (LAYOUT)...............................................16
6. ZAKLJUČAK.................................................................................................20
7. LITERATURA................................................................................................21

2
Sveučilište u Zagrebu
Fakultet Prometnih Znanosti
Vukelićeva 4

2. RAZVOJ
Dok je operacijski sustav (dalje u tekstu OS) UNIX bio mlad (verzija 6), njegov izvorni kod je
bio naširoko dostupan pod licencom AT&T-a, te je bio često proučavan na sveučilištima.
Kada je AT&T izdao verziju 7, počeo je gledati na UNIX kao vrijedan komercijalni produkt,
te je zabranio proučavanje izvornog koda na sveučilištima kako bi zaštitio status UNIX-a kao
poslovne tajne. Mnoga su se sveučilišta pokorila novim pravilima te su odbacila proučavanje
UNIX-a i posvetila se učenju isključivo teorije OS-ova. Na žalost, podučavanje isključivo
teorije ostavlja studenta u neznanju o tome kako OS zapravo funkcionira. Neka područja OS-
a, poput I/O-a (ulaz/izlaz podsustav) te datotečnog podsustava, su bila zanemarivana pošto o
njima ne postoji mnogo teorije.

Kako bi popravio takvo stanje, Andrew S. Tannenbaumm odlučio je napisati iz temelja novi
OS koji bi bio kopatibilan sa UNIX-om iz perspektive korisnika, ali potpuno drugačiji iznutra.
Ne koristeći niti jednu liniju koda iz AT&T-ove verzije, taj novi sustav je izbjegao licencna
ograničenja, tako da se mogao korititi u edukacijskim studijama. Tako su studenti dobili
priliku rascjepkati OS na dijelove i proučavati ga iznutra. Tako je nastao MINIX. MINIX
zapravo znači mini-UNIX iz razloga što je dovoljno malen da bi ga razumjeli i «obični» ljudi.

Uz očitu prednost nad UNIX-om u eliminaciji pravnih problema, MINIX ima još jednu
prednost nad UNIX-om. Naime, MINIX je pisan deset godina nakon UNIX-a, te je kao takav
modularno strukturiran. Npr. MINIX-ov datatečni podsustav nije uopće dio OS-a već se
izvodi kao korisnički program. Druga razlika je u tome što je UNIX pisan da bude učinkovit;
MINIX je pisan da bude čitljiv. MINIX-ov izvorni kod ima više od tisuću komentara u sebi.

Poput UNIX-a, i MINIX je pisan u programskom jeziku C i namijenjen je laganom


prenošenjju na različita računala. Inicijalno je bio namijenjen za IBM PC računala zbog
njihove raširenosti. Kasnije je MINIX prenesen na druge platforme poput Atari, Amiga,
Macintosh i SPARC platforme. Polazeći od filozofije «maleno je lijepo», MINIX u originalu
nije zahtijevao čak ni tvrdi disk, što ga je činilo pristupačnim za studente jer su u to vrijeme
tvrdi diskovi bio poprilično skupi. Kako je MINIX rastao u funkcionalnosti i veličini
naposlijetku je tvrdi disk bio potreban, ali je bila dovoljna malena particija od 30-tak MB.

Prosječnom korisniku korištenje MINIX-a činit će se jednakim kao korištenje UNIX-a. Mnogi
osnovni programi puput cat, grep, ls, make te ljuske iz UNIX-a su prisutni i u MINIX-u te
obavljaju iste funkcije.

MINIX je evoluirao tijekom godina, tako da postoji nekoliko verzija. Dvije verzije su još
uvijek aktualne, ostale su zastarjele. Aktualne verzije su:

• MINIX 2.0 (Intel procesori od 8088 do Pentium)


• MINIX 1.5 (Intel, Macintosh, Amiga, Atari, SPARC)

MINIX 2.0 može se prevesti u 16-bitnom ili 32-bitnom modu, ovisno o vremenskim
zastavicama kompajliranja. Za 32-bitni mod potreban je Pentium.

3
Sveučilište u Zagrebu
Fakultet Prometnih Znanosti
Vukelićeva 4

3. MINIX 2.0 MOGUĆNOSTI

MINIX 2.0 MOGUĆNOSTI

• Potpuna višezadaćnost (više programa se može odvijati odjednom)


• Radi u zaštićenom modu na 286, 386, 486, Pentium
• Podrška za proširenu memoriju do 16 MB na 286; 4 GB na 386, 486 i Pentium
• Podrška za RS-232 serijsku liniju sa emulacijom terminala, kermit, zmodem itd.
• Do 3 istovremena korisnika na jednom računalu
• Sistemski pozivi kompatibilni sa POSIX-om
• Izvorni kod je u popunosti u C-u
• Izvorni kod je dostupan u cijelosti (OS, libraries)
• ANSI C prevoditelj
• Ljuska koja je funkcionalno identična Bourne-ovoj ljusci
• Umreženost preko TCP/IP protokola
• Pet editora (emacs subset, vi klon, ex, ed, i jednostavan ekran editor)
• Preko 200 naredbi ljuske (cat, cp, ed, grep, kermit, ls, make, sort, itd.)
• Preko 300 library procedura (atoi, fork, malloc, read, stdio, itd.)
• Engleski spelling checker sa 40000 riječi
• Online upute

4
Sveučilište u Zagrebu
Fakultet Prometnih Znanosti
Vukelićeva 4

4. PROCESI U MINIX-U
Za razliku od UNIX-a, čija je jezgra monolitički program koji nije podijeljen u module,
MINIX je zapravo skup procesa koji komuniciraju međusobno i sa korisničkim procesima
koriteći samo jednan između-procesni komunikacijski sustav - message passing. Takav dizajn
omogućuje modularniju i fleksibilniju strukturu, koja može, na primjer, zamijeniti u cijelosti
datotečni sustav sa neki drugim potpuno drugačijim datotečnim sustavom, a da pritom nije
bilo potrebno ponovno prevođenje jezgre.

4.1. UNUTRAŠNJA STRUKTURA MINIX-A


 MINIX je sastavljen od četiri sloja, od kojih svaki ima točno definiranu funkciju.

Bazni sloj prihvaća sve prekide i zamke, mogućnost raspoređivanja, te ostalim slojevima šalje
model sastavljen od nezavisnih sekvencijalnih procesa koji komuniciraju porukama. Kod u
ovom sloju ima dvije važne funkcije. Prva je prihvaćanje prekida i zamki, snimanje i
dohvaćanje podataka iz registara te scheduling. Druga je upravljanje mehanikom upravljanja
porukama; provjeravanje ispravnih destinacija, pronalaženje send i recieve međuspremnika u
fizičkoj memoriji, te kopiranje bajtova od pošillatelja do primatelja. Dio ovog sloja sa
najnižim nivoom upravljanja prekidima je napisan u assembleru. Ostatak baznog sloja te svi
ostali viši slojevi su napisani u C-u.

Drugi sloj sadrži I/O procese, jedan po tipu uređaja. Kako bi ih razlikovali od ubičnih
korisničkih procesa, nazvati ćemo ih zadaće (task). U mnogim sustavima zadaće se zovu
upravljači programi (device drivers). Zadaća je potrebna za svaki tip uređaja, uključujuči
diskove, printere, terminale itd. Jedna zadaća, sustavska zadaća, je malo drugačija jer se ne
odnosi na I/O uređaj.

5
Sveučilište u Zagrebu
Fakultet Prometnih Znanosti
Vukelićeva 4

Sve zadaće koje se nalaze u drugom sloju te cijeli kod prvog sloja su zajedno povezani u
jedinstveni binarbi program kojeg nazivamo JEZGRA. Neke zadaće dijele zajedničke
podrutine, ali inače su neovisne jedna od druge, te komuniciraju putem poruka. Intel

procesori, počevši od serije 286, pridjeljuju jedan od četiri nivoa prioriteta svakom procesu.
Iako se zadaće i jezgra prevode zajedno, kada se izvršava jezgra ili upravljači prekida, jezgra i
upravljači dobivaju veći prioritet od zadaća. Zbog toga kod jezgre može pristupiti bilo kojem
dijelu memorije i bilo kojem procesorskom registru. To u stvari znači da jezgra može izvršiti
bilo koju instrukciju koristeći podatke koji dolaze iz bilo kojeg dijela sustava. Zadaće ne
mogu izvršavati sve instrukcije, niti mogu pristupiti svim procesorskim registrima ili cijeloj
memoriji. Zadaće ipak mogu pristupati područjima memorije koja pripadaju procesima sa
manjim prioritetom, kako bi izvršile I/O zadatke. Sustavska zadaća, ne radi I/O zadaću u
normalnom smislu, već omogućuje razne servie, poput kopiranja između različitih
memorijskih područja za procese kojima to nije dopušteno.

Treći sloj sadrži procese koji pružaju korisne servise korisničkim procesima. Ovi se serverski
procesi izvode na manjem prioritetnom nivou od jazgre i zadaća te ne može izravno prisupati
I/O portovima. Također ne mogu pristupati memorijskim lokacijama koje su izvan njihovih

granica. Memory Menager (MM) izvršava sve MINIX-ove sustavske pozive koji zahtijevaju
upravljanje memorijom, poput narebi fork, exec i brk. File System (FS) izvršava sve datotečne
sustavske pozive, poput read, mount i chdir.

Zadnji, četvrti sloj, sadrži sve korisničke procese - ljuske, editore, prevoditelje i korisničke
programe a.out tipa. Sustav koji radi obično ima neke procese koji započnu kad se sustav
podiže i neprekidno traju. Npr, daemon je pozadinski proces koji se periodično izvršava ili
zauvijek čeka neki događaj, koji može biti primitak paketa sa mreže. Daemon se zapravo
može smatrati serverom koji je nezavisno pokrenut i izvodi se kao korisnički proces. Ali,
različito od pravih servera instaliranih na privilegiranim slotovima, programi poput daemona
ne mogu dobiti specijalnan tretman od strane jezgre koji imaju memorijski i datotečni procesi.

4.2. UPRAVLJANJE PROCESIMA


Procesi u MINIX-u mogu kreirati podprocese, koji mogu kreirati još podprocesa, te se na
kraju stvara cijelo stablo procesa. Zapravo, svi korisnički procesi u cijelom sustavu si dio
glavnog stabla kojemu je naredba init u korijenu. Kako je došlo do te situacije? Kada se
računalo upali, hardver učitava prvi sektor prve trake na boot disku u memoriju i izvršava kod
koji se tamo nalazi. Detalji o tom postupku se razlikuju u ovisnosti o činjenici da li sustav
podižemo sa diskete ili tvrdog diska. Na disketi prvi sektor sadrži bootstrap program. On je
veoma malen, pošto mora stati u jedan sektor. MINIX bootstrap program učitava veći
program, boot, koji zatim učitava operativni sustav.

6
Sveučilište u Zagrebu
Fakultet Prometnih Znanosti
Vukelićeva 4

Za razliku od diskete, tvrdom disku je potreban međukorak. Tvrdi disk je podijeljen u


particije, te prvi sektor tvrdog diska sadrži malen program i tablicu particija. To dvoje
zajedno se nazivaju master boot record. Programski dio je zadužen za čitanje tablice particije i
biranja aktivne particije. Aktivna particija ima bootstrap program u svojem prvom sektoru,
koji se učitava te pronalazi i pokreće sustav.

U svakom slučaju, boot traži multipart datoteku na disketi ili particiji i učitava individulane
dijelove u odgovarajuće pozicije u memoriji. Ti dijelovi su: jezgra, memory menager,
datotečni sustav te init, prvi korisnički proces. Proces podizanja sustava nije jednostavna
operacija. Operacije kojima upravljaju diskovi i datotečni sustav moraju biti obavljene od
strane boot programa prije nego su ti dijelovi sustava uopće aktivni.

Tijekom inicijalizacijske faze, jezgra započinje zadaće, zatim MM, datotečni sustav, i sve
ostale servere koji se odvijaju u trećem sloju. Kada se sve to izvrši i sustav inicijalizira, sve te
zadaće će se blokirati i čekati posao. Kada se blokiraju sve zadaće i serveri, izvršava se init,
prvi korisnički proces. Init se naravno mogao pokrenuti i sa tvrdog diska pošto je već cijeli
sustav inicijaliziran. Ali, pošto se init pokreće samo sada i nikad ponovno sa tvrdog diska,
jednostavnije ga je uključiti u sustavsku image datoteku zajedno sa jezgrom, zadaćama i
serverima.

Init započinje svoj posao čiajući datoteku /etc/ttytab, koja sadrži popis svih mogućih
terminalskih uređaja. Uređaji koji se mogu koristiti kao login terminali imaju zapis u getty
dijelu /etc/ttytab-a, te init stvara proces dijete za svaki takav terminal. Svako dijete zatim

izvršava /usr/bin/getty koji ispisuje poruku, te čeka da korisnik upiše ime. Potom se poziva
/usr/bin/login sa imenom kao argumentom.

Nakon uspješnog logiranja, bin/login učitava korisničku ljusku (koja je određena u datoteci
/etc/passwd, i obično se radi o /bin/sh ili /usr/bin/ash). Ljuska čeka na upisivanje naredbi te
zatim stvara nove procese za svaku naredbu. Gledajući iz te perspektive, ljuske su djeca init-a,
a korisnički procesi su njegavi unuci, i svi korisnički procesi u sustavu su dio jednog stabla.

Dva glavna principa MINIX-ovih sustavskih poziva za upravljanje procesima su FORK i


EXEC. FORK je jedini način stvaranja novog procesa. EXEC omogućava procesu da izvrši
određeni program. Kada se program izvršava, za njega se rezervira dio memorije čija je
veličina zapisana u zaglavlju programske datoteke.

Sve informacije o procesima se čuvaju u tablici procesa, koja je razdijeljena između jezgre,
MM-a, i datotečnog sustava. Kada se pojavi novi proces (FORK), ili se stari proces prekine
(od strane naredbe EXIT ili signala), MM prvo osvježuje dio u tablici procesa, a zatim šalje
poruke datotečnom sustavu i jezgri govoreći im da učine isto u svojim dijelovima.

7
Sveučilište u Zagrebu
Fakultet Prometnih Znanosti
Vukelićeva 4

4.3. MEĐUPROCESNA KOMUNIKACIJA


Tri primitive se koriste za slanje i rimanje poruka. One se pozivaju od strane C library
procedura

send(dest, &message);

šalje poruku procesu dest

recieve(source, &message);

prima poruku od procesa source, i

send_rec(src_dst, &mesage);

šalje poruku i čeka odgovor od istog procesa. Drugi parametar u svim pozivima je lokalna
adresa poruke. Mehanizam za propuštanje poruka u jezgri kopira poruku od pošiljatelja to
primatelja. Odgovor (za send_rec) prepisuje originalnu poruku. Svaki proces ili zadaća može
slati i primati poruke od procesa i zadaća iz svojeg sloja, te iz sloja direktno ispod svojeg.
Korisnički procesi ne mogu komunicirati dirketno sa I/O zadaćama. Sustav potiče takvu
zabranu.

Kada proces pošalje poruku procesu koji trenutno ne čeka poruku, pošiljatelj se blokira dok
odredište ne pređe u RECIEVE. Drugim riječima, MINIX koristi metodu sastanka
(rendezvous) da bi riješio problem spremanja poruka koje su poslane, ali nisu primljene. Iako
je ta metoda manje fleksibilna od metode sa međuspremnicima, primjerena je za ovaj sustav,
te mnogo jednostavnija pošto upravljanje međuspremnicima nije potrebno.

4.4. RASPOREĐIVANJE POSLOVA


 Ono što zapravo pokreće višezadaćni sustav je sustav prekida. Procesi se blokiraju kada šalju
zahtjev za upis, dozvoljavajući drugim procesima da se izvrše. Kada upis postane dostupan,
proces koji se trenutno odvija biva prekidan od strane diska, tipkovnice ili drugog hardvera.
Sustavski sat također generira prekide koji osiguravaju da proces koji se trenutno odvija a nije
zatražio upis evenutalno oslobađa CPU, kako bi dao šansu ostalim procesima da se pokrenu.
Upravo je zadatak najdonjeg sloja MINIX-a da sakrije te prekide mijenjajući ih u poruke. Iz
pogleda procesa i zadaća, kada I/O uređaj završi operaciju on šalje poruku nekom procesu,
"budeći ga" i čini ga aktivnim.

Svaki put kada je proces prekinut, bilo od strane I/O uređaja ili sustavskog sata, iznova se
odlučuje koji proces najviše zaslužuje pokretanje. Naravno, to se mora učiniti svaki put kada
neki proces završi svoj posao, ali u sustavu poput MINIX-a prekidi uzrokovani I/O uređajima
ili sustavskim satom se događaju puno češće nego završetci procesa. MINIX-ov raspoređivač

8
Sveučilište u Zagrebu
Fakultet Prometnih Znanosti
Vukelićeva 4

koristi redni sustav sa tri nivoa, koji zapravo odgovaraju slojevima 2, 3, i 4. Unutar zadaća i
nivoa servera procesi se izvode dok se ne blokiraju, ali korisnički procesi su raspoređeni

koristeći round robin. Zadaće imaju najviši prioritet, nakon njega slijede MM i datotečni
server (File Server, FS), te naposlijetku korisnički procesi.

Kada odabire koje će procese pokrenuti, raspoređivač provjerava da li postoje spremne


zadaće. Ako postoje, zadaća na vrhu reda će se pokrenuti. Ako nema spremne zadaće, ako
postoje, odabiru se MM ili FS, inače se pokreće korisnički proces. Ako nijedan proces nije
spreman, pokreće se IDLE proces. IDLE je zapravo petlja koja se konstantno izvršava do
slijedećeg prekida.

Na svaki tik sustavskog sata, vrši se provjera da li je trenutni proces u izvođenju korisnički
proces koji se odvija duže od 100 ms. Ako jest, poziva se raspoređivač koji provjerava da li
neki drugi korisnički proces čeka CPU. Ako postoji korisnički proces koji čeka CPU, trenutni
proces se stavlja na dno reda, te se izvodi proces koji je na vrhu tog reda. Zadaće, MM i FS se
nikad ne provjeravaju od strane sustavskog sata, bez obzira na njihovo trajanje.

4.5. IMPLEMENTACIJA PROCESA


 Sada ćemo pobliže pogledati izvorni kod sustava, pa je potrebno objasniti nekoliko notacija.
Pojmove "procedura", "funkcija" i "rutina" ćemo često koristiti. Imena varijabli, procedura i
datoteka če biti zapisane ukoso, poput rw_flag. Sustavski pozivi će biti prikazani velikim
slovima, poput READ.

4.6. ORGANIZACIJA IZVORNOG KODA


 Izvorni kod je organiziran kao dva direktorija. Putevi prema tim direktorijima na
standardnom MINIX sustavu su /usr/include/ i /usr/src/. Stvarna lokacija tih direktorija može
varirati od sustava do sustava, ali striktura direktorija ispod najvišeg nivoa je ista.

include/ sadrži brojne POSIX standardne header datoteke. Ima 3 poddirektorija:

1. sys/ - sadrži dodatne POSIX headere.

9
Sveučilište u Zagrebu
Fakultet Prometnih Znanosti
Vukelićeva 4

2. minix/ - sadrži header datoteke koje koristi OS.

3. ibm/ - sadrži header datoteke sa specifičnim definicijama za IBM PC računala.

Kako bi se omogućilo proširenje MINIX-a te pokretanje programa u MINIX okruženju, u


include/ direktoriju se nalaze i mnoge druge datoteke.

src/ također sadrži 3 važna poddirektorija koji sadrže izvorni kod OS-a: 

1. kernel/ - slojevi 1 i 2 (procesi, poruke, driveri).

2. mm/ - izvorni kod upravljača memorije.

3. fs/ - izvorni kod datotečnog ustava.

Postoje još 3 direktorija u kojima se nalazi izvorni kod OS-a, koje ću ovdje samo spomenuti,
koji su također neophodni za normalno funkcioniranje sustava:

1. src/lib/ - izvorni kod za library procedure (npr. open, read).

2. src/tools/ - izvorni kod programa init, potrebnog za pokretanje MINIX-a.

3. src/boot/ - izvorni kod podizanja i instaliranja MINIX-a

Standardna distribucija MINIX-a sadrži još nekoliko direktorija sa izvornim kodom. OS bi


trebao, naravno, biti u mogućnosti pokretati komande (programe), pa tako postoji veliki
/src/commands/ direktorij sa izvornim kodom za naredbe ljuske (npr. cat, cp, date, ls, pwd).
Pošto je MINIX edukacijski OS, namijenjen modificiranju, Također postoji i src/test/
direktorij sa programima namijenjenim za cjelovito testiranje novo-prevedenog MINIX
sustava. Konačno, src/inet direktorij sadrži izvorni kod za prevođenje MINIX-a sa podrškom
za umrežavanje.

Izvorni kod za slojeve 1 i 2 se nalazi u direktoriju src/kernel/. Ovdje ću opisati pobliže


datoteke iz ovog direktorija koji omogućuju podršku za upravljanje procesima, koja se nalazi
u prvom sloju. Ovaj sloj sadrži funkcije koje upravljaju inicijalizacijom sustava, prekidima,
prolaskom poruka i raspoređivanjem procesa.

Prevođenjem MINIX-a, sav izvorni kod u datotekama koje se nalaze u src/krernel/, src/mm/ i
src/fs/ se prevodi u objektne datoteke. Sve objektne datoteke u src/kernel se povezuju i
stvaraju jedinstven pokretljivi program, kernel. Sve objektne datoteke u src/mm/ se također

10
Sveučilište u Zagrebu
Fakultet Prometnih Znanosti
Vukelićeva 4

povezuju i stvaraju program mm. Isto vrijedi i za objektne datoteke u src/fs. Dodavanje
proširenja se obavlja dodavanjem dodatnih servera. Npr, mrežna podrška se dodaje
modificiranjem include/minix/config.h kako bi se omogućilo prevođenje datoteka u src/inet/
direktoriju te stvaranje programa inet. Slijedeći izvršivi program, init, se gradi u src/tools.
Program installboot (čiji se izvor nalazi u src/boot) dodaje imena svim ovim programima,
namješta ih tako da njihova veličina bude višekratnik veličine disk sektora (kako bi se lakše
neovisno učitavali), te ih spaja u jedinstvenu datoteku. Ova nova datoteka je binary OS-a te se
može kopirati ili u root direktorij ili u /minix direktorij na floppy disku ili particiji tvrdog
diska. Kasnije, program za nadgledanje podizanja sustava može učitati i pokrenuti OS. Slika
2. pokazuje izgled memorije nakon što se programi kernel, mm i fs razdijele i učitaju. Detalji
naravno ovise o konfiguraciji OS-a. Primjer na slici prikazuje MINIX sustav konfiguriran

tako da iskoristi prednosti računala sa nekoliko MB memorije. To omogućava da možemo


stvoriti velik broj međuspremnika datotečnog sustava, ali rezultirajući veliki datotečni sustav
ne može se smjestiti u donji dio memorije koji se nalazi ispod 640K. Ako bi drastično smanjili
broj međuspremnika mogli bi cijeli sustav smjestiti u prostor manji od 640K, i još bi imali
mjesta za nekoliko korisničkih procesa.

11
Sveučilište u Zagrebu
Fakultet Prometnih Znanosti
Vukelićeva 4

Važno je shvatiti da se MINIX sastoji od tri ili više u potpunoti neovisnih programa koji
komuniciraju isključivo imjenjivanjem poruka. Procedura pod nazivom panic koja se nalazi u

src/fs/ se ne sukobljava sa procedurom panic koja se nalazi u src/mm/ jer su naposljetku


povezani u različite izvršive datoteke. Jedine procedure koje tri dijela sustava imaju
zajedničke su nekoliko library procedura koje se nalaze u direktoriju /lib. Takva modularna
struktura omogučuje vrlo jednostavnu modifikaciju npr. datotečnog sustava bez straha da će
promjene utjecati na rad upravljača memorije. Također omogučuje vrlo izravno uklanjanje

12
Sveučilište u Zagrebu
Fakultet Prometnih Znanosti
Vukelićeva 4

čitavog datotečnog sustava te njegovo premještanje na neki drugi stroj gdje može raditi kao
datotečni server, komunicirajući sa drugim korisničkim strojevima šaljući poruke preko
mreže.

Kao još jedan primjer modularnosti MINIX-a, možemo navesti da prevodeći sustav sa ili bez
mrežne podrške ne pravi nikakvu razliku što se tiče rada MM-a ili datotečnog sustava i utječe
samo na jezgru jer se Ethernet zadaća tamo prevodi, zajedno sa podrškom za druge I/O
uređaje. Kada je uključen, mrežni server je integriran u MINIX sustav kao server sa istom
razinom prioriteta kao MM ili datotečni server. Njegov rad može uzrokovati vrlo brzo
premještanje velikog broja podataka, a to naravno zahtijeva veći prioritet od korisničkih
procesa.

13
Sveučilište u Zagrebu
Fakultet Prometnih Znanosti
Vukelićeva 4

5. MEMORIJA

5.1. PREGLED UPRAVLJANJA MEMORIJOM U MINIX-U


Upravljanje memorijom u MINIX-u je jednostavno: ne koristi se ni paging ni mijenjanje
(swapping). Upravitelj memorije sadrži listu rupa (mjesta) sortiranih u memoriji prema
adresama. Kada je potrebna memorija, bilo zbog sustavskog poziva FORK ili EXEC, lista
mjesta se pretražuje upotrebljavajući prvo mjesto koje je dovoljno veliko. Jednom kada je
proces smješten u memoriju, ostaje na istom mjestu dok se ne izbriše (prekine). Nikada se ne
premješta na drugo mjesto. Dodijeljeno mjesto nikada se ne povećava niti se smanjuje.

Ovakva strategija zahtjeva objašnjenja. Ona se temelji na tri činjenice: (1) ideji da se MINIX
upotrebljava na osobnim računalima, a ne na velikim povezanim (timesharing) sustavima, (2)
želji da MINIX radi na svim IBM-ovim PC-ima, (3) želji da se sustav jednostavno
implementira na malim računalima.

Prva činjenica znači, da je u prosjeku broj pokrenutih procesa mali, tako da će općenito
dovoljno memorije za izvršavanje svih procesa i da bude slobodnog prostora. Zamjena
(Swapping) tada neće biti potrebna. Zbog toga što (swapping) mijenjanje dovodi do složenosti
sustava, njegovo ne-korištenje dovodi do jednostavnosti koda.

Želja da MINIX radi na svim IBM-ovim PC kompatibilnim računalima također je imala


značajan utjecaj na dizajn upravljanja memorijom. Najjednostavniji sustavi u ovoj obitelji
koriste 8088 procesor, koji ima primitivnu arhitekturu upravljanja memorijom. Ne podržava

virtualnu memoriju u bilo kojem obliku te također ne otkriva preopterećenje stoga (stack
overflow), nedostatak koji je imao velik utjecaj na način na koji su procesi poredani u
memoriji. Ova ograničenja ne postoje u kasnijim dizajnima koji koriste procesore 80386,
80486 ili Pentium procesore. Međutim, upotrebljavanjem tih prednosti MINIX bi postao
nekompatibilan sa mnogim slabijim računalima koji se još uvijek koriste.

Pitanje povezanosti (portability) zahtjeva što jednostavniju shemu upravljanja memorijom.


Ako bi MINIX koristio paging i segmentaciju, bilo bi teško, ako ne i nemoguće, povezati ga s
računalima koje nemaju ove karakteristike. Stvaranjem minimalnog broja pretpostavki o
mogućnostima hardvera, broj računala s kojima MINIX može biti povezan je povećan.

14
Sveučilište u Zagrebu
Fakultet Prometnih Znanosti
Vukelićeva 4

Još jedna karakteristika MINIX-a je način na koji je upravljanje memorije implementirano.

Upravljanje memorije nije dio jezgre. Odnosno, upravljan je pomoću procesa pod nazivom
upravljač memorije (memory menager ili MM), koji radi u korisničkom prostoru i komunicira
s jezgrom pomoću standardnog mehanizma prijenosa poruka (standard message mechanism).
Položaj MM-a na serverskom nivou prikazan je na slici 1.

15
Sveučilište u Zagrebu
Fakultet Prometnih Znanosti
Vukelićeva 4

Uklanjanje MM-a iz jezgre je primjer separacije politike (policy) i mehanizma. Odluke o


tome koji proces će biti smješten na koje mjesto u memoriji (politika) donosi MM. Stvarno

postavljanje memorijskih mapa za procese (mehanizam) obavlja se pomoću sustavskog


zadataka unutar jezgre. Razdvajanje omogućava relativno lako mijenjanje politike MM-a
(algoritme i slično) bez potrebe modifikacije nižih područja operacijskog sustava.
Većina kodova MM-a je posvećena rukovanju sustavskih poziva MINIX-a koji uključuju
upravljanje memorijom, prije svega FORK i EXEC, a ne samo manipuliranje listama procesa
i rupa.

5.2. ORGANIZACIJA MEMORIJE (LAYOUT)


Jednostavni MINIX procesi koriste kombinirani I i D prostor, u kojem svi djelovi procesa
(tekst, podaci i stack) dijele jedan blok memorije koji je dodijeljen i oslobođen kao jedan blok
(dio). Procesi mogu također biti sastavljeni tako da koriste različit I i D prostor. Da bi
pojasnili, najprije će biti objašnjeno dodjeljivanje memorije za jednostavniji model. Procesi
koji koriste odvojene I i D prostore može koristiti memoriju efikasnije, ali oduzimanje
prednosti ove karakteristike komplicira situaciju.

Memorija se dodjeljuje u MINIX-u u dvije situacije. Prva, kada se proces razdvaja,


dodijeljena je količina memorije koju dijete treba. Drugo, kada proces mijenja svoj
memorijski izgled pomoću sistemskog poziva EXEC, stari izgled se vraća na slobodnu listu
kao mjesto (rupa) i memorija je dodijeljena za novi izgled. Novi izgled može biti dio
memorije različite od oslobođene memorije. Njegova lokacija će ovisiti o tome gdje je
odgovarajuće mjesto (rupa) nađena. Memorija se oslobađa i kada je proces prekinut, ili zbog
izlaska ili zbog prekida signala.

Slika 2. prikazuje oba načina dodjeljivanja memorije. Na slici 2(a) vidimo dva procesa, A i B,
u memoriji. Ako se A raščlani, dolazimo do situacije prikazane na Slici 2(b). Dijete je ista
kopija A. Ako dijete sada izvede file C, memorija izgleda kao na slici 2(c). Izgled (image)
djeteta je zamijenjen s C.

  Slika 2.

16
Sveučilište u Zagrebu
Fakultet Prometnih Znanosti
Vukelićeva 4

Treba zamijetiti da se stara memorija za dijete oslobađa prije nego je nova memorija za C
dodijeljena, tako da C može koristiti memoriju djeteta. Na ovaj način, serije FORK i EXEC
parova (kao što je ljuska koja čini cjevovod (pipeline)) rezultira time da su svi procesi

granični, i nema rupa između njih, kao što bi bilo slučaj ako bi nova memorija bila dodijeljena
prije nego bi stara bila otpuštena.

Kada je memorija dodijeljena, pomoću sustavskih poziva FORK ili EXEC, određeni dio nje
uzet je za novi proces. U prijašnjem slučaju, količina memorije koja je uzeta identična je
količini koji ima roditeljski proces. U kasnijem slučaju, upravljač memorije uzima količinu
memorije koja je specificirana u zaglavlju datoteke. Kada je dodjeljivanje napravljeno,
procesu se više nikad ne dodijeljuje još memorije.

Ono što je do sada rečeno odnosi se na programe koji su sastavljeni od kombiniranog I i D


prostora. Programi sa odvojenim I i D prostorom ima prednost povećanog moda memorijske
organizacije koja se zove podijeljen tekst (shared text). Kada takav proces načini FORK,
dodijeljena je samo količina memorije potrebna za kopiranje i gomilanje novog procesa
podataka. I roditelj i dijete dijele izvršni kod koji je već korišten od roditelja. Kada takav
proces radi EXEC, izvrši se pretraga da se utvrdi da li neki drugi proces koristi izvršni kod
koji je potreban. Ako se on nađe, nova memorija se dodijeli samo za podatke i hrpu (stack), a
tekst memorije već se dijeli. Podijeljen tekst komplicira prekidanje procesa. Kada je proces
prekinut uvijek otpušta memoriju koja je bila sa podacima i stogom (stack). Ali otpušta samo
memoriju koja je okupirana njegovim tekstualnim dijelom samo ako pretraga procesa otkrije
da niti jedan drugi proces ne dijeli tu memoriju. Stoga se procesu može dodijeliti više
memorije kada počinje nego što otpušta kada završava, ako je učitao dio svog teksta kada je
započinjao ali taj tekst dijeli više procesa nakon što je prvi proces završio.

Slika 3.

Slika 3. prikazuje kako je kako je program pohranjen kao disk datoteka i kako je pretvoren u
internu memorijsku organizaciju (layout) MINIX procesa. Zaglavlje disk datoteke sadržava
informacije o veličinama različitih dijelova izgleda (image), te informacije o ukupnoj veličini.
U zaglavlju programa sa običnim I i D prostorom, specificira se ukupna veličina teksta i
dijelova podataka. Dio sa podacima izgleda (image) povećava se za veličinu specificiranu u

17
Sveučilište u Zagrebu
Fakultet Prometnih Znanosti
Vukelićeva 4

bss polju zaglavlja. Ovo područje je oslobođeno da sadrži samo nule i koristi se za ne-
inicijalizaciju statičkih podataka. Ukupna veličina memorije koja se dodjeljuje specificirana je

cijelim područjem zaglavlja. Tako, npr. program ima 4K teksta, 2K podataka plus bss i 1K
stoga (stack), a zaglavlje dodjeljuje ukupno 40K, razlika između neiskorištene memorije
između segmenta podataka i segmenta stoga (stack) iznosi 33K. Datoteka na disku sadržava
tablice simbola (simbol table). On se koristi za otklanjanje grešaka i ne kopira se u memoriju.

Ako programer zna da ukupna memorija potrebna za zajednički rast podataka i segmenta
stoga (stack) za datoteku a.out iznosi najviše 10K, on može dati naredbu

chmem=10240 a.out

koja mijenja područje zaglavlja tako da za vrijeme EXEC-a upravljač memorije dodjeljuje
prostor od 10240 byte-a više nego iznosi suma početnog teksta i segmenta podataka. Za gore
navedeni primjer, ukupno 16K će biti dodijeljeno za sve kasnije EXEC-e datoteke. Od toga
iznosa, najviše 1K će se iskoristiti za stog, a 9K će biti u razlici, gdje se može koristiti za
povećanje stoga, područja podataka ili oboje.

Za program koji koristi odvojen I i D prostor (na što ukazuje dio zaglavlja koji je definiran
linkerom), ukupna veličina zaglavlja odnosi se na zajedničke podatke i prostor stoga. Program
koji ima 4K teksta, 2K podataka, 1K hrpe i ukupnu veličinu od 64K biti će dodijeljeno 68K
(4K prostora za uputu, 64K prostora za podatke), dok ostaje 61K za segment podataka i stoga
koji će se koristiti za vrijeme izvršavanja. Granice segmenta podataka mogu se pomicati samo
uz pomoć BRK sustava poziva. BRK provjerava da li da li se novi segment podataka sudara
sa trenutačnim pokazateljem stoga (stack), a ako ne, bilježi promjenu u nekoj internoj tabeli.
Ako se novi segment podataka sudari sa stogom, poziv propada.

Ovakva strategija je odabrana da bi se omogućilo pokretanje MINIX-a na IBM PC računalima


sa 8088 procesorima, koji ne provjerava preopterećenje stoga u hardveru. Korisnički program
može ugurati na stog neograničenu količinu riječi bez da operacijski sustav toga bude
svjestan. Na računalima koja imaju složeniji memorijski menadžment hardvera, stogu se
početno dodjeljuje određena količina memorije. Ako se desi da proces preraste određenu
veličinu memorije, aktivira se zamka operacijskog sustava i sustav dodjeljuje djelić memorije
na hrpu, ako je to moguće. Takva zamka ne postoji na 8088 procesoru, pri čemu se javlja
opasnost ako stog graniči sa bilo čime osim sa velikom količinom neiskorištene memorije,
budući da hrpa može narasti brzo i bez upozorenja. MINIX je dizajniran tako da ako se
implementira na računalo sa boljim MM-om, odmah se jednostavno mijenja i MINIX-ov
MM.

Sada je dobro spomenuti moguće semantičke poteškoće. Kada koristimo riječ «segment»,
mislimo na dio memorije definirane od strane operacijskog sustava. Intel 80x86 procesor ima
set unutarnjih «registara segmenta» (segment register) (u naprednim procesorima) i «tablice
opisa segmenata» (segment descriptor tables) koji omogućavaju hardversku podršku
«segmentima». Intelov koncept hardverskog dizajna segmenta sličan je, ali nije uvijek isti
kao, segmenti koji se koriste i koji su definirani MINIX-om. Sve preporuke na segmente u

18
Sveučilište u Zagrebu
Fakultet Prometnih Znanosti
Vukelićeva 4

ovom tekstu trebaju se interpretirati kao preporuke memorijskih područja ocrtanih pomoću
MINIX-ovih struktura podataka. Kada se govori o hardveru eksplicitno ćemo govoriti o
segmentu registara ili segmentu deskriptora.

To upozorenje može biti generalizirano. Dizajneri hardvera često pokušavaju osigurati


podršku operacijskim sustavima za koje pretpostavljaju da će ih koristiti na svojim računalima
i terminologiju koja se koristi za opisivanje registara i drugih aspekata procesorske
arhitekture, često reflektiraju ideju kako će se karakteristike koristiti. Takve karakteristike
često su korisne da budu implementatori operacijskog sustava, ali se ne moraju upotrebljavati
na način na koji su predvidjeli dizajneri hardvera. To može dovesti dio nerazumijevanja kada
ista riječ ima različita značenja kada se koriste za objašnjavanje aspekta operacijskog sustava
ili dotičnog hardvera.

19
Sveučilište u Zagrebu
Fakultet Prometnih Znanosti
Vukelićeva 4

6. ZAKLJUČAK

Kao i Linux, i Minix je započeo postojanje u rukama samo jednog autora – profesora
Andrewa Tanenbauma, i oba su (re)implementacija operacijskog sustava UNIX, no sličnosti
među sustavima ovdje prestaju. Razlog stvaranja Minixa je dvojak: s jedne strane je bila
potreba poučavanja studenata radu operacijskih sustava, a s druge želja za isprobavanjem
novih smjerova pri njihovoj implementaciji. Iako je izvorni kôd nekih postojećih UNIX
sustava bio dostupan, obično bi bio pod strogom licencom nepogodnom za akademske
potrebe. S druge strane, kôd Minixa je bio (i još uvijek je) dostupan pod vrlo liberalnom
licencom BSD i sa simboličnom naknadom.

Značajnija razlika među sustavima je u detaljima implementacije. Velika većina današnjih


operacijskih sustava sadrži jezgre tzv. “monolitne” arhitekture, u kojoj je jezgra jedan
program (preciznije proces) koji izravno komunicira s hardverom. U takvom sustavu driveri
za pojedini hardver su u osnovi samo pozivi funkcija unutar većeg procesa. UNIX sustavi, pa
tako i Linux, su poslovični “školski primjer” ove arhitekture te pobiru sve njene dobre i loše
strane. Pozitivne osobine su velika brzina izvođenja i veća međusobna povezanost podsustava
u jezgri, a negativna da ukoliko se negdje dogodi pogreška (na primjer, u driveru), cijela
jezgra (koja je jedan program) kritično zastane. Jasno je da za neke potrebe ovo nije
prihvatljivo rješenje.

20
Sveučilište u Zagrebu
Fakultet Prometnih Znanosti
Vukelićeva 4

7. LITERATURA

http://www.minix3.org/
http://minix1.woodhull.com/
http://www.osnews.com/story/15960/Introduction-to-MINIX-3/
http://www.freesoftwaremagazine.com/articles/minix#
http://www.minix3.ru/

21

You might also like