Piccole correzioni e completata la parte sui limiti aggiungendo
authorSimone Piccardi <piccardi@gnulinux.it>
Mon, 9 Apr 2012 19:38:07 +0000 (19:38 +0000)
committerSimone Piccardi <piccardi@gnulinux.it>
Mon, 9 Apr 2012 19:38:07 +0000 (19:38 +0000)
prlimit.

prochand.tex
system.tex

index b0144e78a298712eafbeabef0e671ea47b9a03c3..9677726cc2be3bda16d335563d4367e08cab970d 100644 (file)
@@ -1127,9 +1127,10 @@ tradizionalmente gli 8 bit meno significativi sono riservati per memorizzare
 lo \itindex{exit~status} stato di uscita del processo, e gli altri per
 indicare il segnale che ha causato la terminazione (in caso di conclusione
 anomala), uno per indicare se è stato generato un \itindex{core~dump}
 lo \itindex{exit~status} stato di uscita del processo, e gli altri per
 indicare il segnale che ha causato la terminazione (in caso di conclusione
 anomala), uno per indicare se è stato generato un \itindex{core~dump}
-\textit{core dump}, ecc.\footnote{le definizioni esatte si possono trovare in
-  \file{<bits/waitstatus.h>} ma questo file non deve mai essere usato
-  direttamente, esso viene incluso attraverso \file{<sys/wait.h>}.}
+\textit{core dump} (vedi sez.~\ref{sec:sig_standard}), ecc.\footnote{le
+  definizioni esatte si possono trovare in \file{<bits/waitstatus.h>} ma
+  questo file non deve mai essere usato direttamente, esso viene incluso
+  attraverso \file{<sys/wait.h>}.}
 
 \begin{table}[!htb]
   \centering
 
 \begin{table}[!htb]
   \centering
@@ -1318,8 +1319,8 @@ campi:
   \const{CLD\_STOPPED}, \const{CLD\_CONTINUED}, \const{CLD\_TRAPPED} e
   \const{CLD\_DUMPED} a indicare la ragione del ritorno della funzione, il cui
   significato è, nell'ordine: uscita normale, terminazione da segnale,
   \const{CLD\_STOPPED}, \const{CLD\_CONTINUED}, \const{CLD\_TRAPPED} e
   \const{CLD\_DUMPED} a indicare la ragione del ritorno della funzione, il cui
   significato è, nell'ordine: uscita normale, terminazione da segnale,
-  processo fermato, processo riavviato, processo terminato in \textit{core
-    dump}.
+  processo fermato, processo riavviato, processo terminato in
+  \itindex{core~dump} \textit{core dump} (vedi sez.~\ref{sec:sig_standard}).
 \end{basedescript}
 
 Infine Linux, seguendo un'estensione di BSD, supporta altre due funzioni per
 \end{basedescript}
 
 Infine Linux, seguendo un'estensione di BSD, supporta altre due funzioni per
index 5ad544dd23970ac3c0d5a0d08503f2c09811dbaa..313aceb9d83dabc013867276f8214210b95dc32a 100644 (file)
@@ -20,7 +20,7 @@ quelle per la gestione ed il controllo dei filesystem, degli utenti, dei tempi
 e degli errori.
 
 
 e degli errori.
 
 
-\section{La gestione di catteristiche e parametri del sistema}
+\section{La gestione di caratteristiche e parametri del sistema}
 \label{sec:sys_characteristics}
 
 In questa sezione tratteremo le varie modalità con cui un programma può
 \label{sec:sys_characteristics}
 
 In questa sezione tratteremo le varie modalità con cui un programma può
@@ -883,7 +883,7 @@ sistema del \itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch} e
 sono completamente generiche. Si noti però che non c'è una funzione che
 permetta di impostare direttamente una password.\footnote{in realtà questo può
   essere fatto ricorrendo alle funzioni della libreria PAM, ma questo non è un
 sono completamente generiche. Si noti però che non c'è una funzione che
 permetta di impostare direttamente una password.\footnote{in realtà questo può
   essere fatto ricorrendo alle funzioni della libreria PAM, ma questo non è un
-  argomento che trattremo qui.} Dato che POSIX non prevede questa possibilità
+  argomento che tratteremo qui.} Dato che POSIX non prevede questa possibilità
 esiste un'altra interfaccia che lo fa, derivata da SVID le cui funzioni sono
 riportate in tab.~\ref{tab:sys_passwd_func}. Questa interfaccia però funziona
 soltanto quando le informazioni sono mantenute su un apposito file di
 esiste un'altra interfaccia che lo fa, derivata da SVID le cui funzioni sono
 riportate in tab.~\ref{tab:sys_passwd_func}. Questa interfaccia però funziona
 soltanto quando le informazioni sono mantenute su un apposito file di
@@ -1048,7 +1048,7 @@ fig.~\ref{fig:sys_utmp_struct}. Le prime tre funzioni servono per leggere una
 voce dal registro: \func{getutent} legge semplicemente la prima voce
 disponibile, le altre due permettono di eseguire una ricerca. Aprendo il
 registro con \func{setutent} ci si posiziona al suo inizio, ogni chiamata di
 voce dal registro: \func{getutent} legge semplicemente la prima voce
 disponibile, le altre due permettono di eseguire una ricerca. Aprendo il
 registro con \func{setutent} ci si posiziona al suo inizio, ogni chiamata di
-queste funzioni eseguirà la lettura sulle voci seguenti, portanto la posizione
+queste funzioni eseguirà la lettura sulle voci seguenti, pertanto la posizione
 sulla voce appena letta, in modo da consentire una scansione del file. Questo
 vale anche per \func{getutid} e \func{getutline}, il che comporta che queste
 funzioni effettuano comunque una ricerca ``\textsl{in avanti}''.
 sulla voce appena letta, in modo da consentire una scansione del file. Questo
 vale anche per \func{getutid} e \func{getutline}, il che comporta che queste
 funzioni effettuano comunque una ricerca ``\textsl{in avanti}''.
@@ -1203,7 +1203,7 @@ lo spegnimento effettivo della macchina, occorre che il kernel effettui le
 opportune operazioni interagendo con il BIOS ed i dispositivi che controllano
 l'erogazione della potenza.
 
 opportune operazioni interagendo con il BIOS ed i dispositivi che controllano
 l'erogazione della potenza.
 
