Pianificazione preventiva e non preventiva

Differenze chiave tra pianificazione preventiva e non preventiva

  • Nella pianificazione preventiva, la CPU viene allocata ai processi per un periodo di tempo specifico e la CPU con pianificazione non preventiva viene allocata al processo fino al suo termine.
  • Nella pianificazione preventiva, le attività vengono scambiate in base alla priorità, mentre nella pianificazione non preventiva non avviene alcun cambio.
  • L'algoritmo preventivo ha il sovraccarico di commutare il processo dallo stato pronto allo stato in esecuzione, mentre la pianificazione non preventiva non ha tale sovraccarico di commutazione.
  • La pianificazione preventiva è flessibile, mentre la pianificazione non preventiva è rigida.
Programmazione preventiva e non preventiva
Programmazione preventiva e non preventiva

Cos'è la programmazione preventiva?

La pianificazione preventiva è un metodo di pianificazione in cui le attività vengono per lo più assegnate con le relative priorità. A volte è importante eseguire un'attività con priorità più alta prima di un'altra attività con priorità più bassa, anche se l'attività con priorità più bassa è ancora in esecuzione.

In quel momento, l'attività con priorità più bassa viene mantenuta per un po' di tempo e riprende quando l'attività con priorità più alta termina la sua esecuzione.

Cos'è la programmazione non preventiva?

In questo tipo di metodo di pianificazione, la CPU è stata allocata a un processo specifico. Il processo che mantiene occupata la CPU rilascerà la CPU cambiando contesto o terminando.

È l'unico metodo che può essere utilizzato per varie piattaforme hardware. Questo perché non necessita di hardware specializzato (ad esempio un timer) come la pianificazione preventiva.

La pianificazione non preventiva si verifica quando un processo entra volontariamente nello stato di attesa o termina.

Pianificazione preventiva e non preventiva: tabella comparativa

Ecco un confronto testa a testa tra pianificazione preventiva e non preventiva. Le principali differenze tra la pianificazione preventiva e non preventiva nel sistema operativo sono le seguenti:

Programmazione preventiva Programmazione non preventiva
Un processore può essere autorizzato a eseguire i diversi processi nel mezzo dell'esecuzione di un processo corrente. Una volta che il processore inizia la sua esecuzione, deve terminarla prima di eseguire l'altra. Non può essere messo in pausa a metà.
L'utilizzo della CPU è più efficiente rispetto alla pianificazione non preventiva. L'utilizzo della CPU è meno efficiente rispetto alla pianificazione preventiva.
I tempi di attesa e di risposta della pianificazione preventiva sono inferiori. Il tempo di attesa e di risposta del metodo di pianificazione senza prelazione è più elevato.
La pianificazione preventiva ha la priorità. Il processo con la priorità più alta è un processo attualmente utilizzato. Quando un processo entra nello stato di esecuzione, lo stato di quel processo non viene mai eliminato dallo scheduler finché non termina il suo lavoro.
La pianificazione preventiva è flessibile. La pianificazione non preventiva è rigida.
Esempi: – Primo tempo rimanente, Round Robin, ecc. Esempi: Primo arrivato primo servito, Prima il lavoro più breve, Pianificazione prioritaria, ecc.
L'algoritmo di pianificazione preventiva può essere anticipato, ovvero il processo può essere pianificato Nel processo di pianificazione non preventiva non è possibile programmare
In questo processo la CPU viene assegnata ai processi per un determinato periodo di tempo. In questo processo, la CPU viene allocata al processo finché non termina o passa allo stato di attesa.
L'algoritmo preventivo ha l'overhead di commutare il processo dallo stato pronto allo stato in esecuzione e viceversa. La pianificazione non preventiva non ha tale sovraccarico nel passaggio del processo dall'esecuzione allo stato pronto.

Vantaggi della pianificazione preventiva

Ecco i vantaggi/vantaggi del metodo di pianificazione preventiva:

  • Il metodo di pianificazione preventiva è più robusto, approccio in modo che un processo non possa monopolizzare la CPU
  • Scelta dell'attività in esecuzione riconsiderata dopo ogni interruzione.
  • Ogni evento causa l'interruzione delle attività in esecuzione
  • Il sistema operativo garantisce che l'utilizzo della CPU sia lo stesso per tutti i processi in esecuzione.
  • In questo caso, l'utilizzo della CPU è lo stesso, ovvero tutti i processi in esecuzione utilizzeranno la CPU allo stesso modo.
  • Questo metodo di pianificazione improvvisa anche il tempo medio di risposta.
  • La pianificazione preventiva è vantaggiosa quando la utilizziamo per l'ambiente multi-programmazione.

Vantaggi della pianificazione non preventiva

Ecco i vantaggi/vantaggi del metodo di pianificazione non preventiva:

  • Offre un basso sovraccarico di pianificazione
  • Tende ad offrire un throughput elevato
  • È un metodo concettualmente molto semplice
  • Less risorse computazionali necessarie per la pianificazione

Svantaggi della pianificazione preventiva

