Aggiornamento al 2010 delle note di copyright
[gapil.git] / intro.tex
index 1fa1d24e303760926581831852ebf3c0388ea2a9..da7720e89961d7f81647d465253de2e85f6eb877 100644 (file)
--- a/intro.tex
+++ b/intro.tex
@@ -1,6 +1,6 @@
 %% intro.tex
 %%
-%% Copyright (C) 2000-2008 Simone Piccardi.  Permission is granted to
+%% Copyright (C) 2000-2010 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",
@@ -217,17 +217,17 @@ fig.~\ref{fig:intro_sys_struct}.
   \label{fig:intro_sys_struct}
 \end{figure}
 
-Normalmente ciascuna di queste chiamate al sistema viene rimappata in
-opportune funzioni con lo stesso nome definite dentro la Libreria Standard del
-C, che, oltre alle interfacce alle system call, contiene anche tutta la serie
-delle ulteriori funzioni definite dai vari standard, che sono comunemente
-usate nella programmazione.
+Normalmente ciascuna di queste chiamate al sistema fornite dal kernel viene
+rimappata in opportune funzioni con lo stesso nome definite dentro la Libreria
+Standard del C, che, oltre alle interfacce alle \textit{system call}, contiene
+anche tutta la serie delle ulteriori funzioni definite dai vari standard, che
+sono comunemente usate nella programmazione.
 
 Questo è importante da capire perché programmare in Linux significa anzitutto
 essere in grado di usare le varie interfacce contenute nella Libreria Standard
 del C, in quanto né il kernel, né il linguaggio C implementano direttamente
 operazioni comuni come l'allocazione dinamica della memoria, l'input/output
-bufferizzato o la manipolazione delle stringhe, presenti in qualunque
+bufferizzato sui file o la manipolazione delle stringhe, presenti in qualunque
 programma.
 
 Quanto appena illustrato mette in evidenza il fatto che nella stragrande
@@ -241,10 +241,11 @@ maggioranza dei casi,\footnote{esistono implementazioni diverse delle librerie
   rimpiazzo delle \acr{glibc} in tutti quei sistemi specializzati che
   richiedono una minima occupazione di memoria.} si dovrebbe usare il nome
 GNU/Linux (piuttosto che soltanto Linux) in quanto una parte essenziale del
