Navidezni pomnilnik
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.
Splošno o pomnilnikih
[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 tako imenovanih cache-ih (predpomnilnikih).
Lastnosti
[uredi | uredi kodo]Večina sodobnih osebnih računalnikov ima med 4 in 16 GB pomnilnika RAM, kar pogosto ne zadošča za hkratno delovanje vseh sodobnih aplikacij, ki zahtevajo veliko pomnilniških virov. Če bi bila velikost pomnilnika omejena zgolj z RAM-om, bi bilo mogoče zagnati le omejeno število aplikacij. Ob zagonu nove aplikacije bi bilo potrebno zaključiti že zagnano aplikacijo, če bi ta zavzemala enako ali več pomnilnika kot nova aplikacija. Prav tako ne bi bilo mogoče zagnati aplikacij, katerih velikost presega razpoložljivi RAM. Te izzive v sodobnih večopravilnih operacijskih sistemih rešuje uporaba navideznega pomnilnika.
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 ali SSD. 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 operacijski sistem. Operacijski sistem lahko simulira tako velik pomnilnik kot je celoten naslovni prostor procesorja (32-biten: 4GB, 64-biten: 18EB oz. bitov)
Delovanje
[uredi | uredi kodo]Pretvorba iz navideznega naslova v fizični naslov je izvedena z enoto MMU (Memory Management Unit), ki jo vsebuje CPE ali pa je na čipu, preko katerega dostopa CPE 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 tabelo strani (translation tables, tudi 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 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 tabelo strani in nadaljuje izvajanje prejšnjega procesa s tem, da ponovi zadnji 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 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 zmanjš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
[uredi | uredi kodo]Pred razvojem navideznega pomnilnika so morali programi 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 strojna 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 operacijski sistem;
- nudi uporabniku možnost istočasnega izvajanja več programov, čeprav ne stojijo vsi v fizičnem pomnilniku RAM-u.
Zunanje povezave
[uredi | uredi kodo]- http://www.e-student.si/Navidezni_pomnilnik Arhivirano 2007-09-30 na Wayback Machine.