Colmare il divario tra macchine astratte e achitectures del computer? [chiuso]


11

Mi sento sempre disconnesso tra macchine astratte (come le macchine di Turing) e architetture di computer (comprese le architetture di macchine virtuali, l'architettura di Von Neumann). Quindi vorrei sapere come sono correlati? In che modo uno influenza l'altro? Anche i riferimenti sono apprezzati. Grazie.


7
Le macchine di Turing sono un modello teorico di informatica per ragionare sulla calcolabilità . Allo stesso modo, il calcolo lambda è un modello di informatica per i calcoli, ma che ha trovato applicazioni pratiche nella progettazione del linguaggio di programmazione. Mentre il calcolo lambda, le macchine da ufficio e i computer reali sono equivalenti tra loro rispetto alle cose che possono calcolare, sono completamente diversi nel modo in cui funzionano. In particolare, questi modelli teorici di calcolo non descrivono ciò che l'hardware reale può fare in modo efficiente.
amon,

2
@amon Sembra che tu abbia già scritto la maggior parte di una risposta, perché lasciarla "sprecare" in un commento?

Come altri hanno sottolineato, esistono diversi modelli matematici per i "computer": alcuni più vicini ai linguaggi (funzioni ricorsive parziali, calcolo lambda), altri più vicini all'hardware. Se vuoi, dovresti guardare le macchine RAM ( link Wikipedia ): sono più vicine all'hardware reale rispetto alle macchine Turing.
Lorenzo Dematté,

Risposte:


23

Le macchine di Turing e simili "macchine" sono modelli di calcolo , hanno lo scopo di studiare problemi come:

  • Cosa può essere calcolato
  • La classe di complessità dei problemi
  • Relazioni tra classi di complessità
  • L'equivalenza di vari modi per calcolare qualcosa

A tale scopo, la macchina stessa deve essere il più semplice possibile. La praticità del programmatore o le fastidiose preoccupazioni di implementazione non contano, poiché si tratta di oggetti matematici e solo pochissimi programmi vengono mai scritti direttamente per loro.

Al contrario, l'architettura della macchina virtuale e l'architettura reale basata sul silicio sono centrate sull'esecuzione di un determinato programma . La macchina è resa più complicata di quanto strettamente necessario per le preoccupazioni di cui sopra e, a sua volta, servono meno (e più ovvie) istruzioni per fare cose interessanti. Non troppo complicati, in quanto devono essere ancora comprensibili (e implementabili in modo efficiente), ma più complicati.

Quindi i due approcci sono fondamentalmente in contrasto. Oltre ad essere entrambi nel campo dell'informatica, non hanno molto a che fare l'uno con l'altro.


1
Grazie. Ma ho trovato " Macchine di Turing e macchine di Turing universali con analogia alle macchine virtuali ", che potrebbero suggerire le loro relazioni ma non ci sono dettagli.
Tim

4
@Tim Immagino che quel corso prenda solo le macchine di Turing come punto di partenza per introdurre il concetto di una macchina astratta, quindi passa rapidamente a macchine astratte più utili.

4

La relazione principale è che puoi simulare il costrutto teorico in quello fisico.

Il fatto che quello fisico sia capace di tutto ciò che è teorico dà origine alla capacità di test e analisi teorici della macchina teorica di essere riconosciuti come implementabili nel mondo reale.

Il problema di arresto è un perfetto esempio di qualcosa che è stato mostrato su una macchina da banco come irrisolvibile, e come prova sulla macchina da banco può quindi essere noto per essere irrisolvibile su una macchina reale che rispetta le leggi della macchina da banco.

È la differenza tra sommare le cose contando e facendole scrivendole su carta, è stato dimostrato che la realtà del conteggio soddisfa le stesse regole di fare la sommatoria su un pezzo di carta. Quindi, quando simuli il conteggio fisico delle cose, i tuoi risultati vengono riconosciuti come applicabili al mondo reale - quindi sai quanto costeranno due barrette di zucchero simulando mentalmente il conteggio senza dover contare il denaro fisico per ottenere il risultato.

Le persone stanno attualmente elaborando analisi e test di un modello teorico noto come "Quantum Turing Machine" per vedere quali strutture saranno disponibili con le macchine di calcolo quantistico. Ha senso che le persone lavorino con questi modelli quando la versione fisica del loro modello è sia eccessivamente costosa, rara e le attuali implementazioni sono ancora molto carenti. I modelli teorici sono usati per mostrare cosa possiamo essere in grado di fare quando le nostre implementazioni fisiche migliorano.


1

Sono collegati all'incirca nello stesso modo in cui la navetta spaziale è collegata a un pallone che si gonfia con il respiro e quindi si lascia andare e si guarda volare via.

Il principio fondamentale di espellere qualcosa in una direzione per spingere qualcosa nella direzione opposta è lì.

Ecco dove finiscono le somiglianze.


1

Vedo le macchine teoriche come colmare il divario tra calcolo del mondo reale e matematica. Una macchina di Turing è abbastanza potente da simulare qualsiasi architettura del mondo reale o linguaggio di programmazione, abbastanza semplice da essere simulata facilmente e, soprattutto, abbastanza semplice da essere oggetto di ragionamenti e prove matematiche ragionevolmente semplici.


1

È importante sapere che la definizione di calcolo non è "quelle cose che fanno i computer". Il calcolo precede i computer. Ai computer è stato dato il loro nome perché sono stati creati per aiutare l'attività di calcolo, non perché lo definiscono.

Quindi la Turing Machine non riguarda il funzionamento dei computer. Si tratta di stabilire se un problema è calcolabile o meno , cioè risolvibile con un processo logico / matematico formale. Non dice nulla su come quel processo potrebbe essere implementato. Se è calcolabile, può essere risolto dagli esseri umani con matite e carta, con abbastanza tempo, o con i computer o (questa è la cosa importante) con qualsiasi sistema che può essere mostrato come Turing completo .

Quindi la Turing Machine fa due cose molto importanti:

  1. Fornisce un test per la calcolabilità di qualsiasi problema / attività.
  2. Fornisce un test per qualsiasi sistema per dimostrare se è possibile calcolare qualsiasi attività calcolabile.

Il primo punto ci consente di pensare ai problemi senza essere distratti dalle implementazioni del mondo reale. Questa è una buona cosa perché l'hardware reale spesso distrae le persone con dettagli irrilevanti (come "cosa succede se esauriamo la memoria o lo spazio di archiviazione?", Poiché le macchine di Turing hanno risorse infinite). Una soluzione teorica dimostrabile può essere sviluppata per una macchina di Turing e quindi tutto quello che qualcuno deve fare è tradurla in qualcosa che funzionerà su una data architettura.

Il secondo punto ci consente di verificare la capacità di qualsiasi implementazione senza dover eseguire molti test diversi su di essa. Se è in grado di simulare una Turing Machine, può fare tutto ciò che la Turing Machine può fare. Dal momento che Turing Machines può calcolare qualsiasi cosa calcolabile, così può farlo.

Ciò significa che la relazione tra la Turing Machine e qualsiasi architettura di computer realmente pratica (anche virtuale) è solo una cosa: possono calcolare.

L'architettura di Von Neumann era un tentativo di creare un modello di progettazione per efficaci computer digitali elettronici di uso generale . Il lavoro di Turing ha fornito la prova della sua validità


-1

Se ci pensate, le architetture sono macchine astratte. Descrivono come dovrebbe comportarsi un grumo di silicio accuratamente fabbricato. La differenza tra le architetture e le macchine di Turing è più una questione di scala che un cambiamento fondamentale nell'approccio.

Il vantaggio delle macchine Turing è che esiste una serie di prove utili che sono molto facili da fare usando una macchina Turing. È semplice dimostrare che qualsiasi macchina abbastanza potente da simulare una macchina di Turing può risolvere qualsiasi problema che una macchina di Turing può (duh). Tuttavia, diventa più interessante quando si definisce una funzione calcolabile . Si scopre che ci sono molte definizioni compatibili di una funzione calcolabile. Se riesci a definire tutto il tuo comportamento come funzioni calcolabili, puoi essere simulato in una macchina di Turing.

Supponiamo quindi che tu abbia un'architettura che supporti direttamente i programmi in stile LISP e un'altra come l'x86 che è più procedurale. Il tuo amico afferma "LISP è più espressivo, quindi puoi scrivere programmi su questa macchina che non potresti mai scrivere sul tuo x86". Questo è brutale da contrastare (soprattutto perché probabilmente non conosci abbastanza LISP). Tuttavia, puoi abusare di diverse macchine astratte come la macchina di Turing:

  • La tua macchina LISP può essere elegante, ma tutto ciò che può fare è riducibile al calcolo lambda. Il tuo amico annuisce avidamente. Il calcolo lambda è un po 'una cosa di culto per i programmatori funzionali.
  • Il mio x86 può essere elegante, ma tutto ciò che può fare è riducibile a una macchina di registro. Ancora una volta, nessuna domanda dal tuo amico. I registri sono così fondamentali nella moderna teoria informatica!
  • Qualsiasi macchina di registro può essere modellata come una macchina di Turing che simula quella macchina di registro. Ora il tuo amico si chiede perché stai tornando all'era del nastro adesivo.
  • E anche la tua macchina per il calcolo lambda può essere ridotta a una macchina di Turing. * Il tuo amico obietta, ma li indichi alla tesi di Church-Turing e pendono la testa per la vergogna.
  • Quindi la mia scatola x86 può fare qualsiasi cosa la tua macchina basata su LISP possa fare!

Ci sono, ovviamente, molti altri esempi. Conway's Game of Life ha dimostrato di essere Turing completo, il che significa che teoricamente potrebbe fare qualsiasi cosa il tuo computer possa fare. Il modo più semplice per farlo era costruire una macchina Turing in Life . Lo sollevo perché questo sarebbe un caso di quella che hai chiamato una macchina astratta trattata come un'architettura letterale! Potete immaginare quanto sarebbe difficile l'affermazione della calcolabilità in Life senza l'aiuto di modelli astratti (sono certo che diamine non sto modellando un x64, completo di sbirciatina nella cache, solo per dimostrare che la vita è calcolabile!)


Alla fine, la grande differenza tra architetture e macchine astratte è che le architetture si occupano solitamente delle prestazioni. Le architetture vogliono sapere quanto velocemente puoi fare qualcosa. Le macchine astratte tendono ad accontentarsi di sapere se è possibile. Considera il costruttore universale sviluppato per le macchine statali von Neuman. È stato sufficiente per dimostrare che l'UC poteva funzionare, a prescindere dal fatto che gli autori non avessero mai avuto abbastanza potenza di calcolo per poterlo effettivamente vedere.

Il prezzo pagato dalle architetture per dimostrare quanto velocemente possono funzionare è che spesso è tremendamente difficile provare che possono calcolare tutto . Per questo, le architetture tornano indietro e iniziano a usare macchine astratte.


1
I tuoi esempi di ragionamento forniti non sono tecnicamente corretti: se affermi che una macchina da banco può fare tutto ciò che una macchina da registro o un mahine x86 può, non significa necessariamente che una macchina x86 può fare tutto ciò che una macchina da registro o una macchina da banco può. Come controesempio, qualsiasi automa finito può anche essere ridotto a una macchina di Turing ma chiaramente non è equivalente al calcolo lambda o LISP. La direzionalità conta: se vuoi affermare che "la mia scatola x86 può fare qualsiasi cosa la tua macchina basata su LISP possa fare", allora richiederebbe una riduzione da Turing a x86, non da x86 a Turing.
Peteris,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.