Virtuaalmälu

Allikas: Vikipeedia
Virtuaalmälu kombineerib aktiivse muutmälu ja mitteaktiivse mälu kettal, et saavutada laiem kogumälu maht.

Virtuaalmälu on mäluhaldustehnoloogia, mis kasutab nii arvuti riistvara kui ka tarkvara. Virtuaalmälu eesmärgiks on laiendada aadressiruumi ehk mäluaadresside hulka, mida programmid kasutada saavad. Kui virtuaalmälu ei kasutataks, ei pruugiks programm, mis kasutab rohkem mälu, kui arvutil füüsiliselt olemas on, üldse töötada. Seevastu, kui kasutada virtuaalmälu, kopeeritakse põhimällu ainult need programmi osad, mida antud ajahetkel programmi tööks vajatakse. Seeläbi ei tule programmil töö käigus mälust puudust. [1]

Virtuaalmälu füüsilisse mällu kopeerimise hõlbustamiseks jagab operatsioonisüsteem virtuaalmälu lehekülgedeks. Iga lehekülg koosneb eelsätestatud hulgast mäluaadressidest ning salvestatakse kettale, et sellele hiljem ligi pääseda. Kui mõni programm salvestatud mälulehekülge vajab, kopeerib operatsioonisüsteem selle kettalt põhimällu ja tõlgib virtuaalsed aadressid füüsilise mälu aadressideks. Virtuaalsete aadresside füüsilisteks aadressideks tõlkimist nimetatakse vastendamiseks (mapping). Lehekülgede kettalt põhimällu kopeerimist nimetatakse lehekülgede saalimiseks. [1]

Kasutamine[muuda | redigeeri lähteteksti]

Virtuaaalmälu on oluline osa kaasaegsest arvutiarhitektuurist. Virtuaalmälu põhimõtte rakendamisel kasutatakse tänapäeval riistvara tuge, tüüpiliselt on selleks protsessorisse sisseehitatud mäluhaldusüksus. Ka emulaatorid ja virtuaalmasinad suudavad oma virtuaalse mälu sooritusvõime parandamiseks riistvara tuge ära kasutada. [2]

Vanematel operatsioonisüsteemidel polnud üldiselt virtuaalmälu funktsionaalsust sisse ehitatud. Heaks näiteks on operatsioonisüsteemid, mis olid mõeldud 1960. aastate suurarvutitele ja 1980. aastate keskpaiga personaalarvutitele (näiteks DOS). [3]

Märkimisväärsete erandite hulka 1960. aastate suurarvutitele mõeldutest kuuluvad järgmised operatsioonisüsteemid:

1980. aastate virtuaalmälu kasutatavatest personaalarvutitest on parimaks näiteks Apple Lisa. [9]

Kaasaegsetest virtuaalmälu toetavatest operatsioonisüsteemidest jooksutab suurem osa iga protsessi oma mäluruumis. Igal programmil näib seega olevat täielik ligipääs virtuaalmälule. Mõned vanematest operatsioonisüsteemidest ja isegi mõned kaasaegsetest (nagu näiteks IBM i) kasutavad sellegipoolest kõigi protsesside jooksutamiseks vaid üht aadressiruumi. [10]

Manussüsteemid ja teised eriotstarbelised arvutisüsteemid, mis vajavad väga kiireid ja/või väga järjepidevaid reaktsiooniaegu, ei pruugi virtuaalmälu üldse kasutada, kuna sellega kaasneb kahanev determinism. Manussüsteemide riistvarakulud hoitakse tihtipeale võimalikult madalal tasemel ja kõik taolised operatsioonid rakendatakse puhtalt tarkvara abil. Seetõttu võivad virtuaalmälusüsteemid vallandada ootamatuid erindeid, mis võivad sisend- ja väljundoperatsioonides tahtmatuid häireid tekitada. [11]

Ajalugu[muuda | redigeeri lähteteksti]

