我总是感到抽象机器(例如图灵机)和计算机体系结构(包括虚拟机的体系结构,冯·诺伊曼的体系结构)之间没有联系。所以我想知道它们之间的关系吗?一个如何影响另一个?参考文献也被赞赏。谢谢。
我总是感到抽象机器(例如图灵机)和计算机体系结构(包括虚拟机的体系结构,冯·诺伊曼的体系结构)之间没有联系。所以我想知道它们之间的关系吗?一个如何影响另一个?参考文献也被赞赏。谢谢。
Answers:
图灵机和类似的“机器”是计算模型,它们旨在研究以下问题:
为此,机器本身必须尽可能简单。程序员的便利性或讨厌的实现问题无关紧要,因为它们是数学对象,只有很少的程序直接为它们编写。
相反,虚拟机体系结构和实际的基于硅的计算机体系结构以执行给定程序为中心。对于上述问题,该机器变得比严格必需的更为复杂,并且反过来,它只需较少(且更明显)的指令即可完成有趣的事情。不是太复杂,因为他们仍然必须理解(并有效地实施的),但更复杂。
因此,这两种方法从根本上是矛盾的。除了两者都在计算机科学领域之外,它们之间没有太多关系。
主要的关系是您可以在物理模型中模拟理论构造。
物理上的一切都具备理论上的一切能力,这一事实使人们对理论上的机器进行了理论测试和分析,从而被认为可以在现实世界中实现。
停止问题是在图腾机上显示无法解决的一个完美示例,因此,通过在图腾机上进行证明,可以知道在遵守图腾机定律的真实机器上是不可解决的。
通过计数求和与在纸上书写之间是有区别的,这已被证明,计数的现实与在纸上进行求和的规则相同。因此,当您模拟事物的物理计数时,您的结果将被认为适用于现实世界-这样,您就可以通过在精神上模拟计数来知道两个直方糖的成本,而无需计算实际金额即可得出结果。
人们目前正在对称为“量子图灵机”的理论模型进行分析和测试,以了解量子计算机将提供哪些设施。当他们的模型的物理版本过于昂贵,稀有并且仍然非常缺乏当前的实现时,人们就可以使用这些模型。理论模型用于说明物理实现得到改善时我们可以做什么。
它们之间的关系大致与航天飞机与您向呼吸中充气,然后放开并看着飞走的气球相关。
存在一个基本原理,即沿一个方向排出某物而沿相反方向推进某物。
那就是相似之处结束的地方。
我认为理论机器弥合了现实世界计算与数学之间的鸿沟。Turing机器功能强大,足以模拟任何现实世界的体系结构或编程语言,其简单程度足以使其易于模拟,最重要的是,其足够简单程度也足以成为相当简单的数学推理和证明的主题。
重要的是要知道计算的定义不是“计算机要做的那些事情”。计算早于计算机。之所以给计算机起名字,是因为创建计算机是为了辅助计算任务,而不是因为它们定义了计算机。
因此,图灵机与计算机的工作方式无关。它与问题是否可计算有关,即可以通过正式的逻辑/数学过程来解决。它没有说明如何实施该流程。如果它是可计算的,那么人类可以在足够的时间内用铅笔和纸解决该问题,或者使用计算机或(这是很重要的)任何可以证明图灵完整的系统来解决。
因此,图灵机执行两项非常重要的操作:
第一点使我们能够思考问题,而不会被现实世界的实施分散注意力。这是一件好事,因为真正的硬件通常会分散无关紧要的细节(例如“如果我们用完内存或存储空间会发生什么情况?”,因为图灵机拥有无限的资源),这会使人分心。可以为Turing Machine开发出一种可证明的理论解决方案,然后所有需要做的就是将其转换为可在给定体系结构上使用的东西。
第二点使我们能够验证任何实现的功能,而不必对其进行大量不同的测试。如果它可以模拟图灵机,则它可以执行图灵机可以做的任何事情。由于图灵机可以计算任何可计算的东西,因此也可以。
这意味着Turing Machine与任何真正实用的计算机体系结构(甚至是虚拟的)之间的关系只是一件事:它们可以计算。
冯·诺依曼(Von Neumann)的体系结构是为有效的通用电子数字计算机创建设计模板的尝试。图灵的工作提供了其有效性的证明
如果您考虑一下,架构就是抽象机器。他们描述了一组精心制作的硅应该如何表现。架构和图灵机之间的差异更多是规模问题,而不是方法的根本转变。
图灵机的优点是有一组有用的证明,使用图灵机非常容易做到。很简单地证明,任何足以模拟图灵机的功能强大的机器都可以解决图灵机可以解决的任何问题。但是,当您定义Computable函数时,它会变得更加有趣。事实证明,可计算函数有许多兼容的定义。如果可以将所有行为定义为可计算函数,则可以在图灵机中进行模拟。
因此,假设您有一个直接支持LISP样式程序的体系结构,而另一个类似x86的体系结构则更具过程性。您的朋友声称“ LISP具有更高的表现力,因此您可以在此计算机上编写程序,而在x86上则无法编写。” 需要对付这是残酷的(特别是因为您可能不了解足够的LISP)。但是,您可以滥用一些图灵机等抽象机:
当然,还有许多其他示例。事实证明,Conway的《人生游戏》已经完成了Turing的设计,这意味着它理论上可以完成计算机所能做的任何事情。最简单的方法是在生活中建造图灵机。我提出这一点是因为这将是您所谓的抽象机被视为文字体系结构的情况!您可以想象,如果没有抽象模型的帮助,那么在Life中可计算性的主张将有多难(我肯定不是在建模x64,而是通过偷看缓存来完成,只是为了证明Life是可计算的!)
最后,体系结构与抽象机之间的最大区别是体系结构通常与性能有关。架构想知道您可以快速完成某件事。抽象机往往只知道是否可以满足。考虑为冯·诺曼状态机开发的通用构造函数。足以证明UC 可以正常工作,不要忘了作者从来没有足够的计算能力来实际了解它。
为了证明它们可以工作多快而付出的代价是,要证明它们能够计算出所有东西通常非常困难。为此,架构向右转,开始使用抽象机。