12.07.2015 Views

Mäluhaldus

Mäluhaldus

Mäluhaldus

SHOW MORE
SHOW LESS
  • No tags were found...

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

Mäluhaldus – Mälu ja aadressidProgrammi võib vaadelda binaarse koodjadana,mis tavaliselt asub kettalKäivitamiseks tuleb programm mällu laadidaMällulaadimist ootavate programmide jada nimetataksesisendjärjekorraks (input queue)Kui programm lõpetab, vabastatakse tema käes olnudmälupiirkonnadOperatsioonisüsteemid 235


Mäluhaldus – Mälu ja aadressidSuurem osa süsteeme lubavad programme laadida enamvähemsuvalisse mälupiirkondaOsa mälupiirkondadest on OS käes (näiteks alumisedaadressid alates 000000-st) ja sinna kasutaja-programmelaadida ei tohiProgrammi loomisel tuleb moodustada side tema eri osadevahel (funktsioonid, moodulid jne)Kuna programmile antav mälupiirkond ei pruugi kattudavarem valmis genereeritud aadressidega, siis tuleb neidkuidagi modifitseerida ja siduda (binding)Operatsioonisüsteemid 236


Mäluhaldus – Mälu ja aadressidLoogiline ja füüsiline aadressTavaliselt viidatakse (protsessi seisukohast) protsessoripoolt genereeritud aadressile kui loogilisele aadressile(logical address)Mälu poolt nähtav e. mälu aadressiregistrisse (memoryaddress register) loetud väärtus on aga füüsiline (physicaladdress)Esimese kahe sidumise - kompileerimise ja laadimise ajalteostatava - puhul on loogiline ja füüsiline aadress samad;töötamise ajal aga võivad need erinedaViimasel juhul nimetatakse loogilist aadressi tihtivirtuaalseks (virtual address)Operatsioonisüsteemid 239


Mäluhaldus – Mälu ja aadressidLoogiline ja füüsiline aadressKõiki genereeritud loogilisi aadresse kokku nimetatakse loogiliseaadressi ruumiks (locical address space)Füüsiliste aadresside kogumikku vastavalt füüsilise aadressi ruumiks(physical address space)Jooksva mäluaadresside sidumise eest vastutab mäluhaldur (memorymanagementunit = MMU)CPULoogilineAadress346Relocationregister14000+MMUFüüsilineAadress14346mäluOperatsioonisüsteemid 240


Mäluhaldus – Mälu ja aadressidLoogiline ja füüsiline aadressProgramm ei näe kunagi tegelikku füüsilistaadressiPõhimõtteliselt võib sama programmi mitueksemplari joosta erinevate loogiliste aadressidepeal, samas kui nende füüsilised aadressid võivadkattudaOperatsioonisüsteemid 241


Mäluhaldus – Dünaamiline laadimineSeni eeldasime et kogu programm loetakse mällu ühe korraga– piiravaks teguriks on sel juhul vaid mälu mahtMäluruumi parema kasutuse eesmärgil võime rakendadadünaamilist laadimist (dynamic loading) – vajaminevprogrammiosa laetakse mällu vaid siis, kui seda tõesti vajalähebMõlemal juhul loetakse peaprogramm mällu käivitamisel;kui dünaamilise laadimise puhul kutsutakse välja käsk, midaseni veel mälus pole, siis laetakse see sinna automaatseltOperatsioonisüsteemid 242


Mäluhaldus – Dünaamiline laadimineEelis – harva kasutatav programmi osa ei ole meilkogu aeg jalus ja isegi kui programmi enda maht onsuur, ei pruugi korraga mälus olev osa seda ollaMõned OS-id lubavad vaid staatilist linkimist (staticlinking), teised ka dünaamilist (dynamic linking)Staatiline – linker ühendab kõik kasutatud teegid ühtekäivitatavasse moodulisseDünaamiline – eri teegid luuakse/jäetakse erilaademoodulitesseOperatsioonisüsteemid 243


Mäluhaldus – Dünaamiline linkimineDünaamiline linkiminetoimub linkimise, mitte laadimise ajalkasutatakse peamiselt süsteemsete teekide puhul(programmeerimiskeele standardfunktsioonid jne)programmile lisatakse pisike koodijupats (stub), mismäärab ära kuidas vajaminevaid funktsioone mälust leidavõi neid sinna laadidaOperatsioonisüsteemid 244


Mäluhaldus – Dünaamiline linkimineDünaamiline linkimine“koosneb” nn. teekidest (library)teegi võib iga kell asendada uuega (uus versioon või parandatud vead)ilma, et ühtegi teist seda teeki kasutavat programmi muuta tuleks(Ilma dünaamilise linkimiseta peaks sel juhul kõik programmid uuestikokku linkima)Jagatud teekidel (shared library) on tihti kaasas verisooniinfo millepõhjal igale programmile sobiv valitakseNB! Eri versioonide puhul tuleb olla võimalike funktsionaaluse ja/võiliidese erinevuste suhtes väga hoolikas!!!Erinevalt dünaamilisest laadimisest, vajab linkimine OS abi – peabteadma, kas ühele protsessi võib anda ligipääsu teise protsessi pooltkasutatavale teegileOperatsioonisüsteemid 245


