Aggiunte descrizioni di vari segnali
authorSimone Piccardi <piccardi@gnulinux.it>
Tue, 3 Jul 2001 17:47:47 +0000 (17:47 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Tue, 3 Jul 2001 17:47:47 +0000 (17:47 +0000)
fileintro.tex
signal.tex

index a7df9939b1089dcc33a5f2889978a390bfd5252f..85098c865e948438193276b67debd89c4ae5a85a 100644 (file)
@@ -125,15 +125,15 @@ questa sia la directory radice allora il riferimento 
 \label{sec:fileintr_file_types}
 
 Come detto in precedenza in unix esistono vari tipi di file, in Linux questi
-sono implementati come oggetti del \textit{Virtual File System} e sono
-presenti in tutti i filesystem unix-like utilizzabili con Linux. L'elenco dei
-vari tipi di file definiti dal Virtual File System è riportato in \ntab.
+sono implementati come oggetti del \textit{Virtual File System} (vedi
+\secref{sec:fileintro_vfs}) e sono presenti in tutti i filesystem unix-like
+utilizzabili con Linux. L'elenco dei vari tipi di file definiti dal Virtual
+File System è riportato in \ntab.
 
 Si tenga ben presente che questa classificazione non ha nulla a che fare con
 la classificazione sui tipi di file (che in questo caso sono sempre file di
 dati) in base al loro contenuto, o tipo di accesso.
 
 \begin{table}[htb]
   \begin{center}
     \begin{tabular}[c]{l l p{7cm}}
@@ -301,9 +301,9 @@ un filesystem unix. In particolare occorre tenere presente dov'
 la divisione fondamentale fra kernel space e user space che tracciavamo al
 \capref{cha:intro_unix}.
 
-In questa sezione esamineremo allora come viene implementato l'accesso ai
-files in Linux, come il kernel gestisce i vari filesystem, descrivendo poi in
-maniera un po' più dettagliata il filesystem standard di Linux,
+In questa sezione esamineremo come viene implementato l'accesso ai files in
+Linux, come il kernel può gestire diversi tipi di filesystem, descrivendo
+poi in maniera un po' più dettagliata il filesystem standard di Linux,
 l'\texttt{ext2}, come esempio di un filesystem unix-like.
 
 
@@ -322,7 +322,7 @@ l'\texttt{ext2}, come esempio di un filesystem unix-like.
 % \textit{inode}, \textit{dentry}, \textit{dcache}.
 
 In Linux il concetto di \textit{everything is a file} è stato implementato
-attraverso il \textit{virtual filesystem} (da qui in avanti VFS) che è
+attraverso il \textit{Virtual File System} (da qui in avanti VFS) che è
 l'interfaccia che il kernel rende disponibile ai programmi in user space
 attraverso la quale vengono manipolati i files; esso provvede un livello di
 indirezione che permette di collegare le operazioni di manipolazione sui files
@@ -333,8 +333,8 @@ di filesystem differenti all'interno dello stesso albero delle directory
 Quando un processo esegue una system call che opera su un file il kernel
 chiama sempre una funzione implementata nel VFS; la funzione eseguirà le
 manipolazioni sulle strutture generiche e ridirigendo la chiamata alla
-opportune routine del filesystem specifico a cui si fa riferimento, saranno
-queste a chiamare le funzioni di piu basso livello che eseguono le operazioni
+opportune routine del filesystem specifico a cui si fa riferimento. Saranno
+queste a chiamare le funzioni di più basso livello che eseguono le operazioni
 di I/O sul dispositivo fisico, secondo lo schema riportato in \nfig.
 
 \begin{figure}[htb]
@@ -344,6 +344,14 @@ di I/O sul dispositivo fisico, secondo lo schema riportato in \nfig.
   \label{fig:fileintro_VFS_scheme}
 \end{figure}
 
+Il VFS definisce un insieme di funzioni che tutti i filesystem devono
+implementare, queste funzioni 
+
+
+
+\subsection{Il funzionamento del VFS}
+\label{sec:fileintr_vfs_work}
+
 La funzione più importante implementata dal VFS è la system call \texttt{open}
 che permette di aprire un file. Dato un pathname viene eseguita una ricerca
 dentro la \textit{directory entry cache} (in breve \textit{dcache}),
index ec3bf5547afcab767eddadcd7d14a91cb477bb67..beebb0041abaa1980b7719a5842446aa81ab5408 100644 (file)
@@ -342,7 +342,7 @@ stato dello stack e delle variabili al momento della ricezione del segnale.
 
 \begin{table}[htb]
   \centering
-  \begin{tabular}[c]{c p{6cm}}
+  \begin{tabular}[c]{c p{10cm}}
     A & L'azione di default è terminare il processo. \\
     B & L'azione di default è ignorare il segnale. \\
     C & L'azione di default è terminare il processo e scrivere un \textit{core
@@ -412,19 +412,20 @@ Questi segnali sono:
 
   È tipico ottenere questo segnale dereferenziando un puntatore nullo o non
   inizializzato leggendo al di la della fine di un vettore. 
-\item \texttt{SIGBUS} In maniera analoga a \texttt{SIGSEGV} questo è un
-  segnale che viene generato di solito quando si dereferenzia un puntatore non
-  inzializzato, la differenza con con \texttt{SIGSEGV} è che questo indica un
-  accesso non valido su un indirizzo esistente (tipo fuori dallo heap o dallo
-  stack), mentre \texttt{SIGBUS} indica l'accesso ad un indirizzo non valido,
-  come nel caso di un puntatore non allineato. 
-\item \texttt{SIGABRT} Il segnale indica che il programma stesso ha rilevato
-  un errore che viene riportato chiamando la funzione \texttt{abort} che
-  genera questo segnale. 
+\item \texttt{SIGBUS} Il nome deriva da \textit{bus error}. Come
+  \texttt{SIGSEGV} questo è un segnale che viene generato di solito quando si
+  dereferenzia un puntatore non inzializzato, la differenza è
+  che\texttt{SIGSEGV} indica un accesso non permesso su un indirizzo esistente
+  (tipo fuori dallo heap o dallo stack), mentre \texttt{SIGBUS} indica
+  l'accesso ad un indirizzo non valido, come nel caso di un puntatore non
+  allineato.
+\item \texttt{SIGABRT} Il nome deriva da \textit{abort}. Il segnale indica che
+  il programma stesso ha rilevato un errore che viene riportato chiamando la
+  funzione \texttt{abort} che genera questo segnale.
 \item \texttt{SIGTRAP} È il segnale generato da un'istruzione di breakpoint o
   dall'attivazione del tracciamento per il processo. È usato dai programmi per
   il debugging e se un programma normale non dovrebbe ricevere questo segnale.
-\item \texttt{SIGSYS} Sta ad indicare che si è eseguta una istruzione che
+\item \texttt{SIGSYS} Sta ad indicare che si è eseguita una istruzione che
   richiede l'esecuzione di una system call, ma si è fornito un codice
   sbagliato per quest'ultima.
 \end{description}
@@ -447,29 +448,70 @@ periferica).
 L'azione di default di questi segnali è di terminare il processo, questi
 segnali sono:
 \begin{description}
