Differenza tra lo scheduler di thread di Windows e Linux


4

Per quanto ne so, entrambi usano:

  • Coda di feedback multilivello
  • Livelli di priorità (intervallo diverso)
  • Entrambi gestiscono i thread e non il processo

Ma quali sono le grandi differenze?


Sei convinto che ce ne siano, almeno quando Linux viene fornito e installato come una delle distro comuni e non è stata fatta nessuna ricostruzione / riconfigurazione?

Secondo la pagina di Wikipedia e il capitolo sulla programmazione del libro che sto leggendo c'è, ma principalmente Linux è coperto e quasi nulla su Windows. Inoltre, sembra che ci siano differenze tra le versioni del kernel in Linux e persino tra XP / Vista / 7 su Windows, quindi sto solo cercando alcune differenze generali, se ce ne sono.

Grandi differenze? ... beh, per un Linux ti dà la scelta tra varie, se vuoi. Ma penso che la domanda sia troppo ampia per rispondere in modo utile. A proposito: dovresti sicuramente chiarire che intendi lo scheduler dei thread, non crone le sue alternative su Linux e Windows.
0xC0000022L

Inoltre, si noti che Linux ha molti programmatori. I più importanti sono lo Scheduler Completamente equo e lo Scheduler Brain F.ck.
nuovo123456,

potresti dover chiedere a windows. chiedi a re linux. studia entrambi. capire le differenze. potrebbe porre domande più tecnologiche che forse non sono troppo specifiche per il sistema operativo, su un sito di scambio di stack di informatica. che libro stai leggendo? william stalling ha un ottimo libro sui sistemi operativi che copre la pianificazione ma non credo che sia specifico per il sistema operativo
barlop

Risposte:


6

Secondo le priorità di pianificazione su MSDN :

