CAPITOLO 8 - Modelli di Processo
SISTEMI MULTIPROGRAMMATI
La Progettazione di un sistema operativo
multiprogrammato, sia che ci si riferisca ad
una macchina a singolo utente, come
Windows 95, Windows 98 o 2000 oppure
Professional come Windows XP, sia che ci si
riferisca ad un sistema per main frame
come OS/390, ruota intorno al concetto
base di Processo.
SINTESI
 STATI dei processi
 STRUTTURE DATI dei processi
In questa slide sono riportati i due aspetti fondamentali di un processo affrontati
e discussi in questo capitolo, sono gli stati dei processi e le strutture dati di
processi.
SCOPI DELLA PROGETTAZIONE DI UN S.O.
 Interallacciare l’esecuzione dei processi
- massimizzando l’uso del processore
 Allocare le risorse ai processi
- consentendo l’uso efficiente delle stesse
 Supportare la comunicazione fra processi consentendo:
- lo scambio di informazioni
- la creazione / terminazione
evitando:
- lo stallo
Gli scopi fondamentali della progettazione di un
sistema operativo sono quelli di interallacciare
l’esecuzione dei processi al fine di massimizzare
l’uso del processore, di allocare le diverse risorse, di
consentire la comunicazione tra processi
consentendo lo scambio di informazioni nonché
ovviamente la creazione e la terminazione dei
processi.
DESCRIZIONE E CONTROLLO DEI PROCESSI
Vediamo ora la descrizione e il controllo dei processi. Nella prossima slide si presenta prima il concetto di processo,
quindi cosa è una traccia e subito dopo in cosa consiste l’interallacciamento di più tracce.
DESCRIZIONE DEI PROCESSI
 Un PROCESSO O TASK è:
 l’esecuzione di una sequenza di istruzioni
all’interno di un programma.
 Una TRACCIA è:
 la sequenza di istruzioni eseguite in un
programma
 Una TRACCIA INTERALLACCIATA è
 l’insieme delle varie tracce concatenate