Mäluhaldus – OverlayOverlay (ülekatte) idee seisneb selles, et mälus hoitakse vaid sedakoodi osa, mida tõesti hetkel vaja läheb - kui vajatakse mingit uut teekimida veel mälus polnud, siis visatakse vana välja ning selle asemeleloetakse uus (assembleri näide:)Overlay’d hoitakse kettal absoluutsete mälupiltidenaKõik koos = 200 KB70KSamm 1(loob sümbolitetabeli)SümbolitetabelÜhisedfunktsioonidOverlay driver20K30K10KOverlay puhul:120 ja 130 KB.NB! Juurde tulika overlay driver80KSamm 2(genereerib masinkeelsekoodi)Operatsioonisüsteemid 246


Mäluhaldus – OverlayOverlay puhul peab programmeerijalooma korrektse overlay struktuuri (otsustama, millisedkomplektid on vahetatavad ja millised on alati vajalikud)See tähendab, etmeil peab olema programmi struktuurist ja andmetesttäielik ülevaadeoverlay’de loomine on väga töömahukas ja keerulinePraegusel ajal kasutusel mikroarvutites ja teistessüsteemides, kus on piiratud mälu või OS võimedOperatsioonisüsteemid 247


Mäluhaldus - SwappingVastavalt protsesside planeerimise vajadustele võib osateekidest mälust välja tõsta (swapping) ja hiljem jälle tagasituuaSellist mudelit võib vaadelda näiteks eri prioriteetidegaprotsesside juures: kui tuleb kõrgema prioriteediga protsesssiis tõstetakse madalama prioriteediga välja, kuni tähtsamlõpetab ning siis jälle tagasi (roll out, roll in)Kui tegu on kompileerimise või laadimise faasis sidumisega,siis tuleb swap’ida kettale (vms välismälu seadmele);kui tegu töötamise faasis sidumisega, siis võib swappida kateisele mäluaadressileOperatsioonisüsteemid 248


Mäluhaldus - SwappingKettale salvestamineaeglaneprotsessi ajakvant peab olema suurem kui potensiaalsele swappimiselekuluv aegpõhiline swappimise aeg kulub traspordileSelleks, et süsteem teaks kui palju mälu ühele või teiseleprotsessile vaja on, tuleb OS-i igast muutusest informeerida(request memory, release memory)Kui me tahame tervet protsessi swappima hakata, peameolema kindlad, et ta on jõude (idle)olekus(ei oota sisendi/väljundi vms taga)Operatsioonisüsteemid 249


Mäluhaldus – Pidev mälu allokeerimineTavaliselt on mälu jagatud kahte ossaOS piirkondkasutaja-programmide piirkondOS-i võib panna mälu ette- või tahaotsa ja peamiseksotsustajaks on katkestusvektorite asukoht (tavaliseltesimestel mäluaadressidel)Me peame garanteerima OS-i ja muude programmidevahelise ”viisaka käitumise”Operatsioonisüsteemid 250


Mäluhaldus – Pidev mälu allokeeriminepiir-registerÜmbersuunamiseregisterCPULoogilineaadress


Mäluhaldus – Pidev mälu allokeerimineKõige lihtsamaks mälujaotuse meetodiks onkogu mälu jagamine fikseeritud suurusegaosadeks (partitions) – igas osas on 1 protsessOsade arv määrab multiprogrammilisuse taseme. Sellinelähenemine oli kasutuse IBM OS/360 masinates (kutsutakseka MFT)Teine edasiarendus (tuntud nime MVT all)sisaldab vabade mäluosade tabelitKui protsess mällu loetakse, otsitakse talle sobiva suurusegaauk (hole) mälusOperatsioonisüsteemid 252


Mäluhaldus – Pidev mälu allokeerimineIgal ajahetkel on teada vabade aukude arvAugud ei pruugi olla järjestProtsessidele mälu jagamisel võib mõni suurematevajadustega ootama jääma ning planeerija valib järgmiseMälu vabanemisel liidetakse kaks kõrvuti olevat auku üheksSiin tuleb mängu üldine dünaamilise mälujaotuse (dynamicstorage-allocation) probleem – kuidas rahuldada n-suurusegamälu vajadust paljude vabade lõikude nimekirja aluselOperatsioonisüsteemid 253


Mäluhaldus – Pidev mälu allokeerimineFirst-fitValime esimese piisava suurusega augu. Niipea kui leitud,lõpetame otsimiseBest-fitOtsime väikseima piisava suurusega augu. Peame läbi otsimakogu nimekirja (va. Juhul kui ta on sorteeritud)Worst-fitOtsime suurima sobiva augu. Ka sel puhul peame kogunimekirja läbi otsima aga erinevalt esimesest võib jättasuuremaid jääkaukeOperatsioonisüsteemid 254


Mäluhaldus – Pidev mälu allokeerimineSimulatsioonide põhjal on kindlaks tehtud, et esimesed kakson efekiivsemad nii kiiruse kui ruumi kasutuse suhtesNeist kahest on esimene üldiselt kiiremKõik kolm kannatavad välise fragmenteerumise (externalfragmentation) all – vaba mälu jaguneb ajapikku paljudekspisikesteks juppideksKõige hullemal juhul võib iga teine blokk olla ülejääk. First-fit puhul on väljatulnud, et ~ ⅓ mälust on fragmenteerunud (iga n bloki puhul lisangub 0,5nkasutamiskõlbmatut – 50% reegel)Operatsioonisüsteemid 255


