Välimuisti [1] [2] [3] [4] tai välimuisti [5] [6] [7] ( engl. cache , ranskasta cacher - "piilota"; lausutaan [ kæʃ ] - "välimuisti") - välipuskuri nopea pääsy siihen, joka sisältää tietoja, joita voidaan pyytää suurimmalla todennäköisyydellä. Välimuistissa olevien tietojen käyttö on nopeampaa kuin alkuperäisten tietojen hakeminen hitaammalta muistilta tai etälähteestä, mutta sen määrä on huomattavasti rajoitettu verrattuna lähdetietovarastoon.
Sanaa "välimuisti" käytettiin ensimmäisen kerran tietokonekontekstissa vuonna 1967 valmisteltaessa artikkelia julkaistavaksi IBM Systems Journal -lehdessä . Artikkeli käsitteli muistin parannuksia kehitteillä olevan IBM System/360 - mallin 85 . Lehden toimittaja Lyle Johnson pyysi kuvaavampaa termiä kuin "high-speed buffer", mutta ideoiden puutteen vuoksi hän itse ehdotti sanaa "kätkö". Artikkeli julkaistiin vuoden 1968 alussa, kirjoittajat palkittiin IBM :ltä , heidän töitään levitettiin ja parannettiin myöhemmin, ja sanasta "kätkö" tuli pian yleinen termi tietokonekirjallisuudessa [8] .
Välimuisti on nopeammalla pääsynopeudella varustettu muisti, joka on suunniteltu nopeuttamaan pysyvästi muistissa olevien tietojen käyttöä pienemmällä käyttönopeudella (jäljempänä "päämuisti"). Välimuistia käyttävät CPU , kiintolevyt , selaimet , web-palvelimet , DNS- ja WINS - palvelut .
Välimuisti koostuu joukosta merkintöjä. Jokainen merkintä liittyy tietoelementtiin tai tietolohkoon (pieneen tietoon), joka on kopio päämuistissa olevasta tietoelementistä. Jokaisella tiedolla on tunniste , jota usein kutsutaan tunnisteeksi , joka määrittää vastaavuuden välimuistissa olevien tietokohteiden ja niiden vastineiden välillä päämuistissa.
Kun välimuistiasiakas (CPU, verkkoselain, käyttöjärjestelmä) käyttää tietoja, välimuisti tutkitaan ensin. Jos välimuistista löytyy merkintä, jonka tunnus vastaa pyydetyn kohteen tunnusta, välimuistissa olevia kohteita käytetään. Tällaista tapahtumaa kutsutaan välimuistiosuukseksi . Jos välimuistista ei löydy pyydetyn tietoelementin sisältävää merkintää, se luetaan päämuistista välimuistiin ja tulee saataville myöhempiä käyttöjä varten. Tällaista tapausta kutsutaanvälimuistin ikävä . Välimuistin osumien prosenttiosuutta, kun tulos löydetään, kutsutaan osumasuhteeksi tai välimuistin osumasuhteeksi .
Esimerkiksi verkkoselain tarkistaa paikallisesta levyvälimuististaan, löytyykö pyydettyä URL-osoitetta vastaavan Web-sivun paikallinen kopio. Tässä esimerkissä URL-osoite on tunniste ja verkkosivun sisältö tietoelementtejä.
Jos välimuisti on kooltaan rajoitettu, väliin jäämisen yhteydessä saatetaan päättää hylätä osa sisääntulosta tilan vapauttamiseksi. Erilaisia häätöalgoritmeja käytetään valitsemaan hylättävä tietue .
Kun välimuistin tietokohteita muutetaan, ne päivitetään päämuistiin. Aikaviivettä välimuistin tietojen muuttamisen ja päämuistin päivityksen välillä ohjataan ns. kirjoituskäytännöllä .
Vain kirjoitus -välimuistissa jokainen muutos aiheuttaa synkronisen päivityksen päämuistissa oleviin tietoihin.
Takaisinkirjoitus (tai takaisinkirjoitus) -välimuistissa päivitys tapahtuu, kun tietoelementti häädetään , määräajoin tai asiakkaan pyynnöstä. Muokattujen tietokohteiden seuraamiseksi välimuistin merkinnät tallentavat muokkauslipun ( muokattu tai "likainen" ). Välimuistin puuttuminen takaisinkirjoituksella voi vaatia kaksi pääsyä päämuistiin: ensimmäinen kirjoittaa korvatun tiedon välimuistista, toinen lukeakseen vaaditun tietoelementin.
Jos päämuistissa olevia tietoja voidaan muokata välimuistista riippumatta, välimuistin merkintä voi vanhentua . Tietojen johdonmukaisuutta ylläpitävien välimuistien välisiä kommunikointiprotokollia kutsutaan välimuistin koherenssiprotokolliksi .
Prosessorien toimintataajuuden kasvun ja RAM-alijärjestelmän ( RAM) suorituskyvyn kasvun vuoksi tiedonsiirtoliitännästä on tullut laskentajärjestelmän pullonkaula.
Välimuisti voi tarjota merkittäviä suorituskykyetuja, kun RAM-muistin kellonopeus on huomattavasti pienempi kuin prosessorin kellonopeus. Useissa prosessorimalleissa on oma välimuisti, joka minimoi käyttöajan RAM-muistiin, joka on hitaampi kuin rekisterit (näitä rekistereitä ja I/O-puskureita voidaan pitää välimuistitason nollana). Välimuistin kellonopeus ei yleensä ole paljon pienempi kuin suorittimen taajuus.
Virtuaaliosoitteita tukevat prosessorit sisältävät usein pienen, nopean osoitteenmuunnospuskurin (TLB). Sen nopeus on tärkeä, koska se kysytään jokaisen muistin käytön yhteydessä.
Eri välimuistien (sekä yhden että usean prosessorin) välinen synkronointiongelma ratkaistaan välimuistin koherenssilla .
Tietojen vaihtamiseen eri tasoisten välimuistien tai, kuten sanotaan, välimuistiarkkitehtuurien välillä on kolme vaihtoehtoa: inclusive, exclusive ja non-exclusive.
Yksinomainen välimuisti olettaa välimuistin eri tasoilla sijaitsevien tietojen ainutlaatuisuuden ( AMD :n suosima ).
Ei-yksinomaisissa välimuistit voivat käyttäytyä kuten haluavat.
Prosessorin välimuistin tasotCPU-välimuisti on jaettu useisiin tasoihin. Välimuistien enimmäismäärä on neljä. Yleisessä prosessorissa tasojen lukumäärä voi tällä hetkellä olla jopa kolme. Tason N+1 välimuistit ovat yleensä suurempia ja hitaampia pääsyssä ja tiedonsiirrossa kuin tason N välimuistit.
Yksi välimuistin perusominaisuuksista - assosiatiivisuuden taso - heijastaa sen loogista segmentointia, joka johtuu siitä, että kaikkien välimuistirivien peräkkäinen luettelointi tarvittavan tiedon etsimiseksi vaatisi kymmeniä syklejä ja mitätöisi kaiken hyödyn käyttämällä CPU:n sisäänrakennettua muistia. Siksi RAM-solut on kiinteästi kytketty välimuistilinjoihin (jokainen rivi voi sisältää dataa kiinteästä osoitejoukosta), mikä vähentää merkittävästi hakuaikaa.
Samalla välimuistikoolla suurempi assosiatiivisuus on vähiten nopea, mutta tehokkain (neljäsäikeisen toteutuksen jälkeen "ominaistehokkuuden" kasvu säiettä kohti kasvaa vain vähän).
Monet tallennusoheislaitteet käyttävät sisäistä välimuistia nopeuttaakseen asioita, erityisesti kiintolevyt käyttävät 1 Mt - 256 Mt välimuistia ( NCQ / TCQ -mallit käyttävät sitä tallennus- ja kyselynkäsittelyyn), CD/DVD/BD-levyt myös tallentavat lukutiedot välimuistiin nopeuttaakseen haku.
Käyttöjärjestelmä käyttää myös osaa RAM-muistista välimuistina levytoimintoihin (esimerkiksi ulkoisille laitteille, joilla ei ole omaa välimuistia, mukaan lukien kiintolevyt, flash-muisti ja levykkeet). Usein kaikki ilmainen (ei prosesseille osoitettu) RAM tarjotaan kiintolevyjen välimuistiin.
Ulkoisten asemien välimuistin käyttö johtuu seuraavista tekijöistä:
Luettaessa välimuisti antaa sinun lukea lohkon kerran, tallentaa sitten yhden kopion lohkosta RAM-muistiin kaikille prosesseille ja palauttaa lohkon sisällön "välittömästi" (verrattuna levypyyntöön). On olemassa "ennakkopyyntö" -tekniikka - taustalla käyttöjärjestelmä lukee myös seuraavat muutamat lohkot (vaatimuksen jälkeen) välimuistiin.
Kirjoittaessasi välimuistin avulla voit ryhmitellä lyhyitä tietueita suurempiin tietueisiin, joita asemat käsittelevät tehokkaammin, tai välttää välimuutosten kirjoittamista. Tässä tapauksessa kaikki lohkon välitilat näkyvät prosesseille RAM-muistista.
Ulkoisen tallennustilan välimuisti parantaa huomattavasti järjestelmän suorituskykyä optimoimalla I/O-käytön. Tekniikan etuna on läpinäkyvä (ohjelmille näkymätön) automaattinen levymuistin käytön optimointi, kun tiedostojen kanssa työskentelevien sovellusten logiikka pysyy ennallaan.
Kirjoitusvälimuistin haittapuoli on aika, joka kuluu ohjelman kirjoituspyynnön ja lohkon varsinaisen levylle kirjoittamisen välillä, sekä kirjoitusten uudelleenjärjestäminen, mikä voi johtaa tietojen menettämiseen tai rakenteen epäjohdonmukaisuuksiin sähkökatkon tai järjestelmän aikana. ripustaa. Tätä ongelmaa lieventää pakotettu säännöllinen synkronointi (muuttuneiden välimuistirivien kirjoittaminen) ja tiedostojärjestelmän kirjaaminen.
Dataa luettaessa välimuisti parantaa suorituskykyä selvästi. Tietoja kirjoitettaessa voittoja voidaan saada vain heikentyneen luotettavuuden kustannuksella. Siksi eri sovellukset voivat valita eri välimuistin kirjoituskäytännöt.
On olemassa kaksi päämuistin kirjoituskäytäntöä - läpikirjoitus ja takaisinkirjoitus:
Aluksi kaikki puskurin otsikot sijoitetaan vapaalle puskuriluettelolle. Jos prosessi aikoo lukea tai muokata lohkoa, se suorittaa seuraavan algoritmin:
Prosessi lukee tiedot vastaanotettuun puskuriin ja vapauttaa sen. Muokkauksen tapauksessa prosessi merkitsee puskurin "likaiseksi" ennen sen vapauttamista. Kun puskuri vapautetaan, se sijoitetaan vapaan puskuriluettelon kärkeen.
Tällä tavalla:
Jos vapaiden puskurien luettelo on tyhjä, puskurin tyhjennysalgoritmi suoritetaan. Häätöalgoritmi vaikuttaa merkittävästi välimuistin suorituskykyyn. On olemassa seuraavat algoritmit:
Yhden tai toisen algoritmin käyttö riippuu tiedon välimuististrategiasta. LRU on tehokkain, jos tiedot taataan uudelleenkäyttöön mahdollisimman pian. MRU on tehokkain, jos tietoja ei taatusti käytetä uudelleen lähiaikoina. Jos sovellus määrittää nimenomaisesti välimuististrategian jollekin datajoukolle, välimuisti toimii tehokkaimmin.
RAM-välimuisti koostuu seuraavista elementeistä:
Tietojen siirtämisessä verkon kautta voidaan käyttää web-sivujen välimuistia - prosessia, jossa usein pyydettyjä asiakirjoja tallennetaan (väli) välityspalvelimille tai käyttäjän koneelle, jotta voidaan estää niiden jatkuva lataaminen lähdepalvelimelta ja vähentää liikennettä . Näin tieto siirtyy lähemmäs käyttäjää. Välimuistia ohjaavat HTTP - otsikot.
Vaihtoehtoisesti web-sivujen välimuisti voidaan tehdä käyttämällä tietyn sivuston CMS :ää palvelimen kuormituksen vähentämiseksi suuren liikenteen aikana. Välimuisti voidaan tehdä sekä muistissa että tiedostovälimuistissa [9] . Välimuistiin tallennuksen haittapuoli on, että yhdessä selaimessa tehdyt muutokset eivät välttämättä heti näy toisessa selaimessa, joka hakee tietoja välimuistista.
Monet ohjelmat kirjoittavat jonnekin työn väli- tai aputuloksia, jotta niitä ei lasketa joka kerta, kun niitä tarvitaan. Tämä nopeuttaa työtä, mutta vaatii lisämuistia (RAM tai levy). Esimerkki tällaisesta välimuistista on tietokannan indeksointi .
prosessoritekniikat | Digitaaliset|||||||||
---|---|---|---|---|---|---|---|---|---|
Arkkitehtuuri | |||||||||
Ohjesarjan arkkitehtuuri | |||||||||
koneen sana |
| ||||||||
Rinnakkaisuus |
| ||||||||
Toteutukset | |||||||||
Komponentit | |||||||||
Virranhallinta |