160 likes | 267 Views
Virtuaalimuisti Modernin muistinhallinnan tärkein menetelmä on virtuaalimuisti, jossa looginen osoiteavaruus ja fyysinen muistiavaruus on erotettu toisistaan. Virtuaalimuistin osoitteenmuodos algoritmeja uusien sivujen hakemiseksi virtuaalimuisti rautatasolla ja käyttöjärjestelmässä.
E N D
Virtuaalimuisti • Modernin muistinhallinnan tärkein menetelmä on virtuaalimuisti, jossa looginen osoiteavaruus ja fyysinen muistiavaruus on erotettu toisistaan. • Virtuaalimuistin osoitteenmuodos • algoritmeja uusien sivujen hakemiseksi • virtuaalimuisti rautatasolla ja käyttöjärjestelmässä
Osoitteenmuutos • Kun ohjelmakoodi kirjoitetaan, se toimii nimiavaruudessa, funktioita ja muuttujia käsitellään niiden nimien perusteella. • Ohjelmaa käännettäessä se siirtyy toimimaan virtuaalisessa osoiteavaruudessa – muuttujanimet korvataan muistiosoitteilla, jotka ovat muotoa segmentti ja/tai sivu ja siirtymä. • Ladattaessa ohjelma muistiin, nämä osoitteet korvataan absoluuttisilla osoitteilla, jossa segmentin loogisen numeron korvaa sen sijainti keskusmuistissa.
Virtuaalinen muunnoskartta • käytetään loogisen osoitteen muuttamiseksi keskusmuistin osoitteeksi • ajasta riippuva kuvaus prosessin virtuaalisesta osoiteavaruudesta fyysiseen osoiteavaruuteen hetkellä t: Vt:virtuaalinen osoiteavaruus -> fyysinen osoiteavaruus {A} missä t on ei-negatiivinen kokonaisluku virtuaaliaika ja A on symboli, joka viittaa tyhjään • Virtuaaliaika on aikaa, jonka prosessi itse näkee, eli se ei kulu, kun prosessi on keskeytettynä • Kun virtuaalimuistin osoite i ladataan, on vastaava fyysisen muistin osoite Mt(i). Jos i ei ole keskusmuistissa, se haetaan levymuistista.
Sivujen haku muistiin • Virtuaalimuisti tuo mukanaan omat erityisongelmansa – mitkä segmentit tai sivut pitäisi hakea muistiin ja mitkä viedä pois? Ongelman erityispiirre on, että ne ovat saman ohjelman osia. • Tyypillisin tapa on suorittaa nouto tarvittaessa. • Toinen tapa on yrittää ennakoida, mitä sivuja tarvitaan. • Sivutusta käytettäessä sijoitus on aika vapaata, ja seuraavissa käsitelläänkin etupäässä sivutukseen sovellettuja menetelmiä. • Jää kuitenkin kysymys siitä, mitkä sivut otetaan pois, eli korvausstrategiat. • Seuraavassa tarkastellaan kahta pääjoukkoa algoritmeja, joissa sivut haetaan tarvittaessa: staattiset, joissa prosessille osoitettujen sivujen määrä on vakio, ja dynaamiset, joissa sivumäärä vaihtelee ajan funktiona.
Staattiset algoritmit • Random • Belady • LRU (Least Recently Used) • NUR (Not Used Recently) • LFU (Least Frequently Used) • FIFO (First in - First out) • Beladyn anomalia
Random valitaan korvattava sivu sattumanvaraisesti. Ei toimi kovin hyvin. Paikallisuuden takia se generoi enemmän sivuvirheitä kuin useimmat muut käytetyt algoritmit.
Beladyn optimaalinen algoritmi • Vaatii täydellistä tietoa jo etukäteen • poistetaan sivu, jota tarvitaan seuraavan kerran pisimmän ajan kuluttua Least used recently • suunniteltu huomioimaan ohjelman normaalia toimintaa • käyttää hyväkseen paikallisuutta ja paikallisuuden muutosta ajan myötä • pidetään kirjaa siitä, koska sivua on viimeksi käytetty • se sivu, jonka käytöstä on pisin aika, korvataan ensimmäisenä • merkitään ikä aikaleimalla
Not Used Recently • LRU-algoritmin approksimaatio • otetaan käyttöön viitattu ja muutettu bitit • aluksi ilmoitetaan, että sivua ei ole muutettu ja siihen ei ole viitattu • kun sivuun viitataan tai sitä muutetaan, käännetään sen bitti • ensimmäiseksi korvataan sivut, joihin ei ole viitattu, sen jälkeen sivut, joita ei ole muutettu ja sitten ne, joita on muutettu. Jos päädytään viimeiseen, kaikki bitit nollataan • helppo toteuttaa, suhteellisen tehokas, pieni yleisrasite -> suosittu
Least Frequently Used • valitaan korvattavaksi sivu, jota on käytetty harvimmin • seuraa heikosti paikallisuuden muutoksia • vasta kun uuteen sivuun tulee riittävästi viittauksia suhteessa vanhoihin, ne jäävät käyttöön • ottaa huomioon kauan sitten tehdyt viittaukset (muunnelmassa lasketaan vain viimeisestä muistiinlatauksesta lähtien tehdyt viittaukset) • Pääsee kuitenkin kohtalaisen lähelle optimia ilman täydellistä tietoa
First in, first out • Menetelmänä huono • korvaa sen sivun, joka on ollut muistissa pisimpään • sopii tiettyihin tehtäviin, mutta yleisesti ei esim. ota lainkaan huomioon paikallisuutta Kokonaisuudessaan: • LRU ja LFU ovat kohtuullisia algoritmeja, mutta voivat olla raskaita • NUR approksimoi hyvin LRUta
Beladyn anomalia • edellä prosessille on varattu tietty määrä muistia. Mitä tapahtuu, jos sille varataankin enemmän sivutiloja? • ei kaikissa tapauksissa edullista • tilannetta, jossa sivuvirheiden määrä kasvaa käytettävissä olevien sivutilojen määrän kasvaessa, kutsutaan Beladyn anomaliaksi • algoritmeja, joiden kanssa anomaliaa ei esiinny, kutsutaan pinoalgoritmeiksi (esim. LRU ja LFU)
Dynaamiset algoritmit • sallivat sivutilojen määrän muuttumisen dynaamisesti suorituksen aikana Työjoukkoalgoritmi • prosessin tietyssä elinkaaren vaiheessa käyttämää sivujoukkoa kutsutaan työjoukoksi • prosessin siirtyessä vaiheesta toiseen, työjoukko muuttuu, samoin sen koko • prosessin suoritus on tehokkainta, kun sen työjoukko mahtuu kokonaisuudessaan muistiin • kun vähennetään prosessille varattuja sivutiloja, tietyn pisteen jälkeen sivuvirheiden määrä kasvaa voimakkaasti (trashing) • paras sivujoukon koko on siis koko, joka on hiukan tuon pisteen yläpuolella
Työjoukkoalgoritmi (jatkuu) • Työjoukkoalgoritmi esittelee formaalin tavan seurata sivutilojen sopivaa määrää (eli hystereesipistettä) • olkoon m(t) prosessille osoitettujen sivutilojen määrä virtuaalisen ajan hetkellä t. Kun t=0, myös m=0. • olkoon S(m(t)) prosessin lataamien sivujen määrä hetkellä t. Koska S(m(t)) = 0, t>0, voidaan prosessille prosessille osoitetun muistin tila hetkellä t, t>0 johtaa prosessille varatun muistin tilasta hetkellä t-1 seuraavasti, käyttäen parametriä T: S(m(t)) = S(m(t-1))U Xt-Yt, missä Xt on keskusmuistiin hetkellä t ladattujen sivujen joukko, Yt hetkellä t keskusmuistista poistettujen sivujen joukko.
Työjoukkoalgoritmi (jatkuu) • algoritmi erottaa toisistaan sivujen lataamisen ja poistamisen, mikä sallii dynaamisen vaihtelun • tapauksia on neljä: • X on tyhjä: samoin Y, sivutilojen määrä ei muutu • X on tyhjä, Y ei: yksi sivutila vapautetaan • X ei ole tyhjä, Y on: varataan yksi tila lisää • kumpikaan ei ole tyhjä: sivutilojen määrä ei muutu Sivutilojen määrä siis muuttuu enintään yhdellä kerrallaan. Vakio T kertoo kuinka kauan prosessi voi varata käyttämätöntä tilaa. T:n koolla voi tehokkaasti hallita muutosnopeutta. Työjoukon koko on vahvasti sidoksissa paikallisuuteen. Nyrkkisääntö: prosessia ei kannata ottaa suoritukseen, jos sen työjoukko ei mahdu keskusmuistiin.
Kelloalgoritmit • Työjoukkoalgoritmi on raskas, vaihtoehtojakin löytyy, jotka approksimoivat toimintaa, mutta ovat kevyempiä • kelloalgoritmi toimii kuten NUR järjestelmänlaajuisesti. • kaikkiin sivutiloihin liitetään viittausbitti ja mahdollisesti muutosbitti. • ’viisari’ osoittaa yhteen sivutilaan. Sivutilaa pyydettäessä ’viisari’ käy läpi kaikkien sivujen viittausbitit ja korvaa ensimmäisen johon ei ole viitattu. • dynaaminen, mutta ei ota huomioon yksittäisen prosessin tarpeita
Working Set Clock • LRU-tyylinen • jokaiseen sivutilaan lisätään muuttuja ’viitattu’, johon tallennetaan virtuaalisen ajan hetki, jolloin sivutilaan on viimeksi viitattu • jos se ylittänyt oman ’elinikänsä’, sivutilan saa poistaa • approksimoi kohtuullisesti työjoukkoalgoritmia • käytetään useissa sivuttavissa käyttöjärjestelmissä Rautataso ja softataso • Melkein kaikki toteutetaan rautatasolla, softatasolla vain ne algoritmit, joiden perusteella sivut korvataan toisilla