<!--
     The FreeBSD Italian Documentation Project

     $FreeBSD: doc/it_IT.ISO8859-15/books/unix-introduction/structure/chapter.sgml,v 1.1 2003/03/19 18:46:42 trhodes Exp $
-->

<chapter id="structure">
  <title>Struttura di Unix</title>

  <sect1 id="structure-os">
    <title>Il sistema operativo</title>

    <para>Unix &egrave; un sistema operativo a strati.  Lo strato pi&ugrave;
      interno &egrave; 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
      &egrave; quest'ultimo a fornire i servizi richiesti.  Uno dei pi&ugrave
      grandi fattori che ha contribuito alla richiesta di Unix da parte dei
      programmatori &egrave; stato che molti programmi utente corretti
      sono indipendenti dall'hardware sottostante, e ci&ograve; 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&igrave; 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 &egrave; 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).  &Egrave; 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 &egrave; 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 &egrave; o un <emphasis>file</emphasis> o una
      <emphasis>directory</emphasis> di file, dove quest'ultima pu&ograve;
      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&ograve; 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 &egrave; 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 &egrave; in <filename>/home/frank</filename> e si
      desidera specificare un path nel modo relativo si pu&ograve; 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 &egrave; se stessa.  Una directory &egrave; 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 &egrave; 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&ograve; essere ASCII o binario o una
      combinazione di questi e pu&ograve; 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'&egrave; 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&ograve; 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> &egrave; un interprete a linea di
      comando.  L'utente interagisce con il kernel attraverso la shell.  Si
      pu&ograve; 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&agrave; 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>

<!--
     Local Variables:
     mode: sgml
     sgml-indent-data: t
     sgml-omittag: nil
     sgml-always-quote-attributes: t
     sgml-parent-document: ("../book.sgml" "book" "chapter")
     End:
-->