Laboratorio Sistemi Operativi - Semafori

Choose a study mode

Play Quiz
Study Flashcards
Spaced Repetition
Chat to Lesson

Podcast

Play an AI-generated podcast conversation about this lesson

Questions and Answers

Quale operazione viene utilizzata per rimuovere un set di semafori dopo che tutti i processi hanno terminato di usarlo?

  • semop()
  • IPC_RMID (correct)
  • semget()
  • semctl()

Quale funzione è utilizzata per inizializzare i valori dei semafori in un set?

  • semop()
  • semget()
  • semctl() (correct)
  • IPC_PRIVATE

Cosa viene creato dalla system call semget() al momento della sua chiamata?

  • Un set di semafori (correct)
  • Un processo
  • Una risorsa condivisa
  • Un semaforo

Quale operazione viene utilizzata per eseguire operazioni sui valori del semaforo?

<p>semop() (A)</p> Signup and view all the answers

Cosa indica tipicamente un processo quando usa un semaforo?

<p>L'acquisizione e il rilascio di una risorsa condivisa (A)</p> Signup and view all the answers

Quale delle seguenti affermazioni riguarda il permesso S_ISUID?

<p>Consente l'assegnazione del bit set-user-ID. (C)</p> Signup and view all the answers

Quale valore ottale corrisponde al permesso S_IWUSR?

<p>0200 (B)</p> Signup and view all the answers

Cosa indica il permesso S_IRGRP?

<p>Il file è leggibile dal gruppo. (B)</p> Signup and view all the answers

Quale bit deve essere impostato per il controllo di sticky su un file?

<p>S_ISVTX (D)</p> Signup and view all the answers

Quale rappresenta il permesso S_IXGRP?

<p>Permesso di esecuzione per il gruppo. (C)</p> Signup and view all the answers

Qual è il valore ottale per S_IRUSR?

<p>0400 (A)</p> Signup and view all the answers

Quale di queste opzioni rappresenta un permesso di esecuzione per l'utente?

<p>S_IXUSR (D)</p> Signup and view all the answers

Qual è la funzione del permesso S_IWGRP?

<p>Consente la scrittura solo per il gruppo. (C)</p> Signup and view all the answers

Quale funzione restituisce il valore del semaforo specificato da semid e semnum?

<p>GETVAL (B)</p> Signup and view all the answers

Quale operazione viene utilizzata per inizializzare il valore di un singolo semaforo?

<p>SETVAL (C)</p> Signup and view all the answers

Cosa restituisce la funzione GETPID riguardo a un semaforo?

<p>Il PID del processo che ha eseguito semop() (B)</p> Signup and view all the answers

Quale operazione ignora il parametro semnum?

<p>SETALL (C)</p> Signup and view all the answers

Quale richiesta di permessi è necessaria per le operazioni di lettura sui semafori?

<p>Permessi in lettura (A)</p> Signup and view all the answers

Quale funzione permette di prelevare i valori di tutti i semafori nel set?

<p>GETALL (C)</p> Signup and view all the answers

Quando si utilizza GETALL, cosa deve garantire il programmatore?

<p>Che l'array sia abbastanza capiente (A)</p> Signup and view all the answers

Quale operazione è utilizzata per inizializzare tutti i semafori di un set con valori da un array?

<p>SETALL (B)</p> Signup and view all the answers

Quale flag può essere utilizzato con la funzione semget per creare un nuovo set di semafori se non esiste già?

<p>IPC_CREAT (C)</p> Signup and view all the answers

Quale valore rappresenta S_IRWXO nel contesto delle maschere di permessi?

<p>007 (A)</p> Signup and view all the answers

Cosa restituisce la funzione semctl in caso di errore?

<p>-1 (A)</p> Signup and view all the answers

Quale argomento nella funzione semctl è usato per identificare il set di semafori su cui eseguire l'operazione?

<p>semid (A)</p> Signup and view all the answers

Quale operazione non è specificata dall'argomento cmd nella funzione semctl?

<p>Rinnovo di un semaforo (B)</p> Signup and view all the answers

Cosa avviene se si specifica IPC_EXCL con IPC_CREAT e il set di semafori esiste già?

<p>Si verifica un errore EEXIST (C)</p> Signup and view all the answers

Quale dei seguenti identificatori è utilizzato per eseguire operazioni su singoli semafori nella funzione semctl?

<p>semnum (B)</p> Signup and view all the answers

Quale costante rappresenta i permessi di lettura, scrittura ed esecuzione per l'utente proprietario?

