%% system.tex
%%
-%% Copyright (C) 2000-2018 Simone Piccardi. Permission is granted to
+%% Copyright (C) 2000-2019 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 "Un preambolo",
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}
\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
\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
\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
\begin{table}[htb]
\centering
\footnotesize
- \begin{tabular}[c]{|l|p{8cm}|}
+ \begin{tabular}[c]{|l|p{9cm}|}
\hline
\textbf{Macro}&\textbf{Significato}\\
\hline
\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
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
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
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
\index{file!filesystem~\texttt {/proc}!definizione|)}
-
-
\section{La gestione del sistema}
\label{sec:sys_management}
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
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
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
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}
time} e \textit{process time}, secondo le seguenti definizioni:
\begin{basedescript}{\desclabelwidth{1.5cm}\desclabelstyle{\nextlinelabel}}
-\item[\textit{calendar time}] detto anche \textsl{tempo di calendario},
- \textsl{tempo d'orologio} o \textit{tempo reale}. Si tratta di un
- tempo assoluto o di un intervallo di tempo come lo intende
- normalmente per le misure fatte con un orologio. Per esprimere
- questo tempo è stato riservato il tipo \type{time\_t}, e viene
- tradizionalmente misurato in secondi a partire dalla mezzanotte del
- primo gennaio 1970, data che viene chiamata \textit{the Epoch}.
+\item[\textit{calendar time}] detto anche \textsl{tempo di calendario},
+ \textsl{tempo d'orologio} o \textit{tempo reale}. Si tratta di un tempo
+ assoluto o di un intervallo di tempo come lo intende normalmente per le
+ misure fatte con un orologio. Per esprimere questo tempo è stato riservato
+ il tipo \type{time\_t}, e viene tradizionalmente misurato nel cosiddetto
+ \itindex{unix-time} \textit{unix-time}, espresso in secondi a partire dalla
+ mezzanotte del primo gennaio 1970, data che viene chiamata \textit{the
+ Epoch}.
\item[\textit{process time}] detto anche \textsl{tempo di processore} o
\textsl{tempo di CPU}. Si tratta del tempo impiegato da un processore
% 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