Inizio revisione capitolo 6.
[gapil.git] / session.tex
index 365749c553d0480aa46b75238d23b4ee980d4945..6fd9027748b84088c909196cb9eaf839571b4ac1 100644 (file)
@@ -143,12 +143,12 @@ processi vengono raggruppati in \textit{process group} e \textsl{sessioni};
 per far questo vengono utilizzati due ulteriori identificatori (oltre quelli
 visti in sez.~\ref{sec:proc_pid}) che il kernel associa a ciascun
 processo:\footnote{in Linux questi identificatori sono mantenuti nei campi
-  \var{pgrp} e \var{session} della struttura \struct{task\_struct} definita in
-  \file{sched.h}.}  l'identificatore del \textit{process group} e
-l'identificatore della \textsl{sessione}, che vengono indicati rispettivamente
-con le sigle \acr{pgid} e \acr{sid}, e sono mantenuti in variabili di tipo
-\type{pid\_t}. I valori di questi identificatori possono essere visualizzati
-dal comando \cmd{ps} usando l'opzione \cmd{-j}.
+  \var{pgrp} e \var{session} della struttura \kstruct{task\_struct} definita
+  in \file{include/linux/sched.h}.}  l'identificatore del \textit{process
+  group} e l'identificatore della \textsl{sessione}, che vengono indicati
+rispettivamente con le sigle \acr{pgid} e \acr{sid}, e sono mantenuti in
+variabili di tipo \type{pid\_t}. I valori di questi identificatori possono
+essere visualizzati dal comando \cmd{ps} usando l'opzione \cmd{-j}.
 
 Un \textit{process group} è pertanto definito da tutti i processi che hanno lo
 stesso \acr{pgid}; è possibile leggere il valore di questo identificatore con
@@ -336,13 +336,13 @@ divenuto un nuovo leader di sessione dovrà riottenere\footnote{solo quando ciò
   sempre vera.}, un terminale di controllo. In generale questo viene fatto
 automaticamente dal sistema\footnote{a meno di non avere richiesto
   esplicitamente che questo non diventi un terminale di controllo con il flag
-  \const{O\_NOCTTY} (vedi sez.~\ref{sec:file_open}). In questo Linux segue la
-  semantica di SVr4; BSD invece richiede che il terminale venga allocato
-  esplicitamente con una \func{ioctl} con il comando \const{TIOCSCTTY}.}
-quando viene aperto il primo terminale (cioè uno dei vari file di dispositivo
-\file{/dev/tty*}) che diventa automaticamente il terminale di controllo,
-mentre il processo diventa il \textsl{processo di controllo} di quella
-sessione.
+  \const{O\_NOCTTY} (vedi sez.~\ref{sec:file_open_close}). In questo Linux
+  segue la semantica di SVr4; BSD invece richiede che il terminale venga
+  allocato esplicitamente con una \func{ioctl} con il comando
+  \const{TIOCSCTTY}.}  quando viene aperto il primo terminale (cioè uno dei
+vari file di dispositivo \file{/dev/tty*}) che diventa automaticamente il
+terminale di controllo, mentre il processo diventa il \textsl{processo di
+  controllo} di quella sessione.
 
 In genere (a meno di redirezioni) nelle sessioni di lavoro questo terminale è
 associato ai file standard (di input, output ed error) dei processi nella
