Sivutus on muistinhallintamenetelmä joka mahdollistaa sen, että prosessin käyttämän fyysisen muistiavaruuden ei tarvitse olla yhtenäinen (jatkuva)[1] Sivutus tarkoittaa tietokoneen muistin pilkkomista kiinteän kokoisiin lohkoihin, joka toimii virtuaalimuistin yhteydessä.[2] Vaihtoehtoinen tapa on muistin segmentointi.[2][3]
Ennen käytettyä menetelmää koko prosessin muistin kirjoittamiseksi massamuistiin kutsutaan heittovaihdoksi.
Historia
Virtuaalimuistin ja sivutuksen historia juontaa Ferrantin Atlas-tietokoneeseen.[4][2]
IBM:n suurtietokoneissa käytetty OS/MFT käytti kiinteää osiointia, ja IBM:n OS/MVT käytti dynaamista osiointia ennen sivutuksen yleistymistä.[5]
Toimintaperiaate
Sivutus jakaa osoiteavaruuden kiinteän kokoisiin lohkoihin joita kutsutaan sivuiksi.[2] Fyysinen muisti jaetaan sivukehykseksi (engl. page frame) kutsuttuihin lohkoihin.[2] Sivujen käytöllä voidaan abstraktoida muisti ja vältetään muistin fragmentoitumista.[2] Jokaisen sivun sijainti fyysisessä muistissa pidetään sivutaulussa, jonka avulla tehdään osoitteenmuutos virtuaalisesta osoitteesta fyysiseksi osoitteeksi.[2] Sivutaulu pidetään prosessikohtaisesti koska eri prosesseilla on käytössä eri fyysiset osoitteet.[2] Osoitteenmuunnoksen nopeuttamiseen käytetään välimuistia, jota kutsutaan nimellä translation-lookaside buffer (TLB), jonka nimitys johtuu historiallisista syistä.[6] Lineaaristen sivutaulujen sijaan monet modernit järjestelmät käyttävät monitasoisia sivutauluja.[7]
1990-luvulla havaittiin tehokkuushyötyä käyttämällä useampaa kuin yhtä sivukokoa, mutta se ei ole hyödyksi kaikissa tilanteissa.[8] Yhdistelmäsivut (engl. compound page) ovat kahden tai useamman muistisivun jatkuvia joukkoja, joita voidaan käsitellä yhtenä suurena sivuna.[9]
Kun on tarvetta käyttää enemmän muistia kuin tietokoneessa on fyysisesti voidaan osa muistisivuista sivuttaa levylle.[10] Kun ohjelma viittaa sivuun, joka ei ole fyysisessä muistissa tapahtuu sivuvirhe[11] (engl. page fault), jolloin käyttöjärjestelmä käsittelee sivun palauttamisen levyltä muistiin.[10] 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.[12] Varhainen päättelymekanismi muistista poistettaville sivuille käytti yksinkertaista FIFO (engl. first in-first out) menetelmää, jonka tilalle on kehitetty LRU (engl. least recently used) ja LFU (engl. least frequently used) sekä muunnelmia MFU ja MRU (engl. most frequently used, engl. most recently used).[12]
Vanhoissa järjestelmissä ohjelmoijan oli manuaalisesti aloitettava tiedon siirto muistista (engl. memory overlay).[10]
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.[13]
Heittovaihto
Tähän artikkeliin tai sen osaan on merkitty lähteitä, mutta niihin ei viitata. Älä poista mallinetta ennen kuin viitteet on lisätty. Voit auttaa Wikipediaa lisäämällä artikkelille asianmukaisia viitteitä. Lähteettömät tiedot voidaan kyseenalaistaa tai poistaa. |
Heittovaihto (engl. swapping) 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 (engl. thrashing). 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
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.