Presne to je duvod proc NT kernel nebude pouzivat celou fyzickou pamet pokud mu nedate dostatek swap souboru (protoze odmita pouzivat stranky ktery by v pripade potreby nemel kam odlozit). Rika ten clanek ze to samy plati pro FreeBSD (a ne pro Linux)? Co udela Linux kernel kdyz potrebuje odswapovat stranku a nema kam? Zpanikari?
Pokud se nepletu, tak je mozne oboji. Ted ale netusim kde se to da prepnout. Bud se misto pro odswapovani hleda uz pri namapovani, nebo az kdyz je potreba odswapovavat. To prvni je rychlejsi, to druhe je bezpecnejsi. Na linuxu existuje OOM killer, kterej je dost slusne konfigurovatelnej a ten se snazi zabit nejvetsiho zrouta. Bohuzel tohle reseni nema vyznam,
kdyz pouzivate multithreadovou aplikaci nebo JAVU.
U openldapu se stava, ze OOM killne vlakno, ktery se zblaznilo. Pamet se uvolni, ale protoze to vlakno neco zamknulo, tak se to cely zastavi a linuxovej kernel je stastnej ze ma pamet.
U multiprocesovejch demonu jako je treba apache to funguje vyborne, listener nic nealokuje a kdyz nejakej jeho syn(worker) naalokuje moc pameti tak ho
OOM zabije, listener dostane signal SIGCHLD a vsechno jede dal.
Takhle to fungovalo do jádra 2.4.22. V 2.4.23 byl OOM killer odstraněn, a bylo to uděláno tak, že se kilne aktuální proces, který se právě snaží alokovat paměť (což může být bohužel úplně náhodný proces, neboť paměť se alokuje i při prostém běhu programu a load-on-demand). To řešení v 2.4.22 a nižších umožňovalo deadlocky (např. --- proces, co sežral nejvíc paměti čeká na semafor, jiný proces semafor drží a snaží se alokovat paměť, paměť není, jádro zabuje ten proces, co čeká na semaforu, ale on pořád žije, protože se nemůže dostat z jádra).