Corso di Laboratorio di Sistemi Operativi



Documenti analoghi
Interprocess Communications - II. Franco Maria Nardini

CREAZIONE PROCESSI IN UNIX 20

IPC System V. Code di messaggi

Inter-Process Communication

Laboratorio di Sistemi Operativi Marzo-Giugno 2008 Matricole congrue 0 mod 3

Laboratorio di Sistemi Operativi

INTERPROCESS COMMUNICATION 27

Inter Process Communication. Laboratorio Software C. Brandolese

Sistemi Operativi II

INTER-PROCESS COMMUNICATION (IPC) SYSTEM (Bach: the Design of the Unix Operating System ; manuale on-line)

INTER-PROCESS COMMUNICATION (IPC) SYSTEM (Bach: the Design of the Unix Operating System ; manuale on-line) IPC. Memoria Condivisa

Corso di Programmazione Concorrente. Semafori. Valter Crescenzi

Sistemi Operativi (modulo di Informatica II) I processi

Inter-Process Communication

SISTEMI OPERATIVI 14 settembre 2015 corso A nuovo ordinamento e parte di teoria del vecchio ordinamento indirizzo SR

System call fcntl e record locking

Processi parte IV. Processi parte IV

CAPITOLO 7 - SCAMBIO DI MESSAGGI

Laboratorio di Sistemi Operativi

Record locking con la system call fcntl

Il sistema operativo LINUX Semafori. Semaforo. Sommario. Sommario. Uso delle pipe. Gestione di semafori tramite pipe. Sistemi operativi Modulo II

Sistemi Operativi: Programmazione di Sistema

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

L API socket ed i daemon

I/O su Socket TCP: read()

Gestione dei processi

Esercitazione [8] Pipe e FIFO

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

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

Cenni di programmazione distribuita in C++ Mauro Piccolo

Drivers. Introduzione Tipologie Struttura Interazione con il kernel

Introduzione al Linguaggio C

Digressione: man 2...

Sincronizzazione e comunicazione tra processi in Unix. usati per trasferire ad un processo l indicazione che un determinato evento si è verificato.

Inizializzazione, Assegnamento e Distruzione di Classi

Esercitazione finale per il corso di Sistemi Operativi (A.A. 2004/2005)

Interprocess Communications. Franco Maria Nardini

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

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

Processi in Linux. Igino Corona 20 Ottobre 2009

Introduzione alle applicazioni di rete

Esercitazione [5] Input/Output su Socket

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

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

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

dall argomento argomento della malloc()

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:

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

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

GESTIONE DEI PROCESSI

Corso di Laboratorio di Sistemi Operativi

Processi. Laboratorio Software C. Brandolese

Gli array. Gli array. Gli array. Classi di memorizzazione per array. Inizializzazione esplicita degli array. Array e puntatori

Allocazione dinamica della memoria - riepilogo

Laboratorio di Sistemi Operativi

Thread: sincronizzazione Esercitazioni del 09 Ottobre 2009

Processi UNIX. I Processi nel SO UNIX. Gerarchie di processi UNIX. Modello di processo in UNIX

Monitor. Introduzione. Struttura di un TDA Monitor

Java Virtual Machine

NOZIONI BASE PER ESERCITAZIONI

File I/O. M. R. Guarracino: File I/O 1

Posix Threads: l evoluzione dei processi UNIX

Capitolo 2 -- Silberschatz

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

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

I puntatori e l allocazione dinamica di memoria

Il problema del produttore e del consumatore. Cooperazione tra processi

Corso di Programmazione Concorrente. Memoria Condivisa. Valter Crescenzi

puntatori Lab. Calc. AA 2007/08 1

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

Calcolatori Elettronici Parte X: l'assemblatore as88

Funzioni in C. Violetta Lonati

GESTIONE DELLA COMUNICAZIONE LOCALE TRA PROCESSI IN UNIX:

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

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

MECCANISMI E POLITICHE DI PROTEZIONE 13.1

I thread nel sistema operativo LINUX: Linuxthreads

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

Pronto Esecuzione Attesa Terminazione

Segnali. I segnali in Unix sono un meccanismo semplice per inviare degli interrupt software ai processi.

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

I Socket. Laboratorio Software M. Grotto R. Farina

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

