Posix Threads: l evoluzione dei processi UNIX



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

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

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

I thread nel sistema operativo LINUX: Linuxthreads

Architettura di un sistema operativo

Il Concetto di Processo

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

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

2. I THREAD. 2.1 Introduzione

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

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

GESTIONE DEI PROCESSI

Approccio stratificato

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

Sistemi Operativi (modulo di Informatica II) I processi

Lezione 10: Librerie e compilazione separata

Il descrittore di processo (PCB)

Java Virtual Machine

Pronto Esecuzione Attesa Terminazione

Capitolo 5: I thread

FONDAMENTI di INFORMATICA L. Mezzalira

I THREAD O PROCESSI LEGGERI Generalità

Sistemi Operativi: Programmazione di Sistema

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

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

Sistemi Operativi STRUTTURA DEI SISTEMI OPERATIVI 3.1. Sistemi Operativi. D. Talia - UNICAL

T E O R I A D I P R O G E T T A Z I O N E D E L S O F T W A R E

1. Che cos è la multiprogrammazione? Si può realizzare su un sistema monoprocessore? 2. Quali sono i servizi offerti dai sistemi operativi?

Comunicazione tra Computer. Protocolli. Astrazione di Sottosistema di Comunicazione. Modello di un Sottosistema di Comunicazione

Corso di Sistemi di Elaborazione delle informazioni

Il File System. Il file system

Università di Torino Facoltà di Scienze MFN Corso di Studi in Informatica. Programmazione I - corso B a.a prof.

La Gestione delle risorse Renato Agati

Processi in Linux. Igino Corona 20 Ottobre 2009

Componenti di Sistemi Operativi. System Call Programmi di sistema Componenti di un SO Servizi di SO

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:

I Socket. Laboratorio Software M. Grotto R. Farina

Allocazione dinamica della memoria - riepilogo

Software di base. Corso di Fondamenti di Informatica

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. D. Talia - UNICAL. Sistemi Operativi 9.1

Telematica II 17. Esercitazione/Laboratorio 6

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

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

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

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

Sistemi Operativi MECCANISMI E POLITICHE DI PROTEZIONE. D. Talia - UNICAL. Sistemi Operativi 13.1

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

VMware. Gestione dello shutdown con UPS MetaSystem

Processi. Laboratorio Software C. Brandolese

Sistemi operativi. Esempi di sistemi operativi

La genealogia di Windows. Windows NT e Windows 95/98. Dimensioni del codice. Parte IX. Windows

Parte IX. Windows. Sistemi Operativi - prof. Silvio Salza - a.a IX - 1

Sistemi Operativi IMPLEMENTAZIONE DEL FILE SYSTEM. Implementazione del File System. Struttura del File System. Implementazione

Introduzione al Multithreading

Sistema di protezione (1)

Sistema di protezione (2) Protezione (1)

Comunicazione tra Processi

CAPITOLO 24 I MONITOR

Architettura dei calcolatori e sistemi operativi. Assemblatore e Collegatore (Linker) Capitolo 2 P&H Appendice 2 P&H

I/O su Socket TCP: read()

Lezione 9. Applicazioni tradizionali

INFORMATICA 1 L. Mezzalira

Programmazione concorrente in Java. Dr. Paolo Casoto, Ph.D

Capitolo 3: Strutture dei sistemi operativi

Il sistema di I/O. Hardware di I/O Interfacce di I/O Software di I/O. Introduzione

Input/Output. Moduli di Input/ Output. gestiscono quantità di dati differenti a velocità diverse in formati diversi. n Grande varietà di periferiche

Introduzione alla Programmazione Orientata agli Oggetti. Classi, Oggetti e Messaggi

Oggetti Lezione 3. aspetti generali e definizione di classi I

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

Sistemi Operativi (modulo di Informatica II) Sottosistema di I/O

Il Software. Il software del PC. Il BIOS

Obiettivi d esame PHP Developer Fundamentals on MySQL Environment

VARIABILI LOCALI E GLOBALI (ESTERNE)

Esercizio: gestione di un conto corrente

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

ASPETTI GENERALI DI LINUX. Parte 2 Struttura interna del sistema LINUX

SISTEMI OPERATIVI DISTRIBUITI

Inter Process Communication. Laboratorio Software C. Brandolese

Sistemi Operativi (modulo di Informatica II)

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

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

Capitolo Silberschatz

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

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

Transcript:

Posix Threads: l evoluzione dei processi UNIX Raffaele Quitadamo, PhD in Computer Science Università di Modena e Reggio Emilia quitadamo.raffaele@unimore.it

Sommario Pthreads vs Unix processes L API per programmare coi pthreads Compilare coi pthreads Le primitive per gestire i thread Alcuni esempi di codice in Eclipse Conclusioni

Un esempio per partire: Apache web server Approccio sequenziale while (1) { accept_new_connection(); read_command_from_connection(); handle_connection(); /* leggi comando, ritorna risultato sulla connessione*/ close_connection(); } Possibile attacco: denial-of-service (un client invia comandi lentamente o solo a meta ) Approccio con processi UNIX while (1) { accept_new_connection(); read_command_from_connection(); if (fork() == 0) { handle_connection(); close_connection(); exit(0); } } Rischio: far crashare il sistema per troppi processi Performance: troppi processi rallentano il sistema Processi isolati -- Problemi di performance nella comunicazione Avremmo bisogno di un metodo per:! 1.! Generare processi piu velocemente! 2.! Usare meno memoria! 3.! Condividere dati tra flussi di esecuzione

Cos è un thread Definizione: un flusso independente di istruzioni che viene schedulato ed eseguito come tale dal sistema operativo Per capire che significa, ripensiamo al concetto di processo in UNIX. Un processo e creato dal sistema operativo (con un certo overhead) e contiene informazioni sulle risorse del programma e lo stato di esecuzione: Process ID, user ID, and group ID Variabili d ambiente Working directory Codice del programma Registri Stack Heap File descriptors Signal actions Shared libraries Inter-process communication tools (e.g. pipes or shared memory).

Il rapporto tra thread e processi Un thread mantiene un flusso di esecuzione autonomo, mantenendo il seguente stato: Stack pointer Registeri Proprietà di Scheduling Set di pending e blocked signals Thread specific data In ambiente UNIX un thread: Esiste all interno di un processo e usa le sue risorse Vive come flusso indipendente finché non muore il suo processo Puó condividere risorse con altri thread dello stesso processo É leggero rispetto ad un processo Vivendo nello stesso processo: Cambiamenti (es. chiudere un file) fatti da un thread sono visibili ad un altro I puntatori puntano alla stessa area di memoria (stesso spazio di indirizzamento) Letture e scritture nella stessa memoria richiedono una apposita sincronizzazione.

Thread e processi in UNIX

POSIX threads L interfaccia di programmazione dei thread in UNIX e stata standardizzata da IEEE nel 1995, con lo standard POSIX Tutte le implementazioni fedeli a questo standard si chiamano POSIX threads o pthreads. La libreria definisce un set di tipi C e primitive, esportate dall header file pthread.h e implementate tramite la libreria libpthread Creare un thread richiede molte meno risorse che creare un processo. Confronto tra tempi per eseguire 50.000 fork() e 50.000 pthreads_create() (in secondi)

Thread safeness Thread-safeness: l abilita di eseguire diversi thread senza sporcare i dati condivisi Esempio: una applicazione crea 3 threads che chiamano delle funzioni di libreria 1. Queste funzioni accedono/modificano una struttura globale in memoria 2. Puo accadere che i thread cerchino di modificare allo stesso tempo l area condivisa 3. Una libreria thread-safe sincronizza l accesso di ciascun thread alla struttura condivisa

Il set di funzioni POSIX Thread management: primitive per creare, distruggere, aspettare un pthread. Mutexes: Costrutto di mutua esclusione per garantire che un solo thread possa eseguire ad un certo istante in un blocco di codice Condition variables: Oggetti di sincronizzazione/comunicazione per aspettare o segnalare il verificarsi di condizioni. Naming conventions: tutte le funzioni della libreria pthread iniziano per pthread_ Lo standard POSIX e definito solo per il linguaggio C Esempio di compilazione: gcc -pthread main.c -o main

Creazione e distruzione di un pthread Esempi hello.c, hello_arg2.c, hello_arg3.c

Aspettare un thread: pthread_join() Quando si crea un pthread, un attributo consente di definire se esso sara: joinable (puo essere aspettato con la join) detached (non puo essere aspettato) Esempio join1.c

Altre primitive pthread_self() -- equivalente di getpid() pthread_exit() -- termina il thread corrente (non il processo come exit()!) pthread_yield() -- cede lo scheduler ad un altro thread pthread_kill() -- per uccidere un pthread pthread_sigmask() -- per mascherare segnali ad un thread

Svantaggi dei pthreads La sincronizzazione deve essere fatta a mano dal programmatore Errori possibili: deadlock starvation dirty read Coi processi (es. pipe) e invece il sistema operativo a occuparsi della sincronizzazione

Riferimenti per approfondire "Pthreads Programming". B. Nichols et al. O'Reilly and Associates. "Threads Primer". B. Lewis and D. Berg. Prentice Hall "Programming With POSIX Threads". D. Butenhof. Addison Wesley www.awl.com/cseng/titles/0-201-63392-2 "Programming With Threads". S. Kleiman et al. Prentice Hall