Estratto del documento

System call per la gestione dei semafori in Linux

Concetto di semafori

Domenico Cotroneo

Dipartimento di Informatica e Sistemistica

Semafori: modello concettuale

Processore

DC B s.count=1

A(sq) Coda proc. sospesi semaforo (sr) Coda proc. pronti

Funzioni di controllo

void wait(semaphore s) {
s.count--;
if (s.count<0){
sq.insert(Process);
suspend(Process);
}
}

void signal(semaphore s) {
s.count++;
if (s.count<=0){
sq.remove(Process);
suspend(Process);
}
}

Creazione e inizializzazione di un semaforo

key_t chiave_sem=IPC_PRIVATE;
// richiesta di 2 semafori ed inizializzazione
sem=semget(chiave_sem,2,IPC_CREAT|0664);
// Inizializzazione dei due semafori
semctl(sem,0,SETVAL,val1);
semctl(sem,1,SETVAL,val2);

Operazioni sui semafori

semop - semaphore operations

int semop(int semid, struct sembuf *sops, unsigned 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 */

Uso della primitiva semop

La primitiva semop agisce sulla struttura indicata da semid.

Ognuno degli elementi, riferiti dal puntatore sops, specifica un’operazione da compiere sul semaforo. L’operazione è descritta da una struttura 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 può 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.

Esecuzione delle operazioni

L’insieme delle operazioni specificate da sops sono eseguite in maniera atomica.

sem_num indica su quale semaforo, tra quelli presenti nell’array, dovrà essere eseguita l’operazione. Il primo semaforo dell’array ha indice 0.

Tipologie di operazioni

  • sem_op < 0: wait
  • sem_op == 0: wait_for_zero
  • sem_op > 0: signal
Anteprima
Vedrai una selezione di 1 pagina su 5
Sistemi operativi - System Call per la gestione dei semafori in Linux Pag. 1
1 su 5
D/illustrazione/soddisfatti o rimborsati
Acquista con carta o PayPal
Scarica i documenti tutte le volte che vuoi
Dettagli
SSD
Ingegneria industriale e dell'informazione ING-INF/05 Sistemi di elaborazione delle informazioni

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher Menzo di informazioni apprese con la frequenza delle lezioni di Sistemi operativi e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli studi di Napoli Federico II o del prof Cotroneo Domenico.
Appunti correlati Invia appunti e guadagna

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community