virtualna memorija

18
8 VIRTUALNA MEMORIJA U poglavlju 8 opisani su različite strategije upravljanja memorijom koje se susreću ili su se susretale u računarskim sustavima. Sve navedene strategije imaju jedinstven cilj: imati u memoriji što veći broj procesa kako bi se realizirao što veći stupanj višeprocesiranja. Također, imaju jedinstven zahtjev da cijeli program koji se izvodi mora biti u radnoj memoriji. Virtualna memorija je strategija dodjele memoriju koja dozvoljava da samo dio programa koji se izvodi bude u radnoj memoriji. Temeljna prednost ovakvog pristupa je da program može biti i veći od radne memorije. Tako korisnički program može poprimiti proizvoljnu veličinu, a sustav za upravljanje memorijom preslikava logički prostor korisnika u ograničeni prostor u radnoj memoriji. Ovakav sustav za upravljanje memorijom nije jednostavno realizirati. Loša implementacija ovakvog sustava može značajno smanjiti performanse cjelovitog računarskog sustava. U ovom poglavlju razmatrati će se realizacija straničenja na zahtjev (demand paging), njena složenost i cijena. 8.1 Uvodna razmatranja Algoritmi opisani u prethodnom poglavlju potrebni su iz razloga što naredbe koje se izvode moraju biti u glavnoj memoriji. Najjednostavnije je da se cijeli program upiše u glavnu memoriju. Prebacivanje (overlay) i dinamičko punjenje rješavaju posljednje ograničenje, ali zahtijevaju dodatne mjere od strane programera. Analize programa ukazuju da obično nije potreban cijeli program da bi se potrebna obrada izvela. Tako npr.: Programi sadrže procedure za obradu slučajnih ili namjernih pogrešaka. Budući da se takvi slučajevi relativno rijetko dešavaju, program izvede potrebnu obradu bez poziva spomenutih procedura. Program za polja, liste, tablice, i slične statičke strukture obično rezervira više memorije nego je stvarno potrebno. Pojedine opcije programa relativno se rijetko koriste. Tako npr. pravnici kad pišu u Word tekst procesoru vjerojatno nikad neće koristiti Equation editor. Čak i u slučajevima koji ne spadaju u navedene kategorije, činjenica je da cijeli program nije istovremeno potreban. Tako svojstvo da samo dio programa koji se izvodi se nalazi u memoriji ima niz prednosti: Veličina programa nije ograničena veličinom radne memorije. Programer može napisati programa kao da sustav raspolaže s neograničenom memorijom, odnosno programer raspolaže s neograničenim virtualnim logičkim adresnim prostorom. Ovo uveliko pomaže kod pisanja programa. Korisnički program može se izvoditi sa znatno manjom dodijeljenom fizičkom memorijom, što omogućava veći stupanja višeprogramskog rada. Time se povećava iskoristivost kao i propusna moć sustava. Manje U/I operacija potrebno je za prebacivanje korisničkih programa iz i u memoriju. Tako se korisnički programi brže izvode. Zaključaj je da izvođenje programa koji nisu cijeli upisani u memoriji ima brojne prednosti i za korisnika i za računalni sustav. Virtualna memorija je razdvajanje logičkog adresnog prostora koji vidi korisnik od fizičkog adresnog prostora u kojem se program izvodi. Ovo razdvajanje omogućava

Upload: n1kol4

Post on 12-Nov-2014

660 views

Category:

Documents


10 download

DESCRIPTION

Virtualna memorija

TRANSCRIPT

Page 1: Virtualna memorija

8 VIRTUALNA MEMORIJA U poglavlju 8 opisani su različite strategije upravljanja memorijom koje se susreću ili su se susretale u računarskim sustavima. Sve navedene strategije imaju jedinstven cilj: imati u memoriji što veći broj procesa kako bi se realizirao što veći stupanj višeprocesiranja. Također, imaju jedinstven zahtjev da cijeli program koji se izvodi mora biti u radnoj memoriji. Virtualna memorija je strategija dodjele memoriju koja dozvoljava da samo dio programa koji se izvodi bude u radnoj memoriji. Temeljna prednost ovakvog pristupa je da program može biti i veći od radne memorije. Tako korisnički program može poprimiti proizvoljnu veličinu, a sustav za upravljanje memorijom preslikava logički prostor korisnika u ograničeni prostor u radnoj memoriji. Ovakav sustav za upravljanje memorijom nije jednostavno realizirati. Loša implementacija ovakvog sustava može značajno smanjiti performanse cjelovitog računarskog sustava. U ovom poglavlju razmatrati će se realizacija straničenja na zahtjev (demand paging), njena složenost i cijena.

8.1 Uvodna razmatranja Algoritmi opisani u prethodnom poglavlju potrebni su iz razloga što naredbe koje se izvode moraju biti u glavnoj memoriji. Najjednostavnije je da se cijeli program upiše u glavnu memoriju. Prebacivanje (overlay) i dinamičko punjenje rješavaju posljednje ograničenje, ali zahtijevaju dodatne mjere od strane programera. Analize programa ukazuju da obično nije potreban cijeli program da bi se potrebna obrada izvela. Tako npr.:

Programi sadrže procedure za obradu slučajnih ili namjernih pogrešaka. Budući da se takvi slučajevi relativno rijetko dešavaju, program izvede potrebnu obradu bez poziva spomenutih procedura.

Program za polja, liste, tablice, i slične statičke strukture obično rezervira više memorije nego je stvarno potrebno.

Pojedine opcije programa relativno se rijetko koriste. Tako npr. pravnici kad pišu u Word tekst procesoru vjerojatno nikad neće koristiti Equation editor.

Čak i u slučajevima koji ne spadaju u navedene kategorije, činjenica je da cijeli program nije istovremeno potreban. Tako svojstvo da samo dio programa koji se izvodi se nalazi u memoriji ima niz prednosti:

Veličina programa nije ograničena veličinom radne memorije. Programer može napisati programa kao da sustav raspolaže s neograničenom memorijom, odnosno programer raspolaže s neograničenim virtualnim logičkim adresnim prostorom. Ovo uveliko pomaže kod pisanja programa.

Korisnički program može se izvoditi sa znatno manjom dodijeljenom fizičkom memorijom, što omogućava veći stupanja višeprogramskog rada. Time se povećava iskoristivost kao i propusna moć sustava.

Manje U/I operacija potrebno je za prebacivanje korisničkih programa iz i u memoriju. Tako se korisnički programi brže izvode.

