PDA

View Full Version : Scheduler e/o Dispatcher: c'è differenza o sono la stessa cosa?


Matrixbob
01-12-2008, 22:33
Come da titolo

cionci
02-12-2008, 09:31
Sono abbastanza simili sotto molti punti di vista.
Solitamente il rapporto fra produttori e consumatori nello scheduler è N >> M (M processori ed N processi), al contrario nel dispatching non c'è un rapporto predefinito.
Nel dispatching ci può essere una duplicazione delle entità (una entità che proviene da un produttore può finire a molti consumatori).

fbcyborg
02-12-2008, 10:36
Eh, no, non sono affatto la stessa cosa!
Uno scheduler, ad esempio, si occupa di mandare i processi in esecuzione sulla CPU, seguendo una certa politica di scheduling (ad esempio FCFS). Un dispatcher invece si occupa, come nel caso delle system call (esiste proprio il dispatcher delle system call) di chiamare la System call richiesta in base a al codice user-level. Infatti, su Linux ad esempio, c'è un solo punto di accesso al Ring 0, tramite la porta 0x80. Quando un processo utente lancia una system call, la chiamata viene passata al dispatcher, che tramite la porta 0x80 ottiene privilegi di Ring 0. Ho un solo punto di accesso per tutte le system call. Quindi il ruolo del dispatcher è fondamentale in questo caso, per chiamare la system call giusta. Questo ruolo non può essere svolto da uno scheduler, che invece serve a ben altro.

cionci
02-12-2008, 10:47
Stai facendo un esempio concreto. E' chiaro che quando si vanno ad implementare le analogie teoriche si possono perdere perché appunto si va a lavorare sulla cardinalità dei partecipanti.

Però pensa allo scheduler, cosa fa lo scheduler ? Invia i processi alle CPU secondo un determinato algoritmo, chi sono i produttori ? Le varie chiamate del loader del sistema operativo.
Ogni chiamata al loader implica la produzione di un processo che viene smistato fra le varie CPU.
Io ci vedo molto analogie con il dispatcher. Il dispatcher smista i messaggi (processi) dal produttore (il loader del SO) ai consumatori (CPU).

fbcyborg
02-12-2008, 10:55
Il problema è che si fa troppa confusione. L'esempio concreto l'ho fatto volutamente per chiarire che non sono la stessa cosa. Altrimenti non sarebbe esistito lo scheduler e non sarebbe esistito il dispatcher, ma una cosa sola.
Lo scheduler, schedula, ovvero decide quando una cosa deve avvenire, è come un'agenda per il sistema operativo, e non si occupa di dire cosa e come, ma quando (ovviamente poi prende il processo P1 e lo manda sulla CPU. Quando ha finito ci manda P2, ecc..).
Però se la vogliamo vedere per forza sotto il tuo punto di vista, in effetti possiamo trovare analogie, ma questo non deve portarti a dire che sono simili, dal momento che (fino a prova contraria) svolgono compiti diversi (seppur lontanamente simili, secondo il tuo punto di vista) e sono necessari entrambi al SO.

cionci
02-12-2008, 11:06
Sì, ok, ma non credo si riferisca ad una differenza pratica, ma teorica, anche perché non ha esplicitato il contesto.
Diciamo che solitamente l'operazione fondamentale che si assegna loro è diversa:
- per il dispatcher: consegna il messaggio al/ai destinatario/destinatari
- per lo scheduler: esegui il compito su una determinata risorsa

Matrixbob
02-12-2008, 11:08
Infatti, troppo confusione.

Nel mio caso (caso pratico quindi) mi trovo ad avere a che fare con un applicativo che prevede un programa chiamato webinit.p (uso ABL di Progress SW, ex 4GL).

Questo webinit.p manda in esecuzione altri programmi in funzione delle informazioni consultate su un file chiamato webfunct.map che è del tipo:


<snip>
"AI1" "AIR" "waasstrfloc.p" "winascitm.p" "wpgplntrfset.html"
"AI1" "BOOK" "waasstrfloc.p" "winascitm.p" "wpgplntrfset.html"
"AI2" "AIR" "wacartadd.p" "winplntrfass.p" "wpgshopcart.html"
<snip>