Mäluhaldus – Pidev mälu allokeerimineKui meil on auk suurusega 18’464 ja protsess soovibsaada 18’462, siis jääb meil järele 2 ühikutTihti ületab selliste jääkide üle arve pidamine nendestjääkidest tekkiva probleemsuse ning seetõttujagatakse mälu fikseeritud suurusega blokkideksSee tekitab sisemise fragmenteerumise (internalfragmentation) – bloki sees olevaid jääke ei kasutataOperatsioonisüsteemid 256


Mäluhaldus – Pidev mälu allokeerimineÜks välisest fragmenteerumisest üle saamise meetod onkokkusurumine (compaction) – nihutame kõik mälublokidselliselt, et jäägid moodustaksid ühe tervikuKahjuks pole see alati võimalik – näiteks kui kasutame kahtesimest dünaamilise laadimise mudelitTeiseks lahenduseks on võimalus jagada allokeeritud mälutükkideks (ei pea olema üks tervik) – selle saavutamiseks onkaks meetodit:LeheküljedSegmendidOperatsioonisüsteemid 257


Mäluhaldus – LeheküljedPõhiline meetodFüüsiline mälu jagatakse fikseeritud suurusega blokkideks – raamideks(frames)Loogiline mälu jagatakse ka osadeks (sama suurusega) –lehekülgedeks (pages)Protsessi käivitamisel loetakse temale antud leheküljed vabadesseraamidesseIga aadress on protsessoris jagatud kaheksLehekülje number (p) – indeks lehekülje tabelisNihe lehekülje sees (page offset) (d)Operatsioonisüsteemid 258


Mäluhaldus – LeheküljedCPUloogilineaadressppdfüüsilineaadressfdFüüsilinemäluflehekülje tabelTavaliselt on lehekülje suuruseks 2 astmed (512 KB – 16 MB) ning see onmääratud riistvara pooltOperatsioonisüsteemid 259


Mäluhaldus – LeheküljedNäide:raaminumberlk 1lk 2012143012lk 0lk 3373lk 2lk 4lehekülje tabel45lk 1loogiline aadress6Mälu maht on 32 baiti; lk suurus on 4 baiti (8 lehekülge)Loogilisele aadressile 0 vastab füüsiline (1 x 4) + 0 = 4Loogilisele aadressile 3 (lk 0, nihe 3) vastab (1 x 4) + 3 = 77lk 4füüsiline aadressOperatsioonisüsteemid 260


Mäluhaldus – LeheküljedLehekülgede puhul väline fragmenteerumine puudub;sisemine võib aga ikkagi esinedaKuna allokatsioonid toimuvad fikseeritud suuruste kaupa, siisvõib juhtuda, et meil on vaja protsessi mahutamiseks nlehekülge + veel 1 bait : seega peaaegu terve lehekülg lähebraiskuSiit võiks järeldada, et pisemad leheküljed on paremad.Kahjuks kaasneb sellega suurem tabelite maht ning vastavaltka töö nendegaOsad protsessorid ja süsteemid lubavad eri suurusegalehekülgi (näiteks Solaris toetab 4KB ja 8KB lehekülgi)Operatsioonisüsteemid 261


Mäluhaldus – LeheküljedKasutaja näeb mälu ühe tervikuna mis sisaldades vaid ühtprogrammi; füüsiliselt võib see olla aga tükkidena laiali jajagatud mitmete programmide vahelFüüsilise mälu aadressi leidmine on organiseeritud riistvaraningjuhitav OS poolt. Tavaprogramm vahele ei pääseSelleks, et OS suudaks paremini otsustada, on olemas karaamide tabel (frame table) – üks sissekanne iga raami kohtaOperatsioonisüsteemid 262


Mäluhaldus – LeheküljedTihti on lehekülgede tabelid realiseeritud riistvarasspetsialiseeritud registrite abil (mis peavad ühtlasi olema kaväga kiired)Kuna modernsed süsteemid lubavad väga suuri tabeleid(kuni miljoneid sissekandeid), siis selle riistvaras hoidminevõimatu. Selle asemel on 1 baasregister (page-table baseregister = PTBR), kus asetseb viit mäluaadressile, kustegelik tabel asub – selline moodus on aga aeglaneTeine lahendus on kasutada pisikest kiiret riistvaralist buhvrit(associative registers; translation look-aside buffers (TLBs)).Iga register koosneb võti-väärtus paarist (õpiku joonis 9.10).Tavaliselt on TLB-de arv 8 - 2048Operatsioonisüsteemid 263


Mäluhaldus – LeheküljedTLB PõhimõteTabelis on vaid mõni lehekülje ja raami numberKui otsitav on tabelis, saab vastuse kiirestiKui otsitavat veel pole, siis lisatakse ta sinna (kui ruumi on)Kui tabel oli täis, siis tuleb uue lisamiseks leida ”ohver”, milline uuegaasendatakseKahjuks peab iga protsessi vahetusega tühjendama (flush) ka kogutabeli, et mitte valele protsessile valesid aadresse andaTabeli efektiivsust mõõdetakse pihtasaamiste sagedusega (hit ratio)Operatsioonisüsteemid 264