Zaključaj je da izvođenje programa koji nisu cijeli upisani u memoriji ima brojne prednosti i za korisnika i za računalni sustav. Virtualna memorija je razdvajanje logičkog adresnog prostora koji vidi korisnik od fizičkog adresnog prostora u kojem se program izvodi. Ovo razdvajanje omogućava

Page 2: Virtualna memorija

programeru da raspolaže s neograničenim logičkim prostorom iako se program stvarno izvodi u relativno malom fizičkom adresnom prostoru. Virtualna memorija olakšava posao programeru, ne samo što raspolaže s neograničenim logičkim prostorom, nego što ne treba da vodi računa o strukturi programa koju je zahtijevao sustav s prebacivanjem ili dinamičkim punjenjem. Princip virtualne memorije prikazan je slikom 9.1.

stranica 0

stranica 1

stranica 2

stranica 3

stranica n

virtualnamemorija

tablicastranica

fizičkamemorija

sekundarnamemorija

(disk)

Slika 9.1. Prikaz virtualne memorije koja je veća od fizičke memorije.

Virtualna memorija obično se realizira kao straničenje na zahtjev (demand paging). Moguće ju je primijeniti u sustavima koji koriste podjelu memorije na segmente. Nekoliko sustava riješilo je virtualnu memoriju pomoću segmenata, gdje su segmenti podijeljeni na stranice. Tako korisnik vidi program podijeljen na segmente, a operacijski sustav dijeli segmente na stranice. Tako je IBM OS/2 koristio koncept segmentacije na zahtjev. Važno je napomenuti da algoritmi zamjene segmenata su znatno složeniji od algoritama zamjene stranica budući su segmenti promjenjive veličine, a stranice fiksne.

8.2 Straničenje na zahtjev (demand paging) Straničenje na zahtjev koristi koncept sličan prebacivanju. Proces je pohranjen na sekundarnoj memoriji, obično disku. Kada se namjerava izvesti proces upisuje se samo jedan njegov dio u radnu memoriju. Kod upisivanja procesa u memoriju uobičajeno se koristi tzv. lijeni prebacivač (lazy swapper) koji upisuje stranicu u memoriju tek kada je ona potrebna. Termin swapper može se smatrati netočnim jer se on obično odnosi na prebacivanje cijelog procesa. Ispravnije je korištenje termina pegger koji se odnosi na prebacivanje stranice. Proces se sada može promatrati kao niz stranica koji se prema potrebi upisuju u memoriju. Ovakav pristup dodjeli memorije zahtijeva i određenu sklopovsku podršku. Prvenstveno potrebno je razlučiti koje su stranice upisane u memoriju, a koje se samo nalaze na

Page 3: Virtualna memorija

disku. Ovaj problem rješava se proširenjem tablice stranica bitom prisutnosti koji daje informaciju da li se stranica nalazi u radnoj memoriji ili ne, slika 9.2.

stranica A

stranica B

stranica C

stranica D

stranica E

stranica F

stranica G

stranica H

virtualnamemorija

tablicastranica

fizičkamemorija

sekundarnamemorija

(disk)

0

1

2

3

4

5

6

7

01234567

10100100

4

6

9

0123456789

1011121314151617

A

C

FA

D

G

C

F

B

E

H

bitprisustva

Slika 9.2. Tablica stranica kad sve stranice nisu u radnoj memoriji.

Kada se pristupa pojedinoj stranici, operacijski sustav preko tablice stranica ispituje da li je adresirana stranica u memoriji ili ne. Ako je stranica u upisana u fizičku memoriju, bit prisustva je postavljen u jedinicu, tada se izračunava fizička adresa naredbe ili podatka i pristupa mu se. Ali ako adresirana stranica nije u memoriji tada ju je potrebno upisati u memoriju i tek onda izvršiti pristup. Procedura pristupa stranici može se opisati na sljedeći način:

sklopovlje prvo provjerava bit prisustva adresirane stranice kako bi se odredilo da li je stranica u memoriji ili ne.

Ukoliko stranica nije u memoriji (došlo je do tzv. promašaja) generira se prekid koji dojavljuje operacijskom sustavu da treba pronaći stranicu na sekundarnoj memoriji i prebaciti je u radnu memoriju. Obično promašaj rezultira prekidom prava korištenja procesora, te se proces prebacuje u red čekanja na U/I uređaj, u ovom slučaju disk.

Operacijski sustav pronalazi slobodan okvir u radnoj memoriji (operacijski sustav vodi listu slobodnih okvira).

Prebacuje se tražena stranica u odabrani okvir. Osvježava se tablica stranica procesa na način da se stranici pridružuje dodijeljeni

okvir. Ovim je praktički proces pripravan da nastavi s izvođenjem. Prekinuta naredba se ponovo izvodi a stranici se pristupa kao da je ona oduvijek bila

u memoriji. Opisani proces prikazan je slikom 9.3.

Page 4: Virtualna memorija

stranica D

virtualnamemorija

tablicastranica

fizičkamemorija

sekundarnamemorija

(disk)

2

3

01234567

10100100

4

6

9

0123456789

1011121314

A

C

F

A

D

G

C

F

B

E

H

bitprisustva

load M

prekid

1

2

65

4

3

adresiranje

operacijskisustav

stranica je na disku

stranica uslobodan

okvir

obnovitablicu

stranica

ponovinaredbu

Slika 9.3. Koraci u slučaju promašaja stranice.

U cijelom ovom procesu važno je primijetiti da se nakon prekida sačuva stanje procesa (programsko brojilo i ostali spremnici opće namjene) te da se nakon unosa stranice u radnu memoriju te osvježavanja tablice stanja proces može nesmetano nastaviti. Jedina razlika je u tome što je sada adresirana stranica u radnoj memoriji. Teoretski postoji vjerojatnost da tijekom izvođenja jedne naredbe dođe do višestrukih promašaja. Naime, program se može nalaziti na jednoj stranici, a podaci na drugoj. Ovakve situacije, koje na sreću nisu učestale, dovele bi do značajnog pada performansi sustava. Kao i kod dodjele memorije po stranicama, virtualna memorija zahtjeva značajnu sklopovsku podršku kako bi se održale dobre performanse sustava. Uz sklopovlje potrebna je i dodatna programska podrška. Također, za implementaciju ovakvog sustava dodjele memorije potrebne su i određene preinake arhitekture računala. Temeljni problem je potreba za ponavljanjem naredbe ukoliko dođe do promašaja. Do promašaja može doći u bilo kojoj fazi izvođenja naredbe. Ukoliko do promašaja dođe kod dohvata naredbe jednostavno se nakon unosa stranice u memoriju ponavlja njen dohvat te nastavlja s njenim izvođenjem. Ali ukoliko dođe do promašaja tijekom dohvata operanda tada je potrebno ponovo dohvatiti naredbu, dekodirati je te dohvatiti operand koji je sada u radnoj memoriji. Neka se izvodi naredba koja zbraja dvije memorijske varijable A i B i rezultat pohranjuje na treću memorijsku lokaciju C. Naredba se izvodi kroz sljedeće korake: 1. dohvati i dekodiraj naredbu, 2. dohvati operand A, 3. dohvati operand B 4. zbroji A i B, 5. pohrani rezultat u C.

