La struttura a livelli dei calcolatori elettronici

La struttura a livelli dei calcolatori elettronici

La struttura a livelli dei calcolatori elettronici

Linguaggi, livelli e macchine virtuali

Ogni macchina è dotata di un proprio linguaggio macchina (L1), cioè l’insieme  di tutte le istruzioni che essa può eseguire “direttamente”. In  questo  senso  possiamo dire che una macchina definisce un linguaggio. Vale però anche il viceversa, nel senso che ogni linguaggio definisce una macchina, intesa come quella macchina che può eseguire direttamente tutti i programmi scritti in quel linguaggio. Chiaramente, a linguaggi complessi (quelli ad alto livello, per esempio) corrisponderanno macchine complesse e costose, ma questo non impedisce di pensare che tali macchine possano comunque  esistere.

Possiamo allora visualizzare un calcolatore dotato di N livelli (cioè  di  N  linguaggi) come N differenti macchine VIRTUALI, ognuna relativa ad un livello. Nel seguito, useremo i termini “livello” e “macchina virtuale” in modo intercambiabile.

Solo quei programmi scritti in linguaggio L1 potranno essere eseguiti direttamente dai circuiti elettronici di una macchina. Ogni programma  che  sia scritto in un linguaggio diverso da L1 dovrà subire o una serie di traduzioni fino ad arrivare ad un programma in L1 oppure dovrà essere interpretato da un interprete di livello inferiore, fino ad un interprete di livello L1. Chiaramente, però,  una persona che scrive programmi per la macchina virtuale di livello N non si deve preoccupare degli interpreti e dei traduttori sottostanti: la struttura della macchina garantisce che questi programmi saranno in qualche modo  eseguiti.

La struttura a livelli del calcolatore moderno

Nei calcolatori moderni si possono generalmente individuare i seguenti livelli:

  • il livello più basso (livello 0, detto anche livello della logica digitale) è quello dell’ hardware, ossia dei circuiti elettrici ed elettronici di cui il calcolatore si compone. Tali dispositivi eseguono direttamente i programmi scritti nel linguaggio macchina del livello superiore, cioè il livello 1;
  • il livello successivo (livello 1) è propriamente il livello del linguaggio macchina: a partire da questo livello si introduce il concetto di programma come sequenza   di istruzioni da eseguire; in particolare, nel livello 1 c’è un programma, detto microprogramma, che si occupa di interpretare le istruzioni del livello Per questo motivo, il livello 1 viene detto livello della microprogrammazione. Da notare che, per definizione stessa di tale livello, non possono esistere due calcolatori aventi lo stesso livello 1: ci possono essere, e ci sono, similitudini,  ma mai l’uguaglianza;
  • il livello 2 è noto come livello della macchina standard. Non tutti i calcolatori dispongono del livello 1: in questi casi, i programmi di livello 2 vengono eseguiti dai circuiti di livello 0 senza traduzioni o interpretazioni intermedie;
  • al di sopra del livello 2 c’è il livello 3, che presenta alcune particolari caratteristiche: intanto, esso si differenzia dal livello 2 in quanto fornisce un insieme di nuove istruzioni, una organizzazione della memoria differente, la capacità di eseguire più programmi in parallelo ed altro; tuttavia, gran parte delle istruzioni del livello 3 compaiono anche nel livello Ecco perchè potremmo dire che si tratta di un livello ibrido. Le nuove capacità aggiunte a livello 3 vengono eseguite da un particolare interprete, il quale fa operare il livello 2: si tratta del sistema operativo. In altre parole, le istruzioni del livello 3 identiche a quelle del livello 2 vengono eseguite dal livello 2, ossia vengono interpretate direttamente dal microprogramma (livello 1) corrispondente;  le  altre istruzioni vengono invece interpretate dal sistema operativo. Il livello 3 è noto perciò come livello del sistema  operativo;
  • mentre tra i livelli finora esaminati ci sono fondamentalmente notevoli affinità, il passaggio dal livello 3 al livello 4 è molto più brusco e netto. Lo scopo dei primi livelli (da 0 a 3) non è certo un utilizzo diretto da  parte  del programmatore medio, bensì il funzionamento dei traduttori e degli interpreti che supportano i livelli superiori. Al contrario, tali livelli  superiori sono concepiti per un uso diretto da parte del programmatore, il quale li utilizza per la risoluzione dei propri problemi. La differenza forse più evidente è  la  seguente: mentre i linguaggi dei livelli 1, 2 e 3 sono costituiti solo da numeri (ottimi per le macchine ma pessimi per le persone), i  linguaggi dal livello 4  in su cominciano a contenere stringhe ed abbreviazioni sicuramente più  congeniali per l’uomo. Il livello 4 è noto come livello del linguaggio Assembler: si tratta fondamentalmente di una forma simbolica di uno dei linguaggi sottostanti. In pratica, questo livello consente di scrivere programmi formalmente analoghi a  quelli dei  livelli inferiori, ma  comunque meno ostici per l’utente. I programmi del livello 4 vengono prima tradotti nei linguaggi di livello 1, 2 e 3 e poi interpretati per l’esecuzione. I programmi dediti alla traduzione sono gli assemblatori;
  • al di sopra del livello 4 c’è il livello dei linguaggi simbolici ad alto livello, ossia di linguaggi molto vicini al linguaggio naturale dell’uomo. Programmi scritti in questi linguaggi vengono solitamente tradotti in  programmi di livello 4 o 3 dai cosiddetti compilatori.

