Aggiornamenti vari.
[gapil.git] / signal.tex
index f6ca908c2d04f21ced56256fe02305144271a9c4..159ba62cacb325df81ed98c2cd84de84899ee217 100644 (file)
@@ -1,6 +1,6 @@
 %% signal.tex
 %%
-%% Copyright (C) 2000-2014 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2015 Simone Piccardi.  Permission is granted to
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Un preambolo",
@@ -134,9 +134,9 @@ Si dice che il segnale viene \textsl{consegnato} al processo (dall'inglese
 \textit{delivered}) quando viene eseguita l'azione per esso prevista, mentre
 per tutto il tempo che passa fra la generazione del segnale e la sua consegna
 esso è detto \textsl{pendente} (o \textit{pending}). In genere questa
-procedura viene effettuata dallo \itindex{scheduler} scheduler quando,
-riprendendo l'esecuzione del processo in questione, verifica la presenza del
-segnale nella \struct{task\_struct} e mette in esecuzione il gestore.
+procedura viene effettuata dallo \textit{scheduler} quando, riprendendo
+l'esecuzione del processo in questione, verifica la presenza del segnale nella
+\struct{task\_struct} e mette in esecuzione il gestore.
 
 In questa semantica un processo ha la possibilità di bloccare la consegna dei
 segnali, in questo caso, se l'azione per il suddetto segnale non è quella di
@@ -217,11 +217,10 @@ verrà notificato al processo o verrà specificata come azione quella di
 ignorarlo.
 
 Normalmente l'invio al processo che deve ricevere il segnale è immediato ed
-avviene non appena questo viene rimesso in esecuzione dallo
-\itindex{scheduler} scheduler che esegue l'azione specificata. Questo a meno
-che il segnale in questione non sia stato bloccato prima della notifica, nel
-qual caso l'invio non avviene ed il segnale resta \textsl{pendente}
-indefinitamente. 
+avviene non appena questo viene rimesso in esecuzione dallo \textit{scheduler}
+che esegue l'azione specificata. Questo a meno che il segnale in questione non
+sia stato bloccato prima della notifica, nel qual caso l'invio non avviene ed
+il segnale resta \textsl{pendente} indefinitamente.
 
 Quando lo si sblocca un segnale \textsl{pendente} sarà subito notificato. Si
 tenga presente però che tradizionalmente i segnali \textsl{pendenti} non si
@@ -287,12 +286,12 @@ l'immagine della memoria del processo.
 
 Questo file costituisce il cosiddetto \textit{core dump}, e contenendo
 l'immagine della memoria del processo, consente di risalire allo stato dello
-\itindex{stack} \textit{stack} (vedi sez.~\ref{sec:proc_mem_layout}) prima
-della terminazione. Questo permette di esaminare il contenuto del file un
-secondo tempo con un apposito programma (un \textit{debugger} come \cmd{gdb})
-per investigare sulla causa dell'errore, ed in particolare, grazie appunto ai
-dati dello \itindex{stack} \textit{stack}, consente di identificare quale
-funzione ha causato l'errore.
+\textit{stack} (vedi sez.~\ref{sec:proc_mem_layout}) prima della
+terminazione. Questo permette di esaminare il contenuto del file un secondo
+tempo con un apposito programma (un \textit{debugger} come \cmd{gdb}) per
+investigare sulla causa dell'errore, ed in particolare, grazie appunto ai dati
+dello \textit{stack}, consente di identificare quale funzione ha causato
+l'errore.
 
 Si tenga presente che il \textit{core dump} viene creato non solo in caso di
 errore effettivo, ma anche se il segnale per cui la sua creazione è prevista
@@ -447,7 +446,7 @@ tab.~\ref{tab:sig_action_leg}).
     \hline
     T & L'azione predefinita è terminare il processo.\\
     C & L'azione predefinita è terminare il processo e scrivere un 
-        \itindex{core~dump} \textit{core dump}.\\
+        \textit{core dump}.\\
     I & L'azione predefinita è ignorare il segnale.\\
     S & L'azione predefinita è fermare il processo.\\
     \hline
@@ -495,9 +494,9 @@ gestore non ci fosse stato.
 
 L'azione predefinita per tutti questi segnali è causare la terminazione del
 processo che li ha causati. In genere oltre a questo il segnale provoca pure
-la registrazione su disco di un file di \itindex{core~dump} \textit{core
-  dump}, che un debugger può usare per ricostruire lo stato del programma al
-momento della terminazione.  Questi segnali sono:
+la registrazione su disco di un file di \textit{core dump}, che un debugger
+può usare per ricostruire lo stato del programma al momento della
+terminazione.  Questi segnali sono:
 \begin{basedescript}{\desclabelwidth{2.0cm}}
 \item[\signal{SIGFPE}] Riporta un errore aritmetico fatale. Benché il nome
   derivi da \textit{floating point exception} si applica a tutti gli errori
@@ -591,13 +590,12 @@ processo, questi segnali sono:
   controllato da un altro carattere di controllo, ``\textit{QUIT}'',
   corrispondente alla sequenza \texttt{C-\bslash} sulla tastiera. A differenza
   del precedente l'azione predefinita, oltre alla terminazione del processo,
