2.3.2 Virtuaalmälu haldus

Protsessidele jagatakse lineaarne loogiline aadressiruum kasutamiseks. Protsessori mäluhaldusriistvaraarvutab loogilised aadressid ümber füüsilisteks aadressideks. Kui jagada 4 GB mälu 4 kB lehekülgedeks saame kokku 1 miljon lehekülge. Protsessor kasutab kaheastmelist struktuuri nende miljoni lehekülje poole pöördumiseks. Seda võib ette kujutada kui 1024×1024 maatriksit. Esimene dimensioon on nimetatud lehekülje kataloog (Page Directory) ja teine lehekülje tabel (Page Table). Sellise struktuuriga on võimalik luua lehekülje kataloog, millel on 1024 kirjet ja iga kirje viitab ühele lehekülje tabelile. Iga lehekülje tabel sisaldab omakorda 1024 kirjet, millest iga kirje viitab 4 kB lehekülje füüsilisele mäluaadressile. Iga lehekülje kataloogi kirje ja lehekülje tabeli kirje on suur 4 baiti. Kokku on vaja seega 4×1024×1024 baiti ehk 4MB, et jagada 4 GB aadressiruum 4 kB lehekülgedeks. Mäluaadressid on 32 bitised ja sellest 20 bitti (10 bitti lehekülje kataloog + 10 bitti lehekülje tabel) on füüsiline mälu aadress, kus asub otsitav lehekülg ja viimased 12 bitti on indeks valitud lehekülje sees.
Windowsi keskkonnas on igal protsessil isiklik lehekülje kataloog ja lehekülje tabelid. Selleks eraldab OS 4MB protsessi kohta. Kui protsess luuakse siis sisaldab iga lehekülje kataloogi kirje lehekülje tabeli füüsilist aadressi. Lehekülje tabeli kirjed on kas kehtivad või kehtetud. Kehtivad kirjed sisaldavad 4 kB lehekülje füüsilist aadressi. Protsess ei tea midagi füüsilistest aadressidest ja pöördub ainult loogiliste aadresside poole. Detailid missugune loogiline aadress vastab millisele füüsilisele aadressile on hallatud Windowsi mäluhalduri ja protsessori poolt. Aadress, kus protsessi lehekülje kataloog füüsilises mälus paikneb on lehekülje kataloogi baasaadress (Page Directory Base Address). See aadress salvestatakse spetsiaalses protsessori registris CR3 (x86 protsessoril). Kontekstivahetusel laeb Windows uue väärtuse CR3 registrisse, et suunata käivitamine uue protsessi lehekülje kataloogi aadressile.). Selle tehnoloogia abil saab protsess kasutada enda isiklikku 4GB loogilist (või virtuaalset) aadressiruumi. Protsesside loogilised aadressiruumid on eraldatud ja ühe protsessi loogiline aadress ei saa viidata teise protsessi füüsilisele aadressile. Seda nimetatakse virtuaalseks aadressiruumiks, sest kuigi protsessil on 4GB virtuaalset aadressiruumi, saab ta kasutada ainult niipalju mälu kui talle on eraldatud. Totaalne mälu, mis korraga on eraldatud kõigile süsteemi protsessidele, ei saa ületada põhimälu + saalefaili (Pagefile) maht. Seda nimetatakse kinnitatud mälu piiriks (Commit limit). Kui protsess nõuab kasutuseks mälu juurde (Commit) siis kontrollib OS, kas vaba mälu on saadaval ja kui on, siis eraldabmälu protsessile. Sellega garanteerib OS, et protsessil on reaalselt kasutada eraldatud mälu, olgu see siis füüsilise mälu alas või massmäluseadmel. Kõigi protseside poolt kokku kasutusel olevat virtuaalset mälu nimetatakse jooksvaks kinnitatud mäluks (Current Commit Charge). Et arvutada optimaalne saalefailisuurus (Pagefile size) on vaja teada kui palju virtuaalset mälu protsessid arvutis reaalselt kasutavad. Selleks on vaja leida kinnitatud mälu tipptase (Peak Commit Charge). Üks võimalus selle tuvastamiseks on jälgida kinnitatud mälu tipptaset kõigi vajalike rakenduste samaaegsel töötamisel ja lahutada loetud väärtusest maha arvuti füüsiline mälu ning saadud jääk määrata saalefaili suuruseks. Tööriist, millega seda mõõta on näiteks Protsess Explorer: http://technet.microsoft.com/en-us/sysinternals/default.aspx
Joonis 2‑10. Virtuaalmälu adresseerimise põhimõte (Allikas: http://en.wikipedia.org/wiki/File:X86_Paging_4K.svg)
Windowsi keskkonnas (32-bit) ei saa protsess reaalselt enda kasutada 4GB aadressiruumi vaid Windowsi mäluhaldus jagab 4GB aadressiruumi kaheks, millest poolt saab kasutada protsess ja teine pool on reserveeritud OS enda tarbeks.
Joonis 2‑11. Virtuaalmälu jaotus protsessile Windows'i keskkonnas