X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=system.tex;fp=system.tex;h=84dad32d73be5035e83741fbb7dc9fd75fca43e2;hp=bd60d40fb574b7261ae83d92750ec402e9c835e3;hb=fa15a3f1ecd64efd8440e46d398fd9976abc3d25;hpb=89048a8614cd82de7976ac1859a905b2ff182b50 diff --git a/system.tex b/system.tex index bd60d40..84dad32 100644 --- a/system.tex +++ b/system.tex @@ -32,14 +32,14 @@ l'implementazione del kernel e delle librerie, le opzioni di configurazione. Il kernel inoltre mette a disposizione l'accesso ad alcuni parametri che possono modificarne il comportamento. -La definizione di queste caratteristiche ed il tentativo di provvedere dei +La definizione di queste caratteristiche ed il tentativo di fornire dei 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. -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 e prenderemo in esame le modalità con cui è -possibile intervenire sui parametri del kernel. +sono dovute confrontare, con risultati spesso tutt'altro che chiari. 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, e prenderemo in esame le modalità con cui è possibile +intervenire sui parametri del kernel. \subsection{Limiti e caratteristiche del sistema} \label{sec:sys_limits} @@ -58,16 +58,17 @@ sono necessari due tipi diversi di funzionalità: \item la possibilità di determinare limiti ed opzioni durante l'esecuzione. \end{itemize*} -La prima funzionalità si può ottenere includendo gli opportuni header file che -contengono le costanti necessarie definite come macro di preprocessore, per la -seconda invece sono ovviamente necessarie delle funzioni. La situazione è -complicata dal fatto che ci sono molti casi in cui alcuni di questi limiti -sono fissi in un'implementazione mentre possono variare in un altra: tutto -questo crea una ambiguità che non è sempre possibile risolvere in maniera -chiara. In generale quello che succede è che quando i limiti del sistema sono -fissi essi vengono definiti come macro di preprocessore nel file -\headfile{limits.h}, se invece possono variare, il loro valore sarà ottenibile -tramite la funzione \func{sysconf} (che esamineremo a breve). +La prima funzionalità si può ottenere includendo gli opportuni file di +intestazione che contengono le costanti necessarie definite come macro di +preprocessore, per la seconda invece sono ovviamente necessarie delle +funzioni. La situazione è complicata dal fatto che ci sono molti casi in cui +alcuni di questi limiti sono fissi in un'implementazione mentre possono +variare in un altra: tutto questo crea una ambiguità che non è sempre +possibile risolvere in maniera chiara. In generale quello che succede è che +quando i limiti del sistema sono fissi essi vengono definiti come macro di +preprocessore nel file \headfile{limits.h}, se invece possono variare, il loro +valore sarà ottenibile tramite la funzione \func{sysconf} (che esamineremo a +breve). \begin{table}[htb] \centering @@ -151,7 +152,7 @@ sez.~\ref{sec:sys_file_limits}. \begin{table}[htb] \centering \footnotesize - \begin{tabular}[c]{|l|r|p{8cm}|} + \begin{tabular}[c]{|l|r|p{9cm}|} \hline \textbf{Costante}&\textbf{Valore}&\textbf{Significato}\\ \hline @@ -187,7 +188,7 @@ file, riportate in tab.~\ref{tab:sys_file_macro}. \begin{table}[htb] \centering \footnotesize - \begin{tabular}[c]{|l|r|p{8cm}|} + \begin{tabular}[c]{|l|r|p{9cm}|} \hline \textbf{Costante}&\textbf{Valore}&\textbf{Significato}\\ \hline @@ -247,7 +248,7 @@ valori ottenuti da \func{sysconf}. \begin{table}[htb] \centering \footnotesize - \begin{tabular}[c]{|l|p{8cm}|} + \begin{tabular}[c]{|l|p{9cm}|} \hline \textbf{Macro}&\textbf{Significato}\\ \hline @@ -370,12 +371,12 @@ relative spiegazioni, si può trovare nel manuale della \acr{glibc}. \end{table} 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 nome della -costante da utilizzare come valore dell'argomento \param{name} si otterrà -aggiungendo \code{\_SC\_} ai nomi delle costanti definite dai primi due -standard (quelle di tab.~\ref{tab:sys_generic_macro}), o sostituendolo a -\code{\_POSIX\_} per le costanti definite dagli altri due standard (quelle di +macro, sia da ANSI C e ISO C90 che da POSIX.1 e POSIX.2, può essere ottenuto +attraverso una chiamata a \func{sysconf}. Il nome della costante da utilizzare +come valore dell'argomento \param{name} si otterrà aggiungendo \code{\_SC\_} +ai nomi delle costanti definite dai primi due standard (quelle di +tab.~\ref{tab:sys_generic_macro}), o sostituendolo a \code{\_POSIX\_} per le +costanti definite dagli altri due standard (quelle di tab.~\ref{tab:sys_posix1_general}). In linea teorica si dovrebbe fare uso di \func{sysconf} solo quando la @@ -516,8 +517,10 @@ BSD4.4 ed introdotta su Linux a partire dal kernel 1.3.57, ma oggi il suo uso esistere, ma non dispone più di una interfaccia nella \acr{glibc} ed il suo utilizzo può essere effettuato solo tramite \func{syscall}, ma di nuovo questo viene sconsigliato in quanto la funzionalità non è più mantenuta e molto -probabilmente sarà rimossa nel prossimo futuro. Per questo motivo eviteremo di -trattarne i particolari. +probabilmente sarà rimossa nel prossimo futuro.\footnote{a partire dal kernel + 2.6.34 la funzione viene inserita nella compilazione del kernel previa + esplicita richiesta, ed il suo uso produce avvertimenti nei log del kernel.} +Per questo motivo eviteremo di trattarne i particolari. Lo scopo di \funcm{sysctl} era quello di fornire ai programmi una modalità per modificare i parametri di sistema. Questi erano organizzati in maniera @@ -531,33 +534,36 @@ moduli che sono stati caricati nel sistema. Inoltre non essendo standardizzati i loro nomi possono variare da una versione di kernel all'altra, alcuni esempi di questi parametri 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 +\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, +\item il numero massimo di processi, +\item i parametri del \textit{SystemV IPC} (vedi sez.~\ref{sec:ipc_sysv}). \end{itemize*} - - +%\noindent e molti altri che abbiamo già incontrato \index{file!filesystem~\texttt {/proc}!definizione|(} Dato che fin dall'inizio i parametri erano organizzati in una struttura -albero, è parso naturale rimappare questa organizzazione utilizzando il -filesystem \file{/proc}. Questo è un filesystem completamente virtuale, il cui -contenuto è generato direttamente dal kernel, che non fa riferimento a nessun -dispositivo fisico, ma presenta in forma di file e directory i dati di alcune -delle strutture interne del kernel stesso. Il suo utilizzo principale, come -denuncia il nome stesso, è quello di fornire una interfaccia per ottenere i -dati relativi ai processi (venne introdotto a questo scopo su BSD), ma nel -corso del tempo il suo uso è stato ampliato. +albero, è parso naturale riportare questa organizzazione all'interno del +filesystem \file{/proc}. Questo è un filesystem virtuale il cui contenuto è +generato direttamente dal kernel, che non fa riferimento a nessun dispositivo +fisico, ma presenta in forma di file e directory i dati di alcune delle +strutture interne del kernel. Il suo utilizzo principale, come denuncia il +nome stesso, è quello di fornire una interfaccia per ottenere i dati relativi +ai processi (venne introdotto a questo scopo su BSD), ma nel corso del tempo +il suo uso è stato ampliato. All'interno di questo filesystem sono pertanto presenti una serie di file che riflettono il contenuto dei parametri del kernel (molti dei quali accessibili in sola lettura) e in altrettante directory, nominate secondo il relativo \ids{PID}, vengono mantenute le informazioni relative a ciascun processo -attivo nel sistema. +attivo nel sistema (abbiamo già incontrato questa caratteristica in +sez.~\ref{sec:file_openat} per accedere ai filedescriptor del processo +stesso). In particolare l'albero dei valori dei parametri di sistema impostabili con \func{sysctl} viene presentato in forma di una gerarchia di file e directory a @@ -579,8 +585,8 @@ l'accesso, con altrettante corrispondenze ai file presenti in ma vista la assoluta naturalità dell'interfaccia, e la sua maggiore efficienza, nelle versioni più recenti del kernel questa è diventata la modalità canonica per modificare i parametri del kernel, evitando di dover -ricorrere all'uso di una \textit{system call} specifica che pur essendo ancora -presente, prima o poi verrà eliminata. +ricorrere all'uso di una \textit{system call} specifica, che pur essendo +ancora presente prima o poi verrà eliminata. Nonostante la semplificazione nella gestione ottenuta con l'uso di \file{/proc/sys} resta il problema generale di conoscere il significato di @@ -661,8 +667,6 @@ trovano sotto la directory \file{/proc/sys/kernel/}. \index{file!filesystem~\texttt {/proc}!definizione|)} - - \section{La gestione del sistema} \label{sec:sys_management} @@ -681,11 +685,11 @@ Tradizionalmente le informazioni utilizzate nella gestione di utenti e gruppi directory, ecc.) venivano registrate all'interno dei due file di testo \conffiled{/etc/passwd} ed \conffiled{/etc/group}, il cui formato è descritto dalle relative pagine del manuale\footnote{nella quinta sezione, quella dei - file di configurazione (esistono comandi corrispondenti), una trattazione - sistemistica dell'intero argomento coperto in questa sezione si consulti - sez.~4.3 di \cite{AGL}.} e tutte le funzioni che richiedevano l'accesso a -queste informazione andavano a leggere direttamente il contenuto di questi -file. + file di configurazione, dato che esistono comandi corrispondenti; per una + trattazione sistemistica dell'intero argomento coperto in questa sezione si + consulti sez.~4.3 di \cite{AGL}.} e tutte le funzioni che richiedevano +l'accesso a queste informazione andavano a leggere direttamente il contenuto +di questi file. In realtà oltre a questi due file da molto tempo gran parte dei sistemi unix-like usano il cosiddetto sistema delle \textit{shadow password} che @@ -701,26 +705,29 @@ la maggior parte delle distribuzioni di GNU/Linux usa la libreria PAM (sigla che sta per \textit{Pluggable Authentication Method}) che fornisce una interfaccia comune per i processi di autenticazione, svincolando completamente le singole applicazioni dai dettagli del come questa viene eseguita e di dove -vengono mantenuti i dati relativi. Si tratta di un sistema modulare, in cui è -possibile utilizzare anche più meccanismi insieme, diventa così possibile -avere vari sistemi di riconoscimento (biometria, chiavi hardware, ecc.), -diversi formati per le password e diversi supporti per le informazioni. Il -tutto avviene in maniera trasparente per le applicazioni purché per ciascun -meccanismo si disponga della opportuna libreria che implementa l'interfaccia -di PAM. +vengono mantenuti i dati relativi. + +Si tratta di un sistema modulare, in cui è possibile utilizzare anche più +meccanismi insieme, diventa così possibile avere vari sistemi di +riconoscimento (biometria, chiavi hardware, ecc.), diversi formati per le +password e diversi supporti per le informazioni. Il tutto avviene in maniera +trasparente per le applicazioni purché per ciascun meccanismo si disponga +della opportuna libreria che implementa l'interfaccia di PAM. Dall'altra parte, il diffondersi delle reti e la necessità di centralizzare le informazioni degli utenti e dei gruppi per insiemi di macchine e servizi all'interno di una stessa organizzazione, in modo da mantenere coerenti i dati, ha portato anche alla necessità di poter recuperare e memorizzare dette informazioni su supporti diversi dai file citati, introducendo il sistema del -\textit{Name Service Switch} (che tratteremo brevemente in -sez.~\ref{sec:sock_resolver}) dato che la sua applicazione è cruciale nella +\textit{Name Service Switch}, che tratteremo brevemente in +sez.~\ref{sec:sock_resolver} dato che la sua applicazione è cruciale nella procedura di risoluzione di nomi di rete. In questo paragrafo ci limiteremo comunque a trattare le funzioni classiche per la lettura delle informazioni relative a utenti e gruppi tralasciando -completamente quelle relative all'autenticazione. +completamente quelle relative all'autenticazione.\footnote{la cui + programmazione ormai attiene all'uso dell'interfaccia di PAM, che va al di + la dello scopo di questo testo.} % Per questo non tratteremo % affatto l'interfaccia di PAM, ma approfondiremo invece il sistema del % \textit{Name Service Switch}, un meccanismo messo a disposizione dalla @@ -814,7 +821,7 @@ illustrato in sez.~\ref{sec:sys_errno}) per cui se lo si vuole utilizzare è opportuno inizializzarlo a zero prima di invocare le funzioni per essere sicuri di non avere un residuo di errore da una chiamata precedente. Il non aver trovato l'utente richiesto infatti può essere dovuto a diversi motivi (a -partire dal fatto che non esista) per cui si possono ottenere i valori di +partire dal fatto che non esista) per cui si possono ottenere i codici di errore più vari a seconda dei casi. Del tutto analoghe alle precedenti sono le funzioni \funcd{getgrnam} e @@ -970,15 +977,15 @@ informazioni sono descritte in dettaglio nel manuale della \acr{glibc}. Questi file non devono mai essere letti direttamente, ma le informazioni che contengono possono essere ricavate attraverso le opportune funzioni di -libreria. Queste sono analoghe alle precedenti funzioni (vedi -tab.~\ref{tab:sys_passwd_func}) usate per accedere al registro degli utenti, -solo che in questo caso la struttura del registro della \textsl{contabilità} è -molto più complessa, dato che contiene diversi tipi di informazione. +libreria. Queste sono analoghe alle precedenti funzioni usate per accedere al +registro degli utenti (vedi tab.~\ref{tab:sys_passwd_func}), solo che in +questo caso la struttura del registro della \textsl{contabilità} è molto più +complessa, dato che contiene diversi tipi di informazione. Le prime tre funzioni, \funcd{setutent}, \funcd{endutent} e \funcd{utmpname} servono rispettivamente a aprire e a chiudere il file che contiene il registro della \textsl{contabilità} degli, e a specificare su quale file esso viene -mantenuto. I loro prototipi sono: +mantenuto; i loro prototipi sono: \begin{funcproto}{ \fhead{utmp.h} @@ -3270,7 +3277,7 @@ che errori relativi alla stessa linea non vengano ripetuti. % LocalWords: memory mlockall MAP LOCKED shmctl MSGQUEUE attr NICE nice MADV % LocalWords: madvise WILLNEED RTPRIO sched setscheduler setparam scheduling % LocalWords: RTTIME execve kb prlimit pid new old ESRCH EUSERS refresh high -% LocalWords: resolution HRT jiffies strptime +% LocalWords: resolution HRT jiffies strptime pre l'I value argument %%% Local Variables: %%% mode: latex