Sistemi Operativi II. Thread: TSD, Attributi



Documenti analoghi
Corso di Programmazione Concorrente

Sincronizzazione di thread POSIX

Corso di Laboratorio di Sistemi Operativi A.A

il tipo di parallelismo dipende dal grado di cooperazione

ACSO Programmazione di Sistema e Concorrente

Thread thread lightweight process

Creazione di thread. In Linux si utilizzano le librerie pthread (POSIX thread) per lavorare con i thread:

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

Libreria Linux Threads. Threads nel S.O. Linux. Primitive per la gestione dei thread. Portabilità: libreria pthreads (Posix).

LinuxThreads: I thread nel sistema operativo LINUX: Linuxthreads. LinuxThreads. LinuxThreads

Sincronizzazione di thread POSIX

I thread nel sistema operativo LINUX: Linuxthreads

I Thread. Laboratorio Software M. Grotto R. Farina

Thread. La libreria Pthread Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino

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

Sistemi operativi. Corso di Laurea Triennale in Ingegneria Informatica. Lezione 6 Programmazione concorrente Thread Join

Obiettivi: Esercitazione n.1! 26 Ottobre Introduzione alla programmazione multithreaded Gestione dei thread mediante libreria pthreads:

Introduzione al Multithreading

Esercitazione [2] Processi e Thread

Esercitazione [01] Processi e Thread

Unix/Linux Threads. la memoria globale (l accesso richiede sincronizzazione); i signal handlers e le disposizioni per i segnali;

Sistemi Operativi (M. Cesati)

Sistemi Operativi (M. Cesati)

Thread Posix. Agenda. Introduzione Libreria thread. Esempi ed esercizi

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

LinuxThreads: I thread nel sistema operativo LINUX: Linuxthreads

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

Esercitazione n.1 24 Ottobre Obiettivi:

Titolo presentazione INFORMATICA. sottotitolo A.A Milano, XX mese 20XX Laboratorio n 4 Ing. Gian Enrico Conti Dott.

Thread POSIX Insegnamento di Sistemi di Elaborazione Corso di L.M. In Ing. Elettronica

Threads. Processi Single e Multi-thread

Seminario: Thread POSIX Insegnamento di Sistemi di Elaborazione Corso di L.S. In Ing. Elettronica

LABORATORIO DI SISTEMI OPERATIVI

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.

Thread. Introduzione Creazione, distruzione Sincronizzazione

Sistemi operativi. Corso di Laurea Triennale in Ingegneria Informatica. Lezione 7 Mutex Condition Esempi di utilizzo

Corso: Sistemi Operativi

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.

5 Thread. 5 Thread. 5 Thread. Ad un generico processo, sono associati, in maniera univoca, i seguenti dati e le seguenti informazioni:

Pthread (man pthreads)

Cosa sono i semafori?

Politecnico di Milano. Strutture dati dinamiche

ELEMENTI DI INFORMATICA. Linguaggio C

Sistemi Operativi (M. Cesati)

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

Programmazione (imperativa)

Esercitazione 2! Mutex e semafori POSIX. 3 Novembre 2016

Esercitazione 2 Sincronizzazione con semafori. 31 Ottobre 2013

Esercitazione n.1! 23 Ottobre Obiettivi: Introduzione alla programmazione pthreads:

Operazioni su file di caratteri

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

Corso di Laboratorio di Sistemi Operativi

Reti di Connessione e Instradamento AA

I puntatori e l allocazione dinamica di memoria

Thread. Contiene lucidi tratti da: Marco Faella, Clemente Galdi, Giovanni Schmid (Università di Napoli Federico II),

Allocazione dinamica della memoria

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

Gestione dei File C. Generalità

Input/Output su File

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

INTERPROCESS COMMUNICATION 27

Thread Standard IEEE POSIX c

Fondamenti di Informatica L-A

Il linguaggio C. Breve panoramica su stdio.h

