1.11 Il software

Un computer ha una caratteristica fondamentale: è una macchina a stati che può essere programmata. Per macchina a stati si intende che la generazione dei risultati (output) dipende, oltre che dai dati di ingresso (input), anche dallo stato in cui si trova il sistema al momento dell’elaborazione dell’input stesso, cioè l’elaborazione degli stessi dati di input può portare alla generazione di output diversi poiché il sistema si trova in uno stato diverso.

L’elaborazione dei dati avviene attraverso l’esecuzione del software50, ovvero dei programmi. Un programma (o algoritmo) è una sequenza ordinata di istruzioni scritte in un linguaggio comprensibile dall’esecutore. L’unico “linguaggio” che la CPU è in grado di comprendere è il linguaggio macchina51 (o codice macchina), ovvero un insieme di istruzioni molto semplici composte soltanto da gruppi di cifre binarie. Poiché risulta molto difficile scrivere i programmi direttamente in linguaggio macchina, questi vengono scritti in linguaggi che più si avvicinano a quello naturale: i linguaggi di programmazione. I linguaggi di programmazione sono costituiti da insiemi di regole sintattiche diverse da linguaggio a linguaggio ed ognuno di essi è caratterizzato da un determinato livello di astrazione che questo fornisce al programmatore: più il livello di astrazione è elevato (linguaggio di alto livello) e più i dettagli del sistema sono nascosti al programmatore, più è basso (linguaggio di basso livello) e più dettagliate sono le potenzialità che il linguaggio mette a disposizione del programmatore.52 Esistono così il linguaggio C, il C++, l’Assembly, il Java, il Pascal, il Fortran, l’Eiffel, il Perl, il Python, il Ruby, ... Poiché il C è il linguaggio con il quale è stata scritta la quasi totalità dei sistemi operativi Unix-like, esso è il linguaggio di riferimento per tali sistemi, ovvero le funzioni di libreria che si interfacciano con il sistema operativo, sono a disposizione dei programmatori direttamente in tale linguaggio.

Il software si può suddividere in due grossi filoni: le applicazioni ed i driver. Le applicazioni sono programmi che si interfacciano con l’utente e gli permettono di effettuare operazioni di qualunque tipo, come scrivere documenti, creare immagini, riprodurre musica, navigare sul web, ... I driver sono programmi di più basso livello (generalmente non interagiscono direttamente con l’utente) che gestiscono la comunicazione del sistema con i vari dispositivi, ovvero con i relativi controller.


  1.11.1 Il kernel ed i processi
  1.11.2 Compilatore ed interprete
  1.11.3 Input, output ed exit status
  1.11.4 Le versioni