...

1 Processo, risorsa, richiesta, assegnazione 2 Concorrenza 3 Grafo

by user

on
Category: Documents
32

views

Report

Comments

Transcript

1 Processo, risorsa, richiesta, assegnazione 2 Concorrenza 3 Grafo
1
2
3
4
5
Processo, risorsa, richiesta, assegnazione
Concorrenza
Grafo di Holt
Thread
Sincronizzazione tra processi
Il processo
E' un programma in esecuzione
Tipi di processo
1
2
3
indipendenti
cooperanti
in competizione
l'evoluzione di uno non influenza quella dell'altro.
l'evoluzione di uno influenza quella dell'altro e condividono dei dati.
possono evolvere indipendentemente ma entrano in conflitto sulla ripartizione delle risorse.
Stati di un processo
1
2
3
4
5
nuovo
esecuzione
attesa
pronto
finito
quando è appena stato creato, cioè l'utente ha appena mandato in esecuzione un programma.
quando sta evolvendo, cioè la CPU sta eseguendo le sue istruzioni.
quando gli manca una risorsa per poter evolvere.
se ha tutte le risorse necessarie alla sua evoluzione tranne la CPU.
quando tutto il codice è stato eseguito.
Vita di un processo
La risorsa
E' un componente hardware o software necessario al processo per evolvere
La molteplicità di una risorsa è il numero massimo di processi che la possono usare contemporaneamente.
infinita
file di sola lettura
unitaria
stampante
esempio di risorsa con molteplicità
Tipi di risorsa
non può
seriale (dedicata)
Se
non seriale (condivisa)
prerilasciabile
non prerilasciabile
essere assegnata a più di un processo contemporaneamente
può
se, venendo tolta al processo prima che questo abbia finito di
usarla, nel momento in cui gli viene restituita, il processo
può riprendere il lavoro dal punto in cui era stato interrottto.
deve ricominciare il lavoro dall'inizio.
La richiesta di una risorsa da parte di un processo si dice
singola
una sola risorsa
quando il processo richiede
multipla
per poter evolvere
almeno due risorse
bloccante
può
quando il processo
non bloccante
anche se non
evolvere
non può
gli viene assegnata la risorsa.
finchè non
statica
dal momento della creazione del processo fino alla sua terminazione.
se avviene
L'assegnazione di una risorsa a un processo si dice
dinamica
solo per il tempo in cui il processo utilizza la risorsa
Concorrenza
In informatica la concorrenza è una caratteristica dei sistemi di elaborazione nei quali può verificarsi che un
insieme di processi sia in esecuzione nello stesso istante. Tale sistema viene appunto chiamato sistema a
concorrenza o sistema concorrente.
Nell'elaborazione concorrente si parla di parallelismo reale di esecuzione nel caso di sistemi
multiprocessore dove più CPU possono eseguire parallelamente un numero di processi pari al numero di
CPU, si parla di parallelismo virtuale di esecuzione nel caso di sistemi monoprocessore dove la CPU può
eseguire un solo processo alla volta.
Esempio:
Su molti computer oggi è possibile utilizzare più programmi contemporaneamente, ad esempio aprire word e
scrivere un documento di testo e contemporaneamente aprire media player per ascoltare della musica.
Parallelismo reale:
In un computer multiprocessore, cioè dotato di più CPU, i programmi vengono effettivamente eseguiti in
parallelo, una CPU esegue le istruzioni di un programma e un'altra CPU esegue le istruzioni dell'altro
programma.
Parallelismo virtuale:
In un computer monoprocessore, cioè dotato di una sola CPU, l'utente percepisce i due programmi (word e
media player) in esecuzione contemporanea, ma in verità la CPU esegue alternativamente alcune istruzioni
prima dell'uno e poi dell'altro separatamente.
In tal caso più processi evolvono in parallelo secondo le politiche di scheduling (pianificazione) della CPU
fornite dal sistema operativo, che si occupano di commutare l’uso della CPU tra i vari processi .
Ad ogni processo viene allocata la CPU per un intervallo di tempo costante (time slice o, quanto di tempo).
Solitamente la CPU viene allocata ai vari processi in base al loro ordine di arrivo (politica FIFO – first in first
out) oppure secondo dei criteri che individuano un ordinamento ottimale delle istruzioni da eseguire.
Programmazione concorrente
Anche all'interno di uno stesso programma è possibile far eseguire alla CPU più istruzioni in parallelo, cioè
contemporaneamente.
Per implementare la programmazione concorrente in java si usano le istruzioni fork e join oppure cobegin e
coend.
Esempio:
Si consideri un programma che deve risolvere la seguente espressione matematica:
(2*6)+(1+4)*(5-2)
Si riportano i diagrammi a blocchi nei due casi di elaborazione sequenziale (caso1) ed elaborazione
cocncorrente (caso 2):
Caso 1: esecuzione del programma con un ordinamento totale delle azioni
Caso 2: esecuzione del programma con un ordinamento parziale delle azioni
GRAFO DI HOLT
Il Grafo di Holt permette di rappresentare tutte le situazioni in cui si possono venire a trovare i
processi e le richieste di risorse, è utile per individuare situazioni di criticità tra processi e risorse.
RIDUCIBILITA' DEL GRAFO DI HOLT
Il grafo ridotto di Holt si ottiene togliendo le situazioni in cui un processo è in grado di evolvere,
liberando quindi le risorse che sta utilizzando a favore degli altri processi.
I thread
Un thread è un segmento di codice, tipicamente una funzione, che viene eseguito all'interno di un processo.
Esempio:
Processo padre: word
Thread figlio 1: reimpaginazione
Thread figlio 2: controllo ortografico
Tutti i thread figli di un processo, condividono con il processo padre le risorse e i dati.
Esempio:
I dati del processo padre sono costituiti dal documento di testo. I thread figli 1 e 2 eseguono la reimpaginazione e il controllo ortografico sullo stesso documento.
Il cambio di contesto è la procedura di salvataggio dello stato di un processo attivo da sospendere e ripristino dello stato del processo che la CPU deve eseguire.
Il thread si chiama anche processo leggero perchè, rispetto al processo vero e proprio, richiede elaborazioni più snelle per passare dallo stato di pronto a quello di
esecuzione, in quanto non deve ricaricare i dati.
Esempio:
Quando la CPU passa dall'esecuzione del thread figlio 1 (reimpaginazione) a quella del thread figlio 2 (controllo ortografico) non deve ricaricare i dati in quanto
entrambi i thread figli lavorano sullo stesso documento di testo.
Un programma o un segmento di codice è detto thread-safe se, nel caso di esecuzioni multiple da parte di più thread, garantisce che nessun thread può accedere ai
dati durante il loro aggiornamento.
Esempio:
In una sala cinematografica con più casse e un sistema di prentazione via Internet per la vendita dei biglietti, il numero di posti è continuamente aggiornato e
memorizzato in una variabile condivisa postiLiberi.
La procedura (il thread) che aggiorna il numero di posti ancora disponibli, che può essere eseguita da più utenti, viene gestita garantendo la mutua esclusione alla
variabile condivisa postiLiberi.
Single threading vs multithreading in 4 ambienti operativi
THREAD IMPLEMENTATI DA
Implementazione multithreading
PORTABILITA'
SE IL THREAD SI SOSPENDE, SI
SOSPENDE ANCHE IL PROCESSO PADRE
E TUTTI GLI ALTRI THREAD FIGLI
SFRUTTA PIU'
PROCESSORI
LIBRERIE APPOSITE:
USER LEVEL
SI'
SI'
NO
S.O.: KERNEL LEVEL
NO
NO
SI'
ALL'INIZIO DAL S.O.
POI A LIVELLO
UTENTE: MISTA
(SOLARIS)
NO
NO
SI'
SINCRONIZZAZIONE TRA PROCESSI
PROCESSI IN COOPERAZIONE (SCAMBIO DI DATI)
SINCRONIZZAZIONE GESTITA
DAL S.O. TRAMITE UN'AREA
COMUNE DI MEMORIA
INDIRETTAMENTE
A CONOSCENZA
UNO DELL'ALTRO
PROCESSI
DIRETTAMENTE
I PROCESSI SI SCAMBIANO
MESSAGGI ESPLICITI.
Esempio: consultazione di un db on
line
PROCESSI IN COMPETIZIONE PER L'USO DI UNA RISORSA
Ogni risorsa ha un gestore che deve:
1. mantenere aggiornato lo stato di allocazione della risorsa
2. fornire i meccanismi ai processi per
1. accedervi,
2. prenderne possesso,
3. operare su du essa,
4. liberarla
3. definire a quale processo e per quanto tempo assenare la risorsa
SINCRONIZZAZIONE GESTITA TRAMITE UN'AREA COMUNE DI MEMORIA
risorse
1
2
dedicate
condivise
Visibili da un solo Visibili da più processi
processo alla volta. contemporaneamente.
Gestore S.O.
Gestore: programmatore
1
Risorse allocate
2
Staticamente
prima che il programma va
in esecuzione.
Gestore: programmatore
programmatore
dinamicamente
quando il programma va in
esecuzione.
Gestore: S.O.
Esempio: Spooler di
stampa
S.O.
Programmatore e S.O.
Fly UP