Scheduler: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
m Bot: sintassi e spaziatura dei link |
Nessun oggetto della modifica |
||
Riga 1:
{{Avvisounicode}}
[[Immagine:Scheduler.png|thumb|right|Schema di uno Scheduler]]
In [[informatica]] lo '''scheduler''' (da ''to schedule'' letteralmente "mettere in lista", ovvero "pianificare") è un [[programma]] sotto forma di un [[algoritmo]] che, dato un insieme di richieste di accesso ad una risorsa, stabilisce un ordinamento temporale per l'esecuzione di tali richieste, privilegiando quelle che rispettano determinati parametri, in modo da ottimizzare l'accesso a tale risorsa
L'attenzione posta su alcuni parametri piuttosto che su altri, differenzia la cosiddetta '''politica di scheduling''': solitamente lo scheduler può eseguire le richieste in base al loro ordine di arrivo (politica [[FIFO]]), oppure dare precedenza a quelle che impegnano per meno tempo la risorsa; possono esistere politiche si basano su principi statistici o sulla predizione per individuare un ordinamento delle richieste si avvicini di più a quello ottimale.
* massimizzare il '''troughput''', 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)▼
==Descrizione==
* evitare fenomeni indesiderati come la '''starvation''' ovvero "l'attesa eterna" di alcune richieste, verificabile in determinate condizioni▼
Generalmente l'obiettivo dello scheduling è quello di
* dare all'utilizzatore del sistema la percezione che le richieste vengano soddisfatte contemporaneamente▼
▲* massimizzare il '''troughput''', 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);
▲* evitare fenomeni indesiderati come la '''starvation''' ovvero "l'attesa eterna" di alcune richieste, verificabile in determinate condizioni;
▲* 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 richeste di lettura/scrittura da una periferica, anche gli [[memoria virtuale|algoritmi di sostituzione delle pagine]] della memoria sono da considerarsi "scheduler".
Line 12 ⟶ 17:
==Scheduler a breve termine del processore (Dispatcher)==
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.
|