Prev   Top   Next 

La nascita del dualismo Hardware-Software

Nella concezione originale di Turing, i programmi per le Macchine di Turing (TM) erano parte integrante del controllo finito; per ogni problema che si volesse risolvere, bisognava costruire un'opportuna TM, che poteva prendere in input i dati da elaborare, ma non poteva essere riprogrammata per eseguire un calcolo diverso da quello per cui era stata pensata.

Fig.1: Una generica Macchina di Turing

Ciò era in accordo con l'intento iniziale di Turing, che non era quello di realizzare fisicamente le sue macchine, ma quello di determinare quale fosse l'insieme di funzioni per cui era possibile, in linea di principio, costruire un'apposita TM.

Successivamente Turing dimostrò che è possibile descrivere il programma di una TM tramite i simboli del nastro, e che esiste una Macchina di Turing Universale che, dati in ingresso la descrizione di una TM e il relativo input, ne simula il comportamento: nasce così una vera macchina programmabile:

Fig.2: Macchina di Turing Universale

La dimostrazione dell'esistenza di una TM universale segna anche la nascita del dualismo hardware-software, cioè della contrapposizione fra ciò che è fisicamente realizzato e ciò che è descrizione formale delle operazioni da svolgere.
Da quanto detto sopra si nota come hardware e software nascono come equivalenti: quello che si può fare via software è anche realizzabile in hardware, e viceversa.

La nozione di MT universale e' concettualmente alla base della grande maggioranza delle strutture di macchine per computare che utilizziamo oggi. Già in questo formalismo matematico sono presenti in nuce tutte le componenti presenti nella maggior parte delle architetture sviluppate fino ai giorni nostri.

L' obiettivo nelle presenti note e' quello arrivare ad una definizione del concetto di Macchina Astratta Imperativa: una descrizione astratta di tutte le componenti che formano le macchine reali attuali (quelle, la grande maggioranza, basati sul modello computazionale delle Macchine di Turing).
Sottolineamo come la definizione di macchina astratta non sia un modello computazionale, bensi' uno schema di riferimento generale di struttura di computer in cui poter inquadrare tutte le macchine reali basate sul modello computazionale imperativo.
N.B.E' importante sottolineare che per macchina reale (realizzazione di macchina astratta), non si intende solo una macchina fisica, hardware, bensi' in generale una macchina che si puo' realmente utilizzare per eseguire programmi (anche se non e' realizzata fisicamente). Questo concetto sara' piu' chiaro tra un po' quando affronteremo il problema della realizzazione delle macchine astratte.

Si noti come non sia possibile fornire una definizione di Macchina Astratta valida per inquadrare qualsiasi architettura di computer presente e futuro, poiche' alla base di una Macchina Astratta c'e' sempre un particolare Modello Computazionale. Le Macchine Astratte basate sul modello di Turing vengono dette imperative poiche' alla base di tale modello c'e' il concetto di comando (istruzione). E' evidente come, partendo da differenti modelli computazionali, si possa pervenire a differenti nozioni di Macchina Astratta (per esempio: funzionale, object-oriented, logica, parallela/concorrente)
Vedremo in seguito come esista una precisa corrispondenza tra Macchine Astratte e linguaggi di programmazione. I linguaggi di programmazione imperativi sono quelli corrispondenti appunto a macchine astratte imperative.

L'attenzione che noi riserveremo alle macchine astratte imperative non e' tanto dovuto alla "migliore qualita'" del modello di Turing rispetto ad altri, ma al fatto che la stragrande maggioranza delle architetture concrete sono basate sul modello di Von Neuman e questo e' dovuto a motivazioni puramente di carattere tecnologico.

Nella definizione della nostra nozione di macchina astratta imperativa ritroveremo ovviamente tutti concetti gia' presenti nel formalismo delle Macchine di Turing, in particolare quelli presenti nel formalismo della Macchina di Turing Universale, nella quale abbiamo:

  • una memoria (il nastro) che contiene dati e programmi. Questi sono rappresentati e strutturati in un modo semplicissimo nelle MT. Ma si puo' pensare di poterle strutturare e rappresentare in altro modo, magari utilizzando il supporto di particolari procedure e strutture, se ce ne fosse bisogno.
  • delle operazioni che si possono fare sulle caselle del nastro. Nelle MT sono veramente ridotte all'essenziale. Possiamo pero' pensare di avere in generale un certo numero di operazioni che possiamo eseguire, senza restringerci a quelle essenziali delle MT.
  • un modo di recuperare gli argomenti delle operazioni. Nelle MT questo modo e' semplicemente leggere quel che c'e' sotto la testina. Pero' se vogliamo astrarre, possiamo pensare che, in generale, le operazioni possono recuperare gli argomenti in vari modi dalla memoria, utilizzando opportuni procedimenti e strutture.
  • un modo per determinare qual'e' la prossima istruzione da eseguire. In generale qualcosa che, servendosi magari di particolari strutture dati, determini qual'e' il flusso della sequenza di istruzioni da eseguire.
  • qualcosa che, utilizzando tutto cio' che e' a disposizione e coordinandolo opportunamente, permetta l'esecuzione dei programmi.
Sulla base di questo, nella prossima sezione daremo la nostra definizione di Macchina Astratta imperativa.
 Prev   Top   Next