-sistema (senza la quale niente funzionerebbe) è la GNU Standard C Library (in
-breve \acr{glibc}), ovvero la libreria realizzata dalla Free Software
-Foundation nella quale sono state implementate tutte le funzioni essenziali
-definite negli standard POSIX e ANSI C, utilizzabili da qualunque programma.
+sistema (senza la quale niente funzionerebbe) è la \textit{GNU Standard C
+  Library} (in breve \acr{glibc}), ovvero la libreria realizzata dalla Free
+Software Foundation nella quale sono state implementate tutte le funzioni
+essenziali definite negli standard POSIX e ANSI C, utilizzate da qualunque
+programma.
 
 Le funzioni di questa libreria sono quelle riportate dalla terza sezione del
 \textsl{Manuale di Programmazione di Unix} (cioè accessibili con il comando
@@ -254,6 +255,36 @@ di vista dell'implementazione, anche se poi, nella realizzazione di normali
 programmi, non si hanno differenze pratiche fra l'uso di una funzione di
 libreria e quello di una chiamata al sistema.
 
+Le librerie standard del C consentono comunque, nel caso non sia presente una
+specifica funzione di libreria corrispondente, di eseguire una \textit{system
+  call} generica tramite la funzione \funcd{syscall}, il cui prototipo,
+accessible se si è definita la macro \macro{\_GNU\_SOURCE}, (vedi
+sez.~\ref{sec:intro_gcc_glibc_std}) è:
+\begin{functions}
+  \headdecl{unistd.h}
+  \headdecl{sys/syscall.h}
+  \funcdecl{int syscall(int number, ...)}
+
+  Esegue la \textit{system call} indicata da \param{number}.
+\end{functions}
+
+La funzione richiede come primo argomento il numero della \textit{system call}
+da invocare, seguita dagli argomenti da passare alla stessa (che ovviamente
+dipendono da quest'ultima), e restituisce il codice di ritorno della
+\textit{system call} invocata. In generale un valore nullo indica il successo
+ed un valore negativo è un codice di errore che poi viene memorizzato nella
+variabile \var{errno} (sulla gestione degli errori torneremo in dettaglio in
+sez.~\ref{sec:sys_errors}).
+
+Il valore di \param{number} dipende sia dalla versione di kernel che
+dall'architettura,\footnote{in genere le vecchie \textit{system call} non
+  vengono eliminate e se ne aggiungono di nuove con nuovi numeri.}  ma
+ciascuna \textit{system call} viene in genere identificata da una costante
+nella forma \texttt{SYS\_*} dove al prefisso viene aggiunto il nome che spesso
+corrisponde anche alla omonima funzione di libreria; queste costanti sono
+definite nel file \texttt{sys/syscall.h}, ma si possono anche usare
+direttamente valori numerici.
+
 
 \subsection{Un sistema multiutente}
 \label{sec:intro_multiuser}
@@ -261,13 +292,15 @@ libreria e quello di una chiamata al sistema.
 Linux, come gli altri kernel Unix, nasce fin dall'inizio come sistema
 multiutente, cioè in grado di fare lavorare più persone in contemporanea. Per
 questo esistono una serie di meccanismi di sicurezza, che non sono previsti in
-sistemi operativi monoutente, e che occorre tenere presente.
+sistemi operativi monoutente, e che occorre tenere presenti.
 
 Il concetto base è quello di utente (\textit{user}) del sistema, le cui
 capacità rispetto a quello che può fare sono sottoposte a ben precisi limiti.
 Sono così previsti una serie di meccanismi per identificare i singoli utenti
 ed una serie di permessi e protezioni per impedire che utenti diversi possano
-danneggiarsi a vicenda o danneggiare il sistema.
+danneggiarsi a vicenda o danneggiare il sistema. Questi meccanismi sono
+realizzati dal kernel stesso ed attengono alle operazioni più varie, e
+torneremo su di essi in dettaglio più avanti.
 
 Ogni utente è identificato da un nome (l'\textit{username}), che è quello che
 viene richiesto all'ingresso nel sistema dalla procedura di \textit{login}
@@ -277,18 +310,17 @@ richiesta di una parola d'ordine (la \textit{password}), anche se sono
 possibili meccanismi diversi.\footnote{ad esempio usando la libreria PAM
   (\textit{Pluggable Autentication Methods}) è possibile astrarre
   completamente dai meccanismi di autenticazione e sostituire ad esempio l'uso
-  delle password con meccanismi di identificazione biometrica.}
-
-Eseguita la procedura di riconoscimento in genere il sistema manda in
-esecuzione un programma di interfaccia (che può essere la \textit{shell} su
-terminale o un'interfaccia grafica) che mette a disposizione dell'utente un
-meccanismo con cui questo può impartire comandi o eseguire altri programmi.
+  delle password con meccanismi di identificazione biometrica.} Eseguita la
+procedura di riconoscimento in genere il sistema manda in esecuzione un
+programma di interfaccia (che può essere la \textit{shell} su terminale o
+un'interfaccia grafica) che mette a disposizione dell'utente un meccanismo con
+cui questo può impartire comandi o eseguire altri programmi.
 
 Ogni utente appartiene anche ad almeno un gruppo (il cosiddetto
 \textit{default group}), ma può essere associato ad altri gruppi (i
 \textit{supplementary group}), questo permette di gestire i permessi di
 accesso ai file e quindi anche alle periferiche, in maniera più flessibile,
-definendo gruppi di lavoro, di accesso a determinate risorse, ecc.
+definendo gruppi di lavoro, di accesso a determinate risorse, ecc. 
 
 L'utente e il gruppo sono identificati da due numeri, la cui corrispondenza ad
 un nome espresso in caratteri è inserita nei due file \conffile{/etc/passwd} e
@@ -300,7 +332,8 @@ un nome espresso in caratteri 
 \textsl{user-ID}, ed indicato dall'acronimo \acr{uid}, e il \textit{group
   identifier}, detto in breve \textsl{group-ID}, ed identificato dall'acronimo
 \acr{gid}, e sono quelli che vengono usati dal kernel per identificare
-l'utente.
+l'utente; torneremo in dettaglio su questo argomento in
+sez.~\ref{sec:proc_perms}. 
  
 In questo modo il sistema è in grado di tenere traccia dell'utente a cui
 appartiene ciascun processo ed impedire ad altri utenti di interferire con
@@ -459,7 +492,9 @@ una infinita serie di problemi di portabilit
     \type{size\_t}  & Dimensione di un oggetto.\\
     \type{ssize\_t} & Dimensione in numero di byte ritornata dalle funzioni.\\
     \type{ptrdiff\_t}& Differenza fra due puntatori.\\
-    \type{time\_t}  & Numero di secondi (in tempo di calendario).\\
+    \type{time\_t}  & Numero di secondi (in \itindex{calendar~time}
+                      \textsl{tempo di calendario}, vedi 
+                      sez.~\ref{sec:sys_time}).\\
     \type{uid\_t}   & Identificatore di un utente.\\
     \hline
   \end{tabular}
@@ -945,10 +980,10 @@ una opportuna macro; queste estensioni sono illustrate nel seguente elenco:
   macro non ha nessun effetto.
 
 \item[\macro{\_ATFILE\_SOURCE}] definendo questa macro si rendono disponibili
-  le estensioni delle funzioni di creazione di file e directory che risolvono
-  i problemi di sicurezza insiti nell'uso di pathname relativi con programmi
-  \itindex{thread} \textit{multi-thread} illustrate in
-  sez.~\ref{sec:file_openat}. 
+  le estensioni delle funzioni di creazione, accesso e modifica di file e
+  directory che risolvono i problemi di sicurezza insiti nell'uso di pathname
+  relativi con programmi \itindex{thread} \textit{multi-thread} illustrate in
+  sez.~\ref{sec:file_openat}.
 
 \item[\macro{\_REENTRANT}] definendo questa macro, o la equivalente
   \macro{\_THREAD\_SAFE} (fornita per compatibilità) si rendono disponibili le