2001/02 Lezione N. 10 Struttura del Software

2001/02
Lezione N. 10
Struttura del Software
Linguaggi di programmazione e programmi. Linguaggio di programmazione: linguaggio formale le cui regole
sintattiche e semantiche sono espresse in modo rigoroso. Ogni linguaggio di programmazione fa riferimento ad un
modello di elaborazione (sistema formale) ben preciso. Un programma è la descrizione di un algoritmo nei termini
di un linguaggio di programmazione. In pratica la differenza tra un algoritmo e un programma è che il primo è
espresso in termini non rigorosi (benché non ambigui) poiché è concepito per essere letto da un esecutore ideale
intelligente, il secondo è espresso in termini rigorosi per poter essere interpretato ed eseguito in modo automatico
da una macchina.
Esistono diversi linguaggi di programmazione. Distinguiamo i linguaggi di programmazione ad alto livello, che
risultano facilmente comprensibili e prescindono dal tipo di hardware che eseguirà l'elaborazione, dai linguaggi
macchina, le cui istruzioni sono direttamente interpretate dall'hardware e sono pertanto codificate in termini di 0 e
1. Chiamiamo programma (o codice) sorgente quello scritto in un linguaggio di programmazione ad alto livello,
codice macchina o eseguibile quello direttamente eseguibile da un calcolatore. La traduzione dal primo al secondo
viene effettuata automaticamente da due tipi di strumenti software: i compilatori e gli interpreti. I compilatori
traducono una volta per tutte l'intero codice sorgente in un codice eseguibile. Gli interpreti ne interpretano ogni
singola istruzione al momento dell'esecuzione.
Processi e task. Un personal computer esegue un programma alla volta. Un programma in esecuzione prende il
nome di processo. L'esecuzione concorrente di più programmi è simulata con tecniche di multitasking, che
consistono nel dedicare alternativamente brevi periodi di tempo all'esecuzione di ciascun processo.
Software. Il software è l'insieme dei programmi che possono essere eseguiti da un calcolatore, e consente
all'utente di utilizzare (programmare) l'hardware. E' opportuno distinguere almeno due livelli di software sovrapposti
che si interpongono tra l'utente e l'hardware:
• il software di sistema, che gestisce le risorse hardware rendendole disponibili attraverso una serie di comandi
di sistema,
• il software applicativo, che usa le risorse attraverso il sistema operativo.
Il software di sistema. Il software di sistema comprende il BIOS (Basic Input Output System), che si incarica della
gestione di basso livello, e il sistema operativo, un processo la cui esecuzione è indispensabile al funzionamento
del computer in quanto rende accessibili le risorse hardware
• sia all'utente, attraverso comandi di sistema che possono essere direttamente invocati utilizzando i dispositivi
di ingresso: tastiera o mouse,
• sia ai programmi applicativi, assegnando le risorse ai processi in esecuzione e rendendone standard
l'interfaccia.
Il BIOS e il sistema operativo sono automaticamente avviati all’accensione del computer durante la fase di boot
(inizializzazione), le cui operazioni sono registrate in ROM ed automaticamente eseguite del computer. La gestione
specifica di ogni periferica è assegnata a particolari componenti del sistema operativo chiamati device driver. I
device drivers sono a diretto contatto con l'hardware e ne devono conoscere i dettagli tecnici, mentre i livelli di
software superiori ne conoscono solo la funzionalità. Per questo i device drivers sono generalmente sviluppati da
chi produce le periferiche e distribuiti assieme alle periferiche stesse.
Il file system. Particolarmente interessante è la gestione dei dispositivi di memoria di massa. I dati memorizzati sui
dispositivi di memoria di massa sono organizzati in gerarchie di file che costituiscono il file system. Ogni file
contiene dati tra loro coerenti, o perchè della stessa natura, o perchè utilizzati contemporaneamente (ad esempio
un testo, una serie di numeri, i dati o i risultati di un problema, un programma, un'immagine, ecc.). Particolari tipi di
files, detti directory, contengono liste di altri file e consentono di strutturare il file system come un albero. Ad ogni
file è associato un name, che lo identifica univocamente all'interno della directory a cui appartiene, e un path
(percorso) che individua univocamente la directory in cui si trova nel file system. Il name è composto a sua volta da
nome ed estensione (che denota il tipo di file) separati da un punto. Specificando il path e il name si indica
univocamente il cammino che porta dalla radice del file system fino al file.
Es: c:\alex\tmp\fax.doc, dove c: è il nome del dispositivo di memoria, alex e tmp sono due directory e fax.doc è il
file.
Sistemi operativi con interfaccia grafica. Nei sistemi operativi tipo MS Windows le directory sono dette folders
(o cartelle) e i restanti file sono detti documents (o documenti). L'esplorazione (o browsing) del file system avviene
attraverso una sequenza di finestre (window) associate ad ogni directory, tra le quali ci si muove usando il mouse.
Il path di un file non viene quasi mai usato esplicitamente. I files sono rappresentati da icone (che ne denotano il
tipo) e da nomi (che ne indicano il nome senza estensione).
Il software applicativo. Anche il software applicativo è strutturato a livelli, in quanto esistono un certo numero di
applicazioni di base che svolgono funzioni di servizio generalmente utilizzate da altre applicazioni (propriamente
dette) di livello superiore. Al livello più alto poniamo il software che svolge compiti di diretta utilità per l'utente.
Esistono diverse categorie di programmi di questo genere: editors, word processor, file-system browser, mail
clients, fogli elettronici, data base, internet browsers, compilatori, interpreti e software dedicato ad applicazioni
specifiche.
Ref: Boni Cap. 1.19-20, Cap. 5, Cap. 6.315-332, Cap. 6.337-340