Page 5: Virtualna memorija

Neka se rezultat C nalazi na lokaciji koja pripada stranici koja trenutno nije u memoriji. Promašaj tada rezultira procedurom unosa stranice u memoriju, te ponavljanja koraka 1-5. Program normalno nastavlja s izvođenjem, a ovakve situacije ako nisu učestale neće značajno utjecati na cjelokupne performanse sustava. Problem može nastupiti ukoliko procesor raspolaže s naredbama koje mijenjaju istovremeno sadržaje više memorijskih lokacija. Tako je npr. IBM 370, a i Intel 80x86 ima naredbe za prebacivanje niza karaktera s jedne na drugu lokaciju. Poseban problem nastaje ukoliko izvorni i odredišni niz dijele neke lokacije, slika 9.4. Ako je promašaj nastupio nakon što je izmijenjen dio izvornog niza tada nije moguće ponoviti započetu a prekinutu naredbu.

znak 0znak 1znak 2znak 3znak 2znak 3znak 4znak 5znak 6znak 7

novastranica

vrijeme prekida

znak 0znak 1znak 2znak 3znak 4znak 5znak 6znak 7

novastranica

prije prekida

Slika 9.4. Prebacivanje niza znakova s jedne na drugu memorijsku lokaciju.

Navedeni problem moguće je riješiti na dva načina. Prvi je da se prije prebacivanja ispitaju početne i krajne adrese oba niza te da se prema potrebi odmah unesu potrebne stranice u memoriju. Drugi pristup bila bi primjena privremenih spremnika u koju bi se pohranile vrijednosti izmijenjenih lokacija. U slučaju obnovili bi se sadržaji izmijenjenih lokacija i ponovila bi se naredba. Sličan problem susreće se kod procesora koji koriste posebne modove adresiranja kao npr. autoinkrement i autodekrement (npr. PDP 11 ili Motorola 68000). Ovi adresni modovi koriste sadržaj spremnika kao pokazivač na podatak kojem se pristupa, pri čemu se automatski sadržaj spremnika inkrementira ili dekrementira. Autodekrement umanjuje vrijednost pokazivača (sadržaj spremnika) prije pristupa operandu, dok aoutinkrement povećava vrijednost pokazivača(sadržaj spremnika) nakon pristupa operandu. Tako naredba MOV (R2)+,-(R3) kopira sadržaj memorijske lokacije na koju pokazuje spremnik R2 na memorijsku lokaciju na koju pokazuje spremnik R3, s time da se sadržaj spremnika R2 povećava za 2 nakon upisa vrijednosti u memoriju, a sadržaj spremnika R3 umanjuje se za 2 prije dohvata operanda. Ukoliko operand na koji pokazuje umanjena vrijednost spremnika R3 nije u memoriji (promašaj) tada nastupa problem pri ponovljenom izvođenju naredbe. Moguće rješenje je uvođenje zasebnog privremenog spremnika koji pamti prethodni

Page 6: Virtualna memorija

sadržaj spremnika tako da je pri ponavljanju naredbe moguće obnoviti prvobitnu vrijednost spremnika. Svakako navedeni problemi postavljaju posebne zahtjeve na arhitekturu procesora koji koristi straničenje na zahtjev. Sklopovi koji upravljaju memorijom nalaze se između procesora i memorije i moraju biti potpuno transparentni korisniku. Zato ovakav sustav za upravljanje memorijom nije moguće realizirati kod svih procesora.

8.3 Performanse sustava sa straničenjem na zahtjev Straničenje na zahtjev ima značajan utjecaj na performanse računarskog sustava. Bolji uvid na utjecaj ovakve strategije dodjele memorije moguće je procijeniti pomoću efektivnog vremena pristupa memoriji (effective access time). Ukoliko se stranica nalazi u memoriji efektivno vrijeme pristupa jednako je vremenu pristupa memoriji ma. Ali ukoliko stranica nije u memoriji potrebno je obraditi prekid, unijeti stranicu u memoriju i ponoviti naredbu što predstavlja znatno duže vrijeme pristupa tf. Neka je vjerojatnost promašaja p (0≤ p ≤ 1). Efektivno vrijeme pristupa iznosi:

eat = (1 - p)⋅ma + p⋅tf. Vrijeme pristupa memoriji kod današnjih procesora je reda ns, npr. 10ns. Za procjenu vremena pristupa memoriji u slučaju promašaja potrebno je sagledati sve korake koje je potrebno napraviti a to su: 1. postaviti zahtjev za prekid procesoru, 2. sačuvati stanje prekinutog procesa, 3. odrediti da se prekid odnosi na promašaj stranice, 4. provjeriti da li je dozvoljen procesu pristup toj stranici i pronaći stranicu na disku, 5. postaviti zahtjev za prijenos stranice u slobodan okvir što zahtijeva:

a) čekanje u redu dok se prihvati zahtjev za U/I prijenosom, b) čekanje na pronalaženje traženog sektora na disku (vrijeme traženja ili

latentnost), c) prijenos stranice s diska u slobodan okvir,

6. za vrijeme čekanja na obradu postavljenog U/I zahtjeva dodijeliti procesor nekom drugom procesu,

7. po završetku prijenosa stranice s diska dojaviti operacijskom sustavu da je prijenos obavljen (postavlja se novi zahtjev za prekidom),

8. sačuvati stanje prekinutog procesa, 9. odrediti o kojoj vrsti prekida se radi (U/I prijenos s diska završio), 10. unijeti promjene u tablicu stranica procesa koji je ima promašaj, 11. čekaj dok proces dobije ponovo pravo na korištenje procesora, 12. obnovi stanje procesa i ponovi prekinutu naredbu. Naravno, ne moraju se dogoditi svi koraci u svakom slučaju promašaja. Npr. korak broj 6 podrazumijeva da se procesor dodjeljuje drugom procesu kako bi se održala što veća zaposlenost procesora, ali ona rezultira u dodatnom vremenu potrebnom za obradu promašaja. U svakom slučaju za procjenu vremena obrade promašaja moraju se uzeti u obzir sljedeće tri radnje: 1. obrada prekida zbog promašaja, 2. unos stranice u memoriju, 3. nastavak prekinutog procesa.

