Lehekülgede saalimine

**Lehekülgede saalimiseks** nimetatakse arvutite operatsioonisüsteemides mäluhalduse algoritme, mis jagavad arvuti mälu väikesteks osadeks ja eraldavad hiljem mälu lehekülgede kaupa.
 
## Eelised

Lehekülgede saalimisel on teiste mäluhalduse meetoditega võrreldes mitu eelist.

Põhiline eelis lihtsamate metoodite (näiteks 'semu' eraldusviis ja dünaamilise mälueralduse tehnikad) ees on madal mäluraiskamise määr, kuna programmile eraldatud mälupiirkond ei pea olema pidev ja teetõttu toimub väga vähe mälu sisemist fragmenteerumist.

Teine eelis on võimalus virtuaalmälu ajutiselt kettale kirjutada. Kuna programmid kasutavad harva kogu oma koodi ja andmeid samaaegselt, saab virtuaalmälu kasutamata leheküljed kettale salvestada ja vajadusel põhimälusse tagasi tõsta.

## Puudused

Lehekülgede saalimise peamine puudus on selle teostamiseks vajaliku koodi suhteline keerukus, seda eriti virtuaalmälu kasutamise puhul. Ülejäänud puudused on vähetähtsad, näiteks sõltuvus riistvaralisest mäluhalduse üksusest (MMU), mille puudumisel pole võimalik lehekülgede saalimist kasutada. MMU tugi puudub vanematel ja mõnedel väiksematel protsessoritel (näiteks on Inteli x86 perekonnas on vastav tugi alates protsessorist 80386).

## Tööpõhimõte

Lehekülgedega manipuleerimist teostatakse riistvaralises mäluhalduse üksuses (MMU). Füüsiline mälu jagatakse väikesteks nummerdatud plokkideks (tavaliselt suurusega 4 kB või vähem). Operatsioonisüsteem hoiab programmidele eraldatud lehekülgede tabelit mälus, vabade lehekülgede kohta võidakse samuti hoida vastavat tabelit mälus või skaneerida iga mälueralduse päringu korral mälu (kaasaegsed opsüsteemid teevad viimast). Kui programm nõuab mälu, siis eraldab operatsioonisüsteem leheküljed programmile ja lisab lehekülgede andmed vastavasse tabelisse, mälu vabastamise korral vastavad kirjed kustutatakse.

### Näide
Järgnev näide kasutab 4 kB suurusi lehekülgi.
Lehekülje numberProgrammFüüsiline aadress
0Programm A.01000:0000
1Programm A.11000:1000
2Programm A.21000:2000
3Programm B.01000:3000
4Programm B.11000:4000
5Programm D.01000:5000
6Programm D.11000:6000
7Programm B.21000:7000

**Skeem 1** - Võimalik lehekülgede eraldamise nimekiri.

Eraldamine võis toimuda sellises järjekorras:

#Programm A nõudis 3 lehekülge mälu;
#Programm C nõudis 2 lehekülge mälu;
#Programm D nõudis 2 lehekülge mälu;
#Programm C lõpetas tegevuse, jättes maha 2 tühja lehekülge;
#Programm B nõudis 3 lehekülge mälu ja sellele eraldatakse programmi C 2 tühja lehekülge, ning veel üks lehekülg.

Lehekülgede tabelid on kaardistatud järgmiselt (*programmi lehekülje nr. =>opsüsteemi lehekülje nr.*):
* Programmi A: (0=>0, 1=>1, 2=>2);
* Programm B: (0=>3,1=>4,2=>7);
* Programm D: (0=>5, 1=>6).
Kui programm A soovib mälu kasutada, siis tehakse päring vastava mäluaadressi jaoks instruktsiooniga "LAADI mälu aadressil 20FE". MMU jaoks on olukord kirjeldatud järgmiselt (20FE on kahendkoodis 0010000011111110):


```

```


Kuna leheküljed on 4 kB suurused (4 kB = 4096 baiti, seda väärtust on võimalik kahendkoodis esitada 12 bitiga), siis MMU käsitleb lehekülje 4 esimest bitti lehekülje numbrina ja järgmist 12 bitti lehekülje aadressina. Kui leheküljed oleks 2 kB suurused, siis MMU pruugiks mälu lehekülje leidmiseks ainult aadressi esimest viite bitti ja järgmist 11 bitti relatiivse aadressi tarvis. Seega lehekülje suuruse kahanemisel nende arv kasvab.

Mälupöörduse korral leiab MMU programmi lehekülgede tabeli abil opsüsteemi lehekülje numbri. Antud näites vastab programmi A teine lehekülg opsüsteemi teisele leheküljele. Seejärel leitakse vastavus opsüsteemi lehekülje ja füüsilise aadressi vahel. Opsüsteemi teine lehekülg vastab füüsilisele aadressile 1000:2000 ja kuna programm tahab suhtelist aadressi 00FE, siis tagastab MMU füüsilisel aadressil 1000:20FE oleva mälu.

## Lehekülgede saalimine ja virtuaalmälu

Kui lehekülgede saalimist kasutatakse koos virtuaalmäluga, peab operatsioonisüsteem lehekülgede kasutamise (kasutusel, vabad, mõnda aega kasutuseta) kohta arvestust pidama. Kui opsüsteemil või mõnel programmil läheb väljasaalitud lehekülge vaja, siis tõstetakse see lehekülg saalealalt mällu. Kui lehekülje jaoks pole mälus piisavalt ruumi, siis tõstetakse mingi lehekülg mälust saalealale ja vabastatakse vastav mälupiirkond (opsüsteemi algoritmi lehekülgede sisse- ja väljasaalimiseks kirjeldab lehekülgede asenduspoliitika). Sel moel on võimalik eraldada programmidele rohkem operatiivmälu, kui arvutil tegelikult on.

## Vaata ka

*Protsessori vahemälu