X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=system.tex;h=07e74f7e178430059f5e4f146d28a1a0c5da54a6;hp=c68686fcc5d9cfdd3d4e517f516bc04780ddd8fc;hb=7e77cdaacc8c84ecfeac4aa22977b7fa34741b5c;hpb=247c7ba624f39b283f9e85816c0616348f39c1b6 diff --git a/system.tex b/system.tex index c68686f..07e74f7 100644 --- a/system.tex +++ b/system.tex @@ -10,7 +10,7 @@ e degli errori. -\section{La lettura delle caratteristiche del sistema} +\section{Capacità e caratteristiche del sistema} \label{sec:sys_characteristics} In questa sezione tratteremo le varie modalità con cui un programma può @@ -21,11 +21,11 @@ l'architettura hardware, l'implementazione del kernel e delle librerie, le opzioni di configurazione. La definizione di queste caratteristiche ed il tentativo di provvedere dei -meccanismi generali che i programmi potessero usare per ricavarle è uno degli +meccanismi generali che i programmi possono usare per ricavarle è uno degli aspetti più complessi e controversi con cui le diverse standardizzazioni si sono dovute confrontare, spesso con risultati spesso tutt'altro che chiari. -Proveremo comunque a dare una descrizione dei principali metodi previsti dai -vari standard per ricavare sia le caratteristiche specifiche del sistema, che +Daremo comunque una descrizione dei principali metodi previsti dai vari +standard per ricavare sia le caratteristiche specifiche del sistema, che quelle della gestione dei file. @@ -35,11 +35,11 @@ quelle della gestione dei file. Quando si devono determinare le le caratteristiche generali del sistema ci si trova di fronte a diverse possibilità; alcune di queste infatti possono dipendere dall'architettura dell'hardware (come le dimensioni dei tipi -interi), o dal sistema operativo (come la presenza o meno dei \textit{saved - id}), altre invece possono dipendere dalle opzioni con cui si è costruito -il sistema (ad esempio da come si è compilato il kernel), o dalla -configurazione del medesimo; per questo motivo in generale sono necessari due -tipi diversi di funzionalità: +interi), o dal sistema operativo (come la presenza o meno del gruppo degli +identificatori \textit{saved}), altre invece possono dipendere dalle opzioni +con cui si è costruito il sistema (ad esempio da come si è compilato il +kernel), o dalla configurazione del medesimo; per questo motivo in generale +sono necessari due tipi diversi di funzionalità: \begin{itemize*} \item la possibilità di determinare limiti ed opzioni al momento della compilazione. @@ -241,9 +241,10 @@ valori ottenuti da \func{sysconf}. \hline \macro{\_POSIX\_JOB\_CONTROL}& il sistema supporta il \textit{job control} (vedi - \secref{sec:sess_xxx}).\\ - \macro{\_POSIX\_SAVED\_IDS} & il sistema supporta i \textit{saved id} - (vedi \secref{sec:proc_access_id}). + \secref{sec:sess_job_control}).\\ + \macro{\_POSIX\_SAVED\_IDS} & il sistema supporta gli identificatori del + gruppo \textit{saved} (vedi + \secref{sec:proc_access_id}) per il controllo di accesso dei processi\\ \macro{\_POSIX\_VERSION} & fornisce la versione dello standard POSIX.1 supportata nel formato YYYYMML (ad esempio @@ -263,15 +264,15 @@ incluso automaticamente all'interno di \file{limits.h}). Di questi vale la pena menzionare alcune macro di uso comune, (riportate in \tabref{tab:sys_posix1_other}), che non indicano un valore specifico, ma denotano la presenza di alcune funzionalità nel sistema (come il supporto del -\textit{job control} o dei \textit{saved id}). +\textit{job control} o degli identificatori del gruppo \textit{saved}). Oltre allo standard POSIX.1, anche lo standard POSIX.2 definisce una serie di altre costanti. Siccome queste sono principalmente attinenti a limiti relativi alle applicazioni di sistema presenti (come quelli su alcuni parametri delle espressioni regolari o del comando \cmd{bc}), non li tratteremo esplicitamente, se ne trova una menzione completa nell'header file -\file{bits/posix2\_lim.h}, e alcuni di loro sono descritti nella man page di -\func{sysconf} e nel manuale delle \acr{glibc}. +\file{bits/posix2\_lim.h}, e alcuni di loro sono descritti nella pagina di +manuale di \func{sysconf} e nel manuale delle \acr{glibc}. \subsection{La funzione \func{sysconf}} @@ -331,7 +332,7 @@ relative spiegazioni, si pu \textit{process time} (vedi \secref{sec:sys_unix_time}).\\ \texttt{\_SC\_JOB\_CONTROL}&\macro{\_POSIX\_JOB\_CONTROL}& Indica se è supportato il \textit{job control} (vedi - \secref{sec:sess_xxx}) in stile POSIX.\\ + \secref{sec:sess_job_control}) in stile POSIX.\\ \texttt{\_SC\_SAVED\_IDS}&\macro{\_POSIX\_SAVED\_IDS}& Indica se il sistema supporta i \textit{saved id} (vedi \secref{sec:proc_access_id}).\\ @@ -387,19 +388,20 @@ riportate in \tabref{tab:sys_file_macro}. \begin{table}[htb] \centering \footnotesize - \begin{tabular}[c]{|l|r|p{8cm}|} + \begin{tabular}[c]{|l|r|l|} \hline \textbf{Macro}&\textbf{Valore}&\textbf{Significato}\\ \hline \hline - \macro{NAME\_MAX}& 14 & lunghezza in byte di un nome di file. \\ - \macro{PATH\_MAX}& 256 & lunghezza in byte di pathname.\\ - \macro{PIPE\_BUF}&4096 & byte scrivibili atomicamente in una pipe\\ \macro{LINK\_MAX} &8 & numero massimo di link a un file\\ - \macro{MAX\_CANON}&255 & spazio disponibile nella coda di input - canonica del terminale\\ + \macro{NAME\_MAX}& 14 & lunghezza in byte di un nome di file. \\ + \macro{PATH\_MAX}& 256 & lunghezza in byte di un pathname.\\ + \macro{PIPE\_BUF}&4096 & byte scrivibili atomicamente in una pipe + (vedi \secref{sec:ipc_pipes}).\\ + \macro{MAX\_CANON}&255 & dimensione di una riga di terminale in modo + canonico (vedi \secref{sec:term_design}).\\ \macro{MAX\_INPUT}&255 & spazio disponibile nella coda di input - del terminale\\ + del terminale (vedi \secref{sec:term_design}).\\ \hline \end{tabular} \caption{Macro per i limiti sulle caratteristiche dei file.} @@ -415,21 +417,20 @@ analoghe di \tabref{tab:sys_posix1_general}. \begin{table}[htb] \centering \footnotesize - \begin{tabular}[c]{|l|r|p{8cm}|} + \begin{tabular}[c]{|l|r|l|} \hline \textbf{Macro}&\textbf{Valore}&\textbf{Significato}\\ \hline \hline - \textbf{Macro}&\textbf{Valore}&\textbf{Significato}\\ - \macro{\_POSIX\_LINK\_MAX} &8 & numero massimo di link a un file\\ - \macro{\_POSIX\_MAX\_CANON}&255 & spazio disponibile nella coda di input - canonica del terminale\\ - \macro{\_POSIX\_MAX\_INPUT}&255 & spazio disponibile nella coda di input - del terminale\\ + \macro{\_POSIX\_LINK\_MAX} &8 & numero massimo di link a un file.\\ \macro{\_POSIX\_NAME\_MAX}& 14 & lunghezza in byte di un nome di file. \\ - \macro{\_POSIX\_PATH\_MAX}& 256 & lunghezza in byte di pathname.\\ + \macro{\_POSIX\_PATH\_MAX}& 256 & lunghezza in byte di un pathname.\\ \macro{\_POSIX\_PIPE\_BUF}& 512 & byte scrivibili atomicamente in una - pipe\\ + pipe.\\ + \macro{\_POSIX\_MAX\_CANON}&255 & dimensione di una riga di + terminale in modo canonico.\\ + \macro{\_POSIX\_MAX\_INPUT}&255 & spazio disponibile nella coda di input + del terminale.\\ % \macro{\_POSIX\_MQ\_OPEN\_MAX}& 8& \\ % \macro{\_POSIX\_MQ\_PRIO\_MAX}& 32& \\ % \macro{\_POSIX\_FD\_SETSIZE}& 16 & \\ @@ -487,7 +488,7 @@ suo prototipo Restituisce informazioni sul sistema nella struttura \param{info}. \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di - fallimento, nel qual caso \var{errno} viene impostata a \macro{EFAULT}.} + fallimento, nel qual caso \var{errno} assumerà il valore \macro{EFAULT}.} \end{prototype} La funzione, che viene usata dal comando \cmd{uname}, restituisce le @@ -504,7 +505,7 @@ indicano rispettivamente: \item il nome del domino. \end{itemize*} l'ultima informazione è stata aggiunta di recente e non è prevista dallo -standard POSIX, essa è accessibile, come mostrato in \figref{fig:sig_stack_t}, +standard POSIX, essa è accessibile, come mostrato in \figref{fig:sys_utsname}, solo definendo \macro{\_GNU\_SOURCE}. \begin{figure}[!htb] @@ -534,11 +535,11 @@ In generale si tenga presente che le dimensioni delle stringe di una \macro{\_UTSNAME\_LENGTH} per i campi standard e \macro{\_UTSNAME\_DOMAIN\_LENGTH} per quello specifico per il nome di dominio; altri sistemi usano nomi diversi come \macro{SYS\_NMLN} o \macro{\_SYS\_NMLN} -o \macro{UTSLEN} che possono avere valori diversi. Nel caso di Linux +o \macro{UTSLEN} che possono avere valori diversi.\footnote{Nel caso di Linux \func{uname} corrisponde in realtà a 3 system call diverse, le prime due usano rispettivamente delle lunghezze delle stringhe di 9 e 65 byte; la terza usa anch'essa 65 byte, ma restituisce anche l'ultimo campo, \var{domainname}, con -una lunghezza di 257 byte. +una lunghezza di 257 byte.} \section{Opzioni e configurazione del sistema} @@ -555,11 +556,9 @@ da uno standard, ogni sistema pu configurazione, che, non essendo mai fissi e variando da sistema a sistema, non sono stati inclusi nella standardizzazione della sezione precedente. Per questi occorre, oltre al meccanismo di impostazione, pure un meccanismo di -lettura. - -Affronteremo questi argomenti in questa sezione, insieme alle funzioni che si -usano per il controllo di altre caratteristiche generali del sistema, come -quelle per la gestione dei filesystem e di utenti e gruppi. +lettura. Affronteremo questi argomenti in questa sezione, insieme alle +funzioni che si usano per il controllo di altre caratteristiche generali del +sistema, come quelle per la gestione dei filesystem e di utenti e gruppi. \subsection{La funzione \func{sysctl} ed il filesystem \file{/proc}} @@ -570,23 +569,21 @@ sistema l'implementazione è specifica di Linux; il suo prototipo è: \begin{functions} \headdecl{unistd.h} -\headdecl{linux/unistd.h} -\headdecl{linux/sysctl.h} \funcdecl{int sysctl(int *name, int nlen, void *oldval, size\_t *oldlenp, void *newval, size\_t newlen)} Legge o scrive uno dei parametri di sistema. \bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di - errore, nel qual caso \var{errno} viene impostata ai valori: + errore, nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} - \item[\macro{EPERM}] il processo non ha il permesso di accedere ad uno dei - componenti nel cammino specificato per il parametro, o non ha il permesso - di accesso al parametro nella modalità scelta. + \item[\macro{EPERM}] non si ha il permesso di accedere ad uno dei componenti + nel cammino specificato per il parametro, o di accedere al parametro nella + modalità scelta. \item[\macro{ENOTDIR}] non esiste un parametro corrispondente al nome \param{name}. - \item[\macro{EFAULT}] si è specificato \param{oldlenp} zero quando - \param{oldval} è non nullo. +% \item[\macro{EFAULT}] si è specificato \param{oldlenp} zero quando +% \param{oldval} è non nullo. \item[\macro{EINVAL}] o si è specificato un valore non valido per il parametro che si vuole impostare o lo spazio provvisto per il ritorno di un valore non è delle giuste dimensioni. @@ -594,14 +591,19 @@ Legge o scrive uno dei parametri di sistema. quando non si è specificato sufficiente spazio per ricevere il valore di un parametro. \end{errlist} + ed inoltre \macro{EFAULT}. } \end{functions} I parametri a cui la funzione permettere di accedere sono organizzati in -maniera gerarchica all'interno un albero; 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). +maniera gerarchica all'interno un albero;\footnote{si tenga presente che + includendo solo \file{unistd.h}, saranno definiti solo i parametri generici; + dato che ce ne sono molti specifici dell'implementazione, nel caso di Linux + 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). Ciascun nodo dell'albero è identificato da un valore intero, ed il cammino che arriva ad identificare un parametro specifico è passato alla funzione @@ -753,7 +755,7 @@ significativi sono un \textit{magic number}\footnote{cio riservata al \textit{magic number}.} mentre i 16 meno significativi sono usati per specificare le opzioni; essi sono usati come maschera binaria e vanno impostati con un OR aritmetico della costante \macro{MS\_MGC\_VAL} con i -valori riportati in \ntab. +valori riportati in \tabref{tab:sys_mount_flags}. \begin{table}[htb] \footnotesize @@ -807,7 +809,7 @@ Una volta che non si voglia pi Smonta il filesystem montato sulla directory \param{target}. \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di - fallimento, nel qual caso \var{errno} viene impostata a: + fallimento, nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} \item[\macro{EPERM}] il processo non ha i privilegi di amministratore. \item[\macro{EBUSY}] \param{target} è la directory di lavoro di qualche @@ -862,7 +864,7 @@ informazioni riguardo al filesystem su cui si trova un certo file, sono posto il file specificato. \bodydesc{Le funzioni ritornano 0 in caso di successo e -1 in caso di - errore, nel qual caso \var{errno} viene impostata ai valori: + errore, nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} \item[\macro{ENOSYS}] il filesystem su cui si trova il file specificato non supporta la funzione. @@ -876,8 +878,8 @@ Queste funzioni permettono di ottenere una serie di informazioni generali riguardo al filesystem su cui si trova il file specificato; queste vengono restituite una struttura \param{buf} di tipo \type{statfs} definita come in \ref{fig:sys_statfs}, ed i campi che sono indefiniti per il filesystem in -esame sono impostati a zero. I valori del campo \var{f\_type} sono definiti per -i vari filesystem nei relativi file di header dei sorgenti del kernel da +esame sono impostati a zero. I valori del campo \var{f\_type} sono definiti +per i vari filesystem nei relativi file di header dei sorgenti del kernel da costanti del tipo \macro{XXX\_SUPER\_MAGIC}, dove \macro{XXX} in genere è il nome del filesystem stesso. @@ -1122,7 +1124,8 @@ capacit completa. Per questo motivo l'uso di queste funzioni è deprecato in favore dell'uso di PAM, ci limiteremo pertanto ad elencarle in \tabref{tab:sys_passwd_func}, rimandando chi fosse interessato alle rispettive -man page e al manuale delle \acr{glibc} per i dettagli del loro funzionamento. +pagine di manuale e al manuale delle \acr{glibc} per i dettagli del loro +funzionamento. @@ -1472,10 +1475,10 @@ struct rlimit { \end{figure} In genere il superamento di un limite comporta o l'emissione di un segnale o -il fallimento della system call che lo ha provocato; per far leggere o impostare -i limiti di utilizzo delle risorse da parte di un processo le \acr{glibc} -prevedono due funzioni, \func{getrlimit} e \func{setrlimit}, i cui prototipi -sono: +il fallimento della system call che lo ha provocato; per far leggere o +impostare i limiti di utilizzo delle risorse da parte di un processo le +\acr{glibc} prevedono due funzioni, \func{getrlimit} e \func{setrlimit}, i cui +prototipi sono: \begin{functions} \headdecl{sys/time.h} \headdecl{sys/resource.h} @@ -1490,7 +1493,7 @@ sono: Imposta il limite per la risorsa \param{resource}. \bodydesc{Le funzioni ritornano 0 in caso di successo e -1 in caso di - errore, nel qual caso \var{errno} viene impostata ai valori: + errore, nel qual caso \var{errno} assumerà uno dei valori: \begin{errlist} \item[\macro{EINVAL}] I valori per \param{resource} non sono validi. \item[\macro{EPERM}] Un processo senza i privilegi di amministratore ha @@ -1868,7 +1871,7 @@ sono: Imposta il tempo di sistema. \bodydesc{Entrambe le funzioni restituiscono 0 in caso di successo e -1 in - caso di errore, nel qual caso \var{errno} può assumere il valori + caso di errore, nel qual caso \var{errno} può assumere i valori \macro{EINVAL} \macro{EFAULT} e per \func{settimeofday} anche \macro{EPERM}.} \end{functions} @@ -2372,8 +2375,8 @@ prima funzione che si pu \bodydesc{La funzione ritorna il puntatore alla stringa col messaggio di errore in caso di successo e \macro{NULL} in caso di errore, nel qual caso - \var{errno} sarà impostata a \macro{EINVAL} se si è specificato un numero di - errore non valido.} + \var{errno} assumerà il valore \macro{EINVAL} se si è specificato un + numero di errore non valido.} \end{prototype} In generale \func{strerror} viene usata passando \var{errno} come parametro; @@ -2388,7 +2391,7 @@ programma e che \func{strerror}; per questo motivo non è rientrante e nel caso si usino i thread è provvista\footnote{questa funzione è la versione prevista dalle \acr{glibc}, ed effettivamente definita in \file{string.h}, ne esiste una - analoga nello standard SUSv3 (quella riportata dalla man page), che + analoga nello standard SUSv3 (quella riportata dalla pagina di manuale), che restituisce \code{int} al posto di \code{char *}, e che tronca la stringa restituita a \param{size}.} una versione apposita: \begin{prototype}{string.h}