Page 7: Virtualna memorija

Prvi i teći zadatak mogu se pažljivim kodiranjem sistemskih procedura ograničiti na nekoliko stotina naredbi, što se može procijeniti na vrijeme od nekoliko mikrosekunda. Drugi zadatak vremenski je znatno zahtjevniji, jer je potrebno pronaći stranicu na disku, postaviti glavu diska na traženi sektor te prebaciti stranicu u memoriju. Ovo vrijeme kod današnjih diskova može se procijeniti na deset do dvadeset milisekunda. Prema tome kod promašaja praktički najveći dio vremena troši se na unos stranice u memoriju. Kod višeprocesnog rada situacija je nepovoljnija jer ovom vremenu potrebno je dodati prosječno čekanje u različitim redovima. Za ilustraciju uzeti će se vrijeme pristupa memoriji 10ns, a vrijeme obrade promašaja 25ms. Efektivno vrijeme promašaja iznosi:

eat = (1 – p)⋅10 + p⋅25 000 000 = 10 + 24 999 990⋅p Neka je zahtjev da efektivno vrijeme pristupa može biti samo 10% veće od vremena pristupa memoriji dobiva se dozvoljena vjerojatnost promašaja p < 4⋅10-8, odnosno da je dozvoljen samo jedan promašaj na 25 milijuna pristupa. Ovaj grubi proračun govori da je važno održati vjerojatnost promašaja jako malom kao se ne bi značajno degradirale performanse cjelovitog sustava.

8.4 Problem zamjene stranica U do sada provedenim razmatranjima pretpostavilo se da u slučaju promašaja operacijski sustav uvijek ima u memoriji slobodan okvir u koji će upisati traženu stranicu. Naravno u praksi situacija je sasvim drugačija. Tijekom rada, a posebice u višeprocesnom sustavu, memorija se sasvim popuni te je u slučaju promašaja potrebno osloboditi okvir za novu stranicu izbacivanjem neke od stranica koje su već u memoriji. Kako će biti naknadno opisano, odabir stranice koju će se izbaciti, tzv. žrtvu (victim) posebno je osjetljivo pitanje i strategija zamjene stranica može značajno utjecati na performanse sustava. Prvo, načelno se može proširiti procedura obrade promašaja na sljedeći način (slika 9.5): 1. pronalaženje tražene stranice na disku, 2. odabir okvira u koji će se stranica upisati:

a) ako postoji slobodan okvir njega se koristi, b) ako nema slobodnih okvira poseban algoritam odabire žrtvu i prebacuje prema

potrebi odabranu stranicu na disk, ažurira tablicu stranica i oslobađa okvir, 3. upisuje traženu stranicu u oslobođeni okvir i ažurira tablicu stranica, 4. ponavlja prekinutu naredbu. Izbacivanje stranice iz okvira zahtijeva dodatni prijenos na disk što dvostruko produžava vrijeme obrade promašaja, a time i efektivno vrijeme pristupa memoriji. Pogodnost je što nije uvijek nužno žrtvu prebaciti natrag na disk. Ukoliko sadržaj stranice nije mijenjan, npr. odnosi se na program ili ulazne podatke, tada je sadržaj stranice na disku i u memoriji isti te nije potrebno vračati stranicu na disk. Dovoljno je samo sadržaj okvira prepisati sadržajem nove stranice. Informaciju o tome da li se što mijenjalo u sadržaju stranice moguće je dobiti uvođenjem zasebnog bita, bita izmjene (modify bit, dirty bit), koji se postavlja u jedinicu ukoliko je išta mijenjano u sadržaju stranice. Algoritam za zamjenu stranica prvo provjerava bitove izmjene stranica koje bi se mogle izbaciti i odabire one koje nisu mijenjane, odnosno one kojima je bit izmjene nula.

Page 8: Virtualna memorija

stranica D

virtualnamemorija

tablicastranica

fizičkamemorija

sekundarnamemorija

(disk)

2

3

01234567

10100110

4

6

913

0123456789

1011121314

A

C

F

G

A

D

G

C

F

B

E

H

bitprisustva

load M

prekid

1

2

87

5

4

3

adresiranje

operacijskisustav

stranica je na disku

stranica uoslobođen

okvirobnovitablicu

stranica

ponovinaredbu

izbacujese

žrtva

6

stranice zauzetedrugim procesima

Slika 9.5. Koraci u slučaju promašaja stranice kada nema slobodnih okvira.

Sljedeći problem koji je potrebno riješiti je izbor algoritma odabira stranice žrtve koju će se izbaciti iz memorije.

8.5 Algoritmi zamjene stranica U praksi se susreću brojne strategije zamjene stranica, a koje imaju jedinstven cilj, zadržati što manji broj promašaja uz prihvatljivu sklopovsku i programsku potporu. Procjenu kvalitete pojedinog algoritma moguće je napraviti proračunom broja promašaja za konkretan niz logičkih adresa pri čemu se spomenuti niz naziva referentni niz. Njega je moguće generirati umjetnim putem (npr. generator slučajnih adresa određene distribucije) ili pomoću snimljenog niza generiranih adresa stvarnih programa. Sljedeće što je potrebno definirati je broj okvira koji mogu procesu stajati na raspolaganju. Očito što je veći broj raspoloživih okvira po procesu da je vjerojatnost promašaja manja, slika 9.6. S druge strane veći broj okvira po procesu smanjuje mogući broj procesa koji se konkurentno izvode, odnosno smanjuje stupanj višeprocesiranja.

0

2

4

6

8

10

12

0 1 2 3 4 5 6 7 8 9broj okvira

broj

pro

maš

aja

Slika 9.6. Odnos broja promašaja i broja okvira dodijeljenih procesu.

Page 9: Virtualna memorija

Algoritmi zamjene usporediti će se na sljedećem referentnom nizu stranica: 7, 0, 1, 2, 0, 3, 0, 4, 2, 3, 0, 3, 2, 1, 2, 0, 1, 7, 0, 1, a procesu su dodijeljena tri okvira.

8.5.1 FIFO algoritam Algoritam najjednostavniji za implementaciju je zamijeniti stranicu koja je od stranica u memoriji prva unesena (First In First Out). Stranice se stavljaju u red kako se unese u memoriju i kada nema slobodnih okvira izbacuje se ona koja je prva u redu. Stanja memorije za pretpostavljeni referentni niz stranica i tri dodijeljena okvira po procesu prikazana su sljedećom tablicom:

7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1

7 7 7 2 2 2 4 4 4 0 0 0 7 7 7 0 0 0 3 3 3 2 2 2 1 1 1 0 0 1 1 1 0 0 0 3 3 3 2 2 2 1

