Niçin tatlılık -20 ila 19 arasındadır?


22

niceKomut bir programa zamanlama önceliğini ( "hoşluk") ayarlamasını sağlar. Kullandığım tüm Unix benzeri sistemlerde, nezaket, -20 en uygun zamanlama önceliği, 0 varsayılan, 19 ise en az tercih ettiği bir tam sayı aralığı tarafından belirtilir.

Varsayılan değer olarak 0'a sahip olmak yeterince sezgiseldir, ancak neden -20 ve 19 aralığın bitiş noktaları olarak seçildi? Neden -128 ve 127 değil, 8-bitlik baytlara tam olarak uyuyor? Ya da neden -100 ila 100 değil, ondalık düşünen insanlara daha sezgiseldir, ya da benzer şekilde ama biraz daha ergonomik olarak, -99 ila 99? -20 - 19 aralığı isteğe bağlı olarak mı seçilmiş, yoksa nicezamanla etkileşime giren arayüzün içindekilerle bir ilişkisi var mı? (Günümüzde böyle bir ilişki olmadığını biliyorum, en azından zamanlayıcısı 0 ila 139 aralığında öncelikleri kullanan Linux için. Ancak, -20 ila 19 aralığının tarihsel nedenleriyle ilgileniyorum.)


4
Bu belirli aralığın neden seçildiğini açıklayan bir referans bulamıyorum, ancak V7'de önceliğin işaretli bir bayta uyduğunu unutmayın - bkz. Proc.h - ve setpri işlevi önceliği belirledi min(127, (recent CPU usage on a scale of 0 to 15) + 50 + pp->p_nice - 20) ve öncelikler <25 kesintisiz işler yapan süreçler. Dolayısıyla, nezaket sınırlı bir aralıkta olmak zorundaydı.
Mark Plotnick 27:15

Yanıtlar:


7

İç nicelik seviyeleri 0-39'dur, fakat artışlar pozitif veya negatifdir. Kaynak . Bu nedenle cevap, nicekomut tarafından kabul edilen sayıların (pozitif ve negatif), sizi 0-39 aralığında herhangi bir yere, varsayılan seviyeden 20'ye getiren olmasıdır.

Peki neden 0-39? Özel seri, tasarımcıların orijinal uygulamasında işe yarayan şeydi. Daha pozitif değerlerin daha güzel olmasının nedeni, işlem seviyesinin önceliğin belirlenmesinde işlem son CPU kullanımına eklenmesidir. Yaklaşık turbobin planlaması yapmak için çekirdek, her bir işlemin son zamanlarda ne kadar CPU yaktığını takip eder ve sahip olmadıkları işlemlere geçer. İyi seviye ne kadar yüksek olursa, işlem süresi o kadar çok CPU süresi görüyor ve programlayıcı o işlemi o kadar uyutur veya uykuda bırakır. Bkz . UNIX İşletim Sisteminin Tasarımı, Maurice J. Bach, Prentice-Hall 1986, s. 8,1 (özel olarak güzelliği için 8.1.4). ISBN 0-13-201799-7.


1
Programcının kötü bir değeri varsa, uykuya dalması için bir işlem yapacağını varsayırken yanılıyorsunuz. Bunun yerine, çalışmaya hazır başka işlemler varsa ve bu işlemler daha iyi bir seviyeye sahipse, programlayıcı uyku işlemini uyandırmaz. Bir işlemin, uykuya zorlayan bir sistem çağırdığında ya da bir işlem bittiğinde CPU kuantumu olduğunda ve CPU'yu bekleyen daha ayrıcalıklı işlemler olduğunu unutmayın.
schily

-4

Yanılıyorsunuz: nice () arayüzünün hala mantıklı olduğu bir UNIX kullanıyorsanız NZERO, varsayılan nice değeri ve NZERO is 20.

Bir şeyi daha açık hale getirmek için: komuttan nicebahsettiniz ve aynı zamanda mutlak seviyelerden bahsettiniz, ancak nice komutu mutlak değerleri yönetmiyor, bunun yerine mevcut seviyeye göre artışları artırıyor. Varsayılan durum olması durumunda, iyi seviye NZERO20'dir.

Nice değerleri 0,.2'dir * NZERO-1 veya 0..39

Varsayılan UNIX zamanlayıcısının, iyi bir değerle faydalı bir şey yapmasına rağmen, özel bir zamanlayıcı, örneğin gerçek zamanlı bir zamanlayıcı kullanmanızın bir anlamı yoktur.


2
Shell arayüzünü ve C arayüzünü karıştırıyor gibi görünüyorsunuz. Bu soru nicekabuk komutuyla ilgili.
Gilles 'SO- kötülük olmayı'

Şeyleri kafan karıştıran sensin. Güzel emir sadece deltaları bilir ama soru iyi değerlerden bahseder. Soru güzel değerler hakkındaydı ve ben bunu cevapladım.
schily
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.