Scheduler: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Annullate le modifiche di 185.5.246.186 (discussione), riportata alla versione precedente di Nima Tayebian Etichetta: Rollback |
c'è ancora molto da sistemare |
||
Riga 1:
{{NN|informatica|gennaio 2015}}
{{U|Dispatcher|informatica|agosto 2017}}
[[Immagine:Scheduler.png|thumb|right|Schema di uno
Lo '''
L'attenzione posta su alcuni parametri piuttosto che su altri differenzia la cosiddetta
==Descrizione==
Generalmente l'obiettivo dello ''scheduling'' è quello di:
* massimizzare il ''[[throughput]]'', ovvero la produttività dell'intero sistema, minimizzando i tempi in cui la risorsa è inutilizzata;
* cercare l'ordinamento di richieste che minimizza il rapporto tra tempo di servizio (ovvero il tempo che una richiesta impiega per essere soddisfatta) e tempo di "turnaround" (il lasso di tempo che intercorre tra l'istante in cui la richiesta è generata e quello in cui la richiesta è soddisfatta);
Riga 13:
* dare all'utente 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 scheduler che si occupano di suddividere il tempo di uso del processore da parte di un processo, ''scheduler'' che gestisono richieste di lettura/scrittura da una periferica, anche gli [[memoria virtuale|algoritmi di sostituzione delle pagine]] della memoria sono da considerarsi
===''Scheduler'' a breve termine del processore (
È un componente fondamentale dei [[Sistema operativo|sistemi operativi]] [[multitasking|multiprocesso]], e sicuramente l'esempio più diffuso e critico di
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ì
Ci sono vari modelli di schedulazione:
* Modello a macchina singola.
* Flow-shop (modello di Johnson).
* Algoritmo euristico di Campbell, Dudek e Smith.
* ''Job-shop''.
===''Scheduling'' della CPU===
Lo scheduling è un'operazione molto importante per il corretto ed efficiente funzionamento del calcolatore. Infatti non solo consente di eseguire più programmi concorrentemente, ma consente anche di migliorare l'utilizzo del processore. Ad esempio, quando è necessario eseguire un'operazione di I/O, il processore non può proseguire l'elaborazione del processo attualmente in esecuzione fino al completamento della stessa. Dato che le operazioni di I/O sono molto più lente del processore sarebbe un inutile spreco di risorse se il processore rimanesse bloccato fino al completamento delle stesse. Per evitare questo le operazioni di I/O vengono gestite unicamente dal [[Sistema operativo]] che, nel frattempo, assegna l'uso del processore ad un altro processo. In questo modo si massimizza l'uso delle risorse del sistema.
Riga 41:
Per analizzare gli algoritmi che verranno successivamente presentati verrà utilizzato il criterio del tempo d'attesa medio dei processi presi in considerazione.
==== Obiettivi dello ''scheduling'' ====
Un algoritmo di scheduling si pone i seguenti obiettivi:
*''Fairness'' (equità): processi dello stesso tipo devono avere trattamenti simili
Riga 48:
Inoltre bisogna effettuare un distinguo tra i [[Batch|sistemi batch]] e i [[Interattività|sistemi interattivi]]. Nei primi il ''throughput'' deve essere massimizzato e il ''Tempo di Turnaround'' deve essere minimizzato. Nei secondi, i sistemi interattivi, il tempo di risposta deve essere il minimo possibile per dare l'idea di continuità all'utente e la proporzionalità deve essere rispettata, ossia il tempo di risposta deve essere proporzionale alla complessità dell'azione.
==Modello
Passi dell'
#Selezionare
#Selezionare un nuovo ''job'' e provare a disporlo nella sequenza corrente.
#Per ogni posizione provata calcolare il ''set-up'' complessivo.
#Allocare il ''job'' nella posizione che garantisce i più bassi tempi di ''set-up''.
#Se vi sono ancora ''job'' da allocare vai al passo 2
===FCFS===
L'algoritmo FCFS (''First
Infatti, prendiamo ad esempio la sottomissione nell'ordine dei seguenti processi con la seguente durata espressa in millisecondi:
Riga 128:
L'algoritmo HRRN (''Higher Responsive Ratio Next'') viene utilizzato per prevenire l'aging, ossia l'attesa eccessiva dei processi molto lunghi scavalcati da quelli più corti tramite SNPF e SRTF e si basa sul tempo di attesa di un processo utilizzando la formula <math>Ratio=(W+S)/S</math> dove <math>W</math> è il tempo di attesa e <math>S</math> il prossimo CPU-burst (consumo della [[CPU]]) stimato.
===
Non potendo stimare con precisione il tempo di esecuzione di un processo nel momento in cui entrerà nel sistema, vi è la possibilità di stimare il tempo trascorso. Viene introdotto il concetto di
Ogni coda è gestita attraverso l'algoritmo di [[round-robin]], tutte tranne l'ultima che è servita tramite FCFS. Caratteristiche:
Riga 136:
===FSS===
L'algoritmo FSS (''Fair
==Scheduling nelle reti==
|