Scheduler: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
m Annullate le modifiche di 85.43.202.233 (discussione), riportata alla versione precedente di Scalorbio
Riga 14:
* dare all'utilizzatore del sistema la percezione che le richieste vengano soddisfatte contemporaneamente;
 
Esistono in realtà molti requisiti che possono essere presi in considerazione, dipendenti anche dal problema specifico che lo scheduler deve gestire: esistono schedulers che si occupano di suddividere il tempo di uso del processore da parte di un processo, schedulers che gestisono richieste di lettura/scrittura da una periferica, anche gli [[memoria virtuale|algoritmi di sostituzione delle pagine]] della memoria sono da considerarsi "scheduler".

===Scheduler a breve termine del processore (Dispatcher)===
È un componente fondamentale dei [[computerSistema operativo|ersistemi operativi]] [[multitasking]], e sicuramente l'esempio più diffuso e critico di "scheduler". È in grado di far eseguire, al [[processore]] di un [[computer]], attraverso l'omonima operazione di scheduling, più [[processo (informatica)|processi]] (''task'') concorrentemente attraverso varie politiche di scheduling. Esso rappresenta dunque il gestore del multitasking attraverso criteri di assegnazione delle risorse di memorizzazione/elaborazione ai vari processi e implementati a sua volta attraverso vari tipi di algoritmi di scheduling.
 
Generalmente infatti [[computer]] con un [[processore]] sono in grado di eseguire un programma per volta, quindi per poter far convivere più task è necessario usare uno scheduler. Nel dettaglio lo scheduler si occupa di fare avanzare un processo interrompendone temporaneamente un altro, realizzando così quello che è chiamato "cambiamento di contesto" (''[[context switch]]'') all'interno del [[ciclo del processore]]. Esistono vari [[algoritmo|algoritmi]] di scheduling che permettono di scegliere nella maniera più efficiente possibile quale task far proseguire: ad esempio il [[kernel]] [[linux]] nella versione 2.4 ha uno scheduler [[teoria della complessità algoritmica|O(n)]], mentre dalla versione 2.6 ha un algoritmo di complessità [[teoria della complessità algoritmica|O(1)]], ossia in grado di determinare in un tempo costante quale processo debba essere eseguito, indipendentemente dal numero di processi in attesa.
Line 54 ⟶ 57:
#Se vi sono ancora job da allocare vai al passo 2. Altrimenti fine.
 
===FCFS===
L'algoritmo FCFS (''First Come First Served'') è un tipo di algoritmo [[FIFO]]: esegue i processi nello stesso ordine in cui essi vengono sottomessi al sistema. Il primo processo ad essere eseguito è esattamente quello che per primo richiede l'uso della CPU. Quelli successivi vengono serviti non appena questo ha terminato la propria esecuzione, e così avviene successivamente per tutti gli altri posti in coda. Questo tipo di algoritmo è molto semplice da implementare ma solitamente è anche poco efficiente, almeno considerando il tempo medio d'attesa.
 
Infatti, prendiamo ad esempio la sottomissione nell'ordine dei seguenti processi con la seguente durata espressa in millisecondi:
*p1: 10
*p2: 4