next up previous contents
Next: Cenni storici su LINUX Up: INTRODUZIONE A LINUX Previous: Ma che cos'è esattamente

Architettura del Sistema Operativo UNIX

There are two kinds of researchers:
those that have implemented something and those that have not.
The latter will tell you that there are 142 ways of doing things
and that there isn't consensus on which is best.
The former will simply tell you that 141 of them don't work.

La figura 3.1 rappresenta idealmente la struttura di UNIX.

  
Figure 3.1: Architettura del Sistema Operativo UNIX
\resizebox*{\textwidth}{!}{\includegraphics{unix_arch}}

Il Sistema Operativo, fondamentalmente corrispondente al kernel, interagisce direttamente con l'hardware per fornire servizi ai programmi. Quindi questi ultimi possono essere sviluppati in maniera indipendente dall'hardware utilizzato: basta programmare a un livello di astrazione più alto, individuando i servizi elementari da richiedere al kernel; inoltre, una volta scritti con questo criterio, i programmi risultano portabili su un hardware diverso, a patto che il kernel sia in grado di gestirlo correttamente.

Ovviamente, esistono ambienti software che non rispettano del tutto questa struttura; ad esempio, in certi casi anche ben noti, l'equivalente del kernel non è abbastanza potente per fornire tutti i servizi di cui hanno bisogno i programmi applicativi. Quindi questi ultimi devono supplire alle carenze del sistema interagendo direttamente con l'hardware. La prima conseguenza consiste nella non portabilità dei programmi su altre piattaforme; la seconda, a volte più evidente, sta nel fatto che l'affidabilità complessiva del sistema può essere peggiorata da quella di applicativi difettosi.

Ma torniamo a UNIX. Programmi come la shell e gli editor (come il VI) si trovano più esternamente rispetto al kernel, con cui interagiscono tramite un ben definito insieme di chiamate di sistema. Ovviamente, a questo livello si possono trovare anche programmi prodotti dall'utente, indicati simbolicamente come a.out, ad esempio prodotti tramite compilazione di un sorgente C. Ancora più esternamente si possono trovare altri programmi, che si appoggiano a quelli di livello più basso. Ad esempio, il compilatore C, indicato con cc (nel caso di Linux, il gcc), utilizza un preprocessore, un compilatore a due passate, un assemblatore e un loader, che sono programmi distinti di livello inferiore. La figura 3.1 illustra due soli livelli di programmi applicativi, ma, ovviamente, si possono avere ulteriori livelli. Più precisamente, la filosofia UNIX incoraggia la combinazione intelligente di programmi esistenti e affidabili piuttosto che la scrittura di un nuovo programma ``ad hoc'' (che andrebbe successivamente testato) per ogni specifico problema da risolvere.

Spesso, quando si parla di Sistema Operativo, si intende qualcosa di più ampio del solo kernel, includendo implicitamente almeno tutti i comandi del sistema e spesso anche applicativi di un certo livello. Spesso l'utente ingenuo è addirittura portato a identificare un sistema operativo con gli applicativi ad alto livello che usa e a non rendersi conto che in questo modo esclude ciò che più a pieno titolo è il sistema operativo vero e proprio. In buona sostanza, è un problema di individuazione di confini a volte sfumati e l'importante è capirsi, ma del Sistema Operativo fa senz'altro parte ciò che permette di utilizzare l'hardware, cioè il kernel. Considerare parte del Sistema Operativo anche i comandi è probabilmente opportuno e, magari, considerare anche il compilatore parte di UNIX può essere corretto. Però va precisato che, mentre su tutte le distribuzioni più diffuse di Linux c'è un prodotto free come il compilatore GNU, per gli UNIX commerciali (sui quali si può comunque usare il gcc), il compilatore va comprato a parte e il rivenditore non lo considera parte del Sistema Operativo che vi vende...


next up previous contents
Next: Cenni storici su LINUX Up: INTRODUZIONE A LINUX Previous: Ma che cos'è esattamente

1999-05-16