Perché è ottimale programmare prima i lavori più corti su un uniprocessore?

7

Su un uniprocessore, è apparentemente ottimale programmare i lavori che impiegano meno tempo prima di assumere una pianificazione non preventiva: una volta che un lavoro è in corso, deve terminare. Perché?

Sono confuso su come l'ordinamento cambierebbe la latenza complessiva. Dal momento che un uniprocessore può eseguire un solo processo alla volta, la latenza non dovrebbe essere la stessa indipendentemente dall'ordine?

    
posta David Faux 17.01.2012 - 04:51
fonte

3 risposte

2

Sebbene questo algoritmo sia stato progettato per fornire il massimo rendimento in tutti gli scenari, questo non è corretto per tutte le situazioni. Cosa succede se il processore ha molti piccoli processi? Porterà sicuramente alla fame. Il tempo di produzione dei piccoli processi sarà basso, mentre quello dei grandi processi sarà grande rispetto ad altri algoritmi di schedulazione.

Wikipedia dice:

Since turnaround time is based on waiting time plus processing time, longer processes are significantly affected by this. Overall waiting time is smaller than FIFO, however since no process has to wait for the termination of the longest process.

Se pianifichi per prima cosa lavori più grandi, molti processi di piccole dimensioni dovranno attendere la conclusione del processo (in quanto non è preventiva). E poiché il tempo di consegna è il tempo totale tra la presentazione di un processo e il suo completamento, questo sarebbe decisamente basso. Ma in SJF, pochissimi processi di grandi dimensioni attendono alcuni piccoli processi, quindi i tempi di restituzione dei soli processi di grandi dimensioni sarebbero influenzati.

Controlla il link per un confronto di varie tecniche.

    
risposta data 17.01.2012 - 05:05
fonte
10

La misura di quanto è buono lo scheduler sarebbe l'attesa media / totale.

Supponi di avere un insieme di lavori J , all'interno di questi hai lavoro x che è il più lungo. Lascia che y sia un altro lavoro.

Se si inserisce x per ultimo, il tempo di attesa totale dei lavori eseguiti prima sarà totale ( J ) - tempo ( x ), mentre per qualsiasi altro sarà totale ( J ) - tempo ( y ). Pertanto, solo l'ultimo lavoro più lungo riduce il tempo di attesa. Quindi lo ripeti per il set di lavori rimanenti J- {x}, e così via ricorsivamente, mettendo sempre per ultimo uno più lungo. Il risultato finale è che li hai ordinati dal più breve al più lungo.

    
risposta data 17.01.2012 - 12:51
fonte
3

Se il lavoro breve (A) viene eseguito prima del lavoro lungo (B), allora A deve attendere solo la propria lunghezza per il completamento, mentre B deve attendere la propria lunghezza + la lunghezza di A. Se B va per primo, deve aspettare solo la sua lunghezza, ma A deve attendere l'intera lunghezza di B più la sua. In altre parole, hai un tempo di attesa totale di 2B + A anziché di 2A + B. Poiché il denominatore è 2 in entrambi i casi, la prima soluzione è migliore. Questo è tutto quello che c'è da fare per quella regola.

    
risposta data 17.01.2012 - 10:53
fonte

Leggi altre domande sui tag