Macchina astratta: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Riga 3:
Le macchine astratte sono usate nella [[teoria della computabilità]] per analizzare la [[computabilità]] e la complessità degli algoritmi. Attraverso l'uso di macchine astratte è infatti possibile calcolare la quantità di risorse (tempo, memoria, ecc) necessari per eseguire una determinata operazione, senza dover costruire un sistema reale.
 
Il più famoso esempio di macchina astratta è la [[macchina di Turing]], ma esistono esempi più completi, con [[struttura dati]], registri e un set di istruzioni completo, come la [[macchina RAM]], che permette l'accesso casuale a locazioni di memoria indicizzati.
 
Una macchina astratta può anche riferirsi ad un progetto di un [[microprocessore]], che deve ancora essere (o non è destinato ad essere) implementato come hardware. Una macchina astratta implementata come software di simulazione, o per la quale esiste un interprete si chiama [[macchina virtuale]].
 
==Definizione==
In termini di input e di output una macchina astratta tipica, consiste in un insieme di operazioni ammissibili, utilizzate per trasformare l'[[input]] in [[output]].
 
Fornire una definizione dettagliata e nello stesso tempo valida adalloscopo di inquadrare qualsiasi architettura di computer presente e futura è un impresa tutt'altro che semplice, (se non impossibile), dal datomomento che ogni macchina astratta dipende da un determinato modello computazionale. Le macchine astratte basate sul modello di Turing sono dette imperative, alla base di tale modello c'è il concetto di istruzione. Esistono altri modelli computazionali che descrivono stili di programmazione e macchine astratte differenti da quelle imperative, (per esempio: logica, funzionale, orientata agli oggetti, ecc...)
 
Riserviamo maggiore attenzione alle macchine astratte imperative poiché la maggioranzamaggior parte delle macchine reali è basata sul modello dell' [[architettura di von Neumann]]. QuestoCiò non è dovuto alla migliore qualità del modello imperativo, ma perad un fatto puramente tecnologico. Nella definizione di macchina astratta imperativa ritroviamo tutti in concetti già presenti nel formalismo della [[macchina di Turing universale]].
 
Formalmente una '''macchina astratta''' (imperativa) è un insieme di [[strutture dati]] e algoritmi in grado di memorizzare ed eseguire programmi.
Riga 41:
==Realizzazione per interpretazione==
Può avvenire via [[firmware]] e via software (attraverso un [[emulatore]]).
Via firmware gli algoritmi e le strutture dati si realizzano mediante [[microprogramma]], in una macchina ospite microprogrammabile,. ilIl microprogramma è vincolato dalle caratteristiche della macchina, ma risulta molto più veloce rispetto alla realizzazione via software, che non è vincolata dalle caratteristiche della macchina.
 
==Realizzazione per compilazione==
Riga 48:
==I moderni calcolatori==
La differenza di potenza espressiva fra la macchina astratta che vogliamo realizzare e la macchina astratta ospite(HOST) è detta [[semantic gap]]. Spesso il semantic gap tra la macchina da realizzare e la macchina HOST è così grande che per rendere il sistema efficiente è conveniente realizzare macchine astratte intermedie.
Si forma così una vera e propria gerarchia di macchine astratte, dove al livello più basso ci sono i circuiti elettronici e al livello più alto vi è la macchina astratta al "livello" utente.
I moderni calcolatori sono realizzati combinando tutte e tre le tecniche,. unoUno schema molto usato prevede inizialmente una fase compilativa, seguita da una fase di interpretazione e in fine dalla realizzazione in hardware. Un esempio è il linguaggio di programmazione [[Java (linguaggio)|java]]. Gli scopi di tale stratificazione sono molteplici: gestire la complessità, aumentare la flessibilità e minimizzare i costi.