@@ -507,7 +507,7 @@ connessione di rete. Dato che i concetti base sono gli stessi, e dato che alla
 fine le differenze sono\footnote{in generale nel caso di login via rete o di
   terminali lanciati dall'interfaccia grafica cambia anche il processo da cui
   ha origine l'esecuzione della shell.} nel dispositivo cui il kernel associa
-i file standard (vedi sez.~\ref{sec:file_std_descr}) per l'I/O, tratteremo
+i file standard (vedi tab.~\ref{tab:file_std_files}) per l'I/O, tratteremo
 solo il caso classico del terminale.
 
 Abbiamo già brevemente illustrato in sez.~\ref{sec:intro_kern_and_sys} le
@@ -570,10 +570,10 @@ inoltre effettuerà, qualora servano, ulteriori impostazioni.\footnote{ad
 poi porsi in attesa dell'immissione del nome di un utente.
 
 Una volta che si sia immesso il nome di login \cmd{getty} esegue direttamente
-il programma \cmd{login} con una \func{exevle}, passando come argomento la
+il programma \cmd{login} con una \func{execle}, passando come argomento la
 stringa con il nome, ed un ambiente opportunamente costruito che contenga
 quanto necessario; ad esempio di solito viene opportunamente inizializzata la
-variabile di ambiente \texttt{TERM} per identificare il terminale su cui si
+variabile di ambiente \envvar{TERM} per identificare il terminale su cui si
 sta operando, a beneficio dei programmi che verranno lanciati in seguito.
 
 A sua volta \cmd{login}, che mantiene i privilegi di amministratore, usa il
@@ -589,29 +589,29 @@ certo numero di volte dopo di che \cmd{login} esce ed \cmd{init} provvede a
 rilanciare un'altra istanza di \cmd{getty}.
 
 Se invece la password corrisponde \cmd{login} esegue \func{chdir} per
-impostare come directory di lavoro la \textit{home directory} dell'utente,
-cambia i diritti di accesso al terminale (con \func{chown} e \func{chmod}) per
-assegnarne la titolarità all'utente ed al suo gruppo principale, assegnandogli
-al contempo i diritti di lettura e scrittura.\footnote{oggi queste operazioni,
-  insieme ad altre relative alla contabilità ed alla tracciatura degli
-  accessi, vengono gestite dalle distribuzioni più recenti in una maniera
-  generica appoggiandosi a servizi di sistema come \textit{ConsoleKit}, ma il
-  concetto generale resta sostanzialmente lo stesso.}  Inoltre il programma
-provvede a costruire gli opportuni valori per le variabili di ambiente, come
-\texttt{HOME}, \texttt{SHELL}, ecc.  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 \ids{UID}
-ed i \ids{GID} (reali, effettivi e salvati) saranno impostati a quelli
-dell'utente.
+impostare come \index{directory~di~lavoro} directory di lavoro la \textit{home
+  directory} dell'utente, cambia i diritti di accesso al terminale (con
+\func{chown} e \func{chmod}) per assegnarne la titolarità all'utente ed al suo
+gruppo principale, assegnandogli al contempo i diritti di lettura e
+scrittura.\footnote{oggi queste operazioni, insieme ad altre relative alla
+  contabilità ed alla tracciatura degli accessi, vengono gestite dalle
+  distribuzioni più recenti in una maniera generica appoggiandosi a servizi di
+  sistema come \textit{ConsoleKit}, ma il concetto generale resta
+  sostanzialmente lo stesso.}  Inoltre il programma provvede a costruire gli
+opportuni valori per le variabili di ambiente, come \envvar{HOME},
+\envvar{SHELL}, ecc.  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 \ids{UID} ed i \ids{GID}
+(reali, effettivi 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)
 ad eseguire con un'altra \func{exec} la shell, che si troverà con un ambiente
-già pronto con i file standard di sez.~\ref{sec:file_std_descr} impostati sul
+già pronto con i file standard di tab.~\ref{tab:file_std_files} impostati sul
 terminale, e pronta, nel ruolo di leader di sessione e di processo di
 controllo per il terminale, a gestire l'esecuzione dei comandi come illustrato
-in sez.~\ref{sec:sess_job_control_overview}. 
+in sez.~\ref{sec:sess_job_control_overview}.
 
 Dato che il processo padre resta sempre \cmd{init} quest'ultimo potrà
 provvedere, ricevendo un \signal{SIGCHLD} all'uscita della shell quando la
@@ -672,11 +672,11 @@ occorrerà predisporlo in modo che esso compia le seguenti azioni:
   eseguendo una ulteriore \func{fork} uscendo nel padre e proseguendo nel
   figlio. In questo caso, non essendo più quest'ultimo un leader di sessione
   non potrà ottenere automaticamente un terminale di controllo.
-\item Eseguire una \func{chdir} per impostare la directory di lavoro del
-  processo (su \file{/} o su una directory che contenga dei file necessari per
-  il programma), per evitare che la directory da cui si è lanciato il processo
-  resti in uso e non sia possibile rimuoverla o smontare il filesystem che la
-  contiene.
+\item Eseguire una \func{chdir} per impostare la \index{directory~di~lavoro}
+  directory di lavoro del processo (su \file{/} o su una directory che
+  contenga dei file necessari per il programma), per evitare che la directory
+  da cui si è lanciato il processo resti in uso e non sia possibile rimuoverla
+  o smontare il filesystem che la contiene.
 \item Impostare la \itindex{umask} maschera dei permessi (di solito con
   \code{umask(0)}) in modo da non essere dipendenti dal valore ereditato da
   chi ha lanciato originariamente il processo.
@@ -703,9 +703,10 @@ La funzione esegue una \func{fork}, per uscire subito, con \func{\_exit}, nel
 padre, mentre l'esecuzione prosegue nel figlio che esegue subito una
 \func{setsid}. In questo modo si compiono automaticamente i passi 1 e 2 della
 precedente lista. Se \param{nochdir} è nullo la funzione imposta anche la
-directory di lavoro su \file{/}, se \param{noclose} è nullo i file standard
-vengono rediretti su \file{/dev/null} (corrispondenti ai passi 4 e 6); in caso
-di valori non nulli non viene eseguita nessuna altra azione.
+\index{directory~di~lavoro} directory di lavoro su \file{/},
+se \param{noclose} è nullo i file standard vengono rediretti su
+\file{/dev/null} (corrispondenti ai passi 4 e 6); in caso di valori non nulli
+non viene eseguita nessuna altra azione.
 
 Dato che un programma demone non può più accedere al terminale, si pone il
 problema di come fare per la notifica di eventuali errori, non potendosi più
@@ -979,7 +980,7 @@ tab.~\ref{tab:sess_syslog_facility}, uno dei possibili utenti del servizio del
 \textit{syslog} è anche il kernel, che a sua volta può avere necessità di
 inviare messaggi verso l'\textit{user space}. I messaggi del kernel sono
 mantenuti in un apposito buffer circolare e generati all'interno del kernel
-tramite la funzione \func{printk}, analoga alla \func{printf} usata in
+tramite la funzione \texttt{printk}, analoga alla \func{printf} usata in
 \textit{user space}.\footnote{una trattazione eccellente dell'argomento si
   trova nel quarto capitolo di \cite{LinDevDri}.}
 
@@ -999,17 +1000,17 @@ sono riportati in fig.~\ref{fig:printk_priority}
   \normalsize 
   \caption{Definizione delle stringhe coi relativi valori numerici che
     indicano le priorità dei messaggi del kernel (ripresa da
-    \texttt{linux/kernel.h}).}
+    \file{include/linux/kernel.h}).}
   \label{fig:printk_priority}
 \end{figure}
 