-\item \macro{SIGTERM} Questo è un segnale generico usato per causare la
-  conclusione di un programma. Al contrario di \macro{SIGKILL} può essere
-  intercettato, ignorato, bloccato. In genere lo si usa per chiedere in
-  maniera ``educata'' ad un processo di concludersi.
-\item \macro{SIGINT} E il segnale di interruzione per il programma. È quello
-  che viene generato di default dal comando \cmd{kill} o dall'invio sul
-  terminale del carattere di interrupt (generato dalla sequenza \macro{C-\\}).
-\item  \macro{SIGQUIT} 
-\item  \macro{SIGKILL}
-\item  \macro{SIGHUP}
+\item \macro{SIGTERM} Il nome sta per \textit{terminate}. È un segnale
+  generico usato per causare la conclusione di un programma. Al contrario di
+  \macro{SIGKILL} può essere intercettato, ignorato, bloccato. In genere lo si
+  usa per chiedere in maniera ``educata'' ad un processo di concludersi.
+\item \macro{SIGINT} Il nome sta per \textit{interrupt}. È il segnale di
+  interruzione per il programma. È quello che viene generato di default dal
+  comando \cmd{kill} o dall'invio sul terminale del carattere di controllo
+  INTR (interrupt, generato dalla sequenza \macro{C-c}).
+\item  \macro{SIGQUIT} È analogo a \macro{SIGINT} con la differenze che è
+  controllato da un'altro carattere di controllo, QUIT, corrispondente alla
+  sequenza \macro{C-\\}. A differenza del precedente l'azione di default,
+  oltre alla terminazione del processo, comporta anche la creazione di un cor
+  dump. 
+
+  In genere lo si può pensare come corrispondente ad una condizione di
+  errore del programma rilevata dall'utente. Per questo motivo non è opportuno
+  fare eseguire al manipolatore di questo segnale le operazioni di pulizia
+  normalmente previste (tipo la cancellazione di file temporanei), dato che in
+  certi casi esse possono eliminare informazioni utili nell'esame dei core
+  dump. 
+\item \macro{SIGKILL} Il nomeè utilizzato per terminare in maniera immediata
+  qualunque programma. Questo segnale non può essere né intercettato, né
+  ignorato, né bloccato, per cui causa comunque la terminazione del processo.
+  In genere esso viene generato solo per richiesta esplicita dell'utente dal
+  comando (o tramite la funzione) \cmd{kill}. Dato che non lo si può
+  intercettare è sempre meglio usarlo come ultima risorsa quando metodi meno
+  brutali, come \macro{SIGTERM} o \macro{C-c} non funzionano. 
+
+  Se un processo non risponde a nessun altro segnale \macro{SIGKILL} ne causa
+  sempre la terminazione (in effetti il fallimento della terminazione di un
+  processo da parte di \macro{SIGKILL} costituirebbe un funzionamento del
+  kernel). Talvolta è il sistema stesso che può generare questo segnale quando
+  per condizioni particolari il processo non può più essere eseguito neanche
+  per eseguire il manipolatore.
+\item \macro{SIGHUP} Il nome sta per \textit{hang-up}. Segnala che il
+  terminale dell'utente si è disconnesso (ad esempio perché si è interrotta la
+  rete). Viene usato anche per riportare la terminazione del processo di
+  controllo di un terminale a tutti i processi della sessione, in modo che
+  essi possano disconnettersi dal relativo terminale. 
+  
+  Viene inoltre usato in genere per segnalare ai demoni (che non hanno un
+  terminale di controllo) la necessità di reinizializzarsi e rileggere il/i
+  file di configurazione.
 \end{description}
 
 \subsection{I segnali di allarme}
 \label{sec:sig_alarm}
 
