Completata tcsetattr e tcgetaddr, inserito nuovo esempio.
[gapil.git] / intro.tex
index 6b7be35e4d4bcff7a39e750c2e29460aa771096c..1fce94301774708b4ebb7dbb7b211f331acd7b6a 100644 (file)
--- a/intro.tex
+++ b/intro.tex
@@ -54,19 +54,19 @@ 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
 
 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
 
 La memoria viene sempre gestita dal kernel attraverso il meccanismo della
-\textsl{memoria virtuale}, che consente di assegnare a ciascun processo uno
-spazio di indirizzi ``virtuale'' (vedi \secref{sec:proc_memory}) che il kernel
-stesso, con l'ausilio della unità di gestione della memoria, si incaricherà di
-rimappare automaticamente sulla memoria disponibile, salvando su disco quando
-necessario (nella cosiddetta area di \textit{swap}) le pagine di memoria in
-eccedenza.
+\textsl{memoria virtuale}\index{memoria virtuale}, che consente di assegnare a
+ciascun processo uno spazio di indirizzi ``virtuale'' (vedi
+\secref{sec:proc_memory}) che il kernel stesso, con l'ausilio della unità di
+gestione della memoria, si incaricherà di rimappare automaticamente sulla
+memoria disponibile, salvando su disco quando necessario (nella cosiddetta
+area di \textit{swap}) le pagine di memoria in eccedenza.
 
 Le periferiche infine vengono viste in genere attraverso un'interfaccia
 astratta che permette di trattarle come fossero file, secondo il concetto per
 
 Le periferiche infine vengono viste in genere attraverso un'interfaccia
 astratta che permette di trattarle come fossero file, secondo il concetto per
@@ -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
 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.
 
 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
 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
  
 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
 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}
 
 
 \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
 
 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}
 
 
 \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.
 
 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
 
 Le funzionalità implementate sono principalmente il meccanismo di
 intercomunicazione fra i processi e la memoria condivisa (il cosiddetto System