Un Processo è una sequenza di istruzioni eseguite
all’interno di un programma. La descrizione delle istruzioni
così come vengono eseguite dalla macchina costituiscono
la traccia di un processo, mentre la concatenazione di più
tracce relative a processi distinti danno luogo ad una
traccia interallacciata.
ESEMPIO DI MULTITASKING (TIMESHARING)
Questa slide rappresenta la memoria principale (main
memory) ed il solo program counter (PC) di un computer.
In memoria principale sono memorizzati tre programmi A,
B e C con qualcosa in più (sono le strutture dati associate
ai tre programmi) che trasformano questi programmi in
processi. Il programma A è memorizzato a partire dalla
locazione a (alfa), il programma B dalla locazione b (beta)
ed il programma C a partire dalla locazione g (gamma). Il
PC punta alla prima istruzione del programma B, e ciò
segnala che è in running quel processo. Sempre in
memoria principale è allocato, all’inizio della memoria a
partire dalla locazione d (delta), un programma
denominato dispatcher, è quello che si occupa di mandare a turno in running i tre processi A, B e C. Invero il dispatcher
che è una parte del sistema operativo è così allocato e richiama l’attenzione che solitamente la prima parte della
memoria è riservata al contenimento del sistema operativo o almeno una parete di esso atteso che non è conveniente
tenere tutto il sistema operativo in memoria principale. Per meglio spiegare il funzionamento del sistema, nelle
prossime slides saranno presentate tre esemplificazioni dei processi A, B e C con l’interallacciamento delle rispettive
tracce.
TRACCE DI PROCESSI
Si può notare che il
processo A ha una
traccia di 12 istruzioni, il
processo B una traccia
di 4 istruzioni ed il
processo C una traccia
di 12 istruzioni. Le
tracce sono relative alle
esecuzioni
delle
istruzioni
contenute
nelle locazioni con
indirizzo ottenuto dalla
somma del valore
dell’indirizzo di base di
ciascun programma con
l’aggiunta dell’indirizzo
relativo all’interno del
programma.
(DAL PUNTO DI VISTA DEL PROCESSORE RISULTA:) TRACCE COMBINATE DEI PROCESSI
Supponendo che il dispatcher esegua
l’operazione di selezione e messa in
running del prossimo processo in soli 6
cicli di macchina, questa slide mostra le
tracce concatenate dei processi A, B e C
con quella del dispatcher ogni qual volta
che lo stesso viene riavviato.
Verosimilmente
questa
è
una
rappresentazione
estremamente
semplificata poiché normalmente la
traccia del dispatcher è molto più lunga
ed anche il quanto di tempo di
assegnazione del processore ad un
processo in un sistema time sharing (
quale appunto quello a cui ci si sta
riferendo ) è molto più grande,
dell’ordine di qualche centinaio di
microsecondi e quindi la traccia relativa
a ciascun processo includerà alcune centinaia di istruzioni. Va anche precisato che la semplificazione della figura attiene
anche al numero di processi concatenati presenti nel sistema atteso che molto spesso si ha a che fare con centinaia se
non migliaia di processi e non con tre processi come in questo esempio. Nella slide è notevole la circostanza che il
processo B, per la circostanza che l’ultima istruzione, la quarta, è relativa ad una operazione lunga ( vedasi ad esempio
un I/O), si blocca prima che sia estinto il quanto di tempo assegnato. La slide mostra che invero successivamente
andranno in running i processi C ed A ed ovviamente il dispatcher nulla dice del processo B che potrebbe stare ancora
ad eseguire il trasferimento in DMA relativo alla istruzione 4.
QUALCHE CONSIDERAZIONE SUL DISPATCHER
L’interallacciamento della slide precedente solleva immediatamente alcuni problemi: come fa il processore a sospendere
un processo e a riprenderne successivamente l’esecuzione esattamente dal punto della sospensione come se nulla fosse
accaduto? La risposta è che da qualche parte deve essere memorizzato lo stato della sospensione per poi poter riavviare
l’esecuzione esattamente dal punto in cui il processo è stato sospeso e con le stesse condizioni all’atto della sospensione,
a questo servono le tabelle descrittive del processo, note come strutture dati del processo.
MODELLO DI PROCESSO A DUE STATI
Prima di descrivere le strutture
dati di un processo, che
costituisce la seconda parte
del capitolo, osserviamo che
una volta entrati nel sistema,
alternativamente i processi in
avanzamento passano dallo
stato di non running allo stato
di running e viceversa fino ad
uscire dal sistema, così come
presentato nella slide.
MODELLO DI PROCESSO A DUE STATI
Il meccanismo che il sistema adotta
allo scopo, è presentato in questa
slide. Come si vede i processi
ammessi nel sistema vengono
inseriti in una coda da cui escono per
andare in running e nella quale (se
non completati) si riaccodano per
tornare ad essere eseguiti nel
successivo slice, dopo che tutti gli
altri processi nella coda hanno avuto
la possibilità di avanzare anch’essi
per il rispettivo quanto di tempo. E’
spontanea la domanda: cosa viene
inserita nella coda? La cosa più
semplice potrebbe essere di
accodare il nome del processo e
l’indirizzo della sospensione ma è facile capire che non basta ed invero quello che viene accodato è il nome del processo
ed il puntatore ad una tabella che contiene la storia della sospensione, o, all’inizio il modo con cui il processo deve
essere avviato. Questa ultima considerazione fa capire la necessità di una struttura dati che deve accompagnare il
processo.
CREAZIONE DEI PROCESSI
CREARE UN PROCESSO SIGNIFICA:
Pertanto creare un processo significa creare la struttura dati
utile a gestirlo oltre ad allocarlo in uno spazio di
 costruire le strutture dati utili a gestirlo
 allocare lo spazio di indirizzamento necessario per indirizzamento atto a contenerlo con tutti i suoi dati.
contenerlo
CREAZIONE DEI PROCESSI
In questa slide sono riportati i principali meccanismi
con cui vengono creati i processi. In un sistema
batch sono le istruzioni iniziali del job control
language che passano le informazioni al sistema per
controllare il processo e per allocare le risorse.
Inserendo le stesse, come ad esempio il nome del
processo, il nome del proprietario, l’estensione
della memoria richiesta, il tempo di uso massimo
del processore e così via, nella struttura dati di
descrizione del processo. Nei sistemi interattivi
invece è l’azione di logon che avvia la creazione del
processo facendosi carico, il sistema, di definire tutte le strutture dati e le risorse di cui il processo avrà bisogno. In
questo caso è lo stesso sistema operativo che si occupa della creazione su richiesta utente. Ma il sistema operativo può
anche creare un processo per necessità di modularità o per avviare in parallelo più processi. Un processo infine può
essere creato come figlio di un altro processo in una gerarchia di discendenza come in una struttura ad albero.
TERMINAZIONE DEI PROCESSI
MODELLO A 5 STATI
Il modello a due stati presentato innanzi non è però sufficiente a descrivere il funzionamento dei un
 New
