Virtuaalmälu — mis see on ja kuidas arvuti mäluhaldus töötab
Virtuaalmälu selgitatud: kuidas operatsioonisüsteem, RAM ja ketas jagavad mälu, kuidas ümberlaadimine töötab ning miks see mõjutab jõudlust ja reaegimist.
Virtuaalmälu on mälu haldamise tehnika, mida kasutavad kaasaegsed arvutites töötavad süsteemid. Riistvara (protsessori, graafikakaardi jt seadmete füüsiline osa) käitab tarkvara, mis omakorda vajab arvuti mälu oma andmete ja koodi hoidmiseks. Tänapäevased arvutid võivad samaaegselt jooksevad mitu programmi või protsessi — seda nähtust ei tohiks segi ajada multiprotsessori (rohkemate protsessorite) mõistega; pigem räägitakse siin multitasking’ust või mitme protsessi samaaegsest haldamisest (multiprotsessoriks on eri mõiste).
Kui süsteemis töötab korraga mitu programmi, jagatakse piiratud riistvararessursse (näiteks põhimälu (RAM)) protsesside vahel. Virtuaalmälu idee seisneb selles, et iga protsess „näeb” omaette suurt aadressiruumi — virtuaalset mälublokki — sõltumata sellest, kus päriselt andmed asuvad. See virtuaalne aadressruum koosneb sageli väiksematest osadest (lehtedest või segmentidest), millest osa võib asuda füüsilises mälu sees ja osa kõvakettal või SSD-l swap‑failis või -partitsioonil.
Kuidas virtuaalmälu täpsemalt töötab
Selle töö jagavad omavahel riistvara ja operatsioonisüsteemid:
- Virtuaal- ja füüsilised aadressid: protsess kasutab virtuaalaadresse; need tõlgitakse riistvara poolt füüsilisteks aadressideks.
- MMU (Memory Management Unit): protsessori või emaplaadi komponendi (mitte ALU) ülesanne on virtuaalsete aadresside jaotamine füüsiliste aadressideks. MMU kasutab selleks leht- või segmenttabeleid.
- Lehed ja lehe tabelid: mäluruum jagatakse tavaliselt fikseeritud suurusega lehtedeks (näiteks 4 KB). Igal protsessil on oma lehe tabel, mis seob virtuaallehe füüsilise lehega või näitab, et leht hetkel kettal asub.
- TLB (Translation Lookaside Buffer): kiire väike vahemälu MMU-s, mis salvestab hiljuti kasutatud aadressidõlke, et kiirendada tõlget.
- Page fault (leheviga): kui protsess proovib juurde pääseda virtuaalaadressile, mille vastavat füüsilist lehte ei ole mälus, tekib leheviga. Operatsioonisüsteem laeb puuduva lehe kettalt mällu (demand paging) ja värskendab lehe tabelit.
Swapping vs paging
On tähtis eristada täielikku swap‑imist (protsessi kogu ruumi vahetamine kettale) ja lehitöötlust (paging), kus vahetatakse väikseid mälalehti. Paging on laialdaselt kasutusel tänu sellele, et see võimaldab efektiivsemalt kasutada piiratud RAM‑i ja laadida mällu ainult neid andmeosi, mida hetkel vajatakse.
Miks virtuaalmälu kasutatakse
- Isoleeritus ja turvalisus: iga protsess töötab oma virtuaalruumis, mis takistab ühe protsessi juhuslikku või pahatahtlikku mälu ülekirjutamist teise protsessi mällu.
- Lihtsam programmeerimine: arendaja ei pea muretsema konkreetsest füüsilisest asukohast — programmile tundub olevat suur ja pidev aadressiruum.
- Ressursside efektiivne kasutus: süsteem saab anda protsessidele rohkem virtuaalmälu, kui füüsilist RAMi tegelikult on, paigutades vähemkasutatud andmed kettale.
- Mälu jagamine: samad loetud andmeplokid (nt teegid, mälestatud failid) saab map’ida mitme protsessi virtuaalruumi korraga, vähendades RAM‑i kulu.
Põhjused, miks virtuaalmälu ei pruugi sobida kõikjale
Mõned süsteemid, näiteks manussüsteemid (embeded/real‑time süsteemid), ei kasuta või piiravad virtuaalmälu kasutust, sest neis on vaja kivekindlat ja ennustatavat reageerimisaega. Lehevea korral peab süsteem laadima andmed kettalt, mis võib võtta millisekunditest kuni kümnete milliseconditeni — võrreldes mälulugemise nanosekunditega — ning see ebakindlus ei ole reaalajarakenduste jaoks aktsepteeritav.
Probleemid ja piirangud
- Jõudlus: diskile kirjutamise ja kettalt lugemise ajaline kulu võib põhjustada märgatava aeglustuse. Kui süsteem kasutab aktiivselt swap’i, võib tekkida „thrashing” — olukord, kus suure osa ajast võtab lehtede vahetamine kettale ja sealt tagasi, ning tegelik töö edeneb väga aeglaselt.
- Ressursside planeerimine: ülekoormatud süsteemis võib virtuaalmälu spekuleerimine (overcommit) viia ootamatute mälupuudusteni ja protsesside tapmiseni, kui OS otsustab vabastada mälu.
- Rakenduse käitumine: mõnede real‑time ja sisseehitatud rakenduste jaoks on ebapüsiv latentsus sobimatu.
Täiendavad tehnoloogiad ja optimeerimine
- Suured lehed (huge pages): vähendavad lehe tabeli ja TLB‑i koormust ning võivad parandada jõudlust suurte mälukoguste korral.
- Copy‑on‑write: võimaldab protsesside vahel odavalt mälukasutuse jagamist seni, kuni andmeid ei muudeta — muutmisel tehakse koopia.
- Mälu‑kaartimine (memory‑mapped files): võimaldab failide sisu käsitleda nagu mälupiirkondi, mis lihtsustab failipõhist I/O‑d ja koostööd operatsioonisüsteemiga.
- Süsteemi häälestamine: nt swap‑käitumise, lehe suuruse ja vahemälude parametrite muutmine võib mõjutada jõudlust vastavalt kasutusjuhtumile.
Kokkuvõte
Virtuaalmälu võimaldab igal protsessil turvalise ja suure virtuaalruumi, lihtsustab programmeerimist ja lubab süsteemil kasutada piiratud füüsilist mälu efektiivsemalt, kuid see tuleb hinnaga: võimalikud lehevead ja kettale kirjutamised võivad tekitada ettearvamatut latentsust ja jõudluse probleeme. Seetõttu valitakse virtuaalmälu kasutus ja selle häälestus vastavalt konkreetse süsteemi vajadustele — töölauakeskkonnas, serverites ja mobiilseadmetes on see peaaegu universaalne, reaalajalisel riistvaral ja mõnel manussüsteemid tüübil aga sageli piiratud või välja lülitatud.

