Ve�ina sistemov omogo�a, da procesi le�e kjerkoli v fizi�nem pomnilniku. �eprav se naslovni prostor ra�unalnikovega pomnilnika za�enja z naslovom 00000, je normalno prvi naslov uporabni�kega procesa druga�e alociran. Preden postane nek program izvr�ljiv, mora preiti ve� korakov. Naslovi v programu so pri tem razli�no (v za�etku lahko povsem simboli�no) predstavljeni. Ti naslovi se nato transformirajo obi�ajno v relativne naslove (relocatable addresses). Tako kodiran program je premestljiv glede na fizi�ni pomnilnik. Program z absolutnimi naslovi ni tako fleksibilen.
Tipi�no lahko pride do asociacije (binding) naslovov programskih instrukcij in podatkov s pomnilni�kimi naslovi v enem od naslednjih korakov:
�as prevajanja (compile time): Absolutno programsko kodo tvorimo le, �e vnaprej vemo, kje v pomnilniku bo moral le�ati program oziroma njegovi podatki. �e �elimo kasneje spremeniti lokacijo programa, ga moramo ponovno prevesti.
�as nalaganja (load time): Prevajalnik je moral tvoriti relativno (premestljivo) programsko kodo. �e se spremeni za�etni naslov, moramo program ponovno nalo�iti.
�as izvajanja (execution time): Proces lahko premikamo iz enega v drug pomnilni�ki segment celo med izvajanjem. Asociacijo naslovov v �asu izvajanja programa omogo�a aparaturna oprema.
Naslovu, ki ga glede na programski proces pripravi CPE ra�unalnika, pravimo logi�ni naslov. Naslov, kot ga vidi pomnilnik, pa je fizi�ni naslov. Pri asociaciji naslovov v �asu prevajanja in �asu nalaganja so logi�ni naslovi enaki fizi�nim, pri asociaciji v �asu izvajanja pa se ti naslovi obi�ajno razlikujejo. Logi�nemu naslovu tedaj pravimo tudi virtualni naslov.
Primer: dinami�na
realokacija
Koncept dinami�nega povezovanja (dynamic linking) je podoben dinami�nemu nalaganju. Namesto, da prestavimo v �as izvajanja nalaganje, prestavimo v ta �as kar povezovanje (na primer knji�nic). Zato binarna (izvr�ljiva) kopija programa ne potrebuje �e navezanih sistemskih rutin. Binarni zapisi programov na disku so zato kraj�i. Namesto potrebnih sistemskih rutin imajo taki zapisi le ustrezne �trclje (stubs). Tak �trcelj je kratek ko��ek programske kode, s katero proces locira zahtevano rutino v pomnilniku (�e se ta �e nahaja v pomnilniku), po potrebi pa zahteva njeno nalaganje s knji�nice na disku. Ta koncept tudi omogo�a, da vsi procesi uporabljajo isto kopijo sistemske rutine v pomnilniku.
Dinami�no povezovanje (sistemskih) knji�nic ima �e eno prednost.Ko dobimo novo verzijo takih knji�nic, ni nujna ponovna predelava (povezovanje) uporabni�kih programov, saj bodo avtomatsko uporabljali novo verzijo. Da pa ne pride do nekompatibilne uporabe novih verzij zagotavlja informacija o zahtevani verziji, ki se nahaja tako v �trclju kot v knji�nici rutin. Starej�i programi bodo pa� �e vedno uporabljali starej�e verzije knji�nic. Takemu sistemu pravimo sistem skupnih knji�nic (shared libraries).
Primer: Ostranjevanje pomnilnika
Ne bomo se spu��ali v same tehnike ostranjevanja pomnilnika. Navedimo
le algoritme, ki jih lahko uporabljamo pri odlo�itvah o zamenjavi strani:
![]() |
Naklju�na zamenjava strani
V zalogi strani naklju�no izberemo eno in jo nadomestimo z novo. Ta algoritem jemljimo le kot referenco za ostale. Kasneje bomo spoznali, da je to najslab�a mo�nost. |
![]() |
FIFO algoritem:
Je najbolj preprost. Ko potrebujemo novo stran, izberemo v ta namen tisto ki je "najstarej�a". Ta algoritem ni nujno najbolj optimalen. Tako lahko res zamenjamo stran, v kateri je tekel nek inicializacijski (in ne ve� potreben) modul. Lahko pa je v njej neka pogosto uporabljana podatkovna struktura. |
![]() |
Optimalni algoritem:
Naj bi zamenjal tisto stran, ki povzro�a najmanj izpadov strani (page faults). V praksi pa ga ne moremo implementirati, saj ne moremo vnaprej poznati, katere strani bomo potrebovali. |
Je pribli�ek optimalnega algoritma. Za vsako stran vodimo evidenco, kdaj je bila nazadnje uporabljena. Ko potrebujemo novo stran, jo zamenjamo s tisto, ki je �e najdlje nismo uporabili (Last Recently Used).
![]() |
Pogosto si pri tem pomagamo s takoimenovanim referen�nim
bitom (za vsako stran), ki se setira ob vsakem naslavljanju te strani,
Sistem pa ga periodi�no resetira.
Poznamo ve� izpeljank tega algoritma. Ena od njih je urni algoritem, ko cikli�no gledamo strani. �e ima opazovana stran referen�ni bit (pravimo tudi umazani bit) enak 0, jo zamenjamo, sicer ne. |
�tevni algoritmi: Temeljijo na tem, da za vsako stran �tejemo �tevilo referenc te strani (v danem �asovnem intervalu). Imamo lahko ve� strategij. Tako imamo lahko za kriterij, da zamenjamo tisto stran, ki je bila najmanj pogosto uporabljena (LFU, Last Frequently Used). Argument za tako izbiro je, da so najbolj aktivne strani tiste z najve� referencami. Inverzen je algoritem MFU (Most Frequently Used), ki pravi, da take strani ne smemo ( takoj) zamenjati, saj morda �e nima dovolj referenc, ker je bila vstavljena pred kratkim.
![]() |
Krmiljenje bremena (Load control)
Odlo�iti se moramo, koliko procesov naj v danem trenutku sploh konkurira za strani. �e jih vzamemo preve�, bo preve�krat pri�lo do napake strani. �e jih je premalo, je pomnilnik slabo izkori��en. Kot kriterij obremenitve je bolje,�e opazujemo �tevilo napak strani kot pa obremenitev CPE. Opazujemo lahko tudi, koliko �asa procesi �akajo na strani v pomnilniku.
|
Interaktivna demonstracija koncepta virtualnega pomnilnika