Fazendo a ponte entre máquinas abstratas e arquiteturas de computadores? [fechadas]

11

Sempre me sinto desconectado entre máquinas abstratas (como máquinas de Turing) e arquiteturas de computadores (incluindo arquiteturas de máquinas virtuais, a arquitetura de Von Neumann). Então, eu gostaria de saber como eles estão relacionados? Como um influencia o outro? Referências também são apreciadas. Obrigado.

Tim
fonte
7
Máquinas de Turing são um modelo teórico de ciência da computação para raciocinar sobre computabilidade . Da mesma forma, o cálculo lambda é um modelo de ciência da computação para cálculos, mas que encontrou aplicações práticas no design de linguagens de programação. Embora o cálculo lambda, as máquinas de turing e os computadores reais sejam equivalentes entre si em relação às coisas que eles podem calcular, eles são completamente diferentes na maneira como trabalham. Notavelmente, esses modelos teóricos de computação não descrevem o que o hardware real pode fazer com eficiência.
amon
2
@ amon Parece que você já escreveu a maioria das respostas, por que deixá-lo "desperdiçar" em um comentário?
Como outros apontaram, existem vários modelos matemáticos para "computadores": alguns mais próximos das linguagens (funções recursivas parciais, cálculo lambda), outros mais próximos do hardware. Se você quiser, observe as máquinas de RAM ( link da Wikipedia ): elas estão mais próximas do hardware real do que as máquinas de Turing.
Lorenzo Dematté 12/02/2015

Respostas:

23

Máquinas de Turing e "máquinas" semelhantes são modelos de computação , com o objetivo de investigar problemas como:

  • O que pode ser calculado
  • A classe de complexidade dos problemas
  • Relações entre classes de complexidade
  • A equivalência de várias maneiras de calcular algo

Para esse efeito, a própria máquina deve ser o mais simples possível. A conveniência do programador ou as preocupantes preocupações de implementação não importam, pois esses são objetos matemáticos e apenas muito poucos programas são escritos diretamente para eles.

Por outro lado, a arquitetura da máquina virtual e a arquitetura real da máquina baseada em silício estão centradas na execução de um determinado programa . A máquina é mais complicada do que o estritamente necessário para as preocupações acima e, por sua vez, são necessárias menos instruções (e mais óbvias) para fazer coisas interessantes. Não é muito complicado, pois ainda precisa ser compreensível (e eficientemente implementável), mas mais complicado.

Portanto, as duas abordagens estão fundamentalmente em desacordo. Além de ambos estarem no campo da ciência da computação, eles não têm muito a ver um com o outro.


fonte
1
Obrigado. Mas encontrei " Máquinas de Turing e máquinas de Turing universais com analogia às máquinas virtuais ", que podem sugerir suas relações, mas não há detalhes.
Tim
4
@ Tim Acho que esse curso toma apenas as máquinas de Turing como ponto de partida para introduzir o conceito de uma máquina abstrata e depois passa rapidamente para as máquinas abstratas mais úteis.
4

A principal relação é que você pode simular o construto teórico no físico.

O fato de o físico ser capaz de tudo o que é teórico dá origem à capacidade de o teste e a análise teóricos da máquina teórica serem reconhecidos como implementáveis ​​no mundo real.

O problema da parada é um exemplo perfeito de algo que foi mostrado em uma máquina de turing como insolúvel, e, como prova na máquina de turing, pode-se, portanto, saber que é insolúvel em uma máquina real que cumpra as leis da máquina de turing.

É a diferença entre somar as coisas contando e fazendo isso escrevendo no papel; ficou provado que a realidade da contagem cumpre as mesmas regras que a soma em um pedaço de papel. Portanto, quando você simula a contagem física das coisas, seus resultados são reconhecidos como aplicáveis ​​ao mundo real - assim, você sabe quanto custará duas barras de chocolate, simulando mentalmente a contagem sem precisar contar o dinheiro físico para obter o resultado.

Atualmente, as pessoas estão analisando e testando um modelo teórico conhecido como "Máquina Quântica de Turing" para ver quais instalações estarão disponíveis com as máquinas de computação quântica. Faz sentido que as pessoas trabalhem com esses modelos quando a versão física do modelo é excessivamente cara, rara e as implementações atuais ainda são muito escassas. Os modelos teóricos são usados ​​para mostrar o que podemos fazer quando nossas implementações físicas melhorarem.

Jimmy Hoffa
fonte
1

Eles estão relacionados aproximadamente da mesma maneira que o ônibus espacial está relacionado a um balão que você infla com a respiração e, em seguida, solta e observa voar.

O princípio fundamental de expulsar algo em uma direção para impulsionar algo na direção oposta está lá.

É aí que as semelhanças terminam.

Mike Nakis
fonte
1

Vejo as máquinas teóricas como uma ponte entre a computação do mundo real e a matemática. Uma máquina de Turing é poderosa o suficiente para simular qualquer arquitetura do mundo real ou linguagem de programação, simples o suficiente para ser simulada facilmente e, o mais importante, simples o suficiente para ser objeto de raciocínio e provas matemáticas razoavelmente diretas.

Patricia Shanahan
fonte
1

É importante saber que a definição de computação não é "o que os computadores fazem". A computação é anterior aos computadores. Os computadores receberam seu nome porque foram criados para auxiliar a tarefa de computação, não porque eles a definem.

Portanto, a máquina de Turing não trata de como os computadores funcionam. É sobre se um problema é ou não computável - ou seja, solucionável por um processo lógico / matemático formal. Não diz nada sobre como esse processo pode ser implementado. Se for computável, pode ser resolvido pelos seres humanos com lápis e papel, com tempo suficiente, ou com computadores ou (isso é importante) com qualquer sistema que se mostre completo como Turing .