Mäluhaldus – LeheküljedTLB PõhimõteOletame, et registrist sissekannet ei leitud (20 ns). Mepeame pöörduma mälu poole tabeli info järele (100 ns)ning siis pöörduma mälu poole tegeliku info järele (100 ns)= kokku 220 nsEfektiivne mälupöördus aeg (effective memory-accesstime) näitab kui kaua läheb meil aega andmetekättesaamiseks – arvestame tõenäosusi ühel ja teisel puhul:Kui hit-ratio = 80%, saame 0.8*120 + 0.2*220 = 140 nsKui hit-ratio = 98%, saame 0.98*120 + 0.02*220 = 122Operatsioonisüsteemid 265


Mäluhaldus – LeheküljedTLB kaitseIga raamiga on seostatud kaitse-bittTavaliselt hoitakse infot lehekülje tabelis ning see määrab,kas lehekülg on loetav/kirjutatav või üksnes loetavAsja võib teha veel täpsemaks – määrates ka käivitamise õiguseLisaks nimetatule on iga lk-ga seotud kehtivuse (valid-invalid)bitt. Kui invalid, siis ei kuulu lk antud protsessi allaTihti ei kasuta protsessid kogu nende kätte antud mälu ja lkregistreid kasutamata mälu alla panna oleks mõttetu. Sellevältimiseks on mitmel pool olemas lk-tabeli pikkuse register(page-table length register = PTLR)Operatsioonisüsteemid 266


Mäluhaldus – LeheküljedMitmetasemelised (multilevel) leheküljedSuurte mälumahtude juures oleks mõttekas mälu jagada pisemateksosadeks (joonised 9.12 ja 9.13)Üheks võimaluseks on 2-tasemeline lehekülgedeks jagamine –lehekülje tabel on ise ka lehekülgedeks jagatud64-bitiste süsteemide puhul on vaja enamat – vajame 3- võienamatasemelistEfektiivne mälupöörduse aeg on siin0.98 * 120 + 0.02 * 520 = 128 nsehk meil tuleb vaid 28%-line aeglustumineOperatsioonisüsteemid 267


Mäluhaldus – LeheküljedPööratud (inverted) leheküljedÜldjuhul on iga lehekülgede tabel seotud protsessiga (joonis 9.14)Pööratud tabel omab ühte sissekannet iga reaalse raami kohta, missisaldab infot virtuaalse aadress ja teda omava protsessi kohtaKuigi tabeli hoidmiseks vajaliku mälu maht väheneb, suureneb aeg(otsing toimub virtuaalse, tabel on aga füüsilise aadressi järgi)Operatsioonisüsteemid 268


Mäluhaldus – LeheküljedJagatud (shared) leheküljedÜheks lehekülgede eeliseks on koodi jagamisevõimalusOletame et meil töötab masinaga 40 inimest, igaühel on eestekstiredaktor (150 KB koodi ja 50 KB andmete all => 8000 KB). Kuikoodi osa toetab mitut samaaegset kasutajad, võime seda jagada.Andmed on aga igaühe jaoks omad – siit saame 2150 KBOperatsioonisüsteemid 269


Mäluhaldus – SegmendidKuidas kasutaja näeb mälu? Kas ta vaatleb seda kui lineaarsetaadresside jada?Ei, kasutaja vaatab mälu parema meelega kui ala kus hoitaksemingeid programmi osi – funktsioone, andmeid, teeke jne –teiste sõnadega segmenteLoogilise aadressruumi võib jagada segmentideks, igaühelneist on nimi ja pikkusAadress sisaldab segmendi nime või numbrit ja nihet sellesOperatsioonisüsteemid 270


Mäluhaldus – SegmendidSegmente võib luua iga programmi jaoks niipalju kui vajanäiteks Pascali puhul võib luua segmendidglobaalsetele muutujatele, protseduurideväljakutseks vajalikule pinule (stack), programmikoodile ja lokaalsetele muutujatele iga funktsioonijaoksFORTRANi puhul võib luua näiteks eraldisegmendid iga programmibloki jaoksOperatsioonisüsteemid 271


Mäluhaldus – SegmendidRiistvaraline segmentide toetusslimit baseCPUsdsegmendi tabel


Mäluhaldus – SegmendidKaitse ja jagamineIga segmendiga saab siduda semantiliselt tihedalt seotudkaitse – osa segmentides on kood ja teistes andmedKui näiteks paneme massiivi temale määratud segmenti,kontrollitakse automaatselt mälupiireSamuti on võimalik osasid segmente jagada mitmeteprotsesside vahel – olgu see siis kas andmed või koodOperatsioonisüsteemid 273


Mäluhaldus – SegmendidFragmenteerumineProtsesside planeerija peab suutma allokeerida mälukõikidele protsesside poolt tarbitavatele segmentideleSegmendid on muutuva pikkusega; leheküljed fikseeritudpikkusegaSegmentide puhul võib kasutada first-fit või best-fitalgoritme ning esineda võib välist fragmenteerumistOperatsioonisüsteemid 274


