I Thread. Laboratorio Software 2008-2009 M. Grotto R. Farina



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

2. I THREAD. 2.1 Introduzione

Posix Threads: l evoluzione dei processi UNIX

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

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

L API socket ed i daemon

I Thread. I Thread. I due processi dovrebbero lavorare sullo stesso testo

AXO. Operativo. Architetture dei Calcolatori e Sistema. programmazione di sistema

I thread nel sistema operativo LINUX: Linuxthreads

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

Capitolo 5: I thread

dall argomento argomento della malloc()

SISTEMI OPERATIVI THREAD. Giorgio Giacinto Sistemi Opera=vi

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

Il Sistema Operativo. C. Marrocco. Università degli Studi di Cassino

Corso di Sistemi Operativi A.A CHIAMATE DI SISTEMA PER IL CONTROLLO DEI PROCESSI. Fabio Buttussi

Dynamic Linking. Introduzione Creazione di una libreria dinamica Uso di una libreria dinamica

GESTIONE DEI PROCESSI

Sistemi Operativi (modulo di Informatica II) I processi

I puntatori e l allocazione dinamica di memoria

CAP. 6: Nucleo del sistema operativo (La gestione dei processi)

Corso di Sistemi Operativi Ingegneria Elettronica e Informatica prof. Rocco Aversa. Raccolta prove scritte. Prova scritta

1 Processo, risorsa, richiesta, assegnazione 2 Concorrenza 3 Grafo di Holt 4 Thread 5 Sincronizzazione tra processi

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

Il Concetto di Processo

Il File System. Il file system

Modello dei processi. Riedizione delle slide della Prof. Di Stefano

ACSO Programmazione di Sistema e Concorrente

Il Sistema Operativo

Il descrittore di processo (PCB)

Allocazione dinamica della memoria - riepilogo

POSIX - Gestione dei Segnali. E.Mumolo, DEEI mumolo@units.it

Processi in Linux. Igino Corona 20 Ottobre 2009

Riccardo Dutto, Paolo Garza Politecnico di Torino. Riccardo Dutto, Paolo Garza Politecnico di Torino

Inizializzazione, Assegnamento e Distruzione di Classi

Relazione tra thread e processi

File system II. Sistemi Operativi Lez. 20

Oggetti Lezione 3. aspetti generali e definizione di classi I

Corso di Sistemi di Elaborazione delle informazioni

La gestione della memoria

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Il file system. meccanismi di accesso e memorizzazione delle informazioni (programmi e dati) allocate. in memoria di massa

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

Fondamenti di Informatica e Laboratorio T-AB T-16 Progetti su più file. Funzioni come parametro. Parametri del main

Scheduling della CPU. Sistemi multiprocessori e real time Metodi di valutazione Esempi: Solaris 2 Windows 2000 Linux

il tipo di parallelismo dipende dal grado di cooperazione

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

Gestione Risorse Umane Web

Processi. Laboratorio Software C. Brandolese

Con il termine Sistema operativo si fa riferimento all insieme dei moduli software di un sistema di elaborazione dati dedicati alla sua gestione.

Thread: sincronizzazione Esercitazioni del 09 Ottobre 2009

Pronto Esecuzione Attesa Terminazione

Definizione Parte del software che gestisce I programmi applicativi L interfaccia tra il calcolatore e i programmi applicativi Le funzionalità di base

Automatizzare i compiti ripetitivi. I file batch. File batch (1) File batch (2) Visualizzazione (2) Visualizzazione

Guida Rapida di Syncronize Backup

Lab. di Sistemi Operativi - Esercitazione n 9- -Thread-

Laboratorio di programmazione

La gestione di un calcolatore. Sistemi Operativi primo modulo Introduzione. Sistema operativo (2) Sistema operativo (1)

Una funzione è detta ricorsiva se chiama, direttamente o indirettamente, se stessa. In C tutte le funzioni possono essere usate ricorsivamente.

Sistema Operativo. Fondamenti di Informatica 1. Il Sistema Operativo