-Dato che i messaggi generati da \func{printk} hanno un loro specifico formato
-tradizionalmente si usava un demone ausiliario, \cmd{klogd}, per leggerli,
-rimappare le priorità sui valori di tab.~\ref{tab:sess_syslog_priority} e
-inviarli al sistema del \textit{syslog} nella facility \const{LOG\_KERN}.
-Oggi i nuovi demoni più avanzati che realizzano il servizio (come
-\texttt{rsyslog} o \texttt{syslog-ng}) sono in grado di fare tutto questo da
-soli.
+Dato che i messaggi generati da \texttt{printk} hanno un loro specifico
+formato tradizionalmente si usava un demone ausiliario, \cmd{klogd}, per
+leggerli, rimappare le priorità sui valori di
+tab.~\ref{tab:sess_syslog_priority} e inviarli al sistema del \textit{syslog}
+nella facility \const{LOG\_KERN}.  Oggi i nuovi demoni più avanzati che
+realizzano il servizio (come \texttt{rsyslog} o \texttt{syslog-ng}) sono in
+grado di fare tutto questo da soli.
 
 Ma i messaggi del kernel non sono necessariamente connessi al sistema del
 \textit{syslog}; ad esempio possono anche essere letti direttamente dal buffer
@@ -1040,7 +1041,7 @@ circolare esiste una apposita \textit{system call} chiamata anch'essa
 \texttt{syslog}, ma dato il conflitto di nomi questa viene rimappata su
 un'altra funzione di libreria, in particolare nelle \acr{glibc} essa viene
 invocata tramite la funzione \funcd{klogctl},\footnote{nelle \acr{libc4} e
-  nelle \acr{libc5} la funzione invece era \func{SYS\_klog}.} il cui prototipo
+  nelle \acr{libc5} la funzione invece era \code{SYS\_klog}.} il cui prototipo
 è:
 \begin{prototype}{sys/klog.h}{int klogctl(int op, char *buffer, int len)}
 
@@ -1056,7 +1057,7 @@ Gestisce i messaggi di log del kernel.
   \item[\errcode{ERESTARTSYS}] l'operazione è stata interrotta da un segnale.
   \item[\errcode{EPERM}] non si hanno i privilegi richiesti per l'operazione
     richiesta.
-  \item[\errcode{ENOSYS}] il supporto per \func{printk} non è stato compilato
+  \item[\errcode{ENOSYS}] il supporto per \texttt{printk} non è stato compilato
     nel kernel.
   \end{errlist}
   ed inoltre \errval{EBADF} ed \errval{ENOSYS}.