Mäluhaldus – Segmendid jaleheküljedNeid kahte meetodit võib ka koos kasutadaMotorola 68000 protsessorid kasutavad lamedatmälu mudelitInteli x86 ja Pentium põhinevad segmentidelMõlemad kasutavad lehekülgede ja segmentidesegamudelitOperatsioonisüsteemid 275


Mäluhaldus – Segmendid jaleheküljedi386 protsessori seletus:Üldised omadusedMaksimaalselt 16K segmenti protsessi kohtaIga segment maksimaalselt 4 GB suuruneLehekülje suurus on 4 KBPõhimõteLoogiline aadress on jagatud kaheks – esimeses kuni 8K privaatsetsegmenti; teises kuni 8K jagatud segmentiInfo esimese kohta hoitakse kohalikus deskriptorite tabelis (LocalDescriptor Table = LDT); teine globaalses (Global Descripton Table =GDT)Iga tabeli sissekanne on 8 baiti (info segmendi baasregistri ja pikkusekohta)Operatsioonisüsteemid 276


Mäluhaldus – Segmendid jaleheküljedi386 protsessori seletus:Põhimõte6 segmendi registrit – st korraga saab adresseerida kuni6 segmentiLisaks on 6 8-baidilist deskriptorite registritFüüsiline aadress on 32-bitineKõigepealt moodustatakse lineaarne aadress loogilisesaadressis sisalduva viite abil deskriptorite tabelile ja nihkegaLineaarne aadress koosneb 3 osast – kataloogist ja leheküljest(kokku annavad 2-tasemelise lehekülje) ning nihkestOperatsioonisüsteemid 277


KordamisküsimusedMis vahe on loogilisel ja füüsilisel aadressil?Mis vahe on sisemisel ja välisel fragmenteerumisel?Kirjelda first-fit, best-fit ja worst-fit meetodeidKui on mälu jaotused 100K, 500K, 200K, 300K ja 600K, siiskuidas need kolm meetodit paikutaks protsessid mälunõuetega212K, 417K, 112K ja 426K?Miks on lehekülgede suurus alati 2 aste?Miks lehekülgede puhul protsess ei saa näppida teiseleprotsessile kuuluvat mälu?Mis vahe on lehekülgedel ja segmentidel? Mille poolestsarnased?Operatsioonisüsteemid 278


Küsimused?=============== ??? ===============Operatsioonisüsteemid 279


VirtuaalmäluVirtuaalmälu lubab töötavatel protsessidel olla mälus vaidosaliselt – mingi osa on kuhugi välja tõstetudMiks võib osa olla välja tõstetud?Programmid võivad sisaldada erandlike situatsioone töötlevat koodi,mida on vaja väga harvaMassiivid, nimekirjad, tabelid jms sarnased luuakse teatava varuganing nad pole kuigi tihti ääreni täisOsa programmi funkstionaalusest pole kogu aeg kasutuselTänu virtuaalmälule saame kasutada programme mis nõuavadrohkem mälu kui reaalselt arvutis olemas onOperatsioonisüsteemid 280


VirtuaalmäluVirtuaalmälu eelised (kuna mälus vaid tähtsamad)Programmi kasutust ei piira enam füüsiliselt olemasolevamälu maht – programmil on oma virtuaalne aadressväliKuna iga programm võtab vähem ruumi, on meil võimalikrohkem programme samaaegselt tööle lastaVaja vähem S/V selleks et programme laadida / swappida– programmid jooksevad kiireminiVirtuaalmäluga süsteemidest on ülekatte (overlay)võimalus praktiliselt kadunud – ei oma enam mõtetOperatsioonisüsteemid 281


Virtuaalmälu - Demand pagingVirtuaalmälu realiseeritakse tihti nõudmisel baseeruvatelehekülgede abil (demand paging). Sel juhul ennustataksemilliseid lehekülgi protsess vajama hakkabLehekülgede asemel võivad olla ka segmendidKuna nüüd on tegemist lehekülgede, mitte tervete protsessidevahetusega, siis kasutatakse swapper’i asemel terminit pagerVirtuaalmälu kasutamine eeldab teatavat riistvaralist tuge.Võime ära kasutada valid-invalid bitte (valid = mälus; invalid= invalid või mälust väljas)Operatsioonisüsteemid 282


Virtuaalmälu - Demand pagingKui pöörduti lehekülje poole mis oli mälus, siis on kõik OKLehekülgi, mis on kogu protsessi eluea jooksul mälus,nimetatakse residentseteks (memory resident)Kui lehekülge polnud mälus, tekib lehekülje viga (page-faulttrap), mis püütakse OS-i poolt kinni ning lehekülge minnakseotsima virtuaalmälu hoidlast (näiteks failist kettal)Äärmusliku vormina on puhas nõudmisel põhinev (puredemand paging) meetod – ühtegi lehekülge ei laeta mällu kuniseda vaja poleOperatsioonisüsteemid 283