Evoluzione dei calcolatori a più livelli

I primi calcolatori digitali (1940) possedevano soltanto 2 livelli: il livello di macchina standard, in cui era fatta tutta la programmazione, e quello della logica digitale, che eseguiva i  programmi. Nel 1951 si passò a calcolatori a 3 livelli, al fine soprattutto di semplificare l’hardware: ogni macchina aveva adesso un interprete la cui funzione era quella di eseguire i programmi del linguaggio della macchina standard tramite la loro interpretazione.

Nel giro di pochi anni si passò al livello degli assemblatori e dei compilatori, allo scopo di facilitare il compito dei  programmatori. Agli inizi, i calcolatori erano un qualcosa su cui i programmatori potevano e dovevano operare personalmente per far funzionare i propri programmi. Questo implicava che essi dovessero conoscere a fondo la macchina e la soluzione di eventuali problemi. Di conseguenza, era più il tempo in cui  si  cercava  di  individuare i guasti che non il tempo dedicato alle esecuzioni vere e proprie dei programmi.

Dopo 10 anni (1960), si tentò di ridurre questa perdita di tempo automatizzando   il lavoro degli operatori: venne introdotto un programma, detto sistema operativo,    il quale, una volta ricevuti i programmi in input dal programmatore, si occupava di leggerli ed eseguirli. La sofisticazione dei sistemi operativi fu molto rapida: nuove istruzioni, opzioni e caratteristiche furono aggiunte al livello della macchina  standard, finché non costituirono un nuovo livello, quello appunto del sistema operativo.

I primi sistemi operativi non facevano altro che leggere i  pacchi di schede forniti  dai programmatori e stampavano gli output su una stampante: questo tipo di organizzazione era conosciuta come sistema bacth (o a lotti) ed era generalmente piuttosto lenta. Più tardi, invece, furono sviluppate delle versioni dei sistemi  operativi che permettevano a diversi  programmatori  di  comunicare  direttamente con il calcolatore. In questo tipo di sistemi, venivano usati dei cavi (generalmente di tipo “telefonico”) per collegare i terminali al calcolatore centrale. In questo modo, il programmatore poteva inviare i  propri programmi ed osservare i  risultati (in  tempi molto rapidi) da qualunque luogo. Questi sistemi furono e sono tuttora chiamati sistemi time-sharing e rappresentano in buona sostanza i pionieri dei moderni calcolatori presente nella nostra società.

Pubblicato da Vito Lavecchia

Lavecchia Vito Ingegnere Informatico (Politecnico di Bari) Email: [email protected] Sito Web: https://vitolavecchia.altervista.org

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *