X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=system.tex;h=fcc794748424eed1134aafa1917f2ac6e10e27c6;hp=3834b5183db003843f9cc527ecf917248c0a3950;hb=3c347867e99daab5f2d89b04b5a1500ed6a3bcb8;hpb=062e1036f07efd623e11b5bb194bcf2684dd7866 diff --git a/system.tex b/system.tex index 3834b51..fcc7947 100644 --- a/system.tex +++ b/system.tex @@ -1,9 +1,9 @@ %% system.tex %% -%% Copyright (C) 2000-2003 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2004 Simone Piccardi. Permission is granted to %% copy, distribute and/or modify this document under the terms of the GNU Free %% Documentation License, Version 1.1 or any later version published by the -%% Free Software Foundation; with the Invariant Sections being "Prefazione", +%% Free Software Foundation; with the Invariant Sections being "Un preambolo", %% with no Front-Cover Texts, and with no Back-Cover Texts. A copy of the %% license is included in the section entitled "GNU Free Documentation %% License". @@ -390,7 +390,8 @@ riportate in tab.~\ref{tab:sys_file_macro}. \hline \const{LINK\_MAX} &8 & numero massimo di link a un file\\ \const{NAME\_MAX}& 14 & lunghezza in byte di un nome di file. \\ - \const{PATH\_MAX}& 256 & lunghezza in byte di un pathname.\\ + \const{PATH\_MAX}& 256 & lunghezza in byte di un + \index{\textit{pathname}}\textit{pathname}.\\ \const{PIPE\_BUF}&4096 & byte scrivibili atomicamente in una pipe (vedi sez.~\ref{sec:ipc_pipes}).\\ \const{MAX\_CANON}&255 & dimensione di una riga di terminale in modo @@ -420,13 +421,14 @@ le analoghe di tab.~\ref{tab:sys_posix1_general}. \hline \const{\_POSIX\_LINK\_MAX} &8 & numero massimo di link a un file.\\ \const{\_POSIX\_NAME\_MAX}& 14 & lunghezza in byte di un nome di file. \\ - \const{\_POSIX\_PATH\_MAX}& 256 & lunghezza in byte di un pathname.\\ + \const{\_POSIX\_PATH\_MAX}& 256 & lunghezza in byte di un + \index{\textit{pathname}}\textit{pathname}.\\ \const{\_POSIX\_PIPE\_BUF}& 512 & byte scrivibili atomicamente in una - pipe.\\ + pipe.\\ \const{\_POSIX\_MAX\_CANON}&255 & dimensione di una riga di - terminale in modo canonico.\\ + terminale in modo canonico.\\ \const{\_POSIX\_MAX\_INPUT}&255 & spazio disponibile nella coda di input - del terminale.\\ + del terminale.\\ % \const{\_POSIX\_MQ\_OPEN\_MAX}& 8& \\ % \const{\_POSIX\_MQ\_PRIO\_MAX}& 32& \\ % \const{\_POSIX\_FD\_SETSIZE}& 16 & \\ @@ -462,14 +464,14 @@ con la funzione \funcd{pathconf}, il cui prototipo E si noti come la funzione in questo caso richieda un parametro che specifichi a quale file si fa riferimento, dato che il valore del limite cercato può variare a seconda del filesystem. Una seconda versione della funzione, -\funcd{fpathconf}, opera su un file descriptor invece che su un pathname. Il -suo prototipo è: +\funcd{fpathconf}, opera su un file descriptor invece che su un +\index{\textit{pathname}}\textit{pathname}. Il suo prototipo è: \begin{prototype}{unistd.h}{long fpathconf(int fd, int name)} Restituisce il valore del parametro \param{name} per il file \param{fd}. \bodydesc{È identica a \func{pathconf} solo che utilizza un file descriptor - invece di un pathname; pertanto gli errori restituiti cambiano di - conseguenza.} + invece di un \index{\textit{pathname}}\textit{pathname}; pertanto gli + errori restituiti cambiano di conseguenza.} \end{prototype} \noindent ed il suo comportamento è identico a quello di \func{pathconf}. @@ -490,7 +492,7 @@ il suo prototipo La funzione, che viene usata dal comando \cmd{uname}, restituisce le informazioni richieste nella struttura \param{info}; anche questa struttura è definita in \file{sys/utsname.h}, secondo quanto mostrato in -sez.~\ref{fig:sys_utsname}, e le informazioni memorizzate nei suoi membri +fig.~\ref{fig:sys_utsname}, e le informazioni memorizzate nei suoi membri indicano rispettivamente: \begin{itemize*} \item il nome del sistema operativo; @@ -587,8 +589,8 @@ maniera gerarchica all'interno di un albero;\footnote{si tenga presente che occorrerà includere anche i file \file{linux/unistd.h} e \file{linux/sysctl.h}.} per accedere ad uno di essi occorre specificare un cammino attraverso i vari nodi dell'albero, in maniera analoga a come avviene -per la risoluzione di un pathname (da cui l'uso alternativo del filesystem -\file{/proc}, che vedremo dopo). +per la risoluzione di un \index{\textit{pathname}}\textit{pathname} (da cui +l'uso alternativo del filesystem \file{/proc}, che vedremo dopo). Ciascun nodo dell'albero è identificato da un valore intero, ed il cammino che arriva ad identificare un parametro specifico è passato alla funzione @@ -631,11 +633,11 @@ forma di file alcune delle strutture interne del kernel stesso. In particolare l'albero dei valori di \func{sysctl} viene presentato in forma di file nella directory \file{/proc/sys}, cosicché è possibile accedervi -specificando un pathname e leggendo e scrivendo sul file corrispondente al -parametro scelto. Il kernel si occupa di generare al volo il contenuto ed i -nomi dei file corrispondenti, e questo ha il grande vantaggio di rendere -accessibili i vari parametri a qualunque comando di shell e di permettere la -navigazione dell'albero dei valori. +specificando un \index{\textit{pathname}}\textit{pathname} e leggendo e +scrivendo sul file corrispondente al parametro scelto. Il kernel si occupa di +generare al volo il contenuto ed i nomi dei file corrispondenti, e questo ha +il grande vantaggio di rendere accessibili i vari parametri a qualunque +comando di shell e di permettere la navigazione dell'albero dei valori. Alcune delle corrispondenze dei file presenti in \file{/proc/sys} con i valori di \func{sysctl} sono riportate nei commenti del codice che può essere trovato @@ -687,9 +689,10 @@ sulla directory \param{target}. \textit{mount point} o di spostarlo quando \param{target} non è un \textit{mount point} o è \file{/}. \item[\errcode{EACCES}] non si ha il permesso di accesso su uno dei - componenti del pathname, o si è cercato di montare un filesystem - disponibile in sola lettura senza averlo specificato o il device - \param{source} è su un filesystem montato con l'opzione \const{MS\_NODEV}. + componenti del \index{\textit{pathname}}\textit{pathname}, o si è cercato + di montare un filesystem disponibile in sola lettura senza averlo + specificato o il device \param{source} è su un filesystem montato con + l'opzione \const{MS\_NODEV}. \item[\errcode{ENXIO}] il \textit{major number} del device \param{source} è sbagliato. \item[\errcode{EMFILE}] la tabella dei device \textit{dummy} è piena. @@ -930,7 +933,7 @@ dall'altra con il diffondersi delle reti la necessit informazioni degli utenti e dei gruppi per insiemi di macchine, in modo da mantenere coerenti i dati, ha portato anche alla necessità di poter recuperare e memorizzare dette informazioni su supporti diversi, introducendo il sistema -del \textit{Name Service Switch} che tratteremo in dettaglio più avanti (in +del \textit{Name Service Switch} che tratteremo brevemente più avanti (in sez.~\ref{sec:sock_resolver}) dato che la maggior parte delle sua applicazioni sono relative alla risoluzioni di nomi di rete. @@ -1207,7 +1210,7 @@ e \funcd{pututline}, i cui prototipi sono: \headdecl{utmp.h} \funcdecl{struct utmp *getutent(void)} - Legge una voce dal dalla posizione corrente nel registro. + Legge una voce dalla posizione corrente nel registro. \funcdecl{struct utmp *getutid(struct utmp *ut)} Ricerca una voce sul registro in base al contenuto di \param{ut}. @@ -1360,12 +1363,13 @@ processo nell'eseguire le istruzioni in user space, e quello impiegato dal kernel nelle system call eseguite per conto del processo. Gli altri tre campi servono a quantificare l'uso della memoria -virtuale\index{memoria virtuale} e corrispondono rispettivamente al numero di -\textit{page fault}\index{page fault} (vedi sez.~\ref{sec:proc_mem_gen}) -avvenuti senza richiedere I/O su disco (i cosiddetti \textit{minor page - fault}), a quelli che invece han richiesto I/O su disco (detti invece -\textit{major page fault}) ed al numero di volte che il processo è stato -completamente tolto dalla memoria per essere inserito nello swap. +virtuale\index{memoria~virtuale} e corrispondono rispettivamente al numero di +\textit{page fault}\index{\textit{page~fault}} (vedi +sez.~\ref{sec:proc_mem_gen}) avvenuti senza richiedere I/O su disco (i +cosiddetti \textit{minor page fault}), a quelli che invece han richiesto I/O +su disco (detti invece \textit{major page fault}) ed al numero di volte che il +processo è stato completamente tolto dalla memoria per essere inserito nello +swap. In genere includere esplicitamente \file{} non è più strettamente necessario, ma aumenta la portabilità, e serve comunque quando, come nella @@ -1463,7 +1467,7 @@ prototipi sono: Entrambe le funzioni permettono di specificare, attraverso l'argomento \param{resource}, su quale risorsa si vuole operare: i possibili valori di -questo argomento sono elencati in sez.~\ref{tab:sys_rlimit_values}. L'acceso +questo argomento sono elencati in tab.~\ref{tab:sys_rlimit_values}. L'acceso (rispettivamente in lettura e scrittura) ai valori effettivi dei limiti viene poi effettuato attraverso la struttura \struct{rlimit} puntata da \param{rlim}. @@ -1540,7 +1544,7 @@ sez.~\ref{sec:proc_exec}). La gestione della memoria è già stata affrontata in dettaglio in sez.~\ref{sec:proc_memory}; abbiamo visto allora che il kernel provvede il -meccanismo della memoria virtuale\index{memoria virtuale} attraverso la +meccanismo della memoria virtuale\index{memoria~virtuale} attraverso la divisione della memoria fisica in pagine. In genere tutto ciò è del tutto trasparente al singolo processo, ma in certi @@ -1618,11 +1622,12 @@ Il suo prototipo \end{prototype} La funzione restituisce in ciascun elemento di \param{loadavg} il numero medio -di processi attivi sulla coda dello scheduler\index{scheduler}, calcolato su -un diverso intervalli di tempo. Il numero di intervalli che si vogliono -leggere è specificato da \param{nelem}, dato che nel caso di Linux il carico -viene valutato solo su tre intervalli (corrispondenti a 1, 5 e 15 minuti), -questo è anche il massimo valore che può essere assegnato a questo argomento. +di processi attivi sulla coda dello scheduler\index{\textit{scheduler}}, +calcolato su un diverso intervalli di tempo. Il numero di intervalli che si +vogliono leggere è specificato da \param{nelem}, dato che nel caso di Linux il +carico viene valutato solo su tre intervalli (corrispondenti a 1, 5 e 15 +minuti), questo è anche il massimo valore che può essere assegnato a questo +argomento. @@ -1733,7 +1738,7 @@ utilizzato dallo stesso; il suo prototipo \end{prototype} La funzione restituisce il tempo in tick, quindi se si vuole il tempo in -secondi occorre moltiplicare il risultato per la costante +secondi occorre dividere il risultato per la costante \const{CLOCKS\_PER\_SEC}.\footnote{le \acr{glibc} seguono lo standard ANSI C, POSIX richiede che \const{CLOCKS\_PER\_SEC} sia definito pari a 1000000 indipendentemente dalla risoluzione del timer di sistema.} In genere @@ -1754,7 +1759,7 @@ possono essere letti attraverso la funzione \funcd{times}, il cui prototipo La funzione restituisce i valori di process time del processo corrente in una struttura di tipo \struct{tms}, la cui definizione è riportata in -sez.~\ref{fig:sys_tms_struct}. La struttura prevede quattro campi; i primi due, +fig.~\ref{fig:sys_tms_struct}. La struttura prevede quattro campi; i primi due, \var{tms\_utime} e \var{tms\_stime}, sono l'\textit{user time} ed il \textit{system time} del processo, così come definiti in sez.~\ref{sec:sys_unix_time}. @@ -1938,7 +1943,7 @@ campo \var{mode}, che specifica quale parametro dell'orologio di sistema, specificato in un opportuno campo di \struct{timex}, deve essere impostato. Un valore nullo serve per leggere i parametri correnti; i valori diversi da zero devono essere specificati come OR binario delle costanti riportate in -sez.~\ref{tab:sys_timex_mode}. +tab.~\ref{tab:sys_timex_mode}. La funzione utilizza il meccanismo di David L. Mills, descritto nell'\href{http://www.ietf.org/rfc/rfc1305.txt}{RFC~1305}, che è alla base del