ISTITUTO TECNICO INDUSTRIALE STATALE LA GESTIONE DEI FILE DI TESTO IN C++

ESERCIZI DI PROGRAMMAZIONE C IN AMBIENTE UNIX

Introduzione al linguaggio C Gli array

Sistemi Operativi (modulo di Informatica II)

Capitolo Silberschatz

il trasferimento di file

Elementi di Architettura e Sistemi Operativi

Multithreading in Java. Fondamenti di Sistemi Informativi

Il Sistema Operativo

Progetto di RHS MicroAODV per Reti di Sensori A.A. 2007/2008

Introduzione alla programmazione in C

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

Capitolo 5: I thread

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

I THREAD O PROCESSI LEGGERI Generalità

Sottoprogrammi: astrazione procedurale

Sistemi operativi. Esempi di sistemi operativi

Transcript:

Corso di Laboratorio di Sistemi Operativi Lezione 6 Alessandro Dal Palù email: alessandro.dalpalu@unipr.it web: www.unipr.it/~dalpalu

Interazione tra Processi I processi concorrenti possono interagire per cooperare (obiettivi comuni, condivisione delle informazioni, accelerazione del calcolo, modularità) per competere (risorse condivise). Il sistema operativo deve fornire strumenti per la comunicazione e la sincronizzazione.

Interazione tra processi: Strumenti Linux In Linux ci sono diverse astrazioni per la comunicazione e la sincronizzazione: Unix pipe: Comunicazione tra 2 processi tramite stream Unix RPC: Chiamata a funzione su processo remoto attraverso la rete Unix Signals: Notifica di eventi asincroni tra processi BSD Socket: Stream tra 2 processi attraverso la rete SysV IPC (83) InterProcess Communication: Sezioni di memoria condivisa ( shmget() shmctl()... ) Sincronizzazione con semafori ( semget() semctl()... ) Pthread: Comunicazione a memoria condivisa tra piu thread Sincronizzazione con semafori ( pthread mutex *() )

Unix pipe Connettono lo standard output di un processo allo standard input di un altro. Per esempio: ls sort In C (unistd.h) si programmano con il comando int pipe(int fd[2]); Il comando crea una coppia di FD: fd[0] è usato per leggere dalla pipe e fd[1] è usato per scrivere sulla pipe. Una chiamata fork() sdoppia i processi e il processo figlio eredita i fd del padre. La syscall dup2(old fd, new fd) sovrascrive old fd con una copia di new fd, questo consente di redirezionare un flusso.

Unix pipe - Esercizio Scaricare dalla pagina del corso il file pipe.c Studiare, compilare e lanciare Modificare il file: il processo figlio manda alla pipe del testo mediante cout / printf, il testo viene prelevato da standard input tramite cin / scanf Il processo padre legge da pipe e scrive a video un carattere alla volta (usare la system call read() sul file di standard input) finché non appare il carattere. Tempo 45 minuti

InterProcess Communication http://www.lilik.it/~mirko/gapil/gapilse40.html Ogni oggetto IPC ha un identificatore (ID). Due processi che usano un oggetto IPC devono condividere una chiave, la quale serve per ottenere l ID. ftok() è usata dai processi per generare in modo (quasi) univoco un valore di chiave: key_t ftok ( char *pathname, char id ); Il valore chiave viene generato combinando inode number del primo parametro con il valore a 8 bit di id. Esempio: key_t mykey = ftok(".", a ); In questo caso, tutti i processi eseguiti dalla stessa directory, ottengono la stessa chiave.

Memoria condivisa Per ottenere l ID di un segmento di memoria condivisa: int shmget ( key_t key, size_t size, int flags); key è la chiave sotto cui si condivide il segmento, e size è la dimensione in byte del segmento IPC CREAT è un flag che specifica la creazione del segmento. Se non è utilizzato, il sistema recupera l eventuale segmento creato da qualcun altro e lo rende disponibile. Altri flags (da combinare con ) specificano i permessi di accesso (come con i files, utilizzano solo r w ) Valore di ritorno: -1 errore, altrimenti shmid (identificatore del segmento).

