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

Documenti analoghi
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

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

Corso di Laboratorio di Sistemi Operativi

Laboratorio di Sistemi Operativi

Tipi di POSIX Semaphores

Semafori. Semafori classici con i thread POSIX 2

Stringhe. Prof. Lorenzo Porcelli

Inter-Process Communication

System Calls per la Gestione dei Processi

CREAZIONE PROCESSI IN UNIX 20

SISTEMI OPERATIVI. Sincronizzazione in Java (Semafori e barriere) Patrizia Scandurra (MODULO DI INFORMATICA II) LABORATORIO

SEMAFORI SEMAFORI. Sul semaforo sono ammesse solo due operazioni (primitive)

Introduzione alle classi 2

INTERPROCESS COMMUNICATION 27

CAPITOLO 22 PROBLEMA DEL PRODUTTORE/CONSUMATORE

Diagramma a blocchi per la selezione, in un mazzo di chiavi, di quella che apre un lucchetto

Programmazione, 5 a lezione

Linguaggio C - le strutture di controllo: sequenza, selezione, iterazione

CAPITOLO 17 PROBLEMI DEL PRODUTTORE/CONSUMATORE v1

Chiamata di procedura remota

Capitolo 6 - Array. Copyright by Deitel & Associates, Inc. and Pearson Education Inc. All Rights Reserved.

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

Monitor. Introduzione. Struttura di un TDA Monitor

Esercizi. La funzione swapint() primo tentativo

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

Gestione dinamica della memoria

System call fcntl e record locking

Informatica 1 Tipi e dichiarazioni in C++ C++ - Tipi e dichiarazioni 1

Fondamenti di Informatica

strutturare dati e codice

Cosa sono i semafori?

Java Threads. esempi

Maps. a.k.a, associative array, map, or dictionary