Provedeni analiza pokazuje da je učestala zamjena stranice kojoj se u sljedećoj pristupa što znatno povećava broj promašaja, a time i efikasnost sustava. Tako je za ovaj primjer uslijedilo 15 promašaja. Uz spomenuti ozbiljan nedostatak ovog algoritma, koji se pak odlikuje jednostavnošću implementacije uočena je i sljedeća anomalija koja se može ilustrirati na sljedećim referentnim nizom stranica:

1 2 3 4 1 2 5 1 2 3 4 5

1 1 1 4 4 4 5 5 5 2 2 2 1 1 1 3 3 3 3 3 2 2 2 4

Analiza je pokazala da je za tri dodijeljena okvira uslijedilo devet promašaja. Neka se broj okvira poveća na četiri:

1 2 3 4 1 2 5 1 2 3 4 5

1 1 1 1 5 5 5 5 4 4 2 2 2 2 1 1 1 1 5 3 3 3 3 2 2 2 2 4 4 4 4 3 3 3

Za očekivati je bilo da se broj promašaja smanji, ali broj promašaja se povećao. Ovo se naziva Beladyeva anomalija, a posljedica je zamijene stranice koja će biti adresirana u sljedećem pristupu memoriji.

8.5.2 Optimalni algoritam Analize provedene za FIFO algoritam mogu se iskoristiti za postavljanje optimalnog algoritma izbora stranice koju će se zamijeniti. Lako može zaključiti da bi optimalno bilo zamijeniti onu stranicu koja će se u budućnosti najkasnije koristiti. Za zadani referentni niz stranica optimalni algoritam izvodio bi zamjenu na sljedeći način:

Page 10: Virtualna memorija

7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1

7 7 7 2 2 2 2 2 7 0 0 0 0 4 0 0 0 1 1 3 3 3 1 1

Primjenom ovog algoritma smanjen je broj promašaja na svega devet, što predstavlja značajno smanjenje broja promašaja. Nažalost ovakav algoritam zamjene stranica praktički je nemoguće implementirati, budući nije poznato koja će se stranica u budućnosti najkasnije koristiti.

8.5.3 Zamjena najkasnije korištene stranice (LRU – Last Recently Used) Optimalni algoritam iako nije moguće implementirati koristi može se koristiti i kao mjerilo kvalitete ostalih algoritama i kao smjernica preostalim mogućim rješenjima. Polazeći od ideje slične optimalnom algoritmu, predloženo je rješenje zamjene stranice koja se u prošlosti najkasnije koristila (LRU – Last Recently Used). Ovaj algoritam primijenjen na referentni niz stranica izvodio bi zamjenu na sljedeći način:

7 0 1 2 0 3 0 4 2 3 0 3 2 1 2 0 1 7 0 1

7 7 7 2 2 4 4 4 0 1 1 1 0 0 0 0 0 0 3 3 3 0 0 1 1 3 3 2 2 2 2 2 7

Primjenom ovog algoritma broj promašaja je dvanaest, što predstavlja napredak u odnosu na FIFO algoritam, ali nema tako dobar učinak kao optimalni algoritam. Može se pokazati da ovaj algoritam ne pati od Beladyeve anomalije. Zato je i najčešće primjenjivan u operacijskim sustavima. Postavlja se pitanje kod ovog algoritma njegove implementacije, odnosno bilježenja i usporedbe kada je koja stranica adresirana. Moguća su dva načina bilježenja vremena pristupa stranici:

Polje vremena se dodaje tablici stranica. Pristupom svakoj stranici upisuje se u polje vremena vrijeme pristupa stranici. Sličan pristup je brojilo čiji sadržaj se povećava prilikom svakog pristupa stranici. U svakom slučaju potrebno je dodatno sklopovlje kojim se implementira opisano rješenje. Prilikom potrebe zamjene stranice uspoređuju se polja vremena ili vrijednosti brojila kako bi se odabrala stranica kojoj se najduže nije pristupalo. Kod primjene brojila potrebno je uzeti u obzir mogućnost preteka brojila.

Dvostruko vezana lista stranica je drugo moguće rješenje. Stranica kojoj se pristupa postavlja se na početak liste. Ovim pristupom na početku liste nalaze se stranice kojima se nedavno pristupalo, dok na kraju liste stranice kojima se najduže nije pristupalo. Može se primijetiti složenost ovakvog rješenja, posebice što je potrebno prebacivati stranice unutar liste što zahtijeva neopravdano veliko vrijeme.

Oba pristupa zahtijevaju složenu sklopovsku podršku, dodatnu programsku podršku koja se mora izvoditi u svakom pristupu memoriji, što je potpuno neprihvatljivo. Zato je potrebno određenim rješenjima aproksimirati LRU algoritam.

8.5.4 Aproksimacije LRU algoritama Kako je već objašnjeno nije ekonomski opravdano implementirati stvarni LRU algoritam, ali moguće je napraviti određene aproksimacije istog. Najjednostavnije rješenje je

Page 11: Virtualna memorija

proširiti tablicu stranica dodatnim bitom, tzv. bitom pristupa (reference bit). Sistemski sat postavlja ovaj bit u nulu u regularnim vremenskim razmacima. Prilikom svakog pristupa stranici sklopovlje automatski postavlja bit pristupa stranice u jedinicu. Onim stranicama kojima se pristupalo u prethodnom intervalu postavljeni su bitovi pristupa, a onima kojima ne ti bitovi su ostali u nuli. Između posljednjih operacijski sustav odabire stranicu koju će zamijeniti, npr. prema FIFO algoritmu ili slučajnim izborom. Naravno ovakav pristup gruba je aproksimacija LRU algoritma, ali je jednostavan za implementaciju. Za napomenuti je potreba odabira veličine intervala poništavanja bitova pristupa. Ukoliko je taj interval kratak, najvjerojatnije će postojati informacija da se pristupalo samo jednoj stranici, a ukoliko je prevelik tada se može dobiti informacija da se pristupalo svim stranicama pa se algoritam degenerira u FIFO algoritam.

8.5.4.1 Dodatni bitovi pristupa Prethodni algoritam moguće je unaprijediti dodatnim bitovima pristupa. Uz svaki redak tablice stranica pridružen je npr. osam bitovni posmačni spremnika. Kada se stranica upiše u memoriju, svi bitovi ovog spremnika postavljaju se u nulu. Kada se pristupi stranici, sklopovlje automatski bit najvećeg značenja posmačnog spremnika postavlja u jedinicu. Sistemski sat u regularnim vremenskim intervalima daje naredbu kojom se sadržaj svih spremnika pomiče za jedno mijesio u desno, slika 9.7.

