X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=session.tex;h=f1b009b2a8f312f82d87c37707b4303d06d98697;hp=2deb5d6ed320f96f794317a208431c556496d2fb;hb=813faeabc683ae5e07061dea550d48af557ca406;hpb=51e3c35a5012dba879b2cd3af28f08fddd6dc68c diff --git a/session.tex b/session.tex index 2deb5d6..f1b009b 100644 --- a/session.tex +++ b/session.tex @@ -1,13 +1,18 @@ - \chapter{Sessioni di lavoro e terminali} +\chapter{Terminali e sessioni di lavoro} \label{cha:session} -Esamineremo in questo capitolo i concetti base del sistema delle sessioni di -lavoro, vale a dire il metodo con cui il kernel gestisce l'accesso concorrente -al sistema da parte di più utenti, permettendo loro di eseguire più programmi -in contemporanea. Nella seconda parte del capitolo tratteremo poi il -funzionamento dell'I/O su terminale, e delle varie peculiarità che esso viene -ad assumere a causa del suo stretto legame con le modalità di accesso al -sistema da parte degli utenti. +I terminali per lungo tempo tempo sono stati l'unico modo per accedere al +sistema, per questo anche oggi che esistono molte altre interfacce, essi +continuano a coprire un ruolo particolare, restando strettamente legati al +funzionamento dell'interfaccia a linea di comando. + +Mella prima parte del capitolo esamineremo i concetti base del sistema delle +sessioni di lavoro, vale a dire il metodo con cui il kernel permette ad un +utente di gestire le capacità multitiasking del sistema, permettendo di +eseguire più programmi in contemporanea. Nella seconda parte del capitolo +tratteremo poi il funzionamento dell'I/O su terminale, e delle varie +peculiarità che esso viene ad assumere a causa del suo stretto legame con il +suo uso come interfaccia di accesso al sistema da parte degli utenti. \section{Il \textit{job control}} @@ -677,34 +682,39 @@ messaggi del kernel.\footnote{i messaggi del kernel sono tenuti in un buffer \func{printf} usata in user space; una trattazione eccellente dell'argomento si trova in \cite{LinDevDri}, nel quarto capitolo.} -Il servizio permette poi di trattare i vari messaggi classificandoli secondo -due indici, una \textit{facility}, che indica quale categoria di demone ha -emesso il messaggio, e permette di classificarli per sottosistemi (kernel, -posta elettronica, demoni di stampa, ecc.), ed una \textit{priority}, che -identifica l'importanza del messaggio. Il sistema di \textit{syslog} provvede -poi a riportare i messaggi all'amministratore in varie modalità come: +Il servizio permette poi di trattare i vari messaggi classificandoli +attraverso due indici; il primo, chiamato \textit{facility}, suddivide in +diverse categorie i vari demoni in modo di raggruppare i messaggi provenienti +da operazioni che hanno attinenza fra loro, ed è organizzato in sottosistemi +(kernel, posta elettronica, demoni di stampa, ecc.). Il secondo, chiamato +\textit{priority}, identifica l'importanza dei vari messaggi, e permette di +classificarli e differenziare le modalità di notifica degli stessi. + +Il sistema di \textit{syslog} attraverso \cmd{syslogd} provvede poi a +riportare i messaggi all'amministratore attraverso una serie differenti +meccanismi come: \begin{itemize*} -\item scriverli sulla console. -\item inviarli via mail ad uno specifico utente. -\item scriverli su un file (comunemente detto \textit{log file}). -\item inviarli ad un altro demone (anche via rete). -\item scartarli. +\item scrivere sulla console. +\item inviare via mail ad uno specifico utente. +\item scrivere su un file (comunemente detto \textit{log file}). +\item inviare ad un altro demone (anche via rete). +\item scartare. \end{itemize*} secondo le modalità che questo preferisce e che possono essere impostate attraverso il file di configurazione \file{/etc/syslog.conf} (maggiori -dettagli si possono trovare sulle relative pagine di manuale per questo file e -per \cmd{syslogd}). +dettagli si possono trovare sulle pagine di manuale per questo file e per +\cmd{syslogd}). Le \acr{glibc} definiscono una serie di funzioni standard con cui un processo -può accedere in maniera generica al servizio di syslog, che però funzionano -solo localmente; se si vogliono inviare i messaggi ad un'altro sistema occorre -farlo esplicitamente con un socket UDP, o utilizzare le capacità di reinvio -del servizio. - -La prima funzione definita dall'interfaccia è \func{openlog}; essa in generale -non è necessaria per l'uso del servizio, ma permette di impostare alcuni -valori che controllano gli effetti delle chiamate successive; il suo prototipo -è: +può accedere in maniera generica al servizio di \textit{syslog}, che però +funzionano solo localmente; se si vogliono inviare i messaggi ad un'altro +sistema occorre farlo esplicitamente con un socket UDP, o utilizzare le +capacità di reinvio del servizio. + +La prima funzione definita dall'interfaccia è \func{openlog}, che apre una +connessione al servizio di \textit{syslog}; essa in generale non è necessaria +per l'uso del servizio, ma permette di impostare alcuni valori che controllano +gli effetti delle chiamate successive; il suo prototipo è: \begin{prototype}{syslog.h}{void openlog(const char *ident, int option, int facility)} @@ -716,10 +726,18 @@ Apre una connessione al sistema di \textit{syslog}. La funzione permette di specificare, tramite \param{ident}, l'identità di chi ha inviato il messaggio (di norma si passa il nome del programma, come specificato da \code{argv[0]}); la stringa verrà preposta all'inizio di ogni -messaggio. Il parametro \param{facility} permette invece di specificare una -categoria per classificare i vari messaggi; i valori possibili sono riportati -in \tabref{tab:sess_syslog_facility}. - +messaggio. Si tenga presente che il valore di \param{ident} che si passa alla +funzione è un puntatore, se la stringa cui punta viene cambiata lo sarà pure +nei successivi messaggi, e se viene cancellata i risultati potranno essere +impredicibili, per questo è sempre opportuno usare una stringa costante. + +L'argomento \param{facility} permette invece di preimpostare per le successive +chiamate l'omonimo indice che classifica la categoria del messaggio. +L'argomento è interpretato come una maschera binaria, e pertanto è possibile +inviare i messaggi su più categorie alla volta; i valori delle costanti che +identificano ciascuna categoria sono riportati in +\tabref{tab:sess_syslog_facility}, il valore di \param{facility} deve essere +specificato con un OR aritmetico. \begin{table}[htb] \centering @@ -728,34 +746,144 @@ in \tabref{tab:sess_syslog_facility}. \textbf{Valore}& \textbf{Significato}\\ \hline \hline -\macro{LOG\_AUTH} & \\ -\macro{LOG\_AUTHPRIV} & \\ -\macro{LOG\_CRON} & \\ -\macro{LOG\_DAEMON} & \\ -\macro{LOG\_FTP} & \\ -\macro{LOG\_KERN} & \\ -\macro{LOG\_LOCAL0} & \\ -...& \\ -\macro{LOG\_LOCAL7} & \\ -\macro{LOG\_LPR} & \\ -\macro{LOG\_MAIL} & \\ -\macro{LOG\_NEWS} & \\ -\macro{LOG\_SYSLOG} & \\ -\macro{LOG\_USER} & \\ -\macro{LOG\_UUCP} & \\ +\macro{LOG\_AUTH} & Messaggi relativi ad autenticazione e sicurezza, + obsoleto, è sostituito da \macro{LOG\_AUTHPRIV}. \\ +\macro{LOG\_AUTHPRIV} & Sostituisce \macro{LOG\_AUTH}.\\ +\macro{LOG\_CRON} & Messaggi dei demoni di gestione dei comandi + programmati (\cmd{cron} e \cmd{at}).\\ +\macro{LOG\_DAEMON} & Demoni di sistema.\\ +\macro{LOG\_FTP} & Server FTP.\\ +\macro{LOG\_KERN} & Messaggi del kernel\\ +\macro{LOG\_LOCAL0} & Riservato all'amministratore per uso locale\\ +--- & \\ +\macro{LOG\_LOCAL7} & Riservato all'amministratore per uso locale\\ +\macro{LOG\_LPR} & Messaggi del sistema di gestione delle stampanti \\ +\macro{LOG\_MAIL} & Messaggi del sistema di posta elettronica\\ +\macro{LOG\_NEWS} & Messaggi del sistema di gestione delle news (USENET) \\ +\macro{LOG\_SYSLOG} & Messaggi generati dallo stesso \cmd{syslogd}\\ +\macro{LOG\_USER} & Messaggi generici a livello utente\\ +\macro{LOG\_UUCP} & Messaggi del sistema UUCP\\ \hline \end{tabular} \caption{Valori possibili per l'argomento \param{facility} di \func{openlog}.} \label{tab:sess_syslog_facility} \end{table} +L'argomento \param{option} serve invece per controllare il comportamento della +funzione \func{openlog} e delle modalità con cui le successive chiamate +scriveranno i messaggi, esso viene specificato come maschera binaria composta +con un OR aritmetico di una qualunque delle costanti riportate in +\tabref{tab:sess_openlog_option}. + +\begin{table}[htb] +\centering +\begin{tabular}[c]{|l|p{8cm}|} +\hline +\textbf{Valore}& \textbf{Significato}\\ +\hline +\hline +\macro{LOG\_CONS} & Scrive sulla console quando. \\ +\macro{LOG\_NDELAY} & Sostituisce \macro{LOG\_AUTH}.\\ +\macro{LOG\_NOWAIT} & Messaggi dei demoni di gestione dei comandi + programmati (\cmd{cron} e \cmd{at}).\\ +\macro{LOG\_ODELAY} & .\\ +\macro{LOG\_PERROR} & Stampa anche su \file{stderr}.\\ +\macro{LOG\_PID} & Inserisce nei messaggi il \acr{pid} del processo + chiamante. \\ +\hline +\end{tabular} +\caption{Valori possibili per l'argomento \param{option} di \func{openlog}.} +\label{tab:sess_openlog_option} +\end{table} + +La funzione che si usa per generare un messaggio è \func{syslog}, dato che +l'uso di \func{openlog} è ozionale, sarà quest'ultima a provvede a chiamare la +prima qualora ciò non sia stato fatto (nel qual caso il valore di +\param{ident} è nullo). Il suo prototipo è: +\begin{prototype}{syslog.h} +{void syslog(int priority, const char *format, ...)} + +Genera un messaggio di priorità \param{priority}. + +\bodydesc{La funzione non restituisce nulla.} +\end{prototype} + +Il comportamento della funzione è analogo quello di \func{printf}, e il valore +dell'argomento \param{format} è identico a quello descritto nella pagina di +manuale di quest'ultima (per i valori principali si può vedere la trattazione +sommaria che se ne è fatto in \secref{sec:file_formatted_io}); l'unica +differenza è che la sequenza \cmd{\%m} viene rimpiazzata dalla stringa +restituita da \code{strerror(errno)}. Gli argomenti seguenti i primi due +devono essere forniti secondo quanto richiesto da \func{format}. + +L'argomento \param{priority} permette di impostare sia la \textit{facility} +che la \textit{priority} del messaggio. In realtà viene prevalentemente usato +per specificare solo quest'ultima in quanto la prima viene di norma +preimpostata con \func{openlog}. La priorità è indicata con un valore +numerico\footnote{le \acr{glibc}, seguendo POSIX.1-2001, prevedono otto + diverse priorità ordinate da 0 a 7, in ordine di importanza decrescente; + questo comporta che i tre bit meno significativi dell'argomento + \param{priority} sono occupati da questo valore, mentre i restanti bit più + significativi vengono usati per specificare la \textit{facility}.} +specificabile attraverso le costanti riportate in +\secref{tab:sess_syslog_priority}. Nel caso si voglia specificare anche la +\textit{facility} basta eseguire un OR aritmetico del valore della priorità +con la maschera binaria delle costanti di \tabref{tab:sess_syslog_facility}. + +\begin{table}[htb] +\centering +\begin{tabular}[c]{|l|p{8cm}|} +\hline +\textbf{Valore}& \textbf{Significato}\\ +\hline +\hline +\macro{LOG\_EMERG} & Il sistema è inutilizzabile. \\ +\macro{LOG\_ALERT} & C'è una emergenza che richiede intervento immediato.\\ +\macro{LOG\_CRIT} & Si è in una condizione critica.\\ +\macro{LOG\_ERR} & Si è in una condizione di errore.\\ +\macro{LOG\_WARNING} & Messaggio di avvertimento.\\ +\macro{LOG\_NOTICE} & Notizia significativa relativa al comportamento.\\ +\macro{LOG\_INFO} & Messaggio informativo. \\ +\macro{LOG\_DEBUG} & Messaggio di debug.\\ +\hline +\end{tabular} +\caption{Valori possibili per l'indice di importanza del messaggio da + specificare nell'argomento \param{priority} di \func{syslog}.} +\label{tab:sess_syslog_priority} +\end{table} + +Una ulteriore funzione, \func{setlogmask}, permette di filtrare +preliminarmente i messaggi in base alla loro priorità; il suo prototipo è: +\begin{prototype}{syslog.h} +{int setlogmask(int mask)} + +Imposta la maschera dei log al valore specificato. + +\bodydesc{La funzione restituisce il precedente valore.} +\end{prototype} + +Le routine di gestione mantengono per ogni processo una maschera che +determina quale delle chiamate effettuate a \func{syslog} verrà +effettivamente registrata. La registrazione viene disabilitata per tutte +quelle priorità che non rientrano nella maschera; questa viene settata +usando la macro \code{LOG\_MASK(p)} dove \code{p} è una delle costanti di +\secref{tab:sess_syslog_priority}. É inoltre disponibile anche la macro +\code{LOG\_UPTO(p)} che permette di specificare automaticamente tutte le +priorità fino ad un certo valore. + + \section{L'I/O su terminale} \label{sec:sess_terminal_io} -Esamineremo in questa sezione le peculiarità dell'I/O eseguito sui terminali, -tenendo conto delle differenze che quest'ultimi presentano rispetto ai normali -file su disco. +Benché come ogni altro dispositivo i terminali siano accessibili come file, +essi hanno assunto storicamente (essendo stati a lungo l'unico modo di +accedere al sistema) una loro rilevanza specifica, che abbiamo già avuto modo +di incontrare nella precedente sezione. + +Esamineremo qui le peculiarità dell'I/O eseguito sui terminali, che per la +loro particolare natura presenta delle differenze rispetto ai normali file su +disco e agli altri dispositivi.