İşletim sistemi dahili çalışmaları hakkında fazla bilgim yok, neden Linux'ta maksimum sayıda açık dosya ve çalışan işlem için sınırlarımız var?
Biri anlamama yardım ederse çok sevinirim.
İşletim sistemi dahili çalışmaları hakkında fazla bilgim yok, neden Linux'ta maksimum sayıda açık dosya ve çalışan işlem için sınırlarımız var?
Biri anlamama yardım ederse çok sevinirim.
Yanıtlar:
Bu esas olarak tarihi nedenlerden kaynaklanmaktadır. Eski Linux ana bilgisayarlarında, birçok kullanıcı anabilgisayarın kaynaklarını bağlar ve kullanır. Tabii ki, sınırlamak gerekiyordu ve dosya tutamaçları ve süreçleri gibi işlemler çekirdeğe inşa edildiğinden, orada sınırlıydı. Çatal bomba gibi saldırıların sınırlanmasına da yardımcı olur . Proses sınırlarını kullanarak bombaya karşı bir savunma burada gösterilmiştir .
Ayrıca, çatal bombasının yapmaya çalıştığı gibi kaçak çatallama ve dosya açılmasına izin vermeyerek karmaşık hizmetleri ve cinleri kontrol altında tutmaya yardımcı olur.
Ayrıca dikkat edilmesi gereken, kullanılabilir RAM ve CPU miktarı gibi şeyler ve 32 bitlik bir sayacın sadece çok fazla referans gösterebilmesi (sadece 32 bitlik bir sayaç tarafından sayılabilen 4294967296 girişleri), ancak bu sınırlar çok uzak genellikle programcılar ve sistem yöneticileri tarafından belirlenir. Her neyse, 4294967296 işlemlerinizden çok önce, makineniz muhtemelen planlandığı gibi veya başka bir kaynak açlıktan dolayı kilitlenmeye başladığında yeniden başlatılacaktı.
Titan'ı 584 TiB belleği ile çalıştırmazsanız (Linux bir süper bilgisayarda tek bir örnek olarak çalıştırılamayacağından, muhtemelen bu işlem sınırına çok yakında ulaşamayacaksınız). O zaman bile, ortalama bir işlemin paylaşılan bellek olmadığı varsayıldığında, yalnızca kabaca 146 KB bellek olurdu.
Hem hayatta hem de Linux'ta her şeyin çoğu için sınırlar vardır. Bazen sınırlar çok yüksektir ve endişelenmeye değmez ve bazen çok düşüktür, tembel bir programcı tarafından keyfi olarak ayarlanır veya donanıma sınırlar ile ayarlanır.
Bir programcı adres gibi bir alanda izin verilen maksimum karakter sayısı gibi bir karar verdiğinde rasgele sınırlar ortaya çıkar. Belleği gerektiği gibi dinamik olarak ayırmak yerine, rasgele bir sınır ayarlamak çok daha kolaydır. Kullanılabilir belleğin tamamını basit bir giriş alanına atamak istemezsiniz, ancak girdinin önemli olabilecek diğer belleğin üzerine yazmasına da izin vermek istemezsiniz. Açık dosyalar ve işlemler için isteğe bağlı bir sınır olabilir veya kullanılabilir bellekle sınırlı olabilir. Eğer ikincisi, sınıra yaklaştıkça kötü şeyler olmaya başlayacak ve sistem asılabilir, bu yüzden bu gerçekleşmeden önce devreye giren bir sınıra sahip olmak genellikle iyidir. Bazen, keyfi sınırlar başlangıçta bellek veya disk alanına bağlı olarak belirlenebilir ve genellikle oldukça zekidir,
Ardından, bir tamsayı veya karakterin boyutu gibi donanım tarafından belirlenen sınırlar vardır. 32 bit sisteminiz varsa, bir tamsayı maksimum boyutu tarafından belirlenen sınırlar vardır (imzalanmamışsa 4.294.967.295 veya imzalanmışsa bunun yarısı).
İşlemler için / proc / sys / kernel / pid_max izin verilen maksimum pid'dir, bu nedenle herhangi bir anda çalışabilecek işlem sayısının zor sınırı budur. Ancak, bellek üzerindeki sınırlar normalde bundan önce çok iyi bir şekilde devreye girer.
Makinenin tamamındaki açık dosyalarda üst sınır için / proc / sys / fs / file-max zor sınırdır; bu makinedeki bellek miktarına bağlıdır, bu nedenle değişecektir. Çekirdek bunu şu şekilde ayarlar:
n = (mempages * (PAGE_SIZE / 1024)) / 10;
files_stat.max_files = max_t(unsigned long, n, NR_FILE);
her 1 MB RAM için yaklaşık 100 olacak şekilde çalışır.
İşlem başına limitler farklıdır. ulimit bunları tanımlayacaktır.
Bir sınırımız var çünkü bilgisayarların sınırları var, 4GB RAM'im var, şimdi 15 oyun çalıştıramam, yapabilir miyim?
Büyük olasılıkla biraz gecikme ile çalıştırabilirim ama insan olmaz, PC'nizde ve Linux'un Kernal'ında sınırdır, Size atılan herhangi bir programı tutabilmek için daha iyi bir çekirdek ve RAM'e ihtiyacınız olacaktır. .
Windows 7'yi çalıştırdığımda dizüstü bilgisayarım gibi, Battlefield'ı oynayabilirdim, ancak RAM'imin% 80'ini aldı, bu yüzden "Need For Speed" oynamaya çalışırsam,% 60 alır Genellikle, her ikisini de açabilirim ama sonra tüm sistemim 2 Ağır Hizmet Programı çalıştırdığım için yavaşladım, ikisi de RAM için savaşıyor (Rasgele Erişim Belleği)
Kısacası, Normal bir bilgisayar aynı anda birçok programı çalıştıramaz Müzik, Not Defteri, Tarayıcı, E-posta, Oyun, Bir bilgisayarda çok şey olduğunu düşünüyorsunuz, ama sadece, World of Warcraft gibi bir oyun çok daha fazla RAM alıyor ve bilgisayar mücadelesi yapar (pahalı dizüstü bilgisayarlar gibi 8-16 GB RAM yoksa!)