i processi. sistemi operativi a.a. 2007-08 3.2 i processi definizione di processo scheduling dei...
TRANSCRIPT
I ProcessiI Processi
Sistemi Operativi a.a. 2007-083.2
I processiI processi
Definizione di processo
Scheduling dei processi
Operazioni sui processi
Processi cooperanti
Comunicazione fra processi
Comunicazioni in sistemi clientserver
Sistemi Operativi a.a. 2007-083.3
Definizione di processo Definizione di processo 1 1Un SO esegue programmi di varia natura:
Sistemi batch: jobjob
Sistemi timesharing: programmi utenteprogrammi utente o tasktask
I libri di testo impiegano indifferentemente i termini jobjob o processoprocesso
ProcessoProcesso
Un programma in esecuzione; l’esecuzione di un processo deve avvenire in modo sequenziale
…o, in alternativa, la sequenza di eventi cui da luogo un elaboratore quando opera sotto il controllo di un particolare programma
Sistemi Operativi a.a. 2007-083.4
Definizione di processo Definizione di processo 2 2In realtà, un programma descrive non un processo, ma un insieme di processi istanze del programmaistanze del programma ognuno dei quali è relativo all’esecuzione del programma da parte dell’elaboratore per un particolare insieme di dati in ingresso
Un processo include:una sezione di testo (il codice del programma da eseguire)
il program counterprogram counter (ed il contenuto dei registri della CPU)
lo stack stack (dati temporanei e variabili locali)
una sezione dati (variabili globali)
uno heapheap (memoria dinamicamente allocata durante l’esecuzione del processo)
Sistemi Operativi a.a. 2007-083.5
Processo allocato in memoriaProcesso allocato in memoria
Sistemi Operativi a.a. 2007-083.6
Stato del processo Stato del processo 1 1
Mentre viene eseguito, un processo è soggetto a transizioni ditransizioni di statostato, definite in parte dall’attività corrente del processo ed in parte da eventi esterni asincroni con la sua esecuzione:
NewNew (nuovo): Il processo viene creato
RunningRunning (in esecuzione): Se ne eseguono le istruzioni
WaitingWaiting (in attesa): Il processo è in attesa di un evento
ReadyReady (pronto): Il processo è in attesa di essere assegnato ad un processore
TerminatedTerminated (terminato): Il processo ha terminato la propria esecuzione
Sistemi Operativi a.a. 2007-083.7
Diagramma di transizione di stato di un Diagramma di transizione di stato di un processoprocesso
Sistemi Operativi a.a. 2007-083.8
Stato del processo Stato del processo 2 2
Lo stato newnew corrisponde alla creazione di un nuovo processo
La transizione dallo stato newnew a readyready avviene quando il SO (scheduler a lungo/medio termine) ammette il nuovo processo alla contesa attiva per la CPU
La transizione dallo stato readyready a runningrunning avviene ad opera del dispatcherdispatcher quando, in seguito al blocco del processo in esecuzione, il processo viene scelto, fra tutti i processi pronti, per essere eseguito
Sistemi Operativi a.a. 2007-083.9
Stato del processo Stato del processo 3 3
La transizione da runningrunning a readyready, chiamata revocarevoca o prerilascioprerilascio avviene…
…nello scheduling a priorità, quando arriva al sistema un processo con priorità maggiore
…nei sistemi a partizione di tempo, per esaurimento del quanto
…al verificarsi di un interrupt esterno
La transizione da runningrunning a waitingwaiting avviene per la richiesta di un servizio di I/O al SO, mentre il passaggio da waiting waiting a ready ready avviene al termine del servizio
Sistemi Operativi a.a. 2007-083.10
Stato del processo Stato del processo 4 4
Lo stato terminatedterminated si raggiunge per:
terminazione normale, con chiamata al SO per indicare il completamento delle attività
terminazione anomala
uso scorretto delle risorse (superamento dei limiti di memoria, superamento del tempo massimo di utilizzo della CPU, etc.)
esecuzione di istruzioni non consentite o non valide (trap)
Sistemi Operativi a.a. 2007-083.11
Process Control Block Process Control Block 1 1
Ad ogni processo è associata una struttura dati, il descrittore di processo Process Process Control Block Control Block (PCB)(PCB)
I dati utilizzati per descrivere i processi dipendono dal SO e dalla struttura della macchina fisica
Le informazioni contenute nei PCB sono vitali per il SO: devono essere memorizzate in un’area di memoria accessibile solo dal nucleo del SO
Sistemi Operativi a.a. 2007-083.12
Process Control Block Process Control Block 2 2
Informazione associata a ciascun processo:
Stato del processo
Nome (numero) del processo
Contesto del processoContesto del processo: program counter, registri della CPU (accumulatori, registri indice, stack pointer)
Informazioni sullo scheduling della CPU (priorità, puntatori alle code di scheduling)
Informazioni sulla gestione della memoria
Informazioni di contabilizzazione delle risorse: elenco dispositivi assegnati, file aperti, tempo di utilizzo della CPU
Sistemi Operativi a.a. 2007-083.13
Commutazione della CPU fra Commutazione della CPU fra processiprocessi
Sistemi Operativi a.a. 2007-083.14
Code per lo scheduling dei Code per lo scheduling dei processiprocessi
Coda dei jobCoda dei job — Insieme di tutti i processi presenti nel sistema
Ready queueReady queue (Coda dei processi prontiCoda dei processi pronti) — Insieme dei processi pronti ed in attesa di essere eseguiti, che risiedono in memoria centrale
Code dei dispositiviCode dei dispositivi — Insieme dei processi in attesa per un dispositivo di I/O
I processi migrano fra le varie code
Sistemi Operativi a.a. 2007-083.15
Ready queue e code ai dispositivi di Ready queue e code ai dispositivi di I/OI/O
Sistemi Operativi a.a. 2007-083.16
Diagramma per lo scheduling dei Diagramma per lo scheduling dei processiprocessi
I riquadri rappresentano le code
Le ellissi rappresentano le risorse che servono le code
Le frecce indicano il flusso dei processi nel sistema
Sistemi Operativi a.a. 2007-083.17
Tipi di schedulerTipi di scheduler
Scheduler a lungo termineScheduler a lungo termine (o scheduler dei job): seleziona quali processi devono essere portati dalla memoria di massa alla ready queue (in memoria centrale)
Scheduler a breve termineScheduler a breve termine (o scheduler della CPU): seleziona quale processo debba essere eseguito successivamente ed alloca la CPU
Sistemi Operativi a.a. 2007-083.18
Scheduler a medio termineScheduler a medio termine
Lo scheduler a medio termine scheduler a medio termine (o swapperswapper ) rimuove i processi dalla memoria (e dalla contesa per la CPU) e riduce il grado di multiprogrammazione
Sistemi Operativi a.a. 2007-083.19
Tipi di schedulerTipi di scheduler (Cont.) (Cont.)
Lo scheduler a breve termine viene chiamato molto spesso (intervalli misurabili in millisecondi) deve essere veloceLo scheduler a lungo termine viene chiamato molto raramente (secondi, minuti) può essere lento, ma efficienteLo scheduler a lungo termine controlla il grado grado didi multiprogrammazionemultiprogrammazioneI processi possono essere classificati in:
ProcessiProcessi I/O– I/O–boundbound : impiegano più tempo effettuando I/O rispetto al tempo impiegato per elaborazioni (in generale, si hanno molti burstburst di CPU di breve durata)ProcessiProcessi CPU–CPU–boundbound : impiegano più tempo effettuando elaborazioni (in generale, si hanno pochi burst di CPU di lunga durata)
Sistemi Operativi a.a. 2007-083.20
Context SwitchContext SwitchQuando la CPU passa da un processo all’altro, il sistema deve salvare il contestocontesto del vecchio processo e caricare il contesto, precedentemente salvato, per il nuovo processo in esecuzione
Il contesto è rappresentato all’interno del PCB del processo e comprende i valori dei registri della CPU, lo stato del processo e le informazioni relative all’occupazione di memoria
Il tempo di contextcontextswitchswitch è un sovraccarico (overheadoverhead ); il sistema non lavora utilmente mentre cambia contesto
Il tempo di contextswitch (msec) dipende dal supporto hardware (velocità di accesso alla memoria, numero di registri da copiare, istruzioni speciali, gruppi di registri multipli)
Sistemi Operativi a.a. 2007-083.21
Creazione di processi Creazione di processi 1 1Il processo padre crea processi figli che, a loro volta, creano altri processi, formando un albero di processi
Condivisione di risorseCondivisione di risorse
Il padre e i figli condividono tutte le risorse
I figli condividono un sottoinsieme delle risorse del padre
Il padre e i figli non condividono risorse
EsecuzioneEsecuzione
Il padre e i figli vengono eseguiti in concorrenza
Il padre attende la terminazione dei processi figli
Spazio degli indirizziSpazio degli indirizzi
Il processo figlio è un duplicato del processo padre
Nel processo figlio è stato caricato un diverso programma
Sistemi Operativi a.a. 2007-083.22
Albero dei processi in SolarisAlbero dei processi in Solaris
Sistemi Operativi a.a. 2007-083.23
In UNIXUNIX…
…la system call fork()fork() crea un nuovo processo
quindi, la exec()exec() viene impiegata dopo la fork()fork() per sostituire lo spazio di memoria del processo originale con un nuovo programma
Creazione di processi Creazione di processi 2 2
Sistemi Operativi a.a. 2007-083.24
#include <sys/types.h> /*Primitive system data types */#include <stdio.h>#include <unistd.h> /*Standard symbolic constants and types */
int main(){
pid_t pid;
pid fork(); /* genera un nuovo processo */if (pid < 0) { /* errore*/
fprintf(stderr, “Generazione del nuovo processo fallita”);
exit(-1); }else if (pid 0) /* Processo figlio */
execlp(“/bin/ls”, “ls”, NULL);else { /* Processo padre */
wait(NULL);printf(“Il processo figlio ha terminato”);exit(0);
}}
Creazione di processi Creazione di processi 3 3
Sistemi Operativi a.a. 2007-083.25
Terminazione di processi Terminazione di processi 1 1
Il processo esegue l’ultima istruzione e chiede al sistema operativo di essere cancellato per mezzo di una specifica chiamata di sistema (exit()exit() in UNIXUNIX) che compie le seguenti operazioni:
Può restituire dati (output) al processo padre (attraverso la system call wait()wait() )
Le risorse del processo vengono deallocate dal sistema operativo
Sistemi Operativi a.a. 2007-083.26
Terminazione di processi Terminazione di processi 2 2
Il padre può terminare l’esecuzione dei processi figli (abortabort ) se…
Il figlio ha ecceduto nell’uso delle risorse ad esso allocate
Il compito assegnato al figlio non è più richiesto
Il padre termina
Alcuni sistemi operativi non consentono ad un processo figlio di continuare l’esecuzione se il padre è terminato Questo fenomeno è detto terminazione a cascataterminazione a cascata e viene avviato dal SO
Nel caso di UNIX, i processi “orfani” non vengono terminati, ma diventano figli di init()init(), che è il progenitore di tutti i processi utente
Sistemi Operativi a.a. 2007-083.27
Thread Thread 1 1
Alla base del concetto di threadthread sta la constatazione che il concetto di processo è basato su due aspetti:
Possesso delle risorse
Esecuzione
I due aspetti sono indipendenti e come tali possono essere gestiti dal SO
L’elemento che viene eseguito è il thread
L’elemento che possiede le risorse è il processo
Sistemi Operativi a.a. 2007-083.28
Thread Thread 2 2Il termine multithreadingmultithreading è utilizzato per descrivere la situazione in cui ad un processo sono associati più thread
Tutti i thread condividono le risorse del processo, risiedono nello stesso spazio di indirizzamento ed hanno accesso agli stessi dati
Ad ogni thread è però associato uno stato di esecuzione, uno spazio di memoria per le variabili locali, uno stack, un contesto un descrittore
Le informazioni associate al thread sono poche: le operazioni di cambio di contesto, di creazione e terminazione sono più semplici
Sistemi Operativi a.a. 2007-083.29
Processi cooperanti Processi cooperanti 1 1
Un processo è indipendenteindipendente se la sua esecuzione non può influire sull’esecuzione di altri processi nel sistema o subirne gli effetti
I processi cooperanticooperanti possono influire sull’esecuzione di altri processi o esserne influenzati
La presenza o meno di dati condivisi determina univocamente la natura del processo
Vantaggi della cooperazione fra processiCondivisione di informazioni
Accelerazione del calcolo
Modularità
Convenienza
Sistemi Operativi a.a. 2007-083.30
Processi cooperanti Processi cooperanti 2 2
Due meccanismi di comunicazione fra processi (IPCIPC, Inter-Process CommunicationInter-Process Communication):
Scambio di messaggi: utile per trasmettere piccole quantità di dati, nessuna conflittualità, utilizzo di system call per la messaggeria
Memoria condivisa: massima efficienza nella comunicazione
Richiede l’intervento del kernel solo per l’allocazione della memoria
Gli accessi successivi sono gestiti (/arbitrati) dai processi
Sistemi Operativi a.a. 2007-083.31
Modelli di comunicazioneModelli di comunicazione
(a) Scambio di messaggi (b) Condivisione della memoria
Sistemi Operativi a.a. 2007-083.32
Sistemi a memoria condivisaSistemi a memoria condivisaMemoria condivisa: parte dello spazio di indirizzamento del processo che la alloca
I processi cooperanti che la usano per comunicare dovranno annettere la zona di memoria al loro spazio di indirizzi
La gestione della memoria condivisa, una volta allocata, non dipende dal SO
Il tipo e la collocazione dei dati sono determinati dai processi
…che hanno anche la responsabilità di non scrivere nella stessa locazione simultaneamente
Sistemi Operativi a.a. 2007-083.33
Problema del Problema del produttoreproduttoreconsumatoreconsumatore
È un paradigma classico per processi cooperanti: il processo produttoreproduttore produce informazioni che vengono consumate da un processo consumatoreconsumatore
Buffer illimitatoBuffer illimitato: non vengono posti limiti pratici alla dimensione del buffer
Il consumatore può trovarsi ad attendere nuovi oggetti, ma il produttore può sempre produrne
Buffer limitatoBuffer limitato: si assume che la dimensione del buffer sia fissata
Il consumatore attende se il buffer è vuoto, il produttore se è pieno
Sistemi Operativi a.a. 2007-083.34
Dati condivisi
#define DIM_VETTORE 10
typedef struct {
. . .
} elemento;
elemento vettore[DIM_VETTORE];
int inserisci = 0;
int preleva = 0;
La soluzione ottenuta è corretta, ma consente l’utilizzo di soli DIM_VETTORE1 elementi
Buffer limitato e memoria Buffer limitato e memoria condivisa condivisa 1 1
Sistemi Operativi a.a. 2007-083.35
elemento appena_prodotto;
while (1) {
while (((inserisci + 1) % DIM_VETTORE) preleva)
; /* do nothing */
vettore[inserisci] = appena_prodotto;
inserisci = (inserisci + 1) % DIM_VETTORE;
}
elemento da_consumare;
while (1) {while (inserisci preleva)
; /* do nothing */da_consumare = vettore[preleva];preleva = (preleva + 1) % DIM_VETTORE;
}
Buffer limitato e memoria Buffer limitato e memoria condivisa condivisa 2 2
Processo Processo consumatorconsumatoree
Processo Processo produttorproduttoree
Sistemi Operativi a.a. 2007-083.36
Scambio di messaggiScambio di messaggiMeccanismo per la comunicazione e la sincronizzazione fra processi particolarmente utile in ambiente distribuito
Sistema di messaggi i processi comunicano fra loro senza far uso di variabili condivise
La funzionalità IPC consente due operazioni:send(messaggio)send(messaggio) la dimensione del messaggio può essere fissa o variabile
receive(messaggio)receive(messaggio)
Se i processi P e Q vogliono comunicare, devono:stabilire fra loro un canale di comunicazione
scambiare messaggi per mezzo di send/receive
Implementazione del canale di comunicazione:fisica (es. memoria condivisa, bus, rete)
logica (proprietà logiche)
Sistemi Operativi a.a. 2007-083.37
Problemi di implementazioneProblemi di implementazione
Come vengono stabiliti i canali (connessioni)?
È possibile assegnare un canale a più di due processi?
Quanti canali possono essere stabiliti fra ciascuna coppia di processi comunicanti?
Qual è la capacità di un canale?
Il formato del messaggio che un canale può gestire è fisso o variabile?
Sono preferibili canali monodirezionali o bidirezionali?
Sistemi Operativi a.a. 2007-083.38
Comunicazione direttaComunicazione diretta
I processi devono “nominare” esplicitamente i loro interlocutori (modalità simmetrica):
send (P, messaggio)send (P, messaggio) invia un messaggio al processo P
receive(Q, messaggio)receive(Q, messaggio) riceve un messaggio dal processo Q
Proprietà del canale di comunicazione:I canali vengono stabiliti automaticamente
Ciascun canale è associato esattamente ad una coppia di processi
Tra ogni coppia di processi comunicanti esiste esattamente un canale
Il canale può essere unidirezionale (ogni processo collegato al canale può soltanto trasmettere/ricevere), ma è normalmente bidirezionale
Sistemi Operativi a.a. 2007-083.39
Comunicazione indiretta Comunicazione indiretta 1 1
I messaggi vengono inviati/ricevuti da mailboxmailbox (porteporte)
Ciascuna mailbox è identificata con un id id unico
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ù processi
Ogni coppia di processi può condividere più canali di comunicazione
I canali possono essere unidirezionali o bidirezionali
Sistemi Operativi a.a. 2007-083.40
Operazioni:
Creare una nuova mailbox
Inviare/ricevere messaggi attraverso mailbox
Distruggere una mailbox
Primitive di comunicazione:
send(A, messaggio)send(A, messaggio) invia un messaggio alla mailbox A
receive(A, messaggio)receive(A, messaggio) riceve un messaggio dalla mailbox A
Comunicazione indiretta Comunicazione indiretta 2 2
Sistemi Operativi a.a. 2007-083.41
Condivisione di mailbox
P1, P2 e P3 condividono la mailbox A
P1 invia; P2 e P3 ricevono
Chi si assicura 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 SO di selezionare arbitrariamente il ricevente; il sistema comunica l’identità del ricevente al trasmittente
Comunicazione indiretta Comunicazione indiretta 3 3
Sistemi Operativi a.a. 2007-083.42
SincronizzazioneSincronizzazioneLo scambio di messaggi può essere sia bloccantebloccante che non–bloccantenon–bloccante
In caso di scambio di messaggi bloccante la comunicazione è sincronasincrona
Il processo mittente si blocca nell’attesa che il processo ricevente, o la porta, riceva il messaggio
Il ricevente si blocca nell’attesa dell’arrivo di un messaggio
RendezvousRendezvous tra mittente e ricevente
In caso di scambio di messaggi non–bloccante la comunicazione è asincronaasincrona
Il processo invia il messaggio e riprende la propria esecuzione
Il ricevente riceve un messaggio valido o un valore nullo
Sistemi Operativi a.a. 2007-083.43
BufferingBuffering
La coda dei messaggi legata ad un canale può essere implementata in tre modi
1. Capacità zeroCapacità zero Il canale non può avere messaggi in attesa al suo interno; il trasmittente deve attendere che il ricevente abbia ricevuto il messaggio
2.Capacità limitataCapacità limitata Il canale può avere al più n messaggi in attesa; se il canale è pieno, il trasmittente deve attendere
3.Capacità illimitataCapacità illimitata Il canale può “contenere” infiniti messaggi; il trasmittente non attende mai
Sistemi Operativi a.a. 2007-083.44
Comunicazioni nei sistemi Comunicazioni nei sistemi clientclientserverserver
Socket
Chiamate di procedure remote (Remote Remote Procedure CallProcedure Call RPC)
Invocazione di metodi remoti (Remote Method Remote Method InvocationInvocation RMI, Java)
Sistemi Operativi a.a. 2007-083.45
SocketSocket 1 1
Una socket è definita come l’estremità di un canale di comunicazione
Ogni socket è identificata da un indirizzo IP concatenato ad un numero di porta
Esempio:Esempio: la socket 161.25.19.8:1625 si riferisce alla porta 1625 sull’host 161.25.19.8
La comunicazione si stabilisce fra coppie di socket (una per ogni processo)
Sistemi Operativi a.a. 2007-083.46
SocketSocket 2 2
In una architettura clientserver……il server attende la richiesta del client, stando in ascolto ad una porta specificata
Quando il server riceve una richiesta, se accetta la connessione proveniente dalla socket del client, si stabilisce la comunicazione
I server che svolgono servizi specifici stanno in ascolto su porte note (per esempio, 23: telnet, 21: ftp, 80: http)
Tutte le porte al di sotto del valore 1024 sono considerate note e si usano per realizzare servizi standard
Sistemi Operativi a.a. 2007-083.47
SocketSocket 3 3
La comunicazione tramite socket è una forma di comunicazione fra sistemi distribuiti a basso livello
Le socket permettono la trasmissione di un flusso non strutturato di byte:
È responsabilità del client e del server interpretare ed organizzare i dati
Sistemi Operativi a.a. 2007-083.48
Comunicazione via socketComunicazione via socket
Sistemi Operativi a.a. 2007-083.49
Chiamate di procedure remoteChiamate di procedure remote
Il concetto di chiamata a procedura remota estende il paradigma della chiamata di procedura a processi residenti su sistemi remoti collegati in rete
La semantica delle RPC permette ad un client di invocare una procedura presente su un sistema remoto nello stesso modo in cui esso invocherebbe una procedura locale
Il sistema delle RPC nasconde i dettagli necessari alla comunicazione
Sistemi Operativi a.a. 2007-083.50
Invocazione di metodi remotiInvocazione di metodi remotiL’invocazione di metodi remoti è una funzione del linguaggio Java simile alla RPC
L’RMI permette ad un processo Java residente su una data JVM l’invocazione di un metodo su un oggetto remoto, dove per remoto si intende un oggetto residente su una diversa macchina virtuale