Laboratorio Sistemi Operativi - Semafori
47 Questions
2 Views

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

    Description

    Questo quiz esplora il concetto di semafori come strumento di sincronizzazione nei sistemi operativi. I semafori sono essenziali per gestire l'accesso a risorse condivise e per evitare conflitti tra processi. Imparerai a conoscere le operazioni sui semafori e il loro utilizzo nel contesto della comunicazione tra processi.

    More Like This

    Use Quizgecko on...
    Browser
    Browser