Programm arvab, et tal on suur hulk külgnevaid aadresse, kuid tegelikkuses on hetkel kasutatavad osad laiali põhimälus ja mitteaktiivsed osad on salvestatud kettadokumendis.
Küsimused ja vastused
K: Mis on virtuaalne mälu?
V: Virtuaalmälu on arvutimälu haldamise viis, mis võimaldab rakendustele juurdepääsu kindla suurusega mälublokile. See mälublokk võib pärineda erinevatest osadest, näiteks põhimälust või kettalt.
K: Kuidas töötab virtuaalne mälu?
V: Virtuaalmälu töötab, võimaldades protsessori aritmeetilise loogikaüksusel teha tõlkeid rakenduse ja süsteemi ressursside vahel. Kaasaegsed operatsioonisüsteemid teevad samuti osa sellest tööst. Kui rakendus üritab kasutada mälublokki, mis ei ole süsteemimälus, peatatakse see ja plokk laetakse süsteemimälusse.
K: Millised on mõned näited arvutitest, mis ei kasuta virtuaalset mälu?
V: Manussüsteemid on üks näide arvutitest, mis ei kasuta virtuaalset mälu, sest neil on vaja kiireid või alati samaks jäävaid reaktsiooniaegu. Virtuaalse mälu puhul on raske ennustada reageerimisaega, mistõttu seda ei kasutata manussüsteemides.
K: Mis on multiprotsessorlus?
V: Multiprotsessorlus on see, kui arvuti saab teha korraga rohkem kui ühte asja, käivitades korraga mitu rakendust, mis jagavad selle ressursse.
K: Mis juhtub, kui rakendus üritab kasutada mälublokki, mis ei ole süsteemimälus?
V: Kui rakendus üritab kasutada mälublokki, mis ei ole süsteemimälus, peatatakse see ja plokk laetakse süsteemimälusse.
K: Mis on lehtede sirvimine?
V: Paging viitab sellele, mis juhtub, kui süsteemimälu selles osas olnud mälu tuleb tagasi kettale kirjutada, kuna rakendus kasutab mõnda muud osa, mis ei olnud algselt sinna salvestatud.
Otsige