Enne virtuaalmälu mõiste arvutiteadlaste maailma ilmumist pidid 1940. ja 1950. aastatel kõik suuremad programmid primaar- ja sekundaarmälu salvestamise haldamiseks kasutama eraldi sisseehitatud loogikat. Näiteks oli võimalik kasutada ülekatmise meetodit. [7] Paralleelarvutuste võimaldamiseks jagasid paljud varased süsteemid mälu mitme programmi vahel virtuaalmälu kasutamata. [12] Heaks näiteks sellisest mälu jaotamisest on PDP-10 süsteem, mis tegi seda registrite abil. [13] Seetõttu, kui viimaks virtuaalmälu kasutusele võeti, oli selle eesmärgiks lisaks primaarmälu laiendamisele ka selle võimaluste kasutamise programmeerijatele võimalikult lihtsaks tegemine. [7]

1956. aastal avaldas saksa füüsik Fritz-Rudolf Güntsch Berliini Tehnikaülikoolis oma doktoritöö, mis kirjeldas kuue 100-sõnalise ploki suuruse põhimälu ja tuhande 100-sõnalise ploki suuruse aadressiruumiga masinaid, kusjuures riistvara liigutas automaatselt plokke primaarse ferriitmälu ja sekundaarse trummelmälu vahel. Seda meest loetakse tänapäeval virtuaalmälu idee avastajaks ja väljaarendajaks. [14] 1962. aastal käiku võetud esimene Atlas rakendas esmakordselt lehekülgede saalimist arvuti töömälu laiendamisvõimalusena. See arvuti kombineeris oma 16 000 sõna primaarset ferriitmälu lisaks 96 000 sõna sekundaarse trummelmäluga ja oli sellega tänapäevaste saalivate süsteemide eelkäija. Tegelikult arendati saalimise töötavad prototüübid välja juba 1959. aastaks, aga tol ajal polnud see metoodika veel laiemaks avalikkuseks valmis ja vajas edasist arendustööd. [4] [15] 1961. aastal lasi Burroughs Corporation iseseisvalt eelmainitud süsteemidest sõltumatult välja esimese tõelise virtuaalmäluga kommertsarvuti, B5000, mis kasutas mälu saalimise asemel selle segmenteerimist. [5]

Virtuaalmälu väljaarendamine oli kirjeldatud süsteemides veel algusjärgus ning enne, kui seda laiemale avalikkusele tutvustatavates operatsioonisüsteemides kasutada sai, tuli ületada veel mitmed takistused. Dünaamiline aadresside tõlkimine vajas veel kallist ja keerukat eriotstarbelist riistvara. Seetõttu aeglustasid esialgsed realisatsioonid mälule ligipääsemist märgatavalt ning kardeti, et uued sekundaarmälu kasutavad algoritmid, mis olid välja ehitatud terve süsteemi mastaabis, võivad olla vähemefektiivsemad kui varasemad rakenduspõhised algoritmid. [7] 1969. aastaks lõppesid vaidlused virtuaalmälu kasutamise üle kommertsarvutites ning veenduti selle kasumlikkuses, kuna David Sayre’i juhitud IBM-i uurimisrühm suutis näidata, et nende virtuaalmälu ülekattesüsteem töötas järjekindlalt paremini kui parimad manuaalselt kontrollitud süsteemid. [7] NORD-1 oli esimene väikearvuti, mis kasutas virtuaalmälu. 1970. aastatel rakendati virtuaalmälu ka teistes väikearvutites, neist silmapaistvamalt VMS-il jooksvad VAX mudelid. [16]

x86 arhitektuuris hakati virtuaalmälu kasutama Intel 80286 protsessoriga, kuid selle saalimistehnoloogia ei skaleerunud suuremate segmentide korral kuigi hästi. [17] Intel 80386-ga tuli ka mäluhaldusüksus [18] ja olemasoleva segmentatsioonikihi alune saalimistugi, mis lubas lehekülje tõrke erindeid teiste erinditega aheldada. [17] Sellegipoolest oli segmentide kirjeldajate laadimine kulukas operatsioon, mistõttu jäid operatsioonisüsteemide loojad tihti saalimise juurde, selmet saalimist ja segmentatsiooni kombineeritult kasutada. [7]

