Laboratorio di Sistemi Operativi

Documenti analoghi
Corso di Laboratorio di Sistemi Operativi

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

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

Processi parte IV. Processi parte IV

Inter-Process Communication

Esame Laboratorio di Sistemi Operativi Cognome Nome Mat.

INTERPROCESS COMMUNICATION 27

Sistemi Operativi II

System call fcntl e record locking

Inter-Process Communication

System Call per la gestione dei semafori in Linux. Semafori: modello concettuale. Creazione ed inizializzazione di un semaforo

IPC System V. Code di messaggi

uid_t getuid(void); //real-user-id del chiamante getegid(void); //effective-user-id del chiamante gid_t getgid(void); //real-group-id del chiamante

Corso di Programmazione Concorrente Produttori / Consumatori. Valter Crescenzi

InterProcessing Communication

IPC. System V ha introdotto per primo in Unix alcuni meccanismi di interprocess communication: message queues (code di brevi messaggi) semafori

Interprocess Communications - II. Franco Maria Nardini

Esame di Programmazione Concorrente - appello del 21 giugno 2006

Laboratorio in C su Processi e POSIX IPC (Inter Process Communications) Dalla nona lezione di laboratorio in avanti

Capitolo 5 -- Stevens

Soluzioni ai problemi di Mutua Esclusione Primitive di sincronizzazione. Soluzioni ai problemi di Mutua EsclusionePrimitive di sincronizzazione

Laboratorio di Sistemi Operativi

Passare argomenti al programma

CREAZIONE PROCESSI IN UNIX 20

Corso di Sistemi Operativi Programmazione di Sistema e Concorrente

Argomenti della lezione. Messaggi. Formato di un messaggio. Corso di Sistemi Operativi Programmazione di Sistema e Concorrente

Esercitazione 11. Esercitazione di riepilogo

Esercizio 1. Tavola ordinata in memoria centrale

PROVA SCRITTA 23 MARZO 2010

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

Linguaggio C: i file

Elementi di Informatica A. A. 2016/2017

il tipo di parallelismo dipende dal grado di cooperazione

Il tipo Text. N. Del Buono

ACSO Programmazione di Sistema e Concorrente

Laboratorio Progettazione Web Le funzioni in PHP. Angelica Lo Duca IIT-CNR 2012/2013

Processi - II. Franco Maria Nardini

System Calls per la Gestione dei Processi

I vettori in C. Vettori. Definizione di vettori in C. int dato[10] ; int. Numero di elementi. Tipo di dato base. Nome del vettore.

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.

Espressione composta da: Operatori Operandi (costanti, variabili, )

Puntatori in C Lucidi della Pof.ssa Pazienza

Tipi di dati strutturati e Linguaggio C. Record o strutture Il costruttore struct in C

Introduzione al Multithreading

Definizione di classi. Walter Didimo

Esercizi sulla macchina assembler, strutturazione a livelli, spazio di indirizzamento

Scuola di Calcolo Scientifico con MATLAB (SCSM) 2017 Palermo 31 Luglio - 4 Agosto 2017

concorrente in Unix Giuseppe Odasso 2 marzo 1995

Rappresentazione degli algoritmi

Ogni variabile in C è una astrazione di una cella di memoria a cui corrisponde un nome, un contenuto e un indirizzo.

Linguaggio C: puntatori

APPELLO SCRITTO DI PROGRAMMAZIONE 1 CORSO DI LAUREA IN MATEMATICA UNIVERSITÀ DEGLI STUDI DI MILANO VI.2015

Assembly (3): le procedure

Sistemi Operativi I Corso di Laurea in Ingegneria Informatica Facolta di Ingegneria, Universita La Sapienza Docente: Francesco Quaglia

Signalling (IPC) Signalling (segnalazione)

Corso di Sistemi Operativi

19 - Eccezioni. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo

Funzioni, Stack e Visibilità delle Variabili in C

Array. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 11. A. Miola Dicembre 2007

Sistemi operativi Modulo II I semafori 2 Select

Corso di Laboratorio di Sistemi Operativi

POLITECNICO DI MILANO Dipartimento di Elettronica e Informazione Corso di Laboratorio Software - Esercitazioni. Esercitazioni

