Vahemälu: erinevus redaktsioonide vahel

Eemaldatud sisu Lisatud sisu
6Anesthesia (arutelu | kaastöö)
Resümee puudub
1. rida:
'''Vahemälu''' <ref>Большой толковый словарь русского языка / автор, сост. и гл. ред. С. А. Кузнецов. 2000 г. РАН Институт лингвистических исследований</ref><ref>Захаренко Е. Н., Комарова Л. Н., Нечаева И. В. Новый словарь иностранных слов. М.: 2003</ref><ref>Толковый словарь по вычислительной технике. Microsoft Press, из-во «Русская Редакция», 1995</ref><ref>Русский орфографический словарь: около 180 000 слов / Российская академия наук. Институт русского языка им. В. В. Виноградова / О. Е. Иванова, В. В. Лопатин (отв. ред.), И. В. Нечаева, Л. К. Чельцова. — 2-е изд., испр. и доп. — М.: 2004. — 960 с.</ref> ([[inglise keel|inglise]] ''cache''; [[prantsuse keel|prantsuse]] ''cacher'' — peita; hääldatakseIPA: [{{IPA|kæʃ}}]) on komponent, mis hoiustab andmeid nende kiireks uuesti kasutamiseks. Vahemälust andmete lugemine on kiirem kui lähteandmete lugemine [[muutmälu]]st (RAM) või kõvakettalt. Vahemälu kasutamise tulemusena väheneb korduvalt kasutatavate andmete lugemseks kulunud aeg ja suureneb üldine tulemuslikkus arvutisüsteemis.
 
== Ajalugu ==
 
Esimest korda kasutati sõna "cache" elektroonilises kontekstis aastal [[1967]] artiklis, mis kirjutati avaldamiseks ajakirjas «[[IBM Systems Journal]]». Artikkel puudutas mälu parandamist väljatöötataval mudelil 85-seeriast [[IBM System/360]]. Ajakirja toimetaja Lyle Johnson palus välja mõelda tabavam termin kui "ülikiire puhver”, kuid ideede puudumise tõttu soovitas ta ise sõna "cache". See artikkel ilmus 1968. aasta alguses, autorid pälvisid [[IBM]] preemia, nende töö levis ja on hiljem parandatud, aga sõna "cache" hakati peagi kasutama arvutialases kirjanduses nagu üldtunnustatud terminit.
 
9. rida ⟶ 8. rida:
Vahemälu on suure juurdepääsukiirusega mälu, mille eesmärk on saavutada vähima juurdepääsuajaga ligipääs andmetele, mis sisalduvad püsimälus (edaspidi "[[põhimälu]]s"). Vahemälu kasutatakse keskprotsessoris ([[CPU]]), [[kõvaketas]]tel, [[brauser]]ites, [[veebiserver]]ites, [[Domeeninimede süsteem|DNS]]-is ja [[WINS]]-is.
 
Vahemälu koosneb kirjete kogumist. Iga kirje on seotud andmeühikuga või andmete blokiga (väikese osaga andmetest), mis on andmeühiku koopia püsimälus. Igal sissekandel on tunnus -ID, mis määratleb andmeühikute vastavuse vahemälus nende koopiatega põhimälus.
 
Kui vahemälu kasutaja ([[CPU]], [[veebibrauser]], [[operatsioonisüsteem]]) soovib andmeid, uuritakse kõigepealt vahemälu. Kui vahemälus leitakse kirje ID-ga, mis sobib otsitud andmeühiku ID-ga, siis kasutatakse andmeelementide vahemälu. Seda nimetatakse vahemälu tabamuseks (''cache hit''). Kui vahemälust ei leitud kirjet, mis sisaldab otsitud ID-d, siis loetakse see põhimälust vahemällu ja on sealt edaspidistel vahemälu otsingutel kättesaadav. Seda nimetatakse vahemälu möödalask (''cache miss''). Vahemälust leitud tulemuste protsenti võrreldes päringutega nimetatakse cache tabamuse tasemeks või tabamuse koefitsiendiks.
 
