|
Realizzazione delle Macchine Astratte
Affinchè i programmi scritti in un dato linguaggio di programmazione L
possano essere eseguiti, è necessario che la corrispondente macchina astratta
venga implementata.
Fondamentalmente è possibile adoperare tre tecniche:
- realizzazione hardware
- interpretazione (emulazione)
- traduzione (compilazione)
Realizzazione hardware
-
Con questa tecnica si realizzano in hardware tutte le componenti della macchina.
In linea di principio tale tecnica e' sempre possibile. E comprensibile
pero' che venga utilizzata solo
macchina astratte relativamente semplici, a causa di considerazioni di carattere
pratico, quali la scarsa flessibilita' della realizzazione in hardware e
l'elevato costo di progettazione e realizzazione in harwdare di componenti dalle
funzionalita' molto complesse.
Ovviamente l'evoluzione delle tecniche di integrazione dei circuiti ha reso possibile
(e rendera' possibile sempre piu' in futuro) la realizzazione hardware di macchine
sempre di maggior complessita'.
Una delle prime proposte di struttura (architettura) di macchina fisica (hardware) e' stata
quella del matematico
John Von Neuman. (architettura stored program) e che da lui prende il nome.
In tale tipo di architettura la CPU (Central Processing Unit)
e' preposta all'esecuzione delle istruzioni che compongono il programma memorizzato
in un'altra componente fisica, la RAM
(Random Access Memory). Le varie componenti fisiche sono collegate da un bus, un insieme di linee
di trasmisione dei dati. Schematicamente:
Fig.1: Architettura di Von Neumann
 |
Già in questa architettura sono presenti in nuce tutte quelle componenti presenti nella ma
ggior parte delle architetture hardware sviluppate fino ai giorni nostri.
Realizzazione interpretativa
-
A differenza della precedente, questa seconda tecnica, come anche la terza,
richiede l'esistenza di una macchina gia' realizzata (macchina ospite).
La tecnica interpretativa consiste nel realizzare tutte le componenti
della macchina (cioe' tutti gli algoritmi e le strutture dati che li definiscono)
mediante programmi e strutture dati del linguaggio della macchina ospite.
Di questo tipo di realizzazione ne esistono in realta' due tipi:
- emulazione via firmware
- emulazione via software
In linea di principio queste sono entrambi emulazioni software, la differenza
consiste nel tipo della macchina ospite (microprogrammata nel primo caso)
e nella realizzazione fisica della memoria che contiene i programmi che realizzano
la le strutture dati e gli algoritmi della macchina.
Nel primo caso la macchina ospite e' realizzata in harware e la parte
programmi della memoria di tale
macchina e' una memoria ad alta velocita', solitamente di sola lettura,
realizzata sullo stesso chip che contiene le altre componenti della macchina.
Una tale macchina ospite e' detta microprogrammata ed e' estremamente semplice
(le operazioni non sono altro che semplici operazioni su registri).
I programmi di tale macchina ospite che realizzano gli algoritmi e le strutture
dati della macchina che si vuole realizzare vengon chiamati microprogrammi.
Nel secondo caso invece non c'e' alcun vincolo su come sia realizzata la macchina
ospite (e in particolare la sua memoria).
Le due tecniche di emulazione differiscono sostanzialmente nelle prestazioni della
macchina astratta emulata, in particolare rispetto alla velocita' di esecuzione,
che nel caso firmware e' paragonabile a quella della realizzazione in hardware puro.
Ovviamente la realizzazione nel caso firmware offre minore flessibilita' in caso
di future modifiche o estensioni della macchina realizata.
E' bene sottolineare che la realizzazione tramite firmware, molto in voga fino a non
molti anni fa, sta lentamente tramontando, o si limita a porzioni sempre piu' piccole
della macchina da realizzare.
Questo a causa dell'affermarsi dei principi che sono alla base delle architetture RISC.
Quando parliamo di realizzazione interpretativa e' bene fare sempre
attenzione, quando parliamo di interprete, a quale macchina facciamo riferimento:
la componente interprete della macchina che vogliamo ottenere
e' realizzata da un programma scritto nel linguaggio della macchina ospite
la cui esecuzione e' affidata alla componente interprete della macchina ospite.
Realizzazione compilativa
-
La tecnica compilativa si basa sulla idea di tradurre un avolta per tutte
l'intero programma
scritto in L in un programma funzionalmente equivalente scritto
nel linguaggio della macchina ospite.
Il compito di eseguire tale traduzione
e' eseguito da un programma detto compilatore.
In una realizzazione compilativa, uno si chiede: "si, ma dove
sono le componenti della macchina che realizziamo?". In realta'
e' come se ci fossero, perche' noi dall'esterno vediamo esattamente
gli effetti di una macchina realizzata.
|