Unità Didattica 4 Linguaggio C. Vettori. Puntatori. Funzioni: passaggio di parametri per indirizzo.

Strutture. Array dei nomi degli esami (MAX ESAMI è il massimo numero degli esami). Array con i crediti degli esami.

La gestione della memoria dinamica Heap

Allocazione dinamica della memoria

I Thread. I Thread. Se creiamo un nuovo processo con la fork, questo erediterà dal padre

Directory. Le directory unix sono file.

Laboratorio di Informatica

File. Molto astratta: file ha un nome (ex. Pippo.c), ed altre caratteristiche (dimensione, tipo, etc). Operazioni: copiare, cancellare, eseguire..

Il linguaggio C. Istruzioni, funzioni, dati strutturati

Sistemi Operativi (M. Cesati)

LINUX: struttura generale

Laboratorio di Algoritmi e Strutture Dati. Esercizi

Processi. Franco Maria Nardini

SISTEMI OPERATIVI. Processi in Linux. Giorgio Giacinto Sistemi Operativi

void char void char @param void int int int int

nome (lista_parametri) Funzioni funzioni predefinite: sqrt(x) log(x) usare queste funzioni significa: specificare il valore degli argomenti

LABORATORIO DI SISTEMI OPERATIVI

LinuxThreads. LinuxThreads: monitor & variabili condizione

Laboratorio di programmazione

Ancora sulle Classi in C++ e Java. this

La copia di un file. contare di quanti caratteri sia composto il file (e quindi determinare la dimensione del file di origine)

Esercitazioni Fondamenti di Informatica

Relazione tra thread e processi

Cosa e un processo? Stato del processo

Liste a puntatori: un esercizio passo passo

Aritmetica dei puntatori

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

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

Gestione dei files. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni Via Leopardi 132

Variabili dinamiche. Obiettivi: Presentare le variabili dinamiche, allocate e deallocate nell area HEAP, e le funzioni malloc e free

Transcript:

Sistemi Operativi II Thread: TSD, Attributi

Dati Privati di un Thread I thread condividono il segmento dati Complementarietà rispetto ai processi thread semplice scambiare dati con altri thread appositi meccanismi avere dati privati (TSD) processi semplice disporre di dati privati del processo appositi meccanismi per dialogare con altri processi (IPC)

Thread Specific Data (TSD) Può servire disporre di dati che siano globalmente visibili all interno di un singolo thread ma distinti da thread a thread Ogni thread possiede un area di memoria privata, la TSD area, indicizzata da chiavi La TSD area contiene associazioni tra le chiavi ed un valore di tipo void * diversi thread possono usare le stesse chiavi ma i valori associati variano di thread in thread inizialmente tutte le chiavi sono associate a NULL

Funzioni per Thread Specific Data int pthread_key_create() per creare una chiave TSD int pthread_key_delete() per deallocare una chiave TSD int pthread_setspecific() per associare un certo valore ad una chiave TSD void *pthread_getspecific() per ottenere il valore associato ad una chiave TSD

TSD: pthread_key_create() #include <pthread.h> int pthread_key_create( pthread_key_t *key, void (*destr_function) (void *)); Alloca una nuova chiave TSD e la restituisce tramite key destr_function, se NULL, é il puntatore ad una funzione distruttore da chiamare quando il thread esegue pthread_exit() restituisce 0 in caso di successo oppure un codice d errore 0

pthread_setspecific() & pthread_getspecific() #include <pthread.h> int pthread_setspecific(pthread_key_t key, const void *pointer); Cambia il puntatore TSD associato ad una data key per il thread chiamante restituisce 0 in caso di successo oppure un codice d errore 0 void * pthread_getspecific(pthread_key_t key); Restituisce il puntatore TSD associato ad una data key per il thread chiamante oppure NULL in caso di errore

