Processi
•
•
•
•
•
Concetto di processo
Scheduling dei processi
Operazioni sui processi
Processi cooperanti
Comunicazioni fra processi
Sistemi Operativi
4.1
Concetto di processo
•
•
•
•
Un sistema operativo esegue vari programmi:
– Sistemi batch: job
– Sistemi time-sharing: programmi utente o task
I libri di testo impiegano indifferentemente il termine job o
processo.
Processo – un programma in esecuzione; l’esecuzione di un
processo deve avvenire in modo sequenziale.
Un processo include:
– il program counter
– lo stack
– una sezione di dati
Sistemi Operativi
4.2
Stato del processo
•
Mentre viene eseguito un processo cambia stato
– Nuovo (new): Il processo viene creato.
– In esecuzione (running): Le istruzioni vengono eseguite.
– In attesa (waiting): Il processo è in attesa per qualche
evento che deve avvenire.
– Pronto (ready): Il processo è in attesa di essere assegnato
ad un processore.
– Terminato (terminated): Il processo ha finito l’esecuzione.
Sistemi Operativi
4.3
Process Control Block (PCB)
Contiene le informazioni associate ad un processo.
•
•
•
•
•
•
•
Stato del processo
Program counter
Registri della CPU
Informazioni sullo scheduling della CPU
Informazioni sulla gestione della memoria
Informazioni di contabilizzazione delle risorse
Informazioni sullo stato di I/O
Sistemi Operativi
4.4
Switch della CPU da processo a processo
Sistemi Operativi
4.5
Code per lo scheduling di processi
•
•
Coda dei job – Insieme di tutti i processi presenti nel sistema.
•
•
Code dei dispositivi – Insieme di processi in attesa per un dispositivo di I/O.
Coda dei processi pronti – Insieme di tutti i processi pronti ed in attesa di
esecuzione, che risiedono i memoria.
I processi si “spostano” fra le varie code.
Sistemi Operativi
4.6
Tipi di scheduler
•
Scheduler a lungo termine (o scheduler dei job) – seleziona quali processi
devono stare nella coda dei processi pronti.
•
Scheduler a breve termine (o scheduler della CPU) – seleziona quali
processi debbano essere eseguiti successivamente, ed alloca la CPU.
•
Scheduler a medio termine (swapping) – rimozione dei processi dalla memoria
(e dalla contesa per la CPU) e riduzione del grado di multiprogrammazione.
Sistemi Operativi
4.7
Tipi di scheduler
•
•
•
•
Lo scheduler a breve termine viene chiamato molto spesso
(millisecondi)  deve essere veloce.
Lo scheduler a lungo termine viene chiamato raramente
(secondi, minuti)  può essere lento (ma efficiente).
Lo scheduler a lungo termine controlla il grado di
multiprogrammazione.
I processi possono essere descritti come:
– Processo I/O-bound – impiega più tempo effettuando I/O
rispetto al tempo impiegato per elaborazioni (in generale, si
hanno molti burst di CPU di breve durata).
– Processo CPU-bound – impiega più tempo effettuando
elaborazioni (in generale, si hanno pochi burst di CPU di
lunga durata).
Sistemi Operativi
4.8
Context Switch
•
•
•
Quando la CPU passa da un processo all’altro, il sistema deve
salvare lo stato del vecchio processo e caricare lo stato
precedentemente salvato per il nuovo processo.
Il tempo di context-switch è un sovraccarico; il sistema non
lavora utilmente mentre cambia processo.
Il tempo dipende dal supporto hardware.
Sistemi Operativi
4.9
Creazione di processi
•
•
•
•
•
Il processo padre crea processi figli che, a loro volta, creano altri processi,
formando un albero di processi.
Condivisione di risorse (possibilità)
– Il padre e il figlio condividono tutte le risorse.
– Il figlio condivide un sottoinsieme delle risorse del padre.
– Il padre e il figlio non condividono risorse.
Esecuzione
– Il padre e il figlio vengono eseguiti concorrentemente.
– Il padre attende fino al termine del processo figlio.
Spazio degli indirizzi
– Il processo figlio è un duplicato del processo padre.
– Nel processo figlio è stato caricato un programma.
Esempio UNIX: la chiamata fork crea un nuovo processo, la chiamata execve
viene impiegata dopo una fork per rimpiazzare lo spazio di memoria del
processo con un nuovo programma.
Sistemi Operativi
4.10
Un albero di processi in un tipico sistema UNIX
Sistemi Operativi
4.11
Terminazione di un processo
•
Il processo esegue l’ultima istruzione e chiede al sistema
operativo di essere cancellato per mezzo di una specifica
chiamata di sistema (exit in UNIX) che compie le seguenti
operazioni:
– Può restituire dei dati (output) al processo padre (wait).
– Le risorse del processo vengono liberate.
•
Un padre può terminare l’esecuzione di processi figli (abort) per
diversi motivi:
– Il figlio ha ecceduto nell’uso di alcune risorse.
– Il compito assegnato al figlio non è più richiesto.
– Il padre termina.
 Il sistema operativo non consente ad un figlio di
