Corso di Laboratorio di Sistemi Operativi

Documenti analoghi
I thread nel sistema operativo LINUX: Linuxthreads

Introduzione al Multithreading

Esercitazione n.1 24 Ottobre Obiettivi:

Perche le CPU multicore

Sistemi Operativi GESTIONE DEI PROCESSI. D. Talia - UNICAL. Sistemi Operativi 4.1

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

I THREAD. thread 2. thread 1

ACSO Programmazione di Sistema e Concorrente

Semafori. Semafori classici con i thread POSIX 2

Java Virtual Machine. Indipendenza di java dalla macchina ospite. I threads in Java

Threads: 1. Concetti di base 2. Threads in sistemi operativi attuali (NT/UNIX)

I THREAD O PROCESSI LEGGERI

Modelli di programmazione parallela

Computazione multi-processo. Condivisione, Comunicazione e Sincronizzazione dei Processi. Segnali. Processi e Threads Pt. 2

2. I THREAD. 2.1 Introduzione

Lezione 5. Processi e thread. Sistemi operativi. Marco Cesati System Programming Research Group Università degli Studi di Roma Tor Vergata

Processi programma processo processo Stati di un processo Attesa di caricamento new Pronto ( ready ) Esecuzione running Waiting ( in Attesa )

I thread. Motivazioni e definizione. Modelli di programmazione multithread. Librerie per i thread. Problemi nella programmazione multithread

Sistemi Operativi 1. Mattia Monga. 11 marzo Dip. di Informatica e Comunicazione Università degli Studi di Milano, Italia

I Processi nel Sistema Operativo Unix. Gerarchie di processi Unix. Stati di un processo Unix. Stati di un processo Unix.

Sistemi Operativi. Processi GESTIONE DEI PROCESSI. Concetto di Processo. Scheduling di Processi. Operazioni su Processi. Processi Cooperanti

Soluzioni ai problemi di Mutua Esclusione Primitive di sincronizzazione. Soluzioni ai problemi di Mutua EsclusionePrimitive di sincronizzazione

Thread: sincronizzazione Esercitazioni del 09 Ottobre 2009

SISTEMI OPERATIVI. Nucleo di un SO. Il Nucleo. Il nucleo di un SO Gestione delle interruzioni Sincronizzazione tra processi Dispatcher. 06.

Posix Threads: l evoluzione dei processi UNIX

Processi e thread. Dipartimento di Informatica Università di Verona, Italy. Sommario

Esempio: la Toilette Unisex

Monitor pthreads. Esercizio

Sistemi Operativi (M. Cesati)

Esercizio sul Monitor. Ponte con utenti grassi e magri 11 Novembre 2013

Sistemi Operativi. Lezione 4 I processi: implementazioni

Il Concetto di Processo

Java Virtual Machine

I Processi. Il Concetto di Processo

Sistemi Operativi. Lezione 7 Comunicazione tra processi

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Sincronizzazione fra processi

I Processi nel SO UNIX

Meccanismi di sincronizzazione: Semafori e Monitor

SEMAFORI SEMAFORI. Sul semaforo sono ammesse solo due operazioni (primitive)

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Cosa e un processo? Stato del processo

Processi e thread. Concetto di processo

3.2 Concorrenza, parallelismo e parallelismo reale

Linuxthreads: esercizio

I Processi nel Sistema Operativo Unix

Capitolo 5: I thread

Programmazione multi threaded in Python. Linguaggi dinamici A.A. 2010/2011 1

La torta caprese. Ingredienti. Istruzioni: 5 uova 8 cucchiai di zucchero 1/8kg di burro ¼kg di mandorle dolci 100gr di cioccolato fondente

Esercizi di utilizzo del semaforo semplice di competizione per l'uso di una risorsa comune

Funzioni, Stack e Visibilità delle Variabili in C

Introduzione. Meccanismi di sincronizzazione: Semafori e Monitor. Semafori - Definizione. Semafori - Descrizione informale

Sistemi Operativi. Bruschi Monga Re. Dischi virtuali Esercizio. Concorrenza Semafori. Sincronizzazione con monitor pthreads. I-node.

Lab 1: Java Multithreading

SISTEMI OPERATIVI THREAD. Giorgio Giacinto Sistemi Opera=vi

Monitor. Le procedure entry sono le sole operazioni che possono essere utilizzate dai processi per accedere alle variabili comuni.

Il costrutto monitor

SC che operano su thread. pthread_create() etc...

Relazione tra thread e processi

T 1. Per un processo con più thread di controllo, lo stato di avanzamento della computazione di ogni thread è dato da:

