Reindicizzazioni, si prosegue.
[gapil.git] / system.tex
index ac81bc73d17fb94777a98d4dff58294d4c7e08d3..22f0eb152e054fc8de196c0adb3687404ffa7b3e 100644 (file)
@@ -1,6 +1,6 @@
 %% system.tex
 %%
-%% Copyright (C) 2000-2012 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2015 Simone Piccardi.  Permission is granted to
 %% copy, distribute and/or modify this document under the terms of the GNU Free
 %% Documentation License, Version 1.1 or any later version published by the
 %% Free Software Foundation; with the Invariant Sections being "Un preambolo",
@@ -716,9 +716,9 @@ informazioni degli utenti e dei gruppi per insiemi di macchine e servizi
 all'interno di una stessa organizzazione, in modo da mantenere coerenti i
 dati, ha portato anche alla necessità di poter recuperare e memorizzare dette
 informazioni su supporti diversi dai file citati, introducendo il sistema del
-\itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch} che
-tratteremo brevemente più avanti (in sez.~\ref{sec:sock_resolver}) dato che la
-sua applicazione è cruciale nella procedura di risoluzione di nomi di rete.
+\itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch} (che
+tratteremo brevemente in sez.~\ref{sec:sock_resolver}) dato che la sua
+applicazione è cruciale nella procedura di risoluzione di nomi di rete.
 
 In questo paragrafo ci limiteremo comunque a trattare le funzioni classiche
 per la lettura delle informazioni relative a utenti e gruppi tralasciando
@@ -879,16 +879,16 @@ fig.~\ref{fig:sys_group_struct}.
 
 Le funzioni viste finora sono in grado di leggere le informazioni sia
 direttamente dal file delle password in \conffile{/etc/passwd} che tramite il
-sistema del \itindex{Name~Service~Switch~(NSS)} \textit{Name Service Switch} e
-sono completamente generiche. Si noti però che non c'è una funzione che
-permetta di impostare direttamente una password.\footnote{in realtà questo può
-  essere fatto ricorrendo alle funzioni della libreria PAM, ma questo non è un
-  argomento che tratteremo qui.} Dato che POSIX non prevede questa possibilità
-esiste un'altra interfaccia che lo fa, derivata da SVID le cui funzioni sono
-riportate in tab.~\ref{tab:sys_passwd_func}. Questa interfaccia però funziona
-soltanto quando le informazioni sono mantenute su un apposito file di
-\textsl{registro} di utenti e gruppi, con il formato classico di
-\conffile{/etc/passwd} e \conffile{/etc/group}.
+sistema del \textit{Name Service Switch} e sono completamente generiche. Si
+noti però che non c'è una funzione che permetta di impostare direttamente una
+password.\footnote{in realtà questo può essere fatto ricorrendo alle funzioni
+  della libreria PAM, ma questo non è un argomento che tratteremo qui.} Dato
+che POSIX non prevede questa possibilità esiste un'altra interfaccia che lo
+fa, derivata da SVID le cui funzioni sono riportate in
+tab.~\ref{tab:sys_passwd_func}. Questa interfaccia però funziona soltanto
+quando le informazioni sono mantenute su un apposito file di \textsl{registro}
+di utenti e gruppi, con il formato classico di \conffile{/etc/passwd} e
+\conffile{/etc/group}.
 
 \begin{table}[htb]
   \footnotesize
@@ -1403,11 +1403,23 @@ più in grado di essere eseguito in maniera coerente.  Il secondo valore,
 programmi e dei dispositivi, e viene in genere usato per realizzare la
 cosiddetta ibernazione in RAM.
 
+% TODO: introdotta con il kernel 3.17 è stata introdotta
+% kexec_file_load, per caricare immagine firmate per il secure boot,
+% vedi anche http://lwn.net/Articles/603116/
+
 % TODO documentare keyctl ????
 % (fare sezione dedicata ????)
+
+% TODO documentare la Crypto API del kernel
+
+% TODO documentare la syscall getrandom, introdotta con il kernel 3.17, vedi
+% http://lwn.net/Articles/606141/ 
+
 %\subsection{La gestione delle chiavi crittografiche}
 %\label{sec:keyctl_management}
 