Portanto, a máquina de Turing faz duas coisas muito importantes:

  1. Fornece um teste para a computabilidade de qualquer problema / tarefa.
  2. Fornece um teste para qualquer sistema para mostrar se ele pode calcular qualquer tarefa computável.

O primeiro ponto nos permite pensar em problemas sem nos distrairmos com as implementações do mundo real. Isso é bom porque o hardware real geralmente distrai as pessoas com detalhes irrelevantes (como "o que acontece se ficarmos sem memória ou espaço de armazenamento?", Pois a Turing Machines possui recursos infinitos). Uma solução teórica comprovável pode ser desenvolvida para uma máquina de Turing e, em seguida, tudo o que alguém precisa fazer é convertê-la em algo que funcione em uma determinada arquitetura.

O segundo ponto nos permite verificar a capacidade de qualquer implementação sem precisar executar muitos testes diferentes. Se ele pode simular uma máquina de Turing, pode fazer qualquer coisa que a máquina de Turing possa fazer. Como a Turing Machines pode calcular qualquer coisa computável, ele também pode.

O que significa que o relacionamento entre a Máquina de Turing e qualquer arquitetura de computador genuinamente prática (mesmo virtual) é apenas uma coisa: eles podem calcular.

A arquitetura de Von Neumann foi uma tentativa de criar um modelo de design para computadores digitais eletrônicos de uso geral eficazes . O trabalho de Turing forneceu a prova de sua validade

itsbruce
fonte
-1

Se você pensar bem, arquiteturas são máquinas abstratas. Eles descrevem como um pedaço de silício feito com cuidado "deve" se comportar. A diferença entre as arquiteturas e as máquinas de Turing é mais uma questão de escala do que uma mudança fundamental na abordagem.

A vantagem das máquinas de Turing é que há um conjunto de provas úteis que são muito fáceis de fazer usando uma máquina de Turing. É simples provar que qualquer máquina poderosa o suficiente para simular uma máquina de Turing pode resolver qualquer problema que uma máquina de Turing possa (duh). No entanto, fica mais interessante quando você define uma função computável . Acontece que existem muitas definições compatíveis de uma função computável. Se você pode definir todo o seu comportamento como funções computáveis, pode ser simulado em uma máquina de Turing.

Então, digamos que você tenha uma arquitetura que suporte diretamente programas no estilo LISP e outra como o x86, que é mais processual. Seu amigo afirma "O LISP é mais expressivo; portanto, você pode escrever programas nesta máquina que nunca poderia escrever no seu x86". Isso é brutal de combater (especialmente porque você provavelmente não conhece o suficiente LISP). No entanto, você pode abusar de várias máquinas abstratas, como a máquina de Turing:

  • Sua máquina LISP pode ser sofisticada, mas tudo o que pode fazer é redutível ao cálculo lambda. Seu amigo assente ansiosamente. O cálculo Lambda é um pouco culto para programadores funcionais.
  • Meu x86 pode ser sofisticado, mas tudo o que pode fazer é redutível a uma máquina de registro. Mais uma vez, nenhuma pergunta do seu amigo. Os registros são tão rápidos na teoria moderna dos computadores!
  • Qualquer máquina de registro pode ser modelada como uma máquina de Turing que simula essa máquina de registro. Agora, seu amigo se pergunta por que você está voltando à era da fita adesiva.
  • E sua máquina de cálculo lambda também pode ser reduzida a uma máquina de Turing. * Seu amigo se opõe, mas você os aponta para a tese de Church-Turing, e eles ficam com a cabeça envergonhados.
  • Assim, minha caixa x86 pode fazer qualquer coisa que sua máquina sofisticada baseada em LISP possa fazer!

Obviamente, existem muitos outros exemplos. O Jogo da Vida de Conway provou ser Turing completo, o que significa que teoricamente ele poderia fazer qualquer coisa que seu computador pudesse fazer. A maneira mais fácil de fazer isso era construir uma máquina de Turing na Life . Trago isso à tona porque esse seria um caso do que você chamou de máquina abstrata sendo tratada como uma arquitetura literal! Você pode imaginar o quão difícil seria a afirmação de computabilidade na Life sem a ajuda de modelos abstratos (com certeza não estou modelando um x64, completo com uma espiada no cache, apenas para provar que a vida é computável!)


No final, a grande diferença entre arquiteturas e máquinas abstratas é que as arquiteturas geralmente se preocupam com o desempenho. As arquiteturas querem saber com que rapidez você pode fazer alguma coisa. Máquinas abstratas tendem a se contentar em apenas saber se você pode. Considere o Construtor Universal desenvolvido para máquinas de estado von Neuman. Foi o suficiente para provar que a UC poderia funcionar, não importa que os autores nunca tivessem poder de computação suficiente para realmente consegui-la.

As arquiteturas de preços pagam para demonstrar a rapidez com que podem trabalhar é que muitas vezes é terrivelmente difícil provar que elas podem calcular tudo . Para isso, as arquiteturas voltam e começam a usar máquinas abstratas.

Cort Ammon
fonte
1
Seus exemplos de raciocínio não são tecnicamente corretos - se você declarar que uma máquina de turing pode fazer tudo o que uma máquina de registro ou x86 mahine pode, isso não significa necessariamente que uma máquina x86 pode fazer tudo o que uma máquina de registro ou máquina de turing pode. Como um contra-exemplo, qualquer autômato finito também pode ser reduzido a uma máquina de Turing, mas claramente não é equivalente ao cálculo lambda ou LISP. A direcionalidade é importante - se você deseja declarar "minha caixa x86 pode fazer qualquer coisa que sua máquina sofisticada baseada em LISP possa fazer", seria necessária uma redução de Turing para x86, não de x86 para Turing.
Peteris 12/02