Completata tcsetattr e tcgetaddr, inserito nuovo esempio.
[gapil.git] / intro.tex
index 73f676134373a863bd0f15792e9a5c372173ccbf..1fce94301774708b4ebb7dbb7b211f331acd7b6a 100644 (file)
--- a/intro.tex
+++ b/intro.tex
@@ -54,11 +54,11 @@ porte di input/output).
 
 Una parte del kernel, lo \textit{scheduler}, si occupa di stabilire, ad
 intervalli fissi e sulla base di un opportuno calcolo delle priorità, quale
-``processo'' deve essere posto in esecuzione (il cosiddetto
-\textit{preemptive scheduling}). Questo verrà comunque eseguito in modalità
-protetta; quando necessario il processo potrà accedere alle risorse hardware
-soltanto attraverso delle opportune chiamate al sistema che restituiranno il
-controllo al kernel.
+``processo'' deve essere posto in esecuzione (il cosiddetto \textit{preemptive
+  scheduling}\index{preemptive scheduling}). Questo verrà comunque eseguito in
+modalità protetta; quando necessario il processo potrà accedere alle risorse
+hardware soltanto attraverso delle opportune chiamate al sistema che
+restituiranno il controllo al kernel.
 
 La memoria viene sempre gestita dal kernel attraverso il meccanismo della
 \textsl{memoria virtuale}\index{memoria virtuale}, che consente di assegnare a
@@ -133,7 +133,7 @@ Per questo motivo quando ci si riferisce al sistema nella sua interezza 
 corretto parlare di un sistema GNU/Linux: da solo il kernel è assolutamente
 inutile; quello che costruisce un sistema operativo utilizzabile è la presenza
 di tutta una serie di librerie e programmi di utilità (che di norma sono
-quelli realizzati dal progetto GNU della Free Softwae Foundation) che
+quelli realizzati dal progetto GNU della Free Software Foundation) che
 permettono di eseguire le normali operazioni che ci si aspetta da un sistema
 operativo.
 
@@ -226,8 +226,10 @@ definendo gruppi di lavoro, di accesso a determinate risorse, etc.
 L'utente e il gruppo sono identificati da due numeri (la cui corrispondenza ad
 un nome espresso in caratteri è inserita nei due file \file{/etc/passwd} e
 \file{/etc/groups}). Questi numeri sono l'\textit{user identifier}, detto in
-breve \acr{uid}, e il \textit{group identifier}, detto in breve \acr{gid}, che
-sono quelli che poi vengono usati dal kernel per identificare l'utente.
+breve \textsl{userid}, ed indicato dall'acronimo \acr{uid}, e il \textit{group
+  identifier}, detto in breve \textsl{groupid}, ed identificato dall'acronimo
+\acr{gid}, e sono quelli che vengono usati dal kernel per identificare
+l'utente.
  
 In questo modo il sistema è in grado di tenere traccia per ogni processo
 dell'utente a cui appartiene ed impedire ad altri utenti di interferire con
@@ -313,21 +315,70 @@ standardizzare l'interfaccia con il sistema operativo.
 Ma gli standard POSIX non si limitano alla standardizzazione delle funzioni di
 libreria, e in seguito sono stati prodotti anche altri standard per la shell e
 i comandi di sistema (1003.2), per le estensioni realtime e per i thread
