在理解CPU之前,我们有必要先了解一下现代计算机理论的基石——图灵机,这个抽象模型决定了现代计算机可以被实现。这个模型的工作原理也投射到了CPU的工作实现上。图灵机的知识可深可浅,换句话说,上手容易,但是意义深远。

下面是一个可以在线学习图灵机的网站:

Online Turing Machine Simulator

主要参考

  1. 《嵌入式C语言自我素养》
  2. 百度百科以及大佬博客
  3. b站视频
  4. 《数字逻辑》课程

00 内容概括

图灵机的概念产生于英国数学家艾伦·图灵在1936年在《伦敦数学协会会刊》上发表的那篇改变世界的论文——《论可计算数及其在判定问题中的应用》,论文本身很难很复杂,但对于计算机科学而言,可以简单概括为:

“任何复杂的运算都可以分解为基本运算指令。”

而图灵机则是图灵机理论中提出的理想模型,可以用简若干指令的组合就实现任意复杂的计算。

01 基本构造

图灵机的构造如下图所示:

  1. 一条无限长的纸带-Tape

    这是要处理的对象,被划分为一个个大小相等的小方格。每个小方格都可以存放一个符号,可以存放数字、字母、空白等。

  2. 一个读写头-Head

    可以在纸带上左右移动,它能读出当前所指的格子上的符号,并能改变当前格子上的符号。

  3. 一套控制规则/状态转换规则-Table

    根据当前机器所处的状态以及当前读写头所指的格子上的符号来确定读写头下一步的动作,并改变状态寄存器的值,令机器进入一个新的状态。

  4. 一个状态寄存器

    用来保存图灵机当前所处的状态。图灵机的所有可能状态的数目是有限的,并且有一个特殊的状态,称为停机状态

02 工作原理与思想

02-1 工作原理

这个东西是有数学推导的,我在此简化具体一下:

想象自己是一只小猫,我们会有饿和饱的状态,面对不同的食物,我们吃或者不吃,最终是饱或者饿。

上图就是我们理想化的Table,即状态转换规则。

在这个例子中,猫就是一个读写头Head,可以存储一个状态我们假设猫会根据自己饿与不饿以及格子里是否是食物来决定“吃”或是“等待”。

上图中的当前状态就是读写头中状态寄存器的当前存储值,格子里的食物就是纸带(Tape)格子里的值,两者决定了读写头(Head)的下一状态与读写头的移动(对应“等待”和“吃”这两个行为)

值得一提的是上面提到过的停机问题(这是第三次数学危机的解决方案),如果猫猫遇到的某种情况是表上没有的,机器就会立刻停机。

这样,一个图灵机就这样建立了。

02-2 基本思想

把上面的通过类比讲解的原理稍微抽象一下,我们来思考一下图灵机的基本思想:

  1. 图灵机基本思想是用机器来模拟人们用纸笔进行数学运算的过程。

  2. 图灵机主要有两个动作(模拟人):

    1. 在纸上写上或擦除某个符号;

    2. 把注意力从纸的一个位置移动到另一个位置;

  3. 而在每个阶段,人要决定下一步的动作,依赖于

    1. 此人当前所关注的纸上某个位置的符号->当前状态

    2. 此人当前思维的状态->Table

03 运行实例

我想在这里实际操作两个图灵机的工作过程,来加深一下对于图灵机的理解,手写推导。想看更多示例的可以 ->

  1. Online Turing Machine Simulator

  2. 图灵机的基础和加法运算 (picasso250.github.io)

03-1 实现两个数字的相加

A 示例纸带

B 状态转移表

读写头当前状态 table值0 table值1
q1 1Rq2 1Rq1
q2 0Lq3 1Rq2
q3 0Nq3 0Nq3

C 步骤演示

03-2 将一串连续的1后面再加一位1

A 示例纸带

B 状态转移图

虽然我们在前面的构造和原理部分多用一个表来表示Table,实际上和状态机一样,也可以用图来表示。

Table图的设计取决于A中我们要实现什么样的功能。在这个图中:

  1. 从0开始,遇到0格子我们继续赋给它0,右移;

  2. 碰到1时,把它修改为1,右移;

  3. 当碰到1后第一个0时我们就把它下一状态改为1,左移

  4. 左移再碰到1,就保持其值,继续左移;

  5. 左移遇到0,保持其值不变,停止。

C 步骤演示

04 图灵机Verilog实现的探索

这时候我就在想一个问题,我已经学过了数字逻辑与Verilog设计,图灵机肉眼可见地与状态机极其相似,那么我是否可以用Verilog实现一个图灵机呢,功能复刻就可以。

自己想了想,按照状态机的套路,对状态进行编码,但读写头Head的左移右移的模拟是一个问题,我开始怀疑这个东西是不是真的可以。去FPGA的群里问了问大佬,大佬的回复是:

“可以,这就是用Verilog写一个CPU soft core了,一个point,一段register,就能组成图灵机,并且fpga可以做。”

所以,想要实现图灵机,我们需要继续向下了解CPU的一些知识。

05 谈谈意义

05-1 类比现代计算机

将图灵机原型与现代计算机比较,会有很多相似之处,我们可以联想一下:

  1. 无限长的纸带Tape == 程序代码

  2. 读写头Head == 程序计数器PC

  3. 状态转换表Table == CPU的有限指令集

  4. 状态寄存器 == 程序或计算机的状态输出

不同架构的CPU,主要差别是指令集的不同,支持运行的机器指令也不同,但有一条是相同的:即CPU只能支持运行有限个指令,任何复杂的运算(任何应用程序)最终都可以分解成有限个基本指令来完成。

