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?
crone le sue alternative su Linux e Windows.
Per quanto ne so, entrambi usano:
Ma quali sono le grandi differenze?
crone le sue alternative su Linux e Windows.
Risposte:
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
Linux
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.
C2H5OH, Perché dovresti dire che non c'è documentazione su Windows Internals quando tutto è disponibile? Beats me ... Puoi leggere la maggior parte dei concetti di base qui, http://msdn.microsoft.com/en-us/library/windows/desktop/ms684259(v=vs.85).aspx
C'è un articolo su Wikipedia (Discussioni (informatica)) che afferma la maggior parte delle differenze, ma senza fonti citate, quindi ...