Näiteks veebilehitseja kontrollib [[URL]]-s küsitud veebilehe lokaalse koopia olemasolu ketta lokaalses vahemälus. Selle näite puhul on URL tunnus, aga veebilehe sisu – see on andmete osadosa.
 
Kui vahemälu maht on piiratud, siis möödalase puhul võib olla vastu võetud otsus loobuda mõnest salvestusest vaba ruumi tekitamiseks. Väljajäetava salvestuse valikuks kasutatakse erinevaid algoritmide väljasurumiseid. Kui modifitseeritakse vahemälu andmete osasid, toimub nende ajakohastamine põhimälus. Viivitust ajas vahemälu andmete muutmise ja põhimälu uuendamise vahel kontrollib niinimetatud “kirjete poliitika”.
19. rida ⟶ 18. rida:
''Write-through'' vahemälus kutsub iga muudatus esile sünkroonse andmete uuendamise põhimälus.
 
''Write-back'' vahemälu uuendamine toimub andmeelementide eemaldamisel perioodiliselt või kliendi päringu järel. Et jälgida modifitseeritud andmeelemente, säilitavad vahemälu kirjed modifitseerimise tunnuse (“muudetud”). Möödalask ''write-back cache''’st<nowiki>'</nowiki>st võib nõuda kahte pöördumist põhimälu juurde: esiteks vahemälust andmeelementide üleskirjutamiseks, teiseks vajaliku andmeelemendi lugemiseks.
 
Juhul, kui andmeid põhimälus saab muuta sõltumata vahemälust, võib vahemälu kirje muutuda mitteaktuaalseks. Vahemälude vahelisi koostööprotokolle, mis säilitavad andmete kooskõlastust, nimetatakse vahemälu sidususe [[protokoll]]ideks.
 
== Keskprotsessori vahemälu==
 
Mitmed keskprotsessori (CPU) mudelid omavad oma vahemälu selleks, et minimeerida ligipääsu põhimälule ([[muutmälu]]), mis on aeglasem kui registrid. Vahemälu võib anda olulise jõudluse kasvu, juhul kui RAM-i [[taktsagedus]] on oluliselt väiksem keskprotsessori CPU taktsagedusest. Vahemälu taktsagedus ei ole tavaliselt palju väiksem kui CPU.
 
41. rida ⟶ 39. rida:
 
=== Vahemälu assotsiatiivsus===
 
Üks põhilisi vahemälu omadusi – assotsiatiivsuse tase – näitab tema loogilist segmenteerimist. Asi on selles, et vajalike andmete otsimiseks vahemälu kõikide ridade järjestikune skanneerimine nõuaks kümneid takte ja muudaks kasutuks sisseehitatud keskprotsessori mälu kasutamise. Seepärast on muutmälu pesikud jäigalt seotud vahemälu ridade külge (igal real võivad olla fikseeritud aadresside komplektide andmed), mis vähendab oluliselt otsingu aega. Iga RAM pesik võib olla seotud rohkem kui ühe vahemälu reaga: näiteks, <math>n</math>- kanali assotsiatiivsus (inglise <math>n</math>-''way set associative'') tähendab, et mõne operatiivmälu aadressi informatsioon võib olla hoiul <math>n</math> asukohas vahemälus.
 
47. rida ⟶ 44. rida:
 
== Väliste kõvaketaste puhverdamine==
Paljud andmete salvestuse välisseadmed kasutavad vahemälu töö kiirendamiseks, eriti kõvakettad kasutavad vahemälu 1 kuni 64 MB (NCQ/TCQ toetusega mudelid kasutavad seda päringute hoiustamiseks ja töötlemiseks), [[CD (andmekandja)|CD]]/[[DVD]]/BD-plaatide lugemisseadmed samuti puhverdavad loetavat teavet, et sama info poole teistkordne pöördumine oleks kiirem. Samuti kasutab operatsioonisüsteem osa muutmälust kettaoperatsioonide vahemäluna (sealhulgas väliste seadmete jaoks, millel endal ei ole vahemälu, nt. kõvakettad, [[flash-mälu]], CD).
 
