X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=system.tex;h=1572830cfcf158113051ad811ee6444a661aab0e;hp=9f07508f66e22de651a6092ec88c39c42758c40d;hb=aef0d7a31187dfbb7574f477636e75fc3c8c81ef;hpb=34a2be64c8f61965c3dae12809cba72f37a91ebb diff --git a/system.tex b/system.tex index 9f07508..1572830 100644 --- a/system.tex +++ b/system.tex @@ -75,7 +75,7 @@ avere un valore minimo di 8. \hline \hline \macro{MB\_LEN\_MAX}& 16 & massima dimensione di un - carattere multibyte\\ + carattere esteso\\ \macro{CHAR\_BIT} & 8 & bit di \type{char}\\ \macro{UCHAR\_MAX}& 255 & massimo di \type{unsigned char}\\ \macro{SCHAR\_MIN}& -128 & minimo di \type{signed char}\\ @@ -340,7 +340,7 @@ spiegazioni, si pu In generale ogni limite o caratteristica del sistema per cui è definita una macro, sia dagli standard ANSI C e ISO C90, che da POSIX.1 e POSIX.2, può essere ottenuto attraverso una chiamata a \func{sysconf}. Il valore si otterrà -speficando come valore del parametro \param{name} il nome ottenuto aggiungendo +specificando come valore del parametro \param{name} il nome ottenuto aggiungendo \code{\_SC\_} ai nomi delle macro definite dai primi due, o sostituendolo a \code{\_POSIX\_} per le macro definite dagli gli altri due. @@ -497,7 +497,7 @@ definita in \file{sys/utsname.h} come: \end{lstlisting} e le informazioni memorizzate nei suoi membri indicano rispettivamente: \begin{itemize*} -\item il nome del systema operativo; +\item il nome del sistema operativo; \item il nome della release del kernel; \item il nome della versione del kernel; \item il tipo di macchina in uso; @@ -524,7 +524,8 @@ standardizzazione della sezione precedente, e per i quali occorre, oltre al meccanismo di settaggio, pure un meccanismo di lettura. Affronteremo questi argomenti in questa sezione, insieme alle funzioni che si -usano per la gestione ed il controllo dei filesystem. +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}} @@ -587,8 +588,8 @@ 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: +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}. @@ -599,14 +600,14 @@ alcuni esempi di parametri ottenibili sono: \end{itemize*} Come accennato in Linux si ha una modalità alternativa per accedere alle -stesse informazioni di \func{sysctl} attaverso l'uso del filesystem +stesse informazioni di \func{sysctl} attraverso 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 +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 @@ -618,7 +619,7 @@ commenti in \file{linux/sysctl.h}, la informazione disponibile in del kernel, nella directory \file{Documentation/sysctl}. -\subsection{La configurazione dei filesystem} +\subsection{La gestione delle proprietà dei filesystem} \label{sec:sys_file_config} Come accennato in \secref{sec:file_organization} per poter accedere ai file @@ -638,7 +639,7 @@ sulla directory \param{target}. fallimento, nel qual caso gli errori comuni a tutti i filesystem che possono essere restituiti in \var{errno} sono: \begin{errlist} - \item[\macro{EPERM}] il processo non ha i provilegi di amministratore. + \item[\macro{EPERM}] il processo non ha i privilegi di amministratore. \item[\macro{ENODEV}] \param{filesystemtype} non esiste o non è configurato nel kernel. \item[\macro{ENOTBLK}] non si è usato un \textit{block device} per @@ -663,23 +664,50 @@ sulla directory \param{target}. \macro{ENAMETOOLONG}, \macro{ENOENT} o \macro{ELOOP}.} \end{prototype} + La funzione monta sulla directory \param{target}, detta \textit{mount point}, -il filesystem contenuto in \param{source}. Di norma questo è un file di -dispositivo che fa riferimento al disco (o al device a blocchi) che deve -essere montato, ma può anche essere un file normale che contiene un -filesystem, (che può essere montato \textit{in loopback}) o anche una -directory. Dal kernel 2.4.x infatti è divenuto possibile sia spostare -atomicamente un \textit{mount point} da una directory ad un'altra, che montare -in più punti lo stesso filesystem. - -Con \param{filesystemtype} si indica il tipo di filesystem (che -deve essere supportato dal kernel) indicato dalla stringa che lo identifica -(che per quelli supportati è mantenuta in \file{/proc/filesystems}). - -Il parametro \param{mountflags} serve invece per specificare le opzioni di -montaggio, esso è passato come intero a 32 bit i cui 16 più significativi -devono essere \code{0xC0ED} mentre i 16 meno significativi costituiscono una -maschera specificabile con un and binario dei valori riportati in \ntab. +il filesystem contenuto in \param{source}. In generale un filesystem è +contenuto su un disco, e l'operazione di montaggio corrisponde a rendere +visibile al sistema il contenuto del suddetto disco, identificato attraverso +il file di dispositivo ad esso associato. + +Ma la struttura del virtual filesystem vista in \secref{sec:file_vfs} è molto +più flessibile e può essere usata anche per oggetti diversi da un disco. Ad +esempio usando il \textit{loop device} si può montare un file qualunque (come +l'immagine di un CD-ROM o di un floppy) che contiene un filesystem, inoltre +alcuni filesystem, come \file{proc} o \file{devfs} sono del tutto virtuali, i +loro dati sono generati al volo ad ogni lettura, e passati al kernel ad ogni +scrittura. + +Il tipo di filesystem è specificato da \param{filesystemtype}, che deve essere +una delle stringhe riportate in \file{/proc/filesystems}, che contiene +l'elenco dei filesystem supportati dal kernel; nel caso si sia indicato uno +dei filesystem virtuali, il contenuto di \param{source} viene ignorato. + +Dopo l'esecuzione della funzione il contenuto del filesystem viene resto +disponibile nella directory specificata come \textit{mount point}, il +precedente contenuto di detta directory viene mascherato dal contenuto della +directory radice del filesystem montato. + +Dal kernel 2.4.x inoltre è divenuto possibile sia spostare atomicamente un +\textit{mount point} da una directory ad un'altra, che montare in diversi +\textit{mount point} lo stesso filesystem, che montare più filesystem sullo +stesso \textit{mount point} (nel qual caso vale quanto appena detto, e solo il +contenuto dell'ultimo filesystem montato sarà visibile). + +Ciascun filesystem è dotato di caratteristiche specifiche che possono essere +attivate o meno, alcune di queste sono generali (anche se non è detto siano +disponibili in ogni filesystem), e vengono specificate come opzioni di +montaggio con l'argomento \param{mountflags}. + +In Linux \param{mountflags} deve essere un intero a 32 bit i cui 16 più +significativi sono un \textit{magic number}\footnote{cioè un numero speciale + usato come identificativo, che nel caso è \code{0xC0ED}; si può usare la + costante \macro{MS\_MGC\_MSK} per ottenere la parte di \param{mountflags} + riservata al \textit{magic number}.} mentre i 16 meno significativi sono +usati per specificare le opzioni; essi sono usati come maschera binaria e +vanno settati con un OR aritmetico della costante \macro{MS\_MGC\_VAL} con i +valori riportati in \ntab. \begin{table}[htb] \centering @@ -688,18 +716,22 @@ maschera specificabile con un and binario dei valori riportati in \ntab. \textbf{Parametro} & \textbf{Valore}&\textbf{Significato}\\ \hline \hline - \macro{MS\_RDONLY} & 1 & montain sola lettura\\ - \macro{MS\_NOSUID} & 2 & ignora i bit \acr{suig} e \acr{sgid}\\ + \macro{MS\_RDONLY} & 1 & monta in sola lettura\\ + \macro{MS\_NOSUID} & 2 & ignora i bit \acr{suid} e \acr{sgid}\\ \macro{MS\_NODEV} & 4 & impedisce l'accesso ai file di dispositivo\\ \macro{MS\_NOEXEC} & 8 & impedisce di eseguire programmi \\ \macro{MS\_SYNCHRONOUS}& 16 & abilita la scrittura sincrona \\ \macro{MS\_REMOUNT} & 32 & rimonta il filesystem cambiando i flag\\ \macro{MS\_MANDLOCK} & 64 & consente il \textit{mandatory locking} (vedi - \secref{sec:file_mand_locking})\\ + \secref{sec:file_mand_locking})\\ + \macro{S\_WRITE} & 128 & scrive normalmente \\ + \macro{S\_APPEND} & 256 & consente la scrittura solo in \textit{append + mode} (vedi \secref{sec:file_sharing})\\ + \macro{S\_IMMUTABLE} & 512 & impedisce che si possano modificare i file \\ \macro{MS\_NOATIME} &1024 & non aggiorna gli \textit{access time} (vedi - \secref{sec:file_file_times})\\ + \secref{sec:file_file_times})\\ \macro{MS\_NODIRATIME}&2048 & non aggiorna gli \textit{access time} delle - directory\\ + directory\\ \macro{MS\_BIND} &4096 & monta il filesystem altrove\\ \macro{MS\_MOVE} &8192 & sposta atomicamente il punto di montaggio \\ \hline @@ -708,13 +740,19 @@ maschera specificabile con un and binario dei valori riportati in \ntab. \label{tab:sys_mount_flags} \end{table} -Infine l'aromento \param{data} serve per passare ulteriori informazioni che -possono essere necessarie ai vari filesystem e che variano da filesystem a -filesystem. +Per il settaggio delle caratteristiche particolari di ciascun filesystem si +usa invece l'argomento \param{data} che serve per passare le ulteriori +informazioni necessarie, che ovviamente variano da filesystem a filesystem. + +La funzione \func{mount} può essere utilizzata anche per effettuare il +\textsl{rimontaggio} di un filesystem, cosa che permette di cambiarne al volo +alcune delle caratteristiche di funzionamento (ad esempio passare da sola +lettura a lettura/scrittura). Questa operazione è attivata attraverso uno dei +bit di \param{mountflags}, \macro{MS\_REMOUNT}, che se settato specifica che +deve essere effettuato il rimontaggio del filesystem (con le opzioni +specificate dagli altri bit), anche in questo caso il valore di \param{source} +viene ignorato. -Si tenga presente inoltre che, sempre a partire dal kernel 2.4.x, è possibile -sovrapporre più montaggi su una stessa directory, nel qual caso si vedrà -sempre l'ultimo filesystem che è stato montato. Una volta che non si voglia più utilizzare un certo filesystem è possibile \textsl{smontarlo} usando la funzione \func{umount}, il cui prototipo è: @@ -725,7 +763,7 @@ Una volta che non si voglia pi \bodydesc{La funzione ritorna 0 in caso di successo e -1 in caso di fallimento, nel qual caso \var{errno} viene settata a: \begin{errlist} - \item[\macro{EPERM}] il processo non ha i provilegi di amministratore. + \item[\macro{EPERM}] il processo non ha i privilegi di amministratore. \item[\macro{EBUSY}] \param{target} è la directory di lavoro di qualche processo, o contiene dei file aperti, o un altro mount point. \end{errlist} @@ -733,10 +771,19 @@ Una volta che non si voglia pi \macro{ENAMETOOLONG}, \macro{ENOENT} o \macro{ELOOP}.} \end{prototype} \noindent la funzione prende il nome della directory su cui il filesystem è -montato e non il file che è stato montato, in quanto con il kernel 2.4.x è -possibile montare lo stesso dispositivo in più punti; inoltre nel caso più di -un filesystem sia stato montato sullo stesso \textit{mount point} viene -smontato quello che è stato montato per ultimo. +montato e non il file o il dispositivo che è stato montato\footnote{questo è + vero a partire dal kernel 2.3.99-pre7, prima esistevano due chiamate + separate e la funzione poteva essere usata anche specificando il file di + dispositivo.}, in quanto con il kernel 2.4.x è possibile montare lo stesso +dispositivo in più punti. Nel caso più di un filesystem sia stato montato +sullo stesso \textit{mount point} viene smontato quello che è stato montato +per ultimo. + +Linux provvede inoltre una seconda funzione \func{umount2}, che, in alcuni +casi, permette di forzare lo smontaggio di un filesystem nei casi in cui mount +fallirebbe; il suo prototipo è: + + Due funzioni, utili per ottenere in maniera diretta informazioni riguardo al filesystem su cui si trova un certo file, sono \func{statfs} e \func{fstatfs},