-Ia funzione di sistema che controlla lo spegnimento ed il riavvio (ed altri
+La funzione di sistema che controlla lo spegnimento ed il riavvio (ed altri
 aspetti della relativa procedura) è \funcd{reboot},\footnote{la funzione
   illustrata è quella fornita dalla \acr{glibc} che maschera i dettagli di
   basso livello della \textit{system call} la quale richiede attualmente tre
 aspetti della relativa procedura) è \funcd{reboot},\footnote{la funzione
   illustrata è quella fornita dalla \acr{glibc} che maschera i dettagli di
   basso livello della \textit{system call} la quale richiede attualmente tre
@@ -1266,7 +1266,7 @@ illustra i comandi attualmente disponibili:
   kernel che è stato opportunamente caricato in memoria da una
   \func{kexec\_load} (che tratteremo a breve) eseguita in precedenza. La
   funzionalità è disponibile solo a partire dal kernel 2.6.13 e se il kernel
   kernel che è stato opportunamente caricato in memoria da una
   \func{kexec\_load} (che tratteremo a breve) eseguita in precedenza. La
   funzionalità è disponibile solo a partire dal kernel 2.6.13 e se il kernel
-  corrente è stato compilato inlcudendo il relativo supporto.\footnote{deve
+  corrente è stato compilato includendo il relativo supporto.\footnote{deve
     essere stata abilitata l'opzione di compilazione \texttt{CONFIG\_KEXEC}.}
   Questo meccanismo consente di eseguire una sorta di riavvio rapido che evita
   di dover ripassare dalla inizializzazione da parte del BIOS ed il lancio del
     essere stata abilitata l'opzione di compilazione \texttt{CONFIG\_KEXEC}.}
   Questo meccanismo consente di eseguire una sorta di riavvio rapido che evita
   di dover ripassare dalla inizializzazione da parte del BIOS ed il lancio del
@@ -1285,7 +1285,7 @@ illustra i comandi attualmente disponibili:
   messaggio ``\textit{Restarting system with command '\%s'.}'' ed avviata
   immediatamente la procedura di riavvio usando il comando fornito
   nell'argomento \param{arg} che viene stampato al posto di \textit{'\%s'}
   messaggio ``\textit{Restarting system with command '\%s'.}'' ed avviata
   immediatamente la procedura di riavvio usando il comando fornito
   nell'argomento \param{arg} che viene stampato al posto di \textit{'\%s'}
-  (veniva usato per lanciare un altro programma al posto di \cmd{init}. Nelle
+  (veniva usato per lanciare un altro programma al posto di \cmd{init}). Nelle
   versioni recenti questo argomento viene ignorato ed il riavvio può essere
   controllato dall'argomento di avvio del kernel \texttt{reboot=...}  Se non
   si è eseguita una sincronizzazione dei dati su disco con \func{sync} questi
   versioni recenti questo argomento viene ignorato ed il riavvio può essere
   controllato dall'argomento di avvio del kernel \texttt{reboot=...}  Se non
   si è eseguita una sincronizzazione dei dati su disco con \func{sync} questi
@@ -1295,7 +1295,7 @@ illustra i comandi attualmente disponibili:
 
 Come appena illustrato usando il comando \const{LINUX\_REBOOT\_CMD\_KEXEC} si
 può eseguire un riavvio immediato pre-caricando una immagine del kernel, che
 
 Come appena illustrato usando il comando \const{LINUX\_REBOOT\_CMD\_KEXEC} si
 può eseguire un riavvio immediato pre-caricando una immagine del kernel, che
-verrà eseguita direttettamente. Questo meccanismo consente di evitare la
+verrà eseguita direttamente. Questo meccanismo consente di evitare la
 reinizializzazione della macchina da parte del BIOS, ed oltre a velocizzare un
 eventuale riavvio, ha il vantaggio poter accedere allo stato corrente della
 macchina e della memoria, per cui viene usato spesso per installare un kernel
 reinizializzazione della macchina da parte del BIOS, ed oltre a velocizzare un
 eventuale riavvio, ha il vantaggio poter accedere allo stato corrente della
 macchina e della memoria, per cui viene usato spesso per installare un kernel
@@ -1348,13 +1348,13 @@ secondi indirizzo e dimensione in \textit{kernel space}.
   \label{fig:kexec_segment}
 \end{figure}
 
   \label{fig:kexec_segment}
 \end{figure}
 
-L'argomento \param{flags} è una maschera binaria che contiene i flag che
-consentono di indicare alcune specifiche relative alle modalità con cui dovrà
-essere eseguito il nuovo kernel. La parte meno significativa viene usata per
-impostare l'architettura di esecuzione, il valore \const{KEXEC\_ARCH\_DEFAULT}
-indica l'architettura corrente, ma se ne può specificare anche una diversa,
-con i valori della seconda parte di tab.~\ref{tab:kexec_load_flags}, e questa
-verrà usato posto che sia effettivamente eseguibile sul proprio processore.
+L'argomento \param{flags} è una maschera binaria contenente i flag che
+consentono di indicare le modalità con cui dovrà essere eseguito il nuovo
+kernel. La parte meno significativa viene usata per impostare l'architettura
+di esecuzione. Il valore \const{KEXEC\_ARCH\_DEFAULT} indica l'architettura
+corrente, ma se ne può specificare anche una diversa, con i valori della
+seconda parte di tab.~\ref{tab:kexec_load_flags}, e questa verrà usato posto
+che sia effettivamente eseguibile sul proprio processore.
 
 \begin{table}[htb]
   \footnotesize
 
 \begin{table}[htb]
   \footnotesize
@@ -1393,13 +1393,12 @@ verrà usato posto che sia effettivamente eseguibile sul proprio processore.
 \end{table}
 
 I due valori più importanti sono però quelli della parte più significativa
 \end{table}
 
 I due valori più importanti sono però quelli della parte più significativa
-di \param{flags} (riportati nella prima sezione di
-tab.~\ref{tab:kexec_load_flags}). Il primo, \const{KEXEC\_ON\_CRASH}, consente
-di impostare l'esecuzione automatica del nuovo kernel caricato in caso di
-crollo del sistema, e viene usato quando si carica un kernel di emergenza da
-utilizzare per poter raccogliere informazioni diagnostiche che altrimenti
-verrebbero perdute non essendo il kernel ordinario più in grado di essere
-eseguito in maniera coerente.  Il secondo valore,
+(riportati nella prima sezione di tab.~\ref{tab:kexec_load_flags}). Il primo,
+\const{KEXEC\_ON\_CRASH}, consente di impostare l'esecuzione automatica del
+nuovo kernel caricato in caso di crollo del sistema, e viene usato quando si
+carica un kernel di emergenza da utilizzare per poter raccogliere informazioni
+diagnostiche che altrimenti verrebbero perdute non essendo il kernel ordinario
+più in grado di essere eseguito in maniera coerente.  Il secondo valore,
 \const{KEXEC\_PRESERVE\_CONTEXT}, indica invece di preservare lo stato dei
 programmi e dei dispositivi, e viene in genere usato per realizzare la
 cosiddetta ibernazione in RAM.
 \const{KEXEC\_PRESERVE\_CONTEXT}, indica invece di preservare lo stato dei
 programmi e dei dispositivi, e viene in genere usato per realizzare la
 cosiddetta ibernazione in RAM.
@@ -1452,24 +1451,10 @@ da BSD 4.3,\footnote{questo non ha a nulla a che fare con il cosiddetto
   processo in maniera molto più dettagliata.} ma attualmente solo alcuni dei
 campi definiti sono effettivamente mantenuti. Con i kernel della serie 2.4 i
 soli campi che sono mantenuti sono: \var{ru\_utime}, \var{ru\_stime},
   processo in maniera molto più dettagliata.} ma attualmente solo alcuni dei
 campi definiti sono effettivamente mantenuti. Con i kernel della serie 2.4 i
 soli campi che sono mantenuti sono: \var{ru\_utime}, \var{ru\_stime},
-\var{ru\_minflt}, \var{ru\_majflt}, e \var{ru\_nswap}. Con i kernel della
-serie 2.6 si aggiungono anche \var{ru\_nvcsw} e \var{ru\_nivcsw}, e a partire
-dal 2.6.22 anche \var{ru\_inblock} e \var{ru\_oublock}.
-
-I campi più utilizzati sono comunque \var{ru\_utime} e \var{ru\_stime} che
-indicano rispettivamente il tempo impiegato dal processo nell'eseguire le
-istruzioni in user space, e quello impiegato dal kernel nelle \textit{system
-  call} eseguite per conto del processo. I campi \var{ru\_minflt} e
-\var{ru\_majflt} servono a quantificare l'uso della memoria
-virtuale\index{memoria~virtuale} e corrispondono rispettivamente al numero di
-\itindex{page~fault} \textit{page fault} (vedi sez.~\ref{sec:proc_mem_gen})
-avvenuti senza richiedere I/O su disco (i cosiddetti \textit{minor page
-  fault}), a quelli che invece han richiesto I/O su disco (detti invece
-\textit{major page fault}), mentre \var{ru\_nswap} ed al numero di volte che
-il processo è stato completamente tolto dalla memoria per essere inserito
-nello swap.
-
-% TODO verificare \var{ru\_nswap} non citato nelle pagine di manuali recenti
+\var{ru\_minflt} e \var{ru\_majflt}. Con i kernel della serie 2.6 si
+aggiungono anche \var{ru\_nvcsw} e \var{ru\_nivcsw}, a partire dal 2.6.22
+anche \var{ru\_inblock} e \var{ru\_oublock} e dal 2.6.32 anche
+\var{ru\_maxrss}.
 
 In genere includere esplicitamente \file{<sys/time.h>} non è più strettamente
 necessario, ma aumenta la portabilità, e serve comunque quando, come nella
 
 In genere includere esplicitamente \file{<sys/time.h>} non è più strettamente
 necessario, ma aumenta la portabilità, e serve comunque quando, come nella
@@ -1497,7 +1482,7 @@ essa può anche essere letta direttamente utilizzando la funzione di sistema
   \begin{errlist}
   \item[\errcode{EINVAL}] l'argomento \param{who} non è valido
   \end{errlist}
   \begin{errlist}
   \item[\errcode{EINVAL}] l'argomento \param{who} non è valido
   \end{errlist}
-  ed inoltre  \errval{EFAULT} nel suo significato generico.
+  ed inoltre \errval{EFAULT} nel suo significato generico.
 }  
 \end{funcproto}
 
 }  
 \end{funcproto}
 
@@ -1534,12 +1519,40 @@ recepita nello standard POSIX.1-2001, che però indica come campi di
   \caption{Valori per l'argomento \param{who} di \func{getrusage}.} 
   \label{tab:getrusage_who}
 \end{table}
   \caption{Valori per l'argomento \param{who} di \func{getrusage}.} 
   \label{tab:getrusage_who}
 \end{table}
+
+I campi più utilizzati sono comunque \var{ru\_utime} e \var{ru\_stime} che
+indicano rispettivamente il tempo impiegato dal processo nell'eseguire le
+istruzioni in user space, e quello impiegato dal kernel nelle \textit{system
+  call} eseguite per conto del processo. I campi \var{ru\_minflt} e
+\var{ru\_majflt} servono a quantificare l'uso della memoria
+virtuale\index{memoria~virtuale} e corrispondono rispettivamente al numero di
+\itindex{page~fault} \textit{page fault} (vedi sez.~\ref{sec:proc_mem_gen})
+avvenuti senza richiedere I/O su disco (i cosiddetti \textit{minor page
+  fault}), a quelli che invece han richiesto I/O su disco (detti invece
+\textit{major page fault}).%  mentre \var{ru\_nswap} ed al numero di volte che
+% il processo è stato completamente tolto dalla memoria per essere inserito
+% nello swap.
+% TODO verificare \var{ru\_nswap} non citato nelle pagine di manuali recenti e
+% dato per non utilizzato.
+
+I campi \var{ru\_nvcsw} e \var{ru\_nivcsw} indicano il numero di volte che un
+processo ha subito un \textit{context switch} da parte dello
+\textit{scheduler} rispettivamente nel caso un cui questo avviene prima
+dell'esaurimento della propria \textit{time-slice} (in genere a causa di una
+\textit{system call} bloccante), o per averla esaurita o essere stato
+interrotto da un processo a priorità maggiore. I campi \var{ru\_inblock} e
+\var{ru\_oublock} indicano invece il numero di volte che è stata eseguita una
+attività di I/O su un filesystem (rispettivamente in lettura e scrittura) ed
+infine \var{ru\_maxrss} indica il valore più alto della
+\itindex{Resident~Set~Size~(RSS)} \textit{Resident Set Size} raggiunto dal
+processo stesso o, nel caso sia stato usato \const{RUSAGE\_CHILDREN}, da uno
+dei suoi figli.
  
 Si tenga conto che per un errore di implementazione nei i kernel precedenti il
 2.6.9, nonostante questo fosse esplicitamente proibito dallo standard POSIX.1,
 l'uso di \const{RUSAGE\_CHILDREN} comportava l'inserimento dell'ammontare
 delle risorse usate dai processi figli anche quando si era impostata una
  
 Si tenga conto che per un errore di implementazione nei i kernel precedenti il
 2.6.9, nonostante questo fosse esplicitamente proibito dallo standard POSIX.1,
 l'uso di \const{RUSAGE\_CHILDREN} comportava l'inserimento dell'ammontare
 delle risorse usate dai processi figli anche quando si era impostata una
-azione di \const{SIG\_ING} per il segnale \const{SIGCHLD} (per i segnali si
+azione di \const{SIG\_IGN} per il segnale \const{SIGCHLD} (per i segnali si
 veda cap.~\ref{cha:signals}). Il comportamento è stato corretto per aderire
 allo standard a partire dal kernel 2.6.9.
 
 veda cap.~\ref{cha:signals}). Il comportamento è stato corretto per aderire
 allo standard a partire dal kernel 2.6.9.
 
@@ -1567,8 +1580,9 @@ In generale il superamento di un limite corrente comporta o l'emissione di uno
 specifico segnale o il fallimento della \textit{system call} che lo ha
 provocato. A questo comportamento generico fanno eccezione \const{RLIMIT\_CPU}
 in cui si ha in comportamento diverso per il superamento dei due limiti e
 specifico segnale o il fallimento della \textit{system call} che lo ha
 provocato. A questo comportamento generico fanno eccezione \const{RLIMIT\_CPU}
 in cui si ha in comportamento diverso per il superamento dei due limiti e
-\const{RLIMIT\_CORE} che influenza soltanto la dimensione (o l'eventuale
-creazione) dei file di \itindex{core~dump} \textit{core dump}.
+\const{RLIMIT\_CORE} che influenza soltanto la dimensione o l'eventuale
+creazione dei file di \itindex{core~dump} \textit{core dump} (vedi
+sez.~\ref{sec:sig_standard}).
 
 Per permettere di leggere e di impostare i limiti di utilizzo delle risorse da
 parte di un processo sono previste due funzioni di sistema, \funcd{getrlimit}
 
 Per permettere di leggere e di impostare i limiti di utilizzo delle risorse da
 parte di un processo sono previste due funzioni di sistema, \funcd{getrlimit}
@@ -1579,15 +1593,17 @@ e \funcd{setrlimit}, i cui prototipi sono:
 \fhead{sys/resource.h}
 \fhead{unistd.h}
 \fdecl{int getrlimit(int resource, struct rlimit *rlim)}
 \fhead{sys/resource.h}
 \fhead{unistd.h}
 \fdecl{int getrlimit(int resource, struct rlimit *rlim)}
-\fdesc{Legge il limite corrente di una risorsa.}
+\fdesc{Legge i limiti di una risorsa.}
 \fdecl{int setrlimit(int resource, const struct rlimit *rlim)}
 \fdecl{int setrlimit(int resource, const struct rlimit *rlim)}
-\fdesc{Imposta il limite di una risorsa.}
+\fdesc{Imposta i limiti di una risorsa.}
 }
 
 {Le funzioni ritornano $0$ in caso di successo e $-1$ per un errore, nel qual
   caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
 }
 
 {Le funzioni ritornano $0$ in caso di successo e $-1$ per un errore, nel qual
   caso \var{errno} assumerà uno dei valori:
   \begin{errlist}
-    \item[\errcode{EINVAL}] i valori per \param{resource} non sono validi.
+  \item[\errcode{EINVAL}] i valori per \param{resource} non sono validi o
+    nell'impostazione si è specificato \var{rlim->rlim\_cur} maggiore di
+    \var{rlim->rlim\_max}.
     \item[\errcode{EPERM}] un processo senza i privilegi di amministratore ha
     cercato di innalzare i propri limiti.
   \end{errlist}
     \item[\errcode{EPERM}] un processo senza i privilegi di amministratore ha
     cercato di innalzare i propri limiti.
   \end{errlist}
@@ -1619,18 +1635,18 @@ Come accennato processo ordinario può alzare il proprio limite corrente fino
 al valore del limite massimo, può anche ridurre, irreversibilmente, il valore
 di quest'ultimo.  Nello specificare un limite, oltre a fornire dei valori
 specifici, si può anche usare la costante \const{RLIM\_INFINITY} che permette
 al valore del limite massimo, può anche ridurre, irreversibilmente, il valore
 di quest'ultimo.  Nello specificare un limite, oltre a fornire dei valori
 specifici, si può anche usare la costante \const{RLIM\_INFINITY} che permette
-di sbloccare completamente l'uso di una risorsa; ma si ricordi che solo un
+di sbloccare completamente l'uso di una risorsa. Si ricordi però che solo un
 processo con i privilegi di amministratore\footnote{per essere precisi in
   questo caso quello che serve è la \itindex{capabilities} \textit{capability}
   \const{CAP\_SYS\_RESOURCE} (vedi sez.~\ref{sec:proc_capabilities}).} può
 innalzare un limite al di sopra del valore corrente del limite massimo ed
 usare un valore qualsiasi per entrambi i limiti.
 
 processo con i privilegi di amministratore\footnote{per essere precisi in
   questo caso quello che serve è la \itindex{capabilities} \textit{capability}
   \const{CAP\_SYS\_RESOURCE} (vedi sez.~\ref{sec:proc_capabilities}).} può
 innalzare un limite al di sopra del valore corrente del limite massimo ed
 usare un valore qualsiasi per entrambi i limiti.
 
-Come accennato ciascuna risorsa è identificata da uno specifico valore
-dell'argomento \param{resource}, i valori possibili per questo argomento, ed
-il significato della risorsa corrispondente, dei rispettivi limiti e gli
-effetti causati dal superamento degli stessi sono riportati nel seguente
-elenco:
+Ciascuna risorsa su cui si possono applicare dei limiti è identificata da uno
+specifico valore dell'argomento \param{resource}, i valori possibili per
+questo argomento, ed il significato della risorsa corrispondente, dei
+rispettivi limiti e gli effetti causati dal superamento degli stessi sono
+riportati nel seguente elenco:
 
 \begin{basedescript}{\desclabelwidth{2.2cm}}%\desclabelstyle{\nextlinelabel}}
 \item[\const{RLIMIT\_AS}] Questa risorsa indica, in byte, la dimensione
 
 \begin{basedescript}{\desclabelwidth{2.2cm}}%\desclabelstyle{\nextlinelabel}}
 \item[\const{RLIMIT\_AS}] Questa risorsa indica, in byte, la dimensione
@@ -1647,10 +1663,10 @@ elenco:
 
 \item[\const{RLIMIT\_CORE}] Questa risorsa indica, in byte, la massima
   dimensione per un file di \itindex{core~dump} \textit{core dump} (vedi
 
 \item[\const{RLIMIT\_CORE}] Questa risorsa indica, in byte, la massima
   dimensione per un file di \itindex{core~dump} \textit{core dump} (vedi
-  sez.~\ref{sec:sig_prog_error}) creato nella terminazione di un
-  processo. File di dimensioni maggiori verranno troncati a questo valore,
-  mentre con un valore nullo si bloccherà la creazione dei \itindex{core~dump}
-  \textit{core dump}.
+  sez.~\ref{sec:sig_standard}) creato nella terminazione di un processo. File
+  di dimensioni maggiori verranno troncati a questo valore, mentre con un
+  valore nullo si bloccherà la creazione dei \itindex{core~dump} \textit{core
+    dump}.
 
 \item[\const{RLIMIT\_CPU}] Questa risorsa indica, in secondi, il massimo tempo
   di CPU (vedi sez.~\ref{sec:sys_cpu_times}) che il processo può usare. Il
 
 \item[\const{RLIMIT\_CPU}] Questa risorsa indica, in secondi, il massimo tempo
   di CPU (vedi sez.~\ref{sec:sys_cpu_times}) che il processo può usare. Il
@@ -1738,63 +1754,116 @@ messaggi vuoti che comunque richiede delle risorse di gestione. Questa risorsa
   \errcode{EAGAIN}.
 
 \item[\const{RLIMIT\_RSS}] Questa risorsa indica, in pagine di memoria, la
   \errcode{EAGAIN}.
 
 \item[\const{RLIMIT\_RSS}] Questa risorsa indica, in pagine di memoria, la
-  dimensione massima della memoria residente (il codiddetto RSS
+  dimensione massima della memoria residente (il cosiddetto RSS
   \itindex{Resident~Set~Size~(RSS)} \textit{Resident Set Size}) cioè
   l'ammontare della memoria associata al processo che risiede effettivamente
   \itindex{Resident~Set~Size~(RSS)} \textit{Resident Set Size}) cioè
   l'ammontare della memoria associata al processo che risiede effettivamente
-  in RAM (e non a quella eventualmente portata sulla \textit{swap} o non
-  ancora caricata dal filesystem (per il \index{segmento!testo} segmento testo
-  del programma).  Ha effetto solo sulle chiamate a \func{madvise} con
+  in RAM e non a quella eventualmente portata sulla \textit{swap} o non ancora
+  caricata dal filesystem per il \index{segmento!testo} segmento testo del
+  programma.  Ha effetto solo sulle chiamate a \func{madvise} con
   \const{MADV\_WILLNEED} (vedi sez.~\ref{sec:file_memory_map}). Presente solo
   sui i kernel precedenti il 2.4.30.
 
   \const{MADV\_WILLNEED} (vedi sez.~\ref{sec:file_memory_map}). Presente solo
   sui i kernel precedenti il 2.4.30.
 
-\item[\const{RLIMIT\_RTPRIO}] Questa risorsa indica il 
+\item[\const{RLIMIT\_RTPRIO}] Questa risorsa indica il valore massimo della
+  priorità statica che un processo può assegnarsi o assegnare con
+  \func{sched\_setscheduler} e \func{sched\_setparam} (vedi
+  sez.~\ref{sec:proc_real_time}). Il limite è stato introdotto a partire dal
+  kernel 2.6.12 (ma per un bug è effettivo solo a partire dal 2.6.13). In
+  precedenza solo i processi con privilegi amministrativi potevano avere una
+  priorità statica ed utilizzare una politica di \textit{scheduling} di tipo
+  \textit{real-time}.
+
+\item[\const{RLIMIT\_RTTIME}] Questa risorsa indica, in microsecondi, il tempo
+  massimo di CPU che un processo eseguito con una priorità statica può
+  consumare. Il superamento del limite corrente comporta l'emissione di un
+  segnale di \signal{SIGXCPU}, e quello del limite massimo di \signal{SIGKILL}
+  con le stesse regole viste \const{RLIMIT\_CPU}: se \signal{SIGXCPU} viene
+  intercettato ed ignorato il segnale verrà riemesso ogni secondo fino al
+  superamento del limite massimo. Questo limite è stato introdotto con il
+  kernel 2.6.25 per impedire che un processo \textit{real-time} possa bloccare
+  il sistema.
 
 % TODO trattare i seguenti...
 
 % TODO trattare i seguenti...
-%    \const{RLIMIT\_RTPRIO}& Il numero massimo di \\
 % aggiungere i limiti che mancano come RLIMIT_RTTIME introdotto con il 2.6.25
 % vedi file include/asm-generic/resource.h
 
 
 % aggiungere i limiti che mancano come RLIMIT_RTTIME introdotto con il 2.6.25
 % vedi file include/asm-generic/resource.h
 
 
-\item[\const{RLIMIT\_SIGPENDING}] Il numero massimo di segnali che possono
-  essere mantenuti in coda per ciascun utente, considerando sia i segnali
-  normali che real-time (vedi sez.~\ref{sec:sig_real_time}). Il limite è
+\item[\const{RLIMIT\_SIGPENDING}] Questa risorsa indica il numero massimo di
+  segnali che possono essere mantenuti in coda per ciascun utente,
+  identificato per \ids{UID} reale. Il limite comprende sia i segnali normali
+  che quelli \textit{real-time} (vedi sez.~\ref{sec:sig_real_time}) ed è
   attivo solo per \func{sigqueue}, con \func{kill} si potrà sempre inviare un
   attivo solo per \func{sigqueue}, con \func{kill} si potrà sempre inviare un
-  segnale che non sia già presente su una coda.\footnote{il limite su questa
-    risorsa è stato introdotto con il kernel 2.6.8.}
+  segnale che non sia già presente su una coda. Questo limite è stato
+  introdotto con il kernel 2.6.8.
+
+\item[\const{RLIMIT\_STACK}] Questa risorsa indica, in byte, la massima
+  dimensione dello \itindex{stack} \textit{stack} del processo. Se il processo
+  esegue operazioni che estendano lo \textit{stack} oltre questa dimensione
+  riceverà un segnale di \signal{SIGSEGV}. 
+
+  A partire dal kernel 2.6.23 questo stesso limite viene applicato per la gran
+  parte delle architetture anche ai dati che possono essere passati come
+  argomenti e variabili di ambiente ad un programma posto in esecuzione con
+  \func{execve}, nella misura di un quarto del valore indicato per lo
+  \textit{stack}.  Questo valore in precedenza era fisso e pari a 32 pagine di
+  memoria, corrispondenti per la gran parte delle architetture a 128kb di
+  dati, dal 2.6.25, per evitare problemi di compatibilità quando
+  \const{RLIMIT\_STACK} è molto basso, viene comunque garantito uno spazio
+  base di 32 pagine qualunque sia l'architettura.
 
 
+\end{basedescript}
 
 
-\item[\const{RLIMIT\_RSS}] L'ammontare massimo di pagine di memoria dato al
-  \index{segmento!testo} testo del processo. Il limite è solo una indicazione
-  per il kernel, qualora ci fosse un surplus di memoria questa verrebbe
-  assegnata.
+Si tenga conto infine che tutti i limiti eventualmente presenti su un processo
+vengono ereditati dai figli da esso creati attraverso una \func{fork} (vedi
+sez.~\ref{sec:proc_fork}) e mantenuti invariati per i programmi messi in
+esecuzione attraverso una \func{exec} (vedi sez.~\ref{sec:proc_exec}).
 
 
-\item[\const{RLIMIT\_STACK}] La massima dimensione dello \itindex{stack}
-  \textit{stack} del processo. Se il processo esegue operazioni che estendano
-  lo \textit{stack} oltre questa dimensione riceverà un segnale di
-  \signal{SIGSEGV}.
+Si noti come le due funzioni \func{getrlimit} e \func{setrlimit} consentano di
+operare solo sul processo corrente. Per questo motivo a partire dal kernel
+2.6.36 (e dalla \acr{glibc} 2.13) è stata introdotta un'altra funzione di
+sistema \funcd{prlimit} il cui scopo è quello di estendere e sostituire le
+precedenti.  Il suo prototipo è:
 
 
-% TODO dal 2.6.23 il significato è cambiato, vedi anche man execve
+\begin{funcproto}{
+\fhead{sys/resource.h}
+\fdecl{int prlimit(pid\_t pid, int resource, const struct rlimit *new\_limit,\\
+\phantom{int prlimit(}struct rlimit *old\_limit}
+\fdesc{Legge e imposta i limiti di una risorsa.} 
+}
 
 
-% TODO: aggiungere a \const{RLIMIT\_STACK} i dati di execve:
-% Questi fino al kernel 2.6.23 erano fissi e costituiti da
-% 32 pagine di memoria (corrispondenti per la gran parte delle architetture a
-% 128kb di dati). Dal 2.6.23 su molte architettire il limite viene stabilito in
-% base al valore della risorsa \const{RLIMIT\_STACK} (vedi
-% sez.~\ref{sec:sys_resource_limit}), ad un quarto dello spazio da essa
-% indicato). Dal 2.6.25 viene comunque garantito uno spazio base di 32 pagine.
+{La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
+  caso \var{errno} assumerà uno dei valori:
+  \begin{errlist}
+  \item[\errcode{EINVAL}] i valori per \param{resource} non sono validi o
+    nell'impostazione si è specificato \var{rlim->rlim\_cur} maggiore di
+    \var{rlim->rlim\_max}.
+  \item[\errcode{EPERM}] un processo senza i privilegi di amministratore ha
+    cercato di innalzare i propri limiti o si è cercato di modificare i limiti
+    di un processo di un altro utente.
+  \item [\errcode{ESRCH}] il process \param{pid} non esiste.
+  \end{errlist}
+  ed inoltre \errval{EFAULT} nel suo significato generico.
+}
+\end{funcproto}
 
 
-% TODO integrare con la roba di madvise
-% TODO integrare con le ultime aggiunte, vedi pagina di manuale
+La funzione è specifica di Linux e non portabile; per essere usata richiede
+che sia stata definita la macro \macro{\_GNU\_SOURCE}. Il primo argomento
+indica il \ids{PID} del processo di cui si vogliono cambiare i limiti e si può
+usare un valore nullo per indicare il processo chiamante.  Per modificare i
+limiti di un altro processo, a meno di non avere privilegi
+amministrativi,\footnote{anche in questo caso la \itindex{capabilities}
+  \textit{capability} necessaria è \const{CAP\_SYS\_RESOURCE} (vedi
+  sez.~\ref{sec:proc_capabilities}).}  l'\ids{UID} ed il \ids{GID} reale del
+chiamante devono coincidere con \ids{UID} e \ids{GID} del processo indicato
+per i tre gruppi reale, effettivo e salvato.
 
 
-% TODO trattare prlimit64 introdotta con il 2.6.36 che dovrebbe sostituire
-% setrlimit 
+Se \param{new\_limit} non è \val{NULL} verrà usato come puntatore alla
+struttura \struct{rlimit} contenente i valori dei nuovi limiti da impostare,
+mentre se \param{old\_limit} non è \val{NULL} verranno letti i valori correnti
+del limiti nella struttura \struct{rlimit} da esso puntata. In questo modo è
+possibile sia leggere che scrivere, anche in contemporanea, i valori dei
+limiti. Il significato dell'argomento \param{resource} resta identico rispetto
+a \func{getrlimit} e \func{setrlimit}, così come i restanti requisiti. 
 
 
-\end{basedescript}
-
-Si tenga conto infine che tutti i limiti vengono ereditati dal
-processo padre attraverso una \func{fork} (vedi sez.~\ref{sec:proc_fork}) e
-mantenuti per gli altri programmi eseguiti attraverso una \func{exec} (vedi
-sez.~\ref{sec:proc_exec}).
 
 
 \subsection{Le risorse di memoria e processore}
 
 
 \subsection{Le risorse di memoria e processore}
@@ -1803,29 +1872,42 @@ sez.~\ref{sec:proc_exec}).
 La gestione della memoria è già stata affrontata in dettaglio in
 sez.~\ref{sec:proc_memory}; abbiamo visto allora che il kernel provvede il
 meccanismo della \index{memoria~virtuale} memoria virtuale attraverso la
 La gestione della memoria è già stata affrontata in dettaglio in
 sez.~\ref{sec:proc_memory}; abbiamo visto allora che il kernel provvede il
 meccanismo della \index{memoria~virtuale} memoria virtuale attraverso la
-divisione della memoria fisica in pagine.
-
-In genere tutto ciò è del tutto trasparente al singolo processo, ma in certi
-casi, come per l'I/O mappato in memoria (vedi sez.~\ref{sec:file_memory_map})
-che usa lo stesso meccanismo per accedere ai file, è necessario conoscere le
-dimensioni delle pagine usate dal kernel. Lo stesso vale quando si vuole
-gestire in maniera ottimale l'interazione della memoria che si sta allocando
-con il meccanismo della \index{paginazione} paginazione.
-
-Di solito la dimensione delle pagine di memoria è fissata dall'architettura
-hardware, per cui il suo valore di norma veniva mantenuto in una costante che
-bastava utilizzare in fase di compilazione, ma oggi, con la presenza di alcune
-architetture (ad esempio Sun Sparc) che permettono di variare questa
-dimensione, per non dover ricompilare i programmi per ogni possibile modello e
-scelta di dimensioni, è necessario poter utilizzare una funzione.
+divisione della memoria fisica in pagine.  In genere tutto ciò è del tutto
+trasparente al singolo processo, ma in certi casi, come per l'I/O mappato in
+memoria (vedi sez.~\ref{sec:file_memory_map}) che usa lo stesso meccanismo per
+accedere ai file, è necessario conoscere le dimensioni delle pagine usate dal
+kernel. Lo stesso vale quando si vuole gestire in maniera ottimale
+l'interazione della memoria che si sta allocando con il meccanismo della
+\index{paginazione} paginazione.
+
+Un tempo la dimensione delle pagine di memoria era fissata una volta per tutte
+dall'architettura hardware, per cui il relativo valore veniva mantenuto in una
+costante che bastava utilizzare in fase di compilazione. Oggi invece molte
+architetture permettono di variare questa dimensione (ad esempio sui PC
+recenti si possono usare pagine di 4kb e di 4 Mb) per cui per non dover
+ricompilare i programmi per ogni possibile caso e relativa scelta di
+dimensioni, è necessario poter utilizzare una funzione.
 
 Dato che si tratta di una caratteristica generale del sistema, questa
 dimensione può essere ottenuta come tutte le altre attraverso una chiamata a
 
 Dato che si tratta di una caratteristica generale del sistema, questa
 dimensione può essere ottenuta come tutte le altre attraverso una chiamata a
-\func{sysconf}, \footnote{nel caso specifico si dovrebbe utilizzare il
-  parametro \const{\_SC\_PAGESIZE}.}  ma in BSD 4.2 è stata introdotta una
-apposita funzione, \funcd{getpagesize}, che restituisce la dimensione delle
-pagine di memoria; il suo prototipo è:
-\begin{prototype}{unistd.h}{int getpagesize(void)}
+\func{sysconf} (nel caso specifico si dovrebbe utilizzare il parametro
+\const{\_SC\_PAGESIZE}) ma in BSD 4.2 è stata introdotta una apposita funzione
+di sistema \funcd{getpagesize} che restituisce la dimensione delle pagine di
+memoria. La funzione è disponibile anche su Linux ed il suo prototipo è:
+
+\begin{funcproto}{
+\fhead{unistd.h}
+\fdecl{int getpagesize(void)}
+\fdesc{Legge la dimensione delle pagine di memoria.} 
+}
+
+{La funzione ritorna la dimensione di una pagina in byte, e non sono previsti
+  errori.}
+\end{funcproto}
+
+
+\begin{prototype}{unistd.h}
+{int getpagesize(void)}
   Legge le dimensioni delle pagine di memoria.
   
   \bodydesc{La funzione ritorna la dimensione di una pagina in byte, e non
   Legge le dimensioni delle pagine di memoria.
   
   \bodydesc{La funzione ritorna la dimensione di una pagina in byte, e non
@@ -2193,7 +2275,7 @@ Come nel caso di \func{stime} anche \func{settimeofday} (la cosa continua a
 valere per qualunque funzione che vada a modificare l'orologio di sistema,
 quindi anche per quelle che tratteremo in seguito) può essere utilizzata solo
 da un processo coi privilegi di amministratore.\footnote{più precisamente la
 valere per qualunque funzione che vada a modificare l'orologio di sistema,
 quindi anche per quelle che tratteremo in seguito) può essere utilizzata solo
 da un processo coi privilegi di amministratore.\footnote{più precisamente la
-  capabitity \const{CAP\_SYS\_TIME}.}
+  capability \const{CAP\_SYS\_TIME}.}
 
 Il secondo argomento di entrambe le funzioni è una struttura
 \struct{timezone}, che storicamente veniva utilizzata per specificare appunto
 
 Il secondo argomento di entrambe le funzioni è una struttura
 \struct{timezone}, che storicamente veniva utilizzata per specificare appunto
@@ -2822,7 +2904,7 @@ linea non vengano ripetuti.
 % LocalWords:  SHRT short USHRT int UINT LONG long ULONG LLONG ULLONG POSIX ARG
 % LocalWords:  Stevens exec CHILD STREAM stream TZNAME timezone NGROUPS SSIZE
 % LocalWords:  ssize LISTIO JOB CONTROL job control IDS VERSION YYYYMML bits bc
 % LocalWords:  SHRT short USHRT int UINT LONG long ULONG LLONG ULLONG POSIX ARG
 % LocalWords:  Stevens exec CHILD STREAM stream TZNAME timezone NGROUPS SSIZE
 % LocalWords:  ssize LISTIO JOB CONTROL job control IDS VERSION YYYYMML bits bc
-% LocalWords:  dall'header posix lim nell'header glibc run unistd name errno
+% LocalWords:  dall'header posix lim nell'header glibc run unistd name errno SC
 % LocalWords:  NGROUP CLK TCK clock tick process PATH pathname BUF CANON path
 % LocalWords:  pathconf fpathconf descriptor fd uname sys struct utsname info
 % LocalWords:  EFAULT fig SOURCE NUL LENGTH DOMAIN NMLN UTSLEN system call proc
 % LocalWords:  NGROUP CLK TCK clock tick process PATH pathname BUF CANON path
 % LocalWords:  pathconf fpathconf descriptor fd uname sys struct utsname info
 % LocalWords:  EFAULT fig SOURCE NUL LENGTH DOMAIN NMLN UTSLEN system call proc
@@ -2830,7 +2912,7 @@ linea non vengano ripetuti.
 % LocalWords:  newlen ENOTDIR EINVAL ENOMEM linux array oldvalue paging stack
 % LocalWords:  TCP shell Documentation ostype hostname osrelease version mount
 % LocalWords:  const source filesystemtype mountflags ENODEV ENOTBLK block read
 % LocalWords:  newlen ENOTDIR EINVAL ENOMEM linux array oldvalue paging stack
 % LocalWords:  TCP shell Documentation ostype hostname osrelease version mount
 % LocalWords:  const source filesystemtype mountflags ENODEV ENOTBLK block read
-% LocalWords:  device EBUSY only EACCES NODEV ENXIO major
+% LocalWords:  device EBUSY only EACCES NODEV ENXIO major RTSIG syscall PID NSS
 % LocalWords:  number EMFILE dummy ENAMETOOLONG ENOENT ELOOP virtual devfs MGC
 % LocalWords:  magic MSK RDONLY NOSUID suid sgid NOEXEC SYNCHRONOUS REMOUNT MNT
 % LocalWords:  MANDLOCK mandatory locking WRITE APPEND append IMMUTABLE NOATIME
 % LocalWords:  number EMFILE dummy ENAMETOOLONG ENOENT ELOOP virtual devfs MGC
 % LocalWords:  magic MSK RDONLY NOSUID suid sgid NOEXEC SYNCHRONOUS REMOUNT MNT
 % LocalWords:  MANDLOCK mandatory locking WRITE APPEND append IMMUTABLE NOATIME
@@ -2849,23 +2931,29 @@ linea non vengano ripetuti.
 % LocalWords:  SIGSEGV SIGXCPU SIGKILL sbrk FSIZE SIGXFSZ EFBIG LOCKS lock dup
 % LocalWords:  MEMLOCK NOFILE NPROC fork EAGAIN SIGPENDING sigqueue kill RSS tv
 % LocalWords:  resource getrlimit setrlimit rlimit rlim INFINITY capabilities
 % LocalWords:  SIGSEGV SIGXCPU SIGKILL sbrk FSIZE SIGXFSZ EFBIG LOCKS lock dup
 % LocalWords:  MEMLOCK NOFILE NPROC fork EAGAIN SIGPENDING sigqueue kill RSS tv
 % LocalWords:  resource getrlimit setrlimit rlimit rlim INFINITY capabilities
-% LocalWords:  capability CAP l'I Sun Sparc PAGESIZE getpagesize SVr SUSv get
+% LocalWords:  capability CAP Sun Sparc PAGESIZE getpagesize SVr SUSv get IGN
 % LocalWords:  phys pages avphys NPROCESSORS CONF ONLN getloadavg stdlib double
 % LocalWords:  phys pages avphys NPROCESSORS CONF ONLN getloadavg stdlib double
-% LocalWords:  loadavg nelem scheduler CONFIG ACCT acct filename EUSER
+% LocalWords:  loadavg nelem scheduler CONFIG ACCT acct filename EUSER sizeof
 % LocalWords:  ENFILE EROFS PACCT AcctCtrl cap calendar UTC Jan the Epoch GMT
 % LocalWords:  Greenwich Mean l'UTC timer CLOCKS SEC cron wall elapsed times tz
 % LocalWords:  ENFILE EROFS PACCT AcctCtrl cap calendar UTC Jan the Epoch GMT
 % LocalWords:  Greenwich Mean l'UTC timer CLOCKS SEC cron wall elapsed times tz
-% LocalWords:  tms cutime cstime waitpid gettimeofday settimeofday timex
-% LocalWords:  timespec adjtime olddelta adjtimex David Mills RFC NTP ntp
+% LocalWords:  tms cutime cstime waitpid gettimeofday settimeofday timex NetBSD
+% LocalWords:  timespec adjtime olddelta adjtimex David Mills RFC NTP ntp cmd
 % LocalWords:  nell'RFC ADJ FREQUENCY frequency MAXERROR maxerror ESTERROR PLL
 % LocalWords:  esterror TIMECONST constant SINGLESHOT MOD INS insert leap OOP
 % LocalWords:  second delete progress has occurred BAD broken tm gmtoff asctime
 % LocalWords:  ctime timep gmtime localtime mktime tzname tzset daylight format
 % LocalWords:  strftime thread EOF modifiable lvalue app errcode strerror LC at
 % LocalWords:  nell'RFC ADJ FREQUENCY frequency MAXERROR maxerror ESTERROR PLL
 % LocalWords:  esterror TIMECONST constant SINGLESHOT MOD INS insert leap OOP
 % LocalWords:  second delete progress has occurred BAD broken tm gmtoff asctime
 % LocalWords:  ctime timep gmtime localtime mktime tzname tzset daylight format
 % LocalWords:  strftime thread EOF modifiable lvalue app errcode strerror LC at
-% LocalWords:  perror string errnum MESSAGES error message ErrCode strtol log
+% LocalWords:  perror string errnum MESSAGES error message strtol log
 % LocalWords:  program invocation argv printf print progname exit count fname
 % LocalWords:  program invocation argv printf print progname exit count fname
-% LocalWords:  lineno one standardese Di page Wed Wednesday Apr April PM AM
-% LocalWords:  CEST
-
+% LocalWords:  lineno one standardese Di page Wed Wednesday Apr April PM AM CAD
+% LocalWords:  CEST utmpxname Solaris updwtmpx reboot RESTART Ctrl OFF SIGINT
+% LocalWords:  HALT halted sync KEXEC kexec load bootloader POWER Power with nr
+% LocalWords:  Restarting command arg entry segments segment ARCH CRASH CONTEXT
+% LocalWords:  PRESERVE PPC IA ARM SH MIPS nvcsw nivcsw inblock oublock maxrss
+% LocalWords:  context switch slice Resident SIG SIGCHLD cur Gb lease mlock
+% LocalWords:  memory mlockall MAP LOCKED shmctl MSGQUEUE attr NICE nice MADV
+% LocalWords:  madvise WILLNEED RTPRIO sched setscheduler setparam scheduling
+% LocalWords:  RTTIME execve kb prlimit pid new old ESRCH EUSERS
 
 
 %%% Local Variables: 
 
 
 %%% Local Variables: