X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=system.tex;h=691edbde5eac62625b6c8b7996fd8612b08de46c;hp=c2d28b116a8ddb3bab601bb88b98a40aad8d1748;hb=48fd525f70c8c9b06311cf120804d0f9d54e04f2;hpb=4d6ab95146f34b82becf09bc14f882eedfae285a diff --git a/system.tex b/system.tex index c2d28b1..691edbd 100644 --- a/system.tex +++ b/system.tex @@ -8,6 +8,7 @@ stesso, quelle per il controllo dell'uso delle risorse da parte dei processi, quelle per la gestione dei tempi e degli errori. + \section{La lettura delle caratteristiche del sistema} \label{sec:sys_characteristics} @@ -469,16 +470,19 @@ suo prototipo \subsection{La funzione \func{uname}} \label{sec:sys_uname} -Una altra funzione che si può utilizzare per raccogliere informazioni riguardo -al sistema ed al computer su cui esso sta girando è \func{uname}, il suo -prototipo è: +Una altra funzione che si può utilizzare per raccogliere informazioni sia +riguardo al sistema che al computer su cui esso sta girando è \func{uname}, il +suo prototipo è: \begin{prototype}{sys/utsname.h}{int uname(struct utsname *info)} 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 settata a \macro{EFAULT}.} \end{prototype} -\noindent la struttura è anch'essa definita in \file{sys/utsname.h} come: + +La funzione, che viene usata dal comando \cmd{umane}, restituisce le +informazioni richieste nella struttura \param{info}, anche questa struttura è +definita in \file{sys/utsname.h} come: \begin{lstlisting}[labelstep=0,frame=,indent=1cm]{} struct utsname { char sysname[_UTSNAME_LENGTH]; @@ -491,35 +495,135 @@ prototipo #endif }; \end{lstlisting} -ed i suoi menbri indicano rispettivamente: +e le informazioni memorizzate nei suoi membri indicano rispettivamente: \begin{itemize*} \item il nome del systema operativo; \item il nome della release del kernel; \item il nome della versione del kernel; \item il tipo di macchina in uso; \item il nome della stazione; -\item il nome del domino (è una estensione recente). +\item il nome del domino. \end{itemize*} - +(l'ultima informazione è stata aggiunta di recente e non è prevista dallo +standard POSIX). \section{Opzioni e configurazione del sistema} \label{sec:sys_config} -In questa sezione prenderemo in esame le funzioni per leggere e settare i vari -parametri di configurazione del sistema. +Come abbiamo accennato nella sezione precedente, non tutti i limiti che +caratterizzano il sistema sono fissi, o perlomeno non lo sono in tutte le +implementazioni. Finora abbiamo visto come si può fare per leggerli, ci manca +di esaminare il meccanismo che permette, quando questi possono variare durante +l'esecuzione del sistema, di modificarli. +Inoltre, al di la di quelli che possono essere limiti caratteristici previsti +da uno standard, ogni sistema può avere una sua serie di altri parametri di +configurazione, che non essendo mai fissi, non sono stati inclusi nella +standardizzazione della sezione precedente, e per i quali occorre, oltre al +meccanismo di settaggio, pure un meccanismo di lettura. -\subsection{La funzione \func{sysctl}} +Affronteremo questi argomenti in questa sezione, insieme alle funzioni che si +usano per la gestione ed il controllo dei filesystem. + + +\subsection{La funzione \func{sysctl} ed il filesystem \file{/proc}} \label{sec:sys_sysctl} -\subsection{Il filesystem \file{/proc}} -\label{sec:sys_proc_files} +La funzione che permette la lettura ed il settaggio dei parametri del kernel è +\func{sysctl}, è una funzione derivata da BSD4.4, ma 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)} + + +\bodydesc{La funzione restituisce 0 in caso di successo e -1 in caso di + errore, nel qual caso \var{errno} viene settato ai 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{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{EINVAL}] o si è specificato un valore non valido per il + parametro che si vuole settare o lo spazio provvisto per il ritorno di un + valore non è delle giuste dimensioni. + \item[\macro{ENOMEM}] talvolta viene usato più correttamente questo errore + quando non si è specificato sufficiente spazio per ricevere il valore di un + parametro. + \end{errlist} +} +\end{functions} + +I parametri a cui la funzione permettere di accedere sono organizzati in +maniera gerarchica ad albero, e per accedere ad uno di essi occorre +specificare un cammino attraverso i vari nodi dell'albero, in maniera analoga +a come si specifica un pathname (da cui l'uso alternativo del filesystem +\file{/proc} che vedremo dopo). + +Ciascun nodo è identificato da un valore intero, ed il cammino che arriva ad +identificare un parametro specifico è passato attraverso l'array \param{name}, +di lunghezza \param{nlen}, che contiene la sequenza dei vari nodi da +attraversare. Il formato del valore di un parametro dipende dallo stesso e può +essere un intero, una stringa o anche una struttura complessa. + +L'indirizzo a cui il valore deve essere letto è specificato da +\param{oldvalue}, e lo spazio ivi disponibile è specificato da \param{oldlenp} +(passato come puntatore per avere indietro la dimensione effettiva di quanto +letto); il valore che si vuole scrivere è passato in \param{newval} e la sua +dimensione in \param{newlen}. + +Si può effettuare anche una lettura e scrittura simultanea, nel qual caso il +valore letto è quello precedente alla scrittura. + +I parametri accessibili attraverso questa funzione sono moltissimi, e possono +essere trovati in \file{sysctl.h}, essi inoltre dipendono anche dallo stato +corrente del kernel (ad esempio dai moduli che sono stati caricati nel +sistema) e in genere i loro nomi possono variare da una versione di kernel +all'altra; per questo è sempre il caso di evitare l'uso di \func{sysctl} +quando esistono modalità alternative per ottenere le stesse informazioni, +alcuni esempi di parametri ottenibili sono: +\begin{itemize*} +\item il nome di dominio +\item i parametri del meccanismo di \textit{paging}. +\item il filesystem montato come radice +\item la data di compilazione del kernel +\item i parametri dello stack TCP +\item il numero massimo di file aperti +\end{itemize*} + +Come accennato in Linux si ha una modalità alternativa per accedere alle +stesse informazioni di \func{sysctl} attaverso l'uso del filesystem +\file{/proc}. Questo è un filesystem virtuale, generato direttamente dal +kernel, che non fa riferimento a nessun dispositivo fisico, ma presenta in +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 +speficando 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. + +Alcune delle corrispondenze con i valori di \func{sysctl} sono riportate nei +commenti in \file{linux/sysctl.h}, la informazione disponibile in +\file{/proc/sys} è riportata inoltre nella documentazione inclusa nei sorgenti +del kernel, nella directory \file{Documentation/sysctl}. \subsection{La configurazione dei filesystem} \label{sec:sys_file_config} + + + \subsection{La funzione \func{statfs}} \label{sec:sys_file_stafs} @@ -539,6 +643,8 @@ sul loro utilizzo. \label{sec:sys_resource_use} + + \subsection{Limiti sulle risorse} \label{sec:sys_resource_limit}