Stiamo parlando di dispatcher in questo caso giusto?

fbcyborg
02-12-2008, 11:10
Hai fatto una sorta di dispatcher.

cionci
02-12-2008, 11:13
Hai fatto una sorta di dispatcher.
Boh, io lo vedrei più come scheduler :sofico: Davvero :D

Comunque l'unità fondamentale da considerare per lo scheduler è il tempo, il suo compito è gestire il tempo. Se non ci sono vincoli temporali allora va benissimo dispatcher.

fbcyborg
02-12-2008, 11:15
A questo punto ci rinuncio!!!! :mc: :mc:


Giusto per curiosità: che politica di scheduling usi? (visto che è uno scheduler... utilizzerà qualche politica di scheduling no?)

fbcyborg
02-12-2008, 11:45
Lo Scheduling
Il sistema operativo deve allocare le risorse del computer tra le potenziali necessità concorrenti di molti processi. Nel caso del processore, la risorsa da allocare è il tempo di esecuzione sul processore e il mezzo di allocazione è lo scheduling. La funzione di scheduling deve essere progettata in modo da garantire la fairness, l'assenza di starvation dei processi, un uso efficiente del tempo di processore, un basso sovraccarico, tenendo in considerazione i diversi livelli di priorità o le scadenze in tempo reale per l'inizio o il completamento di certi processi.
Negli anni passati, intense ricerche focalizzate sullo scheduling hanno portato all'implementazione di diversi algoritmi (FCFS, Round Robin, SPN, SRT, ecc. n.d.r) . Ai giorni nostri, l'enfasi nella ricerca sullo scheduling è rivolta verso lo sfruttamento dei sistemi multiprocessori, in modo particolare per le applicazioni multithread e lo scheduling in tempo reale.

Sistemi Operativi - William Stallings

In realtà, se proprio vogliamo dirla tutta, esiste un caso particolare di Scheduler, ovvero lo Scheduler a breve termine, detto anche allocatore o dispatcher (per l'appunto), che decide quale processo eseguire come prossimo processo.

In conclusione quindi, il dispatcher è il mezzo utilizzato dallo scheduler per far sì che determinati task schedulati vengano eseguiti. Possiamo vedere il dispatcher come sotto caso di uno scheduler ma non il viceversa.

Questa è l'unica somiglianza e nesso che riesco a vedere. Di sicuro, su un SO li trovi entrambi in collaborazione! :P

Matrixbob
02-12-2008, 15:09
A questo punto ci rinuncio!!!! :mc: :mc:


Giusto per curiosità: che politica di scheduling usi? (visto che è uno scheduler... utilizzerà qualche politica di scheduling no?)

Nessuna politica tipica dello scheduling come LRU, (FIFO è una politica di scheduling?), ecc... il programma webinit.p grazie al click su un particolare link, in formato WebSpeed di Progress, manda in esecuzione il programma giusto o CMQ parametrizza in modo che avvenga qualcosa.

fbcyborg
02-12-2008, 15:57
FIFO è una politica di gestione di strutture di accodamento, come può essere un buffer. Nel caso degli scheduler l'analogo FIFO è FCFS, ovvero First Come First Served.

Matrixbob
02-12-2008, 16:47
FIFO è una politica di gestione di strutture di accodamento, come può essere un buffer. Nel caso degli scheduler l'analogo FIFO è FCFS, ovvero First Come First Served.

E' facile confondersi quando i paradigmi sono simili/identici/surrogati

... e best effort? ... che ho sempre trovato associato ai router o CMQ nel networking? +/- è la stessa cosa no?

fbcyborg
02-12-2008, 16:49
No, Best Effort non c'entra niente nell'argomento che stiamo trattando. Non si usa solo nei router.

Matrixbob
02-12-2008, 21:57
No, Best Effort non c'entra niente nell'argomento che stiamo trattando. Non si usa solo nei router.

Mah, io il best effort me lo ricordo come politica d'instradamento ipv4 del tipo "alla buona" senza usare QoS o opzioni IP di sorta.

"Alla buona" o "come meglio puoi".

Io così me lo ricordo.