Nazad | Maturski rad | Dalje |
|
- Manipulisanje memorijom -
Centralni deo operativnog sistema zauzima sistem za
manipulisanje memorijom (memory management system). On je zadužen za
kontrolisanje memorijskih resursa koji su dostupni mašini. Primarna (glavna)
memorija je RAM memorija računara, a sekundarna je svaki drugi medijum za
čuvanje podataka (hard disk, cdrom...).
Svaki program ima svoj privatni adresni prostor. On se
sastoji iz data, text i stack segmenata. Data segment sadrži inicijalizovane
i neinicijalizovane podatke programa. Text segment sadrži mašinske instrukcije
i dele ga svi procesi koji izvršavaju taj fajl, dok su data i stack segmenti
privatni za svaki proces. U stack segmentu se nalazi run-time stack programa i
njega kernel automatski proširuje dok se program izvršava. Data segment može
biti proširen ili skupljen pozivanjem sistemskog poziva, dok veličina i sadržaj text
segmenta mogu jedino biti promenjeni prilikom pozivanja sistemskog poziva
execve, kada se postojeća memorijska slika prepisuje nekom drugom i stvara
se novi proces.
Prilikom započinjanja izvršavanja nekog programa, kernel
prvo učita text segment programa na početak adresnog prostora. Posle toga kernel mapira
inicijalizovane podatke data segmenta i nulira ostatak adresnog prostora
(koji je veličine neinicijalizovanih podataka i stack-a). Iako to nuliranje nije
neophodno (čak je i suvišno jer usporava učitavanje programa) rani UNIX sistemi
su to ostavili u nasleđe (mnogi programi računaju na to da je početna vrednost
promenljive nula).
Kopiranje celog text segmenta i inicijalizovanih podataka
u memoriju mnogo usporava proces inicijalizovanja programa. 4.4BSD ovo izbegava
korišćenjem straničenja na zahtev (demand paging) koje obezbeđuje
da se program učitava u malim delovima - stranicama prvi put kada one postanu
potrebne. Adresni prostor se deli na stranice jednakih veličina, a kernel
vodi računa o adresama stranica koje su učitane. Kada program pokuša da pristupi
stranici koja nije učitana javi se page-fault trap u kernelu, page-fault
trap handler učita dotičnu stranicu i program nastavlja sa izvršavanjem. Ovako
se u memoriju učitavaju samo delovi programa koji se koriste.
Usled primene multiprogramiranja neophodno je da
operativni sistem efektivno deli memorijske resurse među procesima. Ceo adresni
prostor procesa ne mora u svakom trenutku biti prisutan u primarnoj memoriji da
bi se proces izvršavao. Ukoliko su memorijski resursi sistema niski, kernel sprovodi
neki od mehanizama za oslobađanje resursa. Kernel može izbaciti stranice koje
nisu dugo bile upotrebljivane (paging), ili može ceo kontekst procesa
prebaciti u sekundarnu memoriju (swapping). Straničenje na zahtev i
zamena stranica su transparentni za procese, ali procesi mogu pružiti sistemu
informacije o budućim memorijskim zahtevima, radi poboljšanja performansi.
Dobra strana memory management-a je to što se
omogućava da postoji više procesa nego što može da se smesti u primarnu
memoriju, a loša je ta što se izvršavanje procesa usporava. Sistem mora da se
pobrine da minimizuje trashing. To je pojava kada sistem više vremena
troši da izvrši zamenu stranica, nego što troši na korišćenje tih stranica. Sistem
detektuje trashing tako što posmatra količinu slobodne memorije. Ukoliko postoji
mali broj slobodnih stranica, a veliki je broj zahteva za alociranje memorije, sistem
blokira izvršavanje određenog broja procesa koji zauzimaju dosta resursa i
prebacuje ih u sekundarnu memoriju. Kada zagušenje prođe, blokirani procesi se
vraćaju u glavnu memoriju i nastavljaju sa izvršavanjem.
Nazad | Početak | Dalje | |
PROCESI | I/O SISTEM |