Drivers. Introduzione Tipologie Struttura Interazione con il kernel

Cenni di programmazione distribuita in C++ Mauro Piccolo

Sistemi Operativi. Interfaccia del File System FILE SYSTEM : INTERFACCIA. Concetto di File. Metodi di Accesso. Struttura delle Directory

PROCEDURA DI CHIUSURA ANNO FISCALE 2006 CON E-SHOP

Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:

Processi e Sincronizzazione. Laboratorio Software C. Brandolese M. Grotto

LABORATORIO DI SISTEMI OPERATIVI

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

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

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

Visibilità dei Membri di una Classe

Appunti tratti dal videocorso on-line di Algoritmi e Programmazione Avanzata By ALeXio

Archivio CD. Fondamenti di Programmazione

SQL Server Integration Services. SQL Server 2005: ETL - 1. Integration Services Project

Struttura di un sistema operativo. Struttura dei Sistemi Operativi. Servizi per l utente generico. Servizi per l utente generico

I Socket. Laboratorio Software M. Grotto R. Farina

Gestione dei File in C

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

MANUALE UTENTE Fiscali Free

Gestione dei processi. Marco Cesati. Schema della lezione. Blocco di controllo 2. Sezioni e segmenti. Gestione dei processi. Job.

Chiamate di sistema per la Gestione dei processi in POSIX. E.Mumolo, DEEI

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

Java Virtual Machine

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

GENERAZIONE PROCESSO FIGLIO (padre attende terminazione del figlio)

Groups vs Organizational Units. A cura di Roberto Morleo

Organizzazione degli archivi

strutturare dati e codice

Comunicazione. La comunicazione point to point e' la funzionalita' di comunicazione fondamentale disponibile in MPI

Introduzione alla teoria dei database relazionali. Come progettare un database

Finalità della soluzione Schema generale e modalità d integrazione Gestione centralizzata in TeamPortal... 6

Programmazione multiprocesso

Simulazione dell esecuzione di processi su architettura multiprocessore

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

La struttura dati ad albero binario

Mon Ami 3000 Varianti articolo Gestione di varianti articoli

Il Sistema Operativo. Introduzione di programmi di utilità. Elementi di Informatica Docente: Giorgio Fumera

CAPITOLO 7 - SCAMBIO DI MESSAGGI

costruttori e distruttori

Sommario. Oracle Database 10g (laboratorio) Grid computing. Oracle Database 10g. Concetti. Installazione Oracle Database 10g

Transcript:

I Thread M. Grotto R. Farina

Sommario 1. I Thread Introduzione 2. Creazione e terminazione Utilizzo Scheduling dei processi 3. Comunicazione 4. Attributi Passaggio di parametri Funzioni utili Descrizione Joinable vs detach Modifica degli attributi 5. Cancellazione Descrizione Stati di cancellazione Sync vs Async Uncancelable 6. Thread-specific data Descrizione Creazione ed uso della chiave 7. Cleanup handlers Descrizione Registrazione e cancellazione 8. Native POSIX Thread Library Linux e lo standard POSIX I Nuovi Thread per GNU/Linux Thread manager 2

I Thread Introduzione Unità di esecuzione a grana più fine rispetto ai processi I thread esistono all interno di un processo Tutti eseguono lo STESSO programma (una differente sezione) nello STESSO processo Ogni thread condivide le stesse risorse File descriptors, zona di memoria,... Un azione in un thread ha ripercussioni anche sugli altri Se un thread invoca una funzione della famiglia exec tutti i thread terminano ed inizia l esecuzione del nuovo programma 3

I Thread Introduzione GNU/Linux implementa la API standard di POSIX (Portable Operating System Interfaces) per i thread (pthread) Dalla versione 2.4.20 implementa la NPTL (Native POSIX Thread Library) Tutti i tipi di dato e le funzioni per i thread sono definite in <pthread.h> Non sono incluse nella libreria standard, ma nella libreria libpthread.so Necessario specificare la libreria lpthread in fase di linking Ogni thread è identificato da un thread ID Usare SEMPRE pthread_t 4