Sistemi Operativi L-A. Esercizi 14 Giugno Esercizio monitor

SISTEMI OPERATIVI. I thread. Prof. Luca Gherardi Prof.ssa Patrizia Scandurra (anni precedenti) (MODULO DI INFORMATICA II)

Sommario. Processi e Programmi. Che cosa e un Processo? Lezione 5 Processi e Threads

GENERAZIONE PROCESSO FIGLIO (padre attende terminazione del figlio)

PROGRAMMA DISCIPLINARE SVOLTO a. s / 2016

I thread di uno stesso processo condividono dati e codice del processo, ma lo stack di esecuzione ed il program counter sono privati.

2. Nucleo del sistema operativo (la gestione dei processi)

Input/output da file I/O ANSI e I/O UNIX FLUSSI E FILE FLUSSI FLUSSI di TESTO FLUSSI BINARI FILE

Sistemi Operativi II. Thread: TSD, Attributi

Processi in Linux. Igino Corona 20 Ottobre 2009

Giuseppe Pelagatti. Programmazione e Struttura del sistema operativo Linux

Lettori e scrittori, Barbiere sonnolento

Sistemi Operativi. Lez. 6: Problemi classici della programmazione concorrente

Il semaforo. Strumento linguistico di basso livello per risolvere problemi di sincronizzazione.

Sistemi Operativi. Lez. 13: primitive per la concorrenza monitor e messaggi

Gestione dei processi

I Thread. Laboratorio Software M. Grotto R. Farina

Università di Roma Tor Vergata Corso di Laurea triennale in Informatica Sistemi operativi e reti A.A Pietro Frasca.

Sistemi operativi - Concetti ed esempi -Settima edizione

Implementazione dei monitor tramite semafori Attesa condizionale Sincronizzazione nei sistemi operativi reali Transazioni atomiche

Informatica 3. Informatica 3. LEZIONE 6: Il controllo dell esecuzione. Lezione 6 - Modulo 1. Errori durante l esecuzione. Il controllo dell esecuzione

CREAZIONE PROCESSI IN UNIX 20

I THREAD O PROCESSI LEGGERI Generalità

L API socket ed i daemon

Concetto di processo. Processi. Immagine in memoria di un processo. Stati di un processo. Un SO esegue una varietà di attività:

Simulazione dell esecuzione di processi su architettura multiprocessore

Ottenere una modifica del parametro attuale

Processi UNIX. I Processi nel SO UNIX. Gerarchie di processi UNIX. Modello di processo in UNIX

Informatica Generale 07 - Sistemi Operativi:Gestione dei processi

Thread. Thread. Creazione di nuovi processi. Applicazioni reali. La creazione di un nuovo processo costa I tempi di context switch sono elevati

GESTIONE DEI PROCESSI

I Thread in Java e POSIX

Capitolo 3 -- Silberschatz

Corso di Laboratorio di Sistemi Operativi

Capitolo 7: Sincronizzazione

Organizzazione di un SO monolitico

Lo scheduler di UNIX (1)

2. Nucleo del sistema operativo (la gestione dei processi)

Sistemi Operativi. Lezione 3 I Processi

Esame Laboratorio di Sistemi Operativi Cognome Nome Mat.

Transcript:

Corso di Laboratorio di Sistemi Operativi Lezione 7 Alessandro Dal Palù email: alessandro.dalpalu@unipr.it web: www.unipr.it/~dalpalu

Threads Un thread è l unità di base per l utilizzo della CPU. Composto da Program Counter, registri, stack. Più thread formano un processo classico, e condividono lo stesso spazio di memoria (codici e dati) e le risorse (file, segnali...) Utili per computazioni concorrenti.

Threads Vantaggi: Context switch veloce: è sufficiente aggiornare poche informazioni (PC, regs e stack!) Comunicazioni facili e veloci (condivisione di memoria) Svantaggi: Le routine di librerie in ambiente multithreading devono essere rientranti (thread-safe), ovvero non causano problemi di condivisione se 2 thread chiamano contemporaneamente la stessa funzione.

Threads Esistono 2 implementazioni dei thread: - Thread a livello utente: lo scheduler vede solo i processi. Una libreria utente realizza lo scheduler interno tra threads. - Thread a livello kernel: il sistema operativo offre un insieme di syscall per gestione threads (analoghe a processi). Context switching più costoso della gestione con libreria utente. Esecuzione contemporanea di più thread dello stesso processo.

Threads e Linux Le ultime versioni del kernel forniscono la syscall clone() per creare threads a livello kernel. Differenza rispetto a Unix. La syscall clone() specifica di Linux e quindi non portabile. Si usa uno standard portabile POSIX 1003.1c (pthreads): Creazione/terminazione threads Sincronizzazione threads: lock, variabili condizione... Semafori: POSIX 1003.1b (<semaphore.h>)