<p>S_IRWXU (A)</p> Signup and view all the answers

Cosa restituisce GETNCNT in relazione ai semafori?

<p>Il numero di processi in attesa di un incremento del valore del semaforo. (A)</p> Signup and view all the answers

Qual è la funzione del membro sem_otime nella struttura semid_ds?

<p>Segna il tempo dell'ultima operazione semop() riuscita. (C)</p> Signup and view all the answers

Quando viene inizializzato il membro sem_ctime nella struttura semid_ds?

<p>Solo al momento della creazione del set di semafori. (B)</p> Signup and view all the answers

Quale delle seguenti affermazioni sui membri uid, gid e mode è corretta?

<p>Possono essere aggiornati con l'operazione IPC_SET. (C)</p> Signup and view all the answers

Cosa rappresenta la struttura semun?

<p>Una serie di informazioni sui semafori e i processi associati. (B)</p> Signup and view all the answers

Quale valore della struttura sem_nsems indica?

<p>Il numero totale di semafori in un set. (C)</p> Signup and view all the answers

Cosa accade al membro sem_otime alla creazione del semaforo?

<p>Viene impostato a 0. (B)</p> Signup and view all the answers

Qual è la funzione della chiamata semctl() IPC_SET?

<p>Aggiornare i membri uid, gid e mode. (C)</p> Signup and view all the answers

Qual è l'obiettivo principale dell'inserimento del codice che forza il secondo processo ad attendere?

<p>Prevenire la condizione di corsa. (A)</p> Signup and view all the answers

Cosa rappresenta 'sem_otime' nel contesto del semaforo?

<p>Il tempo in cui è stata eseguita l'operazione 'semop'. (D)</p> Signup and view all the answers

Quale dichiarazione è vera riguardo alla creazione del semaforo?

<p>Il semaforo può essere creato utilizzando 'semget' con parametri appropriati. (C)</p> Signup and view all the answers

Cosa succede se il semaforo non è stato creato e 'errno' è diverso da 'EEXIST'?

<p>Si genera un errore e il processo termina. (D)</p> Signup and view all the answers

Per quale motivo viene utilizzato un ciclo di attesa nella creazione di un semaforo esistente?

<p>Per assicurarsi che il semaforo sia stato inizializzato da un altro processo. (C)</p> Signup and view all the answers

Qual è il comando utilizzato per impostare il valore del semaforo dopo la sua creazione?

<p>semctl() (D)</p> Signup and view all the answers

Cosa significa la linea 'sop.sem_op = 0;'?

<p>Il processo aspetta un valore di semaforo pari a zero. (A)</p> Signup and view all the answers

Cosa accade se 'semop()' restituisce -1?

<p>Si verifica un errore e il processo termina. (B)</p> Signup and view all the answers

Qual è il valore iniziale assegnato al semaforo nella creazione?

<p>0 (C)</p> Signup and view all the answers

Perché non tutte le applicazioni richiedono una soluzione al problema della condizione di corsa?

<p>Non tutte le applicazioni condividono risorse. (D)</p> Signup and view all the answers

Flashcards

Set di semafori

I semafori di System V sono organizzati in gruppi chiamati set di semafori. Ogni set contiene un numero definito di semafori.

semget()

System call per creare o aprire un set di semafori. Specifica il numero di semafori nel set.

semctl()

System call per inizializzare i semafori in un set (SETVAL o SETALL), o per rimuovere il set (IPC_RMID).

semop()

System call per eseguire operazioni sui valori dei semafori in un set. Consente di gestire le acquisizioni e il rilascio di risorse condivise in modo atomico.

Signup and view all the flashcards

IPC_PRIVATE

Valore speciale per semget() che indica la creazione di un nuovo set di semafori. Il set è creato con un ID unico e non condiviso.

Signup and view all the flashcards

Set-user-ID

Un bit di permesso che permette all'utente di eseguire un file come se fosse l'utente che lo possiede.

Signup and view all the flashcards

Set-group-ID

Un bit di permesso che permette ad un gruppo di eseguire un file come se fosse il gruppo che lo possiede.

Signup and view all the flashcards

Sticky bit

Un bit di permesso che impedisce a chiunque non sia il proprietario di spostare o eliminare un file.

Signup and view all the flashcards

Permesso di lettura utente

Consente all'utente di leggere il contenuto di un file.

Signup and view all the flashcards

Permesso di scrittura utente

Consente all'utente di modificare il contenuto di un file.

Signup and view all the flashcards

Permesso di esecuzione utente