Creazione e terminazione Utilizzo A valle della creazione, ogni thread esegue una funzione specifica (thread function) Una thread function accetta un parametro di tipo void* e restituisce un valore di tipo void* pthread_create( ); Crea un nuovo thread. Gli argomenti necessari sono: Un puntatore ad una variabile pthread_t Un puntatore ad un oggetto thread attribute Un puntatore alla thread function Un thread argument Un thread termina se: termina la thread function il thread invoca pthread_exit( ); Esempio thread-create.c 5

Creazione e terminazione Scheduling dei processi La chiamata a pthread_create( ); termina immediatamente e l esecuzione riprende dall istruzione successiva Lo scheduling è asincrono Non fare MAI affidamento sull ordine di esecuzione Problema: il thread principale termina prima degli altri Le strutture dati a cui fanno riferimento gli altri thread potrebbero essere eliminate dalla memoria Soluzione: pthread_join( ); Analoga alla wait per i processi Esempio thread-create2.c 6

Comunicazione Passaggio di parametri È possibile passare dei parametri al thread tramite l argomento di tipo void* Possibilità di riusare la stessa funzione in più thread Solitamente si passa un puntatore ad una struttura o array di dati Necessario un casting all interno del thread È possibile raccogliere il valore di ritorno di un thread passando un argomento non nullo come secondo parametro di pthread_join( ); Necessario un cast esplicito da void* Esempio primes.c 7

Comunicazione Funzioni utili pthread_equal(pthread_t t_id_1, pthread_t t_id_2); per confrontare due thread id pthread_self(); restituisce il thread id del thread nella quale è invocata Utile per evitare che un thread invochi una join su se stesso EDEADLK if (!pthread_equal(pthread_self(), other_thread)) { pthread_join(other_thread, NULL);... }; 8

Attributi Descrizione Meccanismo per specializzare il comportamento di un thread Se il secondo parametro di pthread_create( ); è NULL si adotta il meccanismo di default Nella maggior parte dei casi un solo attributo è di interesse: il detach state Gli altri attributi sono tipicamente usati in sistemi real-time 9

Attributi Joinable vs detach Joinable thread quando la funzione termina non viene pulito automaticamente (simile ai processi zombie) Detach thread pulito alla terminazione della funzione Impossibile la sincronizzazione e la lettura del valore di ritorno pthread_attr_setdetach_state( ); PTHREAD_CREATE_DETACHED come secondo parametro È possibile trasformare un joinable thread in detached invocando pthread_detach( ); Impossibile il contrario 10

Attributi Modifica degli attributi Si crea un oggetto del tipo pthread_attr_t Si invoca pthread_attr_init( ); passandogli un puntatore all oggetto Si modifica l oggetto creato Si passa l oggetto a pthread_create( ); Si invoca pthread_attr_destroy( ); per distruggere l oggetto La variabile non è deallocata, può essere reinizializzata Esempio detached.c 11

Cancellazione Descrizione Definizione: richiesta di terminazione di un altro thread Si invoca pthread_cancel( ); passando l id del thread di cui si richiede la terminazione È possibile invocare pthread_join( ); su un thread cancellato Liberare le risorse Il valore di ritorno di un thread cancellato è PTHREAD_CANCELED 12

Cancellazione Stati di cancellazione Un thread può contenere codice che va eseguito in maniera all-ornothing Allocazione delle risorse: una cancellazione non consentirebbe di liberare le risorse allocate Possibilità di controllare la cancellazione Asynchronously cancelable: Synchronously cancelable: Uncancelable: può essere cancellato in qualsiasi momento le richieste di cancellazione sono accodate e processate al raggiungimento di specifici punti nel codice (cancellation points) le richieste sono ignorate 13

Cancellazione Sync vs Async pthread_setcanceltype( ); Opera sul thread che la invoca PTHREAD_CANCEL_ASYNCHRONOUS per impostare la modalità asincrona PTHREAD_CANCEL_DEFERRED Punti di cancellazione: pthread_testcancel(); per impostare la modalità sincrona (ripristina la modalità di default) Per processare una richiesta di cancellazione pendente Da invocare periodicamente per computazioni lunghe man pthread_cancel per gli altri punti di cancellazione 14

