+Come accennato nell'introduzione il kernel mette a disposizione delle
+funzionalità che permettono non solo di mantenere dati statistici relativi
+all'uso delle risorse, ma anche di imporre dei limiti precisi sul loro
+utilizzo da parte dei vari processi o degli utenti.
+
+Per far questo esistono una serie di risorse e ad ogni processo vengono
+associati due diversi limiti per ciascuna di esse; questi sono il
+\textsl{limite corrente} (o \textit{current limit}) che esprime un valore
+massimo che il processo non può superare ad un certo momento, ed il
+\textsl{limite massimo} (o \textit{maximum limit}) che invece esprime il
+valore massimo che può assumere il \textsl{limite corrente}. In generale il
+primo viene chiamato anche \textit{soft limit} dato che il suo valore può
+essere aumentato dal processo stesso durante l'esecuzione, ciò può però essere
+fatto solo fino al valore del secondo, che per questo viene detto \textit{hard
+ limit}.
+
+\begin{table}[htb]
+ \footnotesize
+ \centering
+ \begin{tabular}[c]{|l|p{12cm}|}
+ \hline
+ \textbf{Valore} & \textbf{Significato}\\
+ \hline
+ \hline
+ \const{RLIMIT\_AS} & La dimensione massima della memoria virtuale di
+ un processo, il cosiddetto \textit{Address
+ Space}, (vedi sez.~\ref{sec:proc_mem_gen}). Se
+ il limite viene superato dall'uso di funzioni
+ come \func{brk}, \func{mremap} o \func{mmap}
+ esse falliranno con un errore di
+ \errcode{ENOMEM}, mentre se il superamento viene
+ causato dalla crescita dello \itindex{stack}
+ \textit{stack} il processo riceverà un segnale di
+ \const{SIGSEGV}.\\
+ \const{RLIMIT\_CORE} & La massima dimensione per di 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 si bloccherà la creazione
+ dei \itindex{core~dump} \textit{core dump}.\\
+ \const{RLIMIT\_CPU} & Il massimo tempo di CPU (vedi
+ sez.~\ref{sec:sys_cpu_times}) che il processo può
+ usare. Il superamento del limite corrente
+ comporta l'emissione di un segnale di
+ \const{SIGXCPU}, la cui azione predefinita (vedi
+ sez.~\ref{sec:sig_classification}) è terminare
+ il processo, una volta al secondo fino al
+ raggiungimento del limite massimo. Il
+ superamento del limite massimo
+ comporta l'emissione di un segnale di
+ \const{SIGKILL}.\footnotemark\\
+ \const{RLIMIT\_DATA} & La massima dimensione del \index{segmento!dati}
+ segmento dati di un
+ processo (vedi sez.~\ref{sec:proc_mem_layout}).
+ Il tentativo di allocare più memoria di quanto
+ indicato dal limite corrente causa il fallimento
+ della funzione di allocazione (\func{brk} o
+ \func{sbrk}) con un errore di \errcode{ENOMEM}.\\
+ \const{RLIMIT\_FSIZE} & La massima dimensione di un file che un processo
+ può creare. Se il processo cerca di scrivere
+ oltre questa dimensione riceverà un segnale di
+ \const{SIGXFSZ}, che di norma termina il
+ processo; se questo viene intercettato la
+ system call che ha causato l'errore fallirà con
+ un errore di \errcode{EFBIG}.\\
+ \const{RLIMIT\_LOCKS}& È un limite presente solo nelle prime versioni
+ del kernel 2.4 sul numero massimo di
+ \index{file!locking} \textit{file lock} (vedi
+ sez.~\ref{sec:file_locking}) che un
+ processo poteva effettuare.\\
+ \const{RLIMIT\_MEMLOCK}& L'ammontare massimo di memoria che può essere
+ bloccata in RAM da un processo (vedi
+ sez.~\ref{sec:proc_mem_lock}). Dal kernel 2.6.9
+ questo limite comprende anche la memoria che può
+ essere bloccata da ciascun utente nell'uso della
+ memoria condivisa (vedi
+ sez.~\ref{sec:ipc_sysv_shm}) che viene
+ contabilizzata separatamente ma sulla quale
+ viene applicato questo stesso limite.\\
+% TODO trattare i seguenti...
+% \const{RLIMIT\_MSGQUEUE}& Il numero massimo di \\
+% \const{RLIMIT\_NICE}& Il numero massimo di \\
+% \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
+ \const{RLIMIT\_NOFILE} & Il numero massimo di file che il processo può
+ aprire. L'apertura di un ulteriore file farà
+ fallire la funzione (\func{open}, \func{dup} o
+ \func{pipe}) con un errore \errcode{EMFILE}.\\
+ \const{RLIMIT\_NPROC} & Il numero massimo di processi che possono essere
+ creati sullo stesso user id real. Se il limite
+ viene raggiunto \func{fork} fallirà con un
+ \errcode{EAGAIN}.\\
+ \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 è
+ attivo solo per \func{sigqueue}, con \func{kill}
+ si potrà sempre inviare un segnale che non sia
+ già presente su una coda.\footnotemark\\
+ \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 \const{SIGSEGV}.\\
+ \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.\\
+% TODO integrare con la roba di madvise
+% TODO integrare con le ultime aggiunte, vedi pagina di manuale
+ \hline
+ \end{tabular}
+ \caption{Valori possibili dell'argomento \param{resource} delle funzioni
+ \func{getrlimit} e \func{setrlimit}.}
+ \label{tab:sys_rlimit_values}
+\end{table}
+
+\footnotetext[18]{questo è quanto avviene per i kernel dalla serie 2.2 fino ad
+ oggi (la 2.6.x); altri kernel possono avere comportamenti diversi per quanto
+ avviene quando viene superato il \textit{soft limit}; perciò per avere
+ operazioni portabili è sempre opportuno intercettare il primo
+ \const{SIGXCPU} e terminare in maniera ordinata il processo.}
+
+\footnotetext{il limite su questa risorsa è stato introdotto con il kernel
+ 2.6.8.}
+
+
+In generale il superamento di un limite corrente\footnote{di norma quanto
+ riportato in tab.~\ref{tab:sys_rlimit_values} fa riferimento a quanto
+ avviene al superamento del limite corrente, con l'eccezione
+ \const{RLIMIT\_CPU} in cui si ha in comportamento diverso per il superamento
+ dei due limiti.} comporta o l'emissione di un segnale o il fallimento della
+system call che lo ha provocato;\footnote{si nuovo c'è una eccezione per
+ \const{RLIMIT\_CORE} che influenza soltanto la dimensione (o l'eventuale
+ creazione) dei file di \itindex{core~dump} \textit{core dump}.} per
+permettere di leggere e di impostare i limiti di utilizzo delle risorse da
+parte di un processo sono previste due funzioni, \funcd{getrlimit} e
+\funcd{setrlimit}, i cui prototipi sono: