1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
<?xml version="1.0" encoding="iso-8859-15" standalone="no"?>
<!--
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>
|