Di seguito sono riportati gli svantaggi della pianificazione preventiva:

  • Necessitano di risorse computazionali limitate per la pianificazione
  • Lo scheduler impiega più tempo per sospendere l'attività in esecuzione, cambiare contesto e inviare la nuova attività in arrivo.
  • Il processo con priorità bassa deve attendere più a lungo se alcuni processi ad alta priorità arrivano continuamente.

Svantaggi della pianificazione non preventiva

Ecco i contro/svantaggi del metodo di pianificazione non preventiva:

  • Può portare alla fame soprattutto per quelle attività in tempo reale
  • I bug possono causare il blocco di una macchina
  • Può fare in tempo reale e Pianificazione prioritaria difficile
  • Scarso tempo di risposta per i processi

Esempio di pianificazione non preventiva

Nella pianificazione SJF non preventiva, una volta assegnato il ciclo della CPU al processo, il processo lo mantiene finché non raggiunge uno stato di attesa o termina.

Si considerino i seguenti cinque processi, ciascuno dotato di un proprio tempo di burst e di un proprio tempo di arrivo.

Coda di elaborazione Tempo di scoppio Orario di arrivo
P1 6 2
P2 2 5
P3 8 1
P4 3 0
P5 4 4

Passo 0) Al tempo=0, P4 arriva e inizia l'esecuzione.

Esempio di pianificazione non preventiva

Passo 1) Al tempo = 1, arriva il processo P3. Ma P4 necessita ancora di 2 unità di esecuzione per essere completata. Continuerà l'esecuzione.

Esempio di pianificazione non preventiva

Passo 2) Al tempo =2, il processo P1 arriva e viene aggiunto alla coda di attesa. P4 continuerà l'esecuzione.

Esempio di pianificazione non preventiva

Passo 3) Al tempo = 3, il processo P4 terminerà la sua esecuzione. Viene confrontato il tempo di burst di P3 e P1. Il processo P1 viene eseguito perché il suo tempo di burst è inferiore rispetto a P3.

Esempio di pianificazione non preventiva

Passo 4) Al tempo = 4, il processo P5 arriva e viene aggiunto alla coda di attesa. P1 continuerà l'esecuzione.

Esempio di pianificazione non preventiva

Passo 5) Al tempo = 5, il processo P2 arriva e viene aggiunto alla coda di attesa. P1 continuerà l'esecuzione.

Esempio di pianificazione non preventiva

Passo 6) Al tempo = 9, il processo P1 terminerà la sua esecuzione. Viene confrontato il tempo di burst di P3, P5 e P2. Il processo P2 viene eseguito perché il suo tempo di burst è il più basso.

Esempio di pianificazione non preventiva

Passo 7) All'istante=10, P2 è in esecuzione e P3 e P5 sono in coda di attesa.

Esempio di pianificazione non preventiva

Passo 8) Al tempo = 11, il processo P2 terminerà la sua esecuzione. Viene confrontato il tempo di burst di P3 e P5. Il processo P5 viene eseguito perché il suo tempo di burst è inferiore.

Esempio di pianificazione non preventiva

Passo 9) Al tempo = 15, il processo P5 terminerà la sua esecuzione.

Esempio di pianificazione non preventiva

Passo 10) Al tempo = 23, il processo P3 terminerà la sua esecuzione.

Esempio di pianificazione non preventiva

Passo 11) Calcoliamo il tempo medio di attesa per l'esempio sopra.

Wait time 
P4= 0-0=0
P1=  3-2=1
P2= 9-5=4
P5= 11-4=7
P3= 15-1=14
Average Waiting Time= 0+1+4+7+14/5 = 26/5 = 5.2

Esempio di pianificazione preventiva

Considera i seguenti tre processi in Girone all'italiana

Coda di elaborazione Tempo di scoppio
P1 4
P2 3
P3 5

Esempio di pianificazione preventiva

Passo 1) L'esecuzione inizia con il processo P1, che ha un tempo di burst 4. Qui ogni processo viene eseguito per 2 secondi. P2 e P3 sono ancora in coda d'attesa.

Esempio di pianificazione preventiva

Passo 2 ) Al tempo =2, P1 viene aggiunto alla fine della coda e P2 inizia l'esecuzione

Esempio di pianificazione preventiva

Passo 3) Al momento=4 , P2 viene anticipato e aggiunto alla fine della coda. P3 inizia l'esecuzione.

Esempio di pianificazione preventiva

Passo 4) Al momento=6 , P3 viene anticipato e aggiunto alla fine della coda. P1 inizia l'esecuzione.

Esempio di pianificazione preventiva

Passo 5) Al tempo=8, P1 ha un tempo di burst pari a 4. Ha completato l'esecuzione. P2 inizia l'esecuzione

Esempio di pianificazione preventiva

Passo 6) P2 ha un tempo di burst pari a 3. È già stato eseguito per 2 intervalli. Al tempo=9, P2 completa l'esecuzione. Quindi, P3 inizia l'esecuzione fino al completamento.

Esempio di pianificazione preventiva

Passo 7) Calcoliamo il tempo medio di attesa per l'esempio sopra.

Wait time 
P1= 0+ 4= 4
P2= 2+4= 6
P3= 4+3= 7