X-Git-Url: https://gapil.gnulinux.it/gitweb/?p=gapil.git;a=blobdiff_plain;f=intro.tex;h=ebbc5e2e0920dab23fa340bf4c6350decd677e4d;hp=4e97e31d6d93385fb1407b1faee49fdfad431dd6;hb=d99b4995b23505a9afde30adf3a716aa7a55f0e9;hpb=55bb7b212e8a450f8c9c0f840d5cf0de4c428380 diff --git a/intro.tex b/intro.tex index 4e97e31..ebbc5e2 100644 --- 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. -\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 @@ -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. -\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ì @@ -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 - 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. - + 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 @@ -226,21 +226,78 @@ qualunque operazione; pertanto per l'utente root i meccanismi di controllo descritti in precedenza sono disattivati. -\section{Gli standard di unix e Linux} +\section{Gli standard di unix e GNU/Linux} \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 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}