Kasutaja:Eeroaaremaa/Puhvermälu

Puhvermälu on eriotstarbeline arvuti mäluseade või mäluala, mis võimaldab ajutise salvestuse abil vahetada andmeid kahe erinevate edastusparameetritega funktsionaalüksuse vahel. Puhvermälu hoiustatakse tihtipeale muutmälus ning kasutatakse sünkroonimata seadmete vahel või järjestiktalitlusega seadme ja rööptalitlusega seadme vahel või erinevate edastuskiirustega seadmete vahel.

Rakendused muuda

Puhvermälu kasutatakse tihtipeale ka vahelülina sisendseamdelt saadud andmete hoiustamiseks või vahetult enne väljundseadmesse admete edastamist.

Üks näide, kus puhvermälu kasutatakse on video ja heli voogedastusel, kus laetakse internetist andmed puhverisse, et seda sujuvalt esitada. Video otse internetist mängimisel võib tekkida ebaühtlusi või katkestusi aga puhvermälu aitab neid vältida.[1]

Lisaks sellele on puhvermälu kasutusel ka teiste arvuti osade töö parandamiseks. Sarnaselt vahemälule on puhver kasutusel kui nö. "vahepealne hoiustuskoht", kuid on disainitud erinevate arvutis toimuvate tegevuste koordineerimise toetamiseks.[2]


Puhvermälu ülevool muuda

Puhvermälu ülevool toimub siis, kui arvutiprogramm või protsess üritab kirjutada rohkem andmeid puhvermällu, kui seal nende jaoks ruumi on. Võib juhtuda, et programm hakkab eelnevalt puhvris olnud andmeid üle kirjutama ning sellisel juhul on tegu turvariskiga. See on võimalik vaid siis, kui programm ei sisalda parajaid piire, er kontrollida millal puhvermälu täis saab. [3]

Programmeerimiskeeled nagu C ja C++ on eriti haavatavad puhevermälu ülevooluga seotud rünnakutele, kuna neil ei ole sisseehitatud kaitset selliste rünnakute vastu. Samas moodsamad programmeerimiskeeled, nagu C#, Java ja Perl on selles osas turvalisust parandanud. Samas ei ole ükski programmeerimiskeskkond, mis annab võimaluse mälu otseselt mõjutada, ülevoolu rünnakute eest täiesti kaitstud.[4]

Näide muuda

Võtame näiteks C programmeerimiskeele ning loome seal 8 biti pikkuse puhveri ning paneme selle nimeks A.

char           A[8] = "";
unsigned short B    = 1979;

Seega näevad meie muutujad hetkel välja sellised:

muuutuja nimi A B
väärtus (tühi sõne) 1979
hex väärtus 00 00 00 00 00 00 00 00 07 BB

Nüüd anname programmile käsu salvestada puhvrisse A null-iga lõppev ASCII sõne "üleliigne".

strcpy(A, "üleliigne");

Paneme tähele, et sõne "üleliigne" on 9 tähemärgi pikkune aga kuna ta on null-iga lõppev siis on sõnes kokku 10 bitti. Käsk strcpy kirjtuab etteantud järjendisse valitud sõne. Kuna aga ei ole kontrollitud, kas sõne järjendi sisse mahub toimub ülevool, mis näeb välja järgmine:

muuutuja nimi A B
väärtus 'ü' 'l' 'e' 'l' 'i' 'i' 'g' 'n' 25856
hex väärtus c3bc 6c 65 6c 69 69 67 6e 65 00

Nagu tabelist näha, siis on viimane täht "e" ja null kirjutatud hoopis muutujasse B ning "e" koos nulliga teeb muutuja väärtuseks seega 25856.

Ülevoolu ärahoidmiseks saaks sellisel juhul kasutada käsu strcpy asemel käsku srtlcpy, mis kirjutab järjendisse nii palju andmeid kui võimalik aga mitte rohkem kui selle jaoks järjendis ruumi on. Käsk näeks välja järgmine:

strlcpy(A, "üleliigne", sizeof(A));

Näited muuda

  • Puhver on kasutusel modemites, mille kandelaine on kuni 14400 bit/s aga ühenduseks kasutatud COM pesa kiirus võib ulatuda 38400 bit/s.[5]
  • Enamikul riistvaraseadmetel on integreeritud puhver andmete liigutamiseks. Näiteks printerid kasutavad puhverit, et hoiustada arvutilt saadud käske ning kõvakettad kasutavad puhverit enimkasutatud andmete salvestamiseks, et neile oleks kiirelt ligi võimalik pääseda. Kõvaketaste puhver on tänapäeval 8 kuni 256 MB, samas pooljuhtketaste ehk SSD-ketaste puhvermälud võivad ulatuda 4 GBni.[6]

Vaata ka muuda

Vahemälu

Voogedastus

Viited muuda

  1. Christensson, P. (2006). Buffer Definition. Retrieved 2019, Dec 22, from https://techterms.com
  2. M. Rouse, J. Small (aprill 2005). "buffer". Tech Target. Vaadatud 22.12.2019.
  3. M. Rouse, M. Cobb (september 2016). "Buffer overflow". Tech Target. Vaadatud 22.12.2019.
  4. "What Is Buffer Overflow". Cloudflare. Vaadatud 22.12.2019.
  5. R. Chapin (1991). Info World. Lk 57.
  6. K. Arrows (6. august, 2019). "What is Hard Disk Buffer Size and Does it Matter?". Appulas. Vaadatud 22.12.2019. {{netiviide}}: kontrolli kuupäeva väärtust: |aeg= (juhend)