L API socket ed i daemon



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

Introduzione alle applicazioni di rete

Pronto Esecuzione Attesa Terminazione

SISTEMI OPERATIVI THREAD. Giorgio Giacinto Sistemi Opera=vi

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

Posix Threads: l evoluzione dei processi UNIX

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

Sistemi Operativi GESTIONE DELLA MEMORIA SECONDARIA. D. Talia - UNICAL. Sistemi Operativi 11.1

Sistemi Operativi. Memoria Secondaria GESTIONE DELLA MEMORIA SECONDARIA. Struttura del disco. Scheduling del disco. Gestione del disco

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

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

Gestione delle transazioni. Database Management Systems 3ed, R. Ramakrishnan and J. Gehrke 1

Capitolo 5: I thread

Programmazione dei socket con TCP #2

Cenni di programmazione distribuita in C++ Mauro Piccolo

Esercizio 2. Client e server comunicano attraverso socket TCP

MODELLO CLIENT/SERVER. Gianluca Daino Dipartimento di Ingegneria dell Informazione Università degli Studi di Siena

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

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

Protezione. Protezione. Protezione. Obiettivi della protezione

Architettura di un sistema operativo

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

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

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

2. I THREAD. 2.1 Introduzione

Approccio stratificato

Sommario. Definizione di informatica. Definizione di un calcolatore come esecutore. Gli algoritmi.

I THREAD O PROCESSI LEGGERI Generalità

I Thread. Laboratorio Software M. Grotto R. Farina

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

Esercitazione [8] Pipe e FIFO

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

Sistemi Operativi (modulo di Informatica II)

Corso di Sistemi di Elaborazione delle informazioni

Sophos Computer Security Scan Guida di avvio

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

Mac Application Manager 1.3 (SOLO PER TIGER)

Capitolo 3: Strutture dei sistemi operativi

Gestione della memoria centrale

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

Java Virtual Machine

SISTEMI OPERATIVI DISTRIBUITI

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

Processi in Linux. Igino Corona 20 Ottobre 2009

Esercizi su. Funzioni

STRUTTURE DEI SISTEMI DI CALCOLO

La Gestione delle risorse Renato Agati

Lezione 9. Applicazioni tradizionali

UDP. Livello di Trasporto. Demultiplexing dei Messaggi. Esempio di Demultiplexing

Approfondimenti. Contenuti

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

Esercitazioni - 2. Corso Reti ed Applicazioni Mauro Campanella Como 2003

Agent, porte, connettività e reti L agent di Kaseya utilizza la porta 5721 per comunicare con il server, ma che tipo di porta è?...

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

Nelle reti di calcolatori, le porte (traduzione impropria del termine. port inglese, che in realtà significa porto) sono lo strumento

Gestione Risorse Umane Web

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Record locking con la system call fcntl

Sistemi Operativi (modulo di Informatica II) I processi

Indice GAMMA. Guida utente

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

I/O su Socket TCP: read()

Istruzioni di installazione di IBM SPSS Modeler Text Analytics (licenza per sito)

Il problema del produttore e del consumatore. Cooperazione tra processi

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

Il Software. Il software del PC. Il BIOS

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

Interprocess Communications - II. Franco Maria Nardini

Il client deve stampare tutti gli eventuali errori che si possono verificare durante l esecuzione.

Link e permessi. Corso di Laurea Triennale in Ingegneria delle TLC e dell Automazione. Corso di Sistemi Operativi A. A

Corso di Reti di Calcolatori T

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

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

I Socket. Laboratorio Software M. Grotto R. Farina

2.5. L'indirizzo IP identifica il computer di origine, il numero di porta invece identifica il processo di origine.

Coordinazione Distribuita

Files, File I/O, File Sharing. Franco Maria Nardini

Sistemi Operativi GESTIONE DELLA MEMORIA CENTRALE. D. Talia - UNICAL. Sistemi Operativi 6.1

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

Creare una Rete Locale Lezione n. 1

Sicurezza dei dati in EGRID

Deadlock e Starvation

Manuale Terminal Manager 2.0

Funzioni. Il modello console. Interfaccia in modalità console

11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0

SISTEMI OPERATIVI. Deadlock (blocco critico) Domande di verifica. Luca Orrù Centro Multimediale Montiferru 04/06/2007

Global Security Solutions

Sage Start Archivio file Guida. Dalla versione

Introduzione al Linguaggio C

Stampe in rete Implementazione corretta

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

Domande frequenti su Phoenix FailSafe

Transazioni. Capitolo 13. Scrittura immediata e scrittura differita. Concorrenza in un DBMS. Una transazione. Gestione delle transazioni

La sicurezza nel Web

Inter Process Communication. Laboratorio Software C. Brandolese

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

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:

Scuola Superiore Sant Anna. Progetto parte Unix. AA : Distributed File Repository

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

Sistemi Operativi. Scheduling della CPU SCHEDULING DELLA CPU. Concetti di Base Criteri di Scheduling Algoritmi di Scheduling

Transcript:

L API socket ed i daemon Massimo Bernaschi Istituto per le Applicazioni del Calcolo Mauro Picone Consiglio Nazionale delle Ricerche Viale del Policlinico, 137-00161 Rome - Italy http://www.iac.cnr.it/ e-mail: massimo@iac.rm.cnr.it

Alternative nel disegno di applicazioni client-server Il più semplice server concorrente invoca fork per far partire un processo figlio per ogni client. Una prima alternativa è un singolo server TCP che utilizza la select per gestire un generico numero di client. È possibile modificare il server concorrente per creare un thread per client invece di un processo per client. la fork è molto onerosa. Sebbene la maggior parte delle implementazioni attuali usi il meccanismo di copy-on-write per le pagine di memoria, tutti i descrittori vengono duplicati nel processo figlio insieme a molte altre informazioni. Una qualche forma di IPC è richiesta per passare informazioni tra il processo padre ed il figlio dopo la fork. 2

