Navidezni pomnilnik

Iz Wikipedije, proste enciklopedije
Skoči na: navigacija, iskanje

Navídezni pomnílnik (tudi virtuálni pomnílnik) (angleško virtual memory) je značilnost računalniških sistemov, kjer se uporablja »trajno« shranjevanje podatkov za pomoč pri izvajanju procesorskih funkcij, in se s tem osvobodi več bralno pisalnega pomnilnika (RAM-a) oziroma glavnega pomnilnika.

Osnove pomnilnikov[uredi | uredi kodo]

Procesor je zelo hitra naprava za obdelovanje podatkov in zato potrebuje tudi hiter pomnilnik, da lahko dostopa do teh podatkov. Ampak ker so hitri pomnilniki zelo dragi je zmogljivost le teh v računalniku zelo majhna in zmogljivost počasnih zelo velika. Zato računalnik ne bere podatkov neposredno z diska in jih zato pred tem začasno naloži v RAM in jih prebere od tam. Celo iz RAM-a jih ne obdeluje vedno neposredno, ampak pogosto dostopane podatke in ukaze shranjuje v posebnih registrih in takoimenovanih cache-ih (predpomnilnikih).

Kaj je navidezni pomnilnik (Virtual memory)[uredi | uredi kodo]

Večina današnjih osebnih računalnikov ima okoli 2-8 GB RAM-a, kar pa ni dovolj da bi vse današnje aplikacije, ki zavzmejo veliko količino pomnilnika, bile naložene naenkrat v njem. Če bi bila velikost pomnilnika omejena z RAM-om, bi lahko zagnali le določeno število aplikacij in bi za zagon nove morali končati že zagnano aplikacijo, ki zasede enako ali več pomnilnika kot na novo zagnana. Tudi aplikacij ki so večje od RAM-a ne bi mogli zagnati. V današnjih večopravilnih operacijskih sistemih se takšne probleme rešuje z navideznim pomnilnikom.

Navidezni pomnilnik ali navidezno naslavljanje pomnilniškega prostora je lastnost računalnika, da lahko naslovi večji glavni pomnilniški prostor (RAM) kot ga je fizično prisotnega. Za shranjevanje podatkov, ki se shranjujejo izven dosega pomnilnika, se uporablja počasnejši, ampak prostornejši, trdi disk. To naredi operacijski sistem povsem nevidno uporabniku z uporabo ostranjevanja. To opazimo le, ko preklapljamo iz enega programa v drugega, ko pride do kratke zakasnitve, saj se mora vsebina z diska prepisati v RAM. Celo programi, ki se izvršujejo, delujejo kot da niso shranjeni na disku, ker operacijski sistem simulira večji RAM in tako prepriča program, da je naložen v RAM-u. Zato se programerjem ni potrebno ubadati s tem kako bodo izmenjevali podatke med trdim diskom in RAM-om, ker to za njih opravi že OS. OS lahko simulira tako velik pomnilnik kot je celoten naslovni prostor procesorja (32-biten: 4GB, 64-biten: 18EB oz. 2 na 64 bitov)

Kako deluje navidezni pomnilnik[uredi | uredi kodo]

Pretvorba iz navideznega naslova v fizični naslov je izvedena z enoto MMU (Memory Management Unit), ki jo vsebuje CPU ali pa je na čipu, preko katerega dostopa CPU do RAM-a. V MMU so shranjeni podatki, kako se navidezni naslovi preslikajo v fizične. Preslikavo teh naslovov pa implementira OS.