sistema. Per avvicinarci ad una descrizione più prossima a quella di un sistema reale consideriamo
 Ready
invece il modello a cinque qui descritti.
 Running
 Blocked
 Exit
DIAGRAMMA TRANSIZIONI MODELLO A 5 STATI (commentare new, exit e blocked)
Questa
slide
riporta il
diagramma
delle
transizioni
di
un
sistema, a
cinque
stati.
TRANSIZIONI NEL MODELLO A 5 STATI
Le transizioni del diagramma degli
stati del modello nella precedente
slide vengono ora descritti in questa
slide. Molte delle transizioni si
commentano da sole poiché
seguono la stessa logica introdotta
innanzi, tuttavia ce ne sono alcune
che potrebbero destare sorpresa. In
particolare la transizione Null > New
sembrerebbe
non
trovare
fondamento in quanto detto fino ad
ora, a meno che non si pensi che lo
stato di Null viene assegnato ad un
processo in creazione e che può
essere più semplice, per inserirlo
nel sistema, usare gli stessi meccanismi di transizione usati per gli altri cambiamenti di stato. Ci saremmo magari
aspettati che il nuovo processo fosse inserito subito nella coda dei Ready ma molto spesso, per non degradare il
sistema, perché ad esempio troppi sono i processi in stato di Ready, o al processo non sono assegnabili le risorse
necessarie , può essere opportuno metterlo in uno stato precedente, appunto Null, da dove transiterà per la coda dei
Ready. Sorprendente è anche la transizione Running>Blocked che si verifica in presenza di un evento bloccante (vedi
wait) ad esempio generato dalla mancanza di occorrenza di un particolare evento richiesto, che dovrebbe essersi
verificato in precedenza o che, di natura diversa da quella del wait si presenta ora (vedi interrupt). Se la transizione
Blocked>Ready si commenta da sola perché è possibile non appena si è verificata la condizione che ha portato il
processo nello stato bloccato, inaspettata è la transizione Blocked>Exit che invece si verifica quando un padre, decide
di far terminare un figlio, o termina egli stesso, oppure quando qualche altro evento, per esempio l’operatore esterno
che teme uno stallo, fa terminare quel processo. Sono esattamente le stesse condizioni che fanno realizzare la
transizione Ready>Exit.
ESEMPIO DI TRANSIZIONE DI STATI
Alla luce dei
commenti
sin qui fatti
possiamo
analizzare le
transizioni di
stato
dell’esempi
o dei tre
processi A,B
e
C
dell’esempi
o introdotto
in
precedenza.
Sono quelle
gabellate in
questa slide.
MODELLI DI ACCODAMENTO
Dovrebbe
essere
abbastanza semplice
comprendere che di
eventi bloccanti ce
ne possono essere di
diversa natura e se
tutti
i
processi
bloccati
fossero
inseriti in un'unica
coda ci vorrebbe una
disciplina abbastanza
complicata
per
andare a ripescare
dalla
coda
dei
bloccati quelli che si
sono bloccati, si può
più semplicemente
creare una coda per
ogni tipo di evento
bloccante come è
rappresentato nella
fig.2 di questa slide. Il
flusso dei processi si
spiega
poi
automaticamente.
EVOLUZIONE DEL MODELLO A 5 STATI
 Molto facilmente tutti i processi in memoria
restano in attesa di operazioni di I/O
 Soluzioni
- espandere la memoria
- poco efficiente
- effettuare lo swapping
- introduzione nuovo stato - stato suspend
Come abbiamo già detto nel capitolo precedente, nel 1983 con il
nuovo pc XT (IBM) fu introdotto l’hard disk è subito dopo nel
1984 con il pc AT fu introdotto lo swapping. Cerchiamo ora di
chiarire meglio in cosa consiste.
Essendo la cpu molto più veloce degli altri componenti, si verificò
subito che molto spesso tutti i processi nel sistema rimanevano
in attesa di operazioni di I/O. La soluzione di espandere la main
memory non era praticabile, le tecnologie disponibili infatti per
la costruzione della main memory erano, e restano tutt’ora, e
molto costose. Risultò più economico e funzionale spostare la
allocazione
dei processi dalla
main memory al disco e
viceversa, questa azione va sotto il nome di swapping.
Un processo trasferito su disco (swoppato) è però un processo
sospeso ed è opportuno introdurre un nuovo stato, appunto lo
stato sospeso. Questi è presentato nella fig.a) della slide
successiva.
DIAGRAMMA TRANSIZIONI CON STATO SUSPEND
Questo diagramma include lo stato
sospeso. Esso si è aggiunto ai cinque
stati che abbiamo commentato nel
precedente diagramma degli stati.
Tuttavia cercando di comprendere
come funzioni, non è chiaro ad
esempio come si arrivi a questo
stato. Una possibile risposta è che
quando un processo viene creato
viene inserito nello stato sospeso e
poi da questo transita allo stato
ready o bloccato. Ma non è
semplice continuare a immaginarsi
il successivo ed è facile intuire che il
diagramma è incompleto. Invero
quello giusto è quello della fig. b) (
diagramma a sette stati) nel quale
sono stati inseriti i due stati; ready
suspended e blocked suspend. Il
diagramma descrive poi le possibili
transizioni tra questi sette stati che
saranno meglio dettagliati tra poco.
E’ però evidente che un processo
sospeso, cioè che sta in memoria
secondaria ( cioè sul disco) non è
immediatamente disponibile per
l’esecuzione.
STATI DEL MODELLO CON STATI SUSPENDED
 ….
 Blocked suspended
 Ready suspended
 ….
