Dizajn

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 nasledje (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 obezbedjuje 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 medju 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 oslobadjanje 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 odredjenog broja procesa koji zauzimaju dosta resursa i prebacuje ih u sekundarnu memoriju. Kada zagušenje prodje, blokirani procesi se vraćaju u glavnu memoriju i nastavljaju sa izvršavanjem.

2000 - 2018, Autor - Marko Uskoković. Izrada i web prostor - Goran Aleksić.