Materiale scritto a nizza
authorSimone Piccardi <piccardi@gnulinux.it>
Mon, 8 Jun 2009 15:34:25 +0000 (15:34 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Mon, 8 Jun 2009 15:34:25 +0000 (15:34 +0000)
process.tex
prochand.tex

index 98c9b8d2ad520db0f036f902f46d2495901d4bf9..7c104bc36ffa6df64c51f1e217b14b773de7e3b5 100644 (file)
@@ -1123,8 +1123,7 @@ funzioni precedenti, ma a differenza di \func{memalign} restituisce un codice
 di errore \errcode{EINVAL} anche se \param{alignment} non è un multiplo della
 la dimensione di \code{sizeof(void *)}. Come per le precedenti la memoria
 allocata con \func{posix\_memalign} può essere disallocata con
 di errore \errcode{EINVAL} anche se \param{alignment} non è un multiplo della
 la dimensione di \code{sizeof(void *)}. Come per le precedenti la memoria
 allocata con \func{posix\_memalign} può essere disallocata con
-\func{free}.\footnote{che in caso questo caso è quanto richiesto dallo
-  standard.}
+\func{free}.\footnote{che in questo caso è quanto richiesto dallo standard.}
 
 Un secondo caso in cui risulta estremamente utile poter avere un maggior
 controllo delle modalità di allocazione della memoria è quello in cui cercano
 
 Un secondo caso in cui risulta estremamente utile poter avere un maggior
 controllo delle modalità di allocazione della memoria è quello in cui cercano
@@ -1176,48 +1175,67 @@ argomento, che verr
 di \func{malloc}, venissero trovate delle inconsistenze, come delle operazioni
 di scrittura oltre i limiti dei buffer allocati. Per questo motivo la funzione
 deve essere chiamata prima di qualunque allocazione di memoria, altrimenti
 di \func{malloc}, venissero trovate delle inconsistenze, come delle operazioni
 di scrittura oltre i limiti dei buffer allocati. Per questo motivo la funzione
 deve essere chiamata prima di qualunque allocazione di memoria, altrimenti
-fallirà con un valore di ritorni di $-1$.
-
-Se come argomento si passa \var{NULL} verrà utilizzata una funzione
-predefinita che stampa un messaggio di errore ed invoca la funzione
-\func{abort} (vedi sez.~\ref{sec:sig_alarm_abort}), altrimenti si dovrà
-utilizzare una funzione ad hoc che riceverà come argomento un codice di tipo
-\type{mcheck\_status}, un tipo enumerato che può assumere soltanto i valori di
-tab. 
-
+fallirà con un valore di ritorno pari a $-1$.
 
 
+Se come argomento di \func{mcheck} si passa \var{NULL} verrà utilizzata una
+funzione predefinita che stampa un messaggio di errore ed invoca la funzione
+\func{abort} (vedi sez.~\ref{sec:sig_alarm_abort}), altrimenti si dovrà create
+una funzione personalizzata che verrà eseguita ricevendo un unico argomento di
+tipo \type{mcheck\_status},\footnote{trattasi in sostanza di un codice di
+  errore che la funzione di emergenza potrà utilizzare per prendere le
+  opportune azioni.} un tipo enumerato che può assumere soltanto i valori di
+tab.~\ref{tab:mcheck_status_value}.
 
 \begin{table}[htb]
   \centering
   \footnotesize
 
 \begin{table}[htb]
   \centering
   \footnotesize
-  \begin{tabular}[c]{|l|c|c|c|p{7cm}|}
+  \begin{tabular}[c]{|l|p{7cm}|}
     \hline
     \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
     \hline
     \textbf{Valore} & \textbf{Significato} \\
     \hline
     \hline
-    \macro{}& \\
-    \macro{}& \\
-    \macro{}& \\
-    \macro{}& \\
-    \macro{}& \\
-    \macro{}& \\
-    \macro{}& \\
-    \macro{}& \\
-    \macro{}& \\
-    \macro{}& \\
-    \macro{}& \\
-    \macro{}& \\
-    \macro{}& \\
+    \macro{MCHECK\_OK}      & riportato (a \func{mprobe}) se nessuna
+                              inconsistenza è presente.\\
+    \macro{MCHECK\_DISABLED}& riportato (a \func{mprobe}) se si è chiamata
+                              \func{mcheck} dopo aver già usato
+                              \func{malloc}.\\
+    \macro{MCHECK\_HEAD}    & i dati immediatamente precedenti il buffer sono
+                              stati modificati, avviene in genere quando si
+                              decrementa eccessivamente il valore di un
+                              puntatore scrivendo poi prima dell'inizio del
+                              buffer.\\
+    \macro{MCHECK\_TAIL}    & i dati immediatamente seguenti il buffer sono
+                              stati modificati, succede quando si va scrivere
+                              oltre la dimensione correttta del buffer.\\
+    \macro{MCHECK\_FREE}    & il buffer è già stato disallocato.\\
     \hline
   \end{tabular}
     \hline
   \end{tabular}
-  \caption{Valori dello stato.} 
+  \caption{Valori dello stato dell'allocazione di memoria ottenibili dalla
+    funzione di teminazione installata con \func{mcheck}.} 
   \label{tab:mcheck_status_value}
 \end{table}
 
   \label{tab:mcheck_status_value}
 \end{table}
 
+Una volta che si sia chiamata \func{mcheck} con successo si può anche
+controllare esplicitamente lo stato delle allocazioni (senza aspettare un
+errore nelle relative funzioni) utilizzando la funzione \funcd{mprobe}, il cui
+prototipo è:
+\begin{prototype}{mcheck.h}{enum mcheck\_status mprobe(ptr)} 
+  Esegue un controllo di consistenza delle allocazioni.
+  
+  \bodydesc{La funzione restituisce un codice fra quelli riportati in
+    tab.\ref{tab:mcheck_status_value}.}
+\end{prototype}
+
+La funzione richiede che si passi come argomento un puntatore ad un blocco di
+memoria precedentemente allocato con \func{malloc} o \func{realloc}, e
+restituisce lo stesso codice di errore che si avrebbe per la funzione di
+emergenza ad una successiva chiamata di una funzione di allocazione, e poi i
+primi due codici che indicano rispettivamente quando tutto è a posto o il
+controllo non è possibile per non aver chiamato \func{mcheck} in tempo. 
+
 % TODO: trattare le altre funzionalità avanzate di \func{malloc}, mallopt,
 % TODO: trattare le altre funzionalità avanzate di \func{malloc}, mallopt,
-% mtrace, muntrace, mcheck, mallinfo e gli hook
-% con le glibc 2.10 c'è pure malloc_info a sostituire mallinfo, vedi
-% http://udrepper.livejournal.com/20948.html
+% mtrace, muntrace, mallinfo e gli hook con le glibc 2.10 c'è pure malloc_info
+% a sostituire mallinfo, vedi http://udrepper.livejournal.com/20948.html
 
 \section{Argomenti, opzioni ed ambiente di un processo}
 \label{sec:proc_options}
 
 \section{Argomenti, opzioni ed ambiente di un processo}
 \label{sec:proc_options}
index fc07b7d81f36ea974408938411f9f1e835ad8cbc..50084035037e37f61c000910e8d81fd6114b93bf 100644 (file)
@@ -164,7 +164,7 @@ periodico secondo la frequenza specificata dalla costante
 valore è espresso in Hertz.\footnote{a partire dal kernel 2.6.21 è stato
   introdotto (a cura di Ingo Molnar) un meccanismo completamente diverso,
   detto \textit{tickless}, in cui non c'è più una interruzione periodica con
 valore è espresso in Hertz.\footnote{a partire dal kernel 2.6.21 è stato
   introdotto (a cura di Ingo Molnar) un meccanismo completamente diverso,
   detto \textit{tickless}, in cui non c'è più una interruzione periodica con
-  frequenza prefissata, ma ad ogni chiamata del time viene programmata
+  frequenza prefissata, ma ad ogni chiamata del timer viene programmata
   l'interruzione successiva sulla base di una stima; in questo modo si evita
   di dover eseguire un migliaio di interruzioni al secondo anche su macchine
   che non stanno facendo nulla, con un forte risparmio nell'uso dell'energia
   l'interruzione successiva sulla base di una stima; in questo modo si evita
   di dover eseguire un migliaio di interruzioni al secondo anche su macchine
   che non stanno facendo nulla, con un forte risparmio nell'uso dell'energia
@@ -1238,7 +1238,10 @@ campi:
 \item[\var{si\_status}] con lo stato di uscita del figlio o con il segnale che
   lo ha terminato, fermato o riavviato.
 \item[\var{si\_code}] con uno fra \const{CLD\_EXITED}, \const{CLD\_KILLED},
 \item[\var{si\_status}] con lo stato di uscita del figlio o con il segnale che
   lo ha terminato, fermato o riavviato.
 \item[\var{si\_code}] con uno fra \const{CLD\_EXITED}, \const{CLD\_KILLED},
-  \const{CLD\_STOPPED}, \const{CLD\_CONTINUED} (vedi tab.~\ref{xxx_si_code}).
+  \const{CLD\_STOPPED}, \const{CLD\_CONTINUED}, \const{CLD\_TRAPPED} e
+  \const{CLD\_DUMPED} a indicare la ragione del ritorno della funzione,
+  rispettivamente: uscita normale, terminazione da segnale, processo fermato,
+  processo riavviato, processo terminato in \textit{core dump}.
 \end{basedescript}
 
 %TODO mettere riferimento alla tabella giusta (vedere man credentials e man
 \end{basedescript}
 
 %TODO mettere riferimento alla tabella giusta (vedere man credentials e man