Mikä on välimuisti?
Välimuisti eli cache on pieni, nopea muisti, jonka tehtävä on
nopeuttaa tietokoneen toimintaa. Välimuistissa pyritään pitämään
sellaisten muistipaikkojen sisältöjä, joihin todennäköisesti
pian viitataan.
Muistihierarkia
Ihannetapauksessa tietokoneessa olisi käytettävissä suuri määrä
hyvin nopeaa muistia, mutta käytännössä tilanne on aina toinen:
suurikapasiteettisesta muistista on vaikea tehdä nopeaa, ja nopea
muisti on kallista. Tästä syystä on järkevää tehdä muistista
hierarkia, jossa mahdollisimman lähellä suoritinta on pienin ja
nopein muisti, vähän siitä kauempana vähän suurempi ja vähän
hitaampi, ja kaikkein kauimpana suurin ja hitain. Nopeimmassa
muistissa pyritään pitämään aina sitä osaa tiedosta, jota
suurimmalla todennäköisyydellä tullaan pian tarvitsemaan, ja
hitaimmassa muistissa on tallessa kaikki talletetut tiedot.
Suorittimen rekisterit ja massamuistilaitteet kuten kiintolevyt
voidaan myös ajatella osaksi muistihierarkiaa, vaikka ne
toimivatkin eri tavalla: rekistereiden käyttö on määritelty jo
ohjelmakoodissa ja kiintolevylle sivuttamisesta huolehtii käyttöjärjestelmä
virtuaalimuistin avulla.
Tietokoneohjelmien muistinkäyttö on yleensä toistuvaa ja
paikallista. Tämä tarkoittaa sitä, että jos jotain kohtaa
muistista on juuri käytetty, sitä tai sen lähellä olevia
muistipaikkoja tullaan suurella todennäköisyydellä käyttämään
lähitulevaisuudessa.
Välimuisti perustuu näihin huomioihin. Aina kun muistista haetaan
tietoa, tarkastetaan ensin löytyykö tieto välimuistista. Jos
tieto löytyy jo ennestään välimuistista, se haetaan suoraan
sieltä. Tätä kutsutaan välimuistin osumaksi. Jos tietoa ei löydy
välimuistista, se haetaan hitaammasta muistista ja talletetaan
samalla välimuistiin. Tätä kutsutaan välimuistihudiksi. Jos välimuisti
on täysi, siellä ollut vanhempi tieto väistyy uuden tieltä. Jos
välissä on ollut paljon muita muistioperaatiota ennen kuin samaa
tietoa tarvitaan uudelleen, tieto ei enää olekaan välimuistissa,
ja se pitää hakea uudestaan hitaammasta muistista.
Koska edellisten muistioperaatioiden käyttämien osoitteiden lähellä
olevia osoitteita tullaan suurella todennäköisyydellä käyttämään,
välimuistiin tallennetaan yleensä joitain muistipaikkoja haetun
osoitteen ympäriltä. Tällöin myös näihin lähimuistiosoitteisiin
viittaavat muistihaut voivat osua välimuistiin, vaikka kyseisestä
osoitteesta ei olekaan haettu tietoa lähiaikoina.
Välimuistin osumien suhdetta kaikkien muistioperaatioiden määrään
kutsutaan välimuistin osumatarkkuudeksi. Tämä luku ei ole mikään
kiinteä yleispätevä luku, vaan se vaihtelee järjestelmän
kuormitusasteen ja ohjelmien käyttäytymisen mukaan.