void concatenastringhe (char st1[], char st2[], char stout[]) { int n=0,s=0; // dichiarazione variabili con inizializzazioni

Corso di Programmazione Concorrente Produttori / Consumatori. Valter Crescenzi

Laboratorio di Sistemi Operativi

I processi: concetti di base, context switch e scheduling

Metodi di una Collection

Sincronizzazione. I semafori Stefano Quer Dipartimento di Automatica e Informatica Politecnico di Torino

Le strutture di controllo

Laboratorio Arduino seconda lezione Pietro Bonora - L.S. Sabin - Bologna

In generale può essere utile che i due processi eseguano del codice diverso

Sushi bar problem. The Little Book of Semaphores by Allen B. Downey

Corso di Laboratorio di Sistemi Operativi

Ricerca e ordinamento su array di oggetti. Corso di Programmazione 2 Esercitazione 5

I Processi nel Sistema Operativo Unix. Gerarchie di processi Unix. Stati di un processo Unix. Stati di un processo Unix.

Sistemi Operativi. Bruschi Martignoni Monga. Send/Receive mini send Enqueue e dequeue mini receive mini notify. System call in MINIX

Puntatori, array, incrementi Array come parametri Array di puntatori. Programmazione 1. Lezione 12. Vincenzo Marra.

Realizzazione di Politiche di Gestione delle Risorse: i Semafori Privati

Impianto per il comando automatico di un garage

System call per la gestione di processi

Esercitazione 11. Liste semplici

Introduzione al Linguaggio C

La Struttura Dati Pila

ANALISI DEI PERICOLI Hazard Analysis

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

Se vogliamo cambiarlo: i dati vengono sovrascritti. 300 White Jones (vecchio valore) 300 Worthington 0.00

Signalling (IPC) Signalling (segnalazione)

Istruzioni semplici e strutturate

Crea un nuovo processo. Al processo padre ritorna il PID del figlio. Al processo figlio ritorna 0

Monitor. Le procedure entry sono le sole operazioni che possono essere utilizzate dai processi per accedere alle variabili comuni.

Laboratorio di Programmazione in Rete

Ammissibilità di co.co.co. e AdR in H2020. Laura Fulci Dirigente Area Ricerca Politecnico di Torino

Meccanismi di sincronizzazione: Semafori e Monitor

C: panoramica. Violetta Lonati

Sistemi Operativi 1. Mattia Monga. a.a. 2008/09. Dip. di Informatica e Comunicazione Università degli Studi di Milano, Italia

Esercitazioni di Fondamenti Informatica - Modulo A 1

Estendere Lean e Operational Excellence a tutta la Supply Chain

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

Introduzione. Meccanismi di sincronizzazione: Semafori e Monitor. Semafori - Definizione. Semafori - Descrizione informale

Sistemi operativi Modulo II I semafori 2 Select

Contenuti: 1. Moduli LINUX

Sistemi Operativi. Marzo-Giugno 2011 matricole congrue 0 mod 3. Controllo dei processi - I

SRT064 BTH SRT051 BTH SRT052 BTH

Gruppo di lavoro 1 Metadati e RNDT. Incontro del 22 luglio 2014

A.S. 2011/2012. Circuito semaforico da incrocio. Corso di Elettronica. Dipartimento di Elettrotecnica

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

Sistemi Operativi. Lezione 7 Comunicazione tra processi

Sistemi operativi - Concetti ed esempi -Settima edizione

perror: individuare l errore quando una system call restituisce -1

Monitor [Hoare 74] Costrutto sintattico che associa un insieme di procedure/funzioni (entry) ad una struttura dati comune a più processi.

Monitor [Hoare 74] Uso del monitor

Le Strutture di controllo Del Linguaggio C. Prof. Francesco Accarino IIS Altiero Spinelli Sesto San Giovanni

GESTIONE DEI TEMPI CON IL TIMER1 DEL PIC16F876

Il semaforo. Strumento linguistico di basso livello per risolvere problemi di sincronizzazione.

Informatica 3. LEZIONE 5: Tipi di dati

Assembly (3): le procedure

Attraversamento di un albero (binario)

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

Scheda elettrica per sistema di miscelazione a punto fisso

Scheda Allarmi Alarm Board MiniHi

SISTEMI OPERATIVI E LABORATORIO (Indirizzo Sistemi e Reti) 21 dicembre 2004

Capitolo 7 I puntatori in C

LE MACRO DI EXCEL PER TUTTE PDF

concorrente in Unix Giuseppe Odasso 2 marzo 1995

Lezione 9: Puntatori a funzioni. Tipi enumerativi e orientati ai bit

R.M.Dorizzi, Strumenti per interpretare gli esami di laboratorio? Forlì, 9 ottobre 2012

A.A. 2006/2007 Laurea di Ingegneria Informatica. Fondamenti di C++ Horstmann Capitolo 3: Oggetti Revisione Prof. M. Angelaccio

Programmazione M-Z Ingegneria e Scienze Informatiche - Cesena A.A Elaborato 9

Transcript:

System Call per la gestione dei semafori in Linux Domenico Cotroneo Dipartimento di Informatica e Sistemistica Semafori: modello concettuale Processore D C B (sq)coda proc.sospesi s.count=1 semaforo A (sr) Coda proc. pronti void wait(sempahore s) { s.count--; if (s.count<0){ sq.insert(process); suspend(process); void signal(sempahore s) { s.count++; if (s.count<=0){ sq.remove(process); suspend(process); Creazione ed inizializzazione di un semaforo key_t chiave_sem=ipc_private; //richiesta di di2 semafori ed ed inizializzazione sem=semget(chiave_sem,2,ipc_creat 0664); //Inizializzazione dei due semafori semctl(sem,0,setval,val1); semctl(sem,1,setval,val2);

semop - semaphore operations int intsemop(int semid, semid, struct structsembuf*sops, unsigned nsops); nsops); Un semaforo è una struttura dati che comprende tra i suoi campi i seguenti: unsigned short semval; /* semaphore value */ unsigned short semzcnt; /* # waiting for zero */ unsigned short semncnt; /* # waiting for increase */ pid_t sempid; /* process that did last op */ è su questi che agisce la primitiva semop (in particolare sulla struttura indicata da semid) semop - semaphore operations Ognuno degli nsops elementi, riferiti dal puntatore sops, specifica un operazione da compiere sul semaforo. L operazione è descritta da una struttura, struct sembuf, la quale include i seguenti campi: unsigned short sem_num; /* semaphore number */ short sem_op; /* semaphore operation */ short sem_flg; /* operation flags */ Due sono i valori che puo assumere sem_flg : IPC_NOWAIT e SEM_UNDO. Se si specifica SEM_UNDO, l operazione sarà annullata nel momento in cui il processo che la ha eseguita termina. semop - semaphore operations L insieme delle operazioni specificate da sops sono eseguite in maniera atomica. Ogni operazione è eseguita sul semaforo individuato da sem_num (in altre parole sem_num indica su quale semaforo, tra quelli presenti nell array, dovrà essere eseguita l operazione). Il primo semaforo dell array ha indice 0. I valori che può assumere il campo sem_op specificano tre possibili tipologie di operazioni che si possono compiere sul semaforo: sem_op < 0 : wait sem_op==0 : wait_for_zero sem_op > 0 : signal

sem_op > 0: signal Se sem_op è un intero positivo, l operazione consiste nell addizionare il valore di sem_op al valore del semaforo (semval). semval+=sem_op Inoltre, nel caso in cui sia specificato il flag SEM_UNDO, il sistema aggiornerà il contatore undo count (semadj) del processo per il semaforo in questione. E utile osservare che quest ultima operazione non verrà mai bloccata. Al fine di eseguire l operazione di signal, il processo chiamante dovrà sicuramente avere i permessi necessari alla modifica dei valori del semaforo. sem_op == 0: wait_for_zero Se sem_op ha valore nullo, l operazione specificata ( "wait-for-zero ) è articolata nei seguenti passi: 1. se il valore semval è zero, l operazione procede immediatamente (il processo non si sospende) 2. Altrimenti (semval 0) si procederà come di seguito i. se è specificato il flag IPC_NOWAIT in sem_flg, la system call fallisce restituendo il codice di errore EAGAIN a mezzo della variabile errno (nessuna delle operazioni specificate in sops sarà eseguita). ii. altrimenti la variabile semzcnt (che indica il numero di processi sospesi nell attesa che il valore del semaforo diventi nullo) è incrementata di uno, forzando il processo a sopsendersi finché una delle seguenti condizioni si verificherà: a) semval diventa0, (allorailvaloredisemzcnt è decrementato). b) Il semaforo è rimosso: la system call fallisce ( errno = EIDRM). Al fine di eseguire l operazione di wai_for_zero, il processo chiamante dovrà almeno avere i permessi in lettura dei valori del semaforo. sem_op <0 0: wait (1/2) Se sem_op ha valore negativo, l operazione si articolerà come di seguito: 1. se (semval sem_op ) l operazione procede immediatamente e se specificato il SEM_UNDO flag il sistema aggiornerà il contatore undo count (semadj) del processo per il semaforo in questione. 2. se (semval < sem_op ) 1. se specificato il flag IPC_NOWAIT la system call fallisce (errno = EAGAIN ) 2. altrimenti il valore del campo semcnt (il contatore dei processi sospesi nell attesa che il valore del semfaro venga incrementato) viene incrementato di 1. Il processo si sospende Al fine di eseguire l operazione di wait, il processo chiamante dovrà sicuramente avere i permessi necessari alla modifica dei valori del semaforo.

sem_op <0 0: wait (2/2) Nel caso 2.2 il processo sarà sospeso nell attesa del verificarsi di una delle seguenti condizioni: 1 ) (semval sem_op ), quando questa condizione sarà verificata il valore di semncnt sarà decrementato e il valore del semaforo modificato come segue semval-= sem_op Se specificato SEM_UNDO il sistema aggiornerà il contatore undo count (semadj) del processo per il semaforo in questione. 2) Il semaforo è rimosso: la system call fallisce ( errno = EIDRM). Approfondimenti: BUGS When a process terminates, its set of associated semadj structures is used to undo the effect of all of the semaphore operations it performed with the SEM_UNDO flag. This raises a difficulty: if one (or more) of these semaphore adjustments would result in an attempt to decrease a semaphore's value below zero, what should an implementation do? One possible approach would be to block until all the semaphore adjustments could be performed. This is however undesirable since it could force process termination to block for arbitrarily long periods. Another possibility is that such semaphore adjustments could be ignored altogether (somewhat analogously to failing when IPC_NOWAIT is specified for a semaphore operation). Linux adopts a third approach: decreasing the semaphore value as far as possible (i.e., to zero) and allowing process termination to proceed immediately. Implementazione di una wait void voidwait_sem (int (intid_sem, int intnumsem) {{ struct structsembuf sembufsem_buf; sem_buf.sem_num=numsem; sem_buf.sem_flg=0; sem_buf.sem_op=-1; semop(id_sem,&sem_buf,1); //semaforo rosso rosso

Implementazione di una signal void voidsignal_sem (int (intid_sem,int numsem) {{ struct structsembuf sembufsem_buf; sem_buf.sem_num=numsem; sem_buf.sem_flg=0; sem_buf.sem_op=1; semop(id_sem,&sem_buf,1); //semaforo verde verde