Utilizza i tipi di dati comuni a tutto il framework.net Accesso nativo ai tipi.net (C# è nato con.net) Concetti fondamentali:

File binari e file di testo

Semafori. Semafori classici con i thread POSIX 2

Array e Oggetti. Corso di Laurea Ingegneria Informatica Fondamenti di Informatica 1. Dispensa 12. A. Miola Dicembre 2006

Uso di classi e oggetti. Prof. Francesco Acarino IIS Altiero Spinelli Via Leopardi 132 Sesto San Giovanni

Java: Definire Classi e Creare Oggetti

Scheda 2 per Mille Si.Cia

Programmazione II Compitino (Vers. B)

Elementi lessicali. Lezione 4. La parole chiave. Elementi lessicali. Elementi lessicali e espressioni logiche. Linguaggi di Programmazione I

CAPITOLO 17 PROBLEMI DEL PRODUTTORE/CONSUMATORE v1

La struttura dati CODA

CAPITOLO 22 PROBLEMA DEL PRODUTTORE/CONSUMATORE

Gestione dinamica della memoria

GESTIONE INVENTARIO e RETTIFICHE INVENTARIALI

Lezione 8 Struct e qsort

Esercitazione sui grafi di precedenza, fork/join, cobegin/coend.

Università degli Studi di Cassino Corso di Fondamenti di Informatica Tipi strutturati: Array. Anno Accademico 2010/2011 Francesco Tortorella

JavaScript Core Language. Prof. Francesco Accarino IIS Atiero Spinelli Sesto San Giovanni via leopardi 132

Corso di Fondamenti di Informatica Tipi strutturati: Strutture typedef Anno Accademico 2008/2009 Francesco Tortorella

Basi di Dati e Sistemi Informativi. Organizzazione fisica dei dati. Corso di Laurea in Ing. Informatica Ing. Gestionale Magistrale

Data e Ora in Java. Calendar e GregorianCalendar Controllo dell'input di data e ora Comparazione di date e ore

Implementazione dell albero binario in linguaggio C++

INTRODUZIONE ALLE BASI DATI RELAZIONALI

LABORATORIO di Reti di Calcolatori

Stampa ed eliminazione dei processi in attesa

Progetto II: Il linguaggio C e le chiamate di sistema sui processi

Capitolo 10 - Strutture

SANITA DIGITALE. Presa in carico della ricetta dematerializzata specialistica. Guida Operativa sistema ERODE. Decreto Ministeriale 2 Novembre 2011

UNIX - Lettura G Comunicazione tra processi

Fondamenti di Informatica e Laboratorio T-AB T-15 Strutture dati

Organizzazione Fisica dei Dati (Parte II)

4. Accesso diretto per gli archivi con record a lunghezza costante

Laboratorio di Sistemi Operativi Cognome Nome Mat.

Programmazione Orientata agli Oggetti. Emilio Di Giacomo e Walter Didimo

LinuxThreads: I thread nel sistema operativo LINUX: Linuxthreads. LinuxThreads. LinuxThreads

Modelli di programmazione parallela

Le strutture. Una struttura C è una collezione di variabili di uno o più tipi, raggruppate sotto un nome comune.

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

Transcript:

primavera 2009 System V IPC sono differenti dalle altre forme di IPC sono contatori usati per controllare l accesso a risorse condivise da processi diversi il protocollo per accedere alla risorsa è il seguente 1) testare il semaforo 2) se > 0, allora si può usare la risorsa (e viene decrementato il semaforo) 3) se = 0, processo va in sleep finché il semaforo non ridiventa > 0, a quel punto wake up e goto step 1 quando ha terminato con la risorsa, incrementa il semaforo semaforo a 0 significa che si sta utilizzando il 100% della risorsa È importante notare che per implementare correttamente un semaforo l operazione di verifica del valore del semaforo ed il decremento devono costituire una operazione atomica Per questa ragione i sono implementati all interno del kernel forma semplice: semaforo binario controlla un unica risorsa ed il suo valore è inizializzato a 1 Es. stampante capace di gestire 1 sola stampa alla volta forma più complessa: inizializzato ad un valore positivo indicante il numero di risorse che sono a disposizione per essere condivise Es. stampante capace di gestire 10 stampe alla volta

forma nel System V: insieme di...bisogna specificarne il numero Es. 5 stampanti ciascuna capace di gestire 10 stampe alla volta Strutture associate ai. sem_base punta ad un array di sem_nsems elementi, dove ciascuno di tali elementi è una struttura sem Limiti di sistema Da qui in avanti utilizzeremo: > semaforo per riferirci all insieme > ni per riferirci agli elementi dell insieme