10010101

00010000

10110011

11000011

01010110

00100100

00001100

00000000

postavibit

tablica stranica u t n+1

pomakni udesno

10010101

00010000

10110011

11000011

01010110

00100100

00001100

01001100

tablica stranica u t n

0

1

2

3

4

5

6

7

0

1

2

3

4

5

6

7

Slika 9.7 Realizacija LRU algoritma s posmačnim spremnicima.

Stranica čija vrijednost posmačnog spremnika je najmanja je najdalje u prošlosti korištena. Prema slici 9.7 to je stranica broj 4, dok su npr. stranice 0 i 7 otprilike isto daleko u prošlosti korištene. Ako npr. ima više stranica s najmanjim brojem može se dodatni odabir napraviti ili FIFO algoritmom ili slučajnim odabirom. Broj dodatnih bitova pristupa proizvoljan je i uvjetovan kompromisom između informacije koja se dobiva i troška sklopovlja.

8.5.4.2 Algoritam druge prilike (second-chance) Algoritam druge prilike sklopovski je najjednostavnija aproksimacija LRU algoritma. On koristi samo jedan bit pristupa u tablici stranica, a stranice se zamjenjuju pomoću FIFO algoritma na sljedeći način:

Page 12: Virtualna memorija

1. za zamjenu odabire se stranica po FIFO algoritmu, 2. ispituje se njen bit pristupa

a) ako je on postavljen (stranici se pristupalo) stranici se ostavlja u memoriji ali joj se bit pristupa poništava (daje joj se druga prilika),

b) ako je bit pristupa nula stranica se zamjenjuje 3. ispituje se bit pristupa sljedeće stranice u redu. Slika 9.8 ilustrira ovaj algoritam.

00000011

bitpristupa

tablica stranica nakon izbacivanja

pokazivačna prvu

žrtvu

00110011

bitpristupa

tablica stranica u trenutku promašaja

pokazivačna prvu

žrtvu

ova stranicase izbacuje

Slika 9.8 . Opis algoritma druge prilike.

8.5.4.3 Poboljšani algoritam druge prilike Već je u prethodnim razmatranjima spomenuto kako je bolje zamijeniti stranicu čiji sadržaj se nije mijenjao jer u tom slučaju nije potrebno vraćati njen sadržaj na disk pa je vrijeme zamjene smanjeno. Zato se poboljšanje algoritma druge prilike postiže analizom bita promjene, koji je također sastavni dio tablice stranica. Pomoću bit pristupa i bita izmjene (bp, bi), odabire se prva stranica prema sljedećim prioritetima: 1. (0,0) stranica nije nedavno korištena a sadržaj je nepromijenjen, 2. (0,1) stranica nije nedavno korištena ali je sadržaj mijenjan, 3. (1,0) stranica je nedavno korištena ali sadržaj je nepromijenjen, 4. (1,1) stranica je nedavno korištena i sadržaj je mijenjan. Iz liste stranica, kao i u prethodnom algoritmu, odabire se za zamjenu prva stranica najmanjeg prioriteta (1). Ako nema takvih traži se prva stranica prioriteta (2) itd. Može se primijetiti da je ponekad potrebno obići i više puta cijelu listu stranica. Također, stranicama koje se nalaze između prethodnog položaja pokazivača i novog položaja poništava se bit pristupa. Ovakav algoritam koristio je Mecintosh sustav za upravljanje virtualnom memorijom.

8.5.5 Algoritmi temeljeni na brojenju pristupa stranici Osim opisanih brojni su i drugi algoritmi koji se koriste za zamjenu stranica. Tako npr. uz svaku stranicu može se vezati brojilo koje broji broj pristupa svakoj pojedinoj stranici

Page 13: Virtualna memorija

procesa koja se nalazi u memoriji. Temeljom broja pristupa moguće su sljedeći algoritmi zamjene:

najmanje korištene stranice (last frequently used LFU): stranica kojoj se najmanje pristupalo u prethodnom razdoblju vjerojatno se neće ni koristiti pa je možda najbolje nju izabrati. Ovakav pristup ima nedostatak da stranica kojoj se dosta pristupalo u početnoj fazi izvođenja programa je ubilježila brojne pristupe a praktički je nepotrebna za daljnje izvođenje programa. Tako ona praktički trajno ostaje u memoriji iako je nepotrebna

najviše korištene stranice (most frequently used MFU): ovaj algoritam ima suprotnu logiku prethodnom jer pretpostavlja da se stranici koja je tek upisana u memoriju najmanje pristupalo, a da je velika vjerojatnost da će joj se pristupati i u budućnosti. Nedostatak je što stranice koje imaju neke procedure koje se malo koriste, npr. za korekciju pogrešaka, kada se jednom unesu trajno ostaju u memoriji.

Iz navedenog lako je zaključiti da se opisani algoritmi malo koriste prvenstveno zbog relativno skupe realizacije ovih algoritama, a anomalije koje oni iskazuju su relativno ozbiljne.

8.5.6 Stvaranja lista slobodnih okvira Uz spomenute algoritme poboljšanje rada sustava dobiva se stvaranjem liste slobodnih okvira koji ne pripadaju ni jednom procesu. Kada dođe do promašaja stranice, stranica koju je potrebno izbaciti odabire se prema prethodno opisanim algoritmima, ali istovremeno započima upis nove stranice u jedan od slobodnih okvira prije nego se odabrana stranica izbaci na disk. Ovim pristupom proces može brže nastaviti s izvođenjem. Nakon što se odabrana stranica prebaci na disk, njoj pripadajući okvir proglašava se slobodnim i stavlja u listu slobodnih okvira. Daljnje unapređenje ove ideje je lista izmijenjenih stranica procesa, odnosno lista stranica u kojih se tijekom izvođenja upisivalo. U svakom trenutku kada je sklopovlje za odabir stranice koju će se izbaciti slobodno odabire se jedna od izmijenjenih stranica i prebacuje njen sadržaj na disk, a ona se označava kao neizmijenjena. Ovim pristupom povećava se vjerojatnost da se prema potrebi pronađe neizmijenjena stranica koju će se izbaciti. Nadalje, moguće je uz listu slobodnih okvira zadržati informaciju koja se stranica u okviru nalazila prije nego što je on označen kao slobodan. Budući da je sadržaj okvira u kojem se nalazila izbačena stranica ostao nepromijenjen, prema potrebi, ako se ona ponovo adresira u skoroj budućnosti nije potrebno izvoditi prebacivanje s diska nego se samo ažurira tablica stranica. Ovaj pristup koristio je VAX/VMS sistem s FIFO algoritmom zamjene stranica.