Saalitud virtuaalmälu[muuda | redigeeri lähteteksti]

Enamjaolt jagatakse virtuaalne mäluruum lehekülgedeks, millest igaüks on tavapäraselt vähemalt 4 KB pikk. Lehekülg on järjestikuste virtuaalsete ehk loogiliste mäluaadresside plokk, millest igaühele on vastavusse seatud füüsilised mäluaadressid. Loogilised mäluaadressid on need aadressid, mis on nähtavad ja kasutatavad jooksvatele protsessidele, füüsilised mäluaadressid on need aadressid, mis on mäluseadmele tegelikult nähtavad ja kasutatavad. [18] Seega aitab saalitava virtuaalmälu kasutamine ära hoida ka mälu fragmenteerumist.

Ühe protsessiga seotud mälu lehekülgede kogu nimetatakse töökomplektiks. Sisuliselt on tegu vähima lehekülgede hulgaga, mis peavad mälus asuma, et arvutil oleks võimalik mõnda protsessi edukalt täita. Kui kõigi aktiivsete programmide töökomplektide salvestamiseks pole piisavalt mälu, leiab aset pukslemine, mida on kirjeldatud allpool. [18]

Rakenduse poolt nähtavatele virtuaalsetele mäluaadressidele vastavate füüsiliste mäluaadresside üle arve pidamiseks on tarvis mingit võimalikult lihtsat ja kiiret metoodikat. Selleks puhuks on loodud lehekülgede tabelid, mille abil on võimalik üht aadressiliiki teiseks tõlkida. [19] Vastavat riistvara komponenti, mis selliste aadresside omavahelise ühendamisega tegeleb, nimetatakse mäluhaldusüksuseks. [18]

Kui üldiselt on iga lehekülje pikkuseks 4 kB, siis võib esineda ka teistsuguseid juhte. Pidevat blokki füüsilist mälu nimetatakse füüsilise mälu kaadriks ning see on 4 kB suur, millest on tulenenud ka virtuaalse mälu lehekülje tüüpiline suurus. Sellegipoolest võib kasutada ka suuremaid või väiksemaid lehekülgede pikkusi. Väiksemate pikkuste korral tekib mäluruumis vähem sisemist fragmentatsiooni. Suuremate pikkuste korral seevastu on kogu mäluruumi peale kokku vähem lehekülgi ja seega väiksem lehekülgede tabel, esineb vähem lehekülje tõrke erindeid ning lehekülgede kirjutamis- ja lugemisoperatsioonid kulutavad vähem aega. [19]

Mälulehekülgede saalimiseks nimetatakse protsessi, mille käigus kirjutatakse osa virtuaalmälu lehekülgedest kõvakettale ning põhimällu laetakse vaid need leheküljed, mida parasjagu jooksvate protsesside kasutamiseks tarvis on. Sel moel on võimalik arvutis jooksutada ka protsesse, mis muidu füüsilisse muutmällu ära ei mahukski, kuid mille aktiivsed osad ei vaja nii palju mälu. Sisuliselt on kogu mäluruum laiendatud, ent kasutuses on sellest reaalselt vaid üks osa. [18]

Et protsessid ei saa ligi pääseda füüsilistele mäluaadressidele, peavad need oma operatsioonid teostama loogiliste mäluaadresside kaudu. Seetõttu on võimalik virtuaalmälu abil süsteemile lisada turvalisust, kuna iga lehekülje suhtes on võimalik protsessile anda erinevaid lugemis-, kirjutamis- ja käivitusõigusi. [18]

Lehekülgede tabelid[muuda | redigeeri lähteteksti]

