Mälukaitse

**Mälukaitse** aitab arvutis kontrollida mälu juurdepääsuõigusi. See keelab protsessidel ilma loata viidata teiste protsesside mälupiirkonnale ning  takistab kahjurprogrammidel, viirustel või muul kahjulikul koodil ühes programmis sekkuda mõne teise töötava programmi töösse. Mälukaitse võib endast kujutada ka näiteks mäluseadmele/mälupesale juurdepääsu piiramist, tõkestades kirjutamist, lugemist või mõlemat.

## Meetodid
### Võtmed

Tänapäeva arvutites on võtmed üks levinumaid viise mälu kaitsmiseks, kus arvutid peavad töötavate programmide vahel mälu korrastama ja jaotama. Kaitsevõtmed põhinevad kindlate koodide kasutamisel ning lubab jälgida mälurakkude massiivi ja töötavate programmide arvu vastavust. Võtmemeetod laseb kasutajal kehtestada kaitse lehele, ilma et see lehetabelis mingeid muudatusi teeks.

Leheküljelises virtuaalmälus on võimalik igale leheküljele suurema turvalisuse tagamiseks määrata võti, mida tuleb kasutada, et muuta lehe andmed kättesaadavaks. Võti võib anda loa andmete lugemiseks, kirjutamiseks või mõlemaks. Riistvara võimaldab genereerida kuni 32 kaitsevõtit, seega saab neid rakendada kuni 32-le mäluklassile, mis omakorda sisaldavad veel virtuaalmälu lehekülgi, mis jagavad omavahel sama võtit.

### Mälukaitse rõngaste abil

Arvutites olevad kindlad domeenid, mis on seotud arvuti mälu turvalisusega, on kaitserõngad. Need edendavad arvuti veataluvust ja tagavad turvalisuse. Need rõngad on paigutatud hierarhiliselt, alustades kõige privilegeeritumast ja lõpetades kõige vähem privilegeeritud kaitserõngaga. Operatsioonisüsteemis on igal segmendil kaitserõngas kirjutamiseks, lugemiseks ja erinevate toimingute läbiviimiseks. Kui kindlas protsessis kasutatakse suurema rõnga numbrit kui tema enda segmendis, tekitab tema segmendi rõngas tõrke.

### Võimepõhine adresseerimine
Ingl. keeles *capability-based addressing*, viitab meetodile, kus arvutis taastatakse pointerid võimeobjektide abil, mida saab luua ainult kaitstud käskudega ning mida saab käivitada ainult kernel või mõni muu spetsiifiline protsess, millel on vastav luba.

### Segmenteerimine

Mälu segmenteerimine jagab arvuti põhimälu segmentideks. Segmenteerimist kasutavas arvutisüsteemis on mälukoha viitel vastav väärtus, mis tuvastab mälu asukoha selles segmendis. Segmenteerimine loodi algselt selleks, et süsteemi tarkvara saaks üksteisest eraldada protsessid ja andmed, mida kasutatakse. Selle eesmärk oli edendada samaaegselt jooksvate protsesside efektiivsust.

Segmenteerimine on efektiivne ning aitab kaasa arvuti sujuvamale ülesannete täitmisele, sest nii on protsessoril võimalik kindlat infot palju kiiremalt üles leida, kuna andmed on väiksematesse blokkidesse jaotatud.

### Simuleeritud segmenteerimine

Simuleeritud segmenteerimine kasutab monitoorimisprogrammi, et tõlgendada arvuti riistvara masinkoodi juhiseid. Selline simulaator on tõhus mälukaitseks, kuna ta segmenteerib mälu skeemi järgi ning valideerib iga käsu sihtaadressi reaalajas, enne kui käsk teostatakse.

### Märgistamine

Arvuti programmides märgistatakse ja jälgitakse kindlaid andmeid, et tagada protsesside efektiivne ja sujuv töö. See tagab nendes programmides ja muudes protsessides keelatud juurdepääsutaotlused. Selles meetodis märgistatakse programmides kahte sorti andmeid - andmeruumis olev mälu ja samuti erinevad pointerid.

### Leheküljeline virtuaalmälu

Peaaegu kõik variatsioonid praegusest virtuaalmälust jagavad mälu ruumi lehekülgedeks, virtuaalmälu aadresside blokkideks. Tähtis roll on seal lehetabelil, mis annab virtuaalmälu lehtedele kindlad aadressid, mis on vastavuses nende asukohaga mälus või kettal. *Page fault handler* tegeleb olukordadega, kui otsitakse mingit kindlat virtuaalmälu lehte, kuid seda ei ole mälust võimalik kätte saada või leida. *Page fault handler* otsib selle lehe asukoha kettal üles, toob ta seejärel füüsilisse mällu ning uuendab lehetabelit vajadusele vastavalt.

Leheküljeline virtuaalmälu on kasulik arvutile, kuna ta kasutab ka kettal olevat mälu, suurendades sellega füüsilist vaba mälu. See kaitseb ka rakenduste mäluruumi, sest nad on lehekülgedel üksteisest isoleeritud ning igasugune loata ligipääs ja andmete muutmine pole võimaldatud. Leheküljeline virtuaalmälu edendab ka arvuti üldist efektiivsust ja sujuvat tööd, sest vastavalt käskude saatmisele laetakse vaid need lehed välja, mida on otsitud ning neid saab eraldi vastavalt vajadusele ka uuendada või välja vahetada.