@@ -1192,8 +1193,8 @@ disco e agli altri dispositivi.
 
 
 
-\subsection{L'architettura}
-\label{sec:term_design}
+\subsection{L'architettura dell'I/O su terminale}
+\label{sec:term_io_design}
 
 I terminali sono una classe speciale di dispositivi a caratteri (si ricordi la
 classificazione di sez.~\ref{sec:file_file_types}); un terminale ha infatti una
@@ -1231,6 +1232,9 @@ una delle principali infatti è che essi prevedono due modalità di operazione,
 dette rispettivamente ``\textsl{modo canonico}'' e ``\textsl{modo non
   canonico}'', che hanno dei comportamenti nettamente diversi.
 
+% TODO: inserire qui il comportamento di read relativo all'errore EIO sulla
+% lettura in background???
+
 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
@@ -1379,10 +1383,10 @@ deve essere di almeno \const{L\_ctermid}\footnote{\const{L\_ctermid} è una
   sez.~\ref{sec:sys_characteristics} che indica la dimensione che deve avere
   una stringa per poter contenere il nome di un terminale.} caratteri.
 
-Si tenga presente che il \itindex{pathname} \textit{pathname} restituito dalla
-funzione potrebbe non identificare univocamente il terminale (ad esempio
-potrebbe essere \file{/dev/tty}), inoltre non è detto che il processo possa
-effettivamente essere in grado di aprire il terminale.
+Si tenga presente che il \textit{pathname} restituito dalla funzione potrebbe
+non identificare univocamente il terminale (ad esempio potrebbe essere
+\file{/dev/tty}), inoltre non è detto che il processo possa effettivamente
+essere in grado di aprire il terminale.
 
 I vari attributi associati ad un terminale vengono mantenuti per ciascuno di
 essi in una struttura \struct{termios} che viene usata dalle varie funzioni
@@ -1640,7 +1644,7 @@ valore.
                      e che le linee di controllo del modem devono essere
                      ignorate. Se non impostato effettuando una chiamata ad
                      \func{open} senza aver specificato il flag di
-                     \const{O\_NOBLOCK} si bloccherà il processo finché 
+                     \const{O\_NONBLOCK} si bloccherà il processo finché 
                      non si è stabilita una connessione con il modem; inoltre 
                      se viene rilevata una disconnessione viene inviato un
                      segnale di \signal{SIGHUP} al processo di controllo del
@@ -2381,7 +2385,7 @@ Qui vanno le cose su \func{openpty} e compagnia.
 % LocalWords:  NOCTTY TIOCSCTTY error tcsetpgrp termios fd pgrpid descriptor VT
 % LocalWords:  ENOTTY ENOSYS EBADF SIGTTIN SIGTTOU EIO tcgetpgrp crypt SIGTSTP
 % LocalWords:  SIGINT SIGQUIT SIGTERM SIGHUP hungup kill orphaned SIGCONT exit
-% LocalWords:  init Slackware run level inittab fig device getty exevle TERM at
+% LocalWords:  init Slackware run level inittab fig device getty TERM at
 % LocalWords:  getpwnam chdir home chown chmod setuid setgid initgroups SIGCHLD
 % LocalWords:  daemon like daemons NdT Stevens Programming FAQ filesystem umask
 % LocalWords:  noclose syslog syslogd socket UDP klogd printk printf facility
@@ -2395,7 +2399,7 @@ Qui vanno le cose su \func{openpty} e compagnia.
 % LocalWords:  BRKINT IGNCR carriage return newline ICRNL INLCR IUCLC IXON NL
 % LocalWords:  IXANY IXOFF IMAXBEL iflag OPOST CR OCRNL OLCUC ONLCR ONOCR OFILL
 % LocalWords:  ONLRET OFDEL NLDLY CRDLY TABDLY BSDLY backspace BS VTDLY FFDLY
-% LocalWords:  form feed FF oflag CLOCAL NOBLOCK of HUPCL CREAD CSTOPB PARENB
+% LocalWords:  form feed FF oflag CLOCAL of HUPCL CREAD CSTOPB PARENB
 % LocalWords:  PARODD CSIZE CS CBAUD CBAUDEX CIBAUD CRTSCTS RTS CTS cflag ECHO
 % LocalWords:  ICANON ECHOE ERASE ECHOPRT ECHOK ECHOKE ECHONL ECHOCTL ctrl ISIG
 % LocalWords:  INTR QUIT SUSP IEXTEN EOL LNEXT REPRINT WERASE NOFLSH and TOSTOP