Per la gestione da parte del kernel la memoria viene divisa in pagine di
dimensione fissa. Inizialmente queste pagine erano di 4kb sulle macchine a 32
bit e di 8kb sulle alpha. Con le versioni più recenti del kernel è possibile
-anche utilizzare pagine di dimensioni maggiori (di 4Mb, dette \textit{huge
- page}), per sistemi con grandi quantitativi di memoria in cui l'uso di
-pagine troppo piccole comporta una perdita di prestazioni. In alcuni sistemi
-la costante \const{PAGE\_SIZE}, definita in \headfile{limits.h}, indica la
-dimensione di una pagina in byte, con Linux questo non avviene e per ottenere
-questa dimensione si deve ricorrere alla funzione \func{getpagesize} (vedi
-sez.~\ref{sec:sys_memory_res}).
+anche utilizzare pagine di dimensioni maggiori (di 4Mb, dette
+\itindex{huge~page} \textit{huge page}), per sistemi con grandi quantitativi
+di memoria in cui l'uso di pagine troppo piccole comporta una perdita di
+prestazioni. In alcuni sistemi la costante \const{PAGE\_SIZE}, definita in
+\headfile{limits.h}, indica la dimensione di una pagina in byte, con Linux
+questo non avviene e per ottenere questa dimensione si deve ricorrere alla
+funzione \func{getpagesize} (vedi sez.~\ref{sec:sys_memory_res}).
Ciascuna pagina di memoria nello spazio di indirizzi virtuale è associata ad
un supporto che può essere una pagina di memoria reale o ad un dispositivo di
Si può notare che si è anzitutto (\texttt{\small 1}) disabilitata la stampa di
messaggi di errore per opzioni non riconosciute, per poi passare al ciclo per
-la verifica delle opzioni (\texttt{\small 2-27}); per ciascuna delle opzioni
+la verifica delle opzioni (\texttt{\small 2--27}); per ciascuna delle opzioni
possibili si è poi provveduto ad un'azione opportuna, ad esempio per le tre
opzioni che prevedono un parametro si è effettuata la decodifica del medesimo,
il cui indirizzo è contenuto nella variabile \var{optarg}), avvalorando la
-relativa variabile (\texttt{\small 12-14}, \texttt{\small 15-17} e
-\texttt{\small 18-20}). Completato il ciclo troveremo in \var{optind} l'indice
-in \code{argv[]} del primo degli argomenti rimanenti nella linea di comando.
+relativa variabile (\texttt{\small 12--14}, \texttt{\small 15--17} e
+\texttt{\small 18--20}). Completato il ciclo troveremo in \var{optind}
+l'indice in \code{argv[]} del primo degli argomenti rimanenti nella linea di
+comando.
Normalmente \func{getopt} compie una permutazione degli elementi di
\param{argv} cosicché alla fine della scansione gli elementi che non sono
Il codice di detto programma, \file{endtest.c}, è nei sorgenti allegati,
allora se lo eseguiamo su un normale PC compatibile, che è \textit{little
endian} otterremo qualcosa del tipo:
-\begin{Command}
-[piccardi@gont sources]$ ./endtest
-\end{Command}
-%$
-\begin{Terminal}
+\begin{Console}
+[piccardi@gont sources]$ \textbf{./endtest}
Using value ABCDEF01
val[0]= 1
val[1]=EF
val[2]=CD
val[3]=AB
-\end{Terminal}
+\end{Console}
+%$
mentre su un vecchio Macintosh con PowerPC, che è \textit{big endian} avremo
qualcosa del tipo:
-\begin{Command}
-piccardi@anarres:~/gapil/sources$ ./endtest
-\end{Command}
-%$
-\begin{Terminal}
+\begin{Console}
+piccardi@anarres:~/gapil/sources$ \textbf{./endtest}
Using value ABCDEF01
val[0]=AB
val[1]=CD
val[2]=EF
val[3]= 1
-\end{Terminal}
+\end{Console}
+%$
L'attenzione alla \textit{endianness} nella programmazione è importante, perché
se si fanno assunzioni relative alla propria architettura non è detto che
% LocalWords: capability MEMLOCK limits getpagesize RLIMIT munlock sys const
% LocalWords: addr len EINVAL EPERM mlockall munlockall flags l'OR CURRENT IFS
% LocalWords: argc argv parsing questofile txt getopt optstring switch optarg
-% LocalWords: optind opterr optopt ForkTest POSIXLY CORRECT long options NdA
+% LocalWords: optind opterr optopt POSIXLY CORRECT long options NdA
% LocalWords: option parameter list environ PATH HOME XPG tab LOGNAME LANG PWD
% LocalWords: TERM PAGER TMPDIR getenv name SVr setenv unsetenv putenv opz gcc
% LocalWords: clearenv libc value overwrite string reference result argument