Rinominati app_a e app_b
[gapil.git] / intro.tex
index 4e97e31d6d93385fb1407b1faee49fdfad431dd6..ebbc5e2e0920dab23fa340bf4c6350decd677e4d 100644 (file)
--- a/intro.tex
+++ b/intro.tex
@@ -96,7 +96,7 @@ kernel il programmatore deve usare le opportune interfacce che quest'ultimo
 fornisce allo user space. 
 
 
 fornisce allo user space. 
 
 
-\subsection{Il kernel e il resto}
+\subsection{Il kernel e il sistema}
 \label{sec:intro_kern_and_sys}
 
 Per capire meglio la distinzione fra kernel space e user space si può prendere
 \label{sec:intro_kern_and_sys}
 
 Per capire meglio la distinzione fra kernel space e user space si può prendere
@@ -176,13 +176,13 @@ relizzazione di normali programmi non si hanno differenze pratiche fra l'uso
 di una funzione di libreria e quello di una chiamata al sistema.
 
 
 di una funzione di libreria e quello di una chiamata al sistema.
 
 
-\subsection{Utenti e gruppi, permessi e protezioni}
-\label{sec:intro_usergroup}
+\subsection{Un sistema multiutente}
+\label{sec:intro_multiuser}
 
 
-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 base di sicurezza che non sono previsti in sistemi operativi
-monoutente.
+Linux, come gli altri 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.
 
 Il concetto base è quello di utente (\textit{user}) del sistema, utente che ha
 dei ben definiti limiti e capacità rispetto a quello che può fare. Sono così
 
 Il concetto base è quello di utente (\textit{user}) del sistema, utente che ha
 dei ben definiti limiti e capacità rispetto a quello che può fare. Sono così