8.6 Dodjela broja okvira procesu Problem koji do sada nije razmatran je kako podijeliti okvire među procesima? Koliko procesa dozvoliti da se konkurentno izvode? Kod jednokorisničkog sustava situacija je krajnje jednostavna. Određeni broj okvira zauzima operacijski sustav, a sve ostale okvire koristi korisnički program ili programi. Pozivani programi ili procedure odnosno njihovi dijelovi pune se po stranicama u memoriju prema zahtjevu, a kada se popuni memorija nekim od opisanih algoritama izvodi se zamjena stranica.

Page 14: Virtualna memorija

Za razliku od jednokorisničkog sustava, kod višekorisničkog sustava stvar je složenija. U ovom slučaju više korisnika starta svoje procese koji su različiti prema veličini i strukturi obrade. Prvo pitanje je kako raspodijeliti slobodne okvire između procesa? Prije nego se odgovori na postavljeno pitanje potrebno je odrediti minimalni broj stranica koje proces mora imati da bi se uopće mogao izvoditi. Pri tome se misli na maksimalni broj stranica unutar koje adresira jedna naredba, a odgovor je direktno vezan uz arhitekturu procesora. Tako npr. za procesor koji koristi indirektno adresiranje naredba se može nalaziti u jednoj stranici, adresa lokacije na kojoj je pohranjena adresa operanda u drugoj, a sam operand u trećoj stranici. Znači da ova naredba za izvođenje zahtijeva tri memorijska okvira. Slična analiza može se provoditi i za druge složene naredbe dok je kod RISC procesora stvar znatno jednostavnija. Zaključak je da arhitektura računala, ili bolje rečeno arhitektura skupa naredbi procesora, određuje minimalni broj okvira koji mora biti dodijeljen procesu, dok maksimalni broj okvira je ograničen samo veličinom radne memorije. Nakon ovih razmatranja, moguće je potražiti odgovor na postavljeno pitanje kako raspodijeliti slobodnu memoriju između procesa. Najjednostavniji pristup je tretirati sve procese jednako i svakom dodijeliti jednak broj okvira. Tako ako sustav raspolaže s m slobodnih okvira, k ih se može odrediti kao lista slobodnih, a m – k jednoliko raspodijeliti između n procesa. Tako svaki proces dobiva na raspolaganje (m – k)/n okvira. Lako je uočiti nedostatak ovog pristupa. Svi procesi nisu jednake veličine i jednakih zahtjeva. Jednostavan primjer neka bude sustav sa 60 slobodnih okvira veličine 1K. Neka se istovremeno izvode dva procesa: jedan ukupne veličine 20K ⇒ 20 okvira i drugi veličine 200K ⇒ 200 okvira. Ravnomjernom raspodjelom okvira oba procesa bi dobila po 30 okvira što je krajnje nerazumno, jer prvi proces dobiva više okvira nego što mu je potrebno. Kao poboljšanje može se uvesti dodjela proporcionalna veličini procesa. Za sve procese uzete na obradu izračuna se ukupni virtualni adresni prostor:

, ∑=

=n

1iisS

