Perché la gentilezza varia da -20 a 19?


22

Il nicecomando consente di regolare la priorità di pianificazione ("gentilezza") di un programma. Su tutti i sistemi simili a Unix che ho usato, la gentilezza è specificata da un intervallo di numeri interi, dove -20 è la priorità di pianificazione più favorevole, 0 è il valore predefinito e 19 è il meno favorevole.

Avere 0 come valore predefinito predefinito è abbastanza intuitivo, ma perché -20 e 19 sono stati selezionati come endpoint dell'intervallo? Perché non -128 e 127, che si adatterebbero esattamente in un byte con segno a 8 bit? O perché non da -100 a 100, che è più intuitivo per gli esseri umani decimali, o in modo simile ma leggermente più ergonomico, da -99 a 99? L'intervallo da -20 a 19 è stato selezionato in modo arbitrario o ha qualche relazione con gli interni dello scheduler che niceoriginariamente si interfacciavano? (Capisco che non esiste una relazione di questo tipo oggi, almeno per Linux, il cui programmatore utilizza priorità nell'intervallo da 0 a 139. Tuttavia, sono interessato alle ragioni storiche per l'intervallo da -20 a 19).


4
Non riesco a trovare un riferimento che spieghi perché è stato scelto quell'intervallo specifico, ma nota che in V7 la priorità si adatta a un byte con segno - vedi proc.h - e la funzione setpri imposta la priorità su min(127, (recent CPU usage on a scale of 0 to 15) + 50 + pp->p_nice - 20), e le priorità <25 erano riservate per processi che fanno cose ininterrotte. Quindi la gentilezza doveva essere una specie di gamma limitata.
Mark Plotnick,

Risposte:


7

I livelli di gentilezza interna sono 0-39, ma gli incrementi sono positivi o negativi. Fonte . Quindi la risposta è che i numeri (positivi e negativi) accettati dal nicecomando sono ciò che ti porta da 20, il livello predefinito, a qualsiasi punto nell'intervallo 0-39.

Quindi perché 0-39? La gamma specifica era ciò che ha funzionato nell'implementazione originale dei progettisti. La ragione per cui i valori più positivi sono migliori è che il buon livello viene aggiunto al recente utilizzo della CPU di un processo nel determinare la priorità. Al fine di fornire una pianificazione approssimativa round-robin, il kernel tiene traccia di quanta CPU è stata recentemente bruciata da ciascun processo e passa a processi che non ne hanno avuti altrettanto. Più è alto il livello, maggiore è il tempo CPU che ha avuto il processo e più spesso lo scheduler mette il processo in modalità sleep o lo lascia addormentare. Vedi Il progetto del sistema operativo UNIX di Maurice J. Bach, Prentice-Hall 1986, sec. 8.1 (8.1.4 per gentilezza in particolare). ISBN 0-13-201799-7.


1
Ti sbagli quando presumi che lo scheduler metterà in pausa un processo se ha un cattivo valore. Al contrario, lo scheduler non attiverà un processo di sospensione se ci sono altri processi pronti per l'esecuzione e questi processi hanno un livello migliore. Si noti che un processo viene messo in modalità di sospensione, quando chiama una syscall che impone una sospensione delle risorse o quando un processo ha esaurito il suo CPU quantum e ci sono altri processi più privilegiati che attendono la CPU.
schily,

-4

Ti sbagli: Se ti trovi su UNIX in cui l'interfaccia nice () ha ancora senso, NZEROè il valore piacevole predefinito e NZERO is 20.

Per rendere la cosa più ovvia: hai chiesto informazioni sul comando nicee allo stesso tempo hai menzionato i livelli assoluti, ma il bel comando non gestisce i valori assoluti ma piuttosto gli incrementi rispetto al livello corrente. Nel caso dello stato predefinito, il livello piacevole NZEROè 20.

I valori piacevoli sono 0..2 * NZERO-1 o 0..39

Si noti che mentre lo scheduler UNIX predefinito può ancora essere in grado di fare qualcosa di utile con un buon valore, non ha senso nel caso in cui si stia utilizzando uno scheduler specializzato, ad esempio uno scheduler in tempo reale.


2
Sembra che tu stia confondendo l'interfaccia della shell e l'interfaccia C. Questa domanda riguarda il nicecomando shell.
Gilles 'SO- smetti di essere malvagio' il

Bene, sei tu a confondere le cose. Il comando carino conosce solo i delta, ma la domanda menziona i bei valori. La domanda riguardava i bei valori e ho risposto a questa domanda.
schily,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.