From 85e7b3ed7aafdb66a7feda150f68649915a5e85d Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Mon, 8 Jun 2009 15:34:25 +0000 Subject: [PATCH] Materiale scritto a nizza --- process.tex | 76 ++++++++++++++++++++++++++++++++-------------------- prochand.tex | 7 +++-- 2 files changed, 52 insertions(+), 31 deletions(-) diff --git a/process.tex b/process.tex index 98c9b8d..7c104bc 100644 --- a/process.tex +++ b/process.tex @@ -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} diff --git a/prochand.tex b/prochand.tex index fc07b7d..5008403 100644 --- a/prochand.tex +++ b/prochand.tex @@ -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 -- 2.30.2