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
-\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
@@ -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
-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{tabular}[c]{|l|c|c|c|p{7cm}|}
+  \begin{tabular}[c]{|l|p{7cm}|}
     \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}
-  \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}
 
+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,
-% 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}
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
-  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
@@ -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},
-  \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