Bir sistem neden yanıt vermiyor?


12

Sadece idam doto zaman makul bir miktarda işlenmiş olamayacağı kadar büyük bir giriş dosyası ile (yönlendirilmiş grafik çizimi için bir programı).

Bütün sistemim dondu. Onu öldürmek için Ctrl+ Alt+ ile bir metin konsoluna zorlukla yapabildim , ancak birkaç dakika sürdü.F1dot

Sistem neden böyle bir şeye izin veriyor? Neden dotsistemin% 99'u gibi kritik olmayan bir program veriyor ve geri kalan% 1'ini yanıt vermek için kullanıyor?


Yanıtlar:


15

GNU / Linux ve diğer çoklu görev sistemleri bu şekilde çalışır, işlemciyi çalışan süreçler arasında paylaşırlar, dot% 99'una sahip olmazlar, ancak% 99'unda% 100'ü vardır. Her işlem, belirli bir süre için işlemciye hükmeder.

Bu, zamanlayıcılar tarafından yönetilir (linux'un birkaç zamanlayıcı vardır, bazıları sadece normal stratejiyi kullanır, bazıları kullanıcı arayüzlerine daha fazla zaman vermeye çalışır, vb.).

Şimdi, sizin durumunuzda, sorun - muhtemelen - bu dotçok fazla işlemci zamanı değil, çok fazla bellek gerektiriyordu. Ve bir programın kullandığı çok fazla bellek, olduğunda dayak tam da değil, sistem donma kılan bir süreçtir, dotbir çok yapıyor ama çekirdek taşımak zorunda olduğu için bellek sayfalarını diske arasında ileri ve geri (swap bölümü) ve sistem belleği.

Bile dotsadece işlemci% 99 zaman alıyordu, büyük ihtimalle bir metin terminaline değişen neredeyse anında olacağını vardır, ne olur çekirdek taşımak olmasıdır doto koymak böylece belleği yetersiz malzeme Xböylece bellekte geri Xtuşları görebilirsiniz sadece metin terminaline vurup hareket edersiniz, sonra çekirdek hala çalışmakta olan Xbellekten dışarı çıkmak zorunda kalır dotve sonra da dotmetin terminali işlemlerini (belki sadece login?) belleğe taşımak için dışarı çıkar . (Bu dağınık görünüyorsa, sadece örnek dağınık olduğu için değil - gerçek bu dağınıktır.)

Örnek olarak metin terminalinde oturum açarsanız, sadece tuşlara basabilir, geri tuşuna basabilirsiniz ve mutlu bir şekilde gerçek zamanlı olur, ancak küçük bir aracı çalıştırmak kadar basit bir şey yaparsanız ps, "donacaktır" "bir süreliğine yüklenecek belleği boşaltması gerektiğinden ps(ve ayrıca psdosya sisteminden talep edene kadar verileri belleğe ve bellekten taşımak için kullanılan disk G / Ç kuyruğunda da beklemesi gerekir ) .


Hm, böylece daha iyi bir kullanıcı deneyimi elde etmenin yolu belirli programları " yapışkan " olarak belirtmek ve böylece bunların değiştirilmesini önlemek olacaktır.
Christoph Wurm

Yapışkanlık, 70'lerden beri ve 'yapışkan' bitin orijinal semantiği gibi çalışmadı. Sen olabilir onlar dışarı takas edilemez böylece Ancak belleğe (parçalarını) programları kilitleyin. Ana bellek pahalı bir lüks olsa da, bu her şey için yapılamaz.
Alexios

@njsg, iyi açıklama için teşekkürler. Takip eden bir soru: Çöpü önlemenin bir yolu yok mu? Değiştirmenin bellek kullanımını genel olarak daha etkili hale getirdiğini anlıyorum, ancak sınırlar olmalı. X kadar önemli bir işlemi IMHO asla bellek dışına taşımamalıdır. Unix benzeri bir sistemi, temel süreçlerin taşınmasını önleyecek şekilde yapılandırmanın bir yolu var mı? Bir sunucuda farklı bir şey, ama bir masaüstünde masaüstümün benimle konuşmayı bırakmasını sağlamaktan ziyade çökmeye karşı bellek aç bir süreç istiyorum.
A. Donda
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.