220 likes | 336 Views
9. Muistinhallinta. Moniajojärjestelmässä keskusmuisti on jaettu usean prosessin kesken => ohjelman paikka muistissa ei ole kiinteä, vaan koodi on vapaasijoitteinen eli voidaan sijoittaa eri paikkaan muistissa tämä edellyttää todellisten muistiosoitteiden ajoaikaista laskemista.
E N D
9. Muistinhallinta • Moniajojärjestelmässä keskusmuisti on jaettu usean prosessin kesken • => ohjelman paikka muistissa ei ole kiinteä, vaan koodi on vapaasijoitteinen eli voidaan sijoittaa eri paikkaan muistissa • tämä edellyttää todellisten muistiosoitteiden ajoaikaista laskemista
Prosessi voi sijaita laitteistosta ja KJ:stä riippuen • keskusmuistissa yhtenäisellä alueella • keskusmuistissa palasina eri paikoissa • osa keskusmuistissa, osa levyllä • on tarvittaessa tuotava levyltä keskusmuistiin • muistin kerrostus = ohjelmoija kertoi milloin tarvitaan • virtuaalimuisti = KJ tuo tarvittaessa muistiin
9.1 Muistin organisointi • lineaarinen osoiteavaruus • muistiosoitteet on numeroitu peräkkäin nollasta alkaen • pienin osoitettava osa on tavun tai sanan mittainen muistipaikka • kirjanpidon takia • vapaat ja varatut alueet jaetaan suurempiin alueisiin segmentteihin tai sivuihin
Muisti koostuu samanmittaisista peräkkäisistä muistipaikoista muistipaikka 0 segmentti tai sivu 6 12 18 24 30 36 42 48 54 60 66 ...
Prosessori • muistihierarkia ja välimuistin käyttö 50-100 ns muutama ns rekisterit Keskusmuisti 10 ms koodi- ja data-alueet välimuisti 10-20 ns levy lohkopuskuri
9.2 Kanta- ja rajarekisteriä käyttävä järjestelmä • Osoitemuutos • prosessin muistialue on yhtenäinen kokonaisuus • osoitemuutos ja suojaus kanta- ja rajarekistereiden avulla (BASE, LIMIT) MMU LIMIT BASE ohjelman osoite fyysinen osoite MAR
Jokaisesta muistiviittauksesta MMU • tarkistaa sen oikeellisuuden • osoite < LIMIT • muuttaa ohjelmaosoitteen fyysiseksi muistiosoitteeksi • osoite = osoite +BASE • jos koodille ja datalle omat muistisegmentit, niin tarvitaan kaksi paria kanta- ja rajarekistereitä
9.3 Virtuaalimuisti • prosessista pidetään keskusmuistissa kulloinkin tarpeelliset osat • peräkkäiset osat voivat sijaita erillään • muut osat saatavissa nopeasta tukimuistista • looginen <==> fyysinen muistiavaruus • muistissa fyysiset sivutilat • ohjelmassa samankokoisia loogisia sivuja
muistin sivutiloja • Sivut ja sivutilat ohjelman sivuja 0 2 ohjelman sivu 2 0 1 4 ohjelman sivu 3 6 2 3 8 ohjelman sivu 0 10 ….. ………... Ohjelman sivuja voidaan sijoittaa vapaisiin sivutiloihin. Osa sivuista voi olla levyllä.
Sivutaulu • kertoo, missä prosessin sivut todella sijaitsevat sivutilan nro P-bitti M-bitti muuta 9 1 0 0 1 2 3 4 0 3 1 1 4 1 0 …..
=> sivunumero + siirtymä • Osoitemuunnos • ohjelman osoite 12 11 10 09 08 07 06 05 04 03 02 01 00 1 0 1 0 0 0 1 1 1 1 1 0 1 Jakolasku: sivunumero = ohjelman osoite DIV sivun koko siirtymä = ohjelman osoite MOD sivun koko
Fyysinen osoite: saadaan katenoimalla (= yhdistämällä peräkkäin) sivutilannumero saadaan sivunumerosta sivutaulun avulla ja siirtymä • Fyysinen osoite eli osoite muistissa
Esimerkki • Luentomonisteen sivulta 123. • Mikä on kuvan 9.3 prosessin osoitetta 0 vastaava fyysinen osoite? • Mikä fyysinen osoite vastaa osoitetta 6345?
Prosessin sivutaulun sijainti • Koko sivutaulu MMU:n rekistereissä • aina prosessin vaihtuessa vaihdetaan rekistereiden sisältö • osoitteen laskenta nopeaa • vain pienet osoiteavaruudet mahtuvat • Sivutaulu keskusmuistissa, MMU:ssa sivutaulun keskusmuistiosoite PTR • isotkin osoiteavaruudet mahtuvat • osoitteen lasku hidas • ensin sivutaulun alkio muistista • osoitemuunnospuskuri TLB MMU:ssa • viimeksi muunnoksissa tarvitut tiedot
MMU • TLB PTR TLB fyysinen osoite ohjelman osoite MAR TLB on nopeaa assosiatiivimuistia
TLB:n sisältö sivunumero sivutilannumero P-bitti V-bitti muuta Koko on esim. 8 rekisteriä. Niissä viimeksi viitatut sivutaulun alkiot. Usein tiedot löytyvät jo suoraan TLB:stä ja osoitetaulun alkion erillistä muistinoutoa ei tarvita.
TLB: osoitteenmuunnos • Jaa ohjelman osoite sivunumeroksi ja siirtymäksi • Etsi sivunumeroa TLB:stä • Jos ei löydy tai v-bitti = 0 • nouda sivutaulun alkio MEM[PTR+sivunumero] johonkin TLB:n alkioon • jos p-bitti =0, niin aiheuta sivunpuutoskeskeytys • muuten lisää TLB:n alkioon sivun numero ja aseta v-bitti ykköseksi • Lisää sivutilan numeroon (TLB:ssä) siirtymä
Sivujen poistaminen muistista • Jos prosessin viittamaa sivua ei löydy muistista, aiheutuu sivunpuutoskeskeytys ja sivu haetaan muistiin • Jos kaikki sivutilat jo käytössä, niin jokin sivuista on poistettava muistista • poistetaan ‘turha sivu’, mutta mistä tiedetään, että sivua ei enää tarvita? • sivu, jota ei pisimpään aikaan ole käytetty => sivukohtaiset viitebitit,
9.4. Heittovaihto • Passiivinen, turhaan keskusmuistia kuluttava prosessi siirretään levylle • kokonaan • joitakin osia prosessista • muuttumattomia osia ei tarvitse kirjoittaa uudelleen levylle • prosessin kuvaaja jää aina muistiin • aktiiviset prosessit palautetaan takaisin keskusmuistiin • heittovaihto kuluttaa resursseja
Kanta- ja rajarekisteriä käyttävä järjestelmä • allokoitava riittävä tila • tuotavalle prosessille tilaa poistamalla muita passiivisia • poistoalgoritmi • siirräntää WAIT-tilassa odottavat prosessit • suuret tilaa vievät prosessit • kauimmin muistissa • pienimmän prioriteetin prosessit • noutoalgoritmi • kun tilaa vapautuu, tuo prosesseja keskusmuistiin
virtuaalimuistijärjestelmä • sivutilataulu kertoo vapaat ja varatut tilat • päivitetään, kun varataan tai vapautetaan tilaa • jos ei ole vapaita sivutiloja • poistoalgoritmi valitsee poistettavat sivut • viitebitti: pitkään käyttämättömänä olleet sivut • yleensä sivu tuodaan muistiin vasta, kun sitä tarvitaan • tarvesivutus • ennaltanouto • sivut muistiin prosessin käynnistyessä • tai pyritään ‘arvaamaan’ mitä sivuja seuraavaksi tarvitaan
Segmentointi • prosesseja ei jaeta vakiomittaisiin sivuihin, vaan mahdolliseti erimittaisiin segmentteihin • esim. aliohjelma = segmentti • ongelmana muistin sirpaloituminen (tai pirstoutuminen)(fragmentation) • sijoitusalgoritmi pyrkii vähentämään • ajoittain vapaiden tilojen yhdistäminen • sivuttava segmentointi: ensin segmentoidaan, sitten sivutetaan