Sivutus

Sivutus on muistinhallintamenetelmä joka mahdollistaa sen, että prosessin käyttämän fyysisen muistiavaruuden ei tarvitse olla yhtenäinen (jatkuva) Sivutus tarkoittaa tietokoneen muistin pilkkomista kiinteän kokoisiin lohkoihin, joka toimii virtuaalimuistin yhteydessä. Vaihtoehtoinen tapa on muistin segmentointi. Ennen käytettyä menetelmää koko prosessin muistin kirjoittamiseksi massamuistiin kutsutaan heittovaihdoksi. == Historia == Virtuaalimuistin ja sivutuksen historia juontaa Ferrantin Atlas- tietokoneeseen. IBM:n suurtietokoneissa käytetty OS/MFT käytti kiinteää osiointia, ja IBM:n OS/MVT käytti dynaamista osiointia ennen sivutuksen yleistymistä. == Toimintaperiaate == Sivutus jakaa osoiteavaruuden kiinteän kokoisiin lohkoihin joita kutsutaan sivuiksi. Fyysinen muisti jaetaan sivukehykseksi () kutsuttuihin lohkoihin. Sivujen käytöllä voidaan abstraktoida muisti ja vältetään muistin fragmentoitumista. Jokaisen sivun sijainti fyysisessä muistissa pidetään sivutaulussa, jonka avulla tehdään osoitteenmuutos virtuaalisesta osoitteesta fyysiseksi osoitteeksi. Sivutaulu pidetään prosessikohtaisesti koska eri prosesseilla on käytössä eri fyysiset osoitteet. Osoitteenmuunnoksen nopeuttamiseen käytetään välimuistia, jota kutsutaan nimellä translation-lookaside buffer (TLB), jonka nimitys johtuu historiallisista syistä. Lineaaristen sivutaulujen sijaan monet modernit järjestelmät käyttävät monitasoisia sivutauluja. 1990-luvulla havaittiin tehokkuushyötyä käyttämällä useampaa kuin yhtä sivukokoa, mutta se ei ole hyödyksi kaikissa tilanteissa. Yhdistelmäsivut () ovat kahden tai useamman muistisivun jatkuvia joukkoja, joita voidaan käsitellä yhtenä suurena sivuna. Kun on tarvetta käyttää enemmän muistia kuin tietokoneessa on fyysisesti voidaan osa muistisivuista sivuttaa levylle. Kun ohjelma viittaa sivuun, joka ei ole fyysisessä muistissa tapahtuu sivuvirhe (), jolloin käyttöjärjestelmä käsittelee sivun palauttamisen levyltä muistiin. Kun vain pieni määrä muistista on vapaana syntyy painetta käyttöjärjestelmälle sivuttaa osa muistista levylle, jotta on tilaa aktiivisesti käytetyille sivuille. Varhainen päättelymekanismi muistista poistettaville sivuille käytti yksinkertaista FIFO () menetelmää, jonka tilalle on kehitetty LRU () ja LFU () sekä muunnelmia MFU ja MRU (, ). Vanhoissa järjestelmissä ohjelmoijan oli manuaalisesti aloitettava tiedon siirto muistista (). Dokumentaatiossa levylle sivuttamista kutsutaan toisinaan yhä swapiksi johtuen historiallisista syistä. Swapilla on aiemmin tarkoitettu koko muistialueen vaihtamista toiselle suoritettavalle ohjelmalle. Sivutuksen kanssa virtuaalimuistia ja swap-tilaa käyttävät ohjelmat voivat jatkaa suoritusta vaikka vain osa ohjelmasta on tietokoneen muistissa. == Heittovaihto == Heittovaihto () tarkoittaa tietokoneen prosessin koko käytössä olevan osoiteavaruuden siirtämistä keskusmuistista massamuistilaitteelle tai takaisin. Heittovaihtoa käytettiin runsaasti ennen virtuaalimuistin yleistymistä ratkaisemaan keskusmuistin pienuudesta tulevia ongelmia. Koska heittovaihdossa siirretään koko prosessin muisti kerralla massamuistilaitteelle, kestää yksi heittovaihto-operaatio suhteellisen kauan. Lisäksi heittovaihdolla ei voi ratkaista tilannetta, jossa yksi prosessi on niin suuri, että se ei mahdu keskusmuistiin edes yksinään. Jälkimmäinen tilanne piti ratkaista käsintehdyllä kerrostamisella, joka on hyvin vaikea tehtävä hallittavaksi. Heittovaihdon on lähes kokonaan korvannut sivuttavan virtuaalimuistin käyttö. Kuitenkin myös virtuaalimuistikoneissa täytyy jossain tilanteissa turvautua heittovaihtoon. Jos prosessia ajetaan liian pienellä muistin määrällä, tästä aiheutuu suuri määrä virtuaalimuistijärjestelmän aiheuttamia keskeytyksiä, joista jokainen käynnistää muistisiirron massamuistilaitteelta, mahdollisesti myös massamuistilaitteelle. Vaikka järjestelmä toimii teoriassa, käytännössä kone tuntuu pysähtyvän. Ilmiötä kutsutaan ruuhkautumiseksi (). Tämän takia myös virtuaalimuistijärjestelmissä siirrytään heittovaihdon käyttöön äärimmäisissä kuormitustilanteissa. Virtuaalimuistijärjestelmän heittovaihto siirtää massamuistilaitteelle sillä hetkellä keskusmuistissa olevat sivut, palautusvaiheessa keskusmuistiin luetaan nämä viimeksi käytössä olleet sivut, ei prosessin koko osoiteavaruutta. Yleisesti ottaen virtuaalimuistijärjestelmissä on vaikea päätellä, milloin on oikea hetki siirtyä heittovaihtoon. == Lähteet == * Ilkka Haikala ja Hannu-Matti Järvinen: Käyttöjärjestelmät (luku 4), Talentum 2003, ISBN 951-762-837-4. === Viitteet === Luokka:Käyttöjärjestelmätekniikka