Lehekülgede tabelid on tabelid, milles on omavahel vastavusse seatud rakenduse kasutatavad loogilised mäluaadressid ja mälumooduli poolt tegelikult kasutatavad füüsilised mäluaadressid. Iga lehekülgede tabeli kirje juures on märge, kas vastav lehekülg on füüsilises mälus või mitte. Kui see on füüsilises mälus, sisaldab lehekülgede tabeli kirje füüsilist mäluaadressi, kuhu see lehekülg salvestatud on. Kui aga riistvara leheküljele viitamisel ilmneb, et seda hetkel ühegi aadressiga füüsilises mälus vastavusse pole seatud, viskab riistvara lehekülje tõrke erindi, mis käivitab operatsioonisüsteemi saalimise kontrollsüsteemi. [19] Riistvara, mis tegeleb loogiliste ja füüsiliste aadresside omavahelise seostamisega, nimetatakse mäluhaldusüksuseks. [18]

Lehekülgede tabelite realiseerimiseks on kasutusel mitmeid erinevaid võimalusi. Terve süsteem võib näiteks kasutada vaid üht lehekülgede tabelit, mille puhul kasutavad erinevad samaaegselt jooksutatavad rakendused virtuaalmälu ulatuse erinevaid osasid. Igale rakendusele võib vastata aga ka eraldi oma lehekülgede tabel ja segment, millisel puhul on olemas mitmed eraldi virtuaalsed aadressiruumid ja rakendused, millel on eraldi lehekülgede tabelid, viitavad erinevatele füüsilistele mäluaadressidele. Moodustada võib ka keerulisemaid lehekülgede tabelite ja segmentide vahelisi süsteeme, ent lõppkokkuvõttes jääb põhimõte samaks. [19]

Saalimise kontrollsüsteem[muuda | redigeeri lähteteksti]

Selleks, et süsteem saaks kasutada rohkem operatiivmälu, kui arvutil tegelikult füüsiliselt olemas on, tuleb aeg-ajalt teostada saalimisoperatsioone virtuaalmälu ja päris mälu vahel. Operatsioonisüsteem peab pidevalt järge selle üle, millised leheküljed on parasjagu kasutuses ja milliseid enam ei kasutata või millised pole mingi pikema ajavahemiku vältel enam üldse kasutuses olnud. Kui ilmneb, et on tarvis mõnda uut lehekülge kasutada, ent füüsilisele mälule viitavad lehekülgede tabelid on juba täis, asendatakse ebatarvilikud leheküljed füüsilises mälus lehekülgede tabeli abil ära ning leheküljed, mida enam ei kasutata, suunatakse varuks virtuaalmällu. Kui seejärel mõni protsess nõuab ootamatult lehekülge, mis füüsilisest mälust eemaldati, tekib lehekülje rikke erind (ka leheküljepöördusviga) ja käivitatakse saalimise kontrollsüsteem. [18]

Kui käivitatakse saalimise kontrollsüsteem, siis uuritakse, kas lehekülje rikke erindi tekkimisel soovitud loogilise mäluaadressiga lehekülg on üldse olemas. Kui ilmneb, et on, otsitakse sellele leheküljele taas vaba mäluruum, viiakse lehekülg tagasi füüsilisse mällu ning käivitatakse käsk, mille tagajärjel lehekülje rikke erind tekkis, uuesti, et vältida võimalikke süsteemi tõrkeid. Kui kõigi aktiivsete programmide töökomplektide salvestamiseks pole piisavalt vabastatavat mälu, võib tekkida pukslemiseks nimetatav olukord. [18]

Pukslemine[muuda | redigeeri lähteteksti]

Pukslemine (thrashing) on olukord, mille vältel tegeleb arvuti põhiliselt lehekülgede saalimisega ja teiste protsesside töötlemine jääb tagaplaanile. Olukord võib tekkida, kui kõiki aktiivsete programmide töökomplektide salvestamiseks pole füüsilises mälus piisavalt ruumi. Olukord seisneb lehekülgede pidevas edasi-tagasi saalimises ja vanade lehekülgede üha uuesti välja vahetamises. [18]

