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