Esercitazione [01] Processi e Thread

Похожие документы
I thread nel sistema operativo LINUX: Linuxthreads

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

Relazione tra thread e processi

Posix Threads: l evoluzione dei processi UNIX

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

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

Esercitazione [8] Pipe e FIFO

Gestione di files Motivazioni

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

Sistemi Operativi Anno Accademico 2011/2012. Segnali: Interrupt software per la gestione di eventi asincroni

Esercitazione [5] Input/Output su Socket

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

Elementi di Architettura e Sistemi Operativi

GENERAZIONE PROCESSO FIGLIO (padre attende terminazione del figlio)

2. I THREAD. 2.1 Introduzione

PROGRAMMA DISCIPLINARE SVOLTO a. s / 2016

Allocazione dinamica della memoria - riepilogo

Le operazioni di allocazione e deallocazione sono a carico del sistema.

Monitor pthreads. Esercizio

Header. Unità 9. Corso di Laboratorio di Informatica Ingegneria Clinica BCLR. Domenico Daniele Bloisi

Appunti del corso di Informatica 1 (IN110 Fondamenti) 6 Introduzione al linguaggio C

Ingegneria del Software

Lezione 10: Librerie e compilazione separata

Laboratorio di Programmazione Lezione 1. Cristian Del Fabbro

SAPIENZA Università di Roma Facoltà di Ingegneria dell Informazione, Informatica e Statistica

4 Le liste collegate 4.0. Le liste collegate. 4 Le liste collegate Rappresentazione di liste 4.1 Rappresentazione di liste

Programmazione Orientata agli Oggetti in Linguaggio Java

Java Native Interface Appunti

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

13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti

Thread: sincronizzazione Esercitazioni del 09 Ottobre 2009

I puntatori e l allocazione dinamica di memoria

I file Laboratorio di Linguaggi di Programmazione a.a. 2001/2002

Appunti del corso di Informatica 1. 6 Introduzione al linguaggio C

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

Terza Esercitazione. Unix - Esercizio 1. Unix System Call Exec Java Introduzione Thread

Esercitazioni di Progettazione del Software. Esercitazione (Prova al calcolatore del 17 settembre 2010)

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

Java threads (2) Programmazione Concorrente

Perche le CPU multicore

Visibilità dei Membri di una Classe

Laboratorio di Calcolatori 1 Corso di Laurea in Fisica A.A. 2006/2007

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

Corso di Reti di Calcolatori L-A

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

Esercitazione [6] Client/Server con Socket

Multithreading in Java. Fondamenti di Sistemi Informativi

Telematica II 17. Esercitazione/Laboratorio 6

Strutture. Strutture e Unioni. Definizione di strutture (2) Definizione di strutture (1)

Informatica B. Sezione D. Scuola di Ingegneria Industriale Laurea in Ingegneria Energetica Laurea in Ingegneria Meccanica

Processi in Linux. Igino Corona 20 Ottobre 2009

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

GESTIONE DEI PROCESSI

3. Terza esercitazione autoguidata: progetto gestione voli

Java Virtual Machine

La selezione binaria

Le funzioni in C. I programmi C sono costituiti da definizioni di variabili e funzioni.

Lezione 9: Strutture e allocazione dinamica della memoria

Il calcolatore. Architettura di un calcolatore (Hardware)

Gestione dei processi

Esercizio sulla gestione di file in Unix

Università degli Studi di Cassino Corso di Fondamenti di Informatica Puntatori. Anno Accademico 2010/2011 Francesco Tortorella

Indirizzo di una funzione. Puntatori a funzioni. Definizione di variabili. Definizione di variabili

Le aree dell informatica

Sistemi Operativi L-A. Esercizi 14 Giugno Esercizio monitor

Esercitazione Controllo di un motore DC mediante Arduino YUN

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a settembre 2011

Sistemi Operativi (M. Cesati)

Esercitazioni 7 e 8. Bounded Buffer con sincronizzazione Java (1)

Laboratorio di Algoritmi e Strutture Dati. La gestione della memoria dinamica Heap

IL CONCETTO DI FILE. È illecito operare oltre la fine del file.

15 - Packages. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Laboratorio di Programmazione 1. Docente: dr. Damiano Macedonio Lezione 18 31/03/2014

Laboratorio di Algoritmi e Strutture Dati

Breve riepilogo della puntata precedente:

La concorrenza in Java package java.util.concurrent Antonio Furone

Corso di Informatica Corso di Laurea in Ingegneria Gestionale a.a Secondo Compitino 17 Dicembre 2005

Politecnico di Milano - Facoltà di Ingegneria INFORMATICA A - Corso per allievi GESTIONALI - Prof. C. SILVANO A. A. 2001/ febbraio A

Esercizio 1. Esercizio 2

Gian Luca Marcialis studio degli algoritmi programma linguaggi LINGUAGGIO C

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

Corso di Laurea in Ingegneria Gestionale Esame di Informatica a.a giugno 2013

Fondamenti di Informatica 2

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

Librerie. Laboratorio di Informatica Antonio Monteleone 28

Транскрипт:

Esercitazione [01] Processi e Thread Leonardo Aniello <aniello@dis.uniroma1.it> Daniele Cono D Elia <delia@dis.uniroma1.it> Giuseppe Laurenza <laurenza@dis.uniroma1.it> Federico Lombardi <lombardi@dis.uniroma1.it> Sistemi di Calcolo - Secondo modulo (SC2) Programmazione dei Sistemi di Calcolo Multi-Nodo Corso di Laurea in Ingegneria Informatica e Automatica A.A. 2016-2017