continuare se suo padre è terminato. Questo fenomeno
è detto terminazione a cascata e dipende dal SO.
Sistemi Operativi
4.12
Processi cooperanti
•
•
•
Un processo è indipendente se non può influire su altri processi
nel sistema o esserne influenzato.
Processi cooperanti possono influire su altri processi o esserne
influenzati
Vantaggi della cooperazione fra processi
– Condivisione di informazioni
– Accelerazione del calcolo
– Modularità
– Convenienza
Sistemi Operativi
4.13
Problema produttore–consumatore
•
E’ un paradigma classico per processi cooperanti. Il processo
produttore produce informazioni che vengono consumate da un
processo consumatore.
– Buffer illimitato: non vengono posti limiti pratici alla
dimensione del buffer.
– Buffer limitato: si assume che la dimensione del buffer sia
fissata.
Sistemi Operativi
4.14
Soluzione con buffer limitato e memoria condivisa
•
•
Dati condivisi
var n;
type item = … ;
var buffer: array [0..n–1] of item;
in, out: 0..n–1;
Processo produttore
repeat
…
produce un elemento in nextp
…
while in+1 mod n = out do no-op;
buffer [in] := nextp;
in := in+1 mod n;
until false;
Sistemi Operativi
4.15
Soluzione con buffer limitato
•
Processo consumatore
repeat
while in = out do no-op;
nextc := buffer [out];
out := out+1 mod n;
…
consuma l’elemento in nextc
…
until false;
•
La soluzione è corretta, ma lo schema permette di avere al
massimo n -1 elementi contemporaneamente contenuti nel
buffer.
Sistemi Operativi
4.16
Thread
•
•
•
Un thread (o lightweight process, LWP) è l’unità di base di
utilizzo della CPU e consiste di :
– Program counter
– Insieme dei registri
– Spazio dello stack
Un thread condivide con i thread ad esso associati:
– sezioni di codice
– sezioni dati
– risorse del sistema operativo
L’insieme dei tread e dell’ambiente da essi condiviso è
chiamato task.
Un processo tradizionale, o heavyweight corrisponde ad un task
con un solo thread
Sistemi Operativi
4.17
Thread
•
•
•
•
•
In un task con più thread, mentre un thread è blocccato e in
attesa, un secondo thread nello stesso task può essere in
esecuzione.
– La cooperazione di più thread nello steso job fornisce
un più grande throughput e prestazioni migliorate.
– Applicazioni che richiedono la condivisione di un buffer
comune (es. produttore-consumatore) traggono
beneficio dall’impiego di thread.
I thread forniscono un meccanismo che permette a processi
sequenziali di effettuare chiamate di sistema bloccanti
ottenendo allo stesso tempo un’esecuzione parallela.
Alcuni sistemi supportano i thread a livello di kernel (OS/2).
Thread a livello di utente: supportato sopra al kernel, per
mezzo di chiamate di libreria a livello utente.
Approcci ibridi implementano thread sia a livello di kernel
che a livello utente (Solaris 2).
Sistemi Operativi
4.18
Interprocess Communication (IPC)
•
•
•
•
•
Meccanismo per la comunicazione e sincronizzazione fra processi.
Sistema di messaggi – i processi comunicano fra di loro senza far uso di
variabili condivise.
IPC consente due operazioni:
– send(messaggio) – la dimensione del messaggio può essere fissa
o variabile
– receive(messaggio)
Se P e Q vogliono comunicare, hanno bisogno di:
– stabilire un canale di comunicazione fra di loro
– scambiare messaggi per mezzo di send e receive
Implementazione del canale di comunicazione
– fisica (es. memoria condivisa, bus hardware)
– logica (es. proprietà logiche)
Sistemi Operativi
4.19
Informazioni di implementazione
•
•
•
•
•
•
Come vengono stabiliti i canali (connessioni)?
Si può assegnare un canale a più di due processi?
Quanti canali possono esserci fra ciascuna coppia di processi
comunicanti?
Qual è la capacità di un canale?
Dimensione del messaggio che può gestire un canale fissa o
variabile?
Canale monodirezionale o bi-direzionale?
Sistemi Operativi
4.20
Comunicazione diretta
•
•
I processi devono “nominare” esplicitamente i loro interlocutori:
– send (P, messaggio) – invia un messaggio al processo P
– receive(Q, messaggio) – riceve un messaggio dal processo
Q
Proprietà del canale di comunicazione
– I canali vengono stabiliti automaticamente.
– Un canale è associato esattamente a due processi.
– Tra ogni coppia di processi comunicanti esiste esattamente
un canale.
– Il canale può essere unidirezionale, ma usualmente è
bidirezionale.
Sistemi Operativi
4.21
Comunicazione indiretta
•
•
•
I messaggi vengono inviati a delle mailbox (indicate anche come porte) e da
esse ricevuti.
– Ciascuna mailbox è idendificata con un unico id.
– I processi possono comunicare solamente se condividono una mailbox.
Proprietà dei canali di comunicazione:
– Un canale viene stabilito solo se i processi hanno una mailbox in
comune
– Un canale può essere associato a più di un processo.
– Ogni coppia di processi può condividere più canali di comunicazione.
– I canali possono essere unidirezionali o bidirezionali.
Operazioni
– creare una nuova mailbox
– inviare e ricevere messaggi attraverso la mailbox
– distruggere una mailbox
Sistemi Operativi
4.22
Comunicazione indiretta
•
•
Condivisione di mailbox
– P1, P2, e P3 condividono la mailbox A.
– P1, invia; P2 e P3 ricevono.
– Chi prende il messaggio?
Soluzioni
– Permettere ad un canale di essere associato ad al più due
processi.
– Permettere ad un solo processo alla volta di eseguire
un’operazione di ricezione.
– Permettere al sistema di selezionare arbitrariamente il
ricevente. Il sistema può comunicare l’identità del ricevente
al trasmittente.
Sistemi Operativi
4.23
Buffering
•
La coda dei messaggi legati ad un canale può essere
implementata in tre modi.
1. Capacità zero – il canale non può avere messaggi in attesa
al suo interno. Il trasmittente deve attendere che il ricevente
abbia ricevuto il messaggio (rendezvous).
2. Capacità limitata – lunghezza finita: n messaggi.
Il trasmittente deve attendere se il canale è pieno.
3. Capacità illimitata – lunghezza infinita.
Il trasmittente non attende mai.
Sistemi Operativi
4.24
Condizioni di eccezione
•
•
•
Terminazione del processo
Messaggi perduti
Messaggi alterati
Sistemi Operativi
4.25
Thread supportati sotto Solaris 2
•
•
•
Solaris 2 è una versione di UNIX con supporto per thread a livello
kernel e utente, con multprocessing simmetrico, e scheduling in tempo
reale.
LWP – è ad un livello intermedio fra thread di utente e thread di kernel.
Requisiti di risorse a seconda dei tipi di thread:
– Kernel thread: piccola struttura dati e uno stack; il cambiamento
di thread non richiede di cambiare le informazioni di accesso alla
memoria. Relativamente veloce.
– LWP: PCB con dati dei registri, informazioni di contabilizzazione
e informazioni di memoria. Cambiamento fra LWP è
relativamente lento.
– User–level thread: ha bisogno solamente dello stack e del
program–counter; non essendo impiegato il kernel, è più veloce.
Il kernel vede solo LWP che supportano thread a livello utente.
Sistemi Operativi
4.26
Thread di Solaris 2
Sistemi Operativi
4.27