+%TODO non è chiaro se farlo qui, ma documentare la syscall bpf aggiunta con il
+%kernel 3.18, vedi http://lwn.net/Articles/612878/
 
 \section{Il controllo dell'uso delle risorse}
 \label{sec:sys_res_limits}
@@ -1525,11 +1537,11 @@ indicano rispettivamente il tempo impiegato dal processo nell'eseguire le
 istruzioni in \textit{user space}, e quello impiegato dal kernel nelle
 \textit{system call} eseguite per conto del processo (vedi
 sez.~\ref{sec:sys_unix_time}). I campi \var{ru\_minflt} e \var{ru\_majflt}
-servono a quantificare l'uso della memoria virtuale\index{memoria~virtuale} e
-corrispondono rispettivamente al numero di \itindex{page~fault} \textit{page
-  fault} (vedi sez.~\ref{sec:proc_mem_gen}) avvenuti senza richiedere I/O su
-disco (i cosiddetti \textit{minor page fault}), a quelli che invece han
-richiesto I/O su disco (detti invece \textit{major page
+servono a quantificare l'uso della memoria virtuale e corrispondono
+rispettivamente al numero di \textit{page fault} (vedi
+sez.~\ref{sec:proc_mem_gen}) avvenuti senza richiedere I/O su disco (i
+cosiddetti \textit{minor page fault}), a quelli che invece han richiesto I/O
+su disco (detti invece \textit{major page
   fault}).% mentre \var{ru\_nswap} ed al numero di volte che
 % il processo è stato completamente tolto dalla memoria per essere inserito
 % nello swap.
@@ -1638,7 +1650,7 @@ di quest'ultimo.  Nello specificare un limite, oltre a fornire dei valori
 specifici, si può anche usare la costante \const{RLIM\_INFINITY} che permette
 di sbloccare completamente l'uso di una risorsa. Si ricordi però che solo un
 processo con i privilegi di amministratore\footnote{per essere precisi in
-  questo caso quello che serve è la \itindex{capabilities} \textit{capability}
+  questo caso quello che serve è la \textit{capability}
   \const{CAP\_SYS\_RESOURCE} (vedi sez.~\ref{sec:proc_capabilities}).} può
 innalzare un limite al di sopra del valore corrente del limite massimo ed
 usare un valore qualsiasi per entrambi i limiti.
@@ -1783,11 +1795,6 @@ messaggi vuoti che comunque richiede delle risorse di gestione. Questa risorsa
   kernel 2.6.25 per impedire che un processo \textit{real-time} possa bloccare
   il sistema.
 
-% TODO trattare i seguenti...
-% aggiungere i limiti che mancano come RLIMIT_RTTIME introdotto con il 2.6.25
-% vedi file include/asm-generic/resource.h
-
-
 \item[\const{RLIMIT\_SIGPENDING}] Questa risorsa indica il numero massimo di
   segnali che possono essere mantenuti in coda per ciascun utente,
   identificato per \ids{UID} reale. Il limite comprende sia i segnali normali
@@ -1851,8 +1858,8 @@ che sia stata definita la macro \macro{\_GNU\_SOURCE}. Il primo argomento
 indica il \ids{PID} del processo di cui si vogliono cambiare i limiti e si può
 usare un valore nullo per indicare il processo chiamante.  Per modificare i
 limiti di un altro processo, a meno di non avere privilegi
-amministrativi,\footnote{anche in questo caso la \itindex{capabilities}
-  \textit{capability} necessaria è \const{CAP\_SYS\_RESOURCE} (vedi
+amministrativi,\footnote{anche in questo caso la \textit{capability}
+  necessaria è \const{CAP\_SYS\_RESOURCE} (vedi
   sez.~\ref{sec:proc_capabilities}).}  l'\ids{UID} ed il \ids{GID} reale del
 chiamante devono coincidere con \ids{UID} e \ids{GID} del processo indicato
 per i tre gruppi reale, effettivo e salvato.
@@ -1871,14 +1878,13 @@ a \func{getrlimit} e \func{setrlimit}, così come i restanti requisiti.
 
 La gestione della memoria è già stata affrontata in dettaglio in
 sez.~\ref{sec:proc_memory}; abbiamo visto allora che il kernel provvede il
-meccanismo della \index{memoria~virtuale} memoria virtuale attraverso la
-divisione della memoria fisica in pagine.  In genere tutto ciò è del tutto
-trasparente al singolo processo, ma in certi casi, come per l'I/O mappato in
-memoria (vedi sez.~\ref{sec:file_memory_map}) che usa lo stesso meccanismo per
-accedere ai file, è necessario conoscere le dimensioni delle pagine usate dal
-kernel. Lo stesso vale quando si vuole gestire in maniera ottimale
-l'interazione della memoria che si sta allocando con il meccanismo della
-\index{paginazione} paginazione.
+meccanismo della memoria virtuale attraverso la divisione della memoria fisica
+in pagine.  In genere tutto ciò è del tutto trasparente al singolo processo,
+ma in certi casi, come per l'I/O mappato in memoria (vedi
+sez.~\ref{sec:file_memory_map}) che usa lo stesso meccanismo per accedere ai
+file, è necessario conoscere le dimensioni delle pagine usate dal kernel. Lo
+stesso vale quando si vuole gestire in maniera ottimale l'interazione della
+memoria che si sta allocando con il meccanismo della paginazione.
 
 Un tempo la dimensione delle pagine di memoria era fissata una volta per tutte
 dall'architettura hardware, per cui il relativo valore veniva mantenuto in una
@@ -1965,11 +1971,11 @@ Il suo prototipo è:
 \end{funcproto}
 
 La funzione restituisce in ciascun elemento di \param{loadavg} il numero medio
-di processi attivi sulla coda dello \itindex{scheduler} scheduler, calcolato
-su diversi intervalli di tempo.  Il numero di intervalli che si vogliono
-leggere è specificato da \param{nelem}, dato che nel caso di Linux il carico
-viene valutato solo su tre intervalli (corrispondenti a 1, 5 e 15 minuti),
-questo è anche il massimo valore che può essere assegnato a questo argomento.
+di processi attivi sulla coda dello \textit{scheduler}, calcolato su diversi
+intervalli di tempo.  Il numero di intervalli che si vogliono leggere è
+specificato da \param{nelem}, dato che nel caso di Linux il carico viene
+valutato solo su tre intervalli (corrispondenti a 1, 5 e 15 minuti), questo è
+anche il massimo valore che può essere assegnato a questo argomento.
 
 
 \subsection{La \textsl{contabilità} in stile BSD}
@@ -1999,9 +2005,9 @@ prototipo è:
   \begin{errlist}
     \item[\errcode{EACCES}] non si hanno i permessi per accedere a
       \param{pathname}.
+    \item[\errcode{ENOSYS}] il kernel non supporta il \textit{BSD accounting}.
     \item[\errcode{EPERM}] il processo non ha privilegi sufficienti ad
       abilitare il \textit{BSD accounting}.
-    \item[\errcode{ENOSYS}] il kernel non supporta il \textit{BSD accounting}.
     \item[\errcode{EUSERS}] non sono disponibili nel kernel strutture per il
       file o si è finita la memoria.
     \end{errlist}
@@ -2013,7 +2019,7 @@ prototipo è:
 La funzione attiva il salvataggio dei dati sul file indicato dal
 \textit{pathname} contenuti nella stringa puntata da \param{filename}; la
 funzione richiede che il processo abbia i privilegi di amministratore (è
-necessaria la \itindex{capabilities} capability \const{CAP\_SYS\_PACCT}, vedi
+necessaria la \textit{capability} \const{CAP\_SYS\_PACCT}, vedi
 sez.~\ref{sec:proc_capabilities}). Se si specifica il valore \val{NULL} per
 \param{filename} il \textit{BSD accounting} viene invece disabilitato. Un
 semplice esempio per l'uso di questa funzione è riportato nel programma
@@ -2021,10 +2027,9 @@ semplice esempio per l'uso di questa funzione è riportato nel programma
 
 Quando si attiva la contabilità, il file che si indica deve esistere; esso
 verrà aperto in sola scrittura e le informazioni verranno registrate in
-\itindex{append~mode} \textit{append} in coda al file tutte le volte che un
-processo termina. Le informazioni vengono salvate in formato binario, e
-corrispondono al contenuto della apposita struttura dati definita all'interno
-del kernel.
+\textit{append} in coda al file tutte le volte che un processo termina. Le
+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
@@ -2176,9 +2181,10 @@ maniera indipendente usando la costante del kernel \const{USER\_HZ}.
 Fino al kernel 2.6.21 la durata di un \textit{jiffy} costituiva la risoluzione
 massima ottenibile nella misura dei tempi impiegabile in una \textit{system
   call} (ad esempio per i timeout). Con il 2.6.21 e l'introduzione degli
-\textit{high-resolution timers} (HRT) è divenuto possibile ottenere, per le
-funzioni di attesa ed i timer, la massima risoluzione possibile fornita
-dall'hardware. Torneremo su questo in sez.~\ref{sec:sig_timer_adv}.
+\itindex{High~Resolution~Timer~(HRT)} \textit{high-resolution timers} (HRT) è
+divenuto possibile ottenere, per le funzioni di attesa ed i timer, la massima
+risoluzione possibile fornita dall'hardware. Torneremo su questo in
+sez.~\ref{sec:sig_timer_adv}.
 
 
 
@@ -2370,9 +2376,9 @@ sia necessario; il suo prototipo è:
 
 Dato che modificare l'ora ha un impatto su tutto il sistema il cambiamento
 dell'orologio è una operazione privilegiata e questa funzione può essere usata
-solo da un processo con i privilegi di amministratore (per la precisione la la
-\itindex{capabilities} capability \const{CAP\_SYS\_TIME}), altrimenti la
-chiamata fallirà con un errore di \errcode{EPERM}.
+solo da un processo con i privilegi di amministratore (per la precisione la
+\textit{capability} \const{CAP\_SYS\_TIME}), altrimenti la chiamata fallirà
+con un errore di \errcode{EPERM}.
 
 Data la scarsa precisione nell'uso di \type{time\_t}, che ha una risoluzione
 massima di un secondo, quando si devono effettuare operazioni sui tempi di
@@ -2408,10 +2414,9 @@ non dipende dall'uso di queste strutture.
 
 Come nel caso di \func{stime} anche \func{settimeofday} può essere utilizzata
 solo da un processo coi privilegi di amministratore e più precisamente con la
-\itindex{capability} capacità \const{CAP\_SYS\_TIME}. Si tratta comunque di
-una condizione generale che continua a valere per qualunque funzione che vada
-a modificare l'orologio di sistema, comprese tutte quelle che tratteremo in
-seguito.
+capacità \const{CAP\_SYS\_TIME}. Si tratta comunque di una condizione generale
+che continua a valere per qualunque funzione che vada a modificare l'orologio
+di sistema, comprese tutte quelle che tratteremo in seguito.
 
 Il secondo argomento di entrambe le funzioni è una struttura
 \struct{timezone}, che storicamente veniva utilizzata per specificare appunto
@@ -2442,9 +2447,9 @@ usare la funzione \funcd{adjtime}, il cui prototipo è:
 {La funzione ritorna $0$ in caso di successo e $-1$ per un errore, nel qual
   caso \var{errno} assumerà uno dei valori: 
   \begin{errlist}
-  \item[\errcode{EPERM}] il processo non i privilegi di amministratore.
   \item[\errcode{EINVAL}] il valore di \param{delta} eccede il massimo
     consentito.
+  \item[\errcode{EPERM}] il processo non i privilegi di amministratore.
   \end{errlist}
 }  
 \end{funcproto}
@@ -2490,10 +2495,10 @@ regolare anche la velocità e le derive dell'orologio di sistema.  La funzione
   successo e $-1$ per un errore, nel qual caso \var{errno} assumerà uno dei
   valori:
   \begin{errlist}
-  \item[\errcode{EPERM}] si è richiesta una modifica dei parametri ed il
-    processo non ha i privilegi di amministratore.
   \item[\errcode{EINVAL}] si sono indicati valori fuori dall'intervallo
     consentito per qualcuno dei campi di \param{buf}.
+  \item[\errcode{EPERM}] si è richiesta una modifica dei parametri ed il
+    processo non ha i privilegi di amministratore.
   \end{errlist}
   ed inoltre \errval{EFAULT} nel suo significato generico.}
 \end{funcproto}
@@ -2613,9 +2618,9 @@ sintassi specificata per la forma equivalente di questa funzione definita come
 \code{ADJ}.
 
 Si tenga presente infine che con l'introduzione a partire dal kernel 2.6.21
-degli \itindex{high~resolution~timer} \textit{high resolution timer} ed il
-supporto per i cosiddetti POSIX \textit{real-time clock}, si può ottenere il
-\textit{calendar time} direttamente da questi, come vedremo in
+degli \itindex{High~Resolution~Timer~(HRT)} \textit{high-resolution timer} ed
+il supporto per i cosiddetti POSIX \textit{real-time clock}, si può ottenere
+il \textit{calendar time} direttamente da questi, come vedremo in
 sez.~\ref{sec:sig_timer_adv}, con la massima risoluzione possibile per
 l'hardware della macchina.
 
@@ -3124,10 +3129,10 @@ completo del programma è allegato nel file \file{ErrCode.c} e contiene pure la
 gestione delle opzioni e tutte le definizioni necessarie ad associare il
 valore numerico alla costante simbolica. In particolare si è riportata la
 sezione che converte la stringa passata come argomento in un intero
-(\texttt{\small 1--2}), controllando con i valori di ritorno di \funcm{strtol}
-che la conversione sia avvenuta correttamente (\texttt{\small 4--10}), e poi
+(\texttt{\small 1-2}), controllando con i valori di ritorno di \funcm{strtol}
+che la conversione sia avvenuta correttamente (\texttt{\small 4-10}), e poi
 stampa, a seconda dell'opzione scelta il messaggio di errore (\texttt{\small
-  11--14}) o la macro (\texttt{\small 15--17}) associate a quel codice.
+  11-14}) o la macro (\texttt{\small 15-17}) associate a quel codice.