@@ -210,14 +210,14 @@ L'utente e il gruppo sono identificati da due numeri (la cui corrispondenza ad
 un nome in espresso in caratteri \`e inserita nei due files
 \texttt{/etc/passwd} e \texttt{/etc/groups}). Questi numeri sono
 l'\textit{user identifier}, detto in breve \textit{uid} e il \textit{group
 un nome in espresso in caratteri \`e inserita nei due files
 \texttt{/etc/passwd} e \texttt{/etc/groups}). Questi numeri sono
 l'\textit{user identifier}, detto in breve \textit{uid} e il \textit{group
- identifier}, detto in breve \textit{gid} che sono quelli che identificano
 identifier}, detto in breve \textit{gid} che sono quelli che identificano
 l'utente di fronte al sistema.
 l'utente di fronte al sistema.
-
 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
 esso. Inoltre con questo sistema viene anche garantita una forma base di
 sicurezza interna in quanto anche l'accesso ai file (vedi
 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
 esso. Inoltre con questo sistema viene anche garantita una forma base di
 sicurezza interna in quanto anche l'accesso ai file (vedi
-\secref{sec:fileintr_access_ctrl}) è regolato da questo meccanismo di
+\secref{sec:filedir_access_control}) è regolato da questo meccanismo di
 identificazione.
 
 Un utente speciale del sistema è \textit{root}, il cui uid è zero. Esso
 identificazione.
 
 Un utente speciale del sistema è \textit{root}, il cui uid è zero. Esso
@@ -226,21 +226,78 @@ qualunque operazione; pertanto per l'utente root i meccanismi di controllo
 descritti in precedenza sono disattivati.
 
 
 descritti in precedenza sono disattivati.
 
 
-\section{Gli standard di unix e Linux}
+\section{Gli standard di unix e GNU/Linux}
 \label{sec:intro_standard}
 
 \label{sec:intro_standard}
 
-
+In questa sezione prenderemo in esame alcune caratteristiche generali del
+sistema e gli standard adottati per le funzioni, i prototipi, gli errori, i
+tipi di dati.
+
+\subsection{Prototipi e puntatori}
+\label{sec:intro_function}
+
+\subsection{La misura del tempo in unix}
+\label{sec:intro_unix_time}
+
+Storicamente i sistemi unix-like hanno sempre mantenuto due distinti valori
+per i tempi all'interno del sistema, chiamati rispettivamente \textit{calendar
+  time} e \textit{process time}, secondo le definizioni:
+\begin{itemize}
+\item \textit{calendar time}: è il numero di secondi dalla mezzanotte del
+  primo gennaio 1970, in tempo universale coordinato (o UTC, data che viene
+  usualmente indicata con 00:00:00 Jan, 1 1970 (UTC) e chiamata \textit{the
+    Epoch}). Viene chiamato anche GMT (Greenwich Mean Time) dato che l'UTC
+  corrisponde all'ora locale di Greenwich.  E' il tempo su cui viene mantenuto
+  l'orologio del calcolatore, e viene usato ad esempio per indicare le date di
+  modifica dei file o quelle di avvio dei processi. Per memorizzare questo
+  tempo è stato riservato il tipo primitivo \func{time\_t}.
+\item \textit{process time}: talvolta anche detto tempo di CPU. Viene misurato
+  in \textit{clock tick}, corripondenti al numero di interruzioni effettuate
+  dal timer di sistema, e che per Linux sono ogni centesimo di secondo
+  (eccetto per la piattaforma alpha). Il dato primitivo usato per questo tempo
+  è \func{clock\_t}, inoltre la costante \macro{HZ} restituisce la frequenza
+  di operazione del timer, e corrisponde dunque al numero di tick al secondo
+  (Posix definisce allo stesso modo la costante \macro{CLK\_TCK}); questo
+  valore può comunque essere ottenuto con \func{sysconf} (vedi
+  \secref{sec:intro_limits}).
+\end{itemize}
+
+In genere si usa il \textit{calendar time} per tenere le date dei file e le
+informazioni analoghe che riguardano i tempi di ``orologio'' (usati ad esempio
+per i demoni che compiono lavori amministrativi ad ore definite, come
+\cmd{cron}). Di solito questo vene convertito automaticamente dal valore in
+UTC al tempo locale, utilizzando le opportune informazioni di localizzazione
+(specificate in \file{/etc/timezone}). E da tenere presente che questo tempo è
+mantenuto dal sistema e non corrisponde all'orologio hardware del calcolatore.
+
+Il \textit{process time} di solito si esprime in secondi e viene usato appunto
+per tenere conto dei tempi di esecuzione dei processi. Per ciascun processo il
+kernel tiene tre di questi tempi: 
+\begin{itemize}
+\item \textit{clock time}
+\item \textit{user time}
+\item \textit{system time}
+\end{itemize}
+il primo è il tempo ``reale'' (viene anche chiamato \textit{wall clock time})
+dall'avvio del processo, e misura il tempo trascorso fino alla sua
+conclusione; chiaramente un tale tempo dipede anche dal carico del sistema e
+da quanti altri processi stavano girando nello stesso periodo. Il secondo
+tempo è quello che la CPU ha speso nell'esecuzione delle istruzioni del
+processo in user space. Il terzo è il tempo impiegato dal kernel per eseguire
+delle system call per conto del processo medesimo (tipo quello usato per
+eseguire una \func{write} su un file). In genere la somma di user e system
+time viene chiamato \textit{CPU time}. 
 
 \subsection{Lo standard ANSI C}
 \label{sec:intro_ansiC}
 
 
 \subsection{Lo standard ANSI C}
 \label{sec:intro_ansiC}
 
-
-
 \subsection{Lo standard POSIX}
 \subsection{Lo standard POSIX}
-\label{sec:intro_ansiC}
-
-
+\label{sec:intro_posix}
 
 
+\subsection{Valori e limiti del sistema}
+\label{sec:intro_limits}
 
 
 
 
+\subsection{Tipi di dati primitivi}
+\label{sec:intro_data_types}