X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=process.tex;h=df94444f153016202640e3ac052cbac9c53ecb80;hp=d3fe9c504020b81433a0c5b6fd372e919a8d72cf;hb=4e1da5b259a86278710be32441de7b88b9287ec1;hpb=8a9eb0b97e2e52a5774b5aca4b20bd7cf29759ee diff --git a/process.tex b/process.tex index d3fe9c5..df94444 100644 --- a/process.tex +++ b/process.tex @@ -851,27 +851,47 @@ però non è standardizzata da POSIX e pertanto non è disponibile su tutte le versioni di kernel unix-like;\footnote{nel caso di Linux devono essere comunque definite le macro \macro{\_BSD\_SOURCE} e \macro{\_SVID\_SOURCE}.} il suo prototipo è: -\begin{functions} - \headdecl{unistd.h} - \headdecl{sys/mman.h} +% \begin{functions} +% \headdecl{unistd.h} +% \headdecl{sys/mman.h} - \funcdecl{int mincore(void *addr, size\_t length, unsigned char *vec)} - Ritorna lo stato delle pagine di memoria occupate da un processo. +% \funcdecl{int mincore(void *addr, size\_t length, unsigned char *vec)} +% Ritorna lo stato delle pagine di memoria occupate da un processo. - \bodydesc{La funzione ritorna 0 in caso di successo e $-1$ in caso di - errore, nel qual caso \var{errno} assumerà uno dei valori seguenti: - \begin{errlist} - \item[\errcode{ENOMEM}] o \param{addr} + \param{length} eccede la dimensione - della memoria usata dal processo o l'intervallo di indirizzi specificato - non è mappato. - \item[\errcode{EINVAL}] \param{addr} non è un multiplo delle dimensioni di - una pagina. - \item[\errcode{EFAULT}] \param{vec} punta ad un indirizzo non valido. - \item[\errcode{EAGAIN}] il kernel è temporaneamente non in grado di fornire - una risposta. - \end{errlist} +% \bodydesc{La funzione ritorna 0 in caso di successo e $-1$ in caso di +% errore, nel qual caso \var{errno} assumerà uno dei valori seguenti: +% \begin{errlist} +% \item[\errcode{ENOMEM}] o \param{addr} + \param{length} eccede la dimensione +% della memoria usata dal processo o l'intervallo di indirizzi specificato +% non è mappato. +% \item[\errcode{EINVAL}] \param{addr} non è un multiplo delle dimensioni di +% una pagina. +% \item[\errcode{EFAULT}] \param{vec} punta ad un indirizzo non valido. +% \item[\errcode{EAGAIN}] il kernel è temporaneamente non in grado di fornire +% una risposta. +% \end{errlist} +% } +% \end{functions} + +\begin{funcproto}{ +\fhead{unistd.h} +\fhead{sys/mman.h} +\fdecl{int mincore(void *addr, size\_t length, unsigned char *vec)} +\fdesc{Ritorna lo stato delle pagine di memoria occupate da un processo.} } -\end{functions} +{La funzione ritorna 0 in caso di successo e $-1$ in caso di errore, nel qual +caso \var{errno} assumerà uno dei valori seguenti: +\begin{errlist} + \item[\errcode{ENOMEM}] o \param{addr} + \param{length} eccede la dimensione + della memoria usata dal processo o l'intervallo di indirizzi specificato + non è mappato. + \item[\errcode{EINVAL}] \param{addr} non è un multiplo delle dimensioni di + una pagina. + \item[\errcode{EFAULT}] \param{vec} punta ad un indirizzo non valido. + \item[\errcode{EAGAIN}] il kernel è temporaneamente non in grado di fornire + una risposta. +\end{errlist}} +\end{funcproto} La funzione permette di ottenere le informazioni sullo stato della mappatura della memoria per il processo chiamante, specificando l'intervallo da @@ -960,16 +980,39 @@ fintanto che ci sarà almeno un processo che la blocca. Le funzioni per bloccare e sbloccare la \index{paginazione} paginazione di singole sezioni di memoria sono \funcd{mlock} e \funcd{munlock}; i loro prototipi sono: -\begin{functions} - \headdecl{sys/mman.h} +% \begin{functions} +% \headdecl{sys/mman.h} - \funcdecl{int mlock(const void *addr, size\_t len)} - Blocca la paginazione su un intervallo di memoria. +% \funcdecl{int mlock(const void *addr, size\_t len)} +% Blocca la paginazione su un intervallo di memoria. - \funcdecl{int munlock(const void *addr, size\_t len)} - Rimuove il blocco della paginazione su un intervallo di memoria. +% \funcdecl{int munlock(const void *addr, size\_t len)} +% Rimuove il blocco della paginazione su un intervallo di memoria. - \bodydesc{Entrambe le funzioni ritornano 0 in caso di successo e $-1$ in +% \bodydesc{Entrambe le funzioni ritornano 0 in caso di successo e $-1$ in +% caso di errore, nel qual caso \var{errno} assumerà uno dei +% valori seguenti: +% \begin{errlist} +% \item[\errcode{ENOMEM}] alcuni indirizzi dell'intervallo specificato non +% corrispondono allo spazio di indirizzi del processo o si è ecceduto +% il numero massimo consentito di pagine bloccate. +% \item[\errcode{EINVAL}] \param{len} non è un valore positivo. +% \item[\errcode{EPERM}] con un kernel successivo al 2.6.9 il processo non è +% privilegiato e si un limite nullo per \const{RLIMIT\_MEMLOCK}. +% \end{errlist} +% e, per \func{mlock}, anche \errval{EPERM} quando il processo non ha i +% privilegi richiesti per l'operazione.} +% \end{functions} + +\begin{funcproto}{ + \fhead{sys/mman.h} + \fdecl{int mlock(const void *addr, size\_t len)} + \fdesc{Blocca la paginazione su un intervallo di memoria.} + + \fdecl{int munlock(const void *addr, size\_t len)} + \fdesc{Rimuove il blocco della paginazione su un intervallo di memoria.} + } +{Entrambe le funzioni ritornano 0 in caso di successo e $-1$ in caso di errore, nel qual caso \var{errno} assumerà uno dei valori seguenti: \begin{errlist} @@ -982,7 +1025,8 @@ prototipi sono: \end{errlist} e, per \func{mlock}, anche \errval{EPERM} quando il processo non ha i privilegi richiesti per l'operazione.} -\end{functions} +\end{funcproto} + Le due funzioni permettono rispettivamente di bloccare e sbloccare la \index{paginazione} paginazione per l'intervallo di memoria specificato dagli @@ -1360,9 +1404,9 @@ ritornato il carattere \texttt{':'}, infine se viene incontrato il valore \texttt{'-{}-'} la scansione viene considerata conclusa, anche se vi sono altri elementi di \param{argv} che cominciano con il carattere \texttt{'-'}. -\begin{figure}[htb] +\begin{figure}[!htbp] \footnotesize \centering - \begin{minipage}[c]{15.6cm} + \begin{minipage}[c]{\codesamplewidth} \includecodesample{listati/option_code.c} \end{minipage} \normalsize @@ -2111,9 +2155,8 @@ seconda di come i singoli bit vengono aggregati per formare le variabili intere (ed in genere in diretta corrispondenza a come sono poi in realtà cablati sui bus interni del computer). -\begin{figure}[htb] - \centering - \includegraphics[height=3cm]{img/endianess} +\begin{figure}[!htb] + \centering \includegraphics[height=3cm]{img/endianess} \caption{Schema della disposizione dei dati in memoria a seconda della \textit{endianess}.} \label{fig:sock_endianess} @@ -2178,9 +2221,9 @@ in genere resta sempre lo stesso,\footnote{su architettura PowerPC è possibile cambiarlo, si veda sez.~\ref{sec:process_prctl}.} anche quando il processore permetterebbe di eseguire questi cambiamenti. -\begin{figure}[htb] +\begin{figure}[!htbp] \footnotesize \centering - \begin{minipage}[c]{15cm} + \begin{minipage}[c]{\codesamplewidth} \includecodesample{listati/endian.c} \end{minipage} \normalsize