Correzioni varie e riscrittura di parte del capitolo 2
[gapil.git] / process.tex
1 \chapter{L'interfaccia base con i processi}
2 \label{cha:process_interface}
3
4 Come accennato nell'introduzione il processo è l'unità di base con cui un
5 sistema unix-like alloca ed utilizza le risorse.  Questo capitolo tratterà
6 l'interfaccia base fra il sistema e i processi, come vengono passati i
7 parametri, come viene gestita e allocata la memoria, come un processo può
8 richiedere servizi al sistema e cosa deve fare quando ha finito la sua
9 esecuzione. Nella sezione finale accenneremo ad alcune problematiche generiche
10 di programmazione.
11
12 In genere un programma viene eseguito quando un processo lo fa partire
13 eseguendo una funzione della famiglia \func{exec}; torneremo su questo e
14 sulla creazione e gestione dei processi nel prossimo capitolo. In questo
15 affronteremo l'avvio e il funzionamento di un singolo processo partendo dal
16 punto di vista del programma  che viene messo in esecuzione.
17
18
19 \section{Esecuzione e conclusione di un programma}
20
21 Uno dei concetti base di Unix è che un processo esegue sempre uno ed un solo
22 programma: si possono avere più processi che eseguono lo stesso programma ma
23 ciascun processo vedrà la sua copia del codice (in realtà il kernel fa si che
24 tutte le parti uguali siano condivise), avrà un suo spazio di indirizzi,
25 variabili proprie e sarà eseguito in maniera completamente indipendente da
26 tutti gli altri\footnote{questo non è del tutto vero nel caso di un programma
27   \textit{multi-thread}, ma sulla gestione dei \textit{thread} in Linux
28   torneremo più avanti}.
29
30
31 \subsection{La funzione \func{main}} 
32 \label{sec:proc_main}
33
34 Quando un programma viene lanciato il kernel esegue una opportuna routine di
35 avvio, usando il programma \cmd{ld-linux.so}.  Questo programma prima carica
36 le librerie condivise che servono al programma, poi effettua il link dinamico
37 del codice e alla fine lo esegue. Infatti, a meno di non aver specificato il
38 flag \texttt{-static} durante la compilazione, tutti i programmi in Linux sono
39 incompleti e necessitano di essere linkati alle librerie condivise quando
40 vengono avviati.  La procedura è controllata da alcune variabili di ambiente e
41 dal contenuto di \file{/etc/ld.so.conf}. I dettagli sono riportati nella man
42 page di \cmd{ld.so}.
43
44 Il sistema fa partire qualunque programma chiamando la funzione \func{main};
45 sta al programmatore chiamare così la funzione principale del programma da cui
46 si suppone iniziale l'esecuzione; in ogni caso senza questa funzione lo stesso
47 linker darebbe luogo ad errori.
48
49 Lo standard ISO C specifica che la funzione \func{main} può non avere 
50 argomenti o prendere due argomenti che rappresentano gli argomenti passati da
51 linea di comando, in sostanza un prototipo che va sempre bene è il seguente:
52 \begin{lstlisting}[labelstep=0,frame=,indent=1cm]{}
53      int main (int argc, char *argv[])
54 \end{lstlisting}
55
56 In realtà nei sistemi unix esiste un'altro modo per definire la funzione
57 \func{main}, che prevede la presenza di un terzo parametro, \var{char
58   *envp[]}, che fornisce l'\textsl{ambiente} (vedi \secref{sec:proc_environ})
59 del programma; questa forma però non è prevista dallo standard POSIX.1 per cui
60 se si vogliono scrivere programmi portabili è meglio evitarla.
61
62
63 \subsection{Come chiudere un programma}
64 \label{sec:proc_conclusion}
65
66 Normalmente un programma finisce è quando la funzione \func{main} ritorna, una
67 modalità equivalente di concludere il programma è quella di chiamare
68 direttamente la funzione \func{exit} (che viene comunque chiamata
69 automaticamente quando \func{main} ritorna).  Una forma alternativa è quella
70 di chiamare direttamente la system call \func{\_exit}, che restituisce il
71 controllo direttamente alla routine di conclusione dei processi del kernel.
72
73 Oltre alla conclusione ``normale'' esiste anche la possibilità di una
74 conclusione ``anomala'' del programma a causa della ricezione di un segnale
75 (si veda \capref{cha:signals}) o della chiamata alla funzione \func{abort};
76 torneremo su questo in \secref{sec:proc_termination}.
77
78 Il valore di ritorno della funzione \func{main}, o quello usato nelle chiamate
79 ad \func{exit} e \func{\_exit}, viene chiamato \textsl{stato di uscita} (o
80 \textit{exit status}) e passato al processo padre che aveva lanciato il
81 programma (in genere la shell). In generale si usa questo valore per fornire
82 informazioni sulla riuscita o il fallimento del programma; l'informazione è
83 necessariamente generica, ed il valore deve essere compreso fra 0 e 255.
84
85 La convenzione in uso pressoché universale è quella di restituire 0 in caso di
86 successo e 1 in caso di fallimento; l'unica eccezione è per i programmi che
87 effettuano dei confronti (come \cmd{diff}), che usano 0 per indicare la
88 corrispondenza, 1 per indicare la non corrispondenza e 2 per indicare
89 l'incapacità di effettuare il confronto. È opportuno adottare una di queste
90 convenzioni a seconda dei casi.  Si tenga presente che se si raggiunge la fine
91 della funzione \func{main} senza ritornare esplicitamente si ha un valore di
92 uscita indefinito, è pertanto consigliabile di concludere sempre in maniera
93 esplicita detta funzione.
94
95 Una altra convenzione riserva i valori da 128 a 256 per usi speciali: ad
96 esempio 128 viene usato per indicare l'incapacità di eseguire un altro
97 programma in un sottoprocesso. Benché questa convenzione non sia
98 universalmente seguita è una buona idea tenerne conto.
99
100 Si tenga presente inoltre che non è una buona idea usare il codice di errore
101 restituito dalla variabile \var{errno} (per i dettagli si veda
102 \secref{sec:sys_errors}) come stato di uscita. In generale infatti una shell
103 non si cura del valore se non per vedere se è diverso da zero; inoltre il
104 valore dello stato di uscita è sempre troncato ad 8 bit, per cui si potrebbe
105 incorrere nel caso in cui restituendo un codice di errore 256, si otterrebbe
106 uno stato di uscita uguale a zero, che verrebbe interpretato come un successo.
107
108 In \file{stdlib.h} sono definite, seguendo lo standard POSIX, le due macro
109 \macro{EXIT\_SUCCESS} e \macro{EXIT\_FAILURE}, da usare sempre per specificare
110 lo stato di uscita di un processo. In Linux esse sono poste rispettivamente ai
111 valori di tipo \type{int} 0 e 1.
112
113
114 \subsection{Le funzioni \func{exit} e \func{\_exit}}
115 \label{sec:proc_exit}
116
117 Come accennato le funzioni usate per effettuare una uscita ``normale'' da un
118 programma sono due, la prima è la funzione \func{exit} che è definita dallo
119 standard ANSI C; ed il cui prototipo è:
120 \begin{prototype}{stdlib.h}{void exit(int status)}
121   Causa la conclusione ordinaria del programma restituendo il valore
122   \var{status} al processo padre.
123
124   \bodydesc{La funzione non ritorna. Il processo viene terminato.}
125 \end{prototype}
126
127 La funzione \func{exit} è pensata per eseguire una conclusione pulita di un
128 programma che usi le librerie standard del C; essa esegue tutte le funzioni
129 che sono state registrate con \func{atexit} e \func{on\_exit} (vedi
130 \secref{sec:proc_atexit}), e chiude tutti gli stream effettuando il
131 salvataggio dei dati sospesi (chiamando \func{fclose}, vedi
132 \secref{sec:file_fopen}), infine passa il controllo al kernel chiamando
133 \func{\_exit} e passando \param{status} come stato di uscita.
134
135 La system call \func{\_exit} restituisce direttamente il controllo al kernel,
136 concludendo immediatamente il processo; i dati sospesi nei buffer degli stream
137 non vengono salvati e le eventuali funzioni registrate con \func{atexit} e
138 \func{on\_exit} non vengono eseguite. Il prototipo della funzione è:
139 \begin{prototype}{unistd.h}{void \_exit(int status)}
140   Causa la conclusione immediata del programma restituendo \param{status} al
141   processo padre come stato di uscita.
142
143   \bodydesc{La funzione non ritorna. Il processo viene terminato.}
144 \end{prototype}
145
146 La funzione chiude tutti i file descriptor appartenenti al processo (si tenga
147 presente che questo non comporta il salvataggio dei dati bufferizzati degli
148 stream), fa si che ogni figlio del processo sia ereditato da \cmd{init} (vedi
149 \secref{cha:process_handling}), manda un segnale \macro{SIGCHLD} al processo
150 padre (vedi \secref{sec:sig_job_control}) ed infine ritorna lo stato di uscita
151 specificato in \param{status} che può essere raccolto usando la funzione
152 \func{wait} (vedi \secref{sec:proc_wait}).
153
154
155 \subsection{Le funzioni \func{atexit} e \func{on\_exit}}
156 \label{sec:proc_atexit}
157
158 Una esigenza comune che si incontra nella programmazione è quella di dover
159 effettuare una serie di operazioni di pulizia (ad esempio salvare dei dati,
160 ripristinare dei settaggi, eliminare dei file temporanei, ecc.) prima della
161 conclusione di un programma. In genere queste operazioni vengono fatte in una
162 apposita sezione del programma, ma quando si realizza una libreria diventa
163 antipatico dover richiedere una chiamata esplicita ad una funzione di pulizia
164 al programmatore che la utilizza.
165
166 È invece molto meno soggetto ad errori, e completamente trasparente
167 all'utente, avere la possibilità di effettuare automaticamente la chiamata ad
168 una funzione che effettui tali operazioni all'uscita dal programma. A questo
169 scopo lo standard ANSI C prevede la possibilità di registrare un certo numero
170 funzioni che verranno eseguite all'uscita dal programma (sia per la chiamata
171 ad \func{exit} che per il ritorno di \func{main}). La prima funzione che si
172 può utilizzare a tal fine è:
173 \begin{prototype}{stdlib.h}{void atexit(void (*function)(void))}
174   Registra la funzione \param{function} per essere chiamata all'uscita dal
175   programma. 
176   
177   \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
178     fallimento, \var{errno} non viene settata.}
179 \end{prototype}
180 \noindent la funzione richiede come argomento l'indirizzo della opportuna
181 funzione di pulizia da chiamare all'uscita, che non deve prendere argomenti e
182 non deve ritornare niente (deve essere essere cioè definita come \func{void
183   function(void)}).
184
185 Una estensione di \func{atexit} è la funzione \func{on\_exit}, che le
186 \acr{glibc} includono per compatibilità con SunOS, ma che non è detto sia
187 definita su altri sistemi; il suo prototipo è:
188 \begin{prototype}{stdlib.h}
189 {void on\_exit(void (*function)(int status, void *arg), void *arg)}
190   Registra la funzione \param{function} per essere chiamata all'uscita dal
191   programma. Tutte le funzioni registrate vengono chiamate in ordine inverso
192   rispetto a quello di registrazione.
193   
194   \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di
195     fallimento, \var{errno} non viene settata.}
196 \end{prototype}
197
198 In questo caso la funzione da chiamare prende due parametri, il primo dei
199 quali sarà inizializzato allo stato di uscita con cui è stata chiamata
200 \func{exit} ed il secondo al puntatore generico specificato come secondo
201 argomento nella chiamata di \func{on\_exit}. Così diventa possibile passare
202 dei dati alla funzione di chiusura.
203
204 Nella sequenza di chiusura tutte le funzioni registrate verranno chiamate in
205 ordine inverso rispetto a quello di registrazione (ed una stessa funzione
206 registrata più volte sarà chiamata più volte); poi verranno chiusi tutti gli
207 stream aperti, infine verrà chiamata \func{\_exit}.
208
209
210 \subsection{Conclusioni}
211 \label{sec:proc_term_conclusion}
212
213 Data l'importanza dell'argomento è opportuno sottolineare ancora una volta che
214 in un sistema unix l'unico modo in cui un programma può essere eseguito dal
215 kernel è attraverso la chiamata alla system call \func{execve} (o attraverso
216 una delle funzioni della famiglia \func{exec} che vedremo in
217 \secref{sec:proc_exec}).
218
219 Allo stesso modo l'unico modo in cui un programma può concludere
220 volontariamente la sua esecuzione è attraverso una chiamata alla system call
221 \func{\_exit}, o esplicitamente, o in maniera indiretta attraverso l'uso di
222 \func{exit} o il ritorno di \func{main}.
223
224 Uno schema riassuntivo che illustra le modalità con cui si avvia e conclude
225 normalmente un programma è riportato in \nfig.
226
227 \begin{figure}[htb]
228   \centering
229   \includegraphics[width=12cm]{img/proc_beginend}
230   \caption{Schema dell'avvio e della conclusione di un programma.}
231   \label{fig:proc_prog_start_stop}
232 \end{figure}
233
234 Si ricordi infine che un programma può anche essere interrotto dall'esterno
235 attraverso l'uso di un segnale (modalità di conclusione non mostrata in
236 \curfig); torneremo su questo aspetto in \capref{cha:signals}.
237
238
239
240 \section{I processi e l'uso della memoria}
241 \label{sec:proc_memory}
242
243 Una delle risorse base che ciascun processo ha a disposizione è la memoria, e
244 la gestione della memoria è appunto uno degli aspetti più complessi di un
245 sistema unix-like. In questa sezione, dopo una breve introduzione ai concetti
246 base, esamineremo come la memoria viene vista da parte di un programma in
247 esecuzione, e le varie funzioni utilizzabili per la sua gestione.
248
249
250 \subsection{I concetti generali}
251 \label{sec:proc_mem_gen}
252
253 Ci sono vari modi in cui i vari sistemi organizzano la memoria (ed i dettagli
254 di basso livello dipendono spesso in maniera diretta dall'architettura
255 dell'hardware), ma quello più tipico, usato dai sistemi unix-like come Linux è
256 la cosiddetta \textsl{memoria virtuale}m che consiste nell'assegnare ad ogni
257 processo uno spazio virtuale di indirizzamento lineare, in cui gli indirizzi
258 vanno da zero ad un qualche valore massimo\footnote{nel caso di Linux fino al
259   kernel 2.2 detto massimo era, per macchine a 32bit, di 2Gb, con il kernel
260   2.4 ed il supporto per la \textit{high-memory} il limite è stato esteso}.
261
262 Come accennato in \capref{cha:intro_unix} questo spazio di indirizzi è
263 virtuale e non corrisponde all'effettiva posizione dei dati nella RAM del
264 computer; in genere detto spazio non è neppure continuo (cioè non tutti gli
265 indirizzi possibili sono utilizzabili, e quelli usabili non sono
266 necessariamente adiacenti).
267
268 Per la gestione da parte del kernel la memoria virtuale viene divisa in pagine
269 di dimensione fissa (che ad esempio sono di 4kb su macchine a 32 bit e 8kb
270 sulle alpha, valori strettamente connessi all'hardware di gestione della
271 memoria), e ciascuna pagina della memoria virtuale è associata ad un supporto
272 che può essere una pagina di memoria reale o ad un dispositivo di stoccaggio
273 secondario (in genere lo spazio disco riservato alla swap, o i file che
274 contengono il codice).
275
276 Lo stesso pezzo di memoria reale (o di spazio disco) può fare da supporto a
277 diverse pagine di memoria virtuale appartenenti a processi diversi (come
278 accade in genere per le pagine che contengono il codice delle librerie
279 condivise). Ad esempio il codice della funzione \func{printf} starà su una
280 sola pagina di memoria reale che farà da supporto a tutte le pagine di memoria
281 virtuale di tutti i processi hanno detta funzione nel loro codice. 
282
283 La corrispondenza fra le pagine della memoria virtuale e quelle della memoria
284 fisica della macchina viene gestita in maniera trasparente dall'hardware di
285 gestione della memoria (la \textit{Memory Management Unit} del processore).
286 Poiché in genere quest'ultima è solo una piccola frazione della memoria
287 virtuale, è necessario un meccanismo che permetta di trasferire le pagine che
288 servono dal supporto su cui si trovano in memoria, eliminando quelle che non
289 servono. Questo meccanismo è detto \textit{paging}, ed è uno dei compiti
290 principali del kernel.
291
292 Quando un processo cerca di accedere ad una pagina che non è nella memoria
293 reale, avviene quello che viene chiamato un \textit{page fault}; l'hardware di
294 gestione della memoria genera una interruzione e passa il controllo al kernel
295 il quale sospende il processo e si incarica di mettere in RAM la pagina
296 richiesta (effettuando tutte le operazioni necessarie per reperire lo spazio
297 necessario), per poi restituire il controllo al processo.
298
299 Dal punto di vista di un processo questo meccanismo è completamente
300 trasparente, e tutto avviene come se tutte le pagine fossero sempre
301 disponibili in memoria.  L'unica differenza avvertibile è quella dei tempi di
302 esecuzione, che passano dai pochi nanosecondi necessari per l'accesso in RAM,
303 a tempi molto più lunghi, dovuti all'intervento del kernel. 
304
305 Normalmente questo è il prezzo da pagare per avere un multitasking reale, ed
306 in genere il sistema è molto efficiente in questo lavoro; quando però ci siano
307 esigenze specifiche di prestazioni è possibile usare delle funzioni che
308 permettono di bloccare il meccanismo del paging e mantenere fisse delle pagine
309 in memoria (vedi \ref{sec:proc_mem_lock}).
310
311
312 \subsection{La struttura della memoria di un processo}
313 \label{sec:proc_mem_layout}
314
315 Benché lo spazio di indirizzi virtuali copra un intervallo molto ampio, solo
316 una parte di essi è effettivamente allocato ed utilizzabile dal processo; il
317 tentativo di accedere ad un indirizzo non allocato è un tipico errore che si
318 commette quando si è manipolato male un puntatore e genera quello che viene
319 chiamato un \textit{segmentation fault}. Se si tenta cioè di leggere o
320 scrivere da un indirizzo per il quale non esiste una associazione della pagina
321 virtuale il kernel risponde al relativo \textit{page fault}, mandando un
322 segnale \macro{SIGSEGV} al processo, che normalmente ne causa la terminazione
323 immediata.
324
325 È pertanto importante capire come viene strutturata la memoria virtuale di un
326 processo. Essa viene divisa in \textsl{segmenti}, cioè un insieme contiguo di
327 indirizzi virtuali ai quali il processo può accedere. Solitamente un
328 programma C viene suddiviso nei seguenti segmenti:
329
330 \begin{enumerate}
331 \item Il segmento di testo (o \textit{text segment}). Contiene il codice
332   macchina del programma e le costanti statiche. Normalmente viene condiviso, 
333   in modo che più processi (anche diversi nel caso di librerie) possano
334   utilizzarlo, e viene marcato in sola lettura per evitare sovrascritture
335   accidentali (o maliziose) che ne modifichino le istruzioni.
336   
337   Viene allocato da \func{exec} all'avvio del programma e resta invariato
338   per tutto il tempo dell'esecuzione.
339   
340 \item Il segmento dei dati (o \textit{data segment}). Contiene le variabili
341   globali (cioè quelle definite al di fuori di tutte le funzioni). Di norma è
342   diviso in due parti.
343   
344   La prima parte è il segmento dei dati inizializzati, che contiene le
345   variabili globali il cui valore è stato assegnato esplicitamente. Ad esempio
346   se si definisce:
347 \begin{lstlisting}[labelstep=0,frame=,indent=1cm]{}
348     double pi = 3.14;
349 \end{lstlisting}
350   questo valore sarà immagazzinato in questo segmento. La memoria di questo
351   segmento viene preallocato dalla \func{exec} e inizializzata ai valori
352   specificati.
353   
354   La seconda parte è il segmento dei dati non inizializzati, che contiene le
355   variabili globali il cui valore è stato non è assegnato esplicitamente. Ad
356   esempio se si definisce:
357 \begin{lstlisting}[labelstep=0,frame=,indent=1cm]{}
358     int vect[100];
359 \end{lstlisting}
360   questo valore sarà immagazzinato in questo segmento. Anch'esso viene
361   allocato all'avvio, e tutte le variabili vengono inizializzate a
362   zero (ed i puntatori a \macro{NULL}). 
363   
364   Storicamente questo segmento viene chiamato BBS (da \textit{block started by
365     symbol}. La sua dimensione è fissa.
366   
367 \item Lo \textit{heap}. Tecnicamente lo si può considerare l'estensione del
368   segmento dati, a cui di solito è posto giusto di seguito. È qui che avviene
369   l'allocazione dinamica della memoria; può essere ridimensionato allocando e
370   disallocando la memoria dinamica con le apposite funzioni (vedi
371   \secref{sec:proc_mem_alloc}), ma il suo limite inferiore (quello adiacente
372   al segmento dati) ha una posizione fissa.
373   
374 \item Il segmento di \textit{stack}, che contiene lo \textit{stack} del
375   programma.  Tutte le volte che si effettua una chiamata ad una funzione è
376   qui che viene salvato l'indirizzo di ritorno e le informazioni dello stato
377   del chiamante (tipo il contenuto di alcuni registri della CPU). Poi la
378   funzione chiamata alloca qui lo spazio per le sue variabili locali: in
379   questo modo le funzioni possono essere chiamate ricorsivamente. Al ritorno
380   della funzione lo spazio è automaticamente rilasciato.
381   
382   La dimensione di questo segmento aumenta seguendo la crescita dello stack
383   del programma, ma non viene ridotta quando quest'ultimo si restringe.
384 \end{enumerate}
385
386 \begin{figure}[htb]
387   \centering
388   \includegraphics[width=5cm]{img/memory_layout}
389   \caption{Disposizione tipica dei segmenti di memoria di un processo}
390   \label{fig:proc_mem_layout}
391 \end{figure}
392
393 Una disposizione tipica di questi segmenti è riportata in
394 \figref{fig:proc_mem_layout}. Usando il comando \cmd{size} su un programma se
395 ne può stampare le dimensioni dei segmenti di testo e di dati (inizializzati e
396 BSS); il BSS però non è mai salvato sul file, in quanto viene inizializzato a
397 zero al caricamento del programma.
398
399
400 \subsection{Allocazione della memoria per i programmi C}
401 \label{sec:proc_mem_alloc}
402
403 Il C supporta due tipi di allocazione della memoria, l'allocazione statica è
404 quella in cui vanno le variabili globali e le variabili statiche (e viene
405 effettuata nel segmento dei dati), lo spazio per queste variabili viene
406 allocati all'avvio del programma (come parte delle operazioni svolte da
407 \func{exec}) e non viene liberato fino alla sua conclusione.
408
409 L'allocazione automatica è quella che avviene per le cosiddette variabili
410 automatiche, cioè gli argomenti delle funzioni o le variabili locali. Lo
411 spazio per queste variabili viene allocato nello stack quando viene eseguito
412 comando di invocazione della funzione e liberato quando si esce dalla
413 medesima.
414
415 Esiste però un terzo tipo di allocazione, che non è prevista dal linguaggio C,
416 che è l'allocazione dinamica della memoria, necessaria quando il quantitativo
417 di memoria che serve è determinabile solo in corso di esecuzione del
418 programma. 
419
420 Il C non consente di usare variabili allocate dinamicamente, non è possibile
421 cioè definire in fase di programmazione una variabile le cui dimensioni
422 possano essere modificate durante l'esecuzione del programma; però le librerie
423 del C forniscono una serie opportuna di funzioni per permettere l'allocazione
424 dinamica di spazio in memoria (in genere nello heap, usando la system call
425 \func{sbrk}), solo che a questo punto detto spazio sarà accessibile solo in
426 maniera indiretta attraverso dei puntatori.
427
428
429 \subsection{Le funzioni \func{malloc}, \func{calloc}, \func{realloc} e
430   \func{free}}
431 \label{sec:proc_mem_malloc}
432
433 Le funzioni previste dallo standard ANSI C per la gestione della memoria sono
434 quattro, i prototipi sono i seguenti:
435 \begin{functions}
436 \headdecl{stdlib.h}
437 \funcdecl{void *calloc(size\_t size)}
438   Alloca \var{size} byte nello heap. La memoria viene inizializzata a 0.
439   
440   La funzione restituisce il puntatore alla zona di memoria allocata in caso
441   di successo e \macro{NULL} in caso di fallimento, nel qual caso
442   \var{errno} viene settata a \macro{ENOMEM}.
443 \funcdecl{void *malloc(size\_t size)}
444   Alloca \var{size} byte nello heap. La memoria non viene inizializzata.
445
446   La funzione restituisce il puntatore alla zona di memoria allocata in caso
447   di successo e \macro{NULL} in caso di fallimento, nel qual caso
448   \var{errno} viene settata a \macro{ENOMEM}.
449 \funcdecl{void *realloc(void *ptr, size\_t size)}
450   Cambia la dimensione del blocco allocato all'indirizzo \var{ptr}
451   portandola a \var{size}.
452
453   La funzione restituisce il puntatore alla zona di memoria allocata in caso
454   di successo e \macro{NULL} in caso di fallimento, nel qual caso
455   \var{errno} viene settata a \macro{ENOMEM}.
456 \funcdecl{void free(void *ptr)}
457   Disalloca lo spazio di memoria puntato da \var{ptr}.
458
459   La funzione non ritorna nulla e non riporta errori.
460 \end{functions}
461 Il puntatore che le funzioni di allocazione ritornano è garantito essere
462 sempre correttamente allineato per tutti i tipi di dati; ad esempio sulle
463 macchine a 32 bit in genere è allineato a multipli di 4 byte e sulle macchine
464 a 64 bit a multipli di 8 byte. 
465
466 In genere su usano le funzioni \func{malloc} e \func{calloc} per allocare
467 dinamicamente la memoria necessaria al programma, siccome i puntatori
468 ritornati sono di tipo generico non è necessario effettuare un cast per
469 assegnarli a puntatori al tipo di variabile per la quale si effettua la
470 allocazione.
471
472 La memoria allocata dinamicamente deve essere esplicitamente rilasciata usando
473 \func{free}\footnote{le glibc provvedono anche una funzione \func{cfree}
474   definita per compatibilità con SunOS, che è deprecata} una volta che non
475 sia più necessaria. Questa funzione vuole come parametro un puntatore
476 restituito da una precedente chiamata a una qualunque delle funzioni di
477 allocazione e che non sia già stato liberato da un'altra chiamata a
478 \func{free}, in caso contrario il comportamento della funzione è indefinito.
479
480 La funzione \func{realloc} si usa invece per cambiare (in genere aumentare)
481 la dimensione di un'area di memoria precedentemente allocata, la funzione
482 vuole in ingresso il puntatore restituito dalla precedente chiamata ad una
483 \func{malloc} (se è passato un valore \macro{NULL} allora la funzione si
484 comporta come \func{malloc}\footnote{questo è vero per Linux e
485   l'implementazione secondo lo standard ANSI C, ma non è vero per alcune
486   vecchie implementazioni, inoltre alcune versioni delle librerie del C
487   consentivano di usare \func{realloc} anche per un puntatore liberato con
488   \func{free} purché non ci fossero state altre chiamate a funzioni di
489   allocazione, questa funzionalità è totalmente deprecata e non è consentita
490   sotto Linux}), ad esempio quando si deve far crescere la dimensione di un
491 vettore; in questo caso se è disponibile dello spazio adiacente al precedente
492 la funzione lo utilizza, altrimenti rialloca altrove un blocco della dimensione
493 voluta copiandoci automaticamente il contenuto, lo spazio aggiunto non viene
494 inizializzato. 
495
496 Si deve sempre avere ben presente il fatto che il blocco di memoria restituito
497 da \func{realloc} può non essere una estensione di quello che gli si è passato
498 come parametro; pertanto esso deve essere trattato allo stesso modo di una
499 nuova allocazione; in particolare si dovrà \emph{sempre} eseguire la
500 riassegnazione di \var{ptr} al valore di ritorno della funzione, e
501 reinizializzare (o provvedere ad un adeguato aggiornamento qualora ancora
502 servano) tutti gli altri puntatori al blocco di dati ridimensionato.
503
504 Uno degli errori più comuni (specie se si ha a che fare con array di
505 puntatori) è infatti quello di chiamare \func{free} più di una volta sullo
506 stesso puntatore; per evitare questo problema una soluzione di ripiego è
507 quella di assegnare sempre a \macro{NULL} ogni puntatore liberato con
508 \func{free}, dato che, quando il parametro è un puntatore nullo,
509 \func{free} non esegue nessuna operazione. 
510
511 Linux e le glibc hanno una implementazione delle routine di allocazione che è
512 controllabile dall'utente attraverso alcune variabili di ambiente, in
513 particolare diventa possibile tracciare questo tipo di errori usando la
514 variabile \macro{MALLOC\_CHECK\_} che quando viene settata mette in uso una
515 versione meno efficiente delle funzioni, che però è più tollerante nei
516 confronti di piccoli errori come quello di chiamate doppie a \func{free}; in
517 particolare:
518 \begin{itemize*}
519 \item se la variabile è posta a zero gli errori vengono ignorati.
520 \item se è posta ad 1 viene stampato un avviso sullo \textit{standard error}
521   (vedi \secref{sec:file_std_stream}).
522 \item se è posta a 2 viene chiamata \func{abort}, che in genere causa
523   l'immediata conclusione del programma.
524 \end{itemize*}
525
526 Il problema più comune e più difficile da tracciare che si incontra con
527 l'allocazione della memoria è però quando la memoria non più utilizzata non
528 viene opportunamente liberata (quello che in inglese viene chiamato
529 \textit{memory-leak}, traducibile come \textsl{perdita di memoria}).
530
531 Un caso tipico è quando l'allocazione viene fatta da una subroutine per un uso
532 locale, ma la memoria non viene liberata una volta usata; chiamate ripetute
533 alla stessa subroutine causeranno a lungo andare un esaurimento della memoria
534 disponibile, con un conseguente crash dell'applicazione che può avvenire in
535 qualunque momento, e senza nessuna relazione con la subroutine che contiene
536 l'errore.
537
538 Per questo motivo l'implementazione delle routine di allocazione delle glibc
539 mette a disposizione una serie di funzionalità (su cui torneremo in
540 \secref{sec:xxx_advanced}) che permettono di tracciare le allocazioni e
541 le disallocazione, e definisce anche una serie di possibili agganci che
542 permettono di sostituire alle funzioni di libreria una propria versione (che
543 può essere più o meno specializzata per il debugging).
544
545
546 \subsection{La funzione \func{alloca}}  
547 \label{sec:proc_mem_alloca}
548
549 Una alternativa possibile all'uso di \func{malloc}, che non soffre del tipo
550 di problemi di memory leak descritti in precedenza è la funzione
551 \func{alloca} che invece che allocare la memoria nello heap usa lo il
552 segmento di stack della funzione corrente. La sintassi è identica:
553 \begin{prototype}{stdlib.h}{void *alloca(size\_t size)}
554   Alloca \var{size} byte nel segmento di stack della funzione chiamante.
555   La memoria non viene inizializzata.
556
557   La funzione restituisce il puntatore alla zona di memoria allocata in caso
558   di successo e \macro{NULL} in caso di fallimento, nel qual caso
559   \var{errno} viene settata a \macro{ENOMEM}.
560 \end{prototype}
561 \noindent ma in questo caso non è più necessario liberare la memoria in quanto
562 questa viene rilasciata automaticamente al ritorno della funzione.
563
564 Come è evidente questa funzione ha molti vantaggi, e permette di evitare i
565 problemi di memory leak non essendo più necessaria la deallocazione esplicita;
566 una delle ragioni principali per usarla è però che funziona anche quando si
567 usa \func{longjmp} per uscire con un salto non locale da una funzione (vedi
568 \secref{sec:proc_longjmp}),
569
570 Un altro vantaggio e che in Linux la funzione è molto veloce e non viene
571 sprecato spazio, infatti non è necessario gestire un pool di memoria da
572 riservare e si evitano anche i problemi di frammentazione di quest'ultimo che
573 comportano inefficienze sia nell'allocazione della memoria che nell'esecuzione
574 della funzione.
575
576 Gli svantaggi sono che questa funzione non è disponibile su tutti gli unix,
577 (quando non è possibile aumentare le dimensioni dello stack una volta chiamata
578 una funzione) e quindi l'uso limita la portabilità dei programmi, inoltre se
579 si cerca di allocare troppa memoria non si ottiene un messaggio di errore, ma
580 un segnale di \textit{segment violation} analogo a quello che si avrebbe da
581 una ricorsione infinita.
582
583 Inoltre non è chiaramente possibile usare questa funzione per allocare memoria
584 che deve poi essere usata anche al di fuori della funzione in cui questa viene
585 chiamata, in quanto all'uscita dalla funzione lo spazio allocato diventerebbe
586 libero, e potrebbe essere sovrascritto all'invocazione di nuove funzioni con
587 conseguenze imprevedibili. Questo è lo stesso problema potenziale che si può
588 avere con le variabili automatiche, su cui torneremo in
589 \secref{sec:proc_auto_var}.
590
591
592 \subsection{Le funzioni \func{brk} e \func{sbrk}}  
593 \label{sec:proc_mem_sbrk}
594
595 L'uso di queste funzioni è necessario solo quando si voglia accedere alle
596 analoghe system call a cui fanno da interfaccia (ad esempio per implementare
597 una propria versione di \func{malloc}. Le funzioni sono:
598 \begin{functions}
599   \headdecl{unistd.h}
600   \funcdecl{int brk(void *end\_data\_segment)}
601   Sposta la fine del segmento dei dati all'indirizzo specificato da
602   \var{end\_data\_segment}.
603   
604   La funzione restituisce 0 in caso di successo e -1 in caso di
605     fallimento, nel qual caso \var{errno} viene settata a \macro{ENOMEM}.
606
607   \funcdecl{void *sbrk(ptrdiff\_t increment)} Incrementa lo spazio dati di un
608   programma di \var{increment}. Un valore zero restituisce l'attuale posizione
609   della fine del segmento dati.
610   
611   La funzione restituisce il puntatore all'inizio della nuova zona di memoria
612   allocata in caso di successo e \macro{NULL} in caso di fallimento, nel qual
613   caso \macro{errno} viene settata a \macro{ENOMEM}.
614 \end{functions}
615
616 Queste funzioni sono state deliberatamente escluse dallo standard POSIX.1 e
617 per i programmi normali è opportuno usare le funzioni di allocazione standard
618 descritte in precedenza, che sono costruite su di esse.  In genere si usa
619 \func{sbrk} con un valore zero per ottenere l'attuale posizione della fine
620 del segmento dati. 
621
622
623 % \subsection{La personalizzazione delle funzioni di allocazione} 
624 % \label{sec:proc_mem_malloc_custom}
625
626
627 \subsection{Il controllo della memoria virtuale}  
628 \label{sec:proc_mem_lock}
629
630 Come spiegato in \secref{sec:proc_mem_gen} il kernel gestisce la memoria in
631 maniera trasparente ai processi, decidendo quando rimuovere pagine dalla
632 memoria per metterle nello swap sulla base dell'utilizzo corrente da parte dei
633 vari processi. 
634
635 Nell'uso comune un processo non deve preoccuparsi di tutto ciò, in quanto il
636 meccanismo della paginazione riporta in RAM, ed in maniera trasparente, tutte
637 le pagine che gli occorrono; esistono però esigenze particolari in cui non si
638 vuole che si attivi il meccanismo dello \textit{swapping}, in generale i
639 motivi per cui si possono avere queste necessità sono sostanzialmente due:
640 \begin{itemize}
641 \item La velocità. Il processo della paginazione è trasparente solo se il
642   programma in esecuzione se non è sensibile al tempo che occorre a riportare
643   la pagina in memoria; per questo motivi processi critici che hanno esigenze
644   di tempo reale o tolleranze critiche nella risposte (ad esempio processi che
645   trattano campionamenti sonori) possono non essere in grado di sopportare
646   le variazioni della velocità di accesso dovuta alla paginazione.
647
648   In certi casi poi un programmatore può conoscere meglio dell'algoritmo di
649   allocazione delle pagine le esigenze specifiche del suo programma e decidere
650   quali pagine di memoria è opportuno che restino in memoria per un aumento
651   delle prestazioni. In genere queste sono esigenze particolari e richiedono
652   anche un aumento delle priorità in esecuzione (vedi \secref{sec:xxx_xxx}).
653   
654 \item La sicurezza. Se si tengono password o chiavi in memoria queste possono
655   essere portate su disco dal meccanismo della paginazione, questo rende più
656   lungo il periodo di tempo in cui i segreti sono presenti in chiaro e più
657   complessa la loro cancellazione (ad un processo è possibile cancellare la
658   memoria su cui scrive le sue variabili, ma non può toccare lo spazio disco
659   su cui la pagina contenente i segreti può essere stata salvata). Per questo
660   motivo di solito i programmi di crittografia richiedono il blocco di alcune
661   pagine di memoria.
662 \end{itemize}
663
664 Il meccanismo che previene la paginazione di parte della memoria virtuale di
665 un processo è chiamato \textit{memory locking} (blocco della memoria), il
666 blocco è sempre associato alle pagine della memoria virtuale del processo, non
667 con il segmento reale di RAM su cui essa viene mantenuta.
668
669 La regola è che se un segmento di RAM fa da supporto ad almeno una pagina
670 bloccata allora esso viene escluso dal meccanismo della paginazione. I blocchi
671 non si accumulano, se si blocca due volte la stessa pagina non è necessario
672 sbloccarla due volte, una pagina o è bloccata o no.
673
674 Il \textit{memory lock} persiste fintanto che il processo che detiene la
675 memoria bloccata non la sblocca. Chiaramente la terminazione del processo
676 comporta anche la fine dell'uso della sua memoria virtuale, e quindi anche di
677 tutti i suoi \textit{memory lock}.
678
679 I \textit{memory lock} non sono ereditati dai processi figli\footnote{ma
680   siccome Linux usa il copy on write gli indirizzi virtuali del figlio sono
681   mantenuti sullo stesso segmento di RAM del padre, quindi fintanto che un
682   figlio non scrive su un segmento, può usufruire dei memory lock del padre}.
683 Siccome la presenza di un \textit{memory lock} riduce la memoria disponibile
684 al sistema con un impatto su tutti gli altri processi, solo l'amministratore ha
685 la capacità di bloccare una pagina. Ogni processo però può sbloccare le sue
686 pagine. 
687
688
689 Il sistema pone dei limiti all'ammontare di memoria di un processo che può
690 essere bloccata e al totale di memoria fisica che può dedicare a questo, lo
691 standard POSIX.1 richiede che sia definita in \file{unistd.h} la costante
692 \macro{\_POSIX\_MEMLOCK\_RANGE} per indicare la capacità di eseguire il
693 \textit{memory locking} e la costante \macro{PAGESIZE} in \file{limits.h} per
694 indicare la dimensione di una pagina in byte.
695
696
697 Le funzioni per bloccare e sbloccare singole sezioni di memoria sono
698 \func{mlock} e \func{munlock}; i loro prototipi sono:
699 \begin{functions}
700   \headdecl{sys/mman.h} 
701
702   \funcdecl{int mlock(const void *addr, size\_t len)}
703   Blocca la paginazione per l'intervallo di memoria da \var{addr} per
704   \var{len} byte. Tutte le pagine che contengono una parte dell'intervallo
705   sono mantenute in RAM per tutta la durata del blocco.
706
707   \funcdecl{int munlock(const void *addr, size\_t len)}
708   Sblocca l'intervallo di memoria da \var{addr} per \var{len} byte.  
709
710   
711   \bodydesc{Entrambe le funzioni ritornano 0 in caso di successo e -1 in
712     caso di errore, nel qual caso \var{errno} è settata ad uno dei
713     valori seguenti:
714   \begin{errlist}
715   \item[\macro{ENOMEM}] alcuni indirizzi dell'intervallo specificato non
716     corrispondono allo spazio di indirizzi del processo o si è ecceduto
717     il numero massimo consentito di pagine bloccate.
718   \item[\macro{EINVAL}] \var{len} non è un valore positivo.
719   \end{errlist}
720   e, per \func{mlock}, anche \macro{EPERM} quando il processo non ha i
721   privilegi richiesti per l'operazione.}
722 \end{functions}
723
724 Altre due funzioni, \func{mlockall} e \func{munlockall}, consentono di
725 bloccare genericamente lo spazio di indirizzi di un processo.  I prototipi di
726 queste funzioni sono:
727
728 \begin{functions}
729   \headdecl{sys/mman.h} 
730
731   \funcdecl{int mlockall(int flags)}
732   Blocca la paginazione per lo spazio di indirizzi del processo corrente. 
733   
734   \funcdecl{int munlockall(void)}
735   Sblocca la paginazione per lo spazio di indirizzi del processo corrente. 
736   
737   \bodydesc{Codici di ritorno ed errori sono gli stessi di \func{mlock}
738     e \func{munlock}.}
739 \end{functions}
740
741 Il parametro \var{flags} di \func{mlockall} permette di controllarne il
742 comportamento; esso può essere specificato come l'OR aritmetico delle due
743 costanti: 
744 \begin{basedescript}{\desclabelwidth{2.5cm}}
745 \item[\macro{MCL\_CURRENT}] blocca tutte le pagine correntemente mappate nello
746   spazio di indirizzi del processo.
747 \item[\macro{MCL\_FUTURE}] blocca tutte le pagine che saranno mappate nello
748   spazio di indirizzi del processo.
749 \end{basedescript}
750
751 Con \func{mlockall} si può bloccare tutte le pagine mappate nello spazio di
752 indirizzi del processo, sia che comprendano il segmento di testi, di dati, lo
753 stack e lo heap e pure le funzioni di libreria chiamate, i file mappati in
754 memoria, i dati del kernel mappati in user space, la memoria condivisa.  L'uso
755 dei flag permette di selezionare con maggior finezza le pagine da bloccare, ad
756 esempio limitandosi a tutte le pagine allocate a partire da un certo momento.
757
758 In ogni caso un processo real-time che deve entrare in una sezione critica
759 deve provvedere a riservare memoria sufficiente prima dell'ingresso, in genere
760 questo si fa chiamando una funzione che ha allocato una quantità sufficiente
761 ampia di variabili automatiche, in modo che esse vengano mappate in RAM dallo
762 stack e poi ci scrive sopra, per scongiurare in partenza un eventuale page
763 fault causato dal meccanismo di copy on write.
764
765
766 \section{La gestione di parametri e opzioni}
767 \label{sec:proc_options}
768
769 Il passaggio dei parametri e delle variabili di ambiente dalla riga di comando
770 al singolo programma quando viene lanciato è effettuato attraverso le
771 variabili \var{argc}, \var{argv} che vengono passate al programma
772 come argomenti della funzione principale.
773
774 \subsection{Il formato dei parametri}
775 \label{sec:proc_par_format}
776 In genere passaggio dei parametri al programma viene effettuato dalla shell,
777 che si incarica di leggere la linea di comando e di effettuarne la scansione
778 (il cosiddetto \textit{parsing}) per individuare le parole che la compongono,
779 ciascuna delle quali viene considerata un parametro; di default per
780 individuare le parole viene usato come separatore lo spazio (comportamento
781 modificabile attraverso il settaggio della variabile di ambiente IFS).
782
783 Nella scansione viene costruito il vettore di puntatori \var{argv} inserendo
784 in successione il puntatore alla stringa costituente l'$n$-simo parametro; la
785 variabile \var{argc} viene inizializzata al numero di parametri trovati, in
786 questo modo il primo parametro è sempre il nome del programma (vedi \nfig).
787
788 \subsection{La gestione delle opzioni}
789 \label{sec:proc_opt_handling}
790
791 In generale un programma unix riceve da linea di comando sia gli argomenti che
792 le opzioni, queste ultime sono standardizzate per essere riconosciute come
793 tali: un elemento di \var{argv} che inizia con \texttt{-} e che non sia un
794 singolo \texttt{-} o \texttt{--} viene considerato un'opzione.  In in genere
795 le opzioni sono costituite da una lettera preceduta dal meno e possono avere o
796 no un parametro associato; un comando tipico può essere cioè qualcosa del
797 tipo:
798 \begin{verbatim}
799 touch -r riferimento.txt -m questofile.txt
800 \end{verbatim}
801 ed in questo caso le opzioni sono \texttt{m} ed \texttt{r}.
802
803 Per gestire le opzioni all'interno dei argomenti a linea di comando passati in
804 \func{argv} le librerie standard del C forniscono la funzione \func{getopt}
805 che ha il seguente prototipo:
806 \begin{prototype}{unistd.h}
807 {int getopt(int argc, char * const argv[], const char * optstring)}
808 Esegue il parsing degli argomenti passati da linea di comando
809 riconoscendo le possibili opzioni segnalate con \var{optstring}.
810
811 \bodydesc{Ritorna il carattere che segue l'opzione, \cmd{':'} se manca un
812   parametro all'opzione, \cmd{'?'} se l'opzione è sconosciuta, e -1 se non
813   esistono altre opzioni.}
814 \end{prototype}
815
816 Questa funzione prende come argomenti le due variabili \var{argc} e \var{argv}
817 passate a \func{main} (vedi \secref{sec:proc_main}) ed una stringa che indica
818 quali sono le opzioni valide; la funzione effettua la scansione della lista
819 degli argomenti ricercando ogni stringa che comincia con \cmd{-} e ritorna ogni
820 volta che trova una opzione valida.
821
822 La stringa \var{optstring} indica quali sono le opzioni riconosciute ed è
823 costituita da tutti i caratteri usati per identificare le singole opzioni, se
824 l'opzione ha un parametro al carattere deve essere fatto seguire un segno di
825 due punti \var{':'}, nel caso appena accennato ad esempio la stringa di
826 opzioni sarebbe \var{"r:m"}.
827
828 La modalità di uso di \func{getopt} è pertanto quella di chiamare più volte la
829 funzione all'interno di un ciclo fintanto che essa non ritorna il valore -1
830 che indica che non ci sono più opzioni. Nel caso si incontri un'opzione non
831 dichiarata in \var{optstring} viene ritornato il carattere \texttt{'?'}
832 mentre se un opzione che lo richiede non è seguita da un parametro viene
833 ritornato il carattere \texttt{':'}, infine se viene incontrato il valore
834 \cmd{--} la scansione viene considerata conclusa, anche se vi sono altri
835 elementi di \var{argv} che cominciano con il carattere \texttt{'-'}.
836
837 \begin{figure}[htb]
838   \footnotesize
839     \begin{lstlisting}{}
840     opterr = 0;  /* don't want writing to stderr */
841     while ( (i = getopt(argc, argv, "hp:c:e:")) != -1) {
842         switch (i) {
843         /* 
844          * Handling options 
845          */ 
846         case 'h':   /* help option */
847             printf("Wrong -h option use\n");
848             usage();
849             return -1;
850             break;
851         case 'c':   /* take wait time for childen */
852             wait_child = strtol(optarg, NULL, 10);    /* convert input */
853             break;
854         case 'p':   /* take wait time for childen */
855             wait_parent = strtol(optarg, NULL, 10);   /* convert input */
856             break;
857         case 'e':   /* take wait before parent exit */
858             wait_end = strtol(optarg, NULL, 10);      /* convert input */
859             break;
860         case '?':   /* unrecognized options */
861             printf("Unrecognized options -%c\n",optopt);
862             usage();
863         default:    /* should not reached */
864             usage();
865         }
866     }
867     debug("Optind %d, argc %d\n",optind,argc);
868   \end{lstlisting}
869   \caption{Esempio di codice per la gestione delle opzioni.}
870   \label{fig:proc_options_code}
871 \end{figure}
872
873 Quando la funzione trova un'opzione essa ritorna il valore numerico del
874 carattere, in questo modo si possono prendere le azioni relative usando uno
875 \func{switch}; la funzione inizializza inoltre alcune variabili globali:
876 \begin{itemize*}
877 \item \var{char * optarg} contiene il puntatore alla stringa parametro
878   dell'opzione.
879 \item \var{int optind} alla fine della scansione restituisce l'indice del
880   primo elemento di \var{argv} che non è un'opzione.
881 \item \var{int opterr} previene, se posto a zero, la stampa di un messaggio
882   di errore in caso di riconoscimento di opzioni non definite.
883 \item \var{int optopt} contiene il carattere dell'opzione non riconosciuta.
884 \end{itemize*}
885
886 In \figref{fig:proc_options_code} è mostrata la sezione del programma
887 \file{ForkTest.c} (che useremo nel prossimo capitolo per effettuare dei test
888 sulla creazione dei processi) deputata alla decodifica delle opzioni a riga di
889 comando. 
890
891 Anzitutto si può notare che si è anzitutto (\texttt{\small 1}) disabilitata la
892 stampa di messaggi di errore per opzioni non riconosciute, per poi passare al
893 ciclo per la verifica delle opzioni (\texttt{\small 2-27}); per ciascuna delle
894 opzioni possibili si è poi provveduto ad una opportuna azione, ad esempio per
895 le tre opzioni che prevedono un parametro si è effettuata la decodifica del
896 medesimo, il cui indirizzo è contenuto nella variabile \var{optarg},
897 avvalorando la relativa variabile (\texttt{\small 12-14}, \texttt{\small
898   15-17} e \texttt{\small 18-20}). Completato il ciclo troveremo in
899 \var{optind} l'indice in \var{argv[]} del primo degli argomenti a linea di
900 comando restanti.
901
902 Normalmente \func{getopt} compie una permutazione degli elementi di \var{argv}
903 così che alla fine della scansione gli elementi che non sono opzioni sono
904 spostati in coda al vettore. Oltre a questa esistono altre due modalità di
905 gestire gli elementi di \var{argv}; se \var{optstring} inizia con il carattere
906 \texttt{'+'} (o è settata la variabile di ambiente \macro{POSIXLY\_CORRECT})
907 la scansione viene fermata non appena si incontra un elemento che non è
908 un'opzione. L'ultima modalità, usata quando un programma può gestire la
909 mescolanza fra opzioni e argomenti, ma se li aspetta in un ordine definito, si
910 attiva quando \var{optstring} inizia con il carattere \texttt{'-'}. In questo
911 caso ogni elemento che non è un'opzione viene considerato comunque un'opzione
912 e associato ad un valore di ritorno pari ad 1, questo permette di identificare
913 gli elementi che non sono opzioni, ma non effettua il riordinamento del
914 vettore \var{argv}.
915
916
917 \subsection{Opzioni in formato esteso}
918 \label{sec:proc_opt_extended}
919
920 Un'estensione di questo schema è costituito dalle cosiddette
921 \textit{long-options} espresse nella forma \cmd{--option=parameter}, anche la
922 gestione di queste ultime è stata standardizzata attraverso l'uso di una
923 versione estesa di \func{getopt}.
924
925 (NdA: da finire).
926
927
928 \subsection{Le variabili di ambiente}
929 \label{sec:proc_environ}
930
931 Oltre agli argomenti passati a linea di comando ogni processo riceve dal
932 sistema un \textsl{ambiente}, nella forma di una lista di variabili
933 (\textit{environment list}) messa a disposizione dal processo, e costruita
934 nella chiamata alla funzione \func{exec} quando questo viene lanciato.
935
936 Come per la lista dei parametri anche questa lista è un array di puntatori a
937 caratteri, ciascuno dei quali punta ad una stringa (terminata da un
938 \macro{NULL}). A differenza di \var{argv[]} però in questo caso non si ha una
939 lunghezza dell'array data da un equivalente di \var{argc}, ma la lista è
940 terminata da un puntatore nullo.
941
942 L'indirizzo della lista delle variabili di ambiente è passato attraverso la
943 variabile globale \var{environ}, a cui si può accedere attraverso una semplice
944 dichiarazione del tipo:
945 \begin{lstlisting}[labelstep=0,frame=,indent=1cm]{}
946 extern char ** environ;
947 \end{lstlisting}
948 un esempio del contenuto dell'ambiente, in si è riportato un estratto delle
949 variabili che normalmente sono definite dal sistema, è riportato in \nfig.
950 \begin{figure}[htb]
951   \centering
952   \includegraphics[width=11cm]{img/environ_var}
953   \caption{Esempio di lista delle variabili di ambiente.}
954   \label{fig:proc_envirno_list}
955 \end{figure}
956
957 Per convenzione le stringhe che definiscono l'ambiente sono tutte del tipo
958 \textsl{\texttt{nome=valore}}. Inoltre alcune variabili, come quelle elencate
959 in \curfig, sono definite dal sistema per essere usate da diversi programmi e
960 funzioni: per queste c'è l'ulteriore convenzione di usare nomi espressi in
961 caratteri maiuscoli.
962
963 Il kernel non usa mai queste variabili, il loro uso e la loro interpretazione è
964 riservata alle applicazioni e ad alcune funzioni di libreria; in genere esse
965 costituiscono un modo comodo per definire un comportamento specifico senza
966 dover ricorrere all'uso di opzioni a linea di comando o di file di
967 configurazione. 
968
969 La shell ad esempio ne usa molte per il suo funzionamento (come \var{PATH} per
970 la ricerca dei comandi), e alcune di esse (come \var{HOME}, \var{USER}, etc.)
971 sono definite al login. In genere è cura dell'amministratore definire le
972 opportune variabili di ambiente in uno script di avvio. Alcune servono poi
973 come riferimento generico per molti programmi (come \var{EDITOR} che indica
974 l'editor preferito da invocare in caso di necessità).
975
976 Gli standard POSIX e XPG3 definiscono alcune di queste variabili (le più
977 comuni), come riportato in \ntab. GNU/Linux le supporta tutte e ne definisce
978 anche altre: per una lista più completa si può controllare \cmd{man environ}.
979
980 \begin{table}[htb]
981   \centering
982   \begin{tabular}[c]{|l|c|c|c|p{7cm}|}
983     \hline
984     \textbf{Variabile} & \textbf{POSIX} & \textbf{XPG3} 
985     & \textbf{Linux} & \textbf{Descrizione} \\
986     \hline
987     \hline
988     \macro{USER} & $\bullet$ & $\bullet$ & $\bullet$ & Nome utente\\
989     \macro{LOGNAME} & $\bullet$ & $\bullet$ & $\bullet$ & Nome utente\\
990     \macro{HOME} & $\bullet$ & $\bullet$ & $\bullet$ & 
991     Directory base dell'utente\\
992     \macro{LANG} & $\bullet$ & $\bullet$ & $\bullet$ & Localizzazione\\
993     \macro{PATH} & $\bullet$ & $\bullet$ & $\bullet$ & Elenco delle directory
994     dei programmi\\
995     \macro{PWD} & $\bullet$ & $\bullet$ & $\bullet$ & Directory corrente\\
996     \macro{SHELL} & $\bullet$ & $\bullet$ & $\bullet$ & Shell in uso\\
997     \macro{TERM} & $\bullet$ & $\bullet$ & $\bullet$ & Tipo di terminale\\
998     \macro{PAGER} & $\bullet$ & $\bullet$ & $\bullet$ & Programma per vedere i
999     testi\\
1000     \macro{EDITOR} & $\bullet$ & $\bullet$ & $\bullet$ & Editor di default\\
1001     \macro{BROWSER} & $\bullet$ & $\bullet$ & $\bullet$ & Browser di default\\
1002     \hline
1003   \end{tabular}
1004   \caption{Variabile di ambiente più comuni definite da vari standard}
1005   \label{tab:proc_env_var}
1006 \end{table}
1007
1008 Lo standard ANSI C, pur non entrando nelle specifiche di come sono strutturati
1009 i contenuti, definisce la funzione \func{getenv} che permette di ottenere i
1010 valori delle variabili di ambiente, il suo prototipo è:
1011 \begin{prototype}{stdlib.h}{char *getenv(const char *name)}
1012   Esamina l'ambiente del processo cercando una stringa che corrisponda a
1013   quella specificata da \param{name}. 
1014   
1015   \bodydesc{La funzione ritorna \macro{NULL} se non trova nulla, o il
1016     puntatore alla stringa che corrisponde (di solito nella forma
1017     \texttt{NOME=valore}).}
1018 \end{prototype}
1019
1020 Oltre a questa funzione di lettura, che è l'unica definita dallo standard ANSI
1021 C, in seguito sono state proposte altre da utilizzare per settare e per
1022 cancellare le variabili di ambiente presenti; uno schema delle funzioni
1023 previste nei vari standard unix e disponibili in Linux è riportato in \ntab.
1024
1025 \begin{table}[htb]
1026   \centering
1027   \begin{tabular}[c]{|l|c|c|c|c|c|c|}
1028     \hline
1029     \textbf{Funzione} & \textbf{ANSI C} & \textbf{POSIX.1} & \textbf{XPG3} & 
1030     \textbf{SVr4} & \textbf{BSD} & \textbf{Linux} \\
1031     \hline
1032     \hline
1033     \func{getenv} & $\bullet$ &  $\bullet$ & $\bullet$ & 
1034       $\bullet$ & $\bullet$ & $\bullet$ \\
1035     \func{setenv} &   &   &    & 
1036         & $\bullet$ & $\bullet$ \\
1037     \func{unsetenv} &  &   &    & 
1038         & $\bullet$ & $\bullet$ \\
1039     \func{putenv} &  & opz.  & $\bullet$ & 
1040         & $\bullet$ & $\bullet$ \\
1041     \func{clearenv} &  & opz.  &    & 
1042         &  &  \\
1043     \hline
1044   \end{tabular}
1045   \caption{Funzioni per la gestione delle variabili di ambiente.}
1046   \label{tab:proc_env_func}
1047 \end{table}
1048
1049 In Linux solo le prime quattro funzioni di \curtab\ sono definite; delle tre
1050 restanti le prime due, \func{putenv} e \func{setenv} servono per assegnare
1051 nuove variabili di ambiente, i loro prototipi sono i seguenti:
1052 \begin{functions}
1053   \headdecl{stdlib.h} 
1054   
1055   \funcdecl{int putenv(char *string)} Aggiunge la stringa \param{string}
1056   all'ambiente.
1057   
1058   \funcdecl{int setenv(const char *name, const char *value, int overwrite)}
1059   Setta la variabile di ambiente \param{name} al valore \param{value}.
1060   
1061   \bodydesc{Entrambe le funzioni ritornano 0 in caso di successo e -1 per un
1062     errore, che è sempre \macro{ENOMEM}.}
1063 \end{functions}
1064 \noindent la terza è:
1065 \begin{functions}
1066   \headdecl{stdlib.h}
1067   
1068   \funcdecl{void unsetenv(const char *name)}
1069   Rimuove la variabile di ambiente \param{name}.  
1070 \end{functions}
1071
1072 Per cancellare una variabile di ambiente si usa \func{unsetenv}, che elimina
1073 ogni occorrenza della variabile, se la variabile specificata non esiste non
1074 succede nulla, e non è previsto (dato che la funzione è \type{void}) nessuna
1075 segnalazione di errore. 
1076
1077 Per modificare o aggiungere una variabile di ambiente si possono usare le
1078 funzioni \func{setenv} e \func{putenv}. La prima permette di specificare
1079 separatamente nome e valore della variabile di ambiente, inoltre il valore di
1080 \param{overwrite} specifica il comportamento della funzione nel caso la
1081 variabile esista già, sovrascrivendola se diverso da zero, lasciandola
1082 immutata se uguale a zero.
1083
1084 La seconda funzione prende come parametro una stringa analoga quella
1085 restituita da \func{getenv}, e sempre nella forma \texttt{NOME=valore}. Se la
1086 variabile specificata non esiste la stringa sarà aggiunta all'ambiente, se
1087 invece esiste il suo valore sarà settato a quello specificato da
1088 \func{string}. Si tenga presente che, seguendo lo standard SUSv2, le
1089 \acr{glibc} successive alla versione 2.1.2 aggiungono\footnote{il
1090   comportamento è lo stesso delle vecchie \acr{libc4} e \acr{libc5}; nelle
1091   \acr{glibc}, dalla versione 2.0 alla 2.1.1, veniva invece fatta una copia,
1092   seguendo il comportamento di BSD4.4; dato che questo può dar luogo a perdite
1093   di memoria e non rispetta lo standard il comportamento è stato modificato a
1094   partire dalle 2.1.2, eliminando anche, sempre in conformità a SUSv2,
1095   l'attributo \type{const} dal prototipo.} \func{string} alla lista delle
1096 variabili di ambiente; pertanto ogni cambiamento alla stringa in questione si
1097 riflette automaticamente sull'ambiente, e quindi si deve evitare di passare
1098 alla funzione variabili automatiche (per evitare i problemi esposti in
1099 \secref{sec:proc_auto_var}).
1100
1101 Si tenga infine presente che se si passa a \func{putenv} solo il nome di una
1102 variabile (cioè \param{string} è nella forma \texttt{NAME} e non contiene un
1103 \var{=}) allora questa viene cancellata dall'ambiente. Infine se la chiamata
1104 di \func{putenv} comporta la necessità di allocare una nuova versione del
1105 vettore \var{environ} questo sarà allocato, ma la versione corrente sarà
1106 deallocata solo se anch'essa risultante da una allocazione fatta in precedenza
1107 da un'altra \func{putenv}, il vettore originale (in genere piazzato al di
1108 sopra dello stack, vedi \figref{fig:proc_mem_layout}), o la memoria associata
1109 alle variabili di ambiente eliminate non viene comunque liberata.
1110
1111
1112 \section{Problematiche di programmazione generica}
1113 \label{sec:proc_gen_prog}
1114
1115 Benché questo non sia un libro di C, è opportuno affrontare alcune delle
1116 problematiche generali che possono emergere nella programmazione e di quali
1117 precauzioni o accorgimenti occorre prendere per risolverle. Queste
1118 problematiche non sono specifiche di sistemi unix-like o multitasking, ma
1119 avendo trattato in questo capitolo il comportamento dei processi visti come
1120 entità a se stanti, le riportiamo qui.
1121
1122
1123 \subsection{Il passaggio delle variabili e dei valori di ritorno}
1124 \label{sec:proc_var_passing}
1125
1126 Una delle caratteristiche standard del C è che le variabili vengono passate
1127 alle subroutine attraverso un meccanismo che viene chiamato \textit{by value}
1128 (diverso ad esempio da quanto avviene con il Fortran, dove le variabili sono
1129 passate, come suol dirsi, \textit{by reference}, o dal C++ dove la modalità
1130 del passaggio può essere controllata con l'operatore \cmd{\&}).
1131
1132 Il passaggio di una variabile \textit{by value} significa che in realtà quello
1133 che viene passato alla subroutine è una copia del valore attuale di quella
1134 variabile, copia che la subroutine potrà modificare a piacere, senza che il
1135 valore originale nella routine chiamante venga toccato. In questo modo non
1136 occorre preoccuparsi di eventuali effetti delle operazioni della subroutine
1137 sulla variabile passata come parametro.
1138
1139 Questo però va inteso nella maniera corretta. Il passaggio \textit{by value}
1140 vale per qualunque variabile, puntatori compresi; quando però in una
1141 subroutine si usano dei puntatori (ad esempio per scrivere in un buffer) in
1142 realtà si va a modificare la zona di memoria a cui essi puntano, per cui anche
1143 se i puntatori sono copie, i dati a cui essi puntano sono sempre gli stessi, e
1144 le eventuali modifiche avranno effetto e saranno visibili anche nella routine
1145 chiamante.
1146
1147 Nella maggior parte delle funzioni di libreria e delle system call i puntatori
1148 vengono usati per scambiare dati (attraverso buffer o strutture) e le
1149 variabili semplici vengono usate per specificare parametri; in genere le
1150 informazioni a riguardo dei risultati vengono passate alla routine chiamante
1151 attraverso il valore di ritorno.  È buona norma seguire questa pratica anche
1152 nella programmazione normale.
1153
1154
1155 Talvolta però è necessario che la funzione possa restituire indietro alla
1156 funzione chiamante un valore relativo ad uno dei suoi parametri.  Per far
1157 questo si usa il cosiddetto \textit{value result argument}, si passa cioè,
1158 invece di una normale variabile un puntatore; vedremo alcuni esempi di questa
1159 modalità nelle funzioni che gestiscono i socket (in
1160 \secref{sec:TCPel_functions}) in cui, per permettere al kernel di restituire
1161 informazioni sulle dimensioni delle strutture degli indirizzi utilizzate,
1162 viene usato questo meccanismo.
1163
1164
1165 \subsection{Il passaggio di un numero variabile di argomenti}
1166 \label{sec:proc_variadic}
1167
1168 Come vedremo nei capitoli successivi, non sempre è possibile specificare
1169 un numero fisso di parametri per una funzione.  Lo standard ISO C
1170 prevede la possibilità di definire delle \textit{varadic function} che
1171 abbiano un numero variabile di argomenti, ma non provvede nessun
1172 meccanismo con cui queste funzioni possono accedere a questi argomenti.
1173
1174 (NdT il resto è da fare).
1175
1176 \subsection{Potenziali problemi con le variabili automatiche}
1177 \label{sec:proc_auto_var}
1178
1179 Uno dei possibili problemi che si possono avere con le subroutine è quello di
1180 restituire alla funzione chiamante dei dati che sono contenuti in una
1181 variabile automatica.  Ovviamente quando la subroutine ritorna la sezione
1182 dello stack che conteneva la variabile automatica potrà essere riutilizzata da
1183 una nuova funzione, con le conseguenze immaginabili di sovrapposizione.
1184
1185 Per questo una delle regole fondamentali della programmazione in C è che
1186 all'uscita di una funzione non deve restare nessun riferimento a variabili
1187 locali di quella funzione; qualora necessiti di utilizzare variabili che
1188 possano essere viste anche dalla funzione chiamante queste devono essere
1189 allocate esplicitamente, o in maniera statica (usando variabili di tipo
1190 \type{static} o \type{extern}), o dinamicamente con una delle funzioni della
1191 famiglia \func{malloc}.
1192
1193 \subsection{Il controllo di flusso non locale}
1194 \label{sec:proc_longjmp}
1195
1196 Il controllo del flusso di un programma in genere viene effettuato con le
1197 varie istruzioni del linguaggio C, la più bistrattata delle quali è il
1198 \func{goto}, ampiamente deprecato in favore di costrutti più puliti; esiste
1199 però un caso in l'uso di questa istruzione porta all'implementazione più
1200 efficiente, quello dell'uscita in caso di errore.
1201
1202 Il C però non consente di effettuare un salto ad una label definita in
1203 un'altra funzione, per cui se l'errore avviene in funzioni profondamente
1204 annidate occorre usare quello che viene chiamato un salto \textsl{non-locale};
1205 questo viene fatto usando salvando il contesto dello stack nel punto in cui si
1206 vuole tornare in caso di errore, e ripristinandolo quando l'occorrenza capita.
1207
1208
1209 La funzione che permette di salvare il contesto dello stack è \func{setjmp},
1210 il cui prototipo è:
1211
1212 \begin{functions}
1213   \headdecl{setjmp.h}
1214   \funcdecl{void setjmp(jmp\_buf env)}
1215   
1216   Salva il contesto dello stack in \param{env} per un successivo uso da parte
1217   di \func{longjmp}. Il contesto viene invalidato se la routine che ha
1218   chiamato \func{setjmp} ritorna.
1219   
1220   \bodydesc{La funzione ritorna zero quando è chiamata direttamente e un
1221     valore diverso da zero quando ritorna da una chiamata di \func{longjmp}
1222     che usa il contesto salvato in precedenza.}
1223 \end{functions}
1224
1225
1226 Per poter effettuare un salto non locale si usa la funzione \func{longjmp}; il
1227 suo prototipo è:
1228 \begin{functions}
1229   \headdecl{setjmp.h}
1230   \funcdecl{void longjmp(jmp\_buf env, int val)}
1231   
1232   Ripristina il contesto dello stack salvato dall'ultima chiamata di
1233   \func{setjmp} con l'argomento \param{env}. Il programma prosegue dal ritorno
1234   di \func{setjmp} con un valore \param{val}. Il valore di \param{val} deve
1235   essere diverso da zero, se viene specificato 0 sarà usato 1 al suo posto.
1236
1237   \bodydesc{La funzione non ritorna.}
1238 \end{functions}
1239