-Questi segnali sono generati dalla scadenza di un temporizzatore. Il loro
-comportamento di default è quello di causare la terminazione del programma, ma
-con questi segnali la scelta di default è irrilevante, in quanto il loro uso
-presuppone sempre la necessità di un manipolatore.  Questi segnali sono:
+Questi segnali sono generati dalla scadenza di un timer. Il loro comportamento
+di default è quello di causare la terminazione del programma, ma con questi
+segnali la scelta di default è irrilevante, in quanto il loro uso presuppone
+sempre la necessità di un manipolatore.  Questi segnali sono:
 \begin{description}
-\item  \texttt{SIGALRM}
-\item  \texttt{SIGVTALRM}
-\item  \texttt{SIGPROF}
+\item \texttt{SIGALRM} Il nome sta per \textit{alarm}. Segnale la scadenza di
+  un timer misurato sul tempo reale o sull'orologio di sistema. È normalente
+  usato dalla funzione \func{alarm}.
+\item  \texttt{SIGVTALRM} Il nome sta per \textit{virtual alarm}. È analogo al
+  precedente ma segnala la scadenza di un timer sul tempo di CPU usato dal
+  processo. 
+\item \texttt{SIGPROF} Il nome sta per \textit{profiling}. Indica la scadenza
+  di un timer che misura sia il tempo di CPU speso direttamente dal processo
+  che quello che il sistema ha speso per conto di quest'utlimo. In genere
+  viene usato dai tool che servono a fare il profilo d'uso della CPU da parte
+  del processo.
 \end{description}
 
 
