Podcast
Questions and Answers
Cosa restituisce la chiamata di sistema sigaction in caso di successo?
Cosa restituisce la chiamata di sistema sigaction in caso di successo?
- 0 (correct)
- -1
- errno
- 1
Quale dei seguenti parametri è un puntatore al nuovo gestore di segnali nella chiamata sigaction?
Quale dei seguenti parametri è un puntatore al nuovo gestore di segnali nella chiamata sigaction?
- sa_handler
- signum
- act (correct)
- oldact
Cosa succede se il parametro 'act' è impostato a NULL durante la chiamata sigaction?
Cosa succede se il parametro 'act' è impostato a NULL durante la chiamata sigaction?
- Il gestore viene impostato a default.
- Viene restituito un errore.
- Il gestore rimane invariato. (correct)
- Il gestore di segnali viene rimosso.
Quale dei seguenti membri della struttura sigaction è utilizzato per la maschera dei segnali bloccati?
Quale dei seguenti membri della struttura sigaction è utilizzato per la maschera dei segnali bloccati?
Cosa succede alla maschera dei segnali di un processo quando viene creato un nuovo processo?
Cosa succede alla maschera dei segnali di un processo quando viene creato un nuovo processo?
Quale invocazione di sigaction imposta un nuovo gestore di segnali e restituisce il gestore attuale?
Quale invocazione di sigaction imposta un nuovo gestore di segnali e restituisce il gestore attuale?
Quale valore è comunemente utilizzato per indicare un errore in casistica di sigaction?
Quale valore è comunemente utilizzato per indicare un errore in casistica di sigaction?
Quale dei seguenti membri della struttura sigaction modifica il comportamento del segnale?
Quale dei seguenti membri della struttura sigaction modifica il comportamento del segnale?
Quale dei seguenti eventi può generare un segnale in un processo?
Quale dei seguenti eventi può generare un segnale in un processo?
Quale carattere speciale, digitato dall'utente, genera un segnale di interruzione?
Quale carattere speciale, digitato dall'utente, genera un segnale di interruzione?
Cosa rappresentano le sequenze di interi unici utilizzati per i segnali?
Cosa rappresentano le sequenze di interi unici utilizzati per i segnali?
Quale delle seguenti affermazioni sui segnali è corretta?
Quale delle seguenti affermazioni sui segnali è corretta?
Quale scenario non genera un segnale secondo le cause descritte?
Quale scenario non genera un segnale secondo le cause descritte?
Cosa indica il carattere di sospensione (Control-Z) in un terminale?
Cosa indica il carattere di sospensione (Control-Z) in un terminale?
Chi notifica un processo quando si verifica un errore hardware?
Chi notifica un processo quando si verifica un errore hardware?
Quale dei seguenti eventi non è considerato un evento software per generare segnali?
Quale dei seguenti eventi non è considerato un evento software per generare segnali?
Cosa succede a un segnale inviato a un processo mentre esegue un handler senza il flag SA_NODEFER settato?
Cosa succede a un segnale inviato a un processo mentre esegue un handler senza il flag SA_NODEFER settato?
Quale funzione viene utilizzata per inizializzare un set di segnali come vuoto?
Quale funzione viene utilizzata per inizializzare un set di segnali come vuoto?
Qual è il tipo di dato utilizzato per rappresentare un set di segnali?
Qual è il tipo di dato utilizzato per rappresentare un set di segnali?
Quale delle seguenti funzioni serve a verificare se un segnale è membro di un set di segnali?
Quale delle seguenti funzioni serve a verificare se un segnale è membro di un set di segnali?
Cosa fa la funzione sigfillset?
Cosa fa la funzione sigfillset?
Cosa accade alla maschera dei segnali quando viene creato un nuovo processo?
Cosa accade alla maschera dei segnali quando viene creato un nuovo processo?
Quale flag deve essere utilizzato per permettere invocazioni annidate di un handler?
Quale flag deve essere utilizzato per permettere invocazioni annidate di un handler?
Quale funzione deve essere usata per rimuovere un segnale specifico da un set di segnali?
Quale funzione deve essere usata per rimuovere un segnale specifico da un set di segnali?
Qual è la funzione della chiamata di sistema kill() quando l'argomento sig è impostato a 0?
Qual è la funzione della chiamata di sistema kill() quando l'argomento sig è impostato a 0?
Cosa indica il valore di pid quando è uguale a 0 nella chiamata di sistema kill()?
Cosa indica il valore di pid quando è uguale a 0 nella chiamata di sistema kill()?
Cosa accade se la chiamata kill() fallisce con errore ESRCH?
Cosa accade se la chiamata kill() fallisce con errore ESRCH?
Quale affermazione è corretta riguardo al segnale SIGINT?
Quale affermazione è corretta riguardo al segnale SIGINT?
Quale macro rappresenta il numero totale dei segnali disponibili?
Quale macro rappresenta il numero totale dei segnali disponibili?
Cosa indica pid == -1 nella chiamata kill()?
Cosa indica pid == -1 nella chiamata kill()?
Quale condizione può portare a un errore EPERM nella chiamata kill()?
Quale condizione può portare a un errore EPERM nella chiamata kill()?
Qual è il risultato della chiamata kill() quando viene fornito un pid valido ma il segnale non può essere inviato?
Qual è il risultato della chiamata kill() quando viene fornito un pid valido ma il segnale non può essere inviato?
Flashcards
Segnale
Segnale
Una notifica a un processo che indica un evento accaduto.
Evento Hardware
Evento Hardware
Errore hardware rilevato dall'HW e notificato al kernel, che poi invia un segnale al processo.
Caratteri speciali (terminale)
Caratteri speciali (terminale)
Caratteri come Ctrl+C (interrupt) e Ctrl+Z (suspend) che inviano segnali.
Evento Software
Evento Software
Signup and view all the flashcards
Nomi simbolici dei segnali
Nomi simbolici dei segnali
Signup and view all the flashcards
SIGxxxx
SIGxxxx
Signup and view all the flashcards
Intero univoco dei segnali
Intero univoco dei segnali
Signup and view all the flashcards
Kernel
Kernel
Signup and view all the flashcards
kill() system call
kill() system call
Signup and view all the flashcards
pid_t pid
pid_t pid
Signup and view all the flashcards
int sig
int sig
Signup and view all the flashcards
Segnale null (sig = 0)
Segnale null (sig = 0)
Signup and view all the flashcards
ESRCH (No such process)
ESRCH (No such process)
Signup and view all the flashcards
EPERM (No permissions)
EPERM (No permissions)
Signup and view all the flashcards
int kill(pid_t pid, int sig)
int kill(pid_t pid, int sig)
Signup and view all the flashcards
Controllo di processo
Controllo di processo
Signup and view all the flashcards
Syscall sigaction
Syscall sigaction
Signup and view all the flashcards
Gestione segnali
Gestione segnali
Signup and view all the flashcards
Struct sigaction
Struct sigaction
Signup and view all the flashcards
sa_handler
sa_handler
Signup and view all the flashcards
sa_mask
sa_mask
Signup and view all the flashcards
sa_flags
sa_flags
Signup and view all the flashcards
Maschera segnali
Maschera segnali
Signup and view all the flashcards
Ereditarietà maschera segnali
Ereditarietà maschera segnali
Signup and view all the flashcards
SA_NODEFER
SA_NODEFER
Signup and view all the flashcards
sigset_t
sigset_t
Signup and view all the flashcards
sigemptyset(sigset_t *set)
sigemptyset(sigset_t *set)
Signup and view all the flashcards
sigfillset(sigset_t *set)
sigfillset(sigset_t *set)
Signup and view all the flashcards
sigaddset(sigset_t *set, int signum)
sigaddset(sigset_t *set, int signum)
Signup and view all the flashcards
sigdelset(sigset_t *set, int signum)
sigdelset(sigset_t *set, int signum)
Signup and view all the flashcards
sigismember(const sigset_t *set, int signum)
sigismember(const sigset_t *set, int signum)
Signup and view all the flashcards
Study Notes
Introduzione al Laboratorio di Sistemi Operativi UNIX
- Il laboratorio si concentra sui sistemi operativi UNIX.
- Gli argomenti includono l'introduzione a UNIX, l'integrazione C (operatori bitwise, precedenze, preprocessore, pacchettizzazione del codice, compilazione condizionale e utility make), il controllo dei processi, segnali, pipe e FIFO, code di messaggi, memoria condivisa, semafori e introduzione alla programmazione bash.
- Il materiale si basa su appunti del professore degli anni precedenti, sul libro "The Linux Programming Interface" di Michael Kerrisk, e sul libro "Advanced Programming in the UNIX Environment" di W. Richard Stevens.
Cause che Generano i Segnali
- Un segnale è una notifica a un processo di un evento.
- Le cause includono eccezioni hardware (es. istruzioni errate, divisioni per 0, accesso a memoria non valida), eventi software (es. disponibilità di input da un file, timeout di un timer, terminazione di un processo figlio) e input utente (es. caratteri speciali come Ctrl+C o Ctrl+Z).
Nomi Simbolici e Numeri dei Segnali
- I segnali sono rappresentati da interi unici, iniziando da 1.
- Ogni segnale ha un nome simbolico (es. SIGINT, SIGSEGV) definito in
<signal.h>
o<sys/signal.h>
. - Per la portabilità , si consiglia di usare i nomi simbolici nei programmi.
Elenco dei Segnali con strsignal
- La funzione
strsignal
fornisce il nome simbolico di un segnale dato il suo numero.
Elenco dei Segnali BSD
- Presenta un elenco dettagliato dei segnali UNIX con i loro nomi e le azioni di default.
Ciclo di Vita dei Segnali
- Un segnale inizia con un evento.
- Successivamente, il segnale viene inviato a un processo.
- Il segnale è in "attesa" (pending) finché non viene consegnato.
Segnali in Attesa, Consegna e Blocco
- Un segnale in attesa viene inviato al processo durante l'esecuzione di questo.
- In alcuni casi, potrebbe essere necessario evitare che un segnale interrompa l'esecuzione di un segmento di codice. Questo si raggiunge aggiungendo un segnale alla maschera dei segnali del processo.
- L'aggiunta e la rimozione dei segnali dalla maschera vengono gestite da system call specifiche.
Azioni di Default dei Processi in Risposta a un Segnale
- Un processo in risposta a un segnale può ignorare il segnale, terminare, generare un core dump o fermarsi (stopped).
Generazione di un File Core Dump
- In questo caso, viene generato un file contenente un'immagine della memoria virtuale del processo al momento della terminazione.
Rilancio dell'Esecuzione del Processo
- Un processo può essere ripreso dopo essere stato bloccato.
Sistemi di Segnali in Unix & Le Trap
- Le trap sono segnali generati dai comportamenti errati del processo stesso. Esempi includono divisione per zero, accesso a indirizzi di memoria non validi, e tentativi di eseguire istruzioni privilegiate.
Sistemi di Segnali in Unix - Gli Interrupt
- Gli interrupt sono segnali generati da sorgenti esterne al processo, come l'utente.
- Sono generati da tasti di controllo sul terminale (es. Ctrl-C, Ctrl-Z).
Impostazione della Disposizione di Default dei Segnali
- I programmi possono modificare l'azione di default di un segnale.
- Ciò viene fatto impostando una di queste disposizioni: continuare con l'azione di default, ignorare il segnale o eseguire un handler di segnali.
Signal Handler
- Un signal handler è una funzione che gestisce un particolare segnale.
- Quando un segnale viene ricevuto, il kernel chiama l'handler, permettendo al programma di prendere azioni specifiche.
Signal Types and Default Actions
- Una lista di tipi di segnali e le loro azioni di default
Signal Types, Default Actions, & Specific Examples
- Descrizione dei tipi di segnali e le loro azioni corrispondenti nel contesto di UNIX (es. SIGABRT per abort program)
Gestione di Signal Handler
- L'installazione o la definizione di un
signal handler
significa informare il kernel che deve essere chiamata una funzione handler specifico se si riceve quell'evento. - Il kernel avvia l'esecuzione del codice scritto dal programmatore in risposta a un segnale.
- L'esecuzione principale del programma può essere interrotta.
- Un'esecuzione del programma può riprendere esattamente dal punto in cui era stata interrotta quando l'handler termina.
Setting Signal Disposition in Signal Handlers
- Descrizione di come il programma può configurare diversi comportamenti di un segnale.
Signal Handlers and Flow Control
- Descrizione di come un signal handler può gestire il flusso di esecuzione di un processo nel sistema operativo.
Cosa Succede se un Processo Riceve un Segnale Mentre è Sospeso
- Descrizione del comportamento di un processo che riceve un segnale mentre è sospeso (in attesa di una operazione di sistema).
Il Codice del Handler
- Un esempio di codice di un
signal handler
.
kill() System Call
- Descrizione dettagliata della system call
kill()
in UNIX e dei parametri (pid
,sig
). - Eventi di errore.
sigaction() System Call
- Descrizione dettagliata di
sigaction()
, e argomenti comesignum
,act
,oldact
.
La Struttura sigaction
- Descrizione completa della struttura
sigaction
, in particolare consa_handler
,sa_mask
, esa_flags
.
Mask & Fork
- Spiega la maschera del segnale per i processi (i processi ereditano la maschera dei segnali).
- Descrizione di come la maschera viene modificata e/o gestita dai processi.
Sblocco del Segnale Durante un Handler
- Spiega il comportamento del sistema quando un segnale viene inviato durante l'esecuzione di un handler, e quando l'handler restituisce.
Signal Mask
- Descrizione della gestione della
signal mask
per i processi, mostrando le diverse funzioni utilizzate per manipolare isignal set
.
Signal Sets
- Descrizione del tipo di dato
sigset_t
e come rappresentare l'insieme dei segnali.
Impostazione della Maschera dei Segnali di un Processo
- Descrizione delle diverse possibilità di impostazione della maschera dei segnali di un processo.
Gestione dei Segnali in Sistemi Sospesi
- Eventi di errore e risposte del sistema a processi sospesi su
wait
,pause
,sleep
o altre System Call
Handlers di Segnali
- Spiegazione di come l'handler deve essere associato al segnale desiderato per essere attivato e di come vengono gestite le differenti situazioni.
Sending Signals
- Utilizzazione della system call
kill()
per inviare segnali a un processo.
Gestione dei Segnali in Unix
- Descrizione di come vengono gestiti i segnali.
Conclusioni e Disclaimer
Studying That Suits You
Use AI to generate personalized quizzes and flashcards to suit your learning preferences.
Related Documents
Description
Questo quiz si concentra sulla teoria e pratiche relative ai sistemi operativi UNIX. Gli argomenti trattati includono l'integrazione C, controllo dei processi, segnali e programmazione bash. Utilizzerai materiali basati su appunti e testi fondamentali del settore.