doc/it_IT.ISO8859-15/books/unix-introduction/structure/chapter.xml
2013-01-21 17:39:52 +00:00

166 lines
7.9 KiB
XML

<?xml version="1.0" encoding="iso-8859-15"?>
<!--
The FreeBSD Italian Documentation Project
$FreeBSD$
-->
<chapter id="structure">
<title>Struttura di Unix</title>
<sect1 id="structure-os">
<title>Il sistema operativo</title>
<para>Unix è un sistema operativo a strati. Lo strato più
interno è l'hardware il quale fornisce servizi al OS. Il sistema
operativo (OS), riferito in Unix come al <emphasis>kernel</emphasis>,
interagisce direttamente con l'hardware e fornisce i servizi ai programmi
utente. I programmi utente non necessitano di conoscere informazioni
sull'hardware. Devono solo sapere come interagire con il kernel ed
è quest'ultimo a fornire i servizi richiesti. Uno dei più
grandi fattori che ha contribuito alla richiesta di Unix da parte dei
programmatori è stato che molti programmi utente corretti
sono indipendenti dall'hardware sottostante, e ciò li rende
facilmente trasportabili su nuovi sistemi.</para>
<para>I programmi utente interagiscono con il kernel attraverso un set di
<emphasis>system call</emphasis> (chiamate di sistema) standard. Queste
system call chiedono dei servizi, servizi che saranno forniti dal kernel.
Così i servizi possono includere un accesso a un file: aprire,
chiudere, leggere, scrivere un file, creare un link o eseguire un file;
creare o aggiornare degli account (informazioni relative ad un utente come
nome, password, ecc.); cambiare il proprietario di un file o di una
directory; spostarsi in una nuova directory; creare, sospendere o
terminare un processo; abilitare l'accesso a un dispositivo hardware e
impostare dei limiti sulle risorse di sistema.</para>
<para>Unix è un sistema operativo <emphasis>multi-user</emphasis>
(multi-utente) e <emphasis>multi-tasking</emphasis> (multi-processo). Si
possono avere molti utenti <quote>loggati</quote> simultaneamente nel
sistema (multi-user), ognuno dei quali esegue alcuni programmi
(multi-tasking). È compito del kernel mantenere ogni processo e
ogni utente separato e regolare l'accesso all'hardware di sistema, inclusa
la cpu, la memoria, il disco e altri dispositivi di I/O.</para>
<programlisting>
FIGURA 2.1 Struttura di un sistema Unix
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
| |
| Programmi |
| _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ |
| | | |
| | Kernel | |
| | _ _ _ _ _ _ _ _ _ _ _ _ _ _ | |
| | | Hardware | | |
| | |_ _ _ _ _ _ _ _ _ _ _ _ _ _| | |
| | | |
| | System Call | |
| |_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _| |
| |
|_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _|</programlisting>
</sect1>
<sect1 id="structure-file-system">
<title>Il file system</title>
<para>L'aspetto del file system di Unix è paragonabile alla struttura
rovesciata di un albero. Si parte dall'alto con la directory
<emphasis>root</emphasis>, denotata con <filename>/</filename>, per poi
scendere attraverso sotto-directory sottostanti la root.</para>
<programlisting>
FIGURA 2.2 Struttura del file system di Unix
/(root) 1 livello
| | | | |
bin dev etc tmp usr 2 livello
| | | | | | | | |
sh date csh ttya cua0 passwd group bin lib 3 livello
|
gcc 4 livello
.... n livello</programlisting>
<para>Ogni nodo è o un <emphasis>file</emphasis> o una
<emphasis>directory</emphasis> di file, dove quest'ultima può
contenere altri file e directory. Un file o una directory vengono
specificati attraverso il loro <emphasis>path name</emphasis> (percorso
del nome del file o della directory), il quale può essere un path
name assoluto oppure un path name relativo ad un'altra locazione. Un path
name assoluto inizia con la directory root, <filename>/</filename>,
seguono poi i <quote>rami</quote> del file system, ognuno separato da /,
fino a raggiungere il file desiderato, come per esempio:</para>
<para><filename>/home/condron/source/xntp</filename></para>
<para>Un path name relativo specifica un percorso relativo ad un altro path
name, che usualmente è la directory di lavoro corrente in cui ci si
trova. Sono ora introdotte due directory speciali:</para>
<para><filename>.</filename> la directory corrente</para>
<para><filename>..</filename> la directory padre della directory
corrente</para>
<para>Quindi se si è in <filename>/home/frank</filename> e si
desidera specificare un path nel modo relativo si può usare:</para>
<para><filename>../condron/source/xntp</filename></para>
<para>Questo indica che si deve prima salire di un livello di directory,
quindi passare attraverso la directory <filename>condron</filename>,
seguire la directory <filename>source</filename> e quindi
<filename>xntp</filename>.</para>
</sect1>
<sect1 id="structure-directories-files-inodes">
<title>Directory, file e inode Unix</title>
<para>Ogni <emphasis>directory</emphasis> e ogni <emphasis>file</emphasis>
sono inclusi nella loro directory padre. Nel caso della directory root,
la directory padre è se stessa. Una directory è un file
contenente una tabella che elenca i file contenuti nella directory stessa,
dove ai nomi dei file in lista vengono assegnati i corrispondenti numeri
di <emphasis>inode</emphasis>. Un inode è un file speciale,
progettato per essere letto dal kernel al fine di conoscere alcune
informazioni su ciascun file. Un inode specifica i permessi del file, il
proprietario del file, la data di creazione, quella dell'ultimo accesso e
quella dell'ultima modifica del file e la posizione fisica dei blocchi di
dati sul disco che contengono il file.</para>
<para>Il sistema non richiede qualche struttura particolare per i dati
contenuti nel file. Il file può essere ASCII o binario o una
combinazione di questi e può rappresentare dati testuali, uno
script di shell, un codice oggetto compilato per un programma, una tabella
di directory, robaccia o qualunque cosa si voglia.</para>
<para>Non c'è un'intestazione, una traccia, un'etichetta o il
carattere <emphasis>EOF</emphasis> come parte del file.</para>
</sect1>
<sect1 id="structure-programs">
<title>Programmi Unix</title>
<para>Un <emphasis>programma</emphasis> o un <emphasis>comando</emphasis>
interagisce con il kernel per fornire l'ambiente e realizzare le
funzioni richieste dall'utente. Un programma può essere: un file
di shell eseguibile, conosciuto come uno script di shell, un comando
interno (built-in) alla shell o un file sorgente compilato in codice
oggetto.</para>
<para>La <emphasis>shell</emphasis> è un interprete a linea di
comando. L'utente interagisce con il kernel attraverso la shell. Si
può scrivere uno script ASCII (testo) in modo tale da essere
interpretato da una shell.</para>
<para>I programmi di sistema sono generalmente in forma binaria, compilati
partendo da un codice sorgente in C. Questi si trovano in posti come
<filename>/bin</filename>, <filename>/usr/bin</filename>,
<filename>/usr/local/bin</filename>, <filename>/usr/ucb</filename>, ecc.
Questi comandi forniscono quelle funzionalità che normalmente si
pensano essere di Unix. Alcuni di questi sono &man.sh.1;, &man.csh.1;,
&man.date.1;, &man.who.1;, &man.more.1;, &man.ls.1; e molti altri.</para>
</sect1>
</chapter>