@@ -482,24 +524,55 @@ generare questi segnali.
 
 L'azione di default è di essere ignorati. Questi segnali sono:
 \begin{description}
-\item  \texttt{SIGIO}
-\item  \texttt{SIGURG}
-\item  \texttt{SIGPOLL}
+\item \texttt{SIGIO} Questo segnale viene inviato quando un file descriptor è
+  pronto per eseguire dell'input/output. In molti sistemi solo i socket e i
+  terminali possono generare questo segnale, in Linux questo può essere usato
+  anche per i file, posto che la \func{fcntl} abbia avuto successo.
+\item \texttt{SIGURG} Questo segnale è inviato quando arrivano dei dati
+  urgenti o \textit{out of band} su di un socket; per maggiori dettagli al
+  proposito si veda \secref{sec:xxx_urgent_data}.
+\item \texttt{SIGPOLL} Questo segnale è equivalente a \macro{SIGIO}, è
+  definito solo per compatibilità con i sistemi System V.
 \end{description}
 
 \subsection{I segnali per il controllo di sessione}
 \label{sec:sig_job_control}
 
-Questi sono i segnali usati dal controllo di sessione, il loro uso è specifico
-per questo argomento e verrà trattato quando lo affronteremo. 
-Questi  segnali sono:
-\begin{description}
-\item  \texttt{SIGCHLD}
-\item  \texttt{SIGCONT}
-\item  \texttt{SIGSTOP}
-\item  \texttt{SIGTSTP}
-\item  \texttt{SIGTTIN}
-\item  \texttt{SIGTTOU}
+Questi sono i segnali usati dal controllo delle sessioni e dei processi, il
+loro uso è specifico e viene trattato in maniera specifica nelle sezioni in
+cui si trattano gli argomenti relativi.  Questi segnali sono:
+\begin{description} 
+\item \macro{SIGCHLD} Questo è il segnale mandato al processo padre quando un
+  figlio termina o viene fermato. L'azione di default è di ignorare il
+  segnale, la sua gestione è trattata in \secref{sec:prochand_wait}.
+\item \macro{SIGCLD} Per Linux questo è solo un segnale identico al
+  precedente, il nome è obsoleto e andrebbe evitato. 
+\item \macro{SIGCONT} Il nome sta per \textit{continue}. Il segnale viene
+  usato per fare ripartire un programma precedentemente fermato da
+  \macro{SIGSTOP}. Questo segnale ha un comportamento speciale, e fa sempre
+  ripartire il processo prima della sua consegna. Il comportamento di default
+  è di fare solo questo; il segnale non può essere bloccato. Si può anche
+  installare un manipolatore, ma il segnale provoca comunque il riavvio del
+  processo.
+  
+  La maggior pare dei programmi non hanno necessità di intercettare il
+  segnale, in quanto esso è completamente trasparente rispetto all'esecuzione
+  che riparte senza che il programma noti niente. Si possono installare dei
+  manipolatori per far si che un programma produca una qualche azione speciale
+  se viene fermato e riavviato, come per esempio riscrivere un prompt, o
+  inviare un avviso. 
+\item \macro{SIGSTOP} Il segnale ferma un processo (lo porta in uno stato di
+  sleep); il segnale non può essere né intercettato, né ignorato, né bloccato.
+\item \macro{SIGTSTP} Il nome sta per \textit{interactive stop}. Il segnale
+  ferma il processo interattivamente, ed è generato dal carattere SUSP
+  (prodotto dalla combinazione \macro{C-z}), ed al contrario di
+  \macro{SIGSTOP} può essere intercettato e ignorato. In genere un programma
+  installa un manipolatore per questo segnale quando vuole lasciare il sistema
+  o il terminale in uno stato definito prima di fermarsi; se per esempio un
+  programma ha disabilitato l'eco sul terminale può installare un manipolatore
+  per riabilitarlo prima di fermarsi.
+\item \macro{SIGTTIN} 
+\item \macro{SIGTTOU}
 \end{description}
 
 \subsection{I segnali di operazioni errate}