tsd.c (1) #include static pthread_key_t thread_log_key; /* tsd key per thread */ void write_to_thread_log (const char* message); //Scrive log void close_thread_log (void* thread_log); //Chiude file log void* thread_function (void* args); //Eseguita dai thread int main() { // Crea una chiave da associare al log Thread-Specific // Crea 5 thread che facciano il lavoro // Aspetta che tutti finiscano return 0; }

tsd.c (2) int main() { int i; pthread_t threads[5]; // Crea una chiave da associare al puntatore TSD al log file pthread_key_create(&thread_log_key, close_thread_log); for (i = 0; i < 5; ++i) // thread che faccia il lavoro pthread_create(&(threads[i]), NULL, thread_function, NULL); } for (i = 0; i < 5; ++i) // Aspetta che tutti finiscano pthread_join (threads[i], NULL); return 0;

tsd.c (3) void write_to_thread_log (const char* message) { } FILE* thread_log = (FILE*)pthread_getspecific(thread_log_key); fprintf (thread_log, "%s\n", message); void close_thread_log (void* thread_log) { fclose ((FILE*) thread_log); } void* thread_function (void* args) { char thread_log_filename[20]; FILE* thread_log; sprintf(thread_log_filename,"thread%d.log",(int)pthread_self ()); thread_log = fopen (thread_log_filename, "w"); /* Associa la struttura FILE TSD a thread_log_key. */ pthread_setspecific (thread_log_key, thread_log); } write_to_thread_log ("Thread starting."); /* Fai altro lavoro qui... */ return NULL;

Gestione dei Segnali con Thread La gestione dei segnali in LinuxThreads è fortemente influenzata dall implementazione dei thread tramite clone() In pratica la gestione dei segnali è la stessa di quella vista nel caso dei processi Si discosta notevolmente dallo standard POSIX Per ulteriori dettagli consultare le man page di pthread_sigmask() pthread_kill() sigwait()

Attributi di Thread Nello standard POSIX gli attributi di thread sono di tipo pthread_attr_t Creazione pthread_attr_init() Deallocazione pthread_attr_destroy() Impostazione, con funzioni di nome: pthread_attr_setattrname Lettura, con funzioni di nome: pthread_attr_getattrname Riguardano tutti gli aspetti della vita di un thread: Scheduling, Contention, Detached state, Stack, Priorità Diversi non sono supportati da LinuxThreads

Creare / Deallocare Attributi di Thread #include <pthread.h> int pthread_attr_init(pthread_attr_t *attr); restituisce tramite attr un attributo di thread inizializzato con valori di default int pthread_attr_destroy(pthread_attr_t *attr); dealloca l attributo di thread in attr gli attributi di thread vengono di fatto utilizzati solo durante la creazione del thread cambiarli in seguito non comporta alcun effetto sui thread già creati

Impostare/Leggere Attributi di Thread Consultare le man page #include <pthread.h> int pthread_attr_setdetachstate( pthread_attr_t *attr, int detachstate); int pthread_attr_getdetachstate(const pthread_attr_t *attr, int *detachstate); int pthread_attr_setschedpolicy( pthread_attr_t *attr, int policy); int pthread_attr_getschedpolicy( const pthread_attr_t *attr, int *policy); int pthread_attr_setschedparam( pthread_attr_t *attr, const struct sched_param *param); int pthread_attr_getschedparam( const pthread_attr_t *attr, struct sched_param *param); int pthread_attr_setinheritsched(pthread_attr_t *attr, int inherit); int pthread_attr_getinheritsched(const pthread_attr_t *attr, int *inherit); int pthread_attr_setscope(pthread_attr_t *attr, int scope); int pthread_attr_getscope(const pthread_attr_t *attr, int *scope)

Esercizi Esercizio: risolvere il problema Produttori / Consumatori con buffer circolare di dimensione N utilizzando i thread in C sotto Linux. Prevedere un file di log distinto per ogni thread.