Sommario Thread Riepilogo primitive C Esempi Processi vs thread Tempi per lancio e terminazione Interazione con la memoria virtuale Accesso concorrente a variabili condivise

Obiettivi 1. Capire le differenze tra processi e thread in termini di reattività, e da cosa dipendono 2. Imparare le basi della programmazione multi-threading a. Impostare un applicazione multi-threading b. Comprendere le problematiche legate all accesso concorrente

Thread in C Primitive (1/2) int pthread_create ( phtread_t* thread, const pthread_attr_t* attr, void* (*start_routine)(void*), void* arg); thread: puntatore a variabile di tipo pthread_t, su cui verrà memorizzato l ID del thread creato attr: attributi di creazione sempre NULL in questo corso start_routine: funzione da eseguire (prende sempre come argomento un void* e restituisce un void*) arg: puntatore da passare come argomento alla funzione start_routine Return value: 0 in caso di successo, altrimenti la causa dell errore

Thread in C Primitive (2/2) void pthread_exit (void* value_ptr); Termina il thread corrente, rendendo disponibile il valore puntato da value_ptr ad una eventuale operazione di join All interno di start_routine, può essere sostituita da return int pthread_join(phtread_t thread, void** value_ptr); Attende esplicitamente la terminazione del thread con ID thread Se value_ptr!=null, vi memorizza il valore eventualmente restituito dal thread (un void*, tramite pthread_exit) Return value: 0 in caso di successo, altrimenti la causa dell errore int pthread_detach(phtread_t thread); Notifica al sistema che non ci saranno operazioni di join su thread Return value: 0 in caso di successo, altrimenti la causa dell errore

Thread in C Un primo esempio void* thread_stuff(void *arg) { // codice thread che non usa argomenti return NULL; } int ret; pthread_t thread; ret = pthread_create(&thread,null,thread_stuff,null); if (ret!= 0) { fprintf(stderr, ERROR with pthread_create!\n ); exit(exit_failure); } ret = pthread_join(thread, NULL); if (ret!= 0) [...]

Thread in C Passaggio argomenti Scenario: lancio di N thread con argomenti necessariamente distinti void* foo(void *arg) { type_t* obj_ptr = (type_t*) arg; // cast ptr argomenti /* <corpo del thread> */ free(obj_ptr); return NULL; } pthread_t* threads = malloc(n * sizeof(pthread_t)); type_t* objs = malloc(n * sizeof(type_t)); for (i=0; i<n; i++) { objs[i] = [...] // imposto argomenti thread i-esimo ret = pthread_create(&threads[i], NULL, foo, &objs[i]); if (ret!= 0) [...] }

Processi vs Thread Performance Lanciare/terminare un thread è più veloce rispetto a lanciare/terminare un processo Memoria La creazione di un processo via fork() comporta la «copia» dell intera memoria del padre, mentre i thread la condividono Comunicazione I thread di uno stesso processo possono usare la sua memoria per comunicare tra loro, mentre la comunicazione tra processi richiede meccanismi aggiuntivi (shared memories)

Misurazione performance Tempo di esecuzione di una porzione di codice In fase di compilazione Includere il modulo performance.c Linkare le librerie run time (-lrt) e math (-lm) #include "performance.h" timer t; begin(&t); // porzione di codice di cui cronometrare l esecuzione end(&t); unsigned long int time; time=get_seconds(&t); time=get_milliseconds(&t); time=get_microseconds(&t); time=get_nanoseconds(&t);

Tempi di lancio/terminazione Misurazione della reattività (tempo richiesto) di processi e thread nelle fasi di lancio e terminazione Sorgente: reactivity.c Compilazione: gcc -o reactivity reactivity.c performance.c -lpthread -lrt -lm Vengono eseguiti N test per calcolare le reattività medie N passato come argomento Viene calcolato lo speedup come: reattività processi reattività thread

Esercizio 1 Nella slide 8 vengono elencate alcune differenze tra processi e thread rispetto alla condivisione di memoria È possibile sfruttarne una per modificare reactivity.c e rendere ancor meno reattiva la sezione multi-process, a vantaggio della sezione multi-thread! Esercizio Individuare la differenza da sfruttare Capire come sfruttarla nel corpo dei processi figli e dei thread Modificare reactivity.c di conseguenza Caveat: copy-on-write per la memoria virtuale in Linux! Verificare l aumento dello speedup

Accesso concorrente a variabili condivise Cosa succede quando più thread accedono in scrittura ad una variabile condivisa in concorrenza? Sorgente: concurrent_threads.c Compilazione: gcc -o concurrent_threads concurrent_threads.c -lpthread N thread in parallelo che aggiungono M volte un valore V ad una variabile condivisa (inizializzata a 0) La variabile condivisa alla fine dovrebbe valere N*M*V: succede sempre?

Esercizio 2 Nelle prossime lezioni presenteremo meccanismi di sincronizzazione pensati per risolvere questi problemi Tuttavia, è possibile implementare una soluzione che non usa meccanismi di sincronizzazione, pur mantenendo la semantica originale: N thread effettuano in parallelo M incrementi di valore V Al termine, il main thread verifica che tali incrementi equivalgano complessivamente a N*M*V Modificare concurrent_threads.c di conseguenza Suggerimento: lavorare sulle strutture dati per evitare accessi concorrenti in scrittura