gdje je si memorijski zahtjev i-tog procesa. Svakom procesu dodjeljuje se broj okvira prema sljedećoj formuli:

)km(Ssa i

i −⋅= ,

gdje je m – k ukupni broj slobodnih okvira koji su na raspolaganju korisničkim procesima. Za prethodni primjer slijedi:

5560220200a ,560

22020a ,22020020S 21 =⋅==⋅==+= .

Ovako procesi dobivaju broj okvira proporcionalno svojim zahtjevima. Spomenuta shema može se nadodati i određenim koeficijentima korekcije na način da se procesima s većim prioritetom dodjeljuje relativno veći broj stranica. Tako za isti primjer neka je prvi proces važniji od drugoga pa neka mu se dodijeli koeficijent 3 u odnosu na drugi. Raspodjelu slobodnih okvira izvodimo prema izrazu:

Page 15: Virtualna memorija

4660260200a ,1460

300203a ,2602001203S 21 =⋅==⋅⋅

==⋅+⋅= .

Sada prvi proces dobiva znatno veći broj okvira na korištenje. Ovdje je potrebno napomenuti da broj okvira koji se dodjeljuju procesu varira u ovisnosti o stupnju višeprocesiranja. Sljedeće pitanje na koje je potrebno donijeti odgovor je da li zamjenu izvoditi samo unutar okvira dodijeljenih procesu (lokalna zamjena) ili dozvoliti da proces uzima okvire od drugog procesa(globalna zamjena). Lokalna zamjena podrazumijeva da se proces izvodi samo unutar dodijeljenog broja okvira. U ovom slučaju broj okvira koji se dodjeljuje procesu određuje operacijski sustav u trenutku uzimanja procesa na obradu, a koji je usko vezan uz broj procesa koji se trenutno obrađuju. Ukoliko se broj slobodnih okvira poveća, kao posljedica završetka nekog procesa, proces i dalje nastavlja obradu s istim brojem stranica. S druge strane globalna strategija zamjene stranica dozvoljava da proces uzima stranice od drugih procesa. U ovom slučaju neki procesi većeg prioriteta mogu uzeti preveliki broj stranica drugih procesa te da njihovo normalno izvođenje dovede se u pitanje (neprihvatljivo veliki broj promašaja). Ipak, globalna strategija zamjene stranica vodi boljoj iskoristivosti memorije kao i većoj propusnosti sustava. Zato se i ona obično primjenjuje.

8.7 Rasipanje (Trashing) Kako je već spomenuto, strategija globalne zamjene stranica može dovesti do situacije da pojedini procesi imaju na raspolaganju neprihvatljivo mali broj okvira što rezultira učestalim promašajima, a time i smanjenim performansama sustava. Ovakva situacija u kojoj veći broj procesa se dovede u situaciju da ima na raspolaganju mali broj okvira naziva se rasipanje (trashing). Zbog učestalih promašaja sustav veliki dio vremena provodi u izmjeni stranica, a manji je posvećen obradi. Slika 9.9 prikazuje ovisnost iskoristivosti procesora o stupnju višeprocesiranja u sastavu koji koristi dodjelu stranica na zahtjev.

stupanj višeprocesiranja

isko

ristiv

ost

proc

esor

a rasipanje

Slika 9.9. Ovisnost iskoristivosti procesora o stupnju višeprocesiranja.

Očito je da operacijski sustav koji koristi straničenje na zahtjev, te globalnu strategiju zamjene mora imati mehanizam detekcije rasipanja. Najjednostavnije je detektirati povećanu frekvenciju promašaja, a problem otkloniti reduciranjem stupnja višeprocesiranja izbacivanjem nekih procesa iz obrade, slika 9.10.

Page 16: Virtualna memorija

gornjagranica

donjagranica

smanjiti broj okvira

povećati broj okvira

frkve

ncija

pro

maš

aja

broj okvira

Slika 9.10. Ovisnost frekvencije promašaja o broju okvira.

8.8 Dodatna razmatranja Odabir algoritma i strategije zamjene stranica važna su pitanja koje je potrebno riješiti u sustavima koji koriste straničenje na zahtjev. Uz ova temeljna pitanja nameću se i dodatna rješenja koja mogu poboljšati rad sustava.

8.8.1 Predunos stranica u memoriju (prepaging) Kod startanja procesa, odnosno njegovog prvog unosa u memoriju prema dosadašnjim strategijama broj promašaja je jako velik. Logično rješenje je prilikom prvog unosa procesa u memoriju unijeti veći broj stranica, a ne samo onu koju prvu proces zahtjeva. Također, ukoliko je u nekom trenutku potrebno suspendirati proces iz radne memorije (npr. zbog rasipanja) zgodno je da operacijski sustav zapamti koje je stranice proces koristio u trenutku gubljenja prava natjecanja za dodjelu procesora kako bi se u trenutku kada se ponovo ostvare uvjeti za nastavak njegovog izvođenja to izvođenje učinkovito nastavilo. U trenutku ponovnog nastavka izvođenja unesu se sve stranice koje je proces koristio prije nego je suspendiran kako bi se izbjeglo nepotrebno prekidanje zbog promašaja. Predunos ima prednost utoliko što u pojedinim fazama izvođenja procesa umanjuje broj promašaja.

8.8.2 Veličina stranica Veličina stranica ili okvira je veličina na koju projektanti operacijskog sustava rijetko imaju utjecaj. Na nju je moguće jedinu utjecati za vrijeme projektiranja novih sustava. U tom slučaju potrebno je analizirati utjecaj veličine stranice na performanse sustava. S gledišta tablice stranica bolja je veća veličina stranice jer je za isti proces potrebna manja tablica stranica. S druge strane manja veličina stranice rezultira boljoj iskoristivosti memorije. Naime, kako je već opisano kod sustava koji koriste dodjelu memorije po stranicama postoji samo unutarnja segmentacija memorije koja se prosječno može procijeniti na polovicu veličine stranice. Tako je prosječno pola veličine stranice po procesu neiskorištena memorija. Sljedeći čimbenik je brzina unosa stranice u radnu sa sekundarne memorije. Ovo vrijeme sačinjava vrijeme postavljanja glave iznad traženog cilindra (seek time), vrijeme pronalaženja sektora, odnosno zakreta diska (latency), te vrijeme prebacivanja podatka

Page 17: Virtualna memorija

(transfer time). Prva dva vremena neovisna su o veličini stranice i ovise samo o mehaničkim svojstvima diska. Tako npr. vrijeme postavljanja iznosi oko 8 ms, a vrijeme postavljanja oko 10ms. Vrijeme prijenosa ovisi o veličini stranice. Tako za brzinu prijenosa od 2 Mokteta po sekundi je potrebno svega 0.5ms za prijenos stranice od 1024 okteta. Tako je za veće stranice potrebno veće vrijeme prijenosa. Površno gledajući lako se zaključi da je s aspekta brzine unosa stranice u memoriju povoljnije da je stranica manja. S druge strane mora se uzeti i vrijeme unosa preostalim stranica. Tada značajan utjecaj ima vrijeme postavljanja i pristupa. S tog stajališta može se zaključiti da je bolje što su stranice veće jer se u tom slučaju prenosi manji broj stranica. Tako npr. za unos 2k programa u memoriju kad su stranice svega 512 okteta potrebno je: ms731)108(4T1 =++⋅= , dok za 2k stranice: ms191)108(1T2 =++⋅= . S druge strane, ukoliko je veličina stranice manja, u memorijski prostor dodijeljen programu moguće je upisati veći postotak programa koji se najviše koristi. Praktički, s manjim stranicama postiže se veća rezolucija pri izboru dijelova programa koji se više koriste. Danas veličine stranica variraju između 512 okteta i 4kokteta. Tako npr. Intel 80386 ima veličinu stranice od 4kokteta, Motorola 68030 dozvoljava promjenjivu veličinu stranice od 256 okteta do 32 kokteta. Povijesno, kako su se razvijali procesori te je memorija postajala jeftinija, veće brzine i kapaciteta, uz činjenicu da se brzine pristupa disku ne povećavaju proporcionalno njima, osjeća se trend prema većim stranicama.

8.8.3 Struktura programa Straničenje na zahtjev trebalo bi biti transparentno za korisnika. U većini slučajeva korisniku je svejedno kako piše program i kako se program upisuje u memoriju. Ipak postoje slučajevi u kojima poznavanje mehanizma straničenja na zahtjev može pomoći u pisanju programa koji će se brže izvoditi. Kao primjer može se navesti inicjalizacija cjelobrojnog polja veličine 256 x 256. Svaki cjelobrojni broj prikazan je s četiri okteta. Veličina stranice je 1koktet. Tipičan kod je: long int A[0..255,0..255]; int i, j; for (i=0; i<256; i++) { for (j=0; j<256; j++) A[i,j] := 0;}; ili for (j=0; j<256; j++) { for (i=0; i<256; i++) A[i,j] := 0;}; Program prevodilac obično slaže polje po redcima tako da slijedom idu A[0,0], A[0,1], ..., A[0,255], A[1,0], ..., A[255,255]. Prema organizaciji stranica svaki redak stane u jednu stranicu. Neka operacijski sustav dodijeli procesu npr. 128 okvira. Tada prvi program ima svega 256 promašaja, dok drugi 256 x 256 = 65536 promašaja što rezultira znatno dužim izvođenjem. Razlog je opisan slikom 9.11.

Page 18: Virtualna memorija

A[0,0]A[0,1]A[0,2]

A[1,0]A[1,1]A[1,2]

A[1,255]

A[255,0]A[255,1]

A[255,255]

A[0,255]

stranicabroj

0

1

255

pristupbroj

1.257513

652812.258514

65282

256.512

65536

A[0,0]A[0,1]A[0,2]

A[1,0]A[1,1]A[1,2]

A[1,255]

A[255,0]A[255,1]

A[255,255]

A[0,255]

stranicabroj

0

1

255

pristupbroj

1.2.3.

256.257.258.259.

512.

6528165282

65536

Slika 9.11. Pristup stranicama dvodimenzionalnog polja.