Podtečení vyrovnávací paměti - Buffer underrun

v výpočetní, podtečení bufferu nebo podtečení vyrovnávací paměti je stav nastávající, když a nárazník slouží ke komunikaci mezi dvěma zařízeními nebo procesy je krmeno data nižší rychlostí, než se z ní načítají data. Termín je odlišný od přetečení zásobníku, stav, kdy část paměti používaná jako vyrovnávací paměť má pevnou velikost, ale je vyplněna více než tímto množstvím dat. To vyžaduje, aby program nebo zařízení čtení z vyrovnávací paměti pozastavilo jeho zpracování, zatímco se vyrovnávací paměť doplní. To může způsobit nežádoucí a někdy vážné vedlejší účinky, protože data, která se ukládají do vyrovnávací paměti, se obecně nehodí k přístupu typu stop-start tohoto druhu.

Ve smyslu souběžné programování, podtečení vyrovnávací paměti lze považovat za formu hladovění zdrojů.

Pojmy podtečení vyrovnávací paměti a podtečení vyrovnávací paměti se také používají přepsání vyrovnávací paměti, podmínka podobná přetečení vyrovnávací paměti, ale kde je program napálen do zápisu před začátkem vyrovnávací paměti, přepíše tam potenciální data, jako bity povolení.[1]

Obecné příčiny a řešení

Buffer podtečení jsou často výsledkem přechodných problémů týkajících se spojení který se ukládá do vyrovnávací paměti: buď spojení mezi dvěma procesy, o které ostatní soutěží procesor čas nebo fyzické spojení se zařízeními soutěžícími o šířka pásma.

Nejjednodušší ochranou proti těmto problémům je zvětšení velikosti vyrovnávací paměti - pokud je příchozí datový tok je třeba číst rychlostí 1 bit za sekundu, vyrovnávací paměť 10 bitů by umožnila blokování připojení až na 10 sekund před selháním, zatímco jeden ze 60 bitů by umožnil zablokování až na minutu. To však vyžaduje, aby proces nebo zařízení mělo k dispozici více paměti, což může být drahé. Předpokládá, že vyrovnávací paměť začíná plná - vyžaduje potenciálně významnou pauzu před zahájením procesu čtení - a že vždy zůstane plná, pokud není aktuálně blokováno připojení. Pokud data v průměru nepřijdou rychlejší než je potřeba, jakékoli blokování připojení bude kumulativní; „propadnutí“ jednoho bitu každou minutu na hypotetické připojení s 60bitovou vyrovnávací pamětí by vedlo k podtečení vyrovnávací paměti, pokud by připojení zůstalo aktivní po dobu jedné hodiny. V aplikacích v reálném čase velká velikost vyrovnávací paměti také zvyšuje latenci mezi vstupem a výstupem, což je nežádoucí v aplikacích s nízkou latencí, jako jsou videokonference.

Problémy se záznamem na CD a DVD

Podtečení vyrovnávací paměti může během způsobit vážné problémy Vypalování CD / DVD, protože jakmile je psaní zahájeno, nemůže se zastavit a bezchybně pokračovat; pauza potřebná k podjetí tedy může způsobit neplatnost dat na disku. Vzhledem k tomu, že vyrovnávací paměť se obecně plní z relativně pomalého zdroje, jako je a pevný disk nebo jiný disk CD / DVD, velká zátěž procesoru nebo paměti z jiných souběžných úkolů může snadno vyčerpat kapacitu malého bufferu. Proto se nazývá technika ochrana proti podtečení vyrovnávací paměti byl implementován různými jednotlivými prodejci vypalovaček CD / DVD pod různými ochranné známky, jako Plextor BurnProof, Nero UltraBuffer, Yamaha SafeBurn, JustLink a Seamless Link. S touto technikou je laser skutečně schopen přestat psát po jakoukoli dobu a pokračovat, když je vyrovnávací paměť znovu plná. Rozdíl mezi následnými zápisy je extrémně malý.

Další způsob ochrany před problémem při používání přepisovatelná média (CD-RW, DVD-RW, DVD-RAM ), je použít UDF souborový systém, který organizuje data v menšíchbalíčky ", na které odkazuje jediná aktualizovaná tabulka adres, kterou lze proto zapisovat v kratších sériích.

Přehrávání multimédií

Pokud framebuffer z grafický řadič není aktualizován, obraz na obrazovce počítače bude pravděpodobně viset, dokud vyrovnávací paměť nepřijme nová data. Mnoho programů pro přehrávání videa (např. MPlayer ) mají schopnost přetahovat snímky, pokud je systém přetížen, což záměrně umožňuje podtečení vyrovnávací paměti, aby udržovalo tempo.

Vyrovnávací paměť v zvukový ovladač je ring buffer. Pokud dojde k podtečení a zvukový řadič není zastaven, bude buď opakovat zvuk obsažený ve vyrovnávací paměti, nebo bude ticho výstupu záviset na implementaci. Takový účinek se běžně označuje jako „kulomet“ nebo Max. Světlá výška koktavý efekt. To se stane, pokud operační systém zablokuje během přehrávání zvuku. Rutina zpracování chyb (např. modrá obrazovka smrti ) může nakonec zastavit zvukový ovladač.

Reference

  1. ^ "CWE-124: Buffer Underwrite ('Buffer Underflow')" ". CWE.