Controllo IPC Ogni meccanismo IPC ha una chiamata di controllo int <ipc>ctl (int ipcid, [int ipcnum], int cmd,...) Con cmd=ipc STAT si ottengono informazioni sull oggetto Con cmd=ipc SET si impongono delle informazioni. Con cmd=ipc RMID si dealloca l oggetto. Se l oggetto IPC non viene deallocato, il kernel lo considera attivo anche se tutti i processi che lo stavano usando sono terminati. E quindi possibile avere comunicazioni che si svolgano anche se i processi interlocutori sono vivi in momenti diversi. Se però un oggetto IPC rimane attivo per errore, questo impegna risorse finchè non si rimuove manualmente o si riavvia la macchina.

Memoria condivisa - Attach E possibile allocare dinamicamente segmenti di memoria condivisa (shmget) e di attaccarli (attach) all interno dello spazio di indirizzamento dei processi che ne facciano richiesta. Quando un processo ha terminato di usare il segmento, lo scollega con shmdt (detach). Buona norma: il creatore lo restituisce al sistema. La shared memory è la forma più veloce di IPC perché funziona senza intermediazione di oggetti (quali code di messaggi o pipe). int shmat (int shmid, char *shmaddr, int shmflg); Di solito shmaddr viene posto a NULL e shmflg=0. shmid è l identificatore ottenuto da shmget La chiamata restituisce l indirizzo a cui accedere al segmento

Controllo IPC Per listare gli IPC attivi nel sistema: > ipcs Per rimuovere degli IPC a mano: > ipcrm < msg sem shm > < IPC ID > Provare a listare gli IPC presenti.

Esercizio Scaricare dalla pagina del corso shmem.c Capire il funzionamento del codice e compilare. Tempo 15 minuti.

Semafori I semafori sono dei contatori usati per sincronizzare l accesso di risorse condivise da parte di processi concorrenti. Ogni semaforo UNIX è in realtà una lista di semafori a contatore. E quindi fare più operazioni su più semafori in modo atomico. semid semget ( key_t key, int numsem, int flags ); Per creare un nuovo IPC che contiene numsem semafori. Il numero di ID è semid Esempio: semid = semget ( key, 2, 0600 IPC_CREAT IPC_EXCL)

Semafori La chiamata semop() esegue una lista di operazioni, equivalenti a più UP e DOWN su più semafori Usa una una lista (sops[]) di (nsops) operazioni: int semop ( int semid, struct sembuf *sops, unsigned nsops); Ad esempio: semop ( sid, sops, 1); indica che si fa una operazione (contenuta in sops[0]).

Semafori I corrispondenti campi di sembuf per esempio sono: sops[0].sem_num = 0; // numero di semaforo a cui ci si riferisce sops[0].sem_op = -1; // operazione da eseguire (+1,0, -1) sops[0].sem_flg = 0; // flags Se sem_op è negativo, il suo valore viene sottratto dal semaforo. Ciò corrisponde ad ottenere le risorse che il semaforo controlla. Se sem_op è positivo, il suo valore viene aggiunto al semaforo. Ciò corrisponde a restituire le risorse che il semaforo controlla. Se sem_op è zero, il chiamante si mette in sleep finché il valore del semaforo è zero. In pratica si attende l utilizzazione piena del semaforo (non è nella definizione classica di semaforo) Le tradizionali WAIT e SIGNAL dei semafori sono realizzate con sem_op rispettivamente a -1 e 1.

Semafori - Controllo semctl() è usata per operazioni di controllo su un semaforo. int semctl ( int semid, int semnum, int cmd, union semun arg); semnum è il numero di semaforo dell IPC. cmd è SETVAL, GETVAL, GETNCNT o IPC RMID arg à di tipo semun, dichiarato in sys/sem.h come: /* arg for semctl system calls. */ union semun { int val; /* value for SETVAL */ struct semid_ds *buf; /* buffer for IPC_STAT & IPC_SET */ ushort *array; /* array for GETALL & SETALL */ struct seminfo * buf; /* buffer for IPC_INFO */ void * pad; };

Esercizio Scaricare dalla pagina del corso sem.c Capire il funzionamento del codice e compilare. Tempo 15 min.

Esercizio lungo Sulla base di sem.c implementare il problema dei 5 filosofi. http://en.wikipedia.org/wiki/dining_philosophers_problem Si creino 5 processi che rappresentano ciascun filosofo. Gestire in modo appropriato i semafori in modo da farli mangiare senza starvation. Usare delle stampe a video per mostrare il progresso.