Sivutus
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
- Ilkka Haikala ja Hannu-Matti Järvinen: Käyttöjärjestelmät (luku 4), Talentum 2003, ISBN 951-762-837-4.
Viitteet
- ↑ Silberschatz & Galvin & Gagne: Operating System Concepts, s. 318–321,328. Eighth edition. Wiley, 2009. ISBN 978-0-470-12872-5. (englanniksi)
- ↑ a b c d e f g h Arpaci-Dusseau, Remzi H. & Arpaci-Dusseau, Andrea C.: Paging: Introduction (PDF) pages.cs.wisc.edu. Viitattu 14.8.2019. (englanniksi)
- ↑ Arpaci-Dusseau, Remzi H. & Arpaci-Dusseau, Andrea C.: Segmentation (PDF) pages.cs.wisc.edu. Viitattu 15.8.2019. (englanniksi)
- ↑ McAllister, Neil: Behold ATLAS, the fastest computer of 50 years ago The Register. Viitattu 26.7.2017.
- ↑ William Stallings: Operating System Internals and Design Principles, s. 307–314,325. Seventh edition. Prentice Hall, 2012. ISBN 978-0-13-230998-1. (englanniksi)
- ↑ Arpaci-Dusseau, Remzi H. & Arpaci-Dusseau, Andrea C.: Paging: Faster Translations (TLBs) (PDF) pages.cs.wisc.edu. Viitattu 5.10.2022. (englanniksi)
- ↑ Arpaci-Dusseau, Remzi H. & Arpaci-Dusseau, Andrea C.: Paging: Smaller Tables (PDF) pages.cs.wisc.edu. Viitattu 5.10.2022. (englanniksi)
- ↑ Mel Gorman: Huge pages part 1 (Introduction) lwn.net. 16.2.2010. Viitattu 23.10.2020. (englanniksi)
- ↑ Jonathan Corbet: An introduction to compound pages lwn.net. 11.11.2014. Viitattu 9.7.2021. (englanniksi)
- ↑ a b c Arpaci-Dusseau, Remzi H. & Arpaci-Dusseau, Andrea C.: Beyond Physical Memory: Mechanisms (PDF) pages.cs.wisc.edu. Viitattu 23.10.2020. (englanniksi)
- ↑ ITKA203 – Käyttöjärjestelmät Kurssimateriaalia: ”luentomoniste” (PDF) users.jyu.fi. Viitattu 4.10.2022. (englanniksi)
- ↑ a b Arpaci-Dusseau, Remzi H. & Arpaci-Dusseau, Andrea C.: Beyond Physical Memory: Policies (PDF) pages.cs.wisc.edu. Viitattu 5.10.2022. (englanniksi)
- ↑ Gorman, Mel: Understanding the Linux Virtual Memory Manager, s. 167. Prentice Hall, 2004. ISBN 0-13-145348-3. Teoksen verkkoversio.