PROCESSO SOSPESO
Un processo è sospeso se:
 Non è immediatamente disponibile per l’esecuzione
 Non dispone del processore (bloccato e sospeso sono concetti
indipendenti)
 È stato sospeso da un agente
 Risulta sospeso fino a quando l’agente non lo rimuove da questa
condizione
Sebbene alcune considerazioni sulla
sospensione saranno fatte nella successiva
slide per adesso possiamo dire che qualche
agente deve aver sospeso quel processo, che
pertanto non può disporre del processore e
che resta sospeso fino a quando l’agente non
lo rimuove da quella condizione.
MODELLO CON STATI SUSPENDED: TRANSIZIONI
Lasciando che ognuno eserciti
la propria mente nella ricerca
del significato delle transizioni
tra molti stati del diagramma
delle transizioni a sette stati ,
cosa abbastanza semplice
essendo molte già state
descritte nel diagramma a
cinque stati, fermiamo la
nostra attenzione su quelle
transizioni che sono collegate
direttamente allo swapping. Se
il sistema ha bisogno di
memoria principale, qualcosa
deve essere trasferito in
memoria secondaria, potrebbe
essere un processo in stato di ready, se non si può fare diversamente, anche se sarebbe meglio trasferire quelli in stato
bloccato tenuto conto che gli stessi devono aspettare che si verifichi un evento e non possono andare in esecuzione.
Ed infatti facile intuire che se per necessità occorre liberare spazio in memoria principale è più conveniente che sia
trasferito in memoria secondaria un processo bloccato. La transizione da ready suspended a ready corrisponde ad uno
swap invece la transizione da blocked suspended a ready suspended fa cambiare la fila di accodamento del processo
ma lo lascia nella memoria secondaria. Un processo a più alta priorità da ready suspended può passare a ready se un
agente lo sblocca. Per un processo appena creato può essere più conveniente adottare la filosofia just in time
preferendo di inserirlo nella coda dei ready, come accade nel caso del diagramma a cinque stati, o nella coda dei ready
suspended per non congestionare il sistema nel caso in cui quelli in coda di ready sono tanti. Un’altra transizione
interessante è quella da Blocked suspended a blocked, essa sembra inverosimile dato che non si capisce perché se un
processo deve rimanere bloccato viene trasferito in memoria principale. La risposta è che è presumibile che si sblocchi
presto. Molto più inattesa è la transizione Running > Ready Suspended ma invero ci potrebbe essere la necessità di far
avanzare un processo a più alta priorità, o che sia un operatore esterno a sospendere quello in running. Nel caso del
timore di uno stallo o di malfunzionamento potrebbe essere che un operatore esterno metta tutti in stato di exit.
CAUSE DI SOSPENSIONE
In questa slide sono riassunte le
principali cause della sospensione.
Infatti può essere richiesta
memoria non disponibile per
l’esecuzione del processo pronto ed
allora è il sistema che provvede a
fare uno swap out. Ma ci possono
essere altre cause come ad esempio
quella da parte del sistema di un
processo sospettato di dare
qualche problema o un processo in
background che sarà ripreso
successivamente. Potrebbe essere
una richiesta da parte di un utente per effettuare un debug. O anche una richiesta di utilizzazione di una risorsa. Ancora
per una necessità di sistema per monitoraggio o per redigere le contabilità, come pure può essere un processo genitore
che sospende un figlio per coordinare le azioni dei discendenti.