Operacijski sistem je odgovoren za odločanje, kateri program oziroma kateri deli programa v simuliranem pomnilniku bodo shranjeni v RAM-u in kateri na trdem disku. Na podlagi tega OS oblikuje translation tables ali drugače rečeno memory map, ki služi za pretvorbo med navideznimi naslovi, ki jih naslavlja procesor, in fizičnimi naslovi, kjer so iskani podatki zares shranjeni. Ko pa procesor naslavlja naslov, ki se ne nahaja v RAM-u se trenuten proces začasno ustavi in OS izbriše določen podatek v RAM-u (če je le-ta popolnoma zaseden) in naloži iskani podatek z diska v RAM. Potem posodobi memory map in nadaljuje izvajanje prejšnjega procesa s tem, da ponovi zanji ukaz, ki ni bil izveden, ker se podatek ni nahajal v RAM-u. To lahko stori na več načinov in sicer z uporabo:

  • Izmenjevalna (swap) datoteka (OS/2, zgodnji Windows-i):
    Programi se pri izvajanju celotni prenesejo v pomnilnik. Na disk se shranjujejo v posebno Swap datoteko, ki jo lahko spreminja le OS. Ta način uporabe ima slabost, da mora za delovanje programa prenesti le-tega celotnega v pomnilnik in pri današnjih programih, ki zasedejo zelo veliko pomnilnika, potrebujemo za takšno kopiranje veliko časa. Tukaj tudi nastopi omejitev, da program ne sme biti večji od velikosti RAM-a.
  • Page datoteke oz. Paging (Windows):
    Celoten naslovni prostor se razdeli na strani (pages). To so deli pomnilnika, ki so običajno veliki od 512B do 8kB. Ko procesor naslavlja določen naslov v resnici določi stran (page, najvišji biti) in odmik na strani (offset, najnižji biti). Tako se v RAM nalagajo le koščki programa in ne celoten program. Na disku pa so podatki shranjeni v eni datoteki, ampak so logično razporejeni po straneh. OS lahko s tem načinom zaganja program, ki ne stoji celoten v RAM-u (program lahko vseeno deluje malce počasneje, če mora OS neprestano izmenjevati določene dele programa med diskom in RAM-om), in ima v RAM-u naloženih več programov kot jih lahko stoji, saj so v RAM-u shranjeni le najpogosteje dostopani deli programa. Obstaja več različnih algoritmov, ki določajo katera stran naj se zapiše na disk, ko se mora neka druga prenesti v RAM. Nekateri izmed teh so staranje (Aging), FIFO, LRU(Least Recently Used), Random,... Navadno se na disk shrani datoteko, ki je bila najmanjkrat dostopana. Pri Paging-u pa se pojavita še dve prednosti. Prva je, da velikokrat pride do tega da se določena stran ne modificira in je ni potrebno ponovno shraniti na disk, ampak se jo le a prepiše. Druga pa, da če zaženemo več instanc istega programa, imajo instance shranjeno le eno kopijo programa v RAM-u in če se določena stran programa spremeni, se ta stran skopira v drug del RAM-a in tam modificira ali drugače rečeno, se program veji. To nam zmanjaša porabo RAM-a in omogoča hitrejše zaganjanje programov, ki so že naloženi v RAM-u.
  • Izmenjevalna particija (Linux):
    Swap particija deluje na isti način kot Paging, le da se za shranjevanje datotek uporablja posebna particija na disku in ne tista kjer je naložen OS. Takšen način ima prednost, da ne pride do raztrešenosti ali drugače rečeno fragmentiranja page datotek po disku in je le-ta shranjena na določenem mestu, kar omogoča hitrejše branje in zapisovanje.

Zgodovina navideznega pomnilnika[uredi | uredi kodo]

Pred razvojem navideznega pomnilnika so morali programji v 40-ih in 50. letih sami sprogramirati upravljanje z RAM-om in diskom, ter kopiranjem med njima.

Navidezni pomnilnik je bil razvit med leti 1959 – 1962 v University of Manchester za računalnike Atlas. Ampak preden je bil navidezni pomnilnik lahko predstavljen kot stabilna celota, so morali izvesti veliko eksperimentov, modelov in teorij, da so odpravili vse napake in slabosti ter povečali zmogljivost. V ta namen je morala biti razvita tudi posebna aparaturna oprema (hardware) za hitrejše izvajanje teh operacij.

IBM je že leta 1969 pokazal, kako je lahko sistem z uporabo navideznega pomnilnika enako hiter ali celo hitrejši kot sistem, ki je imel posebej sprogramirano dostopanje do RAM-a in trdega diska, torej brez navideznega pomnilnika. Kljub temu se je navidezni pomnilnik v osebnih računalnikih pojavil komaj leta 1991 z računalnikom System 7 podjetja Apple Macintosh in pozneje leta 1992 z OS Windows 3.1 podjetja Microsoft.

Zaključek[uredi | uredi kodo]

Torej navidezni pomnilnik je tehnologija, ki:

  • omogoča programerjem lažje in hitrejše programiranje, saj jim ni potrebno napisati programov, ki skrbijo za izmenjavanje podatkov med diskom in RAM-om, saj za to poskrbi OS.
  • nudi uporabniku možnost istočasnega izvajanja več programov, čeprav ne stojijo vsi v fizičnem pomnilniku RAM-u.

Zunanje povezave[uredi | uredi kodo]