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
-
Sistemi operativi
-
Sistemi operativi - teoria completa
-
Corso di Sistemi operativi - prima parte
-
Sistemi Operativi (Corso Completo in Digitale)