-  comporta anche la creazione di un \itindex{core~dump} \textit{core 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 gestore 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 \itindex{core~dump}
-  \textit{core dump}.
+  comporta anche la creazione di un \textit{core 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
+  gestore 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 \textit{core dump}.
 
 \item[\signal{SIGKILL}] Il nome è utilizzato per terminare in maniera immediata
   qualunque programma. Questo segnale non può essere né intercettato, né
@@ -757,15 +755,14 @@ quella di terminare il processo, questi segnali sono:
   tempo di CPU disponibile, vedi sez.~\ref{sec:sys_resource_limit}. Fino al
   kernel 2.2 terminava semplicemente il processo, a partire dal kernel 2.4,
   seguendo le indicazioni dello standard POSIX.1-2001 viene anche generato un
-  \itindex{core~dump} \textit{core dump}.
+  \textit{core dump}.
 
 \item[\signal{SIGXFSZ}] Sta per \textit{File size limit exceeded}. Questo
   segnale è generato quando un processo tenta di estendere un file oltre le
   dimensioni specificate dal limite impostato per le dimensioni massime di un
   file, vedi sez.~\ref{sec:sys_resource_limit}.  Fino al kernel 2.2 terminava
   semplicemente il processo, a partire dal kernel 2.4, seguendo le indicazioni
-  dello standard POSIX.1-2001 viene anche generato un \itindex{core~dump}
-  \textit{core dump}.
+  dello standard POSIX.1-2001 viene anche generato un \textit{core dump}.
 
 \item[\signal{SIGLOST}] Sta per \textit{Resource lost}. Tradizionalmente è il
   segnale che viene generato quando si perde un advisory lock su un file su
@@ -1655,15 +1652,16 @@ esecuzione). Per questo motivo il valore restituito in \param{rem} è sempre
 arrotondato al multiplo successivo di 1/\const{HZ}. 
 
 Con i kernel della serie 2.4 in realtà era possibile ottenere anche pause più
-precise del centesimo di secondo usando politiche di \itindex{scheduler}
-scheduling \textit{real-time} come \const{SCHED\_FIFO} o \const{SCHED\_RR}; in
-tal caso infatti il calcolo sul numero di interruzioni del timer veniva
-evitato utilizzando direttamente un ciclo di attesa con cui si raggiungevano
-pause fino ai 2~ms con precisioni del $\mu$s. Questa estensione è stata
-rimossa con i kernel della serie 2.6, che consentono una risoluzione più alta
-del timer di sistema; inoltre a partire dal kernel 2.6.21, \func{nanosleep}
-può avvalersi del supporto dei timer ad alta risoluzione, ottenendo la massima
-precisione disponibile sull'hardware della propria macchina.
+precise del centesimo di secondo usando politiche di \textit{scheduling}
+\textit{real-time} come \const{SCHED\_FIFO} o \const{SCHED\_RR} (vedi
+sez.~\ref{sec:proc_real_time}); in tal caso infatti il calcolo sul numero di
+interruzioni del timer veniva evitato utilizzando direttamente un ciclo di
+attesa con cui si raggiungevano pause fino ai 2~ms con precisioni del
+$\mu$s. Questa estensione è stata rimossa con i kernel della serie 2.6, che
+consentono una risoluzione più alta del timer di sistema; inoltre a partire
+dal kernel 2.6.21, \func{nanosleep} può avvalersi del supporto dei timer ad
+alta risoluzione, ottenendo la massima precisione disponibile sull'hardware
+della propria macchina.
 
 
 \subsection{Un esempio elementare}
@@ -2212,7 +2210,7 @@ altre informazioni specifiche.
     \const{SI\_SIGIO}  & Segnale di \signal{SIGIO} da una coda (vedi
                          sez.~\ref{sec:file_asyncronous_operation}).\\ 
     \const{SI\_TKILL}  & Inviato da \func{tkill} o \func{tgkill} (vedi
-                         sez.~\ref{cha:threads_xxx}), introdotto con il kernel
+                         sez.~\ref{cha:thread_xxx}), introdotto con il kernel
                          2.4.19.\\ 
     \hline
   \end{tabular}
@@ -2669,15 +2667,15 @@ segnali che presenta dei significativi miglioramenti,\footnote{questa
   versione 2.1 della \acr{glibc}.} in particolare sono stati superati tre
 limiti fondamentali dei segnali classici:
 \begin{basedescript}{\desclabelwidth{1cm}\desclabelstyle{\nextlinelabel}}
-\item[I segnali non sono accumulati
+\item[\textbf{I segnali non sono accumulati}
   se più segnali vengono generati prima dell'esecuzione di un gestore
   questo sarà eseguito una sola volta, ed il processo non sarà in grado di
   accorgersi di quante volte l'evento che ha generato il segnale è accaduto.
-\item[I segnali non trasportano informazione]   
+\item[\textbf{I segnali non trasportano informazione}]   
   i segnali classici non prevedono altra informazione sull'evento
   che li ha generati se non il fatto che sono stati emessi (tutta
   l'informazione che il kernel associa ad un segnale è il suo numero).
-\item[I segnali non hanno un ordine di consegna
+\item[\textbf{I segnali non hanno un ordine di consegna}
   l'ordine in cui diversi segnali vengono consegnati è casuale e non
   prevedibile. Non è possibile stabilire una priorità per cui la reazione a
   certi segnali ha la precedenza rispetto ad altri.