X-Git-Url: https://gapil.gnulinux.it/gitweb/?a=blobdiff_plain;f=session.tex;h=68fa465799e809d75d20c459a7ca36ced6412f54;hb=34c8ae732b8ffe5f4a87cdd0eba3a02df4c76d55;hp=b6ee946a786f94e1670edd2198cedb7e06c8440a;hpb=b93afedb7d7b01ba1f0b5ea4caaa281f38cb8e6d;p=gapil.git diff --git a/session.tex b/session.tex index b6ee946..68fa465 100644 --- a/session.tex +++ b/session.tex @@ -1,6 +1,6 @@ %% session.tex %% -%% Copyright (C) 2000-2004 Simone Piccardi. Permission is granted to +%% Copyright (C) 2000-2005 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", @@ -60,11 +60,11 @@ sez.~\ref{sec:sess_login}). Siccome la shell è collegata ad un solo terminale, che viene usualmente chiamato \textsl{terminale di controllo}, (vedi sez.~\ref{sec:sess_ctrl_term}) -un solo comando alla volta (quello che viene detto in \textit{foreground}), -potrà scrivere e leggere dal terminale. La shell però può eseguire anche più -comandi in contemporanea, mandandoli in \textit{background} (aggiungendo una -\cmd{\&} alla fine del comando), nel qual caso essi saranno eseguiti senza -essere collegati al terminale. +un solo comando alla volta (quello che viene detto in \textit{foreground} o in +\textsl{primo piano}), potrà scrivere e leggere dal terminale. La shell però +può eseguire, aggiungendo una \cmd{\&} alla fine del comando, più programmi in +contemporanea, mandandoli in \textit{background} (o \textsl{sullo sfondo}), +nel qual caso essi saranno eseguiti senza essere collegati al terminale. Si noti come si sia parlato di comandi e non di programmi o processi; fra le funzionalità della shell infatti c'è anche quella di consentire di concatenare @@ -234,8 +234,8 @@ processo padre, per impostare il valore nel figlio, che da quest'ultimo, per sé stesso, in modo che il cambiamento di \textit{process group} sia immediato per entrambi; una delle due chiamate sarà ridondante, ma non potendo determinare quale dei due processi viene eseguito per primo, occorre eseguirle -comunque entrambe per evitare di esporsi ad una race -condition\index{\textit{race~condition}}. +comunque entrambe per evitare di esporsi ad una \textit{race + condition}\itindex{race~condition}. Si noti come nessuna delle funzioni esaminate finora permetta di spostare un processo da una sessione ad un altra; infatti l'unico modo di far cambiare @@ -292,7 +292,7 @@ dal quale ricevono gli eventuali segnali da tastiera. A tale scopo lo standard POSIX.1 prevede che ad ogni sessione possa essere associato un terminale di controllo; in Linux questo viene realizzato mantenendo fra gli attributi di ciascun processo anche qual'è il suo terminale -di controllo. \footnote{Lo standard POSIX.1 non specifica nulla riguardo +di controllo.\footnote{Lo standard POSIX.1 non specifica nulla riguardo l'implementazione; in Linux anch'esso viene mantenuto nella solita struttura \struct{task\_struct}, nel campo \var{tty}.} In generale ogni processo eredita dal padre, insieme al \acr{pgid} e al \acr{sid} anche il terminale di @@ -358,7 +358,7 @@ condizioni di errore.\footnote{la shell in genere notifica comunque un \func{waitpid}.} Se però si bloccano o ignorano i due segnali citati, le funzioni di lettura e scrittura falliranno con un errore di \errcode{EIO}. -Un processo può controllare qual'è il gruppo di \textit{foreground} associato +Un processo può controllare qual è il gruppo di \textit{foreground} associato ad un terminale con la funzione \funcd{tcgetpgrp}, il cui prototipo è: \begin{functions} \headdecl{unistd.h} \headdecl{termios.h} @@ -394,13 +394,14 @@ corrispondenti segnali (rispettivamente \const{SIGTSTP}, \const{SIGINT}, \const{SIGQUIT} e \const{SIGTERM}, trattati in sez.~\ref{sec:sig_job_control}) a tutti i processi del raggruppamento di \textit{foreground}; in questo modo la shell può gestire il blocco e l'interruzione dei vari comandi. - + + Per completare la trattazione delle caratteristiche del job control legate al terminale di controllo, occorre prendere in considerazione i vari casi legati alla terminazione anomala dei processi, che sono di norma gestite attraverso il segnale \const{SIGHUP}. Il nome del segnale deriva da \textit{hungup}, termine che viene usato per indicare la condizione in cui il terminale diventa -inutilizzabile, (letteralmente sarebbe \textsl{impiccagione}). +inutilizzabile, (letteralmente sarebbe \textsl{impiccagione}). Quando si verifica questa condizione, ad esempio se si interrompe la linea, o va giù la rete o più semplicemente si chiude forzatamente la finestra di @@ -549,7 +550,7 @@ o se la password non corrisponde\footnote{il confronto non viene effettuato volta criptato, ed è il risultato che viene confrontato con il valore che viene mantenuto nel database degli utenti.} la richiesta viene ripetuta un certo numero di volte dopo di che \cmd{login} esce ed \cmd{init} provvede a -rilanciare un'altra istanza di \func{getty}. +rilanciare un'altra istanza di \cmd{getty}. Se invece la password corrisponde \cmd{login} esegue \func{chdir} per settare la \textit{home directory} dell'utente, cambia i diritti di accesso al @@ -561,7 +562,7 @@ Infine attraverso l'uso di \func{setuid}, \func{setgid} e \func{initgroups} verrà cambiata l'identità del proprietario del processo, infatti, come spiegato in sez.~\ref{sec:proc_setuid}, avendo invocato tali funzioni con i privilegi di amministratore, tutti gli user-ID ed i group-ID (reali, effettivi -e salvati) saranno settati a quelli dell'utente. +e salvati) saranno impostati a quelli dell'utente. A questo punto \cmd{login} provvederà (fatte salve eventuali altre azioni iniziali, come la stampa di messaggi di benvenuto o il controllo della posta) @@ -574,7 +575,7 @@ in sez.~\ref{sec:sess_job_control_overview}. Dato che il processo padre resta sempre \cmd{init} quest'ultimo potrà provvedere, ricevendo un \const{SIGCHLD} all'uscita della shell quando la sessione di lavoro è terminata, a rilanciare \cmd{getty} sul terminale per -ripetere da capo tutto il procedimento. +ripetere da capo tutto il procedimento. @@ -830,7 +831,7 @@ devono essere forniti secondo quanto richiesto da \param{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 +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; @@ -878,7 +879,7 @@ Imposta la maschera dei log al valore specificato. 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 +non rientrano nella maschera; questa viene impostata usando la macro \macro{LOG\_MASK(p)} dove \code{p} è una delle costanti di tab.~\ref{tab:sess_syslog_priority}. É inoltre disponibile anche la macro \macro{LOG\_UPTO(p)} che permette di specificare automaticamente tutte le @@ -964,7 +965,7 @@ bufferizzazione\footnote{completamente indipendente dalla eventuale ulteriore kernel. \begin{figure}[htb] - \centering \includegraphics[width=13cm]{img/term_struct} + \centering \includegraphics[width=14.5cm]{img/term_struct} \caption{Struttura interna generica di un driver per un terminale.} \label{fig:term_struct} \end{figure} @@ -980,7 +981,7 @@ massime vengono persi; in alcuni casi il driver provvede ad inviare automaticamente un avviso (un carattere di BELL, che provoca un beep) sull'output quando si eccedono le dimensioni della coda. Se è abilitato il modo canonico i caratteri in ingresso restano nella coda fintanto che non -viene ricevuto un a capo; un'altra parametro del sistema, \const{MAX\_CANON}, +viene ricevuto un a capo; un'altro parametro del sistema, \const{MAX\_CANON}, specifica la dimensione massima di una riga in modo canonico. La coda di uscita è analoga a quella di ingresso e contiene i caratteri @@ -1038,10 +1039,10 @@ prototipo \textit{pathname} del terminale.} \end{prototype} -La funzione scrive il \index{\textit{pathname}}\textit{pathname} del terminale -di controllo del processo chiamante nella stringa posta all'indirizzo -specificato dall'argomento \param{s}. La memoria per contenere la stringa -deve essere stata allocata in precedenza ed essere lunga almeno +La funzione scrive il \itindex{pathname}\textit{pathname} del terminale di +controllo del processo chiamante nella stringa posta all'indirizzo specificato +dall'argomento \param{s}. La memoria per contenere la stringa deve essere +stata allocata in precedenza ed essere lunga almeno \const{L\_ctermid}\footnote{\const{L\_ctermid} è una delle varie costanti del sistema, non trattata esplicitamente in sez.~\ref{sec:sys_characteristics} che indica la dimensione che deve avere una stringa per poter contenere il @@ -1072,7 +1073,7 @@ si avr Se si passa come argomento \val{NULL} la funzione restituisce il puntatore ad una stringa statica che può essere sovrascritta da chiamate successive. Si -tenga presente che il \index{\textit{pathname}}\textit{pathname} restituito +tenga presente che il \itindex{pathname}\textit{pathname} restituito potrebbe non identificare univocamente il terminale (ad esempio potrebbe essere \file{/dev/tty}), inoltre non è detto che il processo possa effettivamente aprire il terminale. @@ -1127,7 +1128,7 @@ modificare i bit su cui non si interviene. parità, se non impostato un carattere con errori di parità viene letto come uno \texttt{0x00}. Se un carattere ha il valore \texttt{0xFF} e \const{ISTRIP} - non è settato, per evitare ambiguità esso viene sempre + non è impostato, per evitare ambiguità esso viene sempre riportato come \texttt{0xFF 0xFF}.\\ \const{ISTRIP} & Se impostato i caratteri in input sono tagliati a sette bit mettendo a zero il bit più significativo, altrimenti @@ -1143,7 +1144,7 @@ modificare i bit su cui non si interviene. gruppo in foreground anche l'invio di \const{SIGINT} ai processi di quest'ultimo. Se invece \const{BRKINT} non è impostato un BREAK viene letto come un carattere - NUL, a meno che non sia settato \const{PARMRK} + NUL, a meno che non sia impostato \const{PARMRK} nel qual caso viene letto come la sequenza di caratteri \texttt{0xFF 0x00 0x00}.\\ \const{IGNCR} & Se impostato il carattere di ritorno carrello @@ -1177,7 +1178,7 @@ modificare i bit su cui non si interviene. carattere START. \\ \const{IMAXBEL}& Se impostato fa suonare il cicalino se si riempie la cosa di ingresso; in Linux non è implementato e il kernel si - comporta cose se fosse sempre settato (è una estensione + comporta cose se fosse sempre impostato (è una estensione BSD). \\ \hline \end{tabular} @@ -1417,12 +1418,12 @@ fig.~\ref{fig:term_termios}). \const{TOSTOP} & Se abilitato, con il supporto per il job control presente, genera il segnale \const{SIGTTOU} per un processo in background che cerca di scrivere sul terminale.\\ - \const{XCASE} & Se settato il terminale funziona solo con le + \const{XCASE} & Se impostato il terminale funziona solo con le maiuscole. L'input è convertito in minuscole tranne per i caratteri preceduti da una \verb|\|. In output le maiuscole sono precedute da una \verb|\| e le minuscole convertite in maiuscole.\\ - \const{DEFECHO}& Se impostate effettua l'eco solo se c'è un processo in + \const{DEFECHO}& Se impostato effettua l'eco solo se c'è un processo in lettura.\\ \const{FLUSHO} & Effettua la cancellazione della coda di uscita. Viene attivato dal carattere DISCARD. Non è supportato in @@ -1547,10 +1548,10 @@ codice del tipo: La maggior parte di questi caratteri (tutti tranne \const{VTIME} e \const{VMIN}) hanno effetto solo quando il terminale viene utilizzato in modo canonico; per alcuni devono essere soddisfatte ulteriori richieste, ad esempio -\const{VINTR}, \const{VSUSP}, e \const{VQUIT} richiedono sia settato -\const{ISIG}; \const{VSTART} e \const{VSTOP} richiedono sia settato +\const{VINTR}, \const{VSUSP}, e \const{VQUIT} richiedono sia impostato +\const{ISIG}; \const{VSTART} e \const{VSTOP} richiedono sia impostato \const{IXON}; \const{VLNEXT}, \const{VWERASE}, \const{VREPRINT} richiedono sia -settato \const{IEXTEN}. In ogni caso quando vengono attivati i caratteri +impostato \const{IEXTEN}. In ogni caso quando vengono attivati i caratteri vengono interpretati e non sono passati sulla coda di ingresso. Per leggere ed scrivere tutte le varie impostazioni dei terminali viste finora @@ -1766,7 +1767,7 @@ lette da una struttura \struct{termios} utilizzando altre due funzioni, Anche in questo caso le due funzioni estraggono i valori della velocità della linea da una struttura, il cui indirizzo è specificato dall'argomento \param{termios\_p} che deve essere stata letta in precedenza con -\func{tcgetaddr}. +\func{tcgetattr}. @@ -1786,7 +1787,7 @@ vengono considerate, dal punto di vista dell'accesso al terminale, come delle funzioni di scrittura, pertanto se usate da processi in background sul loro terminale di controllo provocano l'emissione di \const{SIGTTOU} come illustrato in sez.~\ref{sec:sess_ctrl_term}.\footnote{con la stessa eccezione, - già vista per \func{tcsetaddr}, che quest'ultimo sia bloccato o ignorato dal + già vista per \func{tcsetattr}, che quest'ultimo sia bloccato o ignorato dal processo chiamante.} Una prima funzione, che è efficace solo in caso di terminali seriali asincroni