Nedostatek paměti - Out of memory

Na běžícím systému je obrazovka s nedostatkem paměti Linux Mint 9 (jádro 2.6.32)

Nedostatek paměti (OOM) je často nežádoucí stav provozu počítače, kdy nelze přidělit žádnou další paměť pro použití programy nebo operačním systémem. Takový systém nebude schopen načíst žádné další programy a protože mnoho programů může během provádění načíst další data do paměti, přestanou fungovat správně. K tomu obvykle dochází, protože veškerá dostupná paměť, včetně disku odkládací prostor, bylo přiděleno.

Dějiny

Historicky byl stav nedostatku paměti častější než nyní, od raných počítačů a operační systémy byly omezeny na malé množství fyzického paměť s náhodným přístupem (RAM) kvůli neschopnosti raných procesorů řešit velké množství paměti a také kvůli nákladům. Od příchodu virtuální paměť otevřel dveře pro využití odkládacího prostoru, stav je méně častý. Téměř všechny moderní programy očekávají, že budou schopny alokovat a uvolnit paměť volně za běhu, a mají tendenci selhat nekontrolovaným způsobem (havarovat), pokud toto očekávání není splněno; starší často přidělili paměť pouze jednou, zkontrolovali, zda mají dost na to, aby udělali veškerou svou práci, a pak nepočítali s tím, že už nebudou mít nic společného. Proto by buď okamžitě selhaly s chybovou zprávou „nedostatek paměti“, nebo fungovaly podle očekávání.[Citace je zapotřebí ]

Rané operační systémy jako např MS-DOS chyběla podpora pro multitasking. Programům byla přidělena fyzická paměť, kterou mohli používat podle potřeby. Fyzická paměť byla často vzácným zdrojem, a když ji vyčerpaly aplikace, jako jsou ty s Ukončit a zůstat rezidentem funkčnost, nebylo možné spustit další aplikace, dokud nebyly spuštěny spuštěné aplikace.

Moderní operační systémy poskytují virtuální paměť, ve které je procesům dán rozsah paměti, ale kde paměť přímo neodpovídá skutečné fyzické paměti RAM. Virtuální paměť lze zálohovat fyzickou RAM, souborem disku přes mmap (na Unix -derivatives) nebo MapViewOfFile (ve Windows), nebo vyměňte prostor, a operační systém může přesouvat stránky virtuální paměti podle potřeby. Vzhledem k tomu, že virtuální paměť nemusí být zálohována fyzickou pamětí, je její vyčerpání vzácné a operační spotřeba zdrojů obvykle vyžaduje další omezení.[Citace je zapotřebí ]

Jak předpovídal Moorův zákon, množství fyzické paměti ve všech počítačích vzrostlo téměř exponenciálně, i když je to do jisté míry kompenzováno zvětšováním samotných programů a souborů. V některých případech může počítači s podporou virtuální paměti, kde se většina načtených dat nachází na pevném disku, dojít fyzická paměť, ale ne virtuální paměť, což způsobí nadměrné stránkování. Tento stav, známý jako mlácení, obvykle způsobí, že počítač bude nepoužitelný, dokud nebudou ukončeny některé programy nebo restartován počítač. Z těchto důvodů se aplikace s moderními počítači se zprávou o nedostatku paměti setkávají jen zřídka.[Citace je zapotřebí ]

Je však stále možné setkat se s podmínkou OOM na moderním počítači. Typický případ OOM v moderních počítačích nastává, když operační systém není schopen vytvořit žádnou další virtuální paměť, protože byla naplněna všechna jeho potenciální podpůrná zařízení nebo je koncový uživatel deaktivoval. Podmínka může nastat kvůli kopírování při zápisu po fork ().

Nedostatek paměti

Jádra operačních systémů, jako jsou Linux se pokusí zotavit z tohoto typu podmínky OOM ukončením jednoho nebo více procesů, což je mechanismus známý jako OOM Killer.[1] Linux 4.6 (vydáno v květnu 2016) zavedlo změny v situacích OOM, které zlepšily detekci a spolehlivost.,[2][3] cgroup povědomí o vrahovi OOM bylo implementováno v Linuxové jádro 4.19 vydáno v říjnu 2018, které přidává schopnost zabít cgroup jako jednu jednotku.[4]

Limity paměti na proces

Kromě omezení fyzické paměti celého systému omezují některé systémy množství paměti, kterou může každý proces použít. Obvykle jde o zásadu, k takovému omezení může dojít také v případě, že operační systém má větší adresní prostor, než je k dispozici na úrovni procesu. Některé špičkové 32-bit systémy (například systémy s Rozšíření fyzické adresy povoleno) přicházejí s 8 gigabajty nebo více systémové paměti, i když jakýkoli jednotlivý proces má přístup pouze k 4 GB 32bitové paměti model ploché paměti.

Proces, který překročí svůj limit na proces a poté se pokusí přidělit další paměť, narazí na chybový stav. Například C standardní funkce pro přidělení paměti, malloc (), vrátí se NULA a dobře vychovaná aplikace by měla tuto situaci zvládnout.

Reference

  1. ^ „Jak nakonfigurovat zabijáka nedostatku paměti v systému Linux“. Citováno 19. února 2015.
  2. ^ „Směrem k předvídatelnějšímu a spolehlivějšímu zpracování nedostatku paměti [LWN.net]“. lwn.net.
  3. ^ „Linux_4.6 - Linuxové nováčky“. kernelnewbies.org.
  4. ^ „Linux_4.19 - Linuxové nováčky“. kernelnewbies.org.

externí odkazy