Merge branch 'master' of ssh://gapil.gnulinux.it/srv/git/gapil
[gapil.git] / process.tex
index 9a67fb5ed49c9be4824ae5b75f9b47d283341774..cb1fa55c6d08085c353b156bc01fab9ba1de09c9 100644 (file)
@@ -1,6 +1,6 @@
 %% process.tex
 %%
-%% Copyright (C) 2000-2018 by Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2019 by 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",
@@ -452,7 +452,7 @@ i valori 0 e 1.
 Una forma alternativa per effettuare una terminazione esplicita di un
 programma è quella di chiamare direttamente la \textit{system call}
 \funcd{\_exit},\footnote{la stessa è definita anche come \funcd{\_Exit} in
-  \headfile{stdlib.h}, inoltre a partire dalle \acr{glibc} 2.3 usando questa
+  \headfile{stdlib.h}, inoltre a partire dalla \acr{glibc} 2.3 usando questa
   funzione viene invocata \func{exit\_group} che termina tutti i
   \textit{thread} del processo e non solo quello corrente (fintanto che non si
   usano i \textit{thread}\unavref{, vedi sez.~\ref{cha:threads},} questo non
@@ -522,9 +522,9 @@ opportuna funzione di pulizia da chiamare all'uscita del programma, che non
 deve prendere argomenti e non deve ritornare niente. In sostanza deve la
 funzione di pulizia dovrà essere definita come \code{void function(void)}.
 
-Un'estensione di \func{atexit} è la funzione \funcd{on\_exit}, che le
-\acr{glibc} includono per compatibilità con SunOS ma che non è detto sia
-definita su altri sistemi,\footnote{la funzione è disponibile dalle
+Un'estensione di \func{atexit} è la funzione \funcd{on\_exit}, che la
+\acr{glibc} include per compatibilità con SunOS ma che non è detto sia
+definita su altri sistemi,\footnote{la funzione è disponibile dalla
   \acr{glibc} 2.19 definendo la macro \macro{\_DEFAULT\_SOURCE}, mentre in
   precedenza erano necessarie \macro{\_BSD\_SOURCE} o \macro{\_SVID\_SOURCE};
   non essendo prevista dallo standard POSIX è in generale preferibile evitarne
@@ -744,11 +744,11 @@ riposte nella \textit{swap}.
 
 \itindend{page~fault} 
 
-Normalmente questo è il prezzo da pagare per avere un multitasking reale, ed
-in genere il sistema è molto efficiente in questo lavoro; quando però ci siano
-esigenze specifiche di prestazioni è possibile usare delle funzioni che
-permettono di bloccare il meccanismo della paginazione e mantenere fisse delle
-pagine in memoria (vedi sez.~\ref{sec:proc_mem_lock}).
+Normalmente questo è il prezzo da pagare per avere un \textit{multitasking}
+reale, ed in genere il sistema è molto efficiente in questo lavoro; quando
+però ci siano esigenze specifiche di prestazioni è possibile usare delle
+funzioni che permettono di bloccare il meccanismo della paginazione e
+mantenere fisse delle pagine in memoria (vedi sez.~\ref{sec:proc_mem_lock}).
 
 \index{paginazione|)}
 \index{memoria~virtuale|)}
@@ -966,7 +966,7 @@ in caso di successo e \val{NULL} in caso di fallimento, nel qual caso
 
 In genere si usano \func{malloc} e \func{calloc} per allocare dinamicamente
 un'area di memoria.\footnote{queste funzioni presentano un comportamento
-  diverso fra le \acr{glibc} e le \acr{uClib} quando il valore di \param{size}
+  diverso fra la \acr{glibc} e la \acr{uClib} quando il valore di \param{size}
   è nullo.  Nel primo caso viene comunque restituito un puntatore valido,
   anche se non è chiaro a cosa esso possa fare riferimento, nel secondo caso
   viene restituito \val{NULL}. Il comportamento è analogo con
@@ -1344,6 +1344,11 @@ processo,\footnote{in caso contrario si avrà un errore di \errcode{ENOMEM};
   positivo di grandi dimensioni.}  ma il risultato verrà comunque fornito per
 l'intervallo compreso fino al multiplo successivo.
 
+% TODO: verificare i cambiamenti di sematica con il kernel 5.0 (restrizione
+% solo alle pagine relative al processo stesso) vedi:
+% https://lwn.net/Articles/776034/,
+% https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=574823bfab82d9d8fa47f422778043fbb4b4f50e 
+
 I risultati della funzione vengono forniti nel vettore puntato da \param{vec},
 che deve essere allocato preventivamente e deve essere di dimensione
 sufficiente a contenere tanti byte quante sono le pagine contenute
@@ -1494,13 +1499,14 @@ espressi dalle costanti riportate in tab.~\ref{tab:mlockall_flags}.
 Con \func{mlockall} si possono bloccare tutte le pagine mappate nello spazio
 di indirizzi del processo, sia che comprendano il segmento di testo, di dati,
 lo \textit{stack}, lo \textit{heap} e pure le funzioni di libreria chiamate, i
-file mappati in memoria, i dati del kernel mappati in user space, la memoria
-condivisa.  L'uso dell'argomento \param{flags} permette di selezionare con
-maggior finezza le pagine da bloccare, ad esempio usando \const{MCL\_FUTURE}
-ci si può limitare a tutte le pagine allocate a partire dalla chiamata della
-funzione, mentre \const{MCL\_CURRENT} blocca tutte quelle correntemente
-mappate. L'uso di \func{munlockall} invece sblocca sempre tutte le pagine di
-memoria correntemente mappate nello spazio di indirizzi del programma.
+file mappati in memoria, i dati del kernel mappati in \textit{user space}, la
+memoria condivisa.  L'uso dell'argomento \param{flags} permette di selezionare
+con maggior finezza le pagine da bloccare, ad esempio usando
+\const{MCL\_FUTURE} ci si può limitare a tutte le pagine allocate a partire
+dalla chiamata della funzione, mentre \const{MCL\_CURRENT} blocca tutte quelle
+correntemente mappate. L'uso di \func{munlockall} invece sblocca sempre tutte
+le pagine di memoria correntemente mappate nello spazio di indirizzi del
+programma.
 
 A partire dal kernel 4.4 alla funzione \func{mlockall} è stato aggiunto un
 altro flag, \const{MCL\_ONFAULT}, che può essere abbinato a entrambi gli altri
@@ -1624,12 +1630,12 @@ accada con altre implementazioni.
 Nessuna delle due funzioni ha una chiara standardizzazione e nessuna delle due
 compare in POSIX.1, inoltre ci sono indicazioni discordi sui file che ne
 contengono la definizione;\footnote{secondo SUSv2 \func{valloc} è definita in
-  \headfile{stdlib.h}, mentre sia le \acr{glibc} che le precedenti \acr{libc4}
+  \headfile{stdlib.h}, mentre sia la \acr{glibc} che le precedenti \acr{libc4}
   e \acr{libc5} la dichiarano in \headfile{malloc.h}, lo stesso vale per
   \func{memalign} che in alcuni sistemi è dichiarata in \headfile{stdlib.h}.}
 per questo motivo il loro uso è sconsigliato, essendo state sostituite dalla
 nuova \funcd{posix\_memalign}, che è stata standardizzata in POSIX.1d e
-disponibile dalle \acr{glibc} 2.1.91; il suo prototipo è:
+disponibile dalla \acr{glibc} 2.1.91; il suo prototipo è:
 
 \begin{funcproto}{ 
 \fhead{stdlib.h} 
@@ -1655,7 +1661,7 @@ valore di ritorno il codice di errore.  Come per le precedenti la memoria
 allocata con \func{posix\_memalign} deve essere disallocata con \func{free},
 che in questo caso però è quanto richiesto dallo standard.
 
-Dalla versione 2.16 delle \acr{glibc} è stata aggiunta anche la funzione
+Dalla versione 2.16 della \acr{glibc} è stata aggiunta anche la funzione
 \funcd{aligned\_alloc}, prevista dallo standard C11 (e disponibile definendo
 \const{\_ISOC11\_SOURCE}), il cui prototipo è:
 
@@ -2189,7 +2195,7 @@ sostituendo il relativo puntatore;\footnote{il comportamento è lo stesso delle
   vecchie \acr{libc4} e \acr{libc5}; nella \acr{glibc}, dalla versione 2.0
   alla 2.1.1, veniva invece fatta una copia, seguendo il comportamento di
   BSD4.4; dato che questo può dar luogo a perdite di memoria e non rispetta lo
-  standard il comportamento è stato modificato a partire dalle 2.1.2,
+  standard il comportamento è stato modificato a partire dalla 2.1.2,
   eliminando anche, sempre in conformità a SUSv2, l'attributo \direct{const}
   dal prototipo.}  pertanto ogni cambiamento alla stringa in questione si
 riflette automaticamente sull'ambiente, e quindi si deve evitare di passare a
@@ -2310,7 +2316,7 @@ versione ``\textsl{sicura}'' da zero.
 %\label{sec:proc_opt_extended}
 
 %Oltre alla modalità ordinaria di gestione delle opzioni trattata in
-%sez.~\ref{sec:proc_opt_handling} le \acr{glibc} forniscono una modalità
+%sez.~\ref{sec:proc_opt_handling} la \acr{glibc} fornisce una modalità
 %alternativa costituita dalle cosiddette \textit{long-options}, che consente di
 %esprimere le opzioni in una forma più descrittiva che nel caso più generale è
 %qualcosa del tipo di ``\texttt{-{}-option-name=parameter}''.
@@ -2330,8 +2336,8 @@ Benché questo non sia un libro sul linguaggio C, è opportuno affrontare alcune
 delle problematiche generali che possono emergere nella programmazione con
 questo linguaggio e di quali precauzioni o accorgimenti occorre prendere per
 risolverle. Queste problematiche non sono specifiche di sistemi unix-like o
-multitasking, ma avendo trattato in questo capitolo il comportamento dei
-processi visti come entità a sé stanti, le riportiamo qui.
+\textit{multitasking}, ma avendo trattato in questo capitolo il comportamento
+dei processi visti come entità a sé stanti, le riportiamo qui.
 
 
 \subsection{Il passaggio di variabili e valori di ritorno nelle funzioni}
@@ -2539,8 +2545,7 @@ Dopo l'uso di \macro{va\_end} la variabile \param{ap} diventa indefinita e
 successive chiamate a \macro{va\_arg} non funzioneranno.  Nel caso del
 \cmd{gcc} l'uso di \macro{va\_end} può risultare inutile, ma è comunque
 necessario usarla per chiarezza del codice, per compatibilità con diverse
-implementazioni e per eventuali eventuali modifiche future a questo
-comportamento.
+implementazioni e per eventuali modifiche future a questo comportamento.
 
 Riassumendo la procedura da seguire per effettuare l'estrazione degli
 argomenti di una funzione \textit{variadic} è la seguente:
@@ -2947,9 +2952,9 @@ basterà scegliere una volta per tutte quale usare e attenersi alla scelta.
 % LocalWords:  times library utmp syscall number Filesystem Hierarchy pathname
 % LocalWords:  context assembler sysconf fork Dinamic huge segmentation program
 % LocalWords:  break store using intptr ssize overflow ONFAULT faulting alloc
+%  LocalWords:  scheduler pvalloc aligned ISOC ABCDEF
 
 %%% Local Variables: 
 %%% mode: latex
 %%% TeX-master: "gapil"
 %%% End: 
-%  LocalWords:  scheduler pvalloc aligned ISOC ABCDEF