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 nt. mäluseadmele/mälupesale juurdepääsu piiramist, tõkestades kirjutamist, lugemist või mõlemat.[1]

Meetodid muuda

Võtmed muuda

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.[2]

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 endas veel virtuaalmälu lehekülgi, mis jagavad omavahel sama võtit.[3]

Mälukaitse rõngaste abil muuda

 
Kaitserõngad


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 priviligeeritumast ja lõpetades kõige vähem priviligeeritud 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.[4]

Võimepõhine adresseerimine muuda

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.[5]

Segmenteerimine muuda

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.[6]

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 muuda

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.[7]

Märgistamine muuda

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.[8]

Leheküljeline virtuaalmälu muuda

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.[9]

Ajalugu muuda

1950.-1960. aastad muuda

Esimese põlvkonna süsteemidel korralikku mälukaitset veel polnud. 1950.-60. 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.[10]

1960 kuni 1960-ndate keskpaik muuda

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.[11]

1960-ndatest edasi muuda

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 - priviligeeritud või priviligeerimata. Kaks protsessori olekut loovad kaks domeeni, üks neist kliendi kasutamiseks. Kasutajaprogrammid käivituvad kliendi domeenis ning protsessor on priviligeerimata režiimis, seega pole kliendil ligipääsu nendele protsessori käskudele, mis on priviligeeritud.[12]

Praegune generatsioon muuda

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.[13]

Viited muuda

  1. published, Varmo Vene, Meelis Roos, Mäluhaldus (PDF) (inglise), vaadatud 29. aprillil 2024
  2. "Memory Protection in Operating Systems" (Ameerika inglise). Vaadatud 29. aprillil 2024.
  3. "Kernel Storage-Protection Keys". IBM (Ameerika inglise). Vaadatud 29. aprillil 2024.
  4. "Memory Protection in Operating Systems" (Ameerika inglise). Vaadatud 29. aprillil 2024.
  5. "Capability-based addressing", Wikipedia (inglise), 26. detsember 2023, vaadatud 1. mail 2024
  6. "Memory Segmentation in 8086 Microprocessor" (Ameerika inglise). Vaadatud 28. aprillil 2024.
  7. "Memory Protection in Operating Systems" (Ameerika inglise). Vaadatud 29. aprillil 2024.
  8. "Memory Protection in Operating Systems" (Ameerika inglise). Vaadatud 29. aprillil 2024.
  9. "How do you manage limited physical memory using virtual memory and paging?" (Ameerika inglise). Vaadatud 1. mail 2024.
  10. Tangney, John D. (15. juuli 1980), History of Protection in Computer Systems (PDF) (Ameerika inglise), lk 9-11, vaadatud 29. aprillil 2024
  11. Tangney, John D. (15. juuli 1980), History of Protection in Computer Systems (PDF) (Ameerika inglise), lk 12-18, vaadatud 29. aprillil 2024
  12. Tangney, John D. (15. juuli 1980), History of Protection in Computer Systems (PDF) (Ameerika inglise), lk 19-36, vaadatud 29. aprillil 2024
  13. Tangney, John D. (15. juuli 1980), History of Protection in Computer Systems (PDF) (Ameerika inglise), lk 37-41, vaadatud 29. aprillil 2024