Käyttöjärjestelmät: Virtuaalimuisti Teemu Saarelainen Tietotekniikka teemu.saarelainen@kyamk.fi Lähteet Stallings, W. Operating Systems Haikala, Järvinen, Käyttöjärjestelmät Eri Web-lähteet Muistinhallinta ja virtuaalimuisti Kaikki muistiviittaukset ohjelman sisällä ovat loogisia (suhteellisia) muistiosoitteita Muistiviittaukset käännetään ajoaikana todellisiksi fyysisiksi muistiosoitteiksi Prosessi voi välillä olla ajossa (suorituksessa prosessorilla) ja keskusmuistissa, välillä taas levyllä sijainti siis vaihtelee 1
Muistinhallinta ja virtuaalimuisti Prosessi voi olla hajautunut useaan osaan (sivu, segmentti) Eivät välttämättä sijaitse peräkkäin Mitä tästä seuraa? Kaikkien ohjelman osien ei tarvitse olla keskusmuistissa ajoaikana! Ohjelman suoritus ja virtuaalimuisti Ohjelman käynnistyessä KJ tuo keskusmuistiin vain osia prosessista (ei siis talleta sitä kokonaan keskusmuistiin) Tätä keskusmuistissa oleva prosessin osa = resident set Niin kauan kuin muistiviittaukset osuvat resident set:iin, kaikki sujuu hyvin Mitä tapahtuu, jos prosessin suorituksen aikana tarvitaan osaa, joka ei ole keskusmuistissa? CPU generoi keskeytyksen KJ laittaa prosessin blocked-tilaan Prosessin tarvittava osa pitää hakea keskusmuistiin 2
Ohjelman suoritus ja virtuaalimuisti Miten prosessin osa tuodaan keskusmuistiin? Keskeytyksen jälkeen ko. prosessi siis blokataan KJ pyytää levyluku-operaatiota (disk I/O) Pyynnön jälkeen joku toinen prosessi voidaan laittaa suoritukseen Kun levyluku-operaatio on valmis, tulee I/O-keskeytys KJ käsittelee em. keskeytyksen ja siirtää blokatun prosessin Ready-tilaan Alkuperäinen prosessi voi taas jatkaa suoritusta Mitä hyötyjä tästä seuraa? Onko tässä toiminnassa mitään järkeä? Prosessihan keskeytetään vain, koska se ei ollut kokonaan keskusmuistissa! Tehokkuus riippuu monesta seikasta, mutta ainakin: 1. Enemmän prosesseja voi olla samaan aikaan keskusmuistissa Vain pieni osa prosessista tarvitaan kerrallaan Todennäköisesti useampi prosessi on Ready-tilassa 2. Prosessin koko voi olla suurempi kuin saatavilla oleva keskusmuisti 3
Muistityypit Real memory = todellinen muisti eli keskusmuisti Virtual memory = virtuaalimuisti eli levyllä oleva muisti mahdollistaa hyvin tehokkaan moniajon ja ohjelmoinnin ei enää ongelmaa rajallisesta muistista Trashing = ruuhkautuminen Keskusmuistissa kannattaa olla mahdollisimman paljon prosesseja eli oletetaan, että keskusmuisti on täynnä Kun uutta prosessin osaa haetaan levyltä keskusmuistiin, pitää joku osanen heittää keskusmuistista levylle Voi tapahtua niin, että prosessin osa heitetään levylle (swap) juuri ennen kuin sitä tarvitaan Prosessori käyttääkin suurimman osan ajasta heittovaihtaessa (swapping), eikä ohjelmien käskyjä suorittaen 4
Paikallisuusperiaate Ohjelma- ja dataviittaukset prosessin sisällä kohdistuvat yleensä pienelle alueelle (klusteroituminen) Vain muutamia osia prosessista tarvitaan lyhyessä ajassa Voidaan tehdä sivistynyt arvaus siitä, mitä osia saatetaan tarvita Virtuaalimuistin käyttö saattaisi siis toimia hyvinkin tehokkaasti Tuki virtuaalimuistille Raudan tulee tukea sivutusta KJ:n tulee toteuttaa sivujen siirtäminen ja niiden hallinta keskusmuistin ja levymuistin välillä 5
Sivutus Jokaisella prosessilla on oma sivutaulunsa Jokainen sivutaulun rivi sisältää tiedon sivun sijainnista keskusmuistissa Lisäksi tarvitaan bitti, joka kertoo onko sivu keskusmuistissa vai levyllä Sivutus P-bitti kertoo onko sivu keskusmuistissa Lisäksi tarvitaan M-bitti, joka kertoo onko sivua muutettu sen jälkeen, kun se ladattiin keskusmuistiin Jos sivua ei ole muutettu, niin sitä ei tarvitse päivittää levylle heittovaihdon yhteydessä 6
7
Sivutaulut ja virtuaalimuisti Prosessien sivutaulut ovat myös sivutettuna ja (mahdollisesti) virtuaalimuistissa Eli prosessin ollessa ajossa, osa sivutaulusta on keskusmuistissa, osa virtuaalimuistissa TLB = Translation lookaside buffer Jokainen virtuaalimuistin viittaus voi aiheuttaa kaksi fyysisen muistin viittausta sivutaulun haku varsinaisen datan haku Ratkaisuna on nopea välimuisti sivutaulua varten, TLB osa sivutaulujen tiedoista on saatavilla nopeasti Paikallisuusperiaate toimii tässäkin: TLB:ssä on tallessa viimeiseksi käytetyt sivutaulutiedot 8
Sivun koko Pienempi sivun koko: vähemmän sisäistä pirstoutumista enemmän sivuja / prosessi suuremmat sivutaulut enemmän sivutaulujen osia virtuaalimuistissa Levyt on suunniteltu siirtämään suuria määriä tietoja suurempi sivun koko on parempi 9
10