You are on page 1of 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
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

tablica
stranica
sekundarna
stranica n memorija
fizička (disk)
virtualna memorija
memorija

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
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.

0
bit 1
prisustva 2
3
0 stranica A A
4 1 4
0
1 stranica B 0 5
1 C
6 1 6
2 stranica C 2
0 7
3 A B
3 stranica D 0 8
4 F
9 1 9 C D E
4 stranica E 5
0 10
6 F G H
5 stranica F 0 11
7
12
6 stranica G
tablica 13
7 stranica H stranica 14
15
16 sekundarna
17 memorija
fizička (disk)
virtualna memorija
memorija

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.
sekundarna
stranica je na disku 3
memorija
fizička (disk)
memorija
prekid 2
operacijski 0
1
sustav 2
2
3
bit A
4
prisustva A B
5
6 C D
stranica D adresiranje C E
0 4 1 7
1 1 0 8 F G H
load M 2 6 1 9 F
6 3 0 10
3 ponovi 4 0 5 11
naredbu 5 9 1 12 4
0
6 obnovi 13 stranica u
7 0 14
tablicu slobodan
virtualna tablica stranica okvir
memorija stranica

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.
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 0
znak 1
znak 0 znak 2
znak 1 znak 3
znak 2 znak 2
nova znak 3 nova znak 3
stranica znak 4 stranica znak 4
znak 5 znak 5
znak 6 znak 6
znak 7 znak 7

prije prekida vrijeme 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
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.
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.
sekundarna
stranica je na disku 3 memorija
fizička (disk)
memorija
prekid 2
operacijski 0
1
sustav 2
2 3
bit A
4 A
prisustva izbacuje B
5
6 C se C D E
stranica D adresiranje 4
0 1 7 žrtva
0 F G H
1 1 8
load M 2 6 1 9 F 4
8 3 0 10
3 0
ponovi 4 7 11
naredbu 5 9 1 12 6
6 13 1 13 G
7 0 5 14 stranica u
oslobođen
obnovi
virtualna tablica okvir
tablicu
memorija stranica stranice zauzete
stranica
drugim 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.

12
10
broj promašaja

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

Slika 9.6. Odnos broja promašaja i broja okvira dodijeljenih procesu.
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:
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
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.

postavi pomakni u
bit desno
0 1 0 1 1 0 0 0 0 0 0 1 0 1 1 0 0 0
1 0 0 0 1 1 0 0 1 1 0 0 0 0 1 1 0 0
2 0 0 1 0 0 1 0 0 2 0 0 0 1 0 0 1 0
3 1 1 1 0 1 0 0 0 3 0 1 1 1 0 1 0 0
4 0 0 0 0 0 0 1 1 4 0 0 0 0 0 0 0 1
5 1 0 0 0 1 1 1 1 5 0 1 0 0 0 1 1 1
6 0 0 1 1 1 0 0 0 6 0 0 0 1 1 1 0 0
7 1 0 1 1 0 0 0 0 7 0 1 0 1 1 0 0 0

tablica stranica u t n tablica stranica u t n+1

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:
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.

bit bit
pristupa pristupa
0 0
0 ova stranica 0
pokazivač se izbacuje
na prvu 1 0
žrtvu 1 0
0 0
pokazivač
0 na prvu 0
1 žrtvu 1
1 1
tablica stranica u tablica stranica nakon
trenutku promašaja izbacivanja

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
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.
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
S = ∑ si ,
i =1
gdje je si memorijski zahtjev i-tog procesa. Svakom procesu dodjeljuje se broj okvira
prema sljedećoj formuli:
s
a i = i ⋅ (m − k ) ,
S
gdje je m – k ukupni broj slobodnih okvira koji su na raspolaganju korisničkim
procesima. Za prethodni primjer slijedi:
20 200
S = 20 + 200 = 220, a1 = ⋅ 60 = 5, a 2 = ⋅ 60 = 55 .
220 220
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:
3 ⋅ 20 200
S = 3 ⋅ 20 + 1 ⋅ 200 = 260, a1 = ⋅ 60 = 14, a 2 = ⋅ 60 = 46 .
300 260
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.

rasipanje
iskoristivost procesora

stupanj višeprocesiranja

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.
frkvencija promašaja
povećati broj okvira gornja
granica

donja
granica
smanjiti broj okvira

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
(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:
T1 = 4 ⋅ (8 + 10) + 1 = 73ms ,
dok za 2k stranice:
T2 = 1 ⋅ (8 + 10) + 1 = 19ms .
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.
stranica pristup stranica pristup
broj broj broj broj
A[0,0] 1. A[0,0] 1.
A[0,1] 2. A[0,1] 257
A[0,2] 3. A[0,2] 513
0 0

A[0,255] 256. A[0,255] 65281
A[1,0] 257. A[1,0] 2.
A[1,1] 258. A[1,1] 258
A[1,2] 259. A[1,2] 514
1 1

A[1,255] 512. A[1,255] 65282

A[255,0] 65281 A[255,0] 256.
A[255,1] 65282 A[255,1] 512

255 255

A[255,255] 65536 A[255,255] 65536

Slika 9.11. Pristup stranicama dvodimenzionalnog polja.