Pthreads - creazione Un thread è descritto da un intero tid: pthread_t tid; Il tipo pthread_t è dichiarato nell header file <pthread.h> Creazione: pthread_create(&tid, &thread_attrib,start_routine,arg); tid viene caricato con l identificatore del thread; thread attrib contiene gli eventuali attributi (generalmente e NULL); start routine è il puntatore alla funzione che contiene il codice del thread; arg parametri dati in pasto a start routine.

Pthreads - creazione Esempio: int A, B; void * codice(void *) { /*definizione del codice del thread */ } main() {pthread_t t1, t2;.. pthread_create(&t1,null, codice, NULL); pthread_create(&t2,null, codice, NULL);.. } I due thread appartengono allo stesso processo e condividono le variabili globali del programma che li ha generati (ad esempio A e B).

Pthreads - exit e join pthread_exit(&ret_val) Termina l esecuzione di un thread, passa un valore di ritorno (ret val) che il chiamante può catturare con pthread join() pthread_join(tid, &ret_val) Attende il termine dell esecuzione di thr name Legge (ret val) il valore di ritorno del thread terminato. Se la funzione termina correttamente il valore di ritorno è 0

Pthreads - Esercizio Scaricare dal sito il file excreazionethread.c Studiare il codice. Provare a compilare ed eseguire. Tempo 15 minuti.

Pthreads - Mutex Un Mutex (o lock, semaforo binario...) viene utilizzato per sincronizzare laccesso (in mutua esculsione) ad una sezione critica da parte di più thread. Per esempio si protegge l utilizzo di una risorsa non condivisibile o una modifica a variabili condivise. Il valore del mutex può essere 0 (risorsa occupata) o 1 (risorsa libera). In Pthreads lock richiede la risorsa e unlock la rilascia.

Pthreads - Mutex - chiamate pthread_mutex_t mutex_name; Definisce una variabile mutex. pthread_mutex_init(&mutex_name,mutex_attrib) Crea il mutex (default: libero). mutex attrib=null. pthread_mutex_lock(&mutex_name) Blocca mutex name. Se il mutex e gia in lock il thread viene sospeso in attesa dellunlock. pthread_mutex_trylock(&mutex_name) Prova a mettere in lock mutex name senza bloccarsi. riuscito, altrimenti ritorna EBUSY Ritorna 0 se è pthread_mutex_unlock(&mutex_name) Sblocca mutex name pthread_mutex_destroy(&mutex_name) Elimina mutex name

Mutex esercizio Scaricare dal sito il file mutex.c Studiare il codice. Provare a compilare ed eseguire. Tempo 15 minuti.

Semafori Si usa la libreria semaphore.h sem init: inizializzazione di un semaforo sem wait: wait sem post: signal sem t: tipo di dato associato al semaforo;

Semafori - chiamate sem_t my_sem; Definisce una variabile di tipo semaforo. sem_init(sem_t* my_sem, 0, unsigned int value) Attribuisce il valore iniziale del semaforo. value il valore iniziale. int sem_wait(sem_t *sem) wait di Dijkstra: se il valore del semaforo è 0, sospende il thread chiamante nella coda associata al semaforo; altrimenti ne decrementa il valore. int sem_post(sem_t *sem) signal di Dijkstra: se c è almeno un thread sospeso nella coda associata al semaforo sem, viene risvegliato; altrimenti il valore del semaforo viene incrementato.

Semafori - esercizio Scaricare dal sito il file semthread.c Studiare il codice. Provare a compilare ed eseguire. Tempo 15 minuti.

Refs https://computing.llnl.gov/tutorials/pthreads/ http://yolinux.com/tutorials/linuxtutorialposixthreads.html Google, google, google!!!

Esercizio con pthreads Implementare il problema dei lettori e scrittori utilizzando semafori e mutex forniti da pthreads. Generare 1 scrittore che scrive su un vettore (condiviso!) int A[100]. Ogni 5 secondi lo scrittore scrive un numero in una locazione di A[]. Creare 2 thread che ad intervalli regolari e diversi leggono e stampano a video il contenuto di A.

Esercizio con pthreads (pseudo codice) semafori mutex=1, wsem=1; int rc=0; //readers counter Reader Writer down(mutex); down(wsem); rc++; if rc=1 then down(wsem); up(mutex); readdata(); writeadta(); down(mutex); up(wsem); rc--; if rc=0 then up(wsem); up(mutex);