Vahemälu
Autor: Raido Aarop, A21
--Raarop 23:46, 24 October 2011 (EEST)
Sissejuhatus
Vahemälu (ingl. k. cache) Kasutatakse korduvalt vajaminevate andmete hoidmiseks ja serveerimiseks. Vahemälu kasutamisel puudub vajadus pöörduda andmete algallika poole (kõvaketas, RAM, CPU jne), vaid andmed serveeritakse vahemälust. Tänu selle suureneb arvutisüsteemi töö kiirus.
Valimaks, millised andmeid vähemälus hoida on kasutusel erinevaid loogikaid, vastavalt süsteemi otstarbele.
Vahemälu õige kasutamisega on võimalik kogu süsteemi tööd kardinaalselt optimiseerida (kiirendada).
Mõned süsteemid, kus vahemälu on kasutusel:
- Arvuti protsessor (CPU)
- Salvestuseadmed (Information Storage)
Arvuti protsessor (ingl. k. CPU – Central Processing Unit)
Tänapäeval on protsessorite kiirus (sagedus) ületanud mälude kiiruse (sageduse) mitmekordselt. On võimalik valmistada ka sama kiired mälukiipe, kuid nende hind oleks väga kõrge. Suure mahuga kiired mälud oleksid väga kallid. Samuti tekiks probleem mälu andmete kirjutamisega salvestuseadmetele.
Lahendus tekib siis, kui kasutaba väikese mahuga kiiret mälukiipi, mis on toimiks protssesori ja ülejäänud mälu vahel. See kiire mälukiip täidaks vahemälu ülesannet. Vahemällu salvestatakse enim kasutatavad käsud ja nende vastused. Seega sama käsu saamisel teisel korral jääb ära põhimällu pöördumine käsu väljalugemiseks ja protsessori töö käsu täitmisel.
Kuigi von Neumann-i arhitektuuri järgi on tänapäeva arvutitel andmed ja käsud säilitatud samas mälus, siis vahemälude puhul, see reegel ei kehti. Andmeid ja käske hoitakse erinevates vahemäludes. Tänapäeva protsessoritel on enamjaolt kolme tasandilised vahemälud.
Vahemälud on eriti efektiivsed, kuna tänapäeva operatsioonisüsteemid ja programmid kasutavad väga palju samu meetoteid korduvalt.
Salvestuseadmed (ingl. k. Information Storage Devices)
Kõige tavalisem kasutus vahemälule on tavalises kõvakettas, mida leidub pea igas arvutis. Selleks et operatsioonisüsteem saaks mingi infolt kõvakettalt lugeda, peab kõvaketas lugemispea viima õigesse kohta ja liigutama magnetketast. See on aga füüsiline töö ja võib väga palju aega nõuda, eriti kui andmed ei asu järest ühel kettal.
Vahemäluna on kasutusel mälukiip, kuhu siis salvestatakse kettalt loetud andmed ja kettale salvestatavad andmed.
Kõvaketta vahemälu jaguneb kaheks osas vastavalt andemete osa ja märgistusosa, milles registreeritakse andmeta asukoht kõvakettal, kas andmed on kirjutatud kõvakettale ja samuti ka aeg millal neid andmeid viimati kasutati. Märgistusosa oleva aja järgi otsustatakse, kas need andmed on veel vajalikud ja jäävad edasi vahemällu või siis võib vastavad andmed kustutada.
Kõvaketta lugemisoperatsiooni ajal pöördutakse kõige pealt vahemälu poole sooviga saada andmeid. Kui need andmed on olemas, siis tagastatakse need väga kiirelt, kõvaketta enda poole pöördumata. Kui aga andemd puuduvad, siis pöördutakse edasi kõvaketta poole, loetakse sealt vajalikud andmed vahemällu ja alles siis tagastatakse süsteemile.
Kõvakettale kirjutamisoperatisooni ajal kirjutatakse andmeid kõigepealt vahemällu. Seejärel võib süsteem käituda kahel viisil, kas kirjutada andmed kohe vahemälust kõvakettale, mis on ohutum aga aeglasem, või siis kirjutda andmed kõvakettale hetkedel, kui kõvaketta kirjutamispea on sobivates kohtades. Viimane viis on kiirem kuid mitte nii ohutu ,kuna vähemälus olevad admed võivad rikke puhul kaduma minna.
Vahemälu koherentsus
Kui on kasutustel kaks paraleelset toimivat süsteemi tekib probleeme vahemälude koherentusega. Ühe süsteemi vahemälus olevad andmed võivad olla juba töödeldud, kuid teine süsteem ei tea sellest midagi. Nii võivad tekkida vead süsteemi töös. Selleks, et seda vältida on kasutusele võetud koherentsuse tagamise protokollid. Erinevad süsteemid kasutavad erinevaid protokolle, vastavalt süsteemi ülesehitusele pöörates rõhku optimaalsesle töökiirusele.
Üks levinumaid viise tomib selliselt, et süsteem kuulutab milliseid andmeid ta soovib vahemälust lugeda/kirjutada. Teine süsteem kuulab ja reageerib vastavalt. Kui teise süsteemi vahemälus on uuemad andmed, siis tagastab ta need ise. Kui aga juhtub et teisel süteemil on vanemad andmed, siis ta märgib need andmed hoopis kehtetuks.
Allikad
What Every Programmer Should Know About Memory
Multicore Application Programming: For Windows, Linux, and Oracle® Solaris, Darryl Gove, 2010 Information Storage and Management: Storing, Managing, and Protecting Digital Information, G. Somasundaram; Alok Shrivastava, 2009