X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=session.tex;h=10129fa70b7f24995a3b0262ce3ed71e126a2520;hb=999678703d956565dbc4c1707482e9114026be82;hp=f1b009b2a8f312f82d87c37707b4303d06d98697;hpb=813faeabc683ae5e07061dea550d48af557ca406;p=gapil.git diff --git a/session.tex b/session.tex index f1b009b..10129fa 100644 --- a/session.tex +++ b/session.tex @@ -495,11 +495,7 @@ Un terminale, che esso sia un terminale effettivo, attaccato ad una seriale o ad un altro tipo di porta di comunicazione, o una delle console virtuali associate allo schermo, viene sempre visto attraverso attraverso un device driver che ne presenta un'interfaccia comune su un apposito file di -dispositivo. Storicamente i primi terminali erano appunto terminali di -telescriventi (\textit{teletype}), da cui deriva sia il nome dell'interfaccia, -\textit{tty}, che quello dei relativi file di dispositivo, che sono sempre -della forma \texttt{/dev/tty*}.\footnote{questo vale anche per i terminali - virtuali associati alle connessioni di rete con \cmd{telnet} o \cmd{ssh}.} +dispositivo. Per controllare un terminale si usa di solito il programma \cmd{getty} (od una delle sue varianti), che permette di mettersi in ascolto su uno di questi @@ -740,29 +736,31 @@ identificano ciascuna categoria sono riportati in specificato con un OR aritmetico. \begin{table}[htb] -\centering -\begin{tabular}[c]{|l|p{8cm}|} -\hline -\textbf{Valore}& \textbf{Significato}\\ -\hline -\hline -\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\\ + \footnotesize + \centering + \begin{tabular}[c]{|l|p{8cm}|} + \hline + \textbf{Valore}& \textbf{Significato}\\ + \hline + \hline + \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}.} @@ -776,6 +774,7 @@ con un OR aritmetico di una qualunque delle costanti riportate in \tabref{tab:sess_openlog_option}. \begin{table}[htb] + \footnotesize \centering \begin{tabular}[c]{|l|p{8cm}|} \hline @@ -831,25 +830,27 @@ specificabile attraverso le costanti riportate in 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} + \footnotesize + \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 @@ -887,6 +888,115 @@ disco e agli altri dispositivi. +\subsection{L'architettura} +\label{sec:term_design} + + +I terminali sono una classe speciale di dispositivi a caratteri (si rammenti +la classificazione di \secref{sec:file_file_types}); un terminale ha infatti +una caratteristica che lo contraddistingue da un qualunque altro dispositivo, +e cioè che è destinato a gestire l'interazione con un utente (deve essere in +grado di fare da terminale di controllo per una sessione), che comportano la +presenza di ulteriori capacità. + +L'interfaccia per i terminali è una delle più oscure e complesse, essendosi +stratificata dagli inizi dei sistemi Unix fino ad oggi. Questo comporta una +grande quantità di opzioni e controlli relativi ad un insieme di +caratteristiche (come ad esempio la velocità della linea) necessarie per +dispositivi, come i terminali seriali, che al giorno d'oggi sono praticamente +in disuso. + +Storicamente i primi terminali erano appunto terminali di telescriventi +(\textit{teletype}), da cui deriva sia il nome dell'interfaccia, \textit{TTY}, +che quello dei relativi file di dispositivo, che sono sempre della forma +\texttt{/dev/tty*}.\footnote{ciò vale solo in parte per i terminali virtuali, + essi infatti hanno due lati, un \textit{master}, che può assumere i nomi + \file{/dev/pty[p-za-e][0-9a-f]} ed un corrispondente \textit{slave} con nome + \file{/dev/tty[p-za-e][0-9a-f]}.} Oggi essi includono le porte seriali, le +console virtuali dello schermo, i terminali virtuali che vengono creati come +canali di comunicazione dal kernel e che di solito vengono associati alle +connessioni di rete (ad esempio per trattare i dati inviati con \cmd{telnet} o +\cmd{ssh}). + +% In generale tutti i terminali hanno un insieme di funzionalità comuni, che +% vengono chiamate \textsl{discipline di linea}; esse contraddistinguono le +% modalità con cui il kernel manipola (ad esempio la reazione ad un carattere di +% cancellazione per la tastiera, o la gestione della linea tramite PPP o SLIP) i +% dati grezzi che vengono immessi sul dispositivo; + + +L'I/O sui terminali si effettua con le stesse modalità dei file normali, si +apre il relativo file di dispositivo, e si leggono e scriveno i dati con le +usuali funzioni di lettura e scrittura, occorre però tenere conto delle loro +caratteristiche specifiche, essi infatti prevedono due modalità di operazione, +dette rispettivamente \textsl{modo canonico} e \textsl{modo non canonico}, che +prevedono dei comportamenti nettamente diversi. + +La modalità preimpostata all'apertura del terminale è quella canonica, in cui +le operazioni di lettura vengono sempre effettuate assemblando i dati in una +linea;\footnote{per cui eseguendo una \func{read} su un terminale in modo + canonico la funzione si bloccherà, anche se si sono scritti dei caratteri, + fintanto che non si preme il tasto di ritorno a capo: a questo punto la + linea sarà completa e la funzione ritornerà.} ed in cui alcuni caratteri +vengono interpretati per compiere operazioni (come la generazione dei segnali +illustrati in \secref{sec:sig_job_control}), questa di norma è la modalità in +cui funziona la shell. + +Un terminale in modo non canonico invece non effettua nessun accorpamento dei +dati in linee né li interpreta; esso viene di solito usato dai programmi (gli +editor ad esempio) che necessitano di poter leggere un carattere alla volta e +che gestiscono al loro interno i vari comandi. + +La struttura dell'I/O, come di solito viene gestito dal driver del terminale è +mostrata in \secref{fig:term_struct} + +\begin{figure}[htb] + \centering + \includegraphics[width=13cm]{img/term_struct} + \caption{Struttura interna generica di un driver per un terminale.} + \label{fig:term_struct} +\end{figure} + + +L'I/O viene controllato attraverso una serie di attributi mantenuti per +ciascun terminale in una struttura \var{termios}, i cui campi + + + +\begin{figure}[!htb] + \footnotesize \centering + \begin{minipage}[c]{15cm} + \begin{lstlisting}[labelstep=0]{} +struct termios { + tcflag_t c_iflag; /* input modes */ + tcflag_t c_oflag; /* output modes */ + tcflag_t c_cflag; /* control modes */ + tcflag_t c_lflag; /* local modes */ + cc_t c_cc[NCCS]; /* control chars */ +}; + \end{lstlisting} + \end{minipage} + \normalsize + \caption{La struttura \var{termios}, che identifica le proprietà di un + terminale.} + \label{fig:term_termios} +\end{figure} + + + +\subsection{Il \textsl{modo canonico}} +\label{sec:term_canonic_mode} + +Il modo canonico + + +\subsection{Il \textsl{modo non canonico}} +\label{sec:term_noncanonic_mode} + +Il modo non canonico + + + %%% Local Variables: %%% mode: latex