Paljud andmete salvestuse välisseadmed kasutavad vahemälu töö kiirendamiseks, eriti kõvakettad kasutavad vahemälu 1 kuni 64 MB (NCQ/TCQ toetusega mudelid kasutavad seda päringute hoiustamiseks ja töötlemiseks), [[CD (andmekandja)|CD]]/[[DVD]]/BD-plaatide lugemisseadmed samuti puhverdavad loetavat teavet, et sama info poole teistkordne pöördumine oleks kiirem. Samuti kasutab operatsioonisüsteem osa muutmälust kettaoperatsioonide vahemäluna (sealhulgas väliste seadmete jaoks, millel endal ei ole vahemälu, nt. kõvakettad, [[flash-mälu]], CD).
 
Väliste kõvaketaste puhverdamist õigustavad järgnevad tegurid:
# protsessori juurdepääsu kiirus muutmällu on mitu korda suurem kui väliste kõvaketaste mällu;
# väliste kõvaketaste mõningaid mälublokke kasutavad mitmed protsessid samaaegselt ja on mõttekas lugeda blokki üks kord, seejärel hoida muutmälus üks koopia blokist kõikide protsesside jaoks;
# pöördumine mõningate muutmälus olevate blokkide poole esineb palju sagedamini kui teistele, seega selliste blokkide jaoks puhverdamise kasutamine üldiselt suurendab süsteemi jõudlust.
# mõned väliste kõvaketaste mälublokid ei nõua peale muutmist kohest salvestamist ja selliste blokkide puhul vahemälu kasutamine optimeerib sisend-väljund kasutamise.
 
== Puhverdamine läbi operatsioonisüsteemi ==
 
Muutmälu vahemälu koosneb järgmistest elementidest:
# muutmälu lehekülgede hulk, mis on jagatud puhvriteks, mis on pikkuselt võrdsed vastava välismälu seadme andmeblokile;
# puhvrite nimetuste kogu, mis kirjeldavad vastava puhvri seisukorda;
# hash tabelid, mis sisaldavad bloki numbri vastavust nimetusele;
65. rida ⟶ 60. rida:
 
=== ''Write-back'' vahemälu töö algoritm===
 
Algselt on kõik puhvrite nimetused paigutatud vabade puhvrite nimekirja. Kui protsess kavatseb lugeda või muuta plokki, siis ta täidab järgmise algoritmi:
 
# püüab leida hash tabelis (räsitabelis) puhvri nimetuse antud numbriga;
# juhul, kui antud puhver on hõivatud, siis ootab tema vabanemist;
# juhul, kui puhvrit hash tabelis ei leita, võtab esimese vaba puhvri vabade puhvrite nimekirja lõpust;
# juhul, kui vabade puhvrite nimekiri on tühi, siis toimub algoritmi nihe (vt allpool);
# juhul, kui antud puhver on märgitud kui “määrdunud”, kirjutab puhvri sisu asünkroonselt välisesse mällu;
# eemaldab puhvri hash tabelist, kui see oli sinna paigutatud;
# asetab uue numbriga puhvri hash tabelisse.
80. rida ⟶ 74. rida:
Seega:
 
# kui protsess luges mingi ploki puhvrisse, siis on tõenäoline, et teine protsess leiab selle ploki lugemiseks puhvri [[muutmälu]]st.
# välisesse mällu kirjutatakse andmed ainult siis, kui ei ole “puhtaid” puhvreid või nõudmise korral.
 
=== Väljasurumise algoritm===
Kui vabade puhvrite nimekiri on tühi, siis tehakse puhvris algoritmi nihe. Algoritmi nihe mõjutab oluliselt vahemälu tootlust. On olemas järgmised algoritmid:
 
