166 lines
7.9 KiB
XML
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>
|