Virtuaalmälu – Demand pagingProgrammidel kipub olema viidete suhteline lokaalsus (locality ofreference), mille tõttu osutub demand paging efektiivseksRiistvaralised nõudmised on samad:Lehekülgede tabelSekundaarne mälu (swap space; backing store)Jõudlus – efektiivne mälupöördusaeg= (1 – p) * ma + p * page fault time,kus p = vea tõenäosus; ma = memory access timeTihti tulemuseks ma = 100 ns; kettalt info saamine 25 ms. Viga põhjustabaeglustumise ~250 kordaOperatsioonisüsteemid 284


Virtuaalmälu – Lehekülgede vahetusNii või teisiti saabub aeg, kus tuleb mälus olevaidlehekülgi uute mahutamiseks välja tõstma hakataLehekülgede vahetuse korral tuleb meil pöördudasekundaarse mälu poole 2 kordaKiirendamiseks võime lisada igale leheküljele uuebiti, mis näitab lk sisu muutumist mällu lugemiseajast (modify bit) – kui muutust pole, ei pea me sedalk-d kettale kirjutama – ta juba on sealOperatsioonisüsteemid 285


Virtuaalmälu – Lehekülgede vahetusMe peame demand paging’u puhul lahendama kaks ülesannet:Looma raami-allokatsiooni algoritmiLooma lehekülgede vahetuse algoritmiMillist vahetuse algoritmi kasutada? Üldiselt seda millel on madalam lkvigadesagedus (page-fault rate)141210lk vigade arv86421 2 3 4 5 6raamide arvOperatsioonisüsteemid 286


Virtuaalmälu – Lehekülgede vahetusFIFO (first-in first-out) lehekülgede vahetusIga leheküljega seotakse aeg millal ta esimest korda mällu loeti.Täpne aeg pole oluline, oluline on järjekordVälja visatakse kõige vanemSee meetod pole kõige efektiivsem – võib-olla oli tegemistinitsialiseerimise funktsioonidega; võib-olla aga tihedalt kasutatavatemuutujatega. Mõlemad võisid olla loodud üsna ammuKui me viskame välja tihedalt kasutatava variandi, tekkib üsna peatseltuus lehekülje-viga ning vana tuuakse tagasi mällu. Kõik muutubaeglasemaksOperatsioonisüsteemid 287


Virtuaalmälu – Lehekülgede vahetusFIFO (first-in first-out) lehekülgede vahetuslk vigade arv1412108642Bedlady’ anomaalia – mõndade vahetusalgoritmide puhulvõib vigade arv suureneda kui suureneb allokeeritudraamide arv1 2 3 4 5 6raamide arvOperatsioonisüsteemid 288


Virtuaalmälu – Lehekülgede vahetusOptimaalne vahetusVälja tuleb visata lehekülg, mida kõige pikema perioodivältel ei kasutataSelline variant nõuab tuleviku teadmistKuna üldjuhul me ennustada ei suuda, siis kasutatakse sedameetodit vaid võrdluste läbi viimiseks – näiteks võib ollakasulik teada, et meie uus algoritm pole küll optimaalne,kuid halvimal juhul 12.3 % ja parimal 4.7 % sellestkehvemOperatsioonisüsteemid 289


Virtuaalmälu – Lehekülgede vahetusLRU (Least Recently Used) meetodKui me ei suuda tulevikku ennustada, võime vaadelda lähiminevikkukui selle approksimatsiooni – ehkmillist lehekülge kasutati kõige kauem aega tagasiSee on kõige levinum meetodTeostus on keeruline:Vajame loedureid – loendurit suurendatakse iga mälu poole möördumiselPinu – hoiame pinu viimati kasutatud lehekülje numbritegaMõlemad meetodid vajavad riistvaralist tugeOperatsioonisüsteemid 290


Virtuaalmälu – Lehekülgede vahetusLRU approksimeerimise meetodVähesed süsteemid omavad sellist riistvaralist tuge nagu puhas LRUmeetod vajaksVõime lisada referentsi (reference) biti, mis ei näita ära järjekorda,kuid näitab millised on kasutatud ja millised mitteVõime kasutada näiteks lisabitte (additional-reference-bits)Näiteks 1 bait järjekorra hoidmiseksMingi aja tagant OS nihutab neid bitte 1 võrra paremale visates ära kõigepisemaSiin pole unikaalsus garanteeritud – mitmel lk-l võib olla sama väärtusOperatsioonisüsteemid 291


Virtuaalmälu – Lehekülgede vahetusLRU approksimeerimise meetodTeise võimaluse (Second-Chance) meetodKui referentsi bitt = 0, siis visatakse leht väljaKui bitt = 1, siis antakse talle teine võimalus – ta reference bittnullitakse ja saabumise ajaks pannakse käesoleva hetke aegLaiendatud Second-Chance meetodVõime vaadelda referentsi ja modifitseerimise bitte kui järjestatudpaare(0,0) – pole hiljuti kasutatud ega muudetud – parim valik(0,1) – muudetud – peame lehe kettale kirjutama(1,0) – kasutati hiljuti – tõenäoliselt varsti jälle(1,1) – kasutati ja on muudetudOperatsioonisüsteemid 292


