From 51ac65a077651bde52ce68d43aa61b158f5dbd3d Mon Sep 17 00:00:00 2001 From: Simone Piccardi Date: Wed, 28 Oct 2015 22:28:57 +0000 Subject: [PATCH] Ancora reindicizzazioni --- fileadv.tex | 14 +- filedir.tex | 54 ++-- fileio.tex | 4 +- ipc.tex | 14 +- macro.tex | 38 ++- prochand.tex | 18 +- session.tex | 736 +++++++++++++++++++++++++-------------------------- signal.tex | 355 +++++++++++++------------ sockctrl.tex | 159 ++++++----- system.tex | 10 +- tcpsock.tex | 20 +- 11 files changed, 705 insertions(+), 717 deletions(-) diff --git a/fileadv.tex b/fileadv.tex index 2e9e781..9794840 100644 --- a/fileadv.tex +++ b/fileadv.tex @@ -1587,7 +1587,7 @@ i cui prototipi sono: positivo o non valido per \param{flags}. \item[\errcode{EMFILE}] si è raggiunto il limite sul numero massimo di istanze di \textit{epoll} per utente stabilito da - \sysctlfile{fs/epoll/max\_user\_instances}. + \sysctlfiled{fs/epoll/max\_user\_instances}. \item[\errcode{ENFILE}] si è raggiunto il massimo di file descriptor aperti nel sistema. \item[\errcode{ENOMEM}] non c'è sufficiente memoria nel kernel per creare @@ -1654,7 +1654,7 @@ dell'interfaccia, \funcd{epoll\_ctl}, il cui prototipo è: l'operazione richiesta. \item[\errcode{ENOSPC}] si è raggiunto il limite massimo di registrazioni per utente di file descriptor da osservare imposto da - \sysctlfile{fs/epoll/max\_user\_watches}. + \sysctlfiled{fs/epoll/max\_user\_watches}. \item[\errcode{EPERM}] il file associato a \param{fd} non supporta l'uso di \textit{epoll}. \end{errlist} @@ -2718,7 +2718,7 @@ avvenga è di impostare la lunghezza della coda dei segnali \textit{real-time} ad una dimensione identica al valore massimo del numero di file descriptor utilizzabili, vale a dire impostare il contenuto di \sysctlfile{kernel/rtsig-max} allo stesso valore del contenuto di -\sysctlfilem{fs/file-max}. +\sysctlfile{fs/file-max}. % TODO fare esempio che usa O_ASYNC @@ -2870,7 +2870,7 @@ operazione di lettura, declassando il \textit{lease} a lettura con Se il \textit{lease holder} non provvede a rilasciare il \textit{lease} entro il numero di secondi specificato dal parametro di sistema mantenuto in -\sysctlfile{fs/lease-break-time} sarà il kernel stesso a rimuoverlo o +\sysctlfiled{fs/lease-break-time} sarà il kernel stesso a rimuoverlo o declassarlo automaticamente (questa è una misura di sicurezza per evitare che un processo blocchi indefinitamente l'accesso ad un file acquisendo un \textit{lease}). Una volta che un \textit{lease} è stato rilasciato o @@ -3020,7 +3020,7 @@ notificare gli eventi che sono stati posti in osservazione. Per evitare abusi delle risorse di sistema è previsto che un utente possa utilizzare un numero limitato di istanze di \textit{inotify}; il valore di default del limite è di 128, ma questo valore può essere cambiato con \func{sysctl} o usando il file -\sysctlfile{fs/inotify/max\_user\_instances}. +\sysctlfiled{fs/inotify/max\_user\_instances}. Dato che questo file descriptor non è associato a nessun file o directory reale, l'inconveniente di non poter smontare un filesystem i cui file sono @@ -3082,7 +3082,7 @@ modalità della stessa. L'operazione può essere ripetuta per tutti i file e le directory che si vogliono tenere sotto osservazione,\footnote{anche in questo caso c'è un limite massimo che di default è pari a 8192, ed anche questo valore può essere cambiato con \func{sysctl} o usando il file - \sysctlfile{fs/inotify/max\_user\_watches}.} e si utilizzerà sempre un solo + \sysctlfiled{fs/inotify/max\_user\_watches}.} e si utilizzerà sempre un solo file descriptor. Il tipo di evento che si vuole osservare deve essere specificato @@ -3319,7 +3319,7 @@ registrazione dell'osservatore). \footnotetext{la coda di notifica ha una dimensione massima che viene controllata dal parametro di sistema - \sysctlfile{fs/inotify/max\_queued\_events}, che indica il numero massimo di + \sysctlfiled{fs/inotify/max\_queued\_events}, che indica il numero massimo di eventi che possono essere mantenuti sulla stessa; quando detto valore viene ecceduto gli ulteriori eventi vengono scartati, ma viene comunque generato un evento di tipo \const{IN\_Q\_OVERFLOW}.} diff --git a/filedir.tex b/filedir.tex index 55ccf9a..4c70860 100644 --- a/filedir.tex +++ b/filedir.tex @@ -3921,17 +3921,17 @@ in tab.~\ref{tab:file_bit_perm}. \textbf{\var{st\_mode}} bit & \textbf{Significato} \\ \hline \hline - \constd{S\_IRUSR} & \textit{user-read}, l'utente può leggere.\\ - \constd{S\_IWUSR} & \textit{user-write}, l'utente può scrivere.\\ - \constd{S\_IXUSR} & \textit{user-execute}, l'utente può eseguire.\\ + \const{S\_IRUSR} & \textit{user-read}, l'utente può leggere.\\ + \const{S\_IWUSR} & \textit{user-write}, l'utente può scrivere.\\ + \const{S\_IXUSR} & \textit{user-execute}, l'utente può eseguire.\\ \hline - \constd{S\_IRGRP} & \textit{group-read}, il gruppo può leggere.\\ - \constd{S\_IWGRP} & \textit{group-write}, il gruppo può scrivere.\\ - \constd{S\_IXGRP} & \textit{group-execute}, il gruppo può eseguire.\\ + \const{S\_IRGRP} & \textit{group-read}, il gruppo può leggere.\\ + \const{S\_IWGRP} & \textit{group-write}, il gruppo può scrivere.\\ + \const{S\_IXGRP} & \textit{group-execute}, il gruppo può eseguire.\\ \hline - \constd{S\_IROTH} & \textit{other-read}, tutti possono leggere.\\ - \constd{S\_IWOTH} & \textit{other-write}, tutti possono scrivere.\\ - \constd{S\_IXOTH} & \textit{other-execute}, tutti possono eseguire.\\ + \const{S\_IROTH} & \textit{other-read}, tutti possono leggere.\\ + \const{S\_IWOTH} & \textit{other-write}, tutti possono scrivere.\\ + \const{S\_IXOTH} & \textit{other-execute}, tutti possono eseguire.\\ \hline \end{tabular} \caption{I bit dei permessi di accesso ai file, come definiti in @@ -4358,24 +4358,24 @@ sui file. \textbf{\param{mode}} & \textbf{Valore} & \textbf{Significato} \\ \hline \hline - \constd{S\_ISUID} & 04000 & Set user ID bit.\\ - \constd{S\_ISGID} & 02000 & Set group ID bit.\\ - \constd{S\_ISVTX} & 01000 & Sticky bit.\\ + \const{S\_ISUID} & 04000 & Set user ID bit.\\ + \const{S\_ISGID} & 02000 & Set group ID bit.\\ + \const{S\_ISVTX} & 01000 & Sticky bit.\\ \hline - \constd{S\_IRWXU} & 00700 & L'utente ha tutti i permessi.\\ - \constd{S\_IRUSR} & 00400 & L'utente ha il permesso di lettura.\\ - \constd{S\_IWUSR} & 00200 & L'utente ha il permesso di scrittura.\\ - \constd{S\_IXUSR} & 00100 & L'utente ha il permesso di esecuzione.\\ + \const{S\_IRWXU} & 00700 & L'utente ha tutti i permessi.\\ + \const{S\_IRUSR} & 00400 & L'utente ha il permesso di lettura.\\ + \const{S\_IWUSR} & 00200 & L'utente ha il permesso di scrittura.\\ + \const{S\_IXUSR} & 00100 & L'utente ha il permesso di esecuzione.\\ \hline - \constd{S\_IRWXG} & 00070 & Il gruppo ha tutti i permessi.\\ - \constd{S\_IRGRP} & 00040 & Il gruppo ha il permesso di lettura.\\ - \constd{S\_IWGRP} & 00020 & Il gruppo ha il permesso di scrittura.\\ - \constd{S\_IXGRP} & 00010 & Il gruppo ha il permesso di esecuzione.\\ + \const{S\_IRWXG} & 00070 & Il gruppo ha tutti i permessi.\\ + \const{S\_IRGRP} & 00040 & Il gruppo ha il permesso di lettura.\\ + \const{S\_IWGRP} & 00020 & Il gruppo ha il permesso di scrittura.\\ + \const{S\_IXGRP} & 00010 & Il gruppo ha il permesso di esecuzione.\\ \hline - \constd{S\_IRWXO} & 00007 & Gli altri hanno tutti i permessi.\\ - \constd{S\_IROTH} & 00004 & Gli altri hanno il permesso di lettura.\\ - \constd{S\_IWOTH} & 00002 & Gli altri hanno il permesso di scrittura.\\ - \constd{S\_IXOTH} & 00001 & Gli altri hanno il permesso di esecuzione.\\ + \const{S\_IRWXO} & 00007 & Gli altri hanno tutti i permessi.\\ + \const{S\_IROTH} & 00004 & Gli altri hanno il permesso di lettura.\\ + \const{S\_IWOTH} & 00002 & Gli altri hanno il permesso di scrittura.\\ + \const{S\_IXOTH} & 00001 & Gli altri hanno il permesso di esecuzione.\\ \hline \end{tabular} \caption{Valori delle costanti usate per indicare i vari bit di @@ -6509,7 +6509,7 @@ casistica assai complessa. Per i kernel fino al 2.6.25, o se non si attiva il supporto per le \textit{file capabilities}, il \textit{capabilities bounding set} è un parametro generale di sistema, il cui valore viene riportato nel file -\sysctlfile{kernel/cap-bound}. Il suo valore iniziale è definito in sede di +\sysctlfiled{kernel/cap-bound}. Il suo valore iniziale è definito in sede di compilazione del kernel, e da sempre ha previsto come default la presenza di tutte le \textit{capabilities} eccetto \const{CAP\_SETPCAP}. In questa situazione solo il primo processo eseguito nel sistema (quello con @@ -6534,7 +6534,7 @@ tutti, compreso l'amministratore.\footnote{la qual cosa, visto il default Con il kernel 2.6.25 e le \textit{file capabilities} il \textit{bounding set} è diventato una proprietà di ciascun processo, che viene propagata invariata sia attraverso una \func{fork} che una \func{exec}. In questo caso il file -\sysctlfilem{kernel/cap-bound} non esiste e \texttt{init} non ha nessun +\sysctlfile{kernel/cap-bound} non esiste e \texttt{init} non ha nessun ruolo speciale, inoltre in questo caso all'avvio il valore iniziale prevede la presenza di tutte le capacità (compresa \const{CAP\_SETPCAP}). @@ -6976,7 +6976,7 @@ sez.~\ref{sec:socket_credential_xxx}), assegnare classi privilegiate (\const{IOPRIO\_CLASS\_RT} e prima del kernel 2.6.25 anche \const{IOPRIO\_CLASS\_IDLE}) per lo scheduling dell'I/O (vedi sez.~\ref{sec:io_priority}), superare il limite di sistema sul numero massimo -di file aperti,\footnote{quello indicato da \sysctlfile{fs/file-max}.} +di file aperti,\footnote{quello indicato da \sysctlfiled{fs/file-max}.} effettuare operazioni privilegiate sulle chiavi mantenute dal kernel (vedi sez.~\ref{sec:keyctl_management}), usare la funzione \func{lookup\_dcookie}, usare \const{CLONE\_NEWNS} con \func{unshare} e \func{clone}, (vedi diff --git a/fileio.tex b/fileio.tex index be0ef23..4a2ed34 100644 --- a/fileio.tex +++ b/fileio.tex @@ -1468,7 +1468,7 @@ scarico dei dati ad intervalli di tempo fissi. Con le nuove versioni del kernel queste operazioni vengono gestite direttamente dal sistema della memoria virtuale, attraverso opportuni \textit{task} interni al kernel il cui comportamento può essere controllato attraverso il file -\sysctlfile{vm/bdflush}.\footnote{per il significato dei valori che si possono +\sysctlfiled{vm/bdflush}.\footnote{per il significato dei valori che si possono scrivere in questo file si consulti la documentazione allegata ai sorgenti del kernel nel file \file{Documentation/sysctl/vm.txt}, trattandosi di argomenti di natura sistemistica non li prenderemo in esame.} Si tenga @@ -2216,7 +2216,7 @@ il nome indicato nel precedente prototipo), è riportata di seguito: \const{F\_GETPIPE\_SZ}. I processi non privilegiati\footnote{per la precisione occorre la capacità \const{CAP\_SYS\_RESOURCE}.} non possono impostare un valore valore superiore a quello indicato da - \sysctlfile{fs/pipe-size-max}. Il comando è specifico di Linux, è + \sysctlfiled{fs/pipe-size-max}. Il comando è specifico di Linux, è disponibile solo a partire dal kernel 2.6.35, ed è utilizzabile solo se si è definita la macro \macro{\_GNU\_SOURCE}. diff --git a/ipc.tex b/ipc.tex index 91d38fe..d32422c 100644 --- a/ipc.tex +++ b/ipc.tex @@ -1127,8 +1127,8 @@ Il sistema dispone sempre di un numero fisso di oggetti di IPC, fino al kernel \const{SHMMNI}, e potevano essere cambiati (come tutti gli altri limiti relativi al \textit{SysV-IPC}) solo con una ricompilazione del kernel. A partire dal kernel 2.4.x è possibile cambiare questi valori a sistema attivo -scrivendo sui file \sysctlrelfile{kernel}{shmmni}, -\sysctlrelfile{kernel}{msgmni} e \sysctlrelfile{kernel}{sem} di +scrivendo sui file \sysctlrelfiled{kernel}{shmmni}, +\sysctlrelfiled{kernel}{msgmni} e \sysctlrelfiled{kernel}{sem} di \file{/proc/sys/kernel} o con l'uso di \func{sysctl}. \begin{figure}[!htb] @@ -1308,8 +1308,8 @@ Le code di messaggi sono caratterizzate da tre limiti fondamentali, un tempo definiti staticamente e corrispondenti alle prime tre costanti riportate in tab.~\ref{tab:ipc_msg_limits}. Come accennato però con tutte le versioni più recenti del kernel con Linux è possibile modificare questi limiti attraverso -l'uso di \func{sysctl} o scrivendo nei file \sysctlrelfile{kernel}{msgmax}, -\sysctlrelfile{kernel}{msgmnb} e \sysctlrelfile{kernel}{msgmni} di +l'uso di \func{sysctl} o scrivendo nei file \sysctlrelfiled{kernel}{msgmax}, +\sysctlrelfiled{kernel}{msgmnb} e \sysctlrelfiled{kernel}{msgmni} di \file{/proc/sys/kernel/}. \itindbeg{linked~list} @@ -3784,7 +3784,7 @@ I suddetti limiti di sistema sono impostati attraverso altrettanti file in \texttt{/proc/sys/fs/mqueue}, in particolare i file che controllano i valori dei limiti sono: \begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}} -\item[\sysctlfile{fs/mqueue/msg\_max}] Indica il valore massimo del numero di +\item[\sysctlfiled{fs/mqueue/msg\_max}] Indica il valore massimo del numero di messaggi in una coda e agisce come limite superiore per il valore di \var{attr->mq\_maxmsg} in \func{mq\_open}. Il suo valore di default è 10. Il valore massimo è \const{HARD\_MAX} che vale \code{(131072/sizeof(void *))}, @@ -3793,7 +3793,7 @@ dei limiti sono: precisamente con la \textit{capability} \const{CAP\_SYS\_RESOURCE}) ma \const{HARD\_MAX} resta comunque non superabile. -\item[\sysctlfile{fs/mqueue/msgsize\_max}] Indica il valore massimo della +\item[\sysctlfiled{fs/mqueue/msgsize\_max}] Indica il valore massimo della dimensione in byte di un messaggio sulla coda ed agisce come limite superiore per il valore di \var{attr->mq\_msgsize} in \func{mq\_open}. Il suo valore di default è 8192. Il valore massimo è 1048576 ed il valore @@ -3802,7 +3802,7 @@ dei limiti sono: processi con privilegi amministrativi (con la \textit{capability} \const{CAP\_SYS\_RESOURCE}). -\item[\sysctlfile{fs/mqueue/queues\_max}] Indica il numero massimo di code di +\item[\sysctlfiled{fs/mqueue/queues\_max}] Indica il numero massimo di code di messaggi creabili in totale sul sistema, il valore di default è 256 ma si può usare un valore qualunque fra $0$ e \const{INT\_MAX}. Il limite non viene applicato ai processi con privilegi amministrativi (cioè con la diff --git a/macro.tex b/macro.tex index 38b2f07..9e0fa9e 100644 --- a/macro.tex +++ b/macro.tex @@ -214,76 +214,74 @@ \newcommand{\ctyp}[1]{\texttt{#1}} % C standard type \newcommand{\headfile}[1]{% -%\index{file!include!menzione{#1}@{{\tt {#1}}}}\texttt{#1}% \texttt{#1}% } % header file name - \newcommand{\headfiled}[1]{% \index{file!include!{#1}@{{\tt {#1}}}}\texttt{#1}% } % header file name \newcommand{\procfile}[1]{% \index{file!filesystem~\texttt{/proc}!{#1}@{{\tt {#1}}}}\texttt{#1}% -%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}% } % /proc file name \newcommand{\procfilem}[1]{% \texttt{#1}% %\index{file!filesystem~\texttt{/proc}!{#1}@{{\tt {#1}}}}\texttt{#1}% %\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}% } % /proc file name + \newcommand{\sysfile}[1]{% +\texttt{#1}% +%\index{file!di~sistema!{#1}@{{\tt {#1}}}}\texttt{#1}% +} % system file name +\newcommand{\sysfiled}[1]{% \index{file!di~sistema!{#1}@{{\tt {#1}}}}\texttt{#1}% -%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}% } % system file name + \newcommand{\conffile}[1]{% \texttt{#1}% %\index{file!di~configurazione!{#1}@{{\tt {#1}}}}\texttt{#1}% -%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}% } % configuration file name \newcommand{\conffiled}[1]{% \index{file!di~configurazione!{#1}@{{\tt {#1}}}}\texttt{#1}% -%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}% } % configuration file name \newcommand{\conffilebeg}[1]{% \index{file!di~configurazione!{#1}@{{\tt {#1}}}}% -%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}% } % configuration file name \newcommand{\conffileend}[1]{% \index{file!di~configurazione!{#1}@{{\tt {#1}}}}% -%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}% } % configuration file name + \newcommand{\procrelfile}[2]{% \index{file!filesystem~\texttt{/proc}!{#1/#2}@{{\tt {#1/#2}}}}\texttt{#2}% -%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}% } -\newcommand{\sysctlfile}[1]{% +\newcommand{\sysctlfiled}[1]{% \index{file!file di controllo (sotto \texttt{/proc/sys})!{#1}@{{\tt {#1}}}}\texttt{/proc/sys/#1}% -%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}% -} % /proc/sys file name +} % /proc/sys file -\newcommand{\sysctlfilem}[1]{% +\newcommand{\sysctlfile}[1]{% \texttt{/proc/sys/#1}% %\index{file!file di controllo (sotto \texttt{/proc/sys})!{#1}@{{\tt {#1}}}}\texttt{/proc/sys/#1}% -%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}% -} % /proc/sys file name +} % /proc/sys file \newcommand{\sysctlrelfile}[2]{% -\index{file!file di controllo (sotto \texttt{/proc/sys})!{#1/#2}@{{\tt {#1/#2}}}}\texttt{#2}% -%\index{#1@{{\tt {#1}} (direttiva)}}\texttt{#1}% +\texttt{#2}% +%\index{file!file di controllo (sotto \texttt{/proc/sys})!{#1/#2}@{{\tt {#1/#2}}}}\texttt{#2}% } % /proc/sys file name +\newcommand{\sysctlrelfiled}[2]{% +\index{file!file di controllo (sotto \texttt{/proc/sys})!{#1/#2}@{{\tt {#1/#2}}}}\texttt{#2}% +} % /proc/sys file name \newcommand{\kstruct}[1]{% \texttt{#1}% %\index{struttura dati del kernel!{#1}@{{\tt {#1}}}}\texttt{#1}% -%\index{#1@{{\tt {#1}} (struttura dati)}}\texttt{#1}% -} % struttura dati +} % struttura dati del kernel \newcommand{\kstructd}[1]{% \index{struttura dati del kernel!{#1}@{{\tt {#1}}}}\texttt{#1}% %\index{struttura dati del kernel!{#1}@{{\tt {#1}}}!definizione di}\texttt{#1}% -%\index{#1@{{\tt {#1}} (struttura dati)}!definizione di}\texttt{#1}% } % struttura dati + \newcommand{\typed}[1]{% \index{tipo di dato!{#1}@{{\tt {#1}}}}\texttt{#1}% %\index{#1@{{\tt {#1}} (tipo)}}\texttt{#1}% diff --git a/prochand.tex b/prochand.tex index 62a7ea5..1a51f3c 100644 --- a/prochand.tex +++ b/prochand.tex @@ -210,7 +210,7 @@ riparte dal numero più basso disponibile a partire da un minimo di \constd{PID\_MAX} nei file \file{threads.h} e \file{fork.c} dei sorgenti del kernel, con il 2.6.x e la nuova interfaccia per i \textit{thread} anche il meccanismo di allocazione dei \ids{PID} è stato modificato ed il valore - massimo è impostabile attraverso il file \sysctlfile{kernel/pid\_max} e di + massimo è impostabile attraverso il file \sysctlfiled{kernel/pid\_max} e di default vale 32768.} che serve a riservare i \ids{PID} più bassi ai processi eseguiti direttamente dal kernel. Per questo motivo, come visto in sez.~\ref{sec:proc_hierarchy}, il processo di avvio (\cmd{init}) ha sempre il @@ -1298,8 +1298,8 @@ nuovo riceverne lo stato. \constd{WEXITED} & Ritorna quando un processo figlio è terminato.\\ \constd{WNOHANG} & Ritorna immediatamente anche se non c'è niente da notificare.\\ - \constd{WSTOPPED} & Ritorna quando un processo figlio è stato fermato.\\ - \constd{WCONTINUED}& Ritorna quando un processo figlio che era stato + \constd{WSTOPPED} & Ritorna quando un processo figlio è stato fermato.\\ + \const{WCONTINUED} & Ritorna quando un processo figlio che era stato fermato ha ripreso l'esecuzione.\\ \constd{WNOWAIT} & Lascia il processo ancora in attesa di ricezione, così che una successiva chiamata possa di nuovo riceverne @@ -1674,8 +1674,8 @@ dell'eseguibile; il formato è ormai in completo disuso, per cui è molto probabile che non il relativo supporto non sia disponibile. Se il programma è in formato ELF per caricare le librerie dinamiche viene usato l'interprete indicato nel segmento \constd{PT\_INTERP} previsto dal formato stesso, in -genere questo è \sysfile{/lib/ld-linux.so.1} per programmi collegati con la -\acr{libc5}, e \sysfile{/lib/ld-linux.so.2} per programmi collegati con la +genere questo è \sysfiled{/lib/ld-linux.so.1} per programmi collegati con la +\acr{libc5}, e \sysfiled{/lib/ld-linux.so.2} per programmi collegati con la \acr{glibc}. Infine nel caso il programma che si vuole eseguire sia uno script e non un @@ -1931,11 +1931,11 @@ dell'utente che ha lanciato il programma, effettuare il lavoro che non necessita di privilegi aggiuntivi, ed eventualmente tornare indietro. Come esempio per chiarire l'uso di queste funzioni prendiamo quello con cui -viene gestito l'accesso al file \sysfile{/var/run/utmp}. In questo file viene +viene gestito l'accesso al file \sysfiled{/var/run/utmp}. In questo file viene registrato chi sta usando il sistema al momento corrente; chiaramente non può essere lasciato aperto in scrittura a qualunque utente, che potrebbe falsificare la registrazione. Per questo motivo questo file (e l'analogo -\sysfile{/var/log/wtmp} su cui vengono registrati login e logout) appartengono +\sysfiled{/var/log/wtmp} su cui vengono registrati login e logout) appartengono ad un gruppo dedicato (in genere \acr{utmp}) ed i programmi che devono accedervi (ad esempio tutti i programmi di terminale in X, o il programma \cmd{screen} che crea terminali multipli su una console) appartengono a questo @@ -3057,7 +3057,7 @@ l'introduzione del \textit{Completely Fair Scheduler} questo comportamento è cambiato ed un processo che chiama la funzione viene inserito nella lista dei processi inattivo, con un tempo molto maggiore.\footnote{è comunque possibile ripristinare un comportamento analogo al precedente scrivendo il valore 1 - nel file \sysctlfile{kernel/sched\_compat\_yield}.} + nel file \sysctlfiled{kernel/sched\_compat\_yield}.} L'uso delle funzione nella programmazione ordinaria può essere utile e migliorare le prestazioni generali del sistema quando si è appena rilasciata @@ -3894,7 +3894,7 @@ Introdotta a partire dal kernel 2.4.21, solo su PowerPC. Il comportamento di default prevede che per tutti i processi si applichi la politica generale di sistema definita nel file - \sysctlfile{vm/memory\_failure\_early\_kill}, ma specificando + \sysctlfiled{vm/memory\_failure\_early\_kill}, ma specificando per \param{arg2} il valore \constd{PR\_MCE\_KILL\_SET} è possibile impostare con il contenuto di \param{arg3} una politica specifica del processo chiamante. Si può tornare alla politica di default del sistema utilizzando diff --git a/session.tex b/session.tex index 5a96413..bec30f9 100644 --- a/session.tex +++ b/session.tex @@ -98,21 +98,21 @@ dei compiti specifici. Per questo l'esecuzione di una riga di comando può originare più di un processo, quindi nella gestione del \textit{job control} non si può far riferimento ai singoli processi. Per questo il kernel prevede la possibilità -di raggruppare più processi in un cosiddetto \itindex{process~group} -\textit{process group} (detto anche \textsl{raggruppamento di processi}, vedi +di raggruppare più processi in un cosiddetto \textit{process group} (detto +anche \textsl{raggruppamento di processi}, vedi sez.~\ref{sec:sess_proc_group}). Deve essere cura della shell far sì che tutti i processi che originano da una stessa riga di comando appartengano allo stesso raggruppamento di processi, in modo che le varie funzioni di controllo, ed i segnali inviati dal terminale, possano fare riferimento ad esso. In generale all'interno di una sessione avremo un eventuale (può non esserci) -\itindex{process~group} \textit{process group} in \textit{foreground}, che -riunisce i processi che possono accedere al terminale, e più -\itindex{process~group} \textit{process group} in \textit{background}, che non -possono accedervi. Il \textit{job control} prevede che quando un processo -appartenente ad un raggruppamento in \textit{background} cerca di accedere al -terminale, venga inviato un segnale a tutti i processi del raggruppamento, in -modo da bloccarli (vedi sez.~\ref{sec:sess_ctrl_term}). +\textit{process group} in \textit{foreground}, che riunisce i processi che +possono accedere al terminale, e più \textit{process group} in +\textit{background}, che non possono accedervi. Il \textit{job control} +prevede che quando un processo appartenente ad un raggruppamento in +\textit{background} cerca di accedere al terminale, venga inviato un segnale a +tutti i processi del raggruppamento, in modo da bloccarli (vedi +sez.~\ref{sec:sess_ctrl_term}). Un comportamento analogo si ha anche per i segnali generati dai comandi di tastiera inviati dal terminale, che vengono inviati a tutti i processi del @@ -237,10 +237,9 @@ prototipo è: \end{funcproto} La funzione assegna al \ids{PGID} il valore del \ids{PID} del processo -corrente, rendendolo in tal modo \itindex{process~group~leader} \textit{group - leader} di un nuovo raggruppamento. Tutti i successivi processi da esso -creati apparterranno (a meno di non cambiare di nuovo il \ids{PGID}) al nuovo -raggruppamento. +corrente, rendendolo in tal modo \textit{group leader} di un nuovo +raggruppamento. Tutti i successivi processi da esso creati apparterranno (a +meno di non cambiare di nuovo il \ids{PGID}) al nuovo raggruppamento. La versione illustrata è quella usata nella definizione di POSIX.1, in BSD viene usata una funzione con questo nome, che però è identica a @@ -328,12 +327,11 @@ uguale al suo \ids{PID}) ed unico componente.\footnote{in Linux la proprietà è terminale di controllo (torneremo sull'argomento in sez.~\ref{sec:sess_ctrl_term}) cui fosse in precedenza associato. -La funzione ha successo soltanto se il processo non è già -\itindex{process~group~leader} leader di un \textit{process group}, per cui -per usarla di norma si esegue una \func{fork} e si esce, per poi chiamare -\func{setsid} nel processo figlio, in modo che, avendo questo lo stesso -\ids{PGID} del padre ma un \ids{PID} diverso, non ci siano possibilità di -errore. +La funzione ha successo soltanto se il processo non è già leader di un +\textit{process group}, per cui per usarla di norma si esegue una \func{fork} +e si esce, per poi chiamare \func{setsid} nel processo figlio, in modo che, +avendo questo lo stesso \ids{PGID} del padre ma un \ids{PID} diverso, non ci +siano possibilità di errore. Potrebbe sorgere il dubbio che, per il riutilizzo dei valori dei \ids{PID} fatto nella creazione dei nuovi processi (vedi sez.~\ref{sec:proc_pid}), il @@ -384,7 +382,7 @@ automaticamente a meno di non avere richiesto esplicitamente il contrario aprendo il terminale di controllo con il flag \const{O\_NOCTTY} (vedi sez.~\ref{sec:file_open_close}). In questo Linux segue la semantica di SVr4; BSD invece richiede che il terminale venga allocato esplicitamente con una -\func{ioctl} con il comando \const{TIOCSCTTY}. +\func{ioctl} con il comando \constd{TIOCSCTTY}. In genere, a meno di redirezioni, nelle sessioni di lavoro il terminale di controllo è associato ai file standard (input, output ed error) dei processi @@ -423,16 +421,15 @@ Come accennato in sez.~\ref{sec:sess_job_control_overview}, tutti i processi (e relativi raggruppamenti) che non fanno parte del gruppo di \textit{foreground} sono detti in \textit{background}; se uno si essi cerca di accedere al terminale di controllo provocherà l'invio da parte del kernel di -uno dei due segnali \signal{SIGTTIN} o \signal{SIGTTOU} (a seconda che l'accesso -sia stato in lettura o scrittura) a tutto il suo \itindex{process~group} -\textit{process group}; dato che il comportamento di default di questi segnali -(si riveda quanto esposto in sez.~\ref{sec:sig_job_control}) è di fermare il -processo, di norma questo comporta che tutti i membri del gruppo verranno -fermati, ma non si avranno condizioni di errore.\footnote{la shell in genere - notifica comunque un avvertimento, avvertendo la presenza di processi - bloccati grazie all'uso di \func{waitpid}.} Se però si bloccano o ignorano i -due segnali citati, le funzioni di lettura e scrittura falliranno con un -errore di \errcode{EIO}. +uno dei due segnali \signal{SIGTTIN} o \signal{SIGTTOU} (a seconda che +l'accesso sia stato in lettura o scrittura) a tutto il suo \textit{process + group}; dato che il comportamento di default di questi segnali (si riveda +quanto esposto in sez.~\ref{sec:sig_job_control}) è di fermare il processo, di +norma questo comporta che tutti i membri del gruppo verranno fermati, ma non +si avranno condizioni di errore.\footnote{la shell in genere notifica comunque + un avvertimento, avvertendo la presenza di processi bloccati grazie all'uso + di \func{waitpid}.} Se però si bloccano o ignorano i due segnali citati, le +funzioni di lettura e scrittura falliranno con un errore di \errcode{EIO}. In genere la funzione viene chiamata da un processo che è gruppo di \textit{foreground} per passare l'accesso al terminale ad altri processi, @@ -465,15 +462,15 @@ La funzione legge il \textit{process group} di \textit{foreground} associato al file descriptor \param{fd}, che deve essere un terminale, restituendolo come risultato. Sia questa funzione che la precedente sono state introdotte con lo standard POSIX.1-2001, ma su Linux sono realizzate utilizzando le -operazioni di \func{ioctl} con i comandi \const{TIOCGPGRP} e -\const{TIOCSPGRP}. +operazioni di \func{ioctl} con i comandi \constd{TIOCGPGRP} e +\constd{TIOCSPGRP}. Si noti come entrambe le funzioni usino come argomento il valore di un file descriptor, il risultato comunque non dipende dal file descriptor che si usa ma solo dal terminale cui fa riferimento. Il kernel inoltre permette a ciascun processo di accedere direttamente al suo terminale di controllo attraverso il file speciale \file{/dev/tty}, che per ogni processo è un sinonimo per il -proprio terminale di controllo. Questo consente anche a processi che possono +proprio terminale di controllo. Questo consente anche a processi che possono aver rediretto l'output di accedere al terminale di controllo, pur non disponendo più del file descriptor originario; un caso tipico è il programma \cmd{crypt} che accetta la redirezione sullo \textit{standard input} di un @@ -522,27 +519,26 @@ controllo dello stesso. Questa è la situazione in cui si ha quello che viene chiamato un \itindex{process~group~orphaned} \textit{orphaned process group}. Lo standard -POSIX.1 lo definisce come un \itindex{process~group} \textit{process group} i -cui processi hanno come padri esclusivamente o altri processi nel -raggruppamento, o processi fuori della sessione. Lo standard prevede inoltre -che se la terminazione di un processo fa sì che un raggruppamento di processi -diventi orfano e se i suoi membri sono bloccati, ad essi vengano inviati in -sequenza i segnali di \signal{SIGHUP} e \signal{SIGCONT}. +POSIX.1 lo definisce come un \textit{process group} i cui processi hanno come +padri esclusivamente o altri processi nel raggruppamento, o processi fuori +della sessione. Lo standard prevede inoltre che se la terminazione di un +processo fa sì che un raggruppamento di processi diventi orfano e se i suoi +membri sono bloccati, ad essi vengano inviati in sequenza i segnali di +\signal{SIGHUP} e \signal{SIGCONT}. La definizione può sembrare complicata, e a prima vista non è chiaro cosa tutto ciò abbia a che fare con il problema della terminazione del processo di controllo. Consideriamo allora cosa avviene di norma nel \textit{job control}: una sessione viene creata con \func{setsid} che crea anche un -nuovo \itindex{process~group} \textit{process group}. Per definizione -quest'ultimo è sempre \itindex{process~group~orphaned} \textsl{orfano}, dato -che il padre del leader di sessione è fuori dalla stessa e il nuovo -\textit{process group} \itindex{process~group} contiene solo il leader di -sessione. Questo è un caso limite, e non viene emesso nessun segnale perché -quanto previsto dallo standard riguarda solo i raggruppamenti che diventano -orfani in seguito alla terminazione di un processo.\footnote{l'emissione dei - segnali infatti avviene solo nella fase di uscita del processo, come una - delle operazioni legate all'esecuzione di \func{\_exit}, secondo quanto - illustrato in sez.~\ref{sec:proc_termination}.} +nuovo \textit{process group}. Per definizione quest'ultimo è sempre +\textsl{orfano}, dato che il padre del leader di sessione è fuori dalla stessa +e il nuovo \textit{process group} contiene solo il leader di sessione. Questo +è un caso limite, e non viene emesso nessun segnale perché quanto previsto +dallo standard riguarda solo i raggruppamenti che diventano orfani in seguito +alla terminazione di un processo.\footnote{l'emissione dei segnali infatti + avviene solo nella fase di uscita del processo, come una delle operazioni + legate all'esecuzione di \func{\_exit}, secondo quanto illustrato in + sez.~\ref{sec:proc_termination}.} Il leader di sessione provvederà a creare nuovi raggruppamenti che a questo punto non sono orfani in quanto esso resta padre per almeno uno dei processi @@ -587,7 +583,7 @@ di avvio di System V;\footnote{in realtà negli ultimi tempi questa situazione \texttt{systemd}, ma per quanto trattato in questa sezione il risultato finale non cambia, si avrà comunque il lancio di un programma che consenta l'accesso al terminale.} questa prevede che \cmd{init} legga dal file di -configurazione \conffile{/etc/inittab} quali programmi devono essere lanciati, +configurazione \conffiled{/etc/inittab} quali programmi devono essere lanciati, ed in quali modalità, a seconda del cosiddetto \textit{run level}, anch'esso definito nello stesso file. @@ -622,18 +618,17 @@ dall'amministratore nel file di configurazione del programma, Quando viene lanciato da \cmd{init} il programma parte con i privilegi di amministratore e con un ambiente vuoto; \cmd{getty} si cura di chiamare -\func{setsid} per creare una nuova sessione ed un nuovo -\itindex{process~group} \textit{process group}, e di aprire il terminale (che -così diventa il terminale di controllo della sessione) in lettura sullo -\textit{standard input} ed in scrittura sullo \textit{standard output} e sullo -\textit{standard error}; inoltre effettuerà, qualora servano, ulteriori -impostazioni.\footnote{ad esempio, come qualcuno si sarà accorto scrivendo un - nome di login in maiuscolo, può effettuare la conversione automatica - dell'input in minuscolo, ponendosi in una modalità speciale che non - distingue fra i due tipi di caratteri (a beneficio di alcuni vecchi - terminali che non supportavano le minuscole).} Alla fine il programma -stamperà un messaggio di benvenuto per poi porsi in attesa dell'immissione del -nome di un utente. +\func{setsid} per creare una nuova sessione ed un nuovo \textit{process + group}, e di aprire il terminale (che così diventa il terminale di controllo +della sessione) in lettura sullo \textit{standard input} ed in scrittura sullo +\textit{standard output} e sullo \textit{standard error}; inoltre effettuerà, +qualora servano, ulteriori impostazioni.\footnote{ad esempio, come qualcuno si + sarà accorto scrivendo un nome di login in maiuscolo, può effettuare la + conversione automatica dell'input in minuscolo, ponendosi in una modalità + speciale che non distingue fra i due tipi di caratteri (a beneficio di + alcuni vecchi terminali che non supportavano le minuscole).} Alla fine il +programma stamperà un messaggio di benvenuto per poi porsi in attesa +dell'immissione del nome di un utente. Una volta che si sia immesso il nome di login \cmd{getty} esegue direttamente il programma \cmd{login} con una \func{execle}, passando come argomento la @@ -725,10 +720,10 @@ occorrerà predisporlo in modo che esso compia le seguenti azioni: \begin{enumerate*} \item Eseguire una \func{fork} e terminare immediatamente il processo padre proseguendo l'esecuzione nel figlio. In questo modo si ha la certezza che - il figlio non è un \itindex{process~group~leader} \textit{process group - leader}, (avrà il \ids{PGID} del padre, ma un \ids{PID} diverso) e si può - chiamare \func{setsid} con successo. Inoltre la shell considererà terminato - il comando all'uscita del padre. + il figlio non è un \textit{process group leader}, (avrà il \ids{PGID} del + padre, ma un \ids{PID} diverso) e si può chiamare \func{setsid} con + successo. Inoltre la shell considererà terminato il comando all'uscita del + padre. \item Eseguire \func{setsid} per creare una nuova sessione ed un nuovo raggruppamento di cui il processo diventa automaticamente il leader, che però non ha associato nessun terminale di controllo. @@ -874,25 +869,25 @@ specificato con un OR aritmetico. \textbf{Valore}& \textbf{Significato}\\ \hline \hline - \const{LOG\_AUTH} & Messaggi relativi ad autenticazione e sicurezza, - obsoleto, è sostituito da \const{LOG\_AUTHPRIV}.\\ - \const{LOG\_AUTHPRIV} & Sostituisce \const{LOG\_AUTH}.\\ - \const{LOG\_CRON} & Messaggi dei demoni di gestione dei comandi - programmati (\cmd{cron} e \cmd{at}).\\ - \const{LOG\_DAEMON} & Demoni di sistema.\\ - \const{LOG\_FTP} & Servizio FTP.\\ - \const{LOG\_KERN} & Messaggi del kernel.\\ - \const{LOG\_LOCAL0} & Riservato all'amministratore per uso locale.\\ + \constd{LOG\_AUTH} & Messaggi relativi ad autenticazione e sicurezza, + obsoleto, è sostituito da \const{LOG\_AUTHPRIV}.\\ + \constd{LOG\_AUTHPRIV} & Sostituisce \const{LOG\_AUTH}.\\ + \constd{LOG\_CRON} & Messaggi dei demoni di gestione dei comandi + programmati (\cmd{cron} e \cmd{at}).\\ + \constd{LOG\_DAEMON} & Demoni di sistema.\\ + \constd{LOG\_FTP} & Servizio FTP.\\ + \constd{LOG\_KERN} & Messaggi del kernel.\\ + \constd{LOG\_LOCAL0} & Riservato all'amministratore per uso locale.\\ \hspace{.5cm}$\vdots$ & \hspace{3cm}$\vdots$\\ - \const{LOG\_LOCAL7} & Riservato all'amministratore per uso locale.\\ - \const{LOG\_LPR} & Messaggi del sistema di gestione delle stampanti.\\ - \const{LOG\_MAIL} & Messaggi del sistema di posta elettronica.\\ - \const{LOG\_NEWS} & Messaggi del sistema di gestione delle news + \constd{LOG\_LOCAL7} & Riservato all'amministratore per uso locale.\\ + \constd{LOG\_LPR} & Messaggi del sistema di gestione delle stampanti.\\ + \constd{LOG\_MAIL} & Messaggi del sistema di posta elettronica.\\ + \constd{LOG\_NEWS} & Messaggi del sistema di gestione delle news (USENET).\\ - \const{LOG\_SYSLOG} & Messaggi generati dal demone di gestione del + \constd{LOG\_SYSLOG} & Messaggi generati dal demone di gestione del \textit{syslog}.\\ - \const{LOG\_USER} & Messaggi generici a livello utente.\\ - \const{LOG\_UUCP} & Messaggi del sistema UUCP (\textit{Unix to Unix + \constd{LOG\_USER} & Messaggi generici a livello utente.\\ + \constd{LOG\_UUCP} & Messaggi del sistema UUCP (\textit{Unix to Unix CoPy}), ormai in disuso.\\ \hline \end{tabular} @@ -914,18 +909,19 @@ tab.~\ref{tab:sess_openlog_option}. \textbf{Valore}& \textbf{Significato}\\ \hline \hline -\const{LOG\_CONS} & Scrive sulla console in caso di errore nell'invio del - messaggio al sistema del \textit{syslog}. \\ -\const{LOG\_NDELAY} & Apre la connessione al sistema del \textit{syslog} - subito invece di attendere l'invio del primo messaggio.\\ -\const{LOG\_NOWAIT} & Non usato su Linux, su altre piattaforme non attende i - processi figli creati per inviare il messaggio.\\ -\const{LOG\_ODELAY} & Attende il primo messaggio per aprire la connessione al - sistema del \textit{syslog}.\\ -\const{LOG\_PERROR} & Stampa anche su \file{stderr} (non previsto in - POSIX.1-2001).\\ -\const{LOG\_PID} & Inserisce nei messaggi il \ids{PID} del processo - chiamante.\\ + \constd{LOG\_CONS} & Scrive sulla console in caso di errore nell'invio del + messaggio al sistema del \textit{syslog}. \\ + \constd{LOG\_NDELAY} & Apre la connessione al sistema del \textit{syslog} + subito invece di attendere l'invio del primo + messaggio.\\ + \constd{LOG\_NOWAIT} & Non usato su Linux, su altre piattaforme non attende i + processi figli creati per inviare il messaggio.\\ + \constd{LOG\_ODELAY} & Attende il primo messaggio per aprire la connessione al + sistema del \textit{syslog}.\\ + \constd{LOG\_PERROR} & Stampa anche su \file{stderr} (non previsto in + POSIX.1-2001).\\ + \constd{LOG\_PID} & Inserisce nei messaggi il \ids{PID} del processo + chiamante.\\ \hline \end{tabular} \caption{Valori possibili per l'argomento \param{option} di \func{openlog}.} @@ -964,15 +960,15 @@ forniti secondo quanto richiesto da \param{format}. \textbf{Valore}& \textbf{Significato}\\ \hline \hline - \const{LOG\_EMERG} & Il sistema è inutilizzabile.\\ - \const{LOG\_ALERT} & C'è una emergenza che richiede intervento - immediato.\\ - \const{LOG\_CRIT} & Si è in una condizione critica.\\ - \const{LOG\_ERR} & Si è in una condizione di errore.\\ - \const{LOG\_WARNING} & Messaggio di avvertimento.\\ - \const{LOG\_NOTICE} & Notizia significativa relativa al comportamento.\\ - \const{LOG\_INFO} & Messaggio informativo.\\ - \const{LOG\_DEBUG} & Messaggio di debug.\\ + \constd{LOG\_EMERG} & Il sistema è inutilizzabile.\\ + \constd{LOG\_ALERT} & C'è una emergenza che richiede intervento + immediato.\\ + \constd{LOG\_CRIT} & Si è in una condizione critica.\\ + \constd{LOG\_ERR} & Si è in una condizione di errore.\\ + \constd{LOG\_WARNING} & Messaggio di avvertimento.\\ + \constd{LOG\_NOTICE} & Notizia significativa relativa al comportamento.\\ + \constd{LOG\_INFO} & Messaggio informativo.\\ + \constd{LOG\_DEBUG} & Messaggio di debug.\\ \hline \end{tabular} \caption{Valori possibili per l'indice di importanza del messaggio da @@ -1044,9 +1040,9 @@ valore non nullo per \param{mask} la registrazione dei messaggi viene disabilitata per tutte quelle priorità che non rientrano nella maschera. In genere il valore viene impostato usando la macro -\macro{LOG\_MASK}\texttt{(p)} dove \code{p} è una delle costanti di +\macrod{LOG\_MASK}\texttt{(p)} dove \code{p} è una delle costanti di tab.~\ref{tab:sess_syslog_priority}. É inoltre disponibile anche la macro -\macro{LOG\_UPTO}\texttt{(p)} che permette di specificare automaticamente +\macrod{LOG\_UPTO}\texttt{(p)} che permette di specificare automaticamente tutte le priorità fino a quella indicata da \code{p}. Una volta che si sia certi che non si intende registrare più nessun messaggio @@ -1112,7 +1108,7 @@ come \textit{console} di sistema,\footnote{quello che viene indicato con il di blocco totale del sistema (nell'assunzione che la console sia collegata). In particolare la stampa dei messaggi sulla console è controllata dal -contenuto del file \sysctlfile{kernel/printk} (o con l'equivalente parametro +contenuto del file \sysctlfiled{kernel/printk} (o con l'equivalente parametro di \func{sysctl}) che prevede quattro valori numerici interi: il primo, \textit{console\_loglevel}, indica la priorità corrente oltre la quale vengono stampati i messaggi sulla console, il secondo, @@ -1499,7 +1495,7 @@ come argomento \val{NULL} la funzione restituisce il puntatore ad una stringa statica che può essere sovrascritta da chiamate successive, e non è rientrante. Indicando invece un puntatore ad una zona di memoria già allocata la stringa sarà scritta su di essa, ma in questo caso il buffer preallocato -deve avere una dimensione di almeno \const{L\_ctermid} +deve avere una dimensione di almeno \constd{L\_ctermid} caratteri.\footnote{\const{L\_ctermid} è una delle varie costanti del sistema, non trattata esplicitamente in sez.~\ref{sec:sys_characteristics}, che indica la dimensione che deve avere una stringa per poter contenere il nome @@ -1550,74 +1546,74 @@ modificare i bit su cui non si interviene. \textbf{Valore}& \textbf{Significato}\\ \hline \hline - \const{IGNBRK} & Ignora le condizioni di BREAK sull'input. Una - \textit{condizione di BREAK} è definita nel contesto di - una trasmissione seriale asincrona come una sequenza di - bit nulli più lunga di un byte.\\ - \const{BRKINT} & Controlla la reazione ad un BREAK quando - \const{IGNBRK} non è impostato. Se \const{BRKINT} è - impostato il BREAK causa lo scarico delle code, - e se il terminale è il terminale di controllo per un - gruppo in foreground anche l'invio di \signal{SIGINT} ai - processi di quest'ultimo. Se invece \const{BRKINT} non è - impostato un BREAK viene letto come un carattere - NUL, a meno che non sia impostato \const{PARMRK} - nel qual caso viene letto come la sequenza di caratteri - \texttt{0xFF 0x00 0x00}.\\ - \const{IGNPAR} & Ignora gli errori di parità, il carattere viene passato - come ricevuto. Ha senso solo se si è impostato - \const{INPCK}.\\ - \const{PARMRK} & Controlla come vengono riportati gli errori di parità. Ha - senso solo se \const{INPCK} è impostato e \const{IGNPAR} - no. Se impostato inserisce una sequenza \texttt{0xFF - 0x00} prima di ogni carattere che presenta errori di - parità, se non impostato un carattere con errori di - parità viene letto come uno \texttt{0x00}. Se un - carattere ha il valore \texttt{0xFF} e \const{ISTRIP} - non è impostato, per evitare ambiguità esso viene sempre - riportato come \texttt{0xFF 0xFF}.\\ - \const{INPCK} & Abilita il controllo di parità in ingresso. Se non viene - impostato non viene fatto nessun controllo ed i caratteri - vengono passati in input direttamente.\\ - \const{ISTRIP} & Se impostato i caratteri in input sono tagliati a sette - bit mettendo a zero il bit più significativo, altrimenti - vengono passati tutti gli otto bit.\\ - \const{INLCR} & Se impostato in ingresso il carattere di a capo - (\verb|'\n'|) viene automaticamente trasformato in un - ritorno carrello (\verb|'\r'|).\\ - \const{IGNCR} & Se impostato il carattere di ritorno carrello - (\textit{carriage return}, \verb|'\r'|) viene scartato - dall'input. Può essere utile per i terminali che inviano - entrambi i caratteri di ritorno carrello e a capo - (\textit{newline}, \verb|'\n'|).\\ - \const{ICRNL} & Se impostato un carattere di ritorno carrello - (\verb|'\r'|) sul terminale viene automaticamente - trasformato in un a capo (\verb|'\n'|) sulla coda di - input.\\ - \const{IUCLC} & Se impostato trasforma i caratteri maiuscoli dal - terminale in minuscoli sull'ingresso (opzione non - POSIX).\\ - \const{IXON} & Se impostato attiva il controllo di flusso in uscita con i - caratteri di START e STOP. se si riceve - uno STOP l'output viene bloccato, e viene fatto - ripartire solo da uno START, e questi due - caratteri non vengono passati alla coda di input. Se non - impostato i due caratteri sono passati alla coda di input - insieme agli altri.\\ - \const{IXANY} & Se impostato con il controllo di flusso permette a - qualunque carattere di far ripartire l'output bloccato da - un carattere di STOP.\\ - \const{IXOFF} & Se impostato abilita il controllo di flusso in - ingresso. Il computer emette un carattere di STOP per - bloccare l'input dal terminale e lo sblocca con il - carattere START.\\ - \const{IMAXBEL}& Se impostato fa suonare il cicalino se si riempie la cosa - di ingresso; in Linux non è implementato e il kernel si - comporta cose se fosse sempre impostato (è una estensione - BSD).\\ - \const{IUTF8} & Indica che l'input è in UTF-8, cosa che consente di - utilizzare la cancellazione dei caratteri in maniera - corretta (dal kernel 2.6.4 e non previsto in POSIX).\\ + \constd{IGNBRK} & Ignora le condizioni di BREAK sull'input. Una + \textit{condizione di BREAK} è definita nel contesto di + una trasmissione seriale asincrona come una sequenza di + bit nulli più lunga di un byte.\\ + \constd{BRKINT} & Controlla la reazione ad un BREAK quando + \const{IGNBRK} non è impostato. Se \const{BRKINT} è + impostato il BREAK causa lo scarico delle code, + e se il terminale è il terminale di controllo per un + gruppo in foreground anche l'invio di \signal{SIGINT} ai + processi di quest'ultimo. Se invece \const{BRKINT} non è + impostato un BREAK viene letto come un carattere + NUL, a meno che non sia impostato \const{PARMRK} + nel qual caso viene letto come la sequenza di caratteri + \texttt{0xFF 0x00 0x00}.\\ + \constd{IGNPAR} & Ignora gli errori di parità, il carattere viene passato + come ricevuto. Ha senso solo se si è impostato + \const{INPCK}.\\ + \constd{PARMRK} & Controlla come vengono riportati gli errori di parità. Ha + senso solo se \const{INPCK} è impostato e \const{IGNPAR} + no. Se impostato inserisce una sequenza \texttt{0xFF + 0x00} prima di ogni carattere che presenta errori di + parità, se non impostato un carattere con errori di + parità viene letto come uno \texttt{0x00}. Se un + carattere ha il valore \texttt{0xFF} e \const{ISTRIP} + non è impostato, per evitare ambiguità esso viene sempre + riportato come \texttt{0xFF 0xFF}.\\ + \constd{INPCK} & Abilita il controllo di parità in ingresso. Se non viene + impostato non viene fatto nessun controllo ed i caratteri + vengono passati in input direttamente.\\ + \constd{ISTRIP} & Se impostato i caratteri in input sono tagliati a sette + bit mettendo a zero il bit più significativo, altrimenti + vengono passati tutti gli otto bit.\\ + \constd{INLCR} & Se impostato in ingresso il carattere di a capo + (\verb|'\n'|) viene automaticamente trasformato in un + ritorno carrello (\verb|'\r'|).\\ + \constd{IGNCR} & Se impostato il carattere di ritorno carrello + (\textit{carriage return}, \verb|'\r'|) viene scartato + dall'input. Può essere utile per i terminali che inviano + entrambi i caratteri di ritorno carrello e a capo + (\textit{newline}, \verb|'\n'|).\\ + \constd{ICRNL} & Se impostato un carattere di ritorno carrello + (\verb|'\r'|) sul terminale viene automaticamente + trasformato in un a capo (\verb|'\n'|) sulla coda di + input.\\ + \constd{IUCLC} & Se impostato trasforma i caratteri maiuscoli dal + terminale in minuscoli sull'ingresso (opzione non + POSIX).\\ + \constd{IXON} & Se impostato attiva il controllo di flusso in uscita con i + caratteri di START e STOP. se si riceve + uno STOP l'output viene bloccato, e viene fatto + ripartire solo da uno START, e questi due + caratteri non vengono passati alla coda di input. Se non + impostato i due caratteri sono passati alla coda di input + insieme agli altri.\\ + \constd{IXANY} & Se impostato con il controllo di flusso permette a + qualunque carattere di far ripartire l'output bloccato da + un carattere di STOP.\\ + \constd{IXOFF} & Se impostato abilita il controllo di flusso in + ingresso. Il computer emette un carattere di STOP per + bloccare l'input dal terminale e lo sblocca con il + carattere START.\\ + \constd{IMAXBEL}& Se impostato fa suonare il cicalino se si riempie la cosa + di ingresso; in Linux non è implementato e il kernel si + comporta cose se fosse sempre impostato (è una estensione + BSD).\\ + \constd{IUTF8} & Indica che l'input è in UTF-8, cosa che consente di + utilizzare la cancellazione dei caratteri in maniera + corretta (dal kernel 2.6.4 e non previsto in POSIX).\\ \hline \end{tabular} \caption{Costanti identificative dei vari bit del flag di controllo @@ -1655,44 +1651,44 @@ quelli ancora assenti sono stati indicati esplicitamente. \textbf{Valore}& \textbf{Significato}\\ \hline \hline - \const{OPOST} & Se impostato i caratteri vengono convertiti opportunamente + \constd{OPOST} & Se impostato i caratteri vengono convertiti opportunamente (in maniera dipendente dall'implementazione) per la visualizzazione sul terminale, ad esempio al carattere di a capo (NL) può venire aggiunto un ritorno carrello (CR).\\ - \const{OLCUC} & Se impostato trasforma i caratteri minuscoli in ingresso + \constd{OLCUC} & Se impostato trasforma i caratteri minuscoli in ingresso in caratteri maiuscoli sull'uscita (non previsto da POSIX).\\ - \const{ONLCR} & Se impostato converte automaticamente il carattere di a + \constd{ONLCR} & Se impostato converte automaticamente il carattere di a capo (NL) in un carattere di ritorno carrello (CR).\\ - \const{OCRNL} & Se impostato converte automaticamente il carattere di a + \constd{OCRNL} & Se impostato converte automaticamente il carattere di a capo (NL) nella coppia di caratteri ritorno carrello, a capo (CR-NL).\\ - \const{ONOCR} & Se impostato converte il carattere di ritorno carrello + \constd{ONOCR} & Se impostato converte il carattere di ritorno carrello (CR) nella coppia di caratteri CR-NL.\\ - \const{ONLRET}& Se impostato rimuove dall'output il carattere di ritorno + \constd{ONLRET}& Se impostato rimuove dall'output il carattere di ritorno carrello (CR).\\ - \const{OFILL} & Se impostato in caso di ritardo sulla linea invia dei + \constd{OFILL} & Se impostato in caso di ritardo sulla linea invia dei caratteri di riempimento invece di attendere.\\ - \const{OFDEL} & Se impostato il carattere di riempimento è DEL + \constd{OFDEL} & Se impostato il carattere di riempimento è DEL (\texttt{0x3F}), invece che NUL (\texttt{0x00}), (non previsto da POSIX e non implementato su Linux).\\ - \const{NLDLY} & Maschera per i bit che indicano il ritardo per il + \constd{NLDLY} & Maschera per i bit che indicano il ritardo per il carattere di a capo (NL), i valori possibili sono \val{NL0} o \val{NL1}.\\ - \const{CRDLY} & Maschera per i bit che indicano il ritardo per il + \constd{CRDLY} & Maschera per i bit che indicano il ritardo per il carattere ritorno carrello (CR), i valori possibili sono \val{CR0}, \val{CR1}, \val{CR2} o \val{CR3}.\\ - \const{TABDLY}& Maschera per i bit che indicano il ritardo per il + \constd{TABDLY}& Maschera per i bit che indicano il ritardo per il carattere di tabulazione, i valori possibili sono \val{TAB0}, \val{TAB1}, \val{TAB2} o \val{TAB3}.\\ - \const{BSDLY} & Maschera per i bit che indicano il ritardo per il + \constd{BSDLY} & Maschera per i bit che indicano il ritardo per il carattere di ritorno indietro (\textit{backspace}), i valori possibili sono \val{BS0} o \val{BS1}.\\ - \const{VTDLY} & Maschera per i bit che indicano il ritardo per il + \constd{VTDLY} & Maschera per i bit che indicano il ritardo per il carattere di tabulazione verticale, i valori possibili sono \val{VT0} o \val{VT1}.\\ - \const{FFDLY} & Maschera per i bit che indicano il ritardo per il + \constd{FFDLY} & Maschera per i bit che indicano il ritardo per il carattere di pagina nuova (\textit{form feed}), i valori possibili sono \val{FF0} o \val{FF1}.\\ \hline @@ -1729,61 +1725,61 @@ il valore. \textbf{Valore}& \textbf{Significato}\\ \hline \hline - \const{CBAUD} & Maschera dei bit (4+1) usati per impostare della velocità - della linea (il \textit{baud rate}) in ingresso; non è - presente in POSIX ed in Linux non è implementato in - quanto viene usato un apposito campo di - \struct{termios}.\\ - \const{CBAUDEX}& Bit aggiuntivo per l'impostazione della velocità della - linea, non è presente in POSIX e per le stesse - motivazioni del precedente non è implementato in Linux.\\ - \const{CSIZE} & Maschera per i bit usati per specificare la dimensione - del carattere inviato lungo la linea di trasmissione, i - valore ne indica la lunghezza (in bit), ed i valori - possibili sono \val{CS5}, \val{CS6}, \val{CS7} e \val{CS8} - corrispondenti ad un analogo numero di bit.\\ - \const{CSTOPB} & Se impostato vengono usati due bit di stop sulla linea - seriale, se non impostato ne viene usato soltanto uno.\\ - \const{CREAD} & Se è impostato si può leggere l'input del terminale, - altrimenti i caratteri in ingresso vengono scartati - quando arrivano.\\ - \const{PARENB} & Se impostato abilita la generazione il controllo di - parità. La reazione in caso di errori dipende dai - relativi valori per \var{c\_iflag}, riportati in - tab.~\ref{tab:sess_termios_iflag}. Se non è impostato i - bit di parità non vengono generati e i caratteri non - vengono controllati.\\ - \const{PARODD} & Ha senso solo se è attivo anche \const{PARENB}. Se - impostato viene usata una parità è dispari, altrimenti - viene usata una parità pari.\\ - \const{HUPCL} & Se è impostato viene distaccata la connessione del - modem quando l'ultimo dei processi che ha ancora un file - aperto sul terminale lo chiude o esce.\\ - \const{LOBLK} & Se impostato blocca l'output su un strato di shell non - corrente, non è presente in POSIX e non è implementato - da Linux.\\ - \const{CLOCAL} & Se impostato indica che il terminale è connesso in locale - e che le linee di controllo del modem devono essere - ignorate. Se non impostato effettuando una chiamata ad - \func{open} senza aver specificato il flag di - \const{O\_NONBLOCK} si bloccherà il processo finché - non si è stabilita una connessione con il modem; inoltre - se viene rilevata una disconnessione viene inviato un - segnale di \signal{SIGHUP} al processo di controllo del - terminale. La lettura su un terminale sconnesso comporta - una condizione di \textit{end of file} e la scrittura un - errore di \errcode{EIO}.\\ - \const{CIBAUD} & Maschera dei bit della velocità della linea in - ingresso; analogo a \const{CBAUD}, non è previsto da - POSIX e non è implementato in Linux dato che è - mantenuto in un apposito campo di \struct{termios}.\\ - \const{CMSPAR} & imposta un bit di parità costante: se \const{PARODD} è - impostato la parità è sempre 1 (\textit{MARK}) se non è - impostato la parità è sempre 0 (\textit{SPACE}), non è - previsto da POSIX.\\ + \constd{CBAUD} & Maschera dei bit (4+1) usati per impostare della velocità + della linea (il \textit{baud rate}) in ingresso; non è + presente in POSIX ed in Linux non è implementato in + quanto viene usato un apposito campo di + \struct{termios}.\\ + \constd{CBAUDEX}& Bit aggiuntivo per l'impostazione della velocità della + linea, non è presente in POSIX e per le stesse + motivazioni del precedente non è implementato in Linux.\\ + \constd{CSIZE} & Maschera per i bit usati per specificare la dimensione + del carattere inviato lungo la linea di trasmissione, i + valore ne indica la lunghezza (in bit), ed i valori + possibili sono \val{CS5}, \val{CS6}, \val{CS7} e \val{CS8} + corrispondenti ad un analogo numero di bit.\\ + \constd{CSTOPB} & Se impostato vengono usati due bit di stop sulla linea + seriale, se non impostato ne viene usato soltanto uno.\\ + \constd{CREAD} & Se è impostato si può leggere l'input del terminale, + altrimenti i caratteri in ingresso vengono scartati + quando arrivano.\\ + \constd{PARENB} & Se impostato abilita la generazione il controllo di + parità. La reazione in caso di errori dipende dai + relativi valori per \var{c\_iflag}, riportati in + tab.~\ref{tab:sess_termios_iflag}. Se non è impostato i + bit di parità non vengono generati e i caratteri non + vengono controllati.\\ + \constd{PARODD} & Ha senso solo se è attivo anche \const{PARENB}. Se + impostato viene usata una parità è dispari, altrimenti + viene usata una parità pari.\\ + \constd{HUPCL} & Se è impostato viene distaccata la connessione del + modem quando l'ultimo dei processi che ha ancora un file + aperto sul terminale lo chiude o esce.\\ + \constd{LOBLK} & Se impostato blocca l'output su un strato di shell non + corrente, non è presente in POSIX e non è implementato + da Linux.\\ + \constd{CLOCAL} & Se impostato indica che il terminale è connesso in locale + e che le linee di controllo del modem devono essere + ignorate. Se non impostato effettuando una chiamata ad + \func{open} senza aver specificato il flag di + \const{O\_NONBLOCK} si bloccherà il processo finché + non si è stabilita una connessione con il modem; inoltre + se viene rilevata una disconnessione viene inviato un + segnale di \signal{SIGHUP} al processo di controllo del + terminale. La lettura su un terminale sconnesso comporta + una condizione di \textit{end of file} e la scrittura un + errore di \errcode{EIO}.\\ + \constd{CIBAUD} & Maschera dei bit della velocità della linea in + ingresso; analogo a \const{CBAUD}, non è previsto da + POSIX e non è implementato in Linux dato che è + mantenuto in un apposito campo di \struct{termios}.\\ + \constd{CMSPAR} & imposta un bit di parità costante: se \const{PARODD} è + impostato la parità è sempre 1 (\textit{MARK}) se non è + impostato la parità è sempre 0 (\textit{SPACE}), non è + previsto da POSIX.\\ % vedi: http://www.lothosoft.ch/thomas/libmip/markspaceparity.php - \const{CRTSCTS}& Abilita il controllo di flusso hardware sulla seriale, - attraverso l'utilizzo delle dei due fili di RTS e CTS.\\ + \constd{CRTSCTS}& Abilita il controllo di flusso hardware sulla seriale, + attraverso l'utilizzo delle dei due fili di RTS e CTS.\\ \hline \end{tabular} \caption{Costanti identificative dei vari bit del flag di controllo @@ -1821,72 +1817,72 @@ due campi aggiuntivi, \var{c\_ispeed} e \var{c\_ospeed}, nella struttura \textbf{Valore}& \textbf{Significato}\\ \hline \hline - \const{ISIG} & Se impostato abilita il riconoscimento dei caratteri - INTR, QUIT, e SUSP generando il relativo segnale.\\ - \const{ICANON} & Se impostato il terminale opera in modalità canonica, - altrimenti opera in modalità non canonica.\\ - \const{XCASE} & Se impostato il terminale funziona solo con le - maiuscole. L'input è convertito in minuscole tranne per i - caratteri preceduti da una ``\texttt{\bslash}''. In output - le maiuscole sono precedute da una ``\texttt{\bslash}'' e - le minuscole convertite in maiuscole. Non è presente in - POSIX.\\ - \const{ECHO} & Se è impostato viene attivato l'eco dei caratteri in - input sull'output del terminale.\\ - \const{ECHOE} & Se è impostato l'eco mostra la cancellazione di un - carattere in input (in reazione al carattere ERASE) - cancellando l'ultimo carattere della riga corrente dallo - schermo; altrimenti il carattere è rimandato in eco per - mostrare quanto accaduto (usato per i terminali con - l'uscita su una stampante).\\ - \const{ECHOK} & Se impostato abilita il trattamento della visualizzazione - del carattere KILL, andando a capo dopo aver visualizzato - lo stesso, altrimenti viene solo mostrato il carattere e - sta all'utente ricordare che l'input precedente è stato - cancellato.\\ - \const{ECHONL} & Se impostato viene effettuato l'eco di un a - capo (\verb|\n|) anche se non è stato impostato - \const{ECHO}.\\ - \const{ECHOCTL}& Se impostato insieme ad \const{ECHO} i caratteri di - controllo ASCII (tranne TAB, NL, START, e STOP) sono - mostrati nella forma che prepone un ``\texttt{\circonf}'' - alla lettera ottenuta sommando \texttt{0x40} al valore del - carattere (di solito questi si possono ottenere anche - direttamente premendo il tasto \texttt{ctrl} più la - relativa lettera). Non è presente in POSIX.\\ - \const{ECHOPRT}& Se impostato abilita la visualizzazione del carattere di - cancellazione in una modalità adatta ai terminali con - l'uscita su stampante; l'invio del carattere di ERASE - comporta la stampa di un ``\texttt{|}'' seguito dal - carattere cancellato, e così via in caso di successive - cancellazioni, quando si riprende ad immettere carattere - normali prima verrà stampata una ``\texttt{/}''. Non è - presente in POSIX.\\ - \const{ECHOKE} & Se impostato abilita il trattamento della visualizzazione - del carattere KILL cancellando i caratteri precedenti - nella linea secondo le modalità specificate dai valori di - \const{ECHOE} e \const{ECHOPRT}. Non è presente in - POSIX.\\ - \const{DEFECHO}& Se impostato effettua l'eco solo se c'è un processo in - lettura. Non è presente in POSIX e non è supportato da - Linux.\\ - \const{FLUSHO} & Effettua la cancellazione della coda di uscita. Viene - attivato dal carattere DISCARD. Non è presente in POSIX e - non è supportato da Linux.\\ - \const{NOFLSH} & Se impostato disabilita lo scarico delle code di ingresso - e uscita quando vengono emessi i segnali \signal{SIGINT}, - \signal{SIGQUIT} e \signal{SIGSUSP}.\\ - \const{TOSTOP} & Se abilitato, con il supporto per il job control presente, - genera il segnale \signal{SIGTTOU} per un processo in - background che cerca di scrivere sul terminale.\\ - \const{PENDIN} & Indica che la linea deve essere ristampata, viene - attivato dal carattere REPRINT e resta attivo fino alla - fine della ristampa. Non è presente in POSIX e - non è supportato in Linux.\\ - \const{IEXTEN} & Abilita alcune estensioni previste dalla - implementazione. Deve essere impostato perché caratteri - speciali come EOL2, LNEXT, REPRINT e WERASE possano - essere interpretati.\\ + \constd{ISIG} & Se impostato abilita il riconoscimento dei caratteri + INTR, QUIT, e SUSP generando il relativo segnale.\\ + \constd{ICANON} & Se impostato il terminale opera in modalità canonica, + altrimenti opera in modalità non canonica.\\ + \constd{XCASE} & Se impostato il terminale funziona solo con le + maiuscole. L'input è convertito in minuscole tranne per i + caratteri preceduti da una ``\texttt{\bslash}''. In output + le maiuscole sono precedute da una ``\texttt{\bslash}'' e + le minuscole convertite in maiuscole. Non è presente in + POSIX.\\ + \constd{ECHO} & Se è impostato viene attivato l'eco dei caratteri in + input sull'output del terminale.\\ + \constd{ECHOE} & Se è impostato l'eco mostra la cancellazione di un + carattere in input (in reazione al carattere ERASE) + cancellando l'ultimo carattere della riga corrente dallo + schermo; altrimenti il carattere è rimandato in eco per + mostrare quanto accaduto (usato per i terminali con + l'uscita su una stampante).\\ + \constd{ECHOK} & Se impostato abilita il trattamento della visualizzazione + del carattere KILL, andando a capo dopo aver visualizzato + lo stesso, altrimenti viene solo mostrato il carattere e + sta all'utente ricordare che l'input precedente è stato + cancellato.\\ + \constd{ECHONL} & Se impostato viene effettuato l'eco di un a + capo (\verb|\n|) anche se non è stato impostato + \const{ECHO}.\\ + \constd{ECHOCTL}& Se impostato insieme ad \const{ECHO} i caratteri di + controllo ASCII (tranne TAB, NL, START, e STOP) sono + mostrati nella forma che prepone un ``\texttt{\circonf}'' + alla lettera ottenuta sommando \texttt{0x40} al valore del + carattere (di solito questi si possono ottenere anche + direttamente premendo il tasto \texttt{ctrl} più la + relativa lettera). Non è presente in POSIX.\\ + \constd{ECHOPRT}& Se impostato abilita la visualizzazione del carattere di + cancellazione in una modalità adatta ai terminali con + l'uscita su stampante; l'invio del carattere di ERASE + comporta la stampa di un ``\texttt{|}'' seguito dal + carattere cancellato, e così via in caso di successive + cancellazioni, quando si riprende ad immettere carattere + normali prima verrà stampata una ``\texttt{/}''. Non è + presente in POSIX.\\ + \constd{ECHOKE} & Se impostato abilita il trattamento della visualizzazione + del carattere KILL cancellando i caratteri precedenti + nella linea secondo le modalità specificate dai valori di + \const{ECHOE} e \const{ECHOPRT}. Non è presente in + POSIX.\\ + \constd{DEFECHO}& Se impostato effettua l'eco solo se c'è un processo in + lettura. Non è presente in POSIX e non è supportato da + Linux.\\ + \constd{FLUSHO} & Effettua la cancellazione della coda di uscita. Viene + attivato dal carattere DISCARD. Non è presente in POSIX e + non è supportato da Linux.\\ + \constd{NOFLSH} & Se impostato disabilita lo scarico delle code di ingresso + e uscita quando vengono emessi i segnali \signal{SIGINT}, + \signal{SIGQUIT} e \signal{SIGSUSP}.\\ + \constd{TOSTOP} & Se abilitato, con il supporto per il job control presente, + genera il segnale \signal{SIGTTOU} per un processo in + background che cerca di scrivere sul terminale.\\ + \constd{PENDIN} & Indica che la linea deve essere ristampata, viene + attivato dal carattere REPRINT e resta attivo fino alla + fine della ristampa. Non è presente in POSIX e + non è supportato in Linux.\\ + \constd{IEXTEN} & Abilita alcune estensioni previste dalla + implementazione. Deve essere impostato perché caratteri + speciali come EOL2, LNEXT, REPRINT e WERASE possano + essere interpretati.\\ \hline \end{tabular} \caption{Costanti identificative dei vari bit del flag di controllo @@ -1914,7 +1910,7 @@ non è impostato \const{ICANON}. Oltre ai vari flag per gestire le varie caratteristiche dei terminali, \struct{termios} contiene pure il campo \var{c\_cc} che viene usato per impostare i caratteri speciali associati alle varie funzioni di controllo. Il -numero di questi caratteri speciali è indicato dalla costante \const{NCCS}, +numero di questi caratteri speciali è indicato dalla costante \constd{NCCS}, POSIX ne specifica almeno 11, ma molte implementazioni ne definiscono molti altri.\footnote{in Linux il valore della costante è 32, anche se i caratteri effettivamente definiti sono solo 17.} @@ -1927,71 +1923,71 @@ altri.\footnote{in Linux il valore della costante è 32, anche se i caratteri \textbf{Indice} & \textbf{Valore}&\textbf{Codice} & \textbf{Funzione}\\ \hline \hline - \const{VINTR} &\texttt{0x03}&(\texttt{C-c})& Carattere di interrupt, - provoca l'emissione di - \signal{SIGINT}.\\ - \const{VQUIT} &\texttt{0x1C}&(\texttt{C-\bslash})& Carattere di uscita, - provoca l'emissione di - \signal{SIGQUIT}.\\ - \const{VERASE}&\texttt{0x7f}&DEL,\texttt{C-?}& Carattere di ERASE, cancella - l'ultimo carattere - precedente nella linea.\\ - \const{VKILL} &\texttt{0x15}&(\texttt{C-u})& Carattere di KILL, cancella - l'intera riga.\\ - \const{VEOF} &\texttt{0x04}&(\texttt{C-d})& Carattere di - \textit{end-of-file}. Causa - l'invio del contenuto del - buffer di ingresso al - processo in lettura anche se - non è ancora stato ricevuto - un a capo. Se è il primo - carattere immesso comporta il - ritorno di \func{read} con - zero caratteri, cioè la - condizione di - \textit{end-of-file}.\\ - \const{VMIN} & --- & --- & Numero minimo di caratteri per una - lettura in modo non canonico.\\ - \const{VEOL} &\texttt{0x00}& NUL & Carattere di fine riga. Agisce come - un a capo, ma non viene scartato ed - è letto come l'ultimo carattere - nella riga.\\ - \const{VTIME} & --- & --- & Timeout, in decimi di secondo, per - una lettura in modo non canonico.\\ - \const{VEOL2} &\texttt{0x00}& NUL & Ulteriore carattere di fine - riga. Ha lo stesso effetto di - \const{VEOL} ma può essere un - carattere diverso. \\ - \const{VSWTC} &\texttt{0x00}& NUL & Carattere di switch. Non supportato - in Linux.\\ - \const{VSTART}&\texttt{0x17}&(\texttt{C-q})& Carattere di START. Riavvia un + \constd{VINTR} &\texttt{0x03}&(\texttt{C-c})& Carattere di interrupt, + provoca l'emissione di + \signal{SIGINT}.\\ + \constd{VQUIT} &\texttt{0x1C}&(\texttt{C-\bslash})& Carattere di uscita, + provoca l'emissione di + \signal{SIGQUIT}.\\ + \constd{VERASE}&\texttt{0x7f}&DEL,\texttt{C-?}& Carattere di ERASE, cancella + l'ultimo carattere + precedente nella linea.\\ + \constd{VKILL} &\texttt{0x15}&(\texttt{C-u})& Carattere di KILL, cancella + l'intera riga.\\ + \constd{VEOF} &\texttt{0x04}&(\texttt{C-d})& Carattere di + \textit{end-of-file}. Causa + l'invio del contenuto del + buffer di ingresso al + processo in lettura anche se + non è ancora stato ricevuto + un a capo. Se è il primo + carattere immesso comporta il + ritorno di \func{read} con + zero caratteri, cioè la + condizione di + \textit{end-of-file}.\\ + \constd{VMIN} & --- & --- & Numero minimo di caratteri per una + lettura in modo non canonico.\\ + \constd{VEOL} &\texttt{0x00}& NUL & Carattere di fine riga. Agisce come + un a capo, ma non viene scartato ed + è letto come l'ultimo carattere + nella riga.\\ + \constd{VTIME} & --- & --- & Timeout, in decimi di secondo, per + una lettura in modo non canonico.\\ + \constd{VEOL2} &\texttt{0x00}& NUL & Ulteriore carattere di fine + riga. Ha lo stesso effetto di + \const{VEOL} ma può essere un + carattere diverso. \\ + \constd{VSWTC} &\texttt{0x00}& NUL & Carattere di switch. Non supportato + in Linux.\\ + \constd{VSTART}&\texttt{0x17}&(\texttt{C-q})& Carattere di START. Riavvia un output bloccato da uno STOP.\\ - \const{VSTOP} &\texttt{0x19}&(\texttt{C-s})& Carattere di STOP. Blocca + \constd{VSTOP} &\texttt{0x19}&(\texttt{C-s})& Carattere di STOP. Blocca l'output fintanto che non viene premuto un carattere di START.\\ - \const{VSUSP} &\texttt{0x1A}&(\texttt{C-z})& Carattere di + \constd{VSUSP} &\texttt{0x1A}&(\texttt{C-z})& Carattere di sospensione. Invia il segnale \signal{SIGTSTP}.\\ - \const{VDSUSP}&\texttt{0x19}&(\texttt{C-y})& Carattere di sospensione + \constd{VDSUSP}&\texttt{0x19}&(\texttt{C-y})& Carattere di sospensione ritardata. Invia il segnale \signal{SIGTSTP} quando il carattere viene letto dal programma, (non presente in POSIX e non riconosciuto in Linux).\\ - \const{VLNEXT}&\texttt{0x16}&(\texttt{C-v})& Carattere di escape, serve a + \constd{VLNEXT}&\texttt{0x16}&(\texttt{C-v})& Carattere di escape, serve a quotare il carattere successivo che non viene interpretato ma passato direttamente all'output.\\ - \const{VWERASE}&\texttt{0x17}&(\texttt{C-w})&Cancellazione di una + \constd{VWERASE}&\texttt{0x17}&(\texttt{C-w})&Cancellazione di una parola.\\ - \const{VREPRINT}&\texttt{0x12}&(\texttt{C-r})& Ristampa i caratteri non + \constd{VREPRINT}&\texttt{0x12}&(\texttt{C-r})& Ristampa i caratteri non ancora letti (non presente in POSIX).\\ - \const{VDISCARD}&\texttt{0x0F}&(\texttt{C-o})& Non riconosciuto in Linux.\\ - \const{VSTATUS} &\texttt{0x13}&(\texttt{C-t})& Non riconosciuto in Linux.\\ + \constd{VDISCARD}&\texttt{0x0F}&(\texttt{C-o})& Non riconosciuto in Linux.\\ + \constd{VSTATUS} &\texttt{0x13}&(\texttt{C-t})& Non riconosciuto in Linux.\\ \hline \end{tabular} \caption{Valori dei caratteri di controllo mantenuti nel campo \var{c\_cc} @@ -2086,11 +2082,11 @@ utili qualora si cambino i parametri di output. \textbf{Valore}& \textbf{Significato}\\ \hline \hline - \const{TCSANOW} & Esegue i cambiamenti in maniera immediata.\\ - \const{TCSADRAIN}& I cambiamenti vengono eseguiti dopo aver atteso che - tutto l'output presente sulle code è stato scritto.\\ - \const{TCSAFLUSH}& È identico a \const{TCSADRAIN}, ma in più scarta - tutti i dati presenti sulla coda di input.\\ + \constd{TCSANOW} & Esegue i cambiamenti in maniera immediata.\\ + \constd{TCSADRAIN}& I cambiamenti vengono eseguiti dopo aver atteso che + tutto l'output presente sulle code è stato scritto.\\ + \constd{TCSAFLUSH}& È identico a \const{TCSADRAIN}, ma in più scarta + tutti i dati presenti sulla coda di input.\\ \hline \end{tabular} \caption{Possibili valori per l'argomento \param{optional\_actions} della @@ -2371,9 +2367,9 @@ di uscita cancellerà i dati scritti ma non ancora trasmessi. \textbf{Valore}& \textbf{Significato}\\ \hline \hline - \const{TCIFLUSH} & Cancella i dati sulla coda di ingresso.\\ - \const{TCOFLUSH} & Cancella i dati sulla coda di uscita. \\ - \const{TCIOFLUSH}& Cancella i dati su entrambe le code.\\ + \constd{TCIFLUSH} & Cancella i dati sulla coda di ingresso.\\ + \constd{TCOFLUSH} & Cancella i dati sulla coda di uscita. \\ + \constd{TCIOFLUSH}& Cancella i dati su entrambe le code.\\ \hline \end{tabular} \caption{Possibili valori per l'argomento \param{queue} della @@ -2411,12 +2407,12 @@ riportati in tab.~\ref{tab:sess_tcflow_action}. \textbf{Valore}& \textbf{Azione}\\ \hline \hline - \const{TCOOFF}& Sospende l'output.\\ - \const{TCOON} & Riprende un output precedentemente sospeso.\\ - \const{TCIOFF}& Il sistema trasmette un carattere di STOP, che - fa interrompere la trasmissione dei dati dal terminale.\\ - \const{TCION} & Il sistema trasmette un carattere di START, che - fa riprendere la trasmissione dei dati dal terminale.\\ + \constd{TCOOFF}& Sospende l'output.\\ + \constd{TCOON} & Riprende un output precedentemente sospeso.\\ + \constd{TCIOFF}& Il sistema trasmette un carattere di STOP, che + fa interrompere la trasmissione dei dati dal terminale.\\ + \constd{TCION} & Il sistema trasmette un carattere di START, che + fa riprendere la trasmissione dei dati dal terminale.\\ \hline \end{tabular} \caption{Possibili valori per l'argomento \param{action} della diff --git a/signal.tex b/signal.tex index 2f5516b..3c794a6 100644 --- a/signal.tex +++ b/signal.tex @@ -457,15 +457,15 @@ tab.~\ref{tab:sig_action_leg}). \end{table} -Si inoltre noti come \const{SIGCONT} sia l'unico segnale a non avere +Si inoltre noti come \signal{SIGCONT} sia l'unico segnale a non avere l'indicazione di una azione predefinita nella terza colonna di tab.~\ref{tab:sig_signal_list}, questo perché il suo effetto è sempre quello di far ripartire un programma in stato \texttt{T} fermato da un segnale di -stop. Inoltre i segnali \const{SIGSTOP} e \const{SIGKILL} si distinguono da +stop. Inoltre i segnali \signal{SIGSTOP} e \signal{SIGKILL} si distinguono da tutti gli altri per la specifica caratteristica di non potere essere né intercettati, né bloccati, né ignorati. -Il numero totale di segnali presenti è dato dalla macro \const{NSIG} (e tiene +Il numero totale di segnali presenti è dato dalla macro \macrod{NSIG} (e tiene conto anche di quelli \textit{real-time}) e dato che i numeri dei segnali sono allocati progressivamente, essa corrisponde anche al successivo del valore numerico assegnato all'ultimo segnale definito. La descrizione dettagliata @@ -665,9 +665,8 @@ segnali sono: avuto successo. \item[\signald{SIGURG}] Questo segnale è inviato quando arrivano dei dati - urgenti o \itindex{out-of-band} \textit{out-of-band} su di un - socket; per maggiori dettagli al proposito si veda - sez.~\ref{sec:TCP_urgent_data}. + urgenti o \textit{out-of-band} su di un socket; per maggiori dettagli al + proposito si veda sez.~\ref{sec:TCP_urgent_data}. \item[\signald{SIGPOLL}] Questo segnale è definito nella standard POSIX.1-2001, ed è equivalente a \signal{SIGIO} che invece deriva da BSD. Su Linux è @@ -906,34 +905,35 @@ figlio dovranno arrivare solo i segnali dovuti alle sue azioni. Quando si mette in esecuzione un nuovo programma con \func{exec} (si ricordi quanto detto in sez.~\ref{sec:proc_exec}) tutti i segnali per i quali è stato -installato un gestore vengono reimpostati a \const{SIG\_DFL}. Non ha più +installato un gestore vengono reimpostati a \constd{SIG\_DFL}. Non ha più senso infatti fare riferimento a funzioni definite nel programma originario, che non sono presenti nello spazio di indirizzi del nuovo programma. Si noti che questo vale solo per le azioni per le quali è stato installato un gestore, viene mantenuto invece ogni eventuale impostazione dell'azione a -\const{SIG\_IGN}. Questo permette ad esempio alla shell di impostare ad +\constd{SIG\_IGN}. Questo permette ad esempio alla shell di impostare ad \const{SIG\_IGN} le risposte per \signal{SIGINT} e \signal{SIGQUIT} per i programmi eseguiti in background, che altrimenti sarebbero interrotti da una successiva pressione di \texttt{C-c} o \texttt{C-y}. Per quanto riguarda il comportamento di tutte le altre \textit{system call} si -danno sostanzialmente due casi, a seconda che esse siano -\index{system~call~lente} \textsl{lente} (\textit{slow}) o \textsl{veloci} -(\textit{fast}). La gran parte di esse appartiene a quest'ultima categoria, -che non è influenzata dall'arrivo di un segnale. Esse sono dette -\textsl{veloci} in quanto la loro esecuzione è sostanzialmente immediata. La -risposta al segnale viene sempre data dopo che la \textit{system call} è stata -completata, in quanto attendere per eseguire un gestore non comporta nessun -inconveniente. +danno sostanzialmente due casi, a seconda che esse siano \textsl{lente} +(\textit{slow}) o \textsl{veloci} (\textit{fast}). La gran parte di esse +appartiene a quest'ultima categoria, che non è influenzata dall'arrivo di un +segnale. Esse sono dette \textsl{veloci} in quanto la loro esecuzione è +sostanzialmente immediata. La risposta al segnale viene sempre data dopo che +la \textit{system call} è stata completata, in quanto attendere per eseguire +un gestore non comporta nessun inconveniente. + +\index{system~call~lente|(} In alcuni casi però alcune \textit{system call} possono bloccarsi -indefinitamente e per questo motivo vengono chiamate \textsl{lente} -\index{system~call~lente} o \textsl{bloccanti}. In questo caso non si può -attendere la conclusione della \textit{system call}, perché questo renderebbe -impossibile una risposta pronta al segnale, per cui il gestore viene eseguito -prima che la \textit{system call} sia ritornata. Un elenco dei casi in cui si -presenta questa situazione è il seguente: +indefinitamente e per questo motivo vengono chiamate \textsl{lente} o +\textsl{bloccanti}. In questo caso non si può attendere la conclusione della +\textit{system call}, perché questo renderebbe impossibile una risposta pronta +al segnale, per cui il gestore viene eseguito prima che la \textit{system + call} sia ritornata. Un elenco dei casi in cui si presenta questa +situazione è il seguente: \begin{itemize*} \item la lettura da file che possono bloccarsi in attesa di dati non ancora presenti (come per certi file di dispositivo, i socket o le \textit{pipe}); @@ -1009,6 +1009,8 @@ possa essere stato richiesto il riavvio automatico, queste funzioni sono: \end{itemize*} +\index{system~call~lente|)} + \subsection{L'installazione di un gestore} \label{sec:sig_signal} @@ -1031,7 +1033,7 @@ comportamento, pur mantenendone immutato il prototipo\footnote{in realtà in } {La funzione ritorna il precedente gestore in caso di successo in caso di - successo e \const{SIG\_ERR} per un errore, nel qual caso \var{errno} + successo e \constd{SIG\_ERR} per un errore, nel qual caso \var{errno} assumerà il valore: \begin{errlist} \item[\errcode{EINVAL}] il numero di segnale \param{signum} non è valido. @@ -1186,13 +1188,12 @@ con \param{pid} non esistono. \hline \hline $>0$ & Il segnale è mandato al processo con \ids{PID} uguale - a \param{pid}.\\ - 0 & Il segnale è mandato ad ogni processo del \itindex{process~group} - \textit{process group} del chiamante.\\ + a \param{pid}.\\ + 0 & Il segnale è mandato ad ogni processo del \textit{process group} + del chiamante.\\ $-1$ & Il segnale è mandato ad ogni processo (eccetto \cmd{init}).\\ $<-1$& Il segnale è mandato ad ogni processo del \textit{process group} - \itindex{process~group} con \ids{PGID} uguale - a $|\param{pid}|$.\\ + con \ids{PGID} uguale a $|\param{pid}|$.\\ \hline \end{tabular} \caption{Valori dell'argomento \param{pid} per la funzione @@ -1237,7 +1238,7 @@ prototipo è: \begin{funcproto}{ \fhead{signal.h} \fdecl{int killpg(pid\_t pidgrp, int signal)} -\fdesc{Invia un segnale ad un \itindex{process~group} \textit{process group}.} +\fdesc{Invia un segnale ad un \textit{process group}.} } { La funzione ritorna $0$ in caso di successo e $-1$ per un errore, e gli @@ -1246,11 +1247,11 @@ prototipo è: \end{funcproto} -La funzione invia il segnale \param{signal} al \itindex{process~group} -\textit{process group} il cui \acr{PGID} (vedi sez.~\ref{sec:sess_proc_group}) -è indicato dall'argomento \param{pidgrp}, che deve essere un intero -positivo. Il suo utilizzo è sostanzialmente equivalente all'esecuzione di -\code{kill(-pidgrp, signal)}. +La funzione invia il segnale \param{signal} al \textit{process group} il cui +\acr{PGID} (vedi sez.~\ref{sec:sess_proc_group}) è indicato +dall'argomento \param{pidgrp}, che deve essere un intero positivo. Il suo +utilizzo è sostanzialmente equivalente all'esecuzione di \code{kill(-pidgrp, + signal)}. Oltre alle precedenti funzioni di base, vedremo più avanti che esistono altre funzioni per inviare segnali generici, come \func{sigqueue} per i segnali @@ -1379,9 +1380,9 @@ tab.~\ref{tab:sig_setitimer_values}. \textbf{Valore} & \textbf{Timer} \\ \hline \hline - \const{ITIMER\_REAL} & \textit{real-time timer}\\ - \const{ITIMER\_VIRTUAL} & \textit{virtual timer}\\ - \const{ITIMER\_PROF} & \textit{profiling timer}\\ + \constd{ITIMER\_REAL} & \textit{real-time timer}\\ + \constd{ITIMER\_VIRTUAL} & \textit{virtual timer}\\ + \constd{ITIMER\_PROF} & \textit{profiling timer}\\ \hline \end{tabular} \caption{Valori dell'argomento \param{which} per la funzione @@ -1446,7 +1447,7 @@ eccesso).\footnote{questo in realtà non è del tutto vero a causa di un bug, L'uso del contatore dei \textit{jiffies}, un intero a 32 bit nella maggior parte dei casi, comportava inoltre l'impossibilità di specificare tempi molto -lunghi. superiori al valore della costante \const{MAX\_SEC\_IN\_JIFFIES}, +lunghi. superiori al valore della costante \constd{MAX\_SEC\_IN\_JIFFIES}, pari, nel caso di default di un valore di \const{HZ} di 250, a circa 99 giorni e mezzo. Con il cambiamento della rappresentazione effettuato nel kernel 2.6.16 questo problema è scomparso e con l'introduzione dei timer ad alta @@ -1455,7 +1456,7 @@ precisione è diventata quella fornita dall'hardware disponibile. Una seconda causa di potenziali ritardi è che il segnale viene generato alla scadenza del timer, ma poi deve essere consegnato al processo; se quest'ultimo -è attivo (questo è sempre vero per \const{ITIMER\_VIRT}) la consegna è +è attivo (questo è sempre vero per \const{ITIMER\_VIRTUAL}) la consegna è immediata, altrimenti può esserci un ulteriore ritardo che può variare a seconda del carico del sistema. @@ -1465,8 +1466,8 @@ in cui un timer scade prima che il segnale di una precedente scadenza sia stato consegnato. In questo caso, per il comportamento dei segnali descritto in sez.~\ref{sec:sig_sigchld}, un solo segnale sarà consegnato. Per questo oggi l'uso di questa funzione è deprecato a favore degli -\textit{high-resolution timer} e della cosiddetta \itindex{POSIX~Timer~API} -\textit{POSIX Timer API}, che tratteremo in sez.~\ref{sec:sig_timer_adv}. +\textit{high-resolution timer} e della cosiddetta \textit{POSIX Timer API}, +che tratteremo in sez.~\ref{sec:sig_timer_adv}. Dato che sia \func{alarm} che \func{setitimer} non consentono di leggere il valore corrente di un timer senza modificarlo, è possibile usare la funzione @@ -2088,44 +2089,44 @@ tab.~\ref{tab:sig_sa_flag}. \textbf{Valore} & \textbf{Significato} \\ \hline \hline - \const{SA\_NOCLDSTOP}& Se il segnale è \signal{SIGCHLD} allora non deve - essere notificato quando il processo figlio viene - fermato da uno dei segnali \signal{SIGSTOP}, - \signal{SIGTSTP}, \signal{SIGTTIN} o - \signal{SIGTTOU}, questo flag ha significato solo - quando si imposta un gestore per \signal{SIGCHLD}.\\ - \const{SA\_NOCLDWAIT}& Se il segnale è \signal{SIGCHLD} e si richiede di - ignorare il segnale con \const{SIG\_IGN} allora i - processi figli non diventano \textit{zombie} quando - terminano; questa funzionalità è stata introdotta - nel kernel 2.6 e va a modificare il comportamento - di \func{waitpid} come illustrato in - sez.~\ref{sec:proc_wait}, se si installa un gestore - con questo flag attivo il segnale \signal{SIGCHLD} - viene comunque generato.\\ - \const{SA\_NODEFER} & Evita che il segnale corrente sia bloccato durante - l'esecuzione del gestore.\\ - \const{SA\_NOMASK} & Nome obsoleto e sinonimo non standard di - \const{SA\_NODEFER}, non deve essere più - utilizzato.\\ - \const{SA\_ONESHOT} & Nome obsoleto e sinonimo non standard di - \const{SA\_RESETHAND}, non deve essere più - utilizzato.\\ - \const{SA\_ONSTACK} & Stabilisce l'uso di uno \textit{stack} alternativo - per l'esecuzione del gestore (vedi - sez.~\ref{sec:sig_specific_features}).\\ - \const{SA\_RESETHAND}& Ristabilisce l'azione per il segnale al valore - predefinito una volta che il gestore è stato - lanciato, riproduce cioè il comportamento della - semantica inaffidabile.\\ - \const{SA\_RESTART} & Riavvia automaticamente le \textit{slow system - call} quando vengono interrotte dal suddetto - segnale, riproduce cioè il comportamento standard - di BSD.\index{system~call~lente}\\ - \const{SA\_SIGINFO} & Deve essere specificato quando si vuole usare un - gestore in forma estesa usando - \var{sa\_sigaction} al posto di - \var{sa\_handler}.\\ + \constd{SA\_NOCLDSTOP}& Se il segnale è \signal{SIGCHLD} allora non deve + essere notificato quando il processo figlio viene + fermato da uno dei segnali \signal{SIGSTOP}, + \signal{SIGTSTP}, \signal{SIGTTIN} o + \signal{SIGTTOU}, questo flag ha significato solo + quando si imposta un gestore per \signal{SIGCHLD}.\\ + \constd{SA\_NOCLDWAIT}& Se il segnale è \signal{SIGCHLD} e si richiede di + ignorare il segnale con \const{SIG\_IGN} allora i + processi figli non diventano \textit{zombie} quando + terminano; questa funzionalità è stata introdotta + nel kernel 2.6 e va a modificare il comportamento + di \func{waitpid} come illustrato in + sez.~\ref{sec:proc_wait}, se si installa un gestore + con questo flag attivo il segnale \signal{SIGCHLD} + viene comunque generato.\\ + \constd{SA\_NODEFER} & Evita che il segnale corrente sia bloccato durante + l'esecuzione del gestore.\\ + \constd{SA\_NOMASK} & Nome obsoleto e sinonimo non standard di + \const{SA\_NODEFER}, non deve essere più + utilizzato.\\ + \constd{SA\_ONESHOT} & Nome obsoleto e sinonimo non standard di + \const{SA\_RESETHAND}, non deve essere più + utilizzato.\\ + \constd{SA\_ONSTACK} & Stabilisce l'uso di uno \textit{stack} alternativo + per l'esecuzione del gestore (vedi + sez.~\ref{sec:sig_specific_features}).\\ + \constd{SA\_RESETHAND}& Ristabilisce l'azione per il segnale al valore + predefinito una volta che il gestore è stato + lanciato, riproduce cioè il comportamento della + semantica inaffidabile.\\ + \constd{SA\_RESTART} & Riavvia automaticamente le \textit{slow system + call} quando vengono interrotte dal suddetto + segnale, riproduce cioè il comportamento standard + di BSD.\\ + \constd{SA\_SIGINFO} & Deve essere specificato quando si vuole usare un + gestore in forma estesa usando + \var{sa\_sigaction} al posto di + \var{sa\_handler}.\\ \hline \end{tabular} \caption{Valori del campo \var{sa\_flag} della struttura \struct{sigaction}.} @@ -2194,23 +2195,23 @@ altre informazioni specifiche. \textbf{Valore} & \textbf{Significato} \\ \hline \hline - \const{SI\_USER} & Generato da \func{kill} o \func{raise} o affini.\\ - \const{SI\_KERNEL} & Inviato direttamente dal kernel.\\ - \const{SI\_QUEUE} & Inviato con \func{sigqueue} (vedi - sez.~\ref{sec:sig_real_time}).\\ - \const{SI\_TIMER} & Scadenza di un\itindex{POSIX~Timer~API} \textit{POSIX - timer} (vedi sez.~\ref{sec:sig_timer_adv}).\\ - \const{SI\_MESGQ} & Inviato al cambiamento di stato di una coda di - messaggi POSIX (vedi sez.~\ref{sec:ipc_posix_mq}), - introdotto con il kernel 2.6.6.\\ - \const{SI\_ASYNCIO}& Una operazione di I/O asincrono (vedi - sez.~\ref{sec:file_asyncronous_io}) è stata - completata.\\ - \const{SI\_SIGIO} & Segnale di \signal{SIGIO} da una coda (vedi - sez.~\ref{sec:file_asyncronous_operation}).\\ - \const{SI\_TKILL} & Inviato da \func{tkill} o \func{tgkill} (vedi - sez.~\ref{cha:thread_xxx}), introdotto con il kernel - 2.4.19.\\ + \constd{SI\_USER} & Generato da \func{kill} o \func{raise} o affini.\\ + \constd{SI\_KERNEL} & Inviato direttamente dal kernel.\\ + \constd{SI\_QUEUE} & Inviato con \func{sigqueue} (vedi + sez.~\ref{sec:sig_real_time}).\\ + \constd{SI\_TIMER} & Scadenza di un \textit{POSIX timer} (vedi + sez.~\ref{sec:sig_timer_adv}).\\ + \constd{SI\_MESGQ} & Inviato al cambiamento di stato di una coda di + messaggi POSIX (vedi sez.~\ref{sec:ipc_posix_mq}), + introdotto con il kernel 2.6.6.\\ + \constd{SI\_ASYNCIO}& Una operazione di I/O asincrono (vedi + sez.~\ref{sec:file_asyncronous_io}) è stata + completata.\\ + \constd{SI\_SIGIO} & Segnale di \signal{SIGIO} da una coda (vedi + sez.~\ref{sec:file_asyncronous_operation}).\\ + \constd{SI\_TKILL} & Inviato da \func{tkill} o \func{tgkill} (vedi + sez.~\ref{cha:thread_xxx}), introdotto con il kernel + 2.4.19.\\ \hline \end{tabular} \caption{Valori del campo \var{si\_code} della struttura \struct{sigaction} @@ -2239,33 +2240,33 @@ riferimento. \textbf{Valore} & \textbf{Significato} \\ \hline \hline - \const{ILL\_ILLOPC} & Codice di operazione illegale.\\ - \const{ILL\_ILLOPN} & Operando illegale.\\ - \const{ILL\_ILLADR} & Modo di indirizzamento illegale.\\ - \const{ILL\_ILLTRP} & Trappola di processore illegale.\\ - \const{ILL\_PRVOPC} & Codice di operazione privilegiato.\\ - \const{ILL\_PRVREG} & Registro privilegiato.\\ - \const{ILL\_COPROC} & Errore del coprocessore.\\ - \const{ILL\_BADSTK} & Errore nello stack interno.\\ + \constd{ILL\_ILLOPC} & Codice di operazione illegale.\\ + \constd{ILL\_ILLOPN} & Operando illegale.\\ + \constd{ILL\_ILLADR} & Modo di indirizzamento illegale.\\ + \constd{ILL\_ILLTRP} & Trappola di processore illegale.\\ + \constd{ILL\_PRVOPC} & Codice di operazione privilegiato.\\ + \constd{ILL\_PRVREG} & Registro privilegiato.\\ + \constd{ILL\_COPROC} & Errore del coprocessore.\\ + \constd{ILL\_BADSTK} & Errore nello stack interno.\\ \hline - \const{FPE\_INTDIV} & Divisione per zero intera.\\ - \const{FPE\_INTOVF} & Overflow intero.\\ - \const{FPE\_FLTDIV} & Divisione per zero in virgola mobile.\\ - \const{FPE\_FLTOVF} & Overflow in virgola mobile.\\ - \const{FPE\_FLTUND} & Underflow in virgola mobile.\\ - \const{FPE\_FLTRES} & Risultato in virgola mobile non esatto.\\ - \const{FPE\_FLTINV} & Operazione in virgola mobile non valida.\\ - \const{FPE\_FLTSUB} & Mantissa? fuori intervallo.\\ + \constd{FPE\_INTDIV} & Divisione per zero intera.\\ + \constd{FPE\_INTOVF} & Overflow intero.\\ + \constd{FPE\_FLTDIV} & Divisione per zero in virgola mobile.\\ + \constd{FPE\_FLTOVF} & Overflow in virgola mobile.\\ + \constd{FPE\_FLTUND} & Underflow in virgola mobile.\\ + \constd{FPE\_FLTRES} & Risultato in virgola mobile non esatto.\\ + \constd{FPE\_FLTINV} & Operazione in virgola mobile non valida.\\ + \constd{FPE\_FLTSUB} & Mantissa? fuori intervallo.\\ \hline - \const{SEGV\_MAPERR} & Indirizzo non mappato.\\ - \const{SEGV\_ACCERR} & Permessi non validi per l'indirizzo.\\ + \constd{SEGV\_MAPERR} & Indirizzo non mappato.\\ + \constd{SEGV\_ACCERR} & Permessi non validi per l'indirizzo.\\ \hline - \const{BUS\_ADRALN} & Allineamento dell'indirizzo non valido.\\ - \const{BUS\_ADRERR} & Indirizzo fisico inesistente.\\ - \const{BUS\_OBJERR} & Errore hardware sull'indirizzo.\\ + \constd{BUS\_ADRALN} & Allineamento dell'indirizzo non valido.\\ + \constd{BUS\_ADRERR} & Indirizzo fisico inesistente.\\ + \constd{BUS\_OBJERR} & Errore hardware sull'indirizzo.\\ \hline - \const{TRAP\_BRKPT} & Breakpoint sul processo.\\ - \const{TRAP\_TRACE} & Trappola di tracciamento del processo.\\ + \constd{TRAP\_BRKPT} & Breakpoint sul processo.\\ + \constd{TRAP\_TRACE} & Trappola di tracciamento del processo.\\ \hline \constd{CLD\_EXITED} & Il figlio è uscito.\\ \constd{CLD\_KILLED} & Il figlio è stato terminato.\\ @@ -2274,12 +2275,12 @@ riferimento. \constd{CLD\_STOPPED} & Il figlio è stato fermato.\\ \constd{CLD\_CONTINUED}& Il figlio è ripartito.\\ \hline - \const{POLL\_IN} & Disponibili dati in ingresso.\\ - \const{POLL\_OUT} & Spazio disponibile sul buffer di uscita.\\ - \const{POLL\_MSG} & Disponibili messaggi in ingresso.\\ - \const{POLL\_ERR} & Errore di I/O.\\ - \const{POLL\_PRI} & Disponibili dati di alta priorità in ingresso.\\ - \const{POLL\_HUP} & Il dispositivo è stato disconnesso.\\ + \constd{POLL\_IN} & Disponibili dati in ingresso.\\ + \constd{POLL\_OUT} & Spazio disponibile sul buffer di uscita.\\ + \constd{POLL\_MSG} & Disponibili messaggi in ingresso.\\ + \constd{POLL\_ERR} & Errore di I/O.\\ + \constd{POLL\_PRI} & Disponibili dati di alta priorità in ingresso.\\ + \constd{POLL\_HUP} & Il dispositivo è stato disconnesso.\\ \hline \end{tabular} \caption{Valori del campo \var{si\_code} della struttura \struct{sigaction} @@ -2289,9 +2290,9 @@ riferimento. \label{tab:sig_si_code_special} \end{table} -Il resto della struttura \struct{siginfo\_t} è definito come una -\dirct{union} ed i valori eventualmente presenti dipendono dal segnale -ricevuto, così \signal{SIGCHLD} ed i segnali \textit{real-time} (vedi +Il resto della struttura \struct{siginfo\_t} è definito come una \dirct{union} +ed i valori eventualmente presenti dipendono dal segnale ricevuto, così +\signal{SIGCHLD} ed i segnali \textit{real-time} (vedi sez.~\ref{sec:sig_real_time}) inviati tramite \func{kill} avvalorano \var{si\_pid} e \var{si\_uid} coi valori corrispondenti al processo che ha emesso il segnale, \signal{SIGCHLD} avvalora anche i campi \var{si\_status}, @@ -2301,11 +2302,10 @@ sez.~\ref{sec:sys_cpu_times}) usati dal processo; \signal{SIGILL}, \signal{SIGFPE}, \signal{SIGSEGV} e \signal{SIGBUS} avvalorano \var{si\_addr} con l'indirizzo in cui è avvenuto l'errore, \signal{SIGIO} (vedi sez.~\ref{sec:file_asyncronous_io}) avvalora \var{si\_fd} con il numero del -file descriptor e \var{si\_band} per i \itindex{out-of-band} dati urgenti -(vedi sez.~\ref{sec:TCP_urgent_data}) su un socket, il segnale inviato alla -scadenza di un \itindex{POSIX~Timer~API} POSIX timer (vedi -sez.~\ref{sec:sig_timer_adv}) avvalora i campi \var{si\_timerid} e -\var{si\_overrun}. +file descriptor e \var{si\_band} per i dati urgenti (vedi +sez.~\ref{sec:TCP_urgent_data}) su un socket, il segnale inviato alla scadenza +di un POSIX timer (vedi sez.~\ref{sec:sig_timer_adv}) avvalora i campi +\var{si\_timerid} e \var{si\_overrun}. Benché sia possibile usare nello stesso programma sia \func{sigaction} che \func{signal} occorre molta attenzione, in quanto le due funzioni possono @@ -2368,13 +2368,15 @@ di problemi di sintassi nel passaggio degli argomenti (si veda ad esempio \label{sec:sig_sigmask} \index{maschera dei segnali|(} -Come spiegato in sez.~\ref{sec:sig_semantics} tutti i moderni sistemi unix-like -permettono di bloccare temporaneamente (o di eliminare completamente, -impostando come azione \const{SIG\_IGN}) la consegna dei segnali ad un -processo. Questo è fatto specificando la cosiddetta \textsl{maschera dei - segnali} (o \textit{signal mask}) del processo\footnote{nel caso di Linux - essa è mantenuta dal campo \var{blocked} della \struct{task\_struct} del - processo.} cioè l'insieme dei segnali la cui consegna è bloccata. + +Come spiegato in sez.~\ref{sec:sig_semantics} tutti i moderni sistemi +unix-like permettono di bloccare temporaneamente (o di eliminare +completamente, impostando come azione \const{SIG\_IGN}) la consegna dei +segnali ad un processo. Questo è fatto specificando la cosiddetta +\textsl{maschera dei segnali} (o \textit{signal mask}) del +processo\footnote{nel caso di Linux essa è mantenuta dal campo \var{blocked} + della \struct{task\_struct} del processo.} cioè l'insieme dei segnali la cui +consegna è bloccata. Abbiamo accennato in sez.~\ref{sec:proc_fork} che la maschera dei segnali viene ereditata dal padre alla creazione di un processo figlio, e abbiamo @@ -2432,13 +2434,13 @@ quell'indirizzo. \textbf{Valore} & \textbf{Significato} \\ \hline \hline - \const{SIG\_BLOCK} & L'insieme dei segnali bloccati è l'unione fra - quello specificato e quello corrente.\\ - \const{SIG\_UNBLOCK} & I segnali specificati in \param{set} sono rimossi - dalla maschera dei segnali, specificare la - cancellazione di un segnale non bloccato è legale.\\ - \const{SIG\_SETMASK} & La maschera dei segnali è impostata al valore - specificato da \param{set}.\\ + \constd{SIG\_BLOCK} & L'insieme dei segnali bloccati è l'unione fra + quello specificato e quello corrente.\\ + \constd{SIG\_UNBLOCK} & I segnali specificati in \param{set} sono rimossi + dalla maschera dei segnali, specificare la + cancellazione di un segnale non bloccato è legale.\\ + \constd{SIG\_SETMASK} & La maschera dei segnali è impostata al valore + specificato da \param{set}.\\ \hline \end{tabular} \caption{Valori e significato dell'argomento \param{how} della funzione @@ -2768,10 +2770,10 @@ se usata nella forma \var{sival\_int}, o un puntatore, se usata nella forma vari meccanismi di notifica per restituire dati al gestore del segnale in \var{si\_value}. Un campo di tipo \type{sigval\_t} è presente anche nella struttura \struct{sigevent} (definita in fig.~\ref{fig:struct_sigevent}) che -viene usata dai meccanismi di notifica come quelli per -\itindex{POSIX~Timer~API} i timer POSIX (vedi sez.~\ref{sec:sig_timer_adv}), -l'I/O asincrono (vedi sez.~\ref{sec:file_asyncronous_io}) o le code di -messaggi POSIX (vedi sez.~\ref{sec:ipc_posix_mq}). +viene usata dai meccanismi di notifica come quelli per i timer POSIX (vedi +sez.~\ref{sec:sig_timer_adv}), l'I/O asincrono (vedi +sez.~\ref{sec:file_asyncronous_io}) o le code di messaggi POSIX (vedi +sez.~\ref{sec:ipc_posix_mq}). A causa delle loro caratteristiche, la funzione \func{kill} non è adatta ad inviare segnali \textit{real-time}, poiché non è in grado di fornire alcun @@ -2819,13 +2821,13 @@ classica il segnale sarà generato, ma tutte le caratteristiche tipiche dei segnali \textit{real-time} (priorità e coda) saranno perse. Secondo lo standard POSIX la profondità della coda è indicata dalla costante -\const{SIGQUEUE\_MAX}, una della tante costanti di sistema definite dallo +\constd{SIGQUEUE\_MAX}, una della tante costanti di sistema definite dallo standard POSIX che non abbiamo riportato esplicitamente in sez.~\ref{sec:sys_limits}. Il suo valore minimo secondo lo standard, -\const{\_POSIX\_SIGQUEUE\_MAX}, è pari a 32. Nel caso di Linux la coda ha una +\constd{\_POSIX\_SIGQUEUE\_MAX}, è pari a 32. Nel caso di Linux la coda ha una dimensione variabile; fino alla versione 2.6.7 c'era un limite massimo globale che poteva essere impostato come parametro del kernel in -\sysctlfile{kernel/rtsig-max} ed il valore predefinito era pari a 1024. A +\sysctlfiled{kernel/rtsig-max} ed il valore predefinito era pari a 1024. A partire dal kernel 2.6.8 il valore globale è stato rimosso e sostituito dalla risorsa \const{RLIMIT\_SIGPENDING} associata al singolo utente, che può essere modificata con \func{setrlimit} come illustrato in @@ -2928,8 +2930,6 @@ riceverlo fra due chiamate successive. \subsection{La gestione avanzata delle temporizzazioni} \label{sec:sig_timer_adv} -% TODO: indicizzare i termini \itindex{POSIX~Timer~API} e HRT - Sia le funzioni per la gestione dei tempi viste in sez.~\ref{sec:sys_cpu_times} che quelle per la gestione dei timer di sez.~\ref{sec:sig_alarm_abort} sono state a lungo limitate dalla risoluzione @@ -2997,43 +2997,43 @@ tab.~\ref{tab:sig_timer_clockid_types}. \textbf{Valore} & \textbf{Significato} \\ \hline \hline - \const{CLOCK\_REALTIME} & Orologio \textit{real-time} di sistema, può + \constd{CLOCK\_REALTIME} & Orologio \textit{real-time} di sistema, può essere impostato solo con privilegi amministrativi.\\ - \const{CLOCK\_MONOTONIC} & Orologio che indica un tempo monotono + \constd{CLOCK\_MONOTONIC} & Orologio che indica un tempo monotono crescente (a partire da un tempo iniziale non specificato) che non può essere modificato e non cambia neanche in caso di reimpostazione dell'orologio di sistema.\\ - \const{CLOCK\_PROCESS\_CPUTIME\_ID}& Contatore del tempo di CPU usato + \constd{CLOCK\_PROCESS\_CPUTIME\_ID}& Contatore del tempo di CPU usato da un processo (il \textit{process time} di sez.~\ref{sec:sys_cpu_times}, nel totale di \textit{system time} e \textit{user time}) comprensivo di tutto il tempo di CPU usato da eventuali \textit{thread}.\\ - \const{CLOCK\_THREAD\_CPUTIME\_ID}& Contatore del tempo di CPU + \constd{CLOCK\_THREAD\_CPUTIME\_ID}& Contatore del tempo di CPU (\textit{user time} e \textit{system time}) usato da un singolo \textit{thread}.\\ \hline - \const{CLOCK\_MONOTONIC\_RAW}&Simile al precedente, ma non subisce gli + \constd{CLOCK\_MONOTONIC\_RAW}&Simile al precedente, ma non subisce gli aggiustamenti dovuti all'uso di NTP (viene usato per fare riferimento ad una fonte hardware). Questo orologio è specifico di Linux, ed è disponibile a partire dal kernel 2.6.28.\\ - \const{CLOCK\_BOOTTIME} & Identico a \const{CLOCK\_MONOTONIC} ma tiene + \constd{CLOCK\_BOOTTIME} & Identico a \const{CLOCK\_MONOTONIC} ma tiene conto anche del tempo durante il quale il sistema è stato sospeso (nel caso di sospensione in RAM o \textsl{ibernazione} su disco. Questo orologio è specifico di Linux, ed è disponibile a partire dal kernel 2.6.39.\\ - \const{CLOCK\_REALTIME\_ALARM}&Identico a \const{CLOCK\_REALTIME}, ma se + \constd{CLOCK\_REALTIME\_ALARM}&Identico a \const{CLOCK\_REALTIME}, ma se usato per un timer il sistema sarà riattivato anche se è in sospensione. Questo orologio è specifico di Linux, ed è disponibile a partire dal kernel 3.0.\\ - \const{CLOCK\_BOOTTIME\_ALARM}&Identico a \const{CLOCK\_BOOTTIME}, ma se + \constd{CLOCK\_BOOTTIME\_ALARM}&Identico a \const{CLOCK\_BOOTTIME}, ma se usato per un timer il sistema sarà riattivato anche se è in sospensione. Questo orologio è specifico di Linux, ed è disponibile a @@ -3058,12 +3058,12 @@ programmi che le usano devono essere collegati con la libreria delle estensioni \textit{real-time} usando esplicitamente l'opzione \texttt{-lrt}. Si tenga presente inoltre che la disponibilità di queste funzionalità avanzate -può essere controllato dalla definizione della macro \macro{\_POSIX\_TIMERS} +può essere controllato dalla definizione della macro \macrod{\_POSIX\_TIMERS} ad un valore maggiore di 0, e che le ulteriori macro -\macro{\_POSIX\_MONOTONIC\_CLOCK}, \macro{\_POSIX\_CPUTIME} e -\macro{\_POSIX\_THREAD\_CPUTIME} indicano la presenza dei rispettivi orologi +\macrod{\_POSIX\_MONOTONIC\_CLOCK}, \macrod{\_POSIX\_CPUTIME} e +\macrod{\_POSIX\_THREAD\_CPUTIME} indicano la presenza dei rispettivi orologi di tipo \const{CLOCK\_MONOTONIC}, \const{CLOCK\_PROCESS\_CPUTIME\_ID} e -\const{CLOCK\_PROCESS\_CPUTIME\_ID}; tutte queste macro sono definite in +\const{CLOCK\_THREAD\_CPUTIME\_ID}; tutte queste macro sono definite in \headfile{unistd.h}, che pertanto deve essere incluso per poterle controllarle. Infine se il kernel ha il supporto per gli \textit{high resolution timer} un elenco degli orologi e dei timer può essere ottenuto @@ -3332,8 +3332,8 @@ effettuata. Diventa così possibile indicare l'uso di un segnale o l'esecuzione \textbf{Valore} & \textbf{Significato} \\ \hline \hline - \const{SIGEV\_NONE} & Non viene inviata nessuna notifica.\\ - \const{SIGEV\_SIGNAL} & La notifica viene effettuata inviando al processo + \constd{SIGEV\_NONE} & Non viene inviata nessuna notifica.\\ + \constd{SIGEV\_SIGNAL} & La notifica viene effettuata inviando al processo chiamante il segnale specificato dal campo \var{sigev\_signo}; se il gestore di questo segnale è stato installato con @@ -3342,7 +3342,7 @@ effettuata. Diventa così possibile indicare l'uso di un segnale o l'esecuzione \dirct{union} \texttt{sigval}, la cui definizione è in fig.~\ref{fig:sig_sigval}) come valore del campo \var{si\_value} di \struct{siginfo\_t}.\\ - \const{SIGEV\_THREAD} & La notifica viene effettuata creando un nuovo + \constd{SIGEV\_THREAD} & La notifica viene effettuata creando un nuovo \textit{thread} che esegue la funzione di notifica specificata da \var{sigev\_notify\_function} con argomento @@ -3350,7 +3350,7 @@ effettuata. Diventa così possibile indicare l'uso di un segnale o l'esecuzione \val{NULL}, il \textit{thread} viene creato con gli attributi specificati da \var{sigev\_notify\_attribute}.\footnotemark\\ - \const{SIGEV\_THREAD\_ID}& Invia la notifica come segnale (con le stesse + \constd{SIGEV\_THREAD\_ID}& Invia la notifica come segnale (con le stesse modalità di \const{SIGEV\_SIGNAL}) che però viene recapitato al \textit{thread} indicato dal campo \var{sigev\_notify\_thread\_id}. Questa modalità @@ -3447,7 +3447,7 @@ con una precisione fino al nanosecondo tramite una struttura \struct{timespec} valore di \param{flags} è nullo, questo valore viene considerato come un intervallo relativo al tempo corrente, il primo allarme scatterà cioè dopo il numero di secondi e nanosecondi indicati da questo campo. Se invece si usa -per \param{flags} il valore \const{TIMER\_ABSTIME}, che al momento è l'unico +per \param{flags} il valore \constd{TIMER\_ABSTIME}, che al momento è l'unico valore valido per \param{flags}, allora \var{it\_value} viene considerato come un valore assoluto rispetto al valore usato dall'orologio a cui è associato il timer. @@ -3632,9 +3632,8 @@ per \param{flags} e si è indicato un tempo assoluto che è già passato la funzione ritorna immediatamente senza nessuna sospensione. In caso di interruzione da parte di un segnale il tempo rimanente viene restituito in \param{remain} soltanto se questo non è un puntatore \val{NULL} e non si è -specificato \const{TIMER\_ABSTIME} per \param{flags} . +specificato \const{TIMER\_ABSTIME} per \param{flags}. -% TODO manca clock_nanosleep, referenziata in sez.~\ref{sec:sig_gen_beha} \itindend{POSIX~Timer~API} @@ -3690,7 +3689,7 @@ gestori, occorre però seguire una certa procedura: In genere il primo passo viene effettuato allocando un'opportuna area di memoria con \code{malloc}; in \headfile{signal.h} sono definite due costanti, -\const{SIGSTKSZ} e \const{MINSIGSTKSZ}, che possono essere utilizzate per +\constd{SIGSTKSZ} e \constd{MINSIGSTKSZ}, che possono essere utilizzate per allocare una quantità di spazio opportuna, in modo da evitare overflow. La prima delle due è la dimensione canonica per uno \textit{stack} di segnali e di norma è sufficiente per tutti gli usi normali. @@ -3748,12 +3747,12 @@ Il campo \var{ss\_sp} di \struct{stack\_t} indica l'indirizzo base dello nuovo \textit{stack} occorre inizializzare \var{ss\_sp} e \var{ss\_size} rispettivamente al puntatore e alla dimensione della memoria allocata, mentre \var{ss\_flags} deve essere nullo. Se invece si vuole disabilitare uno -\textit{stack} occorre indicare \const{SS\_DISABLE} come valore di +\textit{stack} occorre indicare \constd{SS\_DISABLE} come valore di \var{ss\_flags} e gli altri valori saranno ignorati. Se \param{oss} non è nullo verrà restituito dalla funzione indirizzo e dimensione dello \textit{stack} corrente nei relativi campi, mentre -\var{ss\_flags} potrà assumere il valore \const{SS\_ONSTACK} se il processo è +\var{ss\_flags} potrà assumere il valore \constd{SS\_ONSTACK} se il processo è in esecuzione sullo \textit{stack} alternativo (nel qual caso non è possibile cambiarlo) e \const{SS\_DISABLE} se questo non è abilitato. diff --git a/sockctrl.tex b/sockctrl.tex index edf5801..78b2dc1 100644 --- a/sockctrl.tex +++ b/sockctrl.tex @@ -2277,11 +2277,10 @@ tab.~\ref{tab:sock_opt_socklevel} sul significato delle varie opzioni: viene usata come buffer per i dati, mentre il valore letto da \func{getsockopt} e quello riportato nei vari parametri di \textit{sysctl}\footnote{cioè \sysctlrelfile{net/core}{wmem\_max} e - \sysctlrelfile{net/core}{rmem\_max} in \texttt{/proc/sys/net/core} - e \sysctlrelfile{net/ipv4}{tcp\_wmem} e - \sysctlrelfile{net/ipv4}{tcp\_rmem} in - \texttt{/proc/sys/net/ipv4}, vedi sez.~\ref{sec:sock_sysctl}.} indica la - memoria effettivamente impiegata. Si tenga presente inoltre che le + \sysctlrelfile{net/core}{rmem\_max} in \texttt{/proc/sys/net/core} e + \sysctlrelfile{net/ipv4}{tcp\_wmem} e \sysctlrelfile{net/ipv4}{tcp\_rmem} + in \texttt{/proc/sys/net/ipv4}, vedi sez.~\ref{sec:sock_sysctl}.} indica + la memoria effettivamente impiegata. Si tenga presente inoltre che le modifiche alle dimensioni dei buffer di ricezione e trasmissione, per poter essere effettive, devono essere impostate prima della chiamata alle funzioni \func{listen} o \func{connect}. @@ -3578,24 +3577,22 @@ seguenti: \itindex{Round~Trip~Time~(RTT)} \textit{Round Trip Time} cui abbiamo già accennato in sez.~\ref{sec:net_tcp}.} dei pacchetti sulla rete. -\item[\const{SIOCSPGRP}] imposta il processo o il \itindex{process~group} - \textit{process group} a cui inviare i segnali \signal{SIGIO} e - \signal{SIGURG} quando viene completata una operazione di I/O asincrono o - arrivano dei dati urgenti \itindex{out-of-band} (\texttt{out-of-band}). Il - terzo argomento deve essere un puntatore ad una variabile di tipo - \type{pid\_t}; un valore positivo indica direttamente il \ids{PID} del - processo, mentre un valore negativo indica (col valore assoluto) il - \textit{process group}. Senza privilegi di amministratore o la capability - \const{CAP\_KILL} si può impostare solo se stessi o il proprio - \textit{process group}. +\item[\const{SIOCSPGRP}] imposta il processo o il \textit{process group} a cui + inviare i segnali \signal{SIGIO} e \signal{SIGURG} quando viene completata + una operazione di I/O asincrono o arrivano dei dati urgenti + \itindex{out-of-band} (\texttt{out-of-band}). Il terzo argomento deve essere + un puntatore ad una variabile di tipo \type{pid\_t}; un valore positivo + indica direttamente il \ids{PID} del processo, mentre un valore negativo + indica (col valore assoluto) il \textit{process group}. Senza privilegi di + amministratore o la capability \const{CAP\_KILL} si può impostare solo se + stessi o il proprio \textit{process group}. \item[\const{SIOCGPGRP}] legge le impostazioni presenti sul socket - relativamente all'eventuale processo o \itindex{process~group} - \textit{process group} cui devono essere inviati i segnali \signal{SIGIO} e - \signal{SIGURG}. Come per \const{SIOCSPGRP} l'argomento passato deve un - puntatore ad una variabile di tipo \type{pid\_t}, con lo stesso significato. - Qualora non sia presente nessuna impostazione verrà restituito un valore - nullo. + relativamente all'eventuale processo o \textit{process group} cui devono + essere inviati i segnali \signal{SIGIO} e \signal{SIGURG}. Come per + \const{SIOCSPGRP} l'argomento passato deve un puntatore ad una variabile di + tipo \type{pid\_t}, con lo stesso significato. Qualora non sia presente + nessuna impostazione verrà restituito un valore nullo. \item[\const{FIOASYNC}] Abilita o disabilita la modalità di I/O asincrono sul socket. Questo significa (vedi sez.~\ref{sec:signal_driven_io}) che verrà @@ -4034,19 +4031,19 @@ socket. Quelli descritti anche nella pagina di manuale, accessibile con \texttt{man 7 socket} sono i seguenti: \begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}} -\item[\sysctlrelfile{net/core}{rmem\_default}] imposta la dimensione +\item[\sysctlrelfiled{net/core}{rmem\_default}] imposta la dimensione di default del buffer di ricezione (cioè per i dati in ingresso) dei socket. -\item[\sysctlrelfile{net/core}{rmem\_max}] imposta la dimensione +\item[\sysctlrelfiled{net/core}{rmem\_max}] imposta la dimensione massima che si può assegnare al buffer di ricezione dei socket attraverso l'uso dell'opzione \const{SO\_RCVBUF}. -\item[\sysctlrelfile{net/core}{wmem\_default}] imposta la dimensione +\item[\sysctlrelfiled{net/core}{wmem\_default}] imposta la dimensione di default del buffer di trasmissione (cioè per i dati in uscita) dei socket. -\item[\sysctlrelfile{net/core}{wmem\_max}] imposta la dimensione +\item[\sysctlrelfiled{net/core}{wmem\_max}] imposta la dimensione massima che si può assegnare al buffer di trasmissione dei socket attraverso l'uso dell'opzione \const{SO\_SNDBUF}. -\item[\sysctlrelfile{net/core}{message\_cost}, - \sysctlrelfile{net/core}{message\_burst}] contengono le impostazioni +\item[\sysctlrelfiled{net/core}{message\_cost}, + \sysctlrelfiled{net/core}{message\_burst}] contengono le impostazioni del \itindex{bucket~filter} \textit{bucket filter} che controlla l'emissione di messaggi di avviso da parte del kernel per eventi relativi a problemi sulla rete, imponendo un limite che consente di prevenire eventuali attacchi @@ -4076,10 +4073,10 @@ socket. Quelli descritti anche nella pagina di manuale, accessibile con emissione (verranno accettati inizialmente fino ad un massimo di \texttt{message\_cost/message\_burst} messaggi). -\item[\sysctlrelfile{net/core}{netdev\_max\_backlog}] numero massimo +\item[\sysctlrelfiled{net/core}{netdev\_max\_backlog}] numero massimo di pacchetti che possono essere contenuti nella coda di ingresso generale. -\item[\sysctlrelfile{net/core}{optmem\_max}] lunghezza massima dei +\item[\sysctlrelfiled{net/core}{optmem\_max}] lunghezza massima dei dati ancillari e di controllo (vedi sez.~\ref{sec:net_ancillary_data}). \end{basedescript} @@ -4088,31 +4085,31 @@ file, la cui documentazione dovrebbe essere mantenuta nei sorgenti del kernel, nel file \texttt{Documentation/networking/ip-sysctl.txt}; la maggior parte di questi però non è documentato: \begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}} -\item[\sysctlrelfile{net/core}{dev\_weight}] blocco di lavoro (\textit{work +\item[\sysctlrelfiled{net/core}{dev\_weight}] blocco di lavoro (\textit{work quantum}) dello \textit{scheduler} di processo dei pacchetti. % TODO da documentare meglio -\item[\sysctlrelfile{net/core}{lo\_cong}] valore per l'occupazione +\item[\sysctlrelfiled{net/core}{lo\_cong}] valore per l'occupazione della coda di ricezione sotto la quale si considera di avere una bassa congestione. -\item[\sysctlrelfile{net/core}{mod\_cong}] valore per l'occupazione +\item[\sysctlrelfiled{net/core}{mod\_cong}] valore per l'occupazione della coda di ricezione sotto la quale si considera di avere una congestione moderata. -\item[\sysctlrelfile{net/core}{no\_cong}] valore per l'occupazione +\item[\sysctlrelfiled{net/core}{no\_cong}] valore per l'occupazione della coda di ricezione sotto la quale si considera di non avere congestione. -\item[\sysctlrelfile{net/core}{no\_cong\_thresh}] valore minimo +\item[\sysctlrelfiled{net/core}{no\_cong\_thresh}] valore minimo (\textit{low water mark}) per il riavvio dei dispositivi congestionati. - % \item[\sysctlrelfile{net/core}{netdev\_fastroute}] è presente + % \item[\sysctlrelfiled{net/core}{netdev\_fastroute}] è presente % soltanto quando si è compilato il kernel con l'apposita opzione di % ottimizzazione per l'uso come router. -\item[\sysctlrelfile{net/core}{somaxconn}] imposta la dimensione +\item[\sysctlrelfiled{net/core}{somaxconn}] imposta la dimensione massima utilizzabile per il \textit{backlog} della funzione \func{listen} (vedi sez.~\ref{sec:TCP_func_listen}), e corrisponde al valore della costante \const{SOMAXCONN}; il suo valore di default è 128. @@ -4134,7 +4131,7 @@ protocollo IP in quanto tale, che sono descritti anche nella relativa pagina di manuale accessibile con \texttt{man 7 ip}, sono i seguenti: \begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}} -\item[\sysctlrelfile{net/ipv4}{ip\_default\_ttl}] imposta il valore di +\item[\sysctlrelfiled{net/ipv4}{ip\_default\_ttl}] imposta il valore di default per il campo TTL (vedi sez.~\ref{sec:IP_header}) di tutti i pacchetti uscenti, stabilendo così il numero massimo di router che i pacchetti possono attraversare. Il valore può essere modificato anche per il @@ -4147,12 +4144,12 @@ di manuale accessibile con \texttt{man 7 ip}, sono i seguenti: quanto in caso di problemi di routing si allunga inutilmente il numero di ritrasmissioni. -\item[\sysctlrelfile{net/ipv4}{ip\_forward}] abilita l'inoltro dei +\item[\sysctlrelfiled{net/ipv4}{ip\_forward}] abilita l'inoltro dei pacchetti da una interfaccia ad un altra, e può essere impostato anche per la singola interfaccia. Prende un valore logico (0 disabilita, diverso da zero abilita), di default è disabilitato. -\item[\sysctlrelfile{net/ipv4}{ip\_dynaddr}] abilita la riscrittura +\item[\sysctlrelfiled{net/ipv4}{ip\_dynaddr}] abilita la riscrittura automatica degli indirizzi associati ad un socket quando una interfaccia cambia indirizzo. Viene usato per le interfacce usate nei collegamenti in dial-up, il cui indirizzo IP viene assegnato dinamicamente dal provider, e @@ -4161,13 +4158,13 @@ di manuale accessibile con \texttt{man 7 ip}, sono i seguenti: diverso dai precedenti) la si abilità in modalità \textsl{prolissa}; di default la funzionalità è disabilitata. -\item[\sysctlrelfile{net/ipv4}{ip\_autoconfig}] specifica se +\item[\sysctlrelfiled{net/ipv4}{ip\_autoconfig}] specifica se l'indirizzo IP è stato configurato automaticamente dal kernel all'avvio attraverso DHCP, BOOTP o RARP. Riporta un valore logico (0 falso, 1 vero) accessibile solo in lettura, è inutilizzato nei kernel recenti ed eliminato a partire dal kernel 2.6.18. -\item[\sysctlrelfile{net/ipv4}{ip\_local\_port\_range}] imposta +\item[\sysctlrelfiled{net/ipv4}{ip\_local\_port\_range}] imposta l'intervallo dei valori usati per l'assegnazione delle porte effimere, permette cioè di modificare i valori illustrati in fig.~\ref{fig:TCP_port_alloc}; prende due valori interi separati da spazi, @@ -4178,7 +4175,7 @@ di manuale accessibile con \texttt{man 7 ip}, sono i seguenti: valore iniziale maggiore di 1024 (o meglio ancora di 4096) per evitare conflitti con le porte usate dai servizi noti. -\item[\sysctlrelfile{net/ipv4}{ip\_no\_pmtu\_disc}] permette di disabilitare +\item[\sysctlrelfiled{net/ipv4}{ip\_no\_pmtu\_disc}] permette di disabilitare per i socket \const{SOCK\_STREAM} la ricerca automatica della \textit{Path MTU} (vedi sez.~\ref{sec:net_lim_dim} e sez.~\ref{sec:sock_ipv4_options}). Prende un valore logico, e di default è @@ -4194,7 +4191,7 @@ di manuale accessibile con \texttt{man 7 ip}, sono i seguenti: disabilitare globalmente il procedimento con questo parametro ha pesanti ripercussioni in termini di prestazioni di rete. -\item[\sysctlrelfile{net/ipv4}{ip\_always\_defrag}] fa si che tutti i +\item[\sysctlrelfiled{net/ipv4}{ip\_always\_defrag}] fa si che tutti i pacchetti IP frammentati siano riassemblati, anche in caso in successivo immediato inoltro.\footnote{introdotto con il kernel 2.2.13, nelle versioni precedenti questo comportamento poteva essere solo stabilito un volta per @@ -4205,17 +4202,17 @@ di manuale accessibile con \texttt{man 7 ip}, sono i seguenti: \itindex{netfilter} \textit{netfilter}, e questo parametro non è più presente. -\item[\sysctlrelfile{net/ipv4}{ipfrag\_high\_thresh}] indica il limite +\item[\sysctlrelfiled{net/ipv4}{ipfrag\_high\_thresh}] indica il limite massimo (espresso in numero di byte) sui pacchetti IP frammentati presenti in coda; quando questo valore viene raggiunta la coda viene ripulita fino al valore \texttt{ipfrag\_low\_thresh}. Prende un valore intero. -\item[\sysctlrelfile{net/ipv4}{ipfrag\_low\_thresh}] soglia bassa +\item[\sysctlrelfiled{net/ipv4}{ipfrag\_low\_thresh}] soglia bassa (specificata in byte) a cui viene riportata la coda dei pacchetti IP frammentati quando si raggiunge il valore massimo dato da \texttt{ipfrag\_high\_thresh}. Prende un valore intero. -\item[\sysctlrelfile{net/ipv4}{ip\_nonlocal\_bind}] se abilitato rende +\item[\sysctlrelfiled{net/ipv4}{ip\_nonlocal\_bind}] se abilitato rende possibile ad una applicazione eseguire \func{bind} anche su un indirizzo che non è presente su nessuna interfaccia locale. Prende un valore logico e di default è disabilitato. @@ -4236,7 +4233,7 @@ caratteristiche specifiche del protocollo TCP, elencati anche nella rispettiva pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: \begin{basedescript}{\desclabelwidth{2.2cm}\desclabelstyle{\nextlinelabel}} -\item[\sysctlrelfile{net/ipv4}{tcp\_abort\_on\_overflow}] indica al +\item[\sysctlrelfiled{net/ipv4}{tcp\_abort\_on\_overflow}] indica al kernel di azzerare le connessioni quando il programma che le riceve è troppo lento ed incapace di accettarle. Prende un valore logico ed è disabilitato di default. Questo consente di recuperare le connessioni se si è avuto un @@ -4245,7 +4242,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: quando si è sicuri che non è possibile ottimizzare il server in modo che sia in grado di accettare connessioni più rapidamente. -\item[\sysctlrelfile{net/ipv4}{tcp\_adv\_win\_scale}] indica al kernel quale +\item[\sysctlrelfiled{net/ipv4}{tcp\_adv\_win\_scale}] indica al kernel quale frazione del buffer associato ad un socket\footnote{quello impostato con \sysctlrelfile{net/ipv4}{tcp\_rmem}.} deve essere utilizzata per la finestra del protocollo TCP\footnote{in sostanza il valore che costituisce @@ -4258,7 +4255,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: negativo. Il default è 2 che significa che al buffer dell'applicazione viene riservato un quarto del totale. -\item[\sysctlrelfile{net/ipv4}{tcp\_app\_win}] indica la frazione della +\item[\sysctlrelfiled{net/ipv4}{tcp\_app\_win}] indica la frazione della finestra TCP che viene riservata per gestire l'overhaed dovuto alla bufferizzazione. Prende un valore valore intero che consente di calcolare la dimensione in byte come il massimo fra la @@ -4272,7 +4269,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: % \item[\texttt{tcp\_bic\_low\_window}] % \item[\texttt{tcp\_bic\_fast\_convergence}] -\item[\sysctlrelfile{net/ipv4}{tcp\_dsack}] abilita il supporto, +\item[\sysctlrelfiled{net/ipv4}{tcp\_dsack}] abilita il supporto, definito nell'\href{http://www.ietf.org/rfc/rfc2884.txt}{RFC~2884}, per il cosiddetto \textit{Duplicate SACK}.\footnote{si indica con SACK (\textit{Selective Acknowledgement}) un'opzione TCP, definita @@ -4284,7 +4281,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: % mettere riferimento nelle appendici -\item[\sysctlrelfile{net/ipv4}{tcp\_ecn}] abilita il meccanismo della +\item[\sysctlrelfiled{net/ipv4}{tcp\_ecn}] abilita il meccanismo della \textit{Explicit Congestion Notification} (in breve ECN) nelle connessioni TCP. Prende valore logico che di default è disabilitato. La \textit{Explicit Congestion Notification} \itindex{Explicit~Congestion~Notification} è un @@ -4305,14 +4302,14 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: % mettere riferimento nelle appendici -\item[\sysctlrelfile{net/ipv4}{tcp\_fack}] abilita il supporto per il +\item[\sysctlrelfiled{net/ipv4}{tcp\_fack}] abilita il supporto per il \textit{TCP Forward Acknowledgement}, un algoritmo per il controllo della congestione del traffico. Prende un valore logico e di default è abilitato. % TODO documentare o descrivere che cos'è il TCP Forward Acknowledgement o % mettere riferimento nelle appendici -\item[\sysctlrelfile{net/ipv4}{tcp\_fin\_timeout}] specifica il numero +\item[\sysctlrelfiled{net/ipv4}{tcp\_fin\_timeout}] specifica il numero di secondi da passare in stato \texttt{FIN\_WAIT2} nell'attesa delle ricezione del pacchetto FIN conclusivo, passati quali il socket viene comunque chiuso forzatamente. Prende un valore intero che indica i secondi @@ -4322,26 +4319,26 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: ma è utile per fronteggiare alcuni attacchi di \itindex{Denial~of~Service~(DoS)} \textit{Denial of Service}. -\item[\sysctlrelfile{net/ipv4}{tcp\_frto}] abilita il supporto per +\item[\sysctlrelfiled{net/ipv4}{tcp\_frto}] abilita il supporto per l'algoritmo F-RTO, un algoritmo usato per la ritrasmissione dei timeout del protocollo TCP, che diventa molto utile per le reti wireless dove la perdita di pacchetti è usualmente dovuta a delle interferenze radio, piuttosto che alla congestione dei router. Prende un valore logico e di default è disabilitato. -\item[\sysctlrelfile{net/ipv4}{tcp\_keepalive\_intvl}] indica il +\item[\sysctlrelfiled{net/ipv4}{tcp\_keepalive\_intvl}] indica il numero di secondi che deve trascorrere fra l'emissione di due successivi pacchetti di test quando è abilitata la funzionalità del \textit{keepalive} (vedi sez.~\ref{sec:sock_options_main}). Prende un valore intero che di default è 75. -\item[\sysctlrelfile{net/ipv4}{tcp\_keepalive\_probes}] indica il +\item[\sysctlrelfiled{net/ipv4}{tcp\_keepalive\_probes}] indica il massimo numero pacchetti di \textit{keepalive} (vedi sez.~\ref{sec:sock_options_main}) che devono essere inviati senza ricevere risposta prima che il kernel decida che la connessione è caduta e la termini. Prende un valore intero che di default è 9. -\item[\sysctlrelfile{net/ipv4}{tcp\_keepalive\_time}] indica il numero +\item[\sysctlrelfiled{net/ipv4}{tcp\_keepalive\_time}] indica il numero di secondi che devono passare senza traffico sulla connessione prima che il kernel inizi ad inviare pacchetti di pacchetti di \textit{keepalive}.\footnote{ha effetto solo per i socket per cui si è @@ -4349,7 +4346,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: sez.~\ref{sec:sock_options_main}.} Prende un valore intero che di default è 7200, pari a due ore. -\item[\sysctlrelfile{net/ipv4}{tcp\_low\_latency}] indica allo stack +\item[\sysctlrelfiled{net/ipv4}{tcp\_low\_latency}] indica allo stack TCP del kernel di ottimizzare il comportamento per ottenere tempi di latenza più bassi a scapito di valori più alti per l'utilizzo della banda. Prende un valore logico che di default è disabilitato in quanto un maggior utilizzo @@ -4357,7 +4354,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: riduzione della latenza è più importante (ad esempio per i cluster di calcolo parallelo) nelle quali lo si può abilitare. -\item[\sysctlrelfile{net/ipv4}{tcp\_max\_orphans}] indica il numero +\item[\sysctlrelfiled{net/ipv4}{tcp\_max\_orphans}] indica il numero massimo di socket TCP ``\textsl{orfani}'' (vale a dire non associati a nessun file descriptor) consentito nel sistema.\footnote{trattasi in genere delle connessioni relative a socket chiusi che non hanno completato il @@ -4373,7 +4370,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: % TODO verificare la spiegazione di connessione orfana. -\item[\sysctlrelfile{net/ipv4}{tcp\_max\_syn\_backlog}] indica la +\item[\sysctlrelfiled{net/ipv4}{tcp\_max\_syn\_backlog}] indica la lunghezza della coda delle connessioni incomplete, cioè delle connessioni per le quali si è ricevuto un SYN di richiesta ma non l'ACK finale del \itindex{three~way~handshake} \textit{three way handshake} (si riveda quanto @@ -4390,7 +4387,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: del kernel, in modo che sia $\mathtt{tcp\_max\_syn\_backlog} \ge \mathtt{16*TCP\_SYNQ\_HSIZE}$, per poi ricompilare il kernel.} -\item[\sysctlrelfile{net/ipv4}{tcp\_max\_tw\_buckets}] indica il +\item[\sysctlrelfiled{net/ipv4}{tcp\_max\_tw\_buckets}] indica il numero massimo di socket in stato \texttt{TIME\_WAIT} consentito nel sistema. Prende un valore intero di default è impostato al doppio del valore del parametro \texttt{NR\_FILE}, ma che viene aggiustato automaticamente a @@ -4399,7 +4396,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: prevenire alcuni semplici attacchi di \textit{denial of service}. -\item[\sysctlrelfile{net/ipv4}{tcp\_mem}] viene usato dallo stack TCP +\item[\sysctlrelfiled{net/ipv4}{tcp\_mem}] viene usato dallo stack TCP per gestire le modalità con cui esso utilizzerà la memoria. Prende una tripletta di valori interi, che indicano un numero di pagine: @@ -4419,12 +4416,12 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: ogni altro valore specificato dagli altri limiti del kernel. \end{itemize*} -\item[\sysctlrelfile{net/ipv4}{tcp\_orphan\_retries}] indica il numero +\item[\sysctlrelfiled{net/ipv4}{tcp\_orphan\_retries}] indica il numero massimo di volte che si esegue un tentativo di controllo sull'altro capo di una connessione che è stata già chiusa dalla nostra parte. Prende un valore intero che di default è 8. -\item[\sysctlrelfile{net/ipv4}{tcp\_reordering}] indica il numero +\item[\sysctlrelfiled{net/ipv4}{tcp\_reordering}] indica il numero massimo di volte che un pacchetto può essere riordinato nel flusso di dati, prima che lo stack TCP assuma che è andato perso e si ponga nello stato di \textit{slow start} (si veda sez.~\ref{sec:tcp_protocol_xxx}) viene usata @@ -4432,7 +4429,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: ritrasmissioni provocate dal riordinamento. Prende un valore intero che di default che è 3, e che non è opportuno modificare. -\item[\sysctlrelfile{net/ipv4}{tcp\_retrans\_collapse}] in caso di +\item[\sysctlrelfiled{net/ipv4}{tcp\_retrans\_collapse}] in caso di pacchetti persi durante una connessione, per ottimizzare l'uso della banda il kernel cerca di eseguire la ritrasmissione inviando pacchetti della massima dimensione possibile; in sostanza dati che in precedenza erano stati @@ -4440,7 +4437,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: pacchetto (o su un numero minore di pacchetti di dimensione maggiore). Prende un valore logico e di default è abilitato. -\item[\sysctlrelfile{net/ipv4}{tcp\_retries1}] imposta il massimo +\item[\sysctlrelfiled{net/ipv4}{tcp\_retries1}] imposta il massimo numero di volte che protocollo tenterà la ritrasmissione si un pacchetto su una connessione stabilita prima di fare ricorso ad ulteriori sforzi che coinvolgano anche il livello di rete. Passato questo numero di @@ -4448,7 +4445,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: aggiornamento della rotta verso la destinazione prima di eseguire ogni successiva ritrasmissione. Prende un valore intero che di default è 3. -\item[\sysctlrelfile{net/ipv4}{tcp\_retries2}] imposta il numero di +\item[\sysctlrelfiled{net/ipv4}{tcp\_retries2}] imposta il numero di tentativi di ritrasmissione di un pacchetto inviato su una connessione già stabilita per il quale non si sia ricevuto una risposta di ACK (si veda anche quanto illustrato in sez.~\ref{sec:TCP_server_crash}). Prende un @@ -4457,7 +4454,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: nell'\href{http://www.ietf.org/rfc/rfc1122.txt}{RFC~1122} dove è indicato un massimo di 100 secondi, che però è un valore considerato troppo basso. -\item[\sysctlrelfile{net/ipv4}{tcp\_rfc1337}] indica al kernel di +\item[\sysctlrelfiled{net/ipv4}{tcp\_rfc1337}] indica al kernel di abilitare il comportamento richiesto nell'\href{http://www.ietf.org/rfc/rfc1337.txt}{RFC~1337}. Prende un valore logico e di default è disabilitato, il che significa che alla ricezione di @@ -4465,7 +4462,7 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: immediatamente senza attendere la conclusione del periodo di \texttt{TIME\_WAIT}. -\item[\sysctlrelfile{net/ipv4}{tcp\_rmem}] viene usato dallo stack TCP +\item[\sysctlrelfiled{net/ipv4}{tcp\_rmem}] viene usato dallo stack TCP per controllare dinamicamente le dimensioni dei propri buffer di ricezione, anche in rapporto alla memoria disponibile. Prende una tripletta di valori interi separati da spazi che indicano delle dimensioni in byte: @@ -4503,12 +4500,12 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: dichiarata con l'opzione \const{SO\_RCVBUF}. \end{itemize} -\item[\sysctlrelfile{net/ipv4}{tcp\_sack}] indica al kernel di +\item[\sysctlrelfiled{net/ipv4}{tcp\_sack}] indica al kernel di utilizzare il meccanismo del \textit{TCP selective acknowledgement} definito nell'\href{http://www.ietf.org/rfc/rfc2018.txt}{RFC~2018}. Prende un valore logico e di default è abilitato. -\item[\sysctlrelfile{net/ipv4}{tcp\_stdurg}] indica al kernel di +\item[\sysctlrelfiled{net/ipv4}{tcp\_stdurg}] indica al kernel di utilizzare l'interpretazione che viene data dall'\href{http://www.ietf.org/rfc/rfc1122.txt}{RFC~1122} del puntatore dei \textit{dati urgenti} (vedi sez.~\ref{sec:TCP_urgent_data}) in cui questo @@ -4517,12 +4514,12 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: Prende un valore logico e di default è disabilitato, perché abilitarlo può dar luogo a problemi di interoperabilità. -\item[\sysctlrelfile{net/ipv4}{tcp\_synack\_retries}] indica il numero +\item[\sysctlrelfiled{net/ipv4}{tcp\_synack\_retries}] indica il numero massimo di volte che verrà ritrasmesso il segmento SYN/ACK nella creazione di una connessione (vedi sez.~\ref{sec:TCP_conn_cre}). Prende un valore intero ed il valore di default è 5; non si deve superare il valore massimo di 255. -\item[\sysctlrelfile{net/ipv4}{tcp\_syncookies}] abilita i \textit{TCP +\item[\sysctlrelfiled{net/ipv4}{tcp\_syncookies}] abilita i \textit{TCP syncookies}.\footnote{per poter usare questa funzionalità è necessario avere abilitato l'opzione \texttt{CONFIG\_SYN\_COOKIES} nella compilazione del kernel.} Prende un valore logico, e di default è disabilitato. Questa @@ -4532,18 +4529,18 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: funzionalità come le estensioni e può causare problemi per i client ed il reinoltro dei pacchetti. -\item[\sysctlrelfile{net/ipv4}{tcp\_syn\_retries}] imposta il numero +\item[\sysctlrelfiled{net/ipv4}{tcp\_syn\_retries}] imposta il numero di tentativi di ritrasmissione dei pacchetti SYN di inizio connessione del \itindex{three~way~handshake} \textit{three way handshake} (si ricordi quanto illustrato in sez.~\ref{sec:TCP_func_connect}). Prende un valore intero che di default è 5; non si deve superare il valore massimo di 255. -\item[\sysctlrelfile{net/ipv4}{tcp\_timestamps}] abilita l'uso dei +\item[\sysctlrelfiled{net/ipv4}{tcp\_timestamps}] abilita l'uso dei \textit{TCP timestamps}, come definiti nell'\href{http://www.ietf.org/rfc/rfc1323.txt}{RFC~1323}. Prende un valore logico e di default è abilitato. -\item[\sysctlrelfile{net/ipv4}{tcp\_tw\_recycle}] abilita il +\item[\sysctlrelfiled{net/ipv4}{tcp\_tw\_recycle}] abilita il riutilizzo rapido dei socket in stato \texttt{TIME\_WAIT}. Prende un valore logico e di default è disabilitato. Non è opportuno abilitare questa opzione che può causare problemi con il NAT.\footnote{il \textit{Network Address @@ -4553,11 +4550,11 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: \textit{netfilter}, per maggiori dettagli si consulti il cap.~2 di \cite{FwGL}.} -\item[\sysctlrelfile{net/ipv4}{tcp\_tw\_reuse}] abilita il riutilizzo +\item[\sysctlrelfiled{net/ipv4}{tcp\_tw\_reuse}] abilita il riutilizzo dello stato \texttt{TIME\_WAIT} quando questo è sicuro dal punto di vista del protocollo. Prende un valore logico e di default è disabilitato. -\item[\sysctlrelfile{net/ipv4}{tcp\_window\_scaling}] un valore +\item[\sysctlrelfiled{net/ipv4}{tcp\_window\_scaling}] un valore logico, attivo di default, che abilita la funzionalità del \itindex{TCP~window~scaling} \textit{TCP window scaling} definita dall'\href{http://www.ietf.org/rfc/rfc1323.txt}{RFC~1323}. Prende un valore @@ -4570,13 +4567,13 @@ pagina di manuale (accessibile con \texttt{man 7 tcp}), sono i seguenti: \itindex{TCP~window~scaling} \textit{TCP window scaling} con l'altro capo della connessione non viene effettuata. -%\item[\sysctlrelfile{net/ipv4}{tcp\_vegas\_cong\_avoid}] +%\item[\sysctlrelfiled{net/ipv4}{tcp\_vegas\_cong\_avoid}] % TODO: controllare su internet -%\item[\sysctlrelfile{net/ipv4}{tcp\_westwood}] +%\item[\sysctlrelfiled{net/ipv4}{tcp\_westwood}] % TODO: controllare su internet -\item[\sysctlrelfile{net/ipv4}{tcp\_wmem}] viene usato dallo stack TCP +\item[\sysctlrelfiled{net/ipv4}{tcp\_wmem}] viene usato dallo stack TCP per controllare dinamicamente le dimensioni dei propri buffer di spedizione, adeguandole in rapporto alla memoria disponibile. Prende una tripletta di valori interi separati da spazi che indicano delle dimensioni in byte: diff --git a/system.tex b/system.tex index 2b464a5..ef24ac5 100644 --- a/system.tex +++ b/system.tex @@ -357,7 +357,7 @@ relative spiegazioni, si può trovare nel manuale delle \acr{glibc}. Indica se il sistema supporta i \textit{saved id} (vedi sez.~\ref{sec:proc_access_id}).\\ - \texttt{\_SC\_VERSION} & \const{\_POSIX\_VERSION} & + \texttt{\_SC\_VERSION} & \macro{\_POSIX\_VERSION} & Indica il mese e l'anno di approvazione della revisione dello standard POSIX.1 a cui il sistema fa riferimento, nel formato @@ -654,9 +654,9 @@ fig.~\ref{fig:sys_utsname}, solo se si è definita la macro Come accennato queste stesse informazioni, anche se a differenza di \func{sysctl} la funzione continua ad essere mantenuta, si possono ottenere direttamente tramite il filesystem \file{/proc}, esse infatti sono mantenute -rispettivamente nei file \sysctlrelfile{kernel}{ostype}, -\sysctlrelfile{kernel}{hostname}, \sysctlrelfile{kernel}{osrelease}, -\sysctlrelfile{kernel}{version} e \sysctlrelfile{kernel}{domainname} che si +rispettivamente nei file \sysctlrelfiled{kernel}{ostype}, +\sysctlrelfiled{kernel}{hostname}, \sysctlrelfiled{kernel}{osrelease}, +\sysctlrelfiled{kernel}{version} e \sysctlrelfiled{kernel}{domainname} che si trovano sotto la directory \file{/proc/sys/kernel/}. \index{file!filesystem~\texttt {/proc}!definizione|)} @@ -2019,7 +2019,7 @@ informazioni vengono salvate in formato binario, e corrispondono al contenuto della apposita struttura dati definita all'interno del kernel. Il funzionamento di \func{acct} viene inoltre modificato da uno specifico -parametro di sistema, modificabile attraverso \sysctlfile{kernel/acct} (o +parametro di sistema, modificabile attraverso \sysctlfiled{kernel/acct} (o tramite la corrispondente \func{sysctl}). Esso contiene tre valori interi, il primo indica la percentuale di spazio disco libero sopra il quale viene ripresa una registrazione che era stata sospesa per essere scesi sotto il diff --git a/tcpsock.tex b/tcpsock.tex index 32075ed..9f80a46 100644 --- a/tcpsock.tex +++ b/tcpsock.tex @@ -969,15 +969,14 @@ Per ovviare a questo il significato del \param{backlog} è stato cambiato a indicare la lunghezza della coda delle connessioni complete. La lunghezza della coda delle connessioni incomplete può essere ancora controllata usando la funzione \func{sysctl} con il parametro \const{NET\_TCP\_MAX\_SYN\_BACKLOG} -o scrivendola direttamente in -\sysctlfile{net/ipv4/tcp\_max\_syn\_backlog}. Quando si attiva la -protezione dei syncookies però (con l'opzione da compilare nel kernel e da -attivare usando \sysctlfile{net/ipv4/tcp\_syncookies}) questo valore -viene ignorato e non esiste più un valore massimo. In ogni caso in Linux il -valore di \param{backlog} viene troncato ad un massimo di \const{SOMAXCONN} se -è superiore a detta costante (che di default vale 128).\footnote{il valore di - questa costante può essere controllato con un altro parametro di - \func{sysctl}, vedi sez.~\ref{sec:sock_ioctl_IP}.} +o scrivendola direttamente in \sysctlfile{net/ipv4/tcp\_max\_syn\_backlog}. +Quando si attiva la protezione dei syncookies però (con l'opzione da compilare +nel kernel e da attivare usando \sysctlfile{net/ipv4/tcp\_syncookies}) questo +valore viene ignorato e non esiste più un valore massimo. In ogni caso in +Linux il valore di \param{backlog} viene troncato ad un massimo di +\const{SOMAXCONN} se è superiore a detta costante (che di default vale +128).\footnote{il valore di questa costante può essere controllato con un + altro parametro di \func{sysctl}, vedi sez.~\ref{sec:sock_ioctl_IP}.} La scelta storica per il valore di questo parametro era di 5, e alcuni vecchi kernel non supportavano neanche valori superiori, ma la situazione corrente è @@ -2617,8 +2616,7 @@ successivo, per tentare di ristabilire la connessione. Il risultato finale qui dipende dall'implementazione dello stack TCP, e nel caso di Linux anche dall'impostazione di alcuni dei parametri di sistema che si trovano in \file{/proc/sys/net/ipv4}, che ne controllano il comportamento: -in questo caso in particolare da -\sysctlrelfile{net/ipv4}{tcp\_retries2} (vedi +in questo caso in particolare da \sysctlrelfile{net/ipv4}{tcp\_retries2} (vedi sez.~\ref{sec:sock_ipv4_sysctl}). Questo parametro infatti specifica il numero di volte che deve essere ritentata la ritrasmissione di un pacchetto nel mezzo di una connessione prima di riportare un errore di timeout. Il valore -- 2.30.2