I threads possono attenuare l impatto di questo tipo di problemi. La creazione di thread è da 10 a 100 volte più semplice della creazione di processi. 3

TCP Preforked server 4

Diversi possibili alternative: TCP Preforked server Nessuna forma di locking attorno all accept. Soffre dell effetto thundering herd perché tutti gli N processi figli sono risvegliati anche se solo uno ottiene la connessione. Quando i processi figli sono bloccati nella chiamata nell accept, l algoritmo di scheduling del kernel distribuisce le connessioni uniformemente tra tutti i processi figli. Quando più processi sono bloccati sullo stesso descrittore, è consigliabile bloccarli in una funzione come l accept, invece di bloccarli nella select che, a causa del tipo di struttura dati utilizzata, richiede di risvegliare tutti i processi in attesa su un certo descrittore. 5

File locking attorno all accept. Se il Sistema Operativo non permette di avere processi multipli che chiamano l accept sullo stesso descrittore in stato listening, non appena il client inizia la connessione al server, una chiamata all accept in uno dei processi figli ritorna EPROTO. (era quello che succedeva nelle vecchie versioni di Solaris). Una possibile soluzione è che l applicazione utilizzi un meccanismo di lock attorno all accept, in modo che solo un processo per volta sia bloccato nell accept. Per il locking si può utilizzare il meccanismo di file locking Posix. 6

Thread locking attorno all accept. Come già detto, si può utilizzare il thread locking non solo tra threads all interno di un dato processo, ma anche per il locking tra processi distinti. La variabile mutex deve, ovviamente, essere in una zona di memoria condivisa tra tutti i thread. Alla libreria thread sotto Unix/Linux deve essere specificato che il mutex è condiviso tra processi distinti (deve supportare l attributo PTHREAD PROCESS SHARED). Un possibile meccanismo per condividere la memoria è l uso del file mapping (funzione mmap) del device /dev/zero. Con Windows si può accedere il Mutex tra processi distinti con l apposita primitiva. 7

Passaggio del descrittore. Un alternativa è avere solo il processo padre che chiama l accept e quindi passa il socket connesso al processo figlio. Questa tecnica richiede una qualche forma di passaggio di descrittori tra processi distinti. Il processo padre tiene conto di quali processi figli sono già impegnati (la selezione è esplicita). 8

TCP server prethreaded accept per thread con mutex locking. Ovviamente tra thread non c è ragione di usare un meccanismo basato su file locking per controllare l accept. Sui kernel derivati da BSD non è necessario effettuare locking attorno all accept. Attenzione! Questa soluzione può essere più lenta di quella basata su mutex locking. 9

accept nel thread principale Ovviamente non è necessario passare un descrittore da un thread ad un altro dato che i thread condividono tutti i descrittori. Il thread ricevente ha solo bisogno di sapere quale è il descrittore che deve utilizzare. Attenzione! Questa soluzione, apparentemente semplice, può essere più lenta di quella in cui ogni thread invoca l accept. 10

Riassunto dell alternative 1. server iterativo; 2. server concorrente, una fork per client; 3. prefork in cui ogni figlio invoca l accept; 4. prefork con file locking per proteggere l accept; 5. prefork con mutex per proteggere accept; 6. prefork con passaggio del descrittore del socket al figlio; 7. server concorrente, crea un thread per client; 8. prethreaded con mutex per proteggere l accept; 9. prethreaded con thread principale che invoca l accept. 11

Riassunto Creare un insieme di processi figli o un insieme di thread riduce l overhead di processamento di una richiesta. Il numero di processi figli (o thread) dovrebbe essere gestito dinamicamente. Alcune implementazioni permettono a più processi figli o thread di invocare accept mentre in altre implementazioni è richiesto un lock per l invocazione dell accept. In genere è più semplice avere tutti i processi figli o i thread che invocano accept ed è più veloce che avere un singolo thread che invoca accept e quindi passa il descrittore. È preferibile avere tutti i processi figli o i thread bloccati in una chiamata all accept piuttosto che bloccati in una select. 12

Come daemonizare un processo fork: il processo padre termina ed il figlio prosegue. setsid: è la funzione Posix che crea una nuova sessione. Il processo diventa il leader della nuova sessione del nuovo process group. Il processo non ha terminale di controllo. 13

Ignorare SIGHUP e invocare ancora fork. Il primo processo figlio termina lasciano il secondo in esecuzione. In questo modo il daemon non può acquisire automaticamente un controlling terminal nel caso in cui aprisse un terminale (come dispositivo). È necessario ignorare SIGHUP altrimenti, quando il session leader (cioè il primo processo figlio) termina, a tutti i processi delle sessione viene inviato il segnale SIGHUP. 14

si può utilizzare syslog invece di fprintf per riportare eventuali errori. Cambiare la working directory ed effettuare il reset della file mode creation mask. se il daemon crea propri file, i permessi ereditati non impattano sui permessi dei nuovi file. Chiudere qualunque descrittore aperto. Ricordiamo che non esiste una primitiva UNIX standard per sapere quale è il descrittore più grande (come numero) in uso. Alcuni daemon aprono /dev/null in lettura e scrittura. In questo modo si garantisce che esista uno standard input e ed uno standard output. Questo impedisce il fallimento di funzioni di libreria invocate dal daemon che possono tentare di leggere dallo standard input 15

oppure di scrivere su standard output o standard error. Normalmente SIGHUP (o altri segnali come SIGINT o SIGWINCH che il kernel non dovrebbe mai inviare al daemon) sono usati per informare il daemon che il file di configurazione è cambiato. 16