Consente all'utente di eseguire un file.

Signup and view all the flashcards

Permesso di lettura gruppo

Consente al gruppo del file di leggere il file.

Signup and view all the flashcards

Permesso di scrittura gruppo

Consente al gruppo del file di modificare il file.

Signup and view all the flashcards

IPC_CREAT

Flag per semget() per creare un nuovo set di semafori se non esiste già.

Signup and view all the flashcards

IPC_EXCL

Flag per semget() per impedire la creazione di un set di semafori se esiste già.

Signup and view all the flashcards

semnum

Numero di semaforo all'interno del set di semafori (per semctl()).

Signup and view all the flashcards

cmd

Argomento per semctl() che specifica l'operazione da eseguire sul set di semafori.

Signup and view all the flashcards

SETVAL

Operazione cmd per semctl() per inizializzare il valore di un semaforo.

Signup and view all the flashcards

IPC_RMID

Operazione cmd per semctl() per rimuovere un set di semafori.

Signup and view all the flashcards

semctl() - SETVAL

Inizializza un semaforo specifico nel set a un valore dato. Richiede permessi di scrittura sul semaforo.

Signup and view all the flashcards

semctl() - GETVAL

Restituisce il valore attuale di un semaforo specifico nel set. Richiede permessi di lettura sul semaforo.

Signup and view all the flashcards

semctl() - GETALL

Restituisce i valori attuali di tutti i semafori in un set. Richiede permessi di lettura sul set di semafori.

Signup and view all the flashcards

semctl() - SETALL

Inizializza tutti i semafori in un set con i valori specificati in un array. Richiede permessi di scrittura sul set di semafori.

Signup and view all the flashcards

Un semaforo è utilizzato per...

Controllare l'accesso a una risorsa condivisa, assicurando che solo un processo alla volta possa accedere alla risorsa.

Signup and view all the flashcards

semctl() - GETPID

Restituisce il PID dell'ultimo processo che ha eseguito un'operazione semop() su un semaforo specifico.

Signup and view all the flashcards

semctl() - GETVAL è simile a...

semop() con una singola operazione di valore zero

Signup and view all the flashcards

L'utilizzo di semctl() per modificare il valore di un semaforo

Potrebbe causare problemi di concorrenza, se non gestito correttamente.

Signup and view all the flashcards

GETNCNT

Questa call restituisce il numero di processi in attesa di un incremento del valore del semaforo, ovvero il valore semncnt.

Signup and view all the flashcards

GETZCNT

Questa call restituisce il numero di processi in attesa che il valore del semaforo diventi 0, ovvero il valore semzcnt.

Signup and view all the flashcards

sem_perm

Struttura contenente le informazioni di permessi del set di semafori. Consente di gestire l'accesso al set.

Signup and view all the flashcards

sem_otime

Membro della struttura semid_ds che tiene traccia dell'ultima volta in cui il valore del semaforo è stato modificato da un'operazione semop() o SEM_UNDO.

Signup and view all the flashcards

sem_ctime

Membro della struttura semid_ds che tiene traccia dell'ultima volta in cui il set di semafori è stato modificato usando semctl() (esempio: SETALL o SETVAL).

Signup and view all the flashcards

Race condition con semafori

Si verifica quando due o più processi cercano di accedere e modificare lo stesso semaforo contemporaneamente, portando a risultati imprevedibili.

Signup and view all the flashcards

Come evitare la race condition con i semafori?

Si utilizza una combinazione di semget() con IPC_CREAT e IPC_EXCL e semctl() per inizializzare il semaforo prima che il processo successivo cerchi di accedervi.

Signup and view all the flashcards

semget() con IPC_CREAT e IPC_EXCL

Questa chiamata crea un nuovo set di semafori, ma solo se un set con lo stesso key non esiste già.

Signup and view all the flashcards

Inizializzazione del semaforo

Utilizza la chiamata semctl() con il comando SETVAL per assegnare un valore iniziale al semaforo.

Signup and view all the flashcards

Attenta che il semaforo sia pronto

Utilizzando semctl() con IPC_STAT, il processo può verificare lo stato del semaforo e aspettare che il sem_otime sia diverso da 0, indicando che è stato utilizzato.

Signup and view all the flashcards

Semop() per operare sul semaforo

Utilizzando semop(), i processos possono eseguire operazioni sui semafori (acquisizione o rilascio di risorse).

Signup and view all the flashcards

Gestione degli errori (EEXIST)

Se semget() restituisce -1 con errno uguale a EEXIST, significa che un semaforo con lo stesso key è già stato creato da un altro processo.

