Fatta una bella passata di spell su tutto quanto ...
[gapil.git] / intro.tex
index a65d72d4bdd2fda1946a2b40fd3e84aab8ce3c3e..4e8dd690c553288de0a130874ccb3b4d888f0173 100644 (file)
--- a/intro.tex
+++ b/intro.tex
@@ -1,10 +1,10 @@
 \chapter{Introduzione}
 \label{cha:intro_unix}
 
-In questo primo capitolo sarà fatta un'introduzione ai contetti generali su
+In questo primo capitolo sarà fatta un'introduzione ai concetti generali su
 cui è basato un sistema di tipo unix, per fornire una base di comprensione
-mirata a sottolinearne le peculiarità che saranno poi importanti per quello
-che rigarda la programmazione; in particolare faremo una panoramica sulla
+mirata a sottolineare le peculiarità che saranno poi importanti per quello
+che riguarda la programmazione; in particolare faremo una panoramica sulla
 struttura di un sistema \textit{unix-like} come Linux.
 
 Chi avesse già una conoscenza di questa materia può tranquillamente saltare
@@ -13,15 +13,15 @@ il capitolo.
 \section{La struttura di un sistema Unix}
 \label{sec:intro_unix_struct}
 
-Il concetto base di unix é quello di un nucleo del sistema (il cosiddetto
-\textit{kernel}) a cui si demanda la gestione delle risorse essenziali (la
-CPU, la memoria, le periferiche); mentre tutto il resto, quindi anche la parte
-che prevede l'interazione con l'utente, deve venire realizzato tramite
-programmi eseguiti dal kernel e che accedano alle risorse hardware tramite
-delle richieste a quest'ultimo. 
+Il concetto base di un sistema unix-like é quello di un nucleo del sistema (il
+cosiddetto \textit{kernel}) a cui si demanda la gestione delle risorse
+essenziali (la CPU, la memoria, le periferiche) mentre tutto il resto, quindi
+anche la parte che prevede l'interazione con l'utente, deve venire realizzato
+tramite programmi eseguiti dal kernel e che accedano alle risorse hardware
+tramite delle richieste a quest'ultimo.
 
 Fin dall'inizio unix si presenta come un sistema operativo
-\textit{multitasking}, cioé in grado di eseguire contemporaneamente più
+\textit{multitasking}, cioè in grado di eseguire contemporaneamente più
 programmi, e multiutente, in cui é possibile che più utenti siano connessi ad
 una macchina eseguendo più programmi ``in contemporanea'' (in realtà, almeno
 per macchine a processore singolo, i programmi vengono eseguiti singolarmente
@@ -32,59 +32,58 @@ a rotazione).
 %computer (e quindi per un uso personale), sui quali l'hardware (allora
 %limitato) non consentiva la realizzazione di un sistema evoluto come uno unix.
 
-Gli unix più recenti, come linux, sono stati realizzati usando alcune
+Gli unix più recenti, come Linux, sono stati realizzati usando alcune
 caratteristiche dei processori moderni come la gestione hardware della memoria
 e la modalità protetta. In sostanza con i processori moderni si può
 disabilitare temporaneamente l'uso di certe istruzioni e l'accesso a certe
 zone di memoria fisica.  Quello che succede é che il kernel é il solo
 programma ad essere eseguito in modalità privilegiata, con il completo accesso
 all'hardware, mentre i programmi normali vengono eseguiti in modalità protetta
