Diğer yanıtlara ek olarak, programları kullanmasa bile Linux'u ayrılmış herhangi bir bellek için destek gerektirecek şekilde yapılandırabilirsiniz.
Bununla birlikte, belleği aşırı kullanmak ve OOM katilinden korkmak Linux deneyiminin gerekli parçaları değildir. Sadece sysctl parametresi vm / overcommit_memory'yi 2 olarak ayarlamak, aşırı işlem davranışını kapatır ve OOM katilini sonsuza dek uzak tutar. Modern sistemlerin çoğu, çoğu durum için geniş bir takas dosyası sağlayacak yeterli disk alanına sahip olmalıdır. Fazla taahhüt edilen bellek bittiğinde evcil hayvan süreçlerinin öldürülmesini engellemeye çalışmak yerine, durumdan tamamen kaçınmak daha kolay olabilir. [ OOM katiline rağmen ]
Bir program bellek ayırırsa, çekirdek daha fazla takas sayfasını taahhütlü olarak işaretleyebilir. Bu gösterge çekirdeğin bellek yöneticisinde saklanır, gerçek disk alanına henüz dokunulmaz. Bu bellek kullanılana kadar hiçbir şeyin içeri ve dışarı değiştirilmesi gerekmez. Asla kullanılmazlarsa, takas kullanımı performansı etkilemeden dalgalanacaktır.
İşlemler kendi adres alanları veya "görünümleri" ile sunulduğundan (takas ilk etapta bu şekilde çalışır), çekirdeğin bunu yönetme konusunda çok fazla boşluğu vardır. Yukarıda bağlantılı makaleden bir çatal örneği kullanarak, paylaşılan bellek sayfalarına sahip olmak, büyük miktarda kullanılmamış belleği ayırmaktan çok daha fazla olduğundan, bellek, yazma üzerine kopyalanabilir ve takas kullanım sayısını arttırır. Aslında yazıldığında (ki bu olmayabilir), o zaman "taahhütlü takas" herhangi bir kullanılmayan RAM ile değiştirilebilir (daha sonra RAM kullanımını arttırır ve takas kullanımını azaltır). 500MB tahsis edilmiş, tüm RAM'lerin tümü veya neredeyse tamamı kullanılan bir makinede çatallar içeren bir işlem düşünün. Takasta 500MB kullanılabilirse (ve disk alanı ucuzsa, bugünün TB sürücülerinin% 1'i ne kadar büyük?? P), bellek kopyalanmayacak (henüz,
Böylece OOM katilinin olasılığı önlenir ve bellek tahsislerinin (çatal gibi bir şey yoluyla "örtük" tahsisler dahil) hemen başarılı veya başarısız olduğu varsayımı ile çoğu yazılımın tasarlanması çok daha kolaydır. değiştiğinde performansı etkileyebilir. Bu etki neredeyse her zaman hafiftir, ancak en kötü durumda takas atmasına neden olur (yine de bazen açıkça bir çekirdek çökmesi veya OOM katili tercih edilir).
Linux bellek yöneticisinin nasıl çalıştığına dair kesin ayrıntıları bilmememe rağmen, bu cevap benim kendi genel anlayışım ve yıllar boyunca okuduğumu hatırlıyorum. Bu cevabı yeniden düzenlemeye çalıştım, böylece OS tasarımının minimal bir şekilde anlaşılması gerekiyor (oldukça karmaşık ve kendimle çok ilgilendiğim bir şey değil), ancak biraz çarpıyor gibi görünüyor; nasıl geliştirilebileceğini görürseniz lütfen bize bildirin. Kavrama elinde, bu kadar utanç verici bir temel soru olmayabilir.