+all: html dvi ps pdf
+
html:
latex2html -local_icons main.tex
dvi:
latex main.tex
+pdf:
+ pdflatex main.tex
+
ps:
dvips -o gapil.ps main.dvi
-all: html dvi ps
+install:
+ scp gapil piccardi@firenze.linux.it:public_html
clean:
rm -f *.dvi *.log *.ps *.html *.aux
\ No newline at end of file
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
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ì
accesso ai file e quindi anche alle periferiche, in maniera più flessibile,
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 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
-l'utente di fronte al sistema.
+% 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
+% 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
\newcommand{\secref}[1]{sez.~\ref{#1}}
%
% Macro to create a special environment for function prototypes
+% boxed description
%
-\newenvironment{prototype}[2]{
+\newenvironment{prototype}[2]
+{% defining what is done by \begin
\center
- \footnotesize
+ \footnotesize
\begin{minipage}[c]{14cm}
\par \texttt{\#include <#1>}
% \par \
% #1
% #2
% \end{lstlisting}
+ \begin{list}{}{}
+ \item
+}
+{% defining what is done by \end
+ \end{list}
+ \par
+\par \texttt{ }
+\end{minipage}
+\normalsize
+\par
+}
+\newenvironment{errlist}{\begin{description}}{\end{description}}
+
+%
+% Slighty different envirnoment to be used for multi-header,
+% multi-functions boxed description
+%
+\newcommand{\headdecl}[1]{\par \texttt{\#include <#1>}}
+\newcommand{\funcdecl}[1]{\par \texttt{#1}}
+\newenvironment{functions}
+{% defining what is done by \begin
+ \center
+ \footnotesize
+ \begin{minipage}[c]{14cm}
+
\begin{list}{}{}
\item }
-{ \end{list}
+{% defining what is done by \end
+ \end{list}
\par
\par \texttt{ }
\end{minipage}
\par
}
\newenvironment{errlist}{\begin{description}}{\end{description}}
+
+
+
Le funzioni previste dallo standard ANSI C per la gestione della memoria sono
quattro, i prototipi sono i seguenti:
+\begin{prototypes}
+\headdecl{stdlib.h}
+\funcdecl{void *calloc(size\_t size)}
+ Alloca \texttt{size} bytes nello heap. La memoria viene inizializzata a 0.
+
+ La funzione restituisce il puntatore alla zona di memoria allocata in caso
+ di successo e \texttt{NULL} in caso di fallimento, nel qual caso
+ \texttt{errno} viene settata a \texttt{ENOMEM}.
+\funcdecl{void *malloc(size\_t size)}
+ Alloca \texttt{size} bytes nello heap. La memoria non viene inizializzata.
+
+ La funzione restituisce il puntatore alla zona di memoria allocata in caso
+ di successo e \texttt{NULL} in caso di fallimento, nel qual caso
+ \texttt{errno} viene settata a \texttt{ENOMEM}.
+\funcdecl{void *realloc(void *ptr, size\_t size)}
+ Cambia la dimensione del blocco allocato all'indirizzo \texttt{ptr}
+ portandola a \texttt{size}.
+
+ La funzione restituisce il puntatore alla zona di memoria allocata in caso
+ di successo e \texttt{NULL} in caso di fallimento, nel qual caso
+ \texttt{errno} viene settata a \texttt{ENOMEM}.
+\funcdecl{void free(void *ptr)}
+ Disalloca lo spazio di memoria puntato da \texttt{ptr}.
+
+ La funzione non ritorna nulla.
+
+\end{prototypes}
\begin{prototype}{stdlib.h}{void *calloc(size\_t size)}
Alloca \texttt{size} bytes nello heap. La memoria viene inizializzata a 0.
chiamata) può diventare sincrono o asincrono a seconda che sia generato
internamente o esternamente al processo.
-\section{La notifica dei segnali}
+\subsection{La notifica dei segnali}
\label{sec:sig_notification}
Quando un segnale viene generato il kernel prende nota del fatto; si dice così
-\subsection{I segnali standard}
+\section{I segnali standard}
\label{sec:sig_standard}
Esaminiamo ora i vari segnali disponibili e le loro caratteristiche.
Questi segnali sono:
-\begin{list}
+\begin{description}
\item \texttt{SIGFPE} Riporta un errore aritmetico fatale. Benché il nome
derivi da \textit{floating point exception} si applica a tutti gli errori
aritmetici compresa la divisione per zero e l'overflow.
% molte diverse eccezioni che \texttt{SIGFPE} non distingue, mentre lo
% standard IEEE per le operazioni in virgola mobile definisce vaire eccezioni
% aritmetiche e richiede che esse siano notificate.
+
\item \texttt{SIGILL} Il nome deriva da \textit{illegal instruction},
significa che il programma sta cercando di eseguire una istruzione
privilegiata o inesistente, in generale del codice illegale. Poiché il
\item \texttt{SIGSYS} Sta ad indicare che si è eseguta una istruzione che
richiede l'esecuzione di una system call, ma si è fornito un codice
sbagliato per quest'ultima.
-\end{list}
+\end{description}
\subsection{I segnali di terminazione}