## Ajalugu
### 1950.–1960. aastad
Esimese põlvkonna süsteemidel korralikku mälukaitset veel polnud. 1950.–1960. aastatel polnud arvutitel selliseid operatsioonisüsteeme nagu tänapäeval, nende süsteemide vahel ei olnud võimalik ressursse jagada. Neid kasutas korraga ainult üks programmeerija, kellel oli ligipääs kogu süsteemile ja tema ressurssidele. Sel ajal oli programmeerijale ainus kaitseprobleem püüda alglaadimistarkvara mitte hävitada. Kahjuks võis seda üsna tihti juhtuda programmide silumise ajal või isegi arvuti pika regulaarse kasutamise tõttu. Selle lahendamiseks pidi programmeerija lihtsalt arvutisse uuesti bootstrapi laadima. Seega polnud tol ajal alglaadimistarkvaras või arvuti riistvaras ühtegi kaitsefunktsiooni.

### 1960. – 1960. aastate keskpaik
Teine generatsioon algas vahetult enne 1960. aastat ning kestis umbes 1964. aastani, mil võeti kasutusele IBM System/360. See lühike ajavahemik oli mitmes mõttes üleminekuperiood.

Selle põlvkonna arvutite ehitus oli juba palju diskreetsem, komponentide hulka kuulusid transistorid ja takistid. Arvutid olid väiksemad, kiiremad, odavamad ja töökindlamad kui nende eelkäijad. Selle põlvkonna esindajad olid IBM 7000 seerias - näiteks 7090 (teaduslik) ja 7070 (kommerts). Põhimälu oli ehituselt sarnane eelmise põlvkonna omaga, kuid tema maht oli kahekordne ning tema seotud protsessid palju kiiremad.

Arvuti pikenduseks loodi ka selline asi nagu monitor (arvutikuvar), mis kuvab kogu vajalikku infot. Mõned tähelepanuväärsemad iseärasused monitoride juures olid sisend-väljund (I/O) seadmed, mälukatted ning mõned laialdasemalt kasutatud teegid.

Teise põlvkonna süsteeme sai endiselt kasutada üks programmeerija korraga. Põhimälus sai korraga olla maksimaalselt üks kasutajaprogramm ning seda kasutati maksimumini. Selle põlvkonna riistvara kaitsefunktsioon oli põhimälust väikse osa (kus asus monitor) eraldamine kõigest muust, et sellele alati ligipääsu poleks. Olenevalt monitori asukohast mälus, kui protsessor tõmbas juhiseid asukohalt, mis oli suurem monitori omast, tähendab see, et monitori tarkvara käivitatakse ning kõikidele ressurssidele on olemas kättesaadavus. Kui aga protsessor tõmbas juhise asukohalt, mis on väiksem monitori asukohast, sai ligipääsu ainult piiratud ressurssidele.
Mõned süsteemid lubasid sisend-väljund käske ainult monitoridel teha, et see saaks teegiprogramme rünnakute eest kaitsta.

### Pärast 1960. aastaid
Kolmandas põlvkonnas võeti kasutusele täiesti iseseisvalt töötavad sisend-väljund protsessorid, mis töötasid paralleelselt keskprotsessoriga. Nõudlus arvutite järele kasvas kiirelt, seega olid arvutid pidevas arenemises, nende tehnoloogia paranes ning nad muutusid hinna poolest samuti taskukohasemaks.

Selles põlvkonnas võeti kasutusele multiprogrammeerimine, see tähendab, et süsteemis võis korraga olla mitu kasutajat. Peamine kaitseprobleem seisnes selles, et kuidagi pidi tagama, et ühe kasutaja protsessid ei sekkuks teise kasutaja protsessidesse ja vastupidi. Samuti taheti kontrollida kindlate programmide juurdepääsu teatud keskprotsessori käskudele ning selle sisend-väljund seadmetele.

Kõige märkimisväärsem sellel ajavahemikul oli kahe olekuga keskprotsessori mehhanism, mis tähendas seda, et protsessor töötas ühes või teises olekus - privilegeeritud või privilegeerimata. Kaks protsessori olekut loovad kaks domeeni, üks neist kliendi kasutamiseks. Kasutajaprogrammid käivituvad kliendi domeenis ning protsessor on privilegeerimata režiimis, seega pole kliendil ligipääsu nendele protsessori käskudele, mis on privilegeeritud.

### Praegune generatsioon
Tänapäevased süsteemid on juba palju arenenumad kui varasemad. Need on interaktiivsed ning lubavad tohutult suurel arvul kasutajatel ressurssidele ligipääsu. Ka turvameetodid mälukaitseks on palju keerukamad ja tõhusamad. Selle asemel, et arvutisse sisestada augustatud kaarte, mis ükshaaval arvutile käske annavad, annab kasutaja arvutile järjest käske otse terminali kaudu. Väga palju mälukaitsest läheb virtuaalmälu tegevuse alla või on asjad kättesaadavad kasutajale sisselogimise teel, et vastasel juhul kindla info kättesaadavust kaitsta ja piirata.

## Viited