GESTIONE DEI PROCESSI - home page luca orrù
GESTIONE DEI PROCESSI - home page luca orrù
GESTIONE DEI PROCESSI - home page luca orrù
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
2007<br />
SISTEMI OPERATIVI<br />
Gestione dei processi<br />
Domande di verifica<br />
Luca Orrù<br />
Centro Multimediale Montiferru<br />
13/05/2007
CENTRO MULTIMEDIALE MONTIFERRU<br />
Gestione dei processi<br />
1. Qual è la differenza tra un programma e un processo?<br />
Un programma descrive un algoritmo ed è una entità statica. Un processo invece è un<br />
programma in esecuzione. Un processo è quindi una entità dinamica. Possiamo pensare ad<br />
un processo come una sequenza di stati attraverso il quale evolve il sistema di elaborazione<br />
durante l’esecuzione di un programma. Ad un programma possono essere associati più<br />
processi. Infatti se si cambiano i dati in ingresso al programma, allora la sequenza delle<br />
istruzioni e di conseguenza la sequenza degli stati attraverso il quale evolve il sistema, potrà<br />
essere differente. Il flusso di esecuzione cambia ovvero il processo è diverso. Esempio:<br />
supponiamo di avere un programma in cui vi è ad un certo punto un’istruzione if then else.<br />
Con determinati dati in ingresso, per esempio viene eseguito il ramo then, mentre cambiando<br />
i dati in ingresso viene eseguito il ramo else. Si hanno due processi diversi. Ciascun processo<br />
associato ad un programma costituisce un’istanza del programma<br />
2. Si disegni e si descriva il diagramma degli stati di un processo (solo per la<br />
parte CPU-RAM) per un sistema operativo multiprogrammato e timesharing<br />
(esame 19-12-2003)<br />
Per descrivere gli stati in cui si può trovare un processo possiamo fare riferimento ad un<br />
sistema con una sola CPU (sistema monoprocessore). In questo caso i processi entreranno in<br />
competizione per l’utilizzo della risorsa CPU. Un solo processo alla volta può usare l’unità di
CENTRO MULTIMEDIALE MONTIFERRU<br />
elaborazione. Il processo che sta usando la CPU si trova in stato di esecuzione. Un processo<br />
che si trova in stato di esecuzione può transitare nello stato di terminato, nello stato di pronto<br />
oppure nello stato di bloccato. Il processo passa in stato di terminato se ha completato la sua<br />
attività (ha eseguito l’ultima istruzione del suo codice ) oppure se chiama un’apposita system<br />
call. Nel sistema UNIX un processo può terminare volontariamente la propria esecuzione<br />
chiamando la system call exit. In realtà in UNIX vi è uno stato intermedio tra lo stato di<br />
terminato e lo stato di esecuzione (stato zombie). Quando un processo invoca la system call<br />
exit, esso passa dallo stato di esecuzione allo stato zombie e rimane in questo stato finchè il<br />
padre non né rileva lo stato di terminazione.<br />
Il passaggio in stato di terminato può anche essere dovuto ad una terminazione forzata. Il<br />
sistema operativo può forzare la terminazione di un processo quando il processo tenta di<br />
eseguire un accesso ad una area di memoria che non gli appartiene (superamento dei limiti<br />
imposti dai registri di frontiera, registro base e registro limite) oppure perché il processo ha<br />
tentato l’esecuzione di un’ istruzione illegale (istruzione eseguibile solo in modo kernel)<br />
oppure per effetto della ricezione di un segnale (esempio in UNIX i segnali SIGKILL e<br />
SIGSTOP).<br />
La transizione dallo stato di esecuzione (running) allo stato di pronto (ready) può avvenire<br />
per i seguenti motivi:<br />
• in un sistema a divisione di tempo, se il processo in esecuzione termina il suo quanto<br />
di tempo, il sistema operativo lo sostituisce con un altro processo pronto, scelto dalla<br />
coda dei processi pronti attraverso un opportuno algoritmo di scheduling,<br />
implementato dal sistema operativo.<br />
• In un sistema in cui la CPU viene assegnata in base alla priorità dei processi, durante<br />
la sua esecuzione un processo, che è quello a priorità più alta tra tutti i processi pronti,<br />
potrebbe svegliare un processo a priorità più alta della sua. In questo caso il sistema<br />
operativo revoca l’uso della CPU al processo in esecuzione e l’assegna al processo<br />
risvegliato.<br />
Il passaggio dallo stato di pronto allo stato di esecuzione avviene quando al processo in<br />
esecuzione viene revocata la CPU e quindi il sistema operativo sceglie dalla coda dei processi<br />
pronti il nuovo processo da mandare in esecuzione. Un processo si dice che è in stato di<br />
pronto in quanto potrebbe essere eseguito ma deve attendere perché la CPU è in uso da un<br />
altro processo. Un altro stato possibile è lo stato nuovo.<br />
Un processo appena creato si trova in stato nuovo e passa in stato di pronto quando il sistema<br />
operativo decide che esso può competere per l’uso della CPU e quindi può essere mandato in<br />
esecuzione.<br />
La transizione di stato esecuzione-bloccato avviene quando un processo, per esempio, invoca<br />
una operazione di I/O. In questo caso, non potendo proseguire la sua esecuzione, il processo<br />
viene sospeso in attesa che l’operazione richiesta venga completata. Quando l’operazione<br />
richiesta è completata (si è verificato l’evento atteso ) il processo viene risvegliato ed è<br />
nuovamente pronto per l’esecuzione ma deve attendere che venga scelto dalla coda dei<br />
processi pronti. Un processo può passare in stato di bloccato anche perché attende di ricevere<br />
un segnale di sincronizzazione da un altro processo.
CENTRO MULTIMEDIALE MONTIFERRU<br />
Per esempio, nel sistema UNIX la sincronizzazione tra padre e figlio prevede che ogni<br />
processo padre possa sospendersi (attraverso la system call wait) in attesa della terminazione<br />
del processo figlio. Il padre rimane in stato di bloccato finché il figlio non termina e gli passa<br />
il suo stato di terminazione, terminazione volontaria oppure involontaria. Il figlio può passare<br />
il suo stato di terminazione al padre mediante la system call exit.<br />
3. Si disegni e si descriva il diagramma degli stati completo<br />
(CPU-memoria-memoria virtuale) di un processo. (esame 12-01-2005)<br />
Nuovo<br />
Assegnazione<br />
CPU<br />
Revoca<br />
sospensione<br />
CPU<br />
pronto bloccato<br />
creazione<br />
Swap-in<br />
Pronto<br />
swapped<br />
esecuzione<br />
Swapout<br />
Segnale di<br />
riattivazione<br />
Segnale di<br />
riattivazione<br />
terminazione<br />
Bloccato<br />
swapped<br />
Swap-out<br />
terminato<br />
Rispetto al diagramma degli stati CPU-RAM sono presenti i due stati di swapped (pronto<br />
swapped e bloccato swapped). Questi due stati sono gli stati di pronto e bloccato su disco.<br />
In molti sistemi è possibile trasferire un processo presente in memoria principale in memoria<br />
secondaria (disco) per liberare spazio su RAM per gli altri processi. L’operazione prende il<br />
nome di swapping. Un processo si trasporta in memoria secondaria soprattutto per motivi di<br />
efficienza. Infatti, un processo che è bloccato su RAM è in attesa di qualche evento e quindi<br />
non può usare la CPU per cui viene trasferito su disco tramite una operazione di swap-out.<br />
Quando il processo viene riattivato, perché si è verificato l’evento che attendeva, passa in<br />
stato di pronto su disco (pronto swapped). Quando è in pronto su disco può passare in stato<br />
pronto su RAM (operazione di swap-in) e da pronto su RAM può passare in stato di pronto<br />
swapped (operazione di swap-out).<br />
Tutti gli altri stati e le relative transizioni di stato sono identiche al caso CPU RAM:<br />
• esecuzione: il processo sta usando la CPU.<br />
• pronto: il processo potrebbe essere eseguito ma la CPU è occupata da un altro<br />
processo e quindi il processo attende che la CPU venga liberata.<br />
• bloccato: il processo è in attesa del verificarsi di un evento esterno che lo risvegli.<br />
• Terminato: il processo ha concluso la sua esecuzione<br />
• Nuovo: il processo è stato appena creato
CENTRO MULTIMEDIALE MONTIFERRU<br />
4. Descrivere gli stati di un processo UNIX (esame 21-03-2003)<br />
Creazione<br />
(fork)<br />
Nuovo<br />
Allocazione<br />
memoria<br />
Swap-in<br />
Esecuzione<br />
in user mode<br />
IRET<br />
Revoca<br />
CPU<br />
pronto Esecuzione in<br />
kernel mode<br />
swapped<br />
Swapout<br />
Swap-out<br />
Sospensione<br />
(system call o<br />
interrupt)<br />
signal<br />
Bloccato<br />
su ram<br />
Terminazione<br />
(system call<br />
exit)<br />
Il sistema operativo UNIX è un sistema operativo time-sharing vale a dire che la CPU viene<br />
assegnata ai processi solo per un time slice e poi viene revocata. Il diagramma degli stati è<br />
analogo al diagramma degli stati generale visto nella domanda 3. E’ presente però un nuovo<br />
stato: lo stato zombie. Questo è lo stato in cui si trova un processo che ha terminato la sua<br />
esecuzione ma è in attesa che il processo padre ne rilevi lo stato di terminazione. Esso uscirà<br />
dallo stato zombie, per passare in stato di terminato, quando il padre avrà raccolto il suo stato<br />
di terminazione oppure quando il padre termina la sua esecuzione.<br />
Lo stato di esecuzione (running) è stato in questo diagramma diviso in due parti: esecuzione<br />
di un processo in modo utente ed esecuzione di un processo in modo kernel. Il passaggio<br />
running user-mode-running kernel-mode si verifica quando il processo in esecuzione<br />
genera una chiamata di sistema (system call) oppure per effetto di un interrupt che richiede<br />
l’intervento del kernel. Il passaggio inverso si ha quando viene eseguita l’istruzione IRET<br />
(interrupt return) che indica la conclusione della routine di servizio associata alla system call<br />
o all’interrupt. Un processo che si trova in stato running kernel mode, se riceve un segnale di<br />
interrupt (INT), rimane in stato kernel mode per processare l’interrupt.<br />
Un processo può passare dallo stato running kernel-mode allo stato bloccato per effetto<br />
della chiamata di sistema wait che sospende il processo in esecuzione in attesa di un evento<br />
che lo risvegli.<br />
Un processo che si trova in esecuzione può subire la revoca della CPU perché ha terminato il<br />
suo time slice e quindi viene portato in stato pronto.<br />
wait<br />
INT<br />
zombie<br />
terminato
CENTRO MULTIMEDIALE MONTIFERRU<br />
Il processo che viene creato con la system call fork si trova in stato nuovo e passa in stato<br />
ready (pronto) nel momento in cui il sistema decide di allocargli la memoria.<br />
Le altre transizioni possibili sono:<br />
bloccato su RAM- swapped: il processo viene trasferito in memoria secondaria, perché<br />
magari è da molto tempo bloccato (operazione di swap out);<br />
pronto- swapped: il processo viene trasferito in memoria secondaria per liberare memoria<br />
per gli altri processi (operazione di swap out);<br />
swapped-pronto: il processo viene trasferito dalla memoria secondaria in memoria principale<br />
(operazione di swap in);<br />
bloccato su ram-pronto: il processo che è bloccato viene risvegliato tramite una signal e<br />
riportato in stato di pronto;<br />
5. Cosa s’intende per descrittore di un processo<br />
Un descrittore di un processo (PCB-Process Control Block) è una struttura dati che contiene<br />
varie informazioni ed è memorizzata in una area di memoria accessibile solo dal kernel del<br />
sistema operativo.<br />
Esiste un descrittore per ogni processo e tutti i descrittori sono organizzati in una tabella<br />
chiamata tabella dei processi.<br />
In un descrittore sono memorizzate le seguenti informazioni:<br />
a) Nome del processo: tipicamente viene usato un indice (numero intero) che identifica<br />
la posizione del processo nella tabella dei processi. In Unix l’identificativo di un<br />
processo prende il nome di PID (Process Identifier)<br />
b) Stato del processo: pronto, bloccato etc<br />
c) Modalità di servizio dei processi: specifica la modalità con la quale la CPU viene<br />
assegnata ai processi pronti. Per esempio:<br />
modalità FIFO ( chi è in attesa da più tempo viene servito per primo);<br />
priorità: ai vari processi può essere associata una priorità statica o dinamica;<br />
Per i sistemi a divisione di tempo viene specificato il quanto di tempo assegnato al<br />
processo e per i sistemi in tempo reale viene specificato il tempo entro cui il<br />
processo deve terminare la sua esecuzione (deadline).<br />
d) Informazioni sulla gestione della memoria: paginazione, segmentazione, limiti area<br />
di memoria allocata al processo (è identificata dai registri base e limite).<br />
e) Contesto del processo: ogni volta che il processo viene sospeso vengono salvati nel<br />
descrittore il contenuto del PC, il contenuto del registro di stato (PSW), il contenuto<br />
dei registri generali, accumulatore e contenuto dello stack pointer.<br />
f) Uso delle risorse: quali sono i dispositivi di I/O assegnati al processo e i file aperti<br />
dal processo.<br />
g) Identificativo del processo successivo: specifica quale è il processo successivo nella<br />
stessa coda di cui fa parte il processo (coda processi pronti o coda processi bloccati)
CENTRO MULTIMEDIALE MONTIFERRU<br />
6. Cosa s’intende per contesto di un processo e quali sono i passi<br />
fondamentali che caratterizzano un cambio di contesto tra processi?<br />
Il contesto di un processo comprende il contenuto del Program Counter (PC) (indirizzo della<br />
istruzione successiva da eseguire), il contenuto del registro di stato (PSW-Program Status<br />
Word), il contenuto dello Stack Pointer (SP) che identifica la cima dello stack, il contenuto<br />
dell’accumulatore e dei registri di uso generale (Ri). Nel momento in cui il processo che è in<br />
esecuzione viene sospeso o per effetto di una operazione di Input/Output oppure perché è<br />
scaduto il suo quanto di tempo (sistemi multi programmati operanti in modalità time sharing)<br />
il contesto del processo deve essere salvato. In entrambe i casi il sistema operativo esegue<br />
una serie di operazioni che prendono il nome di cambio di contesto (context switch).<br />
Quando il processo in esecuzione viene sospeso il sistema operativo salva il contesto del<br />
processo nel suo descrittore. Il descrittore del processo viene inserito nella coda dei processi<br />
pronti oppure nella coda dei processi bloccati. Il descrittore viene inserito nella coda dei<br />
processi pronti se il processo è stato sospeso perché è terminato il suo quanto di tempo e<br />
quindi passa dallo stato di esecuzione allo stato di pronto. Se invece il processo è stato<br />
sospeso perché è in attesa del verificarsi di qualche evento (completamento di una operazione<br />
di Input/Output) allora passa dallo stato di esecuzione allo stato di bloccato e quindi il suo<br />
descrittore andrà nella coda dei processi bloccati. Ora lo scheduler a breve termine del<br />
sistema operativo sceglie un nuovo processo tra quelli presenti nella coda dei processi pronti,<br />
secondo un determinato algoritmo, per esempio FIFO (viene scelto il processo che da più<br />
tempo è in attesa) e carica nel registro del processo in esecuzione il nome di tale processo. Il<br />
registro processo in esecuzione è un registro del processore che contiene il puntatore al<br />
descrittore del processo in esecuzione. Infine il sistema operativo carica il contesto del nuovo<br />
processo nei registri del processore.<br />
7. Si descrivano i concetti di processi concorrenti e processi cooperanti<br />
(esame del 19-04-2005)<br />
Due o più processi si dicono concorrenti se la loro esecuzione si sovrappone nel tempo<br />
ovvero se l’esecuzione di un processo inizia prima che termini l’altro processo.<br />
In figura è rappresentato il caso di due processi concorrenti nel caso di due unità di<br />
elaborazione (overlapping) e di una sola unità di elaborazione (interleaving)
CENTRO MULTIMEDIALE MONTIFERRU<br />
I processi concorrenti possono dividersi in:<br />
• processi indipendenti<br />
• processi interagenti<br />
Due processi sono indipendenti se l’esecuzione di un processo non influenza l’esecuzione<br />
dell’altro processo. Proprietà fondamentale di un processo indipendente è la riproducibilità<br />
ovvero l’esecuzione del processo in istanti diversi, insieme ad altri processi indipendenti,<br />
produce sempre lo stesso risultato se i dati d’ingresso rimangono gli stessi.<br />
Due processi sono interagenti se l’esecuzione di un processo influenza l’esecuzione<br />
dell’altro processo. Due processi possono interagire attraverso scambio di messaggi<br />
(cooperazione o comunicazione) per eseguire una attività comune oppure possono<br />
competere per la stessa risorsa (per esempio i due processi hanno una variabile in comune).<br />
Due processi interagenti non godono della proprietà di riproducibilità in quanto il risultato<br />
dell’esecuzione di un processo dipende dalla velocità relativa dei processi ( a seconda<br />
dell’ordine con cui i processi vengono eseguiti il risultato dell’esecuzione di un processo<br />
può cambiare anche se i dati d’ingresso sono gli stessi). Nel caso di cooperazione è<br />
importante l’ordine con la quale i processi vengono eseguiti (esempio produttore<br />
consumatore). Il corretto funzionamento del sistema produttore consumatore è garantito solo<br />
se la sequenza delle operazione è del tipo: inserimento messaggio- prelievo messaggioinserimento<br />
messaggio- prelievo messaggio. Se la sequenza fosse invece: inserimentoinserimento-prelievo<br />
allora il secondo inserimento produce la cancellazione del primo<br />
messaggio che non verrà quindi consumato. Analogamente se la sequenza fosse:<br />
inserimento-prelievo-prelievo lo stesso messaggio verrebbe prelevato due volte. Nel caso di<br />
competizione è invece importante che un solo processo alla volta usi la risorsa comune<br />
(mutua esclusione). In entrambe i casi si parla di sincronizzazione tra processi.<br />
8. Si descriva l’algoritmo di schedulazione dei processi Round Robin (RR)<br />
(esame del 15-11-2004)<br />
L’algoritmo Round Robin è uno degli algoritmi usati dallo scheduler del sistema operativo<br />
per scegliere quali tra i processi presenti nella coda dei processi pronti mandare in<br />
esecuzione (short term scheduling). La coda dei processi pronti viene gestita in modalità<br />
FIFO e ad ogni processo viene assegnata la CPU per un quanto di tempo prefissato (tra 10 e<br />
100ms). Se il processo richiede un tempo di esecuzione inferiore rispetto ad un quanto di<br />
tempo allora esso abbandona volontariamente la CPU e lo scheduler sceglie un nuovo<br />
processo dalla coda dei processi pronti (il primo della coda). Se invece il processo richiede<br />
più quanti di tempo allora, terminato il quanto di tempo a disposizione, il processo in<br />
esecuzione viene sospeso e inserito in fondo alla coda dei processi pronti e viene scelto il<br />
processo che è in testa alla coda. Il quanto di tempo deve essere sufficientemente grande<br />
rispetto al tempo necessario al cambio di contesto altrimenti, essendoci molti cambi di<br />
contesto, l’efficienza d’uso della CPU si riduce (aumenta l’overhead). Tipicamente nei<br />
sistemi moderni il tempo necessario per il cambio di contesto non eccede i 10µs.
CENTRO MULTIMEDIALE MONTIFERRU<br />
Poiché con questa tecnica un processo perde la CPU forzatamente dopo un quanto di tempo<br />
allora l’algoritmo RR fa parte della categoria degli algoritmi di scheduling con diritto di<br />
prelazione (preemptive scheduling). Il processo non abbandona la cpu volontariamente (in<br />
tal caso si parla di non preemptive scheduling) ma viene forzato ad abbandonarla.<br />
9. Si descriva il concetto di quanto di tempo e la sua applicazione nel<br />
meccanismo di schedulazione di UNIX (esame del 19-06-2006)<br />
Il sistema operativo UNIX è un sistema a divisione di tempo. Un processo rimane in<br />
esecuzione solo per un tempo prefissato a cui viene dato il nome di quanto di tempo o time<br />
slice. Tipicamente in UNIX il quanto di tempo è di 100ms. Un processo che è in esecuzione<br />
se non termina durante il quanto di tempo assegnato viene forzato dal S.O ad abbandonare<br />
l’uso della CPU per far posto ad un nuovo processo scelto dalla coda dei processi pronti. A<br />
tutti i processi presenti nella coda dei processi pronti viene assegnato un quanto di tempo e<br />
tutti a rotazione usano la CPU per il quanto di tempo assegnato (algoritmo Round Robin).<br />
La scelta del nuovo processo viene fatta dalla scheduler a breve termine secondo un modalità<br />
FIFO.<br />
Se un processo termina la sua esecuzione prima dello scadere del suo quanto di tempo<br />
abbandona volontariamente la CPU e lo scheduler sceglie un nuovo processo dalla coda dei<br />
processi pronti. In UNIX esistono diverse code di processi pronti ciascuna associata ad un<br />
diverso livello di priorità. Lo scheduler esegue l’algoritmo RR a partire dalla coda a priorità<br />
più alta e solo quando non ci sono processi nella coda a più alta priorità va a scegliere dalle<br />
altre code a priorità più bassa. Possibilità di starvation (attesa indefinita) per i processi a<br />
bassa priorità. ( si vedano anche le domande 8 e 11).<br />
10. Definire quali sono i livelli di scheduling e descrivere la funzione di<br />
ciascuno di essi<br />
In un sistema operativo esistono tre livelli di scheduling:<br />
a. short term scheduling (scheduling a breve termine);<br />
b. long term scheduling (scheduling a lungo termine);<br />
c. medium term scheduling (scheduling a medio termine);<br />
Lo short term scheduling è quella funzione del sistema operativo che si occupa di scegliere<br />
quale processo, tra i processi presenti nella coda dei processi pronti residenti in memoria<br />
centrale, assegnare la CPU. Questa funzione interviene ogni volta che il processo in<br />
esecuzione perde il controllo della CPU o perché ha terminato la propria esecuzione, oppure<br />
perché è scaduto il suo quanto di tempo, o anche perché ha richiesto una operazione di I/O.<br />
In tutti e tre i casi lo scheduler a breve termine, chiamato anche scheduler della CPU, deve<br />
scegliere il nuovo processo da mandare in esecuzione al posto del processo che era in<br />
esecuzione.
CENTRO MULTIMEDIALE MONTIFERRU<br />
Nel caso in cui il processo che era in esecuzione abbandona volontariamente l’uso della CPU<br />
(ha terminato la sua esecuzione oppure ha richiesto una operazione di I/O) si<br />
parla di scheduling senza diritto di prelazione (non preemptive scheduling).<br />
Si parla invece si scheduling con diritto di prelazione (preemptive scheduling) se il processo<br />
che era in esecuzione viene forzato ad abbandonare l’uso della CPU. Questo accade quando<br />
il processo ha terminato il suo quanto di tempo e ciò gli viene segnalato tramite un interrupt,<br />
oppure perché è stata completata una operazione di I/O (il processo in attesa viene risvegliato<br />
e se è più importante del processo in esecuzione passa immediatamente dallo stato di<br />
bloccato allo stato di pronto e allo stato di esecuzione). Lo scheduling a breve termine si<br />
esegue molto frequentemente perché un processo rimane in esecuzione per poco tempo (in<br />
UNIX 100 msec). Lo scheduler a breve termine deve quindi scegliere molto velocemente il<br />
nuovo processo da mandare in esecuzione altrimenti verrebbe sprecato molto tempo di CPU<br />
per il solo scheduling (overhead). Se impiegasse 20ms per scegliere il nuovo processo allora<br />
si sprecherebbe, il 20/(100+20)=16,67 per cento del tempo di CPU per il solo scheduling del<br />
processo.<br />
Il long term scheduling è quella funzione del sistema operativo che si occupa di scegliere<br />
quali processi presenti in memoria di massa caricare in memoria centrale per la successiva<br />
esecuzione. Lo scheduler a lungo termine deve scegliere un buon mix di processi da caricare<br />
in memoria centrale. Se scegliesse processi la maggior parte di tipo CPU bound, quindi che<br />
richiedono molto tempo di elaborazione e poche richieste di I/O, allora il sistema sarebbe<br />
sbilanciato nel senso che i dispositivi di I/O sarebbero sottoutilizzati. Se invece scegliesse un<br />
insieme di processi di tipo I/O bound, vale a dire processi che richiedono poca elaborazione e<br />
molte richieste di I/O allora lo scheduler a breve termine sarebbe la maggior parte del tempo<br />
inattivo in quanto la coda dei processi pronti sarebbe quasi sempre vuota perché la maggior<br />
parte dei processi si troverebbe nella coda dei processi bloccati in attesa del completamento<br />
delle operazioni di I/O. Lo scheduler a lungo termine deve anche controllare il numero di<br />
processi presenti contemporaneamente in memoria centrale (grado di multiprogrammazione).<br />
Più sono i processi presenti in memoria centrale, minore sarà il tempo di esecuzione dedicato<br />
a ciascun processo. Lo scheduler a lungo termine può quindi limitare il grado di<br />
multiprogrammazione in modo da fornire un servizio migliore ai vari processi.<br />
Il medium term scheduling è quella funzione del sistema operativo che ha il compito di<br />
trasferire momentaneamente i processi dalla memoria di massa alla memoria centrale e<br />
vieceversa. Questo scheduler opera sui processi che sono già stati parzialmente eseguiti. Nel<br />
caso debba essere liberato spazio in memoria centrale, per far posto ad altri processi, allora lo<br />
scheduler a medio termine sceglie quali processi trasferire dalla memoria centrale alla<br />
memoria di massa (operazione di swap-out). L’operazione di caricamento da memoria di<br />
massa alla memoria centrale prende invece il nome di swap-in.
CENTRO MULTIMEDIALE MONTIFERRU<br />
11. Si descriva il meccanismo di schedulazione dei processi di UNIX (esame del<br />
23-01-2004)<br />
Unix è un sistema a divisione di tempo (time sharing) e quindi ogni processo usa la CPU per<br />
un quanto di tempo prefissato e poi viene forzato ad abbandonare la CPU. Lo scheduler usa<br />
quindi un algoritmo con diritto di prelazione (preemption scheduling). L’algoritmo di<br />
scheduling usato è basato sulle priorità. In particolare in UNIX lo scheduler usa più code di<br />
priorità. Tutti i processi con la stessa priorità fanno parte della stessa coda e vengono scelti<br />
secondo un algoritmo Round Robin. Lo scheduler ad ogni quanto di tempo sceglie la coda a<br />
priorità più elevata che contiene almeno un processo. Quando tutti i processi della coda a più<br />
alta priorità sono stati eseguiti (la coda è vuota) si passa ad eseguire i processi della coda<br />
successiva in ordine di priorità. La priorità dei processi è dinamica e viene ricalcolata ad ogni<br />
secondo in modo da far diminuire la priorità di quei processi che usano molto la CPU e<br />
quindi evitare fenomeni di starvation per quei processi cha hanno bassa priorità.<br />
nuova priorità = valore iniziale +uso della CPU.<br />
Il valore iniziale della priorità dei processi utente è maggiore di 0 mentre i processi eseguiti<br />
in modalità kernel hanno valore negativo di priorità. In Unix infatti più grande è il valore più<br />
bassa è la priorità. Un processo può volontariamente diminuire la propria priorità attraverso<br />
la system call nice.<br />
Si descrivano le modalità di esecuzione dei processi sotto UNIX (esame del<br />
19-04-2005)<br />
L’esecuzione dei processi in UNIX può avvenire in modalità background (non interattiva)<br />
oppure in modalità foreground (interattiva o in primo piano).<br />
Se un processo è in esecuzione in modalità foreground, il prompt della shell non torna finchè<br />
il processo non è terminato e quindi l’utente non può digitare nuovi comandi.<br />
Se un processo è in esecuzione in modalità background allora la shell torna immediatamente<br />
a disposizione dell’utente subito dopo la digitazione del comando da shell. Ora l’utente può<br />
digitare nuovi comandi (eseguire nuovi programmi) e contemporaneamente il processo<br />
avviato continua la sua esecuzione in background. Per avviare un processo in modalità<br />
background occorre digitare il comando seguito dal simbolo di & (e commerciale).<br />
Esempio: Si vuole decomprimere un grosso file di nome pippo.gz in modalità background.<br />
Uso il comando gunzip pippo.gz &. Nel fra tempo che il processo è in esecuzione la shell<br />
torna subito a disposizione dell’utente che può eseguire nuovi comandi. Quando il processo<br />
gunzip ha terminato, viene notificata la sua terminazione.
CENTRO MULTIMEDIALE MONTIFERRU<br />
12. Si descriva l’algoritmo di scheduling Shortest Job First; un esempio è<br />
vivamente consigliato (esame del 12-07-2006)<br />
L’algoritmo di scheduling Shortest Job First (SJF) appartiene alla categoria degli algoritmi<br />
di short term scheduling usati dal sistema operativo per scegliere a quale tra i processi pronti<br />
assegnare la CPU. Con questo algoritmo viene scelto il processo che ha il minor tempo di<br />
esecuzione. Il problema è sapere in anticipo quanto vale il tempo di esecuzione di un<br />
processo. Questo non è praticamente possibile. Allora viene fatta una predizione basandosi<br />
sulle precedenti sequenze di esecuzioni di tale processo. L’algoritmo SJF è ottimale, nel<br />
senso che rende minimo il tempo di attesa medio per un dato insiemi di processi.<br />
Si consideri il seguente esempio:<br />
Siano T.E e T.A rispettivamente i tempi di esecuzione e di arrivo in coda di 4 processi<br />
P1,P2,P3,P4.<br />
processi T.E T.A<br />
P1 10 0<br />
P2 20 0<br />
P3 5 7<br />
P4 60 15<br />
Con l’algoritmo SJF viene prima eseguito il processo con il tempo di esecuzione più breve e<br />
cioè P1.<br />
P1 e P2 arrivano in coda allo stesso istante e poiché P1 è più breve viene eseguito P1. Prima<br />
che P1 termini arriva in coda P3 che è più breve di P2 e quindi viene eseguito P3 e non P2,<br />
anche se P2 è arrivato prima di P3. Poi viene eseguito P2 e infine P4.<br />
Il diagramma temporale è il seguente :<br />
P1<br />
P3<br />
P2<br />
P4<br />
10 15 35<br />
95<br />
tempo
CENTRO MULTIMEDIALE MONTIFERRU<br />
Il tempo di turnaround (tempo medio di completamento dell’insieme dei processi) vale:<br />
Tempo di turnaround = (10+8+35+80)/4=33.25<br />
Infatti:<br />
P1 attende 10 prima di terminare<br />
P2 attende (15-7)=8 prima di terminare<br />
P3 attende (35-0)=35<br />
P4 attende (95-15)=80<br />
L’algoritmo SJF può essere sia con prelazione sia senza prelazione. Un algoritmo SJF con<br />
prelazione sostituisce il processo attualmente in esecuzione con quello che è appena arrivato<br />
in coda. La sostituzione avviene se il processo che arriva in coda ha un tempo di esecuzione<br />
inferiore al tempo che resta al processo in esecuzione. Esempio: se il processo che è in<br />
esecuzione deve ancora essere eseguito per 5 unità di tempo e arriva un processo che<br />
richiede solo 4 unità di tempo allora il processo in esecuzione viene sospeso a favore del<br />
nuovo processo e terminerà la propria esecuzione successivamente. Nel caso di SJF senza<br />
prelazione il processo in esecuzione continua ad essere eseguito anche se arriva un altro<br />
processo che richiede un tempo di esecuzione inferiore rispetto al tempo che resta al<br />
processo in esecuzione. (l’esempio fatto precedentemente è relativo ad un SJF senza<br />
prelazione).<br />
13. Descrivere i principali algoritmi di short term scheduling<br />
Gli algoritmi di short term scheduling sono degli algoritmi usati dal sistema operativo per<br />
scegliere quale processo, tra i processi presenti nella coda dei processi pronti, mandare in<br />
esecuzione cioè assegnargli la CPU. Questa funzione del Sistema Operativo interviene ogni<br />
volta che un processo in esecuzione abbandona forzatamente o volontariamente la CPU.<br />
Gli algoritmi più utilizzati sono i seguenti:<br />
FIFO(First In First Out) o FCFS (First Come First Served):<br />
Lo scheduler sceglie, tra tutti i processi pronti, il processo che è in attesa da più tempo ossia<br />
il primo arrivato nella coda dei processi pronti. Il processo che perde l’uso della CPU viene<br />
inserito in ultima posizione nella coda dei processi bloccati (richiesta di I/O). Il processo<br />
mantiene la CPU fino al rilascio spontaneo (algoritmo senza prelazione non preemptive<br />
scheduling) che può avvenire perché il processo ha richiesto una operazione di I/O oppure<br />
perché ha terminato. I tempi medi di attesa sono alti.<br />
SJF (Shortest Job First): Tra tutti i processi presenti nella coda dei processi pronti viene<br />
scelto il processo che ha il minor tempo di esecuzione. Problema: conoscere in anticipo la<br />
durata della successiva sequenza di operazioni di un processo. Questo è impossibile, per cui<br />
viene fatta una predizione del tempo di esecuzione basandosi sui precedenti tempi di<br />
esecuzione del processo. Con questa tecnica i tempi di attesa sono minimi. Può essere senza<br />
prelazione oppure con prelazione come già detto in una delle risposte precedenti.
CENTRO MULTIMEDIALE MONTIFERRU<br />
Round Robin (RR): I processi sono organizzati in una coda circolare. Ogni processo viene<br />
scelto seconda una modalità FIFO ed al processo scelto viene assegnata la CPU per un<br />
quanto di tempo prefissato, terminato il quale la CPU gli viene revocata e il processo passa in<br />
coda alla lista. Il quanto di tempo deve essere molto più grande del tempo necessario per il<br />
cambio di contesto altrimenti l’efficienza dell’uso della CPU si riduce significativamente.<br />
A priorità: in un sistema che usa un algoritmo a priorità, ogni processo ha una priorità e la<br />
CPU viene assegnata al processo con priorità maggiore. Se due processi hanno la stessa<br />
priorità viene scelto il processo che è arrivato per primo (FCFS). L’algoritmo può essere con<br />
prelazione oppure senza prelazione. Se adotta la prelazione allora, se arriva nella coda dei<br />
processi pronti un processo che ha una priorità più alta del processo in esecuzione, questo<br />
ultimo viene sospeso e sostituito con il processo con priorità più alta. Nel caso di scheduling<br />
senza prelazione, se arriva un processo con priorità più alta di quello in esecuzione ( e questo<br />
significa che ha anche priorità più alta dei processi presenti in coda), il processo in<br />
esecuzione continua la sua esecuzione e il nuovo processo viene inserito in testa alla coda dei<br />
processi pronti. Il problema di questa tecnica di scheduling è lo starvation ossia l’attesa<br />
indefinita. Un processo che ha bassa priorità rischia di attendere indefinitamente prima poter<br />
avere la CPU perché ci sono sempre processi con priorità più alta della sua.<br />
La priorità di un processo può essere statica (assegnata all’atto della creazione del processo e<br />
non più modificabile) o dinamica (può cambiare durante la vita del processo). La priorità<br />
dinamica viene usata per risolvere il problema dello starvation. Ad un processo che è da<br />
molto tempo in attesa gli viene aumentata la priorità e questo avviene periodicamente a<br />
intervalli di tempo prefissati. In questo modo anche un processo a bassa priorità può ottenere<br />
la priorità più alta. Un processo che usa molto la CPU subisce una diminuzione della priorità,<br />
mentre un processo che usa molto i dispositivi di I/O ottiene un aumento della priorità.<br />
14. Data la seguente tabella dei processi (T.A tempo di arrivo nel sistema, T.E<br />
tempo di esecuzione) calcolare il tempo di turnaround medio con gli<br />
algoritmi di scheduling FCFS e SJF: (esame del 09-05-2007)<br />
Processi T.E T.A<br />
P1 20 0<br />
P2 5 15<br />
P3 10 10<br />
P4 5 20
CENTRO MULTIMEDIALE MONTIFERRU<br />
L’algoritmo di scheduling FCFS (First Come First Served) sceglie tra tutti i processi<br />
presenti nella coda dei processi pronti quello che da più tempo è in attesa, mentre<br />
l’algoritmo SJF (Shortest Job First) sceglie il processo con il minor tempo di esecuzione.<br />
Nel caso FCFS abbiamo la seguente situazione:<br />
Il primo processo ad essere eseguito è il processo P1 che arriva all’istante t=0;<br />
Il secondo processo è il processo P3 che arriva all’istante t=10;<br />
Il terzo processo è il processo P2 che arriva all’istante t=15;<br />
Per ultimo viene eseguito il processo P4 che arriva all’istante t=20;<br />
Il tempo di turnaround medio è dunque il seguente:<br />
Tempo di turnaround=[20+(30-10)+(35-15)+(40-20)]/4=20<br />
Infatti :<br />
P1 attende 20 prima di terminare<br />
P3 attende (30-10)=20 prima di terminare<br />
P2 attende (35-15)=20 prima di terminare<br />
P4 attende (40-20)=20 prima di terminare<br />
Di seguito è rappresentato il diagramma temporale<br />
P1<br />
P3<br />
P2<br />
P4<br />
20 30 35 40<br />
tempo<br />
Nel caso SJF abbiamo invece:<br />
Il primo processo ad essere eseguito è il processo P1 perché è il primo che arriva in coda;<br />
Il secondo processo ad essere eseguito è il processo P2 perché quando termina P1 (istante 20) P2 è<br />
in coda con P3 e P4. I tempi di esecuzione di P2 e P4 sono gli stessi ma P2 è arrivato prima, per cui<br />
viene schedulato P2;<br />
Il terzo processo ad essere eseguito è il processo P4 perché ha un tempo di esecuzione inferiore<br />
rispetto a P3;<br />
Infine viene schedulato P3;
CENTRO MULTIMEDIALE MONTIFERRU<br />
Il tempo di turnaround medio è dunque il seguente:<br />
Tempo di turnaround=[20+(25-15)+(30-20)+(40-10)]/4=17,5<br />
(inferiore rispetto all’algoritmo FCFS)<br />
Infatti :<br />
P1 attende 20 prima di terminare<br />
P2 attende (25-15)=10 prima di terminare<br />
P4 attende (30-20)=10 prima di terminare<br />
P3 attende (40-10)=30 prima di terminare<br />
Di seguito è rappresentato il diagramma temporale<br />
P1<br />
P2<br />
P4<br />
P3<br />
20 25 30 40<br />
15. Data la seguente tabella di processi con i relativi tempi di esecuzione (T.E)<br />
e di arrivo nel sistema (T.A), disegnare l’andamento temporale dei processi<br />
supponendo di adottare una polita di schedulazione FCFS (FIFO) e<br />
calcolare il tempo di turnaround medio.<br />
Processi T.E T.A<br />
P1 30 0<br />
P2 25 5<br />
P3 80 6<br />
P4 5 20<br />
tempo
CENTRO MULTIMEDIALE MONTIFERRU<br />
Il tempo di turnround medio è il tempo medio di completamento dell’insieme dei processi.<br />
Il diagramma temporale dell’esecuzione dei processi è il seguente:<br />
P1<br />
P2<br />
P3<br />
30 55<br />
135 140<br />
Con la politica FCFS il primo processo che viene mandato in esecuzione è il processo che è arrivato<br />
per primo. Nell’esempio è il processo P1.<br />
Dopo il processo P1 viene eseguito il processo P2 perché arriva all’istante 5, poi il processo P3 che<br />
arriva all’istante 6 e infine il processo P4.<br />
Il processo P1 rimane in esecuzione per 30 unità di tempo e poiché viene servito subito, il suo<br />
tempo di attesa per il completamento è pari a 30 unità. P2 invece arriva in t=5 ma deve attendere<br />
che P1 sia terminato, per cui entra in esecuzione all’istante t=30. Il suo tempo di attesa per il<br />
completamento è pari a (55-5)=50 unità di tempo.<br />
P3 deve attendere che P1 e P2 abbiano completato. Il processo P3 arriva in t=6 e prima che venga<br />
eseguito deve attendere il completamento di P1 e P2. Quindi il suo tempo di attesa è pari a (135-<br />
6)=129. Il processo P4 arriva in t=20 e quindi attende (140-20)=120 prima di essere completato.<br />
Il tempo medio di turnround è dunque pari a :<br />
P4<br />
tempo di turnround= [30+(55-5)+(135-6)+(140-20)]/4= 82,25<br />
tempo