Kõige lihtsam lahendus mälupuudusele on arvutile füüsilise mälu juurdelisamine, kuna see võimaldaks parasjagu aktiivselt töötavate protsesside töökomplektide kogumahu suurendamist. Abiks võib olla ka kasutatavate rakenduste arhitektuuri, ressursijaotuse ja mälukasutuse ülevaatamine ja ümberkujundamine. Samas oleks võimalik vähendada ka aktiivsete protsesside kogust, mis vähendaks nõudlust füüsilise mälu järele.

Viited[muuda | redigeeri lähteteksti]

  1. 1,0 1,1 Webopedia. Virtual memory. Kasutatud 08.12.2013. (inglise)
  2. AMD-V™, 2008. Nested Paging. Kasutatud 12.12.2013. (inglise)
  3. Microsoft, 2011. Windows Version History Kasutatud 12.12.2013. (inglise)
  4. 4,0 4,1 University of Manchester, 1996. Atlas Kasutatud 12.12.2013. (inglise)
  5. 5,0 5,1 Charles Babbage Institute, University of Minnesota, 1986. The Burroughs B5000 Conference Kasutatud 12.12.2013. (inglise)
  6. Burroughs Corporation, 1964. The Burroughs B5500 Information Processing Systems Reference Manual Kasutatud 12.12.2013. (inglise)
  7. 7,0 7,1 7,2 7,3 7,4 7,5 7,6 7,7 7,8 7,9 Peter J. Denning, George Mason University, 1996. Before Memory Was Virtual Kasutatud 12.12.2013. (inglise)
  8. A. Bensoussan, C. T. Clingen, Honeywell Information Systems Inc., R. C. Daley, Massachusetts Institute of Technology, 1972. The Multics Virtual Memory: Concepts and Design Kasutatud 13.12.2013. (inglise)
  9. Lisa Emulator Project, the Apple Lisa FAQ. What is the Apple Lisa? Kasutatud 12.12.2013. (inglise)
  10. IBM Corporation, 1990. The Virtual Storage Address Space Kasutatud 12.12.2013. (inglise)
  11. University of California, 2005. Software Virtual Memory Management for MMU-less Embedded Systems Kasutatud 12.12.2013. (inglise)
  12. E. L. Glaser, Massachusetts Institute of Technology, J. F. Couleur, G. A. Oliver, General Electric Computer Division, 1965. System Design of a Computer for Time Sharing Applications Kasutatud 13.12.2013. (inglise)
  13. Stanford University, 2013. Virtual Memory, Multiple Segments Kasutatud 13.12.2013. (inglise)
  14. Laurie Robertson, Virginia Tech. Origin of the Virtual Memory Concept Kasutatud 13.12.2013. (inglise)
  15. E. G. Swedin, D. L. Ferro, 2005. Computers: The Life Story of A Technology Kasutatud 13.12.2013. (inglise)
  16. H. M. Levy, P. H. Lipman, Digital Equipment Corporation, 1982. Virtual Memory Management in the VAX/VMS Operating System Kasutatud 13.12.2013. inglise)
  17. 17,0 17,1 University of Alaska, 2013. Intel 80286/80386/80486 Kasutatud 13.12.2013. (inglise)
  18. 18,0 18,1 18,2 18,3 18,4 18,5 18,6 18,7 18,8 18,9 H. Tähis, Tallinn, 2008. Operatsioonisüsteemid: EUCIP sertifitseerimiseksami moodul C2 õppematerjal, seminaritöö Kasutatud 13.12.2013
  19. 19,0 19,1 19,2 19,3 University of Pennsylvania, 2003. Computer Operating Systems, Virtual Memory Kasutatud 13.12.2013. (inglise)