Le discussioni sono programmate per essere eseguite in base alla loro priorità di pianificazione. A ogni thread viene assegnata una priorità di pianificazione. I livelli di priorità vanno da zero (priorità più bassa) a 31 (priorità più alta). Solo il thread della pagina zero può avere una priorità pari a zero. (Il thread a pagina zero è un thread di sistema responsabile dell'azzeramento di eventuali pagine libere quando non è necessario eseguire altri thread.)

Il sistema tratta tutti i thread con la stessa priorità uguale a uguale. Il sistema assegna fasce orarie in modo round robin a tutti i thread con la massima priorità. Se nessuno di questi thread è pronto per essere eseguito, il sistema assegna intervalli di tempo in modo round robin a tutti i thread con la priorità più alta successiva. Se diventa disponibile per l'esecuzione un thread con priorità più alta, il sistema smette di eseguire il thread con priorità inferiore (senza consentire che finisca di usare la sua fascia oraria) e assegna una porzione a tempo pieno al thread con priorità più alta. La priorità di ogni thread è determinata dai seguenti criteri:

  • La classe prioritaria del suo processo
  • Il livello di priorità del thread all'interno della classe di priorità del suo processo

Credo che questo programmatore di thread descriva un algoritmo chiamato coda multilivello , che è un algoritmo di pianificazione molto più semplice rispetto alla coda di feedback multilivello. Si noti che lo scheduler di processo di Windows utilizza una coda di feedback multilivello , secondo Wikipedia . A partire da Windows 7 e Windows Server 2008 R2, esiste anche la pianificazione in modalità utente che consente ai processi di gestire la propria pianificazione dei thread.

Come menzionato da altri, Linux tratta i processi e li sottopone allo stesso modo dal punto di vista della pianificazione. La pianificazione di processi / thread in Linux è configurabile, ci sono vari algoritmi di pianificazione e alcuni possono essere configurati ricompilando il kernel:

Nota che default sopra significa default nel kernel vanilla. Alcune distribuzioni vengono fornite con un kernel predefinito preconfigurato per l'utilizzo di diversi scheduler predefiniti.

Oltre all'algoritmo di pianificazione, esistono anche criteri di pianificazione : SCHED_FIFO, SCHED_BATCH, SCHED_IDLE, SCHED_OTHER e SCHED_RR; che può essere modificato in fase di esecuzione che descrive il tipo di carico di lavoro di un processo.

L'attuale programma di pianificazione predefinito Completamente equo Programma di pianificazione utilizza un albero rosso-nero per mantenere l'equità della pianificazione. Dall'interno di Linux 2.6 Scheduler completamente corretto :

L'idea principale alla base del CFS è quella di mantenere l'equilibrio (correttezza) nel fornire tempo al processore per le attività. Ciò significa che ai processi dovrebbe essere fornita una discreta quantità di processori. Quando il tempo per le attività è sbilanciato (il che significa che a una o più attività non viene concesso un tempo equo rispetto ad altre), è necessario dare a quelle attività fuori equilibrio il tempo di eseguire.

Per determinare l'equilibrio, il CFS mantiene la quantità di tempo fornita a una determinata attività nel cosiddetto runtime virtuale. Minore è il tempo di esecuzione virtuale di un'attività, ovvero minore è il tempo a cui un'attività è stata autorizzata ad accedere al processore, maggiore è la sua necessità di processore. Il CFS include anche il concetto di equità dormiente per garantire che le attività che non sono attualmente eseguibili (ad esempio, in attesa di I / O) ricevano una quota comparabile del processore quando alla fine ne hanno bisogno.

Ma piuttosto che mantenere le attività in una coda di esecuzione, come è stato fatto nei precedenti programmatori Linux, il CFS mantiene un albero rosso-nero ordinato in base al tempo (vedere la Figura 1). Un albero rosso-nero è un albero con un paio di proprietà interessanti e utili. Innanzitutto, è auto-bilanciamento, il che significa che nessun percorso nell'albero sarà mai più lungo del doppio rispetto a qualsiasi altro. In secondo luogo, le operazioni sull'albero si verificano nel tempo O (log n) (dove n è il numero di nodi nell'albero). Ciò significa che è possibile inserire o eliminare un'attività in modo rapido ed efficiente.

Quindi differenze principali:

finestre

  • Pianificazione dei processi mediante la coda di feedback multilivello + Pianificazione dei thread mediante la coda multilivello. Lo scheduler di thread seleziona semplicemente il thread con priorità più alta, lo scheduler di processo è più intelligente e utilizza la coda di feedback.

Linux

  • Pianificatore di processo e thread unificato, configurabile, per impostazione predefinita utilizza CFS. Lo scheduler utilizza una metrica di correttezza e utilizza la priorità per inclinare la distribuzione della CPU in processi con priorità più elevata.

4
Ma i processi di Winoows non sono unità di esecuzione; sono contenitori per risorse (incluso, se il processo è in esecuzione, almeno un thread). Fare una distinzione tra la programmazione dei processi e la pianificazione dei thread mi sembra sbagliata. Penso che la tua prima fonte sia semplificata o non aggiornata e potresti leggere troppo nella voce di Wikipedia. L'unico modo in cui un processo interagisce con lo scheduler è fornendo una priorità di base per i suoi thread.
Ian Ni-Lewis,

Esattamente, non esiste una pianificazione dei processi
Lewis Kelsey, il

1

Se ti riferisci allo scheduler del kernel (e non a uno scheduler periodico come suggerito da alcuni commenti), in Linux è abbastanza semplice: in termini di pianificazione, Linux non fa differenza tra thread e processi. Dal punto di vista del kernel, sono solo unità di pianificazione; la differenza dipende dal peso dell'interruttore di contesto. Questo a volte viene chiamato un modello di threading one-to-one .

Dato che ci sono meno informazioni disponibili sugli interni di Windows, si può dire poco. Tuttavia, Windows ha storicamente differenziato tra processi e thread, quindi è più probabile che vengano trattati in modo diverso in termini di pianificazione.


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.