Cancellazione Uncancelable pthread_setcancelstate( ); PTHREAD_CANCEL_DISABLE PTHREAD_CANCEL_ENABLE Possibilità di implementare delle sezioni critiche tramite la disabilitazione della cancellazione Sezioni di codice da eseguire interamente o da non eseguire Importante alla fine ripristinare lo stato originale e NON impostare PTHREAD_CANCEL_ENABLE in maniera incondizionata L invocazione potrebbe essere annidata Esempio critical-section.c 15

Thread-specific data Descrizione Possibilità di definire uno spazio di memoria indipendente Creare copie di variabili per poterle modificare senza influire sul comportamento degli altri thread È possibile creare un numero arbitrario di data item Tutti di tipo void* Referenziati per mezzo di una chiave Usata da ogni thread per accedere alla copia specifica 16

Thread-specific data Creazione ed uso della chiave pthread_key_create( ); per creare la chiave Puntatore ad una variabile pthread_key_t da usare successivamente per accedere alla propria copia Puntatore ad una funzione di pulitura (cleanup) Automaticamente invocata quando il thread termina Invocata anche a fronte di richieste di cancellazione Non invocata se il thread-specific data è NULL Viene passata la copia locale della variabile pthread_setspecific( ); per impostare il proprio valore nella variabile locale pthread_getspecific( ); per leggere il valore 17

Cleanup handlers Descrizione Funzione invocata quando un thread termina Non specifica per ogni singolo thread data item Accetta un unico parametro di tipo void* Specificato all atto della registrazione dell handler Utile per deallocare istanze multiple di una risorsa Misura temporanea per deallocare risorse quando un thread termina o è cancellato invece di terminare l esecuzione di una regione particolare di codice In circostanze normali la risorsa va deallocata esplicitamente e l handler va rimosso 18

Cleanup handlers Registrazione e cancellazione pthread_cleanup_push(); registra un cleanup handler Puntatore alla funzione di cleanup Argomento di tipo void* per la funzione pthread_cleanup_pop(); cancella la registrazione di un cleanup handler Bilancia la chiamata a pthread_cleanup_push Flag intero: se diverso da zero la funzione è eseguita e solo successivamente - la registrazione è cancellata Esempio cleanup.c 19

Native POSIX Thread Library Linux e lo standard POSIX I thread di GNU/Linux sono processi che condividono lo spazio degli indirizzi Raccomandazioni POSIX aiutano a garantire un certo grado di uniformità nella gestione dei thread di vari SO Linux non è completamente POSIX compliant. In particolare per quanto riguarda la gestione dei segnali Process Identifier / Thread Identifier ed in generale per tutti gli aspetti in cui la vera natura dei thread di LinuxThreads non può essere nascosta 20

Native POSIX Thread Library I Nuovi Thread per GNU/Linux Dal 2003, grazie all interesse di IBM e Red Hat, si è sviluppato il supporto nativo ai thread per GNU/Linux NPTL: Native POSIX Thread Linux E distribuita con tutte le versioni più recenti del kernel, ma non tutte le distribuzioni attivano NPTL automaticamente Si tratta di un lavoro ormai completo che da vantaggi in termini di prestazioni maggiore aderenza allo standard POSIX Esempio thread-pid.c 21

Native POSIX Thread Library Thread manager Creato alla prima chiamata di pthread_create( ); Se un processo riceve un segnale in quale thread va gestito? In Linux i thread sono realizzati tramite processi Solitamente i segnali sono inviati al processo che realizza il thread principale Es: un processo esegue una fork(); il figlio tramite una exec( ); esegue un programma multithread Il padre mantiene come id del figlio il pid del processo che realizza il thread principale pthread_kill(pthread_t t_id, signal int sig); per inviare segnali ad uno specifico thread 22