计算机系统3-> 现代计算机基石 | 图灵机理论的更多相关文章

  1. 计算机系统4-> 计组与体系结构1 | 基础概念介绍

    在大二上学期学习数字逻辑的过程中,我对计算机如何运作产生了兴趣,因此开了这个系列来记录自己在这方面的学习过程,此前三篇分别是: 计算机系统->Hello World的一生 | 程序如何运行,从大 ...

  2. 计算机系统5-> 计组与体系结构2 | MIPS指令集(上)| 指令系统

    系列的上一篇计算机系统4-> 计组与体系结构1 | 基础概念与系统评估,学习了一些计算机的基础概念,将一些基本的计算机组成部分的功能和相互联系了解了一下,其中很重要的一个抽象思想就是软硬件的接口 ...

  3. Deep Learning中的Large Batch Training相关理论与实践

    背景 [作者:DeepLearningStack,阿里巴巴算法工程师,开源TensorFlow Contributor] 在分布式训练时,提高计算通信占比是提高计算加速比的有效手段,当网络通信优化到一 ...

  4. p,np,npc,np难问题,确定图灵机与非确定图灵机

    本文转自豆瓣_燃烧的影子 图灵机与可计算性 图灵(1912~1954)出生于英国伦敦,19岁进入剑桥皇家学院研究量子力学和数理逻辑.1935年,图灵写出了"论高斯误差函数"的论文, ...

  5. 【学习笔记】大数据技术原理与应用(MOOC视频、厦门大学林子雨)

    1 大数据概述 大数据特性:4v volume velocity variety value 即大量化.快速化.多样化.价值密度低 数据量大:大数据摩尔定律 快速化:从数据的生成到消耗,时间窗口小,可 ...

  6. 数据结构和算法(Golang实现)(10)基础知识-算法复杂度主方法

    算法复杂度主方法 有时候,我们要评估一个算法的复杂度,但是算法被分散为几个递归的子问题,这样评估起来很难,有一个数学公式可以很快地评估出来. 一.复杂度主方法 主方法,也可以叫主定理.对于那些用分治法 ...

  7. NoSql的三大基石:CAP理论&BASE&最终一致性

    关系型数据库的局限 NoSql出现在关系型数据库之后,主要是为了解决关系型数据库的短板,我们先来看看随着软件行业的发展,关系型数据库面临了哪些挑战: 1.高并发 一个最典型的就是电商网站,例如双11, ...

  8. 大数据理论篇HDFS的基石——Google File System

    Google File System 但凡是要开始讲大数据的,都绕不开最初的Google三驾马车:Google File System(GFS), MapReduce,BigTable. 为这一切的基 ...

  9. 读《计算机系统要素:从零开始构建现代计算机》的思考:CodeGen

    掌握目标语言的使用.编写 是非常重要的!!! 如果你要实现的Jack语言编译器是把Jack语言代码编译成虚拟机VM代码.或者直接成汇编代码,要完成源代码中unit A——> 目标语言代码转写此u ...

随机推荐

  1. java-阿里邮件推送服务开发 -- 发送邮箱验证码

    参考文档: 如何在 DNS 服务器上配置域名:https://help.aliyun.com/knowledge_detail/39397.html?spm=5176.2020520150.102.d ...

  2. InnoDB学习(三)之BinLog

    BinLog又称为二进制日志,是MySQL服务层的数据日志,MySQL所有的存储引擎都支持BinLog.BinLog记录了MySQL中的数据更新和可能导致数据更新的事件,可以用于主从复制或数据恢复.本 ...

  3. DP笔记

    这是一篇蒟蒻被大佬踩爆后写的笔记 套路 0.贪心(废话)(排序...) 1.dp预处理出要用的东西 2.两头同时dp 3.化简题目中本质相同的东西 转化模型 4.数学计算优化 5.分析题目数据考虑该从 ...

  4. SQL 基础知识终极指南

    什么是数据库? 数据库是以电子方式从系统中存储和检索的大量数据集合. 存储在数据库中的结构化数据被处理.操纵.控制和更新以执行各种操作. 行业中使用的一些流行数据库是 Oracle.MySQL.Pos ...

  5. centos部署golang环境

    目录 一.简介 二.部署 一.简介 Go语言(或 Golang)起源于 2007 年,并在 2009 年正式对外发布.Go 是非常年轻的一门语言,它的主要目标是"兼具 Python 等动态语 ...

  6. Kubernetes-存储(二)

    前言 本篇是Kubernetes第十三篇,大家一定要把环境搭建起来,看是解决不了问题的,必须实战. Kubernetes系列文章: Kubernetes介绍 Kubernetes环境搭建 Kubern ...

  7. ciscn_2019_s_9

    很简单的一道题 例行检查 没有开启nx保护,就想到了shellcode来做 很明显的栈溢出 唯一的要求就是shellcode长度不能超过0x24 通过jump跳转到shellcode的位置 完整exp ...

  8. 2020腾讯犀牛鸟网络安全T-Star高校挑战赛writeup

    签到 浏览器禁用js,在www目录下有 key 命令执行基础 使用 | 可以执行其他命令,在 ../目录下有 key.php cat 一下读出来 你能爆破吗 一开始随便输了个账号的时候不是这个页面,抓 ...

  9. 调配资源(Project)

    <Project2016 企业项目管理实践>张会斌 董方好 编著 当资源过度分配了,肿么办? 比如前面的例子,某吃货甲,一天之内给他分配了9.6个工时的吃量,这怎么可以呢,让人加班是不厚道 ...

  10. 日期与时间函数(Excel函数集团)

    此处文章均为本妖原创,供下载.学习.探讨! 文章下载源是Office365国内版1Driver,如有链接问题请联系我. 请勿用于商业!谢谢 下载地址:https://officecommunity-m ...