Chování systému při nedostatku paměti (was: Uživatelská ...)
David Janko
djanko na infoware.cz
Pondělí Květen 8 14:55:36 CEST 2000
Jaroslav Gratz wrote:
>
> main(){for(;;) {while(malloc(4096)); sleep(5); }}
>
> Se systémem se budou dít hrozné věci a budete rád, když nebudete muset
> rebootovat. Problém je v tom, že kernel při vyčerpání volné paměti zabíjí
> ty procesy, pro které je potřeba dalsí pamět. Nikoliv proces který zatím
> naalokoval nejvíc paměti.
> To se dobře projevuje u procesů, které forkují potomky - běží ve sdílené
> paměti a teprve když jeden z procesů zapíše něco do paměti, tak se mu
> vytvoří samostatná stránka. A kernel nezabije proces vlastnící 90% paměti
> a klidně čekající, ale potomka který potřebuje 4KB paměti na novou
> stránku.
> Takže to klidně odskáčou procesy, které "za nic nemůžou".
>
> Bohužel tohle může udělat každý neprivilegovaný uživatel a když bude mít
> štěstí, tak kernel pozabíjí klidně i nějaké procesy běžící pod rootem.
>
> Tohle je známá věc, ale co má kernel dělat s procesem, který potřebuje
> další paměť a ta není? Zabít nějaký jiný? Dalo by se, ale je to podivné.
>
No, nejsem expert pres systemove programovani, ale takovy chudak program by snad
mel mit moznost ohlasit toto uzivateli (ze nema pamet) a uzivatel (minimalne pak
root vzdy) by mel mit moznost vybrat si, ktery proces sestreli. Analogie je v ext2,
kde je jista cast mista na disku vyhrazena pro admina - tady by to mohla byt sluzba
v jadru se svoji "jadernou" pameti, kterou ji nikdy zadny proces nesebere a mohla
by tuto moznost uzivateli dat (nejak mi to zacina pripominat prvni ctrl+alt+del ve
win$ ;-), ale v linuxu by to treba mohlo fungovat spolehlive. )
David.
Další informace o konferenci Linux