Virtuaalmälu – Lehekülgede vahetusLoendamisel põhinev (counting-based) meetodVõime luua kaks uut loendamisel põhinevat moodust:LFU (Least Frequently Used)Väikseima väärtusega leht asendatakse. Häda siis kui alguseskasutatakse tihedalt, hiljem aga väheMFU (Most Frequently Used)Siin tähendab väikseim väärtus, et lehte on hiljuti kasutatud võitoodi just mälluOperatsioonisüsteemid 293


Virtuaalmälu – Lehekülgede vahetusLehekülgede buhverdamise meetodKasutusel on pisike lehekülgede ”mahuti”Uus lehekülg loetakse kõigepealt sinna ning vahetataksesiis mõnega väljaVäljavisatu pannakse sellesse vaheruumi ootama kuni takas uuesti tagasi loetakse või kettale kirjutatakseOperatsioonisüsteemid 294


Virtuaalmälu – RaamideallokeerimineKuidas jagada fikseeritud mahuga füüsiliset mälu protsessidevahel?Kui meil on tegemist ühe-kasutaja süsteemiga, siis osa mälustläheb OS-i alla, ülejäänu jääb kasutaja programmide käsutusseMe võime kasutada meetodit kus algselt pannakse kõikkasutajale määratud raamid vabade nimekirja ning hakataksesiis täitma vastavalt saadavatele vigadeleOperatsioonisüsteemid 295


Virtuaalmälu – RaamideallokeerimineMinimaalne raamide arvKui allokeeritud raamide arv väheneb, suureneb lk veasaamise tõenäosusKui lk-viga tekib enne käsu töö lõppemist, tuleb kogu käskuuesti käivitadaKäsus viidatavad operandid võivad olla kaudsed – viidatateistele mäluaadressideleOperatsioonisüsteemid 296


Virtuaalmälu – RaamideallokeerimineMinimaalne raamide arvOsad käsud (sõltuvalt CPU arhitektuurist) võivad ollapikemad kui 1 bait – seega potensiaalselt ületades raamipiireKõige hullemad on kaudsed viited andmetele –äärmuslikul juhul viitavad nad läbi kõigi raamideKaudsete viidete hädadest aitab üle maksimaalne kaudsusemäär (näiteks 16 viitamist)Minimaalne raamide arv on määratud arvuti arhitektuuriga;maksimaalne vaba mälugaOperatsioonisüsteemid 297


Virtuaalmälu – RaamideallokeerimineAllokeerimise algoritmidVõrdne jaotus (equal allocation)Kõige lihtsam n raami jagamine m protsessi vahel on anda igalevõrdne osa m/n.Ülejäägi võib panna vabade raamide buhvrisseProportsionaalne (proportional) jaotusTihti pole mõttekas mälu võrdselt jagada (näiteks 127 KBandmebaas ja 10 KB tekstiredaktor)Jaotatakse protsessi suuruse järgiAlgoritmi valik sõltub multi-programmeerimise tasemestMe võime näiteks anda rohkem mälu kõrgema prioriteedigaprotsessile, et tema tegevust kiirendadaOperatsioonisüsteemid 298


Virtuaalmälu – RaamideallokeerimineGlobaalne vs. Lokaalne allokeerimineGlobaalse allokeerimise puhul on lubatud valida uus raamkõigi vabade hulgastSel puhul allokeeritud raamide arv võib muutudaLokaalse puhul aga ainult enda alla kuuluvate raamidehulgastSiin on raamide arv alati samaVõime lasta kõrgema prioriteediga protsessidelvalida nii enda kui alamate hulgast (loomulikultalamate arvelt)Globaalse puhul ei sõltu lk-vigade arv protsessistendast vaid OS-ist ja teistest protsessidestOperatsioonisüsteemid 299


Virtuaalmälu – PrügiKui madala prioriteediga protsessi raamide arv langeb allatööks vajaliku, siis tuleb protsess seisataSeiskamisega koos tuleb meil välja visata ka kõik teised temapoolt kasutatavad raamidKui tekib situatsioon, kus protsessi suhtes aktiivseid raame onrohkem kui mällu mahub, peab hakkama neid pidevaltvahetama – seda nimetatakse prügi tekkimiseks (trashing)Teiste sõnadega tegeleb protsess rohkem lehekülgedevahetamisega kui millegi kasulikugaOperatsioonisüsteemid 300


Virtuaalmälu – PrügiOS tõstab protsesside arvu kui CPU vähe koormatud onÜhest hetkest alates hakkab tekkima prügiPrügi vähendamiseks võib kasutada lokaalset allokeerimistKa sel juhul teiste protsesside ooteaeg pikenebCPU koormusprügi tekemulti-programmilisuse asteOperatsioonisüsteemid 301


Virtuaalmälu – PrügiVältimiseks tuleb hakata analüüsima protsessilokaalsuse mudelit (locality model) – programmliigub ühest lokaalsusest teise (näitekspeaprogrammist alamprogrammi ja tagasi)Kui allokeerida vähem raame kui on lokaalsuse aste,hakkab tekkima “prügi”Operatsioonisüsteemid 302


Virtuaalmälu – PrügiTööhulga mudel (working-set model)Defineerib ∆ kui tööhulga aknaIdee seisneb viimaste ∆ lehtede poole pöördumiste vaatluselViimase pöördumisega seotud ∆ lehtede hulk on nn. tööhulk (workingset)Kui mingi aja jooksul aktiivse lehe poole ei pöörduta, eemaldataksesee tööhulgastKõige olulisem on selle hulga suurusKogu nõutud raamide arv D saadakse (WSS = Working Set Size)D= ∑WSS iiOperatsioonisüsteemid 303


