Quale algoritmo di pianificazione viene utilizzato in Linux?


11

Recentemente in un'intervista mi è stato chiesto dell'algoritmo di pianificazione utilizzato dal sistema operativo Linux. Qual è l'algoritmo utilizzato per quale motivo?

Inoltre, in quale algoritmo viene utilizzato nei sistemi operativi in ​​tempo reale e perché?


Per la programmazione di processi o IO? O anche qualcos'altro?
maxschlepzig,

Risposte:


7

L'attuale pianificatore di attività Linux si chiama Completely Fair Scheduler (CFS). Dovresti dare un'occhiata a http://people.redhat.com/mingo/cfs-scheduler/sched-design-CFS.txt per maggiori dettagli. Il design è piuttosto complesso e, a mio avviso, non adatto a RTOS.

Una tecnica comune nei sistemi in tempo reale è la pianificazione rate-monotonica, perché ha forti garanzie se alcuni presupposti valgono (ad esempio priorità di task statici e tempi e velocità di esecuzione fissi). Ci sono molti altri algoritmi e ci sono state molte ricerche. Quindi è fondamentalmente tutto sulle proprietà di cui hai bisogno e ciò che sai sulla tua attività e ciò che è stato risolto.


2

Non sono del tutto sicuro se stai prendendo in considerazione la pianificazione degli I / O del kernel. In caso contrario: ignora questa risposta.

Wikipedia afferma che il CFG (completamente Fair Queuing) è predefinito dal kernel 2.6.18.

Sul mio openSUSE (con kernel 2.6.37) posso passare da CFG, NOOP e Deadline .


Sono curioso, come possiamo passare a un algoritmo diverso? Puoi far luce su questo? grazie
rsjethani,

@rsjethani Vai su YaST -> Sistema -> Impostazioni kernel -> 2a scheda (Impostazioni kernel) -> Pianificatore IO globale. (la denominazione delle opzioni potrebbe essere diversa da quella che ho tradotto da una GUI tedesca)
Torbjörn

1

L'algoritmo Round Robin viene generalmente utilizzato negli ambienti di condivisione del tempo.


0

L'algoritmo utilizzato dallo scheduler di Linux è uno schema complesso con combinazione di priorità preventiva e suddivisione del tempo parziale. Assegna un quantum di tempo più lungo ad attività con priorità più elevata e un quantum di tempo più breve ad attività con priorità più bassa.

Identifica ogni processo come processo in tempo reale o normale (altro). Alle attività in tempo reale vengono assegnate priorità statiche nell'intervallo [0,99], dove un numero più basso indica una priorità più alta.

Tutte le altre attività hanno priorità dinamiche nell'intervallo [100,139], in base all'interattività di un'attività che si basano sui loro buoni valori più o meno il valore 5. Le attività che sono più interattive in genere hanno tempi di sonno più lunghi e quindi hanno maggiori probabilità di avere aggiustamenti più vicini a -5, poiché lo scheduler favorisce le attività interattive. (L'interattività di un'attività è determinata dalla durata della sospensione durante l'attesa dell'I / O.) L'interattività di un'attività determina se il valore 5 verrà aggiunto o sottratto dal valore piacevole. Il risultato di tali adeguamenti sarà priorità più elevate per questi compiti. Al contrario, le attività con tempi di sospensione più brevi sono spesso più legate alla CPU e pertanto avranno priorità ridotte.

Il kernel mantiene un elenco di tutte le attività eseguibili in una struttura di dati runqueue. Una runqueue contiene due array prioritari: attivo e scaduto. L'array attivo contiene tutte le attività con il tempo rimanente nelle rispettive fasce orarie e l'array scaduto contiene tutte le attività scadute. Ciascuno di questi array di priorità contiene un elenco di attività indicizzate in base alla priorità. Lo scheduler sceglie l'attività con la massima priorità dall'array attivo per l'esecuzione sulla CPU. Quando tutte le attività hanno esaurito i loro intervalli di tempo (ovvero, l'array attivo è vuoto), vengono scambiati i due array prioritari: l'array scaduto diventa l'array attivo e viceversa.

La priorità dinamica di un'attività viene ricalcolata quando l'attività ha esaurito il suo tempo quantico e deve essere spostata nell'array scaduto. Pertanto, quando si scambiano i due array, a tutte le attività nel nuovo array attivo sono state assegnate nuove priorità e intervalli di tempo corrispondenti. (Nota: questo è un estratto del libro su Operating System Concepts (nona edizione) di Abraham Silberschatz, et al. Per i dettagli si prega di fare riferimento alla sezione 5.6.3 di questo libro)


Benvenuti nel sito e grazie per il vostro contributo. Si prega di utilizzare la formattazione "quote" (ovvero le righe iniziali con >) per quelle parti della risposta che sono state prese da una fonte esterna, in particolare quando si cita un libro.
AdminBee

0

Questa è una risposta a un'altra tua domanda. I sistemi in tempo reale (RTS) sono di due tipi, hard e soft. L'algoritmo di schedulazione della CPU per RTS rigido è un algoritmo preventivo basato sulla priorità e quello per RTS software è una priorità non preventiva.

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.