# [[LFULRU]] (''Least FrequentlyRecently Used'') — väljasurutakse puhver, kõigemis harvemon kasutatudkõige puhverkauem kasutamata;
Kui vabade puhvrite nimekiri on tühi, siis tehakse puhvris algoritmi nihe. Algoritmi nihe mõjutab oluliselt vahemälu tootlust. On olemas järgmised algoritmid:
# [[LRUMRU]] (''LeastMost Recently Used'') — väljasurutakse viimati kasutatud puhver, mis on kõige kauem kasutamata;
# [[MRULFU]] (''MostLeast RecentlyFrequently Used'') — väljasurutakse kõige viimatiharvem kasutatud puhver;
# [[LFU]] (''Least Frequently Used'') — väljasurutakse kõige harvem kasutatud puhver;
# [[ARC]] (''Adaptive Replacement Cache'') — väljasurumise algoritm, LRU JA LFU kombinatsioon, patenteeritud [[IBM]].
 
Ühe või teise algoritmi kasutamine sõltub andmete puhverdamise strateegiast. LRU on kõige efektiivsem, kui on tagatud, et andmeid kasutatakse korduvalt lähitulevikus. MRU on kõige efektiivsem, kui on tagatud, et andmeid ei kasutata korduvalt lähitulevikus. Kui taotlus määratleb selgesõnaliselt teatud hulga andmete puhverdamise strateegia, töötab vahemälu kõige tõhusamalt.
 
== Tarkvara puhverdamine==
=== Üleskirjutamise poliitika puhverdamisel===
 
Vahemälu annab andmete lugemisel tootlikkuses suure kasu. Andmete üleskirjutamisel võib suur kasu tulla ainult usaldusväärsuse vähenemise hinnaga. Seega, erinevate juurdelisamiste puhul saab valida ühe või teise vahemälu üleskirjutamise poliitika.
 
On olemas kaks peamist vahemälu üleskirjutamise poliitikat – ''write-through cache'' ja ''write-back cache'':
# write-through – üleskirjutamine toimub vahetult põhimällu (ja dubleeritakse vahemällu), st. üleskirjutus ei ole puhverdatud;
# write-back – andmete üleskirjutamine toimub vahemällu. Kirjutamine põhimällu tehakse hiljem (väljatõrjumise või aja möödumise järel), rühmitades ühes operatsioonis mitu üleskirjutuse operatsiooni kõrvalasuvatesse pesikutesse. Write-back’iback'i töötlemise tehnoloogia teeb mõneks ajaks andmed põhimälus ebaolulisteks, keskprotsessori jaoks need ebaolulisused ei ole märgatavad, kuid enne teise juhtiva mälusüsteemi siini poole pöördumist ([[DMA controller]], sinihaldur-[[PCI]] siini seadmed) tuleb vahemälu salvestada mällu sunniviisiliselt. Kui kasutada write-back’iback'i mitmeprotsessilises süsteemis, siis erinevate keskprotsessorite vahemälud peavad olema kooskõlastatud (või peavad protsessorid kasutama sama vahemälu).
 
=== Veebilehtede puhverdamine ===
 
Informatsiooni ülekandmise protsessis läbi võrgu on võimalik kasutada veebilehtede puhverdamist – tihti küsitud dokumentide ladustamise protsessi (vahepealsetes) [[puhverserver|Proxy serverites]] või kasutaja arvutis, eesmärgiga takistada nende pidevat laadimist algserverist ja vähendada liikumist. Sellega teave lähendatakse kasutajale. Vahemälu juhtimine toimub [[HTTP]]-päiste abil.
 
109. rida ⟶ 100. rida:
 
=== Töötulemuste puhverdamine ===
Paljud programmid kirjutavad ükskõik kuhu vahepealsed ja abistavad töötulemused (ajutised, esialgsed), et mitte otsida neid iga kord, kui neid vajatakse. See kiirendab tööd, kuid nõuab lisamälu (põhimälu [[muutmälu]] või [[optiline andmekandja]]). Sellise puhverdamise näiteks on andmebaaside indekseerimine.
 
Paljud programmid kirjutavad ükskõik kuhu vahepealsed ja abistavad töötulemused (ajutised, esialgsed), et mitte otsida neid iga kord, kui neid vajatakse. See kiirendab tööd, kuid nõuab lisamälu (põhimälu [[muutmälu]] või [[optiline andmekandja]]). Sellise puhverdamise näiteks on andmebaaside indekseerimine.
 
== Vaata ka ==