1 Processo, risorsa, richiesta, assegnazione 2 Concorrenza 3 Grafo
by user
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.