Professional Documents
Culture Documents
Virtualna Memorija
Virtualna Memorija
1 Uvod
U prethodnom poglavlju smo predstavili o razli£ite strategijame upravljanja
memorijom koje se koriste u ra£unarskim sistemima. Sve ove strategije imaju isti
cilj: odrºavati vi²estruke procese u memoriji istovremeno kako bi se omogu¢ilo
multi-programiranje. Meutim, oni obi£no zahtevaju da £itav proces bude u
memoriji pre nego ²to se moºe izvr²iti.
Virtualna memorija je tehnika koja omogu¢ava izvr²avanje procesa koji nisu
u potpunosti u memoriji. Glavna prednost ove ²eme je da programi mogu biti
£ak i ve¢i od raspoloºive zi£ke memorije. Nadalje, virtualna memorija abstra-
kuju glavnu memoriju u ekstremno veliki, kontinualni niz lokacija, odvajaju¢i
pri tome logi£ku memoriju, onako kako je korisnik vidi, od zi£ke memorije.
Ova tehnika oslobaa programere od brige u vezi sa ograni£eno²¢u memorije.
Virtualna memorija takoe omogu¢ava procesima da lako dele datoteke i im-
plementiraju deljenu memoriju. Dodatno, omogu¢ava ekasan mehanizam za
kreiranje procesa. Meutim, virtualnu memoriju nije lako implementirati i per-
formanse sistema se mogu degradirati vi²estruko ukoliko se to uradi pogre²no.
Algoritmi za upravljanje memorijom navedeni u ranije potrebni su zbog jed-
nog osnovnog zahteva: instrukcije koje se izvr²avaju moraju biti sme²tene u
zi£koj memoriji. Prvi na£in da se ovaj zahtev zadovolji jeste da se celokupni
logi£ki prostor sme²ta u zi£ku memoriju. Dinami£ko u£itavanje moºe pomo¢i
da se ublaºi ovo ograni£enje, ali, generalno, to obi£no zahteva posebne mere
predostroºnosti i dodatni rad programera.
Uslov da instrukcije moraju biti u zi£koj memoriji jeste obavezan i razuman,
ali on takoe ograni£ava veli£inu programa koji se izvr²ava na veli£inu zi£ke
memorije. Sa druge strane, istraºivanja sprovedena na u realnom programima
pokazuju da u mnogim slu£ajevima celokupan program nije neophodan, u ovom
smislu. Na primer, uzmite u obzir slede¢e primere:
ak i u onim slu£ajevima kada je potreban ceo program, moºda svi delovi
programa ne¢e biti potrebni istovremeno. Mogu¢nost izvr²avanja programa koji
je samo delimi£no u memoriji pruºila bi mnoge prednosti:
ali ¢e trebati stvarne zi£ke okvire samo ukoliko se heap ili stek budu ²irili. Vir-
tualni adresni prostori koji podrazumevano uklju£uju u sebe ²upljine poznati su
kao proreeni adresni prostori (eng. sparse address spaces ). Kori²tenje proree-
nog adresnog prostora je korisno jer se ²upljine mogu smanjivati kako segmenti
heap memorije ili steka rastu ili u slu£ajevima kada ºelimo dinami£ki povezivati
biblioteke (ili moºda druge deljene objekte) tokom izvr²avanja programa.
Dakle, pored razdvajanja logi£ke memorije od zi£ke memorije, virtualna
memorija omogu¢ava deljenje datoteka i memorije izmeu dva ili vi²e procesa
putem deljenja stranica. To dovodi do slede¢ih prednosti:
Sli£no tome, procesi mogu da dele memoriju. Ve¢ smo pri£ali ranije da dva
ili vi²e procesa mogu komunicirati kori²¢enjem deljene memorije. Virtu-
alna memorija omogu¢ava jednom procesu da stvori region memorije koji
moºe da deli sa drugim procesom. Procesi koji dele ovaj region smatraju
ga delom svog virtualnog adresnog prostora, ali se stvarni zi£ki okviri
memorije dele, sli£no kao ²to je prikazano na slici 3
Stranice se mogu deliti tokom kreiranja procesa sistemskim pozivom fork (),
£ime se ubrzava kreiranje procesa.
2. Ako je referenca ilegalna, prekinemo proces. Ako nije, ali jo² traºena
stranica nije u£itana u memoriju, u£itaj je
jednako vremenu pristupa memoriji. Ako se, meutim, dogodi gre²ka stranice,
prvo moramo pro£itati odgovaraju¢u stranicu s diska, a zatim pristupiti ºeljenoj
memorijskoj re£i.
Neka je p verovatno¢a gre²ke stranice (0 ≤ p ≤ 1). Za o£ekivano je da
¢e p biti blisko nuli, tj. da imamo znatno manje gre²aka stranice u odnosu
na situacije kada su stranice ve¢ dostupne prilikom referenciranja memorije.
Efektivno vreme pristupa je tada
12. Vratiti korisni£ke registre, stanje procesa i novu tabelu stranica, a zatim
nastaviti sa izvr²avanjem prekinute instrukcije.
9
2. U£itati stranicu;
Prvi i tre¢i zadatak mogu se, paºljivim kodiranjem, svesti na nekoliko stotina
instrukcija. Svaki od ova dva zadatka moºe trajati od 1 do 100 mikrosekundi.
Meutim, vreme u£itavanja stranice verovatno ¢e trajati blizu 8 milisekundi.
Tipi£ni hard-disk ima prose£no ka²njenje rotacije (obrtanje glave diska) od 3
milisekunde, vreme traºenja podataka 5 milisekundi (pomeranje ruke diska do
ºeljenog cilindra) i vreme prenosa 0,05 milisekundi. Dakle, ukupno vreme u£i-
tavanja stranice je oko 8 milisekundi, uklju£uju¢i vreme hardvera i softvera. Pri
tome, obratite paºnju da smo gledali samo vreme rada ureaja. Ako proces
£eka u redu £ekanja za dati ureaj, moramo ura£unati i vreme £ekanja na ure-
aj tj. vreme dok £ekamo da sekundarna memorija bude slobodna da servisira
na² zahtev, ²to dodatno pove¢ava vreme zamene.
Za prose£no vreme servisiranja gre²ke stranice 8 milisekundi i vreme pristupa
memoriji od 200 nanosekundi, efektivno vreme pristupa u nanosekundama je
dele iste stranice. Ove zajedni£ke stranice ozna£ene su kao stranice za kopiranje
pri upisu (copy-on-write ), ²to zna£i da ako bilo koji proces izvr²i upis u tu stra-
nicu, stvori¢e se kopija te zajedni£ke stranice. Kopiranje pri upisu ilustrovano je
na slikama 7 i 8, koje prikazuju sadrºaj zi£ke memorije pre i nakon ²to proces
1 modikuje stranicu C.
Na primer, pretpostavimo da dete proces poku²a da modikuje stranicu
koja sadrºi delove steka, pri £emu je stranica ozna£ena za kopirati pri upisu.
Operativni sistem ¢e kreirati kopiju ove stranice, preslikavaju¢i je u adresni
prostor dete procesa. Tada ¢e dete proces modikovati kopiranu stranicu, a ne
stranicu koja pripada roditelj procesu. O£ito, kada se koristi tehnika kopiranja
pri upisu, kopiraju se samo stranice koje su modikovane od strane bilo kojeg
procesa - sve neizmenjene stranice mogu se i dalje deliti izmeu roditeljskog i
dete procesa. Takoe, o£igledno je da samo stranice koje se mogu modikovati
moraju biti tada ozna£ene za kopiranje pri upisu. Stranice koje ne mogu da
se menjaju (npr stranice koje sadrºe izvr²ni kod) mogu bezbedno da se dele
izmeu roditelja i deteta. Kopiranje pri upisu je uobi£ajena tehnika koju koristi
nekoliko operativnih sistema, uklju£uju¢i Windovs XP, Linux i Solaris.
Kada se utvrdi da ¢e se stranica kopirati koriste¢i kopiranje pri upisu, vaºno
je zabeleºiti lokaciju sa koje ¢e slobodne stranice biti dodeljene. Mnogi opera-
tivni sistemi pruºaju domen (eng. pool ) slobodnih stranica za takve zahteve.
Ove slobodne stranice se obi£no dodeljuju kada se stek ili heap datog procesa
mora pro²irivati ili kada postoje stranice ozna£ene za kopiranje pri upisu. Ope-
rativni sistemi obi£no alociraju ove stranice uz popunjavanje nulama pri zahtevu,
²to zna£i da su u te stranice upisane nule pre nego ²to su stranice dodeljene,
£ime se bri²e njihov prethodni sadrºaj.
Nekoliko verzija Unix OS (uklju£uju¢i Solaris i Linux) obezbeuju varijaciju
sistemskog poziva fork () poznatu kao vfork () (fork za virtualne memorije). Ovaj
sistemski poziv deluje druga£ije od fork () u slu£aju kopiranja pri upisu. Kori-
²¢enjem vfork () roditeljski proces se suspenduje, a dete proces koristi adresni
prostor roditelja. Budu¢i da vfork () ne koristi kopiranje pri upisu, ako dete pro-
ces promeni bilo koju stranicu adresnog prostora roditelja, izmenjene stranice
¢e biti vidljive roditelju nakon ²to se nastavi njegovo izvr²avanje. Po²to se ne
vr²i kopiranje stranica, vfork () je izuzetno ekasna metoda kreiranja procesa.
okvira nema slobodnih okvira jer je £itava memorija je u upotrebi (slika 9).
Operativni sistem u ovom trenutku ima nekoliko opcija. Mogao bi da termi-
nira korisni£ki proces. Meutim, upotreba stranica na zahtev je poku²aj opera-
tivnog sistema da pobolj²a iskori²¢enost i propusni opseg ra£unarskog sistema.
Korisnici ne bi trebali biti svesni da se njihovi procesi izvr²avaju u kontekstu
stranica, a stranica bi trebala biti logi£no transparentna za korisnika. Dakle,
ova opcija nije najbolji izbor.
Operativni sistem bi umesto toga mogao da proces zameni iz memorije
(swap out ), oslobaaju¢i sve njegove okvire i na taj na£in smanji stepen multi-
programiranja. Ova opcija je dobra u odreenim okolnostima i razmatra¢emo
je kasnije, a ovde ¢emo posmatrati naj£e²¢e re²enje: zamena stranice.
(b) Ako nema slobodnog okvira, koristi algoritam zamene stranice kako
bi odabrao takav okvir (okvir ºrtvu - eng. victim frame )
14
(c) Upi²i okvir ºrtve na disk, a u skladu sa tim promeni tabelu stranica
i okvira
Imajte na umu da su, ukoliko nijedan okvir nije slobodan, potrebna dva prenosa
stranica (jedan iz memorije i jedan u memoriju). Ova situacija efektivno udvo-
stru£uje vreme servisiranja gre²ke stranice i u skladu s tim pove¢ava efektivno
vreme pristupa.
Moºemo smanjiti ove dodatne tro²kove kori²¢enjem bita modikacije (zove se
i dirty bit ). Kada se koristi ova ²ema, svaka stranica ili okvir ima bit modikacije
dodeljen njoj u hardveru. Bit modikacije date stranice hardver postavlja na 1
svaki put kad se upi²e bilo koji bajt na toj stranici, ²to ukazuje da je stranica
modikovana. Kada odaberemo stranicu za zamenu, ispitujemo njen bit modi-
kacije. Ako je bit postavljen, znamo da je stranica modikovana od momenta
kada je u£itana sa diska. U ovom slu£aju moramo upisati stranicu na disk.
Meutim, ako bit za modikaciju nije postavljen, stranica nije modikovana od
kada je u£itana u memoriju. U ovom slu£aju ne moramo da upi²emo stranicu
na disk jer je ona ve¢ tamo. Ova tehnika se takoe odnosi i na stranice koje
mogu samo da se £itaju (na primer, stranice koje sadrºe izvr²ni kod). Takve
stranice se ne mogu menjati, pa se njihov sadrºaj moºe samo prepisati novim po
potrebi. Ova ²ema moºe zna£ajno da smanji vreme potrebno za obradu gre²ke
stranice, jer smanjuje U/I vreme za pola, ako stranica nije izmenjena.
Zamena stranice je osnovni koncept kod stranica za zahtev. On zapravo vr²i
kona£no razdvajanje izmeu logi£ke memorije i zi£ke memorije. Ovim meha-
nizmom moºe se obezbediti ogromna virtualna memorija za programere, dok u
15
sistemu ima znatno manje zi£ke memorije. Bez stranica na zahtev, korisni£ke
adrese su mapirane u zi£ke adrese, a ova dva skupa adresa mogu biti razli£iti.
Meutim, sve stranice procesa moraju se nalaziti u zi£koj memoriji. Kod stra-
nica na zahtev, veli£ina logi£kog adresnog prostora vi²e nije ograni£ena zi£kom
memorijom. Ako imamo korisni£ki proces od dvadeset stranica, moºemo ga iz-
vr²avati u sistemu sa deset okvira jednostavno kori²¢enjem stranica na zahtev i
algoritma zamene stranica kako bismo pronala²li slobodan okvira kad god je to
potrebno. Ako se stranica koja je modikovana treba zameniti, njen se sadrºaj
kopira na disk. Kasnije referenciranje na tu stranicu dove²¢e do gre²ke stranice.
Tada ¢e se stranica vratiti u memoriju, a moºda usput zameniti neku drugu
stranicu datog procesa.
Dakle, da bismo implementirali stranice na zahtev, moramo re²iti dva osnovna
problema: moramo razviti algoritam za rasporeivanje okvira i algoritam za-
mene stranica. To jest, ako imamo vi²e procesa u memoriji, moramo odlu£iti
koliko okvira dodeliti svakom procesu (algoritam za rasporeivanje okvira), a
kada je potrebna zamena stranice, moramo odabrati okvire koje treba zame-
niti (algoritam zamene stranica). Dizajn odgovaraju¢ih algoritama za re²avanje
ovih problema je vaºan zadatak jer su U/I operacije sa diskom izuzetno skupe u
pogledu vremena. ak i mala pobolj²anja ovih algoritama donose velike dobitke
u performansama sistema.
Postoji mnogo razli£itih algoritama zamene stranica. Svaki operativni si-
stem uglavnom koristi svoju ²emu zamene. Kako odabrati najbolji algoritam
zamene? Generalno, ºelimo da imamo onaj algoritam koji obezbeuje najniºu
stopu gre²aka stranica.
Algoritam procenjujemo tako da ga izvr²avamo na odreenom nizu referenci
memorije i izra£unavamo broj gre²aka stranica. Niz referenci u memoriji naziva
se referentnim nizom. Moºemo da generi²emo referentne nizove ve²ta£ki (na
primer, kori²¢enjem generatora slu£ajnih brojeva) ili moºemo da pronaemo
odreeni sistem i zabeleºimo adresu svake reference memorije.
Druga metoda proizvodi veliki broj podataka (~1 milion adresa u sekundi),
a da bismo smanjili broj podataka sa kojima radimo, koristimo dve £injenice.
Prvo, za odreenu veli£inu stranice (a veli£ina stranice obi£no je odreena i
ksirana bilo hardverom ili od strane sistema), uzimamo u obzir samo broj
stranice, a ne celu adresu. Drugo, ako imamo referencu na stranicu p, tada
svaka referenca na stranicu p koja sledi odmah nakon nje ne¢e uzrokovati gre²ku
stranice. Stranica p ¢e biti u memoriji nakon prve reference, tako da sukcesivne
reference na nju ne¢e dovesti do gre²ke stranice.
Na primer, ako pratimo odreeni proces, moºemo snimiti slede¢u sekvencu
adresa:
0100, 0432, 0101, 0612, 0102, 0103, 0104, 0101, 0611, 0102, 0103, 0104, 0101,
0610, 0102, 0103, 0104, 0101, 0609, 0102, 0105
Za 100 bajtova po stranici, ovaj niz se svodi na slede¢i referentni niz:
1, 4, 1, 6, 1, 6, 1, 6, 1, 6, 1
Da bismo odredili broj gre²aka stranica za odreeni referentni niz i algori-
tam zamene stranice, takoe moramo znati i broj dostupnih (slobodnih) okvira
stranica. Naravno, kako se pove¢ava broj dostupnih okvira, smanjuje se i broj
16
Broj bita koji se koristi za pra¢enje istorije bita reference, naravno, moºe da
se menja. Odabiramo ga, u skladu sa dostupnim hardverom, tako da aºuriranje
vi²estrukih bita reference moºe najbrºe da se sprovede. U jednom ekstremnom
slu£aju, broj moºe biti sveden na 0, ²to rezultuje pra¢enjem samo bita reference.
Ovaj algoritam naziva se algoritam zamene stranica sa dvostrukom ²ansom (eng.
second-chance page-replacement algorithm ).
kada su svi biti reference setovani, pointer prolazi kroz ceo red, daju¢i drugu
²ansu svakom elementu reda. Obzirom na to da £isti bite reference pre nego
²to odabira stranicu koja ¢e se zameniti, bi¢e odabrana stranica sa najstarijim
vremenom pristizanja. U ovom scenariju (kada su svi biti referenci postavljeni
na 1), zamena stranica sa dvostrukom ²ansom degenerisana je u FIFO zamenu.
3. (1, 0) skoro kori²¢ena ali nije modikovana - vrlo verovatno ¢e biti kori-
²¢ena uskoro
2. ako je prvi prolaz kroz petlju neuspe²an, prolazimo drugi put kroz petlju
u potrazi za stranicom iz klase (0,1). U ovom prolasku, svim stranicama
koje obiemo stavljamo bit referenci na 0;
U najgorem slu£aju £etiri puta ¢emo obi¢i red u potrazi za najboljom stranicom
za zamenu. Osnovna prednost ovog algoritma u odnosu na jednostavniju verziju
algoritma jeste ta da se ovde prioritetno biraju za zamenu stranice koje nisu
modikovane, kako bismo smanjili broj dugotrajnih U/I operacija.
Kada doe do gre²ke stranice, okvir ºrtva se nalazi kao i ina£e. Meutim,
ºeljena stranica se u£itava u okvir iz skupa slobodnih okvira pre nego ²to se
okvir ºrtva prepi²e na disk. Ova procedura omogu¢ava procesu da se ponovo
pokrene ²to je pre mogu¢e, bez £ekanja da se oslobodi okvir u koji se moºe
upisati potrebna stranica. Kada se, vremenom, sadrºaj okvira ºrtve prepi²e u
sekundarnu memoriju, taj okvir se dodaje skupu slobodnih okvira.
Pro²irenje ove ideje svodi se na odrºavanje liste modikovanih stranica. Svaki
put kada je hardver za strani£enje besposlen, modikovane stranice se odabiraju
i upisuju na disk. Dodatno, bit modikacije je aºuriran i postavljen na 0. Ovaj
metod pove¢ava verovatno¢u da ¢e stranica mo¢i samo da sa prepi²e novim
sadrºajem kada bude odabrana za zamenu, bez dodatnog prepisivanja sadrºaja
stranice na disk.
Jo² jedna modikacija se odnosi na odrºavanje skupa slobodnih okvira, uz
dodatak da se pamti koja stranica je bila upisana u kom okviru. Obzirom
na to da se sadrºaj okvira ne¢e menjati nakon ²to je okvir upisan na disk,
stara stranica moºe biti direktno iskori²¢ena iz skupa slobodnih okvira, kada je
potrebno, pod uslovom da okvir nije menjan u meuvremenu. Ovakav pristup
elimini²e potrebu za dodatnom U/I operacijom na disku: kada doe do gre²ke
stranice, prvo proveravamo da li se traºena stranica nalazi u skupu slobodnih
okvira. Ako nije moramo odabrati okvir za zamenu i u njega u£itati stranicu sa
diska.
kada se gre²ka stranice desi pre nego ²to se zavr²i instrukcija koja se izvr²ava,
instrukcija se mora izvr²avati ponovo od po£etka. Kao posledica, moramo imati
dovoljno okvira kako bismo skladi²tili sve stranice koje bilo koja pojedina£na
instrukcija referencira. Ovaj minimalan broj okvira je, samim tim, odreen
i denisan arhitekturom procesora. Suprotno ovome, maksimalan broj okvira
je odreen koli£inom dostupne zi£ke memorije. Izmeu ove dve vrednosti,
alokacija okvira ostavlja brojne izbore.
X
S= si
ai = si /S · m
Naravno, moramo podesiti svaki ai da bude ceo broj, koji je ve¢i od mini-
malnog broja okvira zahtevanog od strane datog skupa instrukcija, sa ukupnom
sumom koja ne prelazi m.
Proporcionalnom alokacijom, 62 okvira iz primera od malopre bismo pode-
lili tako ²to alociramo 4 okvira jednom i 57 okvira drugom procesu. Na ovaj
na£in, oba procesa dele dostupne okvire u skladu sa svojim potrebama, umesto
ravnopravne alokacije.
Kako kod ravnopravne, tako i kod proporcionalne alokacije, naravno, sama
alokacija se moºe menjati u skladu sa stepenom multi-programiranja. Ako je
stepen multi-programiranja pove¢an, svaki proces ¢e izgubiti neke od okvira koje
je koristio, kako bi se obezbedila potrebna memorija za novi proces. Suprotno,
ako se stepen multi-programiranja smanji, okviri kori²¢eni od strane procesa
koji se vi²e ne izvr²ava bi¢e rasporeeni meu trenutno izvr²avanim procesima.
Takoe, obe alokacije predstavljene iznad ravnomerno tretiraju procese viso-
kog i niskog prioriteta. Meutim, u skladu sa denicijom, mogu¢e je da ºelimo
26
vi²e memorije alocirati procesu vi²eg prioriteta kako bismo ubrzali njegovo iz-
vr²avanje, nau²trb procesa niskog prioriteta. Jedno re²enje bi bilo da se koristi
proporcionalna alokacija gde se kod prora£una alocirane memorije okvira ne ko-
risti relativna veli£ina procesa, nego prioritet procesa ili kombinacija veli£ine i
prioriteta.
X
D= W SSi
31
da procesu treba vi²e okvira. Suprotno tome, ako je stopa gre²aka stranica pre-
niska, tada proces moºda ima previ²e okvira. Kao rezultat, moºemo uspostaviti
gornju i donju granicu na ºeljenoj stopi gre²ke stranice (slika 21).
Ako stvarna stopa gre²aka stranica prelazi gornju granicu, dodeljujemo pro-
cesu jo² jedan okvir. Ako stopa gre²ke stranice padne ispod donje granice,
procesu oduzimamo okvir. Na taj na£in moºemo direktno meriti i kontrolisati
broj gre²aka stranica kako bismo spre£ili preoptere¢enost.
Kao i kod strategije radnog skupa, u datom trenutku ¢emo moºda morati
suspendovati proces i zameniti ga iz memorije (swap out ). Naime, ukoliko
se stopa gre²aka stranica uve¢ava, a slobodni okviri nisu dostupni, moramo
odabrati neki proces, kopirati njegove stranice na disk, a njega suspendovati.
Osloboeni okviri se tada distribuiraju procesima sa visokom stopom gre²aka
stranica.
rije. Kada Linux kernel kreira novi proces, on zahteva od odgovaraju¢eg ke²a
memoriju kako bi smestio task_struct objekat. Zahtev ¢e biti ispunjen kori²¢e-
njem prethodno alociranih objekata strukture task_struct koji su ozna£eni kao
slobodni u odgovaraju¢oj plo£i. U Linux-u, plo£a moºe biti u jednom od tri
stanja:
objekta i oslobodi ga, on ¢e biti ozna£en kao slobodan i vra¢en u ke², nakon
£ega ¢e momentalno biti dostupan narednim zahtevima od strane kernela.