I Thread.

Slides:



Advertisements
Presentazioni simili
CUDA & OpenMP parallel programming.
Advertisements

Introduzione al linguaggio C++
INFORMATICA Altre Istruzioni di I/O
Meccanismi di IPC Problemi classici di IPC
CONCLUSIONE - Nucleo (o Kernel) Interagisce direttamente con lhardware Interagisce direttamente con lhardware Si occupa dellesecuzione.
1 Introduzione ai calcolatori Parte II Software di base.
Unità D1 Architetture di rete.
Programmazione concorrente
Unità D2 Database nel web. Obiettivi Comprendere il concetto di interfaccia utente Comprendere la struttura e i livelli che compongono unapplicazione.
Il Sistema Operativo.
Massa Laura Mela Enrica
1 Casi di studio ISO 9660 FAT-12, FAT-16, FAT-32 NTFS.
Gestione del processore
1 Processi e Thread Meccanismi di IPC, Inter Process Communication (1)
1 Processi e Thread Meccanismi di IPC (1). 2 Comunicazioni fra processi/thread Processi/thread eseguiti concorrentemente hanno bisogno di interagire per.
Giuseppe Fabio Fortugno.
I processi Concetto di processo Scheduling dei processi
Realizzazione del file system
Processi Concetto di processo Scheduling dei processi
Programmazione Procedurale in Linguaggio C++
Argomenti dalla linea dei comandi Gli argomenti possono essere passati a qualsiasi funzione di un programma, compresa la main(), direttamente dalla linea.
Introduzione ai thread
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Puntatori Marco D. Santambrogio – Ver. aggiornata al 21 Marzo 2013.
1 Corso di Informatica (Programmazione) Lezione 4 (24 ottobre 2008) Architettura del calcolatore: la macchina di Von Neumann.
Processi e Thread.
Threads: Sistemi Operativi I Corso di Laurea in Ingegneria Informatica
Progettazione dei Sistemi Interattivi (a.a. 2004/05) - Lezione 6 1 Programmi concorrenti: quanto è lungo un millisecondo? In un normale personal computer.
Struttura dei sistemi operativi (panoramica)
I Processi.
Software di base Il sistema operativo è un insieme di programmi che opera sul livello macchina e offre funzionalità di alto livello Es.organizzazione dei.
CAPITOLO 2 INTRODUZIONE AL LINGUAGGIO JAVA E ALL'AMBIENTE HOTJAVA.
2) Sistemi operativi Lab. Calc. AA2004/05 - cap.2.
Interazione utente-programma
Organizzazione della Memoria (Unix) Text contiene le istruzioni in linguaggio macchina del codice eseguibile, può essere condiviso in caso di processi.
Sistemi Operativi GESTIONE DEI PROCESSI.
Introduzione Cosa è un Sistema Operativo ?
Corso di Laurea in Ingegneria Informatica Laboratorio di Sistemi Operativi II anno, III periodo 2 crediti 13 ore di lezione 16 ore di esercitazione.
Sistemi Operativi GESTIONE DELLA MEMORIA CENTRALE.
1 LINUX: struttura generale The layers of a UNIX system. User Interface.
1 Scheduling in Windows 2000 Un thread entra in modalità kernel e chiama lo scheduler quando: Si blocca su un oggetto di sincronizzazione (semaforo, mutex,
SOFTWARE I componenti fisici del calcolatore (unità centrale e periferiche) costituiscono il cosiddetto Hardware (alla lettera, ferramenta). La struttura.
I File.
Le funzioni.
Corso di PHP.
INTRODUZIONE l sistema operativo è il primo software che lutente utilizza quando accende il computer; 1)Viene caricato nella memoria RAM con loperazione.
Creazione progetto in C++/DEV
Seconda Università degli Studi di Napoli Facoltà di Economia Corso di Informatica Prof.ssa Zahora Pina.
1 Scheduling in Windows 2000 Un thread entra in modalità kernel e chiama lo scheduler quando: Si blocca su un oggetto di sincronizzazione (semaforo, mutex,
Configurazione in ambiente Windows Ing. A. Stile – Ing. L. Marchesano – 1/23.
Processi e Thread Job: Insieme di processi che condividono quote e limiti. Processo: Contenitore di risorse (una lista di thread, una lista di handle e.
Il linguaggio di programmazione C; Il Sistema Operativo Linux installato, con relativo utilizzo della shell bash attraverso i principali comandi standard.
1 Lucidi delle esercitazioni di Sistemi di Elaborazione in Rete Università degli Studi della Calabria Corso di Laurea in Ingegneria Gestionale A.A. 2003/2004.
Sviluppare un programma in C che, dato un array da 100 elementi interi caricato con numeri casuali compresi tra [10,100], sia in grado di cercare il valore.
Threads.
Sistema Operativo (Software di base)
Prima di iniziare… Durata attività: due lezioni frontali + una lezione laboratorio + compiti per casa Prerequisiti: elementi base architettura dei calcolatori.
I processi.
T. MottaGenerazione e terminazione processi1 Creazione e terminazione dei processi Tommaso Motta
Docente: G. Ianni Esercitatori: A. Martello (Sistemi Operativi), V. Lio (Reti) Sito del corso: Google ‘sistemi operativi e reti unical’ Gruppo FB («Sistemi.
INTERFACCE Schede elettroniche che permettono al calcolatore di comunicare con le periferiche, che possono essere progettate e costruite in modo molto.
1 SC che operano su processi Getpid, fork, exec, wait, waitpid, exit, dup, dup2.
1 Processi e Thread Processi e thread in Windows 2000.
Sistemi operativi di rete Ing. A. Stile – Ing. L. Marchesano – 1/18.
1 Processi e Thread Processi Thread Meccanismi di comunicazione fra processi (IPC) Problemi classici di IPC Scheduling Processi e thread in Unix Processi.
Corso di Laurea in Biotecnologie corso di Informatica Paolo Mereghetti DISCo – Dipartimento di Informatica, Sistemistica e Comunicazione.
1 Processi e Thread Processi Thread Meccanismi di comunicazione fra processi (IPC) Problemi classici di IPC Scheduling Processi e thread in Unix Processi.
Cos’è un sistema operativo ?
INTRODUZIONE AI SISTEMI OPERATIVI. Introduzione Il software può essere diviso un due grandi classi: Il software può essere diviso un due grandi classi:
Il C `e un linguaggio di programmazione di uso generale, originariamente sviluppato per la scrittura del sistema operativo Unix, ed oggi disponibile su.
© 2016 Giorgio Porcu - Aggiornamennto 31/01/2016 I STITUTO T ECNICO SECONDO BIENNIO T ECNOLOGIE E P ROGETTAZIONE Il Sistema Operativo Thread G IORGIO P.
Transcript della presentazione:

I Thread

I thread Definizione Modelli di programmazione multithread Librerie per i thread Problemi nella programmazione multithread Thread di Linux

Definizione Un thread è l’unità base d’uso della CPU e comprende un identificatore di thread (ID), un contatore di programma, un insieme di registri ed uno stack Condivide con gli altri thread che appartengono allo stesso processo la sezione del codice, la sezione dei dati e le altre risorse allocate al processo originale (file aperti e segnali) Un processo tradizionale  heavyweight process  è composto da un solo thread Un processo multithread è in grado di eseguire più compiti in modo concorrente

Processi a singolo thread e multithread

Esempi Browser web Text editor Server web Un thread per la rappresentazione sullo schermo di immagini e testo Un thred per il reperimento dell’informazione in rete Text editor Un thread per la rappresentazione dei dati su schermo Un thread per la lettura dei dati immessi da tastiera Un thread per la correzione ortografica e grammaticale Server web Un thread per il servizio di ciascuna richiesta da parte dei client

Kernel multithread Molti kernel dei SO attuali sono multithread Linux Thread dedicati a servizi specifici (es. gestione dei dispositivi di I/O e delle interruzioni) Linux Impiega un thread a livello kernel per la gestione della memoria libera del sistema

Vantaggi  1 Tempo di risposta Condivisione delle risorse Rendere multithread un’applicazione interattiva permette ad un programma di continuare la sua esecuzione, anche se una parte di esso è bloccata o sta eseguendo un’operazione particolarmente lunga, riducendo il tempo medio di risposta Condivisione delle risorse I thread condividono la memoria e le risorse del processo cui appartengono; il vantaggio della condivisione del codice risiede nel fatto che un’applicazione può consistere di molti thread relativi ad attività diverse, tutti nello stesso spazio di indirizzi

Vantaggi  2 Economia Assegnare memoria e risorse per la creazione di nuovi processi è oneroso; poiché i thread condividono le risorse del processo cui appartengono, è molto più conveniente creare thread e gestirne i cambiamenti di contesto Esempio: in Solaris la creazione di un processo richiede un tempo trenta volte maggiore della creazione di un thread; il cambio di contesto è cinque volte più lungo per i processi rispetto ai thread

Vantaggi  3 Uso di più unità di elaborazione I vantaggi della programmazione multithread aumentano notevolmente nelle architetture multiprocessore, dove i thread possono essere eseguiti in parallelo; l’impiego della programmazione multithread in un sistema con più unità di elaborazione fa aumentare il grado di parallelismo

Thread a livello utente Sono gestiti come uno strato separato sopra il nucleo del sistema operativo, e sono realizzati tramite librerie di funzioni per la creazione, lo scheduling e la gestione senza alcun intervento diretto del nucleo Librerie per la realizzazione di thread a livello utente: POSIX Pthreads Win32 threads Java threads

Thread a livello kernel Sono gestiti direttamente dal SO: il nucleo si occupa di creazione, scheduling e gestione nel suo spazio di indirizzi Esempi: Windows 2000/XP Solaris Linux Tru64 UNIX Mac OS X Quale relazione esiste fra thread a livello utente e kernel?

Modelli di programmazione multithread Modello moltiauno (M:1) Modello unoauno (1:1) Modello moltiamolti (M:M)

Modello moltiauno Molti thread a livello utente vanno a corrispondere ad un unico thread a livello kernel L’intero processo rimane bloccato se un thread invoca una chiamata di sistema di tipo bloccante Esempi: Solaris Green Threads GNU Portable Threads

Modello unoauno Ciascun thread a livello utente corrisponde ad un thread a livello kernel Possibile inefficienza per il carico di lavoro dovuto alla creazione di molti thread a livello kernel Esempi: Windows 95/98/NT/2000/XP Linux, Solaris (versione 9 e successive)

Modello moltiamolti Si mettono in corrispondenza più thread a livello utente con un numero minore uguale di thread a livello kernel Possibilità di vincolare un thread utente ad un solo thread del kernel: modello a due livelli Esempi: Solaris (versioni precedenti alla 9) Tru64 UNIX

Libreria dei thread  1 Fornisce al programmatore una API per la creazione e la gestione dei thread Libreria a livello utente Codice e strutture dati nello spazio utente Invocare una funzione di libreria si traduce in una chiamata locale a funzione, non in una system call Libreria livello kernel Codice e strutture dati nello spazio del kernel Invocare una funzione della API provoca, generalmente, una chiamata di sistema al kernel

Libreria dei thread  2 Pthreads di POSIX Win32 Java Può presentarsi sia come libreria a livello utente sia a livello kernel Win32 Libreria di thread a livello kernel per sistemi Windows Java API gestibile direttamente dai programmi Java La API di Java per i thread è solitamente implementata per mezzo della libreria dei thread del sistema che ospita la JVM

Pthreads È lo standard POSIX (IEEE 1003.1c) che definisce la API per la creazione e la sincronizzazione dei thread Viceversa è la API che specifica il comportamento della libreria dei thread, la cui implementazione dipende dal particolare sistema operativo (può essere a livello utente o a livello kernel) Comune nei SO UNIXlike (Solaris, Linux, Mac OS X)

Esempio con Pthreads  1 /* Programma per il calcolo della somma dei primi N interi */ #include <pthread.h> /* include per la libreria Pthreads */ #include <stdio.h> int sum; /* variabile condivisa */ void *somma(char *param); /* funzione del nuovo thread */ int main(int argc, char *argv[]) { pthread_t tid; /* identificatore del thread */ pthread_attr_t attr; /* attributi del thread */ if (argc != 2) { fprintf(stderr, “Occorreva inserire N!”); exit(-1); } if (atoi(argv[1]) < 0) { fprintf(stderr, “%d deve essere >=0\n”, atoi(argv[1])); exit(-1); } pthread_attr_init(&attr); /* reperisce attributi predefiniti */ pthread_create(&tid,&attr,somma,argv[1]); /* crea il thread */ /* il padre attende la terminazione del nuovo thread */ pthread_join(tid, NULL); printf(“sum = %d\n”, sum); exit(0); }

Esempio con Pthreads  2 /* Il nuovo thread assume il controllo da questa funzione */ void *somma(char *param); { int i, upper=atoi(param); sum = 0; for (i=1, i<=upper; i++) sum += i; pthread_exit(0); }

Threading Semantica delle chiamate di sistema fork() ed exec() Cancellazione Gestione dei segnali Gruppi di thread Dati specifici dei thread Attivazione dello scheduler

Semantica di fork() ed exec() In un programma multithread la semantica delle system call fork() ed exec() cambia: Se un thread in un programma invoca la fork(), il nuovo processo potrebbe, in generale, contenere un duplicato di tutti i thread oppure del solo thread invocante La scelta fra le due opzioni dipende dalla immediatezza o meno della successiva chiamata ad exec() Se la chiamata di exec() avviene immediatamente dopo la chiamata alla fork(), la duplicazione dei thread non è necessaria, poiché il programma specificato nei parametri della exec() sostituirà il processo chiamante  si duplica il solo thread chiamante Altrimenti, tutti i thread devono essere duplicati

Cancellazione di thread È l’operazione che permette di terminare un thread prima che completi il suo compito La cancellazione su un thread bersaglio può avvenire… …in modalità asincrona: un thread fa terminare immediatamente il thread bersaglio Problemi se si cancella un thread mentre sta aggiornando dati che condivide con altri thread …in modalità differita: il thread bersaglio può periodicamente controllare se deve terminare, in modo da riuscirvi al momento opportuno (cancellation point, in Pthreads)

Gestione dei segnali  1 Nei sistemi UNIX si usano segnali per comunicare ai processi il verificarsi di determinati eventi All’occorrenza di un particolare evento, si genera un segnale S’invia il segnale ad un processo Una volta ricevuto, il segnale deve essere gestito I segnali posso essere… sincroni, se vengono inviati allo stesso processo che ha eseguito l’operazione causa del segnale asincroni, se causati da eventi esterni al processo in esecuzione

Gestione dei segnali  2 Nei sistemi multithread è possibile… inviare il segnale al thread cui il segnale si riferisce inviare il segnale ad ogni thread del processo inviare il segnale a specifici thread del processo definire un thread specifico per ricevere tutti i segnali diretti al processo I segnali sincroni devono essere recapitati al thread che ha generato l’evento causa del segnale Alcuni segnali asincroni (per esempio il segnale di terminazione di un processo) devono essere inviati a tutti i thread Possibilità di specificare, per ciascun thread, quali segnali accettare e quali bloccare

Gruppi di thread Un numero illimitato di thread presenti nel sistema potrebbe esaurirne le risorse Creare un certo numero di thread alla creazione del processo ed organizzarli in un gruppo in cui attendano il lavoro che verrà loro successivamente richiesto Vantaggi: Di solito il servizio di una richiesta tramite un thread esistente è più rapido, poiché elimina l’attesa della creazione di un nuovo thread Limita il numero di thread relativi a ciascun processo alla dimensione prestabilita Rilevante per sistemi che non possono sostenere un numero elevato di thread concorrenti

Dati specifici dei thread Talvolta è necessario che i thread abbiano a disposizione una loro copia di certi dati (non necessariamente tutti i dati del processo di origine) Esempio: In un sistema per transazioni, si può svolgere ciascuna transazione tramite un thread distinto ed un identificatore unico per ogni transazione Utili quando non si ha controllo sul processo di creazione dei thread (per esempio, nel caso dei gruppi di thread)

Attivazione dello scheduler  1 Il modello M:M richiede che sia mantenuta una comunicazione costante fra i thread utente e i thread a livello kernel allocati all’applicazione Si alloca una struttura dati intermedia nota come processo leggero o LWP (LightWeight Process) Per la libreria dei thread a livello utente, LPW è un processore virtuale a cui l’applicazione può richiedere lo scheduling di un thread a livello utente Corrispondenza fra LPW e thread a livello kernel I thread del kernel vanno in esecuzione sui processori fisici Se un thread del kernel si blocca, l’effetto si propaga attraverso l’LPW fino al thread al livello utente ad esso associato

Attivazione dello scheduler  2 L’attivazione dello scheduler mette a disposizione la procedura di upcall  un meccanismo di comunicazione dal kernel alla libreria di gestione dei thread Tale comunicazione garantisce all’applicazione la capacità di mantenere attivi un numero opportuno di thread a livello kernel

Thread in Linux  1 Linux li definisce task invece che thread La creazione dei task avviene con la chiamata della system call clone() All’invocazione, clone() riceve come parametro un insieme di indicatori (flag), che definiscono quante e quali risorse del task genitore saranno condivise dal task figlio clone() può permettere al task figlio la condivisione totale dello spazio degli indirizzi del task padre: si crea un thread

Thread in Linux  2 Se nessun flag è impostato al momento dell’invocazione di clone(), non si ha alcuna condivisione: si ottiene una situazione analoga all’invocazione di una fork() Condivisione ad intensità variabile possibile perché: Ogni task è rappresentato da una struttura dati nel kernel La struttura non contiene dati, ma puntatori alle strutture contenenti dati La chiamata a fork() duplica tutte le strutture dati del task genitore Con clone() il nuovo task non riceve una copia di tutte le strutture dati, ma solo alcuni puntatori a tali strutture, in base ai parametri di chiamata di clone()