Upravnik virtualnega pomnilnika


Fizični ali resnični pomnilnik računalnika je organiziran kot zaporedje bytov, ki so oštevilčeni  od 0 do števila, ki pove zgornjo mejo pomnilnika (minus 1).
 
Logični pomnilnik (tudi virtualni pomnilnik) je pogled programa na pomnilnik. Naslovi virtualnega pomnilnika so oštevilčeni od 0 do zgornje meje naslovljivega prostora.

  Virtualni naslovni prostor je unikaten naslovni prostor, na voljo posameznemu procesu.

 Normalno imajo procesi NT 2GB privatnega naslovnega prostora, operacijski sistem pa preostalih 2GB.

V nekaterih primerih imamo vključeno opcijo, ki omogoča velikost 3GB uporabniškega naslovnega prostora na račun sistemskega
 
 
 
 

 


 
 
Za primerjavo si oglejmo, kako je organizirana uporaba virtualnega naslovnega prostora pri Windows 98 in Windows ME.

Tudi v tem primeru imamo 4GB virtualnega naslovnega prostora, od tega 2GB za vsak proces. Preostalih 2GB je razdeljenih med sistem (1GB), in souporabne sekcije (shared memory sections, 1GB).

Značilnost 1GB souporabnega prostora je, da lako vanj piše katerikoli proces (win32) in to v uporabniškem režimu.

Pri Windows 2000 so souporabne pomnilniške sekcije znotraj privatnega naslova procesa,kar je bolj varno.


 
Slika prikazuje podrobnejšo razdelitev sistemskega naslovnega prostora (v klasičnem primeru, ko imamo za to 2GB prostora)

Procesne tabele strani in direktorij strani opisujejo preslikavo virtualnih naslovov.

Množici virtualnih strani, ki je rezidenčna v fizičnem pomnilniku, pravimo delovna množica (working set). Pri NT poznamo dve vrsti delovnih množic: sistemsko delovno množico in procesno delovno množico.

 


 
Resnični pomnilnik je običajno precej manjši od virtualnega. Zato mora sistem za upravljanje z virtualnim pomnilnikom izvajati predvsem dve nalogi:

Preslikavati podmnožice virtualnih naslovov na realne pomnilniške lokacije.
 

Prepisovati vsebino dela realnega pomnilnika na disk, ko pride sistem do stanja, da je realnega pomnilnika manj, kot bi ga potreboval. Kasneje lahko tako shranjen del pomnilnika spet prepiše v realni pomnilnik (memory swapping).


 
Da bi bilo prepisovanja na disk in nazaj čimmanj, je virtualni naslovni prostor razdeljen v bloke enake dolžine, imenovane strani.

 Podobno je fizični pomnilnik razdeljen na okvirje strani (page frames). Strani virtualnega pomnilnika, ki se nahajajo v fizičnem pomnilniku in so takoj dostopne, so veljavne strani. Strani, ki so shranjene na disku ali niso takoj dostopne, so neveljavne strani. 

Če neka nit dostopa do neveljavne strani, pride do izpada strani (page fault). V tem primeru naloži sistem v pomnilnik stran, ki je povzročila napako, in še nekaj strani v njeni okolici.

Ko  je zapolnjen že ves fizični pomnilnik, pride do zamenjave strani po principu LRU (Least Recently Used) oziroma FIFO (First in-First out). Prva strategija je uporabljena na enoprocesorskih, druga pa na večprocesorskih sistemih. 

Uporabniške aplikacije uporabljajo 32-bitne virtualne naslove. Vsakemu virtualnemu naslovu ustreza sistemska struktura PTE (Page Table Entry), ki vsebuje fizično adreso, dodeljeno temu virtualnemu naslovu.


 
Tabele strani torej vsebujejo PTE. Te imajo dve polji: Takoimenovani PFN (Page Frame Number), ki pove  stran, kjer se nahajajo podatki, ter vrsto zastavic, ki opisujejo status in zaščito strani.

Izgled strukture PTE pri implementaciji Windows NT na Intelovi arhitekturi.


 
Elementi PFN (Page Frame Numbers) so sicer fiksnih dolžin, vendar je njihovo stanje odvisno od stanja strani. Glede na to stanje imajo posamezna polja v PFN različen pomen.

 
Vsak proces ima en direktorij strani (Page directory), ki ga sestavljajo elementi PDE (Page Directory Entries) 

Posamezni PDE kaže na neko tabelo strani danega procesa. Takih tabel je več, saj se tvorijo po potrebi med izvajanjem procesa.

Imamo tabele strani, ki opisujejo sistemski naslovni prostor, in tabele strani, ki opisujejo privatni naslovni prostor procesa.


 
Primitivi, ki jih uporablja upravnik navideznega pomnilnika, so sekcije  (section objects).  Take sekcije uporablja en proces, lahko pa so v souporabi več procesov. 

Tako  Windows NT omogoča koncept souporabljenega pomnilnika (shared memory). Po tem konceptu lahko določeno stran, ki je enaka v  virtualnih naslovnih prostorih dveh ali več procesov, le-ti vidijo in souporabljajo.

Windows NT zagotavlja mehanizem zaščite, ki preprečuje, da ne bi en proces nehote pokvariln vsebine naslovnega prostora drugega.

V primeru souporabnih pomnilniških sekcij zagotavlja to mehanizem ACL (Access Control List), ki dovoljuje poseg v souporaben pomnilnik le pooblaščenim procesom.
 
 
 
 
 
 

 


 
 
Dinamika seznamov strani.

Okvirji strani prehajajo med seznami strani na več načinov:

Upravnik pomnilnika lahko zahteva (zaradi varnosti). izpraznjeno stran (zero page), lahko pa mu zadošča že prosta (še ne zbrisana) stran.

Strani, ki so sproščane s strani procesov, se vračajo v seznam "standby", če niso bile spremenjene, sicer pa končajo najprej v seznamu spremenjenih strani, dokler jih sistem (modified page writer) ne zapiše na disk. Ta zapisovalec se zbudi, če postane seznam spremenjenih strani predolg ali pa če postaneta seznama prostih oziroma zbrisanih strani prekratka.

kakŠna je razlika med soft in hard page fault