-(1003.1d e 1003.1c) e vari altri.
+(1003.1d e 1003.1c) e vari altri.  In \tabref{tab:intro_posix_std} si è
+riportata una classificazione sommaria dei principali documenti prodotti, e di
+come sono identificati fra IEEE ed ISO; si tenga conto inoltre che molto
+spesso si usa l'estensione IEEE anche come aggiunta al nome POSIX (ad esempio
+si può parlare di POSIX.4 come di POSIX.1b).
+
+Si tenga presente però che nuove specificazioni e proposte di
+standardizzazione si aggiungono continuamente, mentre le versioni precedenti
+vengono riviste; talvolta poi i riferimenti cambiamo nome, per cui anche solo
+seguire le denominazioni usate diventa particolarmente faticoso; una pagina
+dove si possono recuperare varie (e di norma piuttosto intricate) informazioni
+è: \href{http://www.pasc.org/standing/sd11.html}
+{http://www.pasc.org/standing/sd11.html}.
+
+
+\begin{table}[htb]
+  \footnotesize
+  \centering
+  \begin{tabular}[c]{|l|l|l|l|}
+    \hline
+    \textbf{Standard} & \textbf{IEEE} & \textbf{ISO} & \textbf{Contenuto} \\
+    \hline
+    \hline
+    POSIX.1 & 1003.1 & 9945-1& Interfacce di base                           \\
+    POSIX.1a& 1003.1a& 9945-1& Estensioni a POSIX.1                         \\
+    POSIX.2 & 1003.2 & 9945-2& Comandi                                      \\
+    POSIX.3 & 2003   &TR13210& Metodi di test                               \\
+    POSIX.4 & 1003.1b &  --- & Estensioni real-time                         \\
+    POSIX.4a& 1003.1c &  --- & Threads                                      \\
+    POSIX.4b& 1003.1d &9945-1& Ulteriori estensioni real-time               \\
+    POSIX.5 & 1003.5  & 14519& Interfaccia per il linguaggio ADA            \\
+    POSIX.6 & 1003.2c,1e& 9945-2& Sicurezza                                 \\
+    POSIX.8 & 1003.1f& 9945-1& Accesso ai file via rete                     \\
+    POSIX.9 & 1003.9  &  --- & Intercaccia per il Fortran-77                \\
+    POSIX.12& 1003.1g& 9945-1& Sockets                                      \\
+    \hline
+  \end{tabular}
+  \caption{Elenco dei vari standard POSIX e relative denominazioni.}
+  \label{tab:intro_posix_std}
+\end{table}
+
+Benché l'insieme degli standard POSIX siano basati sui sistemi Unix essi
+definiscono comunque un'interfaccia di programmazione generica e non fanno
+riferimento ad una implementazione specifica (ad esempio esiste
+un'implementazione di POSIX.1 anche sotto Windows NT).  Lo standard principale
+resta comunque POSIX.1, che continua ad evolversi; la versione più nota, cui
+gran parte delle implementazioni fanno riferimento, e che costituisce una base
+per molti altri tentativi di standardizzazione, è stata rilasciata anche come
+standard internazionale con la sigla ISO/IEC 9945-1:1996. 
+
+Linux e le \acr{glibc} implementano tutte le funzioni definite nello standard
+POSIX.1, queste ultime forniscono in più alcune ulteriori capacità (per
+funzioni di \textit{pattern matching} e per la manipolazione delle
+\textit{regular expression}), che vengono usate dalla shell e dai comandi di
+sistema e che sono definite nello standard POSIX.2.
+
+Nelle versioni più recenti del kernel e delle librerie sono inoltre supportate
+ulteriori funzionalità aggiunte dallo standard POSIX.1c per quanto riguarda i
+\textit{thread} (vedi ...), e dallo standard POSIX.1b per quanto riguarda i
+segnali e lo scheduling real-time (\secref{sec:sig_real_time} e
+\secref{sec:proc_real_time}), la misura del tempo, i meccanismi di
+intercomunicazione (\secref{sec:ipc_posix}) e l'I/O asincrono
+(\secref{sec:file_asyncronous_io}).
 
-Benché lo standard POSIX sia basato sui sistemi Unix esso definisce comunque
-un'interfaccia di programmazione generica e non fa riferimento ad una
-implementazione specifica (ad esempio esiste un'implementazione di questo
-standard anche sotto Windows NT).  Lo standard si è evoluto nel tempo, ed una
-versione più aggiornata (quella che viene normalmente denominata POSIX.1) è
-stata rilasciata come standard internazionale con la sigla ISO/IEC
-9945-1:1996.
-
-Le \acr{glibc} implementano tutte le funzioni definite nello standard POSIX.1,
-fornendo in più alcune ulteriori capacità (per funzioni di \textit{pattern
-  matching} e per la manipolazione delle \textit{regular expression}), che
-usate dalla shell e dai comandi di sistema e che sono definite nello standard
-POSIX.2.
 
 
 \subsection{Lo standard X/Open -- XPG3}
@@ -401,8 +452,8 @@ socket.
 
 Queste estensioni sono state via via aggiunte al sistema nelle varie versioni
 del sistema (BSD 4.2, BSD 4.3 e BSD 4.4) come pure in alcuni derivati
-commerciali come SunOS. Le \acr{glibc} provvedono tutte queste estensioni che
-sono state in gran parte incorporate negli standard successivi.
+commerciali come SunOS. Il kernel e le \acr{glibc} provvedono tutte queste
+estensioni che sono state in gran parte incorporate negli standard successivi.
 
 
 \subsection{Lo standard System V}
@@ -428,11 +479,11 @@ rinominata in Unix System Laboratories) venne acquistata dalla Novell, che poi
 trasferì il marchio Unix al consorzio X/Open; l'ultima versione di System V fu
 la SVr4.2MP rilasciata nel Dicembre 93.
 
-Le \acr{glibc} implementano le principali funzionalità richieste da SVID che
-non sono già incluse negli standard POSIX ed ANSI C, per compatibilità con lo
-Unix System V e con altri Unix (come SunOS) che le includono. Tuttavia le
-funzionalità più oscure e meno utilizzate (che non sono presenti neanche in
-System V) sono state tralasciate.
+Linux e le \acr{glibc} implementano le principali funzionalità richieste da
+SVID che non sono già incluse negli standard POSIX ed ANSI C, per
+compatibilità con lo Unix System V e con altri Unix (come SunOS) che le
+includono. Tuttavia le funzionalità più oscure e meno utilizzate (che non sono
+presenti neanche in System V) sono state tralasciate.
 
 Le funzionalità implementate sono principalmente il meccanismo di
 intercomunicazione fra i processi e la memoria condivisa (il cosiddetto System