int semget(key_t key, int nsems, int flag ); Restituisce: ID del semaforo se OK, -1 in caso di errore semget Quando il semaforo è creato viene inizializzata la struttura semid_ds è inizializzata ipc_perm con i permessi dati nel flag sem_otime è settato a 0 sem_ctime è settato all istante di creazione sem_nsems è settato a nsems (# ni nell insieme) Es: semid = semget (key, 1, IPC_CREAT IPC_EXCL 0666); crea un insieme con 1 solo no Per riferirsi ad un semaforo esistente specificare nsems=0 Es: semid = semget (key, 0, 0666); Funzione semctl int semctl(int semid, int semnum, int cmd, union semun arg); Serve ad eseguire operazioni di vario tipo con i argomento cmd cmd rappresenta il comando da eseguire sull insieme di valori del semaforo identificato da semid IPC_STAT = recupera la struttura semid_ds per l insieme semid (la conserva in arg.buf) IPC_SET = setta alcuni dei campi della struttura ipc_perm in semid_ds (la prende da arg.buf) SETVAL = setta il campo semval nella struttura sem al valore dell argomento arg.val per il no specificato in semnum (0 semnum < sem_nsems) GETALL = recupera i valori del semaforo presenti nell insieme (li conserva in arg.array) SETALL = setta i valori del semaforo (quelli dell insieme) a quelli contenuti in arg.array IPC_RMID = rimuove il semaforo (l insieme)

union semun union semun { int val; /* for SETVAL */ struct semid_ds *buf /* for IPC_STAT e IPC_SET */ ushort *array; /* per GETALL e SETALL */ } il campo val si usa con SETVAL per settare il valore del no semnum specificato nell insieme con identificatore semid; in realtà i suoi valori possono essere val 1 ad indicare che la risorsa è disponibile nella quantità specificata (semaforo lockable) val = 0 ad indicare è da ritenersi già utilizzata al 100% (semaforo unlockable) esempio d uso semctl(semid, 0, IPC_RMID, 0); rimuove il semaforo semctl (semid, 0, SETVAL, 1) ; setta il valore del (primo) no ad 1 i =semctl (semid, 2, GETVAL, ignorato) i contiene il valore del terzo no il quarto argomento è ignorato serve a controllare il valore del no Funzione semop Struttura sembuf int semop(int semid, struct sembuf semoparray[ ], size_t nops ); Descrizione: esegue automaticamente un array di operazioni, date in semoparray, sul semaforo identificato da semid Restituisce: 0 se OK, -1 in caso di errore sem_num : numero del no sem_op : se < 0 : richiesta. Il processo dorme (se IPC_NOWAIT non è specificato) finché non è disponibile la risorsa (in quantità pari a sem_op ) e poi viene sottratto il valore di sem_op da semval nella struttura sem se > 0 : rilascio. Il valore viene sommato a semval se = 0 : si vuole aspettare (se IPC_NOWAIT non è specificato) fino a che il valore del semaforo semval =0

esempio d uso (1) struct sembuf sem_lock={0, -1, 0}; struct sembuf sem_unlock={0, 1, 0}; semid=semget(ipc_private,1,ipc_creat 0666); semctl(semid,0,setval, 1); // inizializza i valori di semid semop(semid,&sem_lock,1); printf("sem loccato\n"); // utilizzo della risorsa gestita dall unico no nell insieme semop(semid,&sem_unlock,1); printf("sem unloccato \n"); esempio d uso (1 più) struct sembuf sem_lock; sem_lock.sem_num=0; sem_lock.sem_op=-1; sem_lock.sem_flg=0; struct sembuf sem_unlock; sem_unlock.sem_num=0; sem_unlock.sem_op=1; sem_unlock.sem_flg=0; semid=semget(ipc_private,1,ipc_creat 0666); semctl(semid,0,setval, 1); // inizializza i valori di semid semop(semid,&sem_lock,1); printf("sem loccato\n"); // utilizzo della risorsa gestita dall unico no nell insieme semop(semid,&sem_unlock,1); printf("sem unloccato \n"); esempio d uso (2) struct sembuf sem_lock_0={0, -1, 0}; struct sembuf sem_unlock_0={0, 1, 0}; struct sembuf sem_lock_1={1, -1, 0}; struct sembuf sem_unlock_1={1, 1, 0}; semid=semget(ipc_private,2,ipc_creat 0666); semctl(semid,0,setval, 2); // inizializza i valori di semid semctl(semid,1,setval, 1); semop(semid,&sem_lock_0,1); printf("sem 0 loccato\n"); // utilizzo della risorsa gestita dal no numerato 0 nell insieme semop(semid,&sem_unlock_0,1); printf("sem 0 unloccato \n");