Signup and view all the flashcards

Valori sem_op in semop()

Il valore sem_op in semop() specifica l'operazione da eseguire sul semaforo. Un valore positivo indica il rilascio di risorse, mentre un valore negativo indica l'acquisizione.

Signup and view all the flashcards

Implementare la soluzione al race condition

L'implementazione richiede di gestire la creazione del semaforo, la sua inizializzazione e l'attesa che il semaforo sia pronto prima che altri processi tentino di utilizzarlo.

Signup and view all the flashcards

Study Notes

Laboratorio Sistemi Operativi - Semafori

  • Il laboratorio si concentra sui semafori, uno strumento di comunicazione tra processi
  • I semafori, diversamente da altri strumenti IPC, non trasferiscono dati, ma sincronizzano le azioni dei processi
  • Sono cruciali per gestire l'accesso a risorse condivise evitando conflitti
  • Un semaforo è un intero gestito dal kernel, sempre maggiore o uguale a 0
  • Sono possibili diverse operazioni sui semafori, tra cui:
    • Impostare il semaforo a un valore specifico
    • Incrementare il valore corrente del semaforo
    • Decrementare il valore corrente del semaforo
    • Attendere che il valore del semaforo sia 0
  • Le ultime due operazioni possono bloccare il processo chiamante
  • Il kernel blocca eventuali tentativi di decremento del valore del semaforo al di sotto di 0
  • I semafori sono allocati in gruppi detti set di semafori
  • Il numero di semafori in un set è specificato durante la creazione del set tramite la system call semget()
  • Spesso si utilizza un solo semaforo alla volta, ma la system call semop() permette l'esecuzione atomica di più operazioni su un set di semafori
  • I passi per utilizzare i semafori sono:
    • Creare o aprire un set di semafori tramite semget()
    • Inizializzare i semafori nel set usando SETVAL o SETALL di semctl()
    • Eseguire operazioni sui valori dei semafori tramite semop()
  • I processi usano le operazioni sui semafori per gestire l'accesso alle risorse condivise
  • La rimozione del set di semafori avviene tramite IPC_RMID di semctl()

Argomenti del Laboratorio UNIX

  • Introduzione a UNIX
  • Integrazione C (operatori bitwise, precedenze, preprocessore, pacchettizzazione, compilazione condizionale e utility make)
  • Controllo dei processi
  • Segnali
  • Pipe e FIFO
  • Code di messaggi
  • Semafori
  • Memoria condivisa
  • Introduzione alla programmazione bash

Crediti

  • Le lezioni si basano su materiale di anni precedenti
  • Su libri come:
    • "The Linux Programming interface" (Michael Kerrisk)
    • "Advanced Programming in the UNIX Environment" (W. Richard Stevens)

Introduzione: Semafori

  • I semafori, a differenza di altri strumenti IPC, non trasferiscono dati, ma gestiscono la sincronizzazione tra processi.
  • Servono a sincronizzare l'accesso a blocchi di memoria condivisa.

Utilizzo dei Semafori

  • I passi per utilizzare i semafori includono la creazione/apertura del set, l'inizializzazione dei semafori nel set tramite semctl() (SETVAL o SETALL) e l'esecuzione di operazioni sui semafori utilizzando semop().
  • I processi usano i semafori per indicare acquisizione e rilascio di risorse condivise.
  • La rimozione del set di semafori avviene tramite IPC_RMID di semctl().

Problemi di Inizializzazione e Race Condition

  • Due processi che eseguono lo stesso codice simultaneamente possono causare problemi di sincronizzazione, detti race condition.
  • Una soluzione consiste nel far sì che un processo attendi che l'altro abbia inizializzato il semaforo prima di procedere.

Operazioni sui Semafori

  • La system call semop() esegue le operazioni sui semafori.
  • L'argomento sops è un puntatore a un array di strutture sembuf che contengono le operazioni da eseguire.
  • Ogni struttura sembuf specifica il numero del semaforo e l'operazione da effettuare.

sembuf: operazioni sui semafori

  • Il campo sem_op specifica l'operazione:
    • Maggiore di 0: incrementa il valore del semaforo
    • Uguale a 0: controlla se il valore del semaforo è 0
    • Minore di 0: decrementa il valore del semaforo
  • Operazioni atomiche: eseguite in blocco

Studying That Suits You

Use AI to generate personalized quizzes and flashcards to suit your learning preferences.

Quiz Team

Related Documents

More Like This

Use Quizgecko on...
Browser
Browser