Virtuaalmälu – PrügiLeheküljevigade sagedus (page-fault frequency =PFF)Tööhulga meetod on edukas kuid keeruline realiseeridaLihtsam lähenemine on leheküljevigade sagedusearvestamineIdee on lihtne – kui PFF sagedus suureks läheb, vajabprotsess rohkem ruumiVõib defineerida kaks piiriÜlemine piir, millest suurem PFF viitab rohkem vajatavateleraamideleAlumine piir, millest väiksema PFF puhul võib raame teisteleprotsessidele andaOperatsioonisüsteemid 304


Virtuaalmälu – OpSüsteemidWindows NTKasutab leheküljenõuete klasterdamist – mällu ei toodamitte ainult vajaminev vaid ka selle lähemad naabridIgale protsessile määratakse ka tööhulga min ja max – kuion ruumi võib protsessile anda kuni max raamiKasutusel on automaatne tööhulga suuruse muutmine –vajadusel vähendades kuni protsessi min väärtuseniOperatsioonisüsteemid 305


Virtuaalmälu – OpSüsteemidSolaris 2OS tuum kontrollib 4 x sekundis vaba mälu hulkaKui väärtus on alla minfree, siis hakatakse lehtivälja viskama (sarnane second-chance meetodile)Väljaviskamine jätkub kuni vaba mälu hulk ületablotsfree väärtuseOperatsioonisüsteemid 306


Virtuaalmälu – Muud tähelepanekudEelnev lehtede valik (prepaging)Juhul kui protsess tööd alustab, siis tekib palju lk-viguStrateegiline käik oleks tuua mällu kõik vajaminevadleheküljedVajadusel võime ära kasutada pikemaid I/O operatsioonelisalehtede/raamide mällu toomiseks (seda eriti tööhulgamudeli puhul)Operatsioonisüsteemid 307


Virtuaalmälu – Muud tähelepanekudLehekülgede suurusLehekülje suurus on alati 2 aste ning on enamjaoltvahemikus 2 12 (4’096) kuni 2 22 (4’194’304)Üheks määrajaks on lehekülje tabeli suurus (4MB mälupuhul oleks 1024 B juures 4096 lehekülge, 8192 juures agaainult 512Samas on pisemate suuruste puhul mälutäituvusefektiivsemMääravaks on ka lehe lugemisele/kirjutamisele kuluv aegOperatsioonisüsteemid 308


Virtuaalmälu – Muud tähelepanekudPööratud lehekülgede tabelSellest oli juttu eespool ning ideeks oli virtuaalse jafüüsilise aadressi vahelise sideme loomineSeda sorti tabel ei sisalda enam täielikku infot kõikidevirtuaalsete aadresside kohtaKui seda meetodit kasutada, peame kusagil ikkagi hoidmalehekülgede tabelit (üks protsessi kohta)Selliseid väliseid lisatabeleid kasutatakse vaid lk-veasaamise korralOperatsioonisüsteemid 309


Virtuaalmälu – Muud tähelepanekudProgrammi struktuurOletame et meil on Java kood 128x128 maatriksi nullimiseksEsimese juhul käiakse järjest läbi kõik leheküljed ja seda 128 korda – kokku128x128 = 16’384 lk-viga !!!int A[][] = new int[128][128];for (int j = 0; j < 128; j++)for (int i = 0; i < 128; i++)A[i][j] = 0;Peale parandust saame vaid 128 lk-vigaint A[][] = new int[128][128];for (int i = 0; i < 128; i++)for (int j = 0; j < 128; j++)A[i][j] = 0;Operatsioonisüsteemid 310


Virtuaalmälu – Muud tähelepanekudSisendi/väljundi vastastikune lukustumineMeil on vahest vaja lukustada mingit mäluosa kuhukirjutab/loeb eraldi protsessorTuleb tagada, et I/O operatsiooni palunud protsessimäluosa, kust/kuhu andmeid siirdama hakatakse, vahepealvälja ei tõstetaAppi võib võtta locked bitiLuku bitt võib ka ohtlik olla – tema võib peale keerata agamaha enam kunagi ei võetaOperatsioonisüsteemid 311


Virtuaalmälu – Muud tähelepanekudTööd reaalajasSiiani oleme püüdnud maksimeerida kogusüsteemi efektiivsust; üksikud protsessid võivadsamas aga palju kannatadaTavaliselt reaalajaga tegelevates süsteemidesvirtuaalmälu üldse ei kasutataOperatsioonisüsteemid 312


KordamisküsimusedMillistel tingimustel leheküljevead tekivad?Mis on lk-vigade alumine ja ülemine piir?Millised programmi struktuuridest on virtuaalmälu suhteshead ja millised halvad= Miks?PinuJärjestikuline otsimineKahendotsiminePuhas programmikoodVektorite operatsioonidKaudsed viited andmeteleOperatsioonisüsteemid 313


Küsimused?=============== ??? ===============Operatsioonisüsteemid 314

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!