-(e non possono accedere direttamente alle zone di memoria riservate, al kernel
+(e non possono accedere direttamente alle zone di memoria riservate
 o alle 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
 ``processo'' (vedi \capref{cha:process}) deve essere posto in esecuzione (il
-cosidetto \textit{prehemptive scheduling}), e questo verrà comunque eseguito
-in modelità protetta; quando necessario il processo potrà accedere alle
+cosiddetto \textit{prehemptive scheduling}). Questo verrà comunque eseguito
+in modalità protetta; quando necessario il processo potrà accedere alle
 risorse hardware soltanto attraverso delle opportune chiamate al sistema
 (\textit{system call}) con un'interfaccia ben definita e standardizzata che
 restituiranno il controllo al kernel.
 
 La memoria viene sempre gestita del kernel attraverso il meccanismo della
 memoria virtuale, che consente di assegnare a ciascun processo uno spazio di
-indirizzi ``virtuale'' che il kernel stesso, con l'ausilio della unità di
-gestione della memoria, si incaricherà di rimappare automaticamente sulla
-memoria disponibile, salvando su disco (nella cosiddetta \textit{swap}) quando
-necessario le pagine di memoria in eccedenza.
+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 quando
+necessario su disco (nella cosiddetta \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
-cui \textit{everything is a file}, vedi \capref{cha:files_intro}, (questo
-non è vero per le interfacce di rete, ma resta valido il concetto generale che
-tutto il lavoro di accesso e gestione a basso livello è effettuato dal
-kernel), mentre ai programmi vengono fornite solo delle routine di
-interfacciamento; essendo l'argomento principale di cui tratteremo, di esse
-parleremo in abbondanza nei capitoli successivi.
+astratta che permette di trattarle come fossero file, secondo il concetto per
+cui \textit{everything is a file}, vedi \capref{cha:files_intro}, (questo non
+è vero per le interfacce di rete, che hanno un'interfaccia diversa, ma resta
+valido il concetto generale che tutto il lavoro di accesso e gestione a basso
+livello è effettuato dal kernel).
 
 
 \section{User space e kernel space}
 \label{sec:intro_userkernel}
 
-Questa architettura fa sì che nei sistemi unix esista una distinzione
-essenziale fra il cosiddetto \textit{user space}, che contraddistingue
-l'ambiente in cui vengono eseguiti i programmi, e il \textit{kernel space} che
-é l'ambiente in cui viene eseguito il kernel. Ogni programma gira come se
-avesse la piena disponibilità della macchina e della memoria ed è, salvo i
-meccanismi di comunicazione previsti dall'architettura (che esamineremo nel
-\capref{cha:IPC}) completamente ignaro del fatto che altri programmi possono
-essere messi in esecuzione dal kernel.
-
-In questo non è possibile ad un singolo programma disturbare l'azione di un
-altro programma o del sistema e questo è il principale motivo della stabilità
-di un sistema unix nei confronti di altri sistemi in cui i processi non hanno
-di questi limiti, o che vengono per vari motivi eseguiti al livello del
-kernel.
+L'architettura appena descritta fa sì che nei sistemi unix esista una
+distinzione essenziale fra il cosiddetto \textit{user space}, che
+contraddistingue l'ambiente in cui vengono eseguiti i programmi, e il
+\textit{kernel space} che é l'ambiente in cui viene eseguito il kernel. Ogni
+programma vede se stesso come se avesse la piena disponibilità della CPU
+e della memoria ed è, salvo i meccanismi di comunicazione previsti
+dall'architettura (che esamineremo nel \capref{cha:IPC}) completamente ignaro
+del fatto che altri programmi possono essere messi in esecuzione dal kernel.
+
+Per questa separazione non è possibile ad un singolo programma disturbare
+l'azione di un altro programma o del sistema e questo è il principale motivo
+della stabilità di un sistema unix nei confronti di altri sistemi in cui i
+processi non hanno di questi limiti, o che vengono per vari motivi eseguiti al
+livello del kernel.
 
 Pertanto deve essere chiaro a chi programma in unix che l'accesso diretto
 all'hardware non può avvenire se non all'interno del kernel, al di fuori dal
@@ -108,9 +107,9 @@ standard internazionale POSIX1003.a(?)) che sono comuni a tutti gli unix.
 \label{sec:intro_kernandlib}
 
 Per capire meglio la distinzione fra kernel space e user space si può prendere
-in esame la procedura di avvio di un sistema unix; all'avvio il bios (o in
-generale il software di avvio posto nelle eprom) eseguirà il \textit{boot}
-incarichandosi di caricare il kernel in memoria e di farne partire
+in esame la procedura di avvio di un sistema unix; all'avvio il BIOS (o in
+generale il software di avvio posto nelle EPROM) eseguirà il \textit{boot}
+incaricandosi di caricare il kernel in memoria e di farne partire
 l'esecuzione; quest'ultimo, dopo aver inizializzato le periferiche farà
 partire il primo processo, \textit{init} che è quello che si incaricherà di
 far partire tutti i processi successivi, come quello che si occupa di
@@ -125,7 +124,7 @@ programma di scrittura o di disegno, in user space.
 
 Questo significa ad esempio che il sistema di per sé non dispone di primitive
 per tutta una serie di operazioni (come la copia di un file) che altri sistemi
-(come windows) hanno invece al loro interno. Per questo può capitare che
+(come Windows) hanno invece al loro interno. Per questo può capitare che
 alcune operazioni, come quella in esempio, siano implementate come normali
 programmi.
 
@@ -140,12 +139,12 @@ programmi di utilit
 si aspetta da un sistema operativo.
 
 Questo è importante anche dal punto di vista della programmazione, infatti
-programmare in linux significa anzitutto essere in grado di usare la Libreria
+programmare in Linux significa anzitutto essere in grado di usare la Libreria
 Standard del C, in quanto né il kernel né il linguaggio C implementano
 direttamente operazioni comuni come la gestione della memoria, l'input/output
 o la manipolazione delle stringhe presenti in qualunque programma.
 
-Per questo in linux una parte essenziale del sistema (senza la quale nulla
+Per questo in GNU/Linux una parte essenziale del sistema (senza la quale nulla
 funziona) è la realizzazione fatta dalla FSF della suddetta libreria (la
 \textit{glibc}), in cui sono state implementate tutte le funzioni essenziali
 definite negli standard POSIX e ANSI C, che viene utilizzata da qualunque
@@ -162,7 +161,7 @@ monoutente.
 
 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ì
-previsti una serie di meccanismi per identificare i singoli utenti ed uan
+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.