在理解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. Function overloading and return type

    In C++ and Java, functions can not be overloaded if they differ only in the return type. For example ...

  2. maven高级学习

    上一篇<maven是什么>介绍了最初级的maven学习,今天就趁着周末的大好时光一起学习下maven的高级知识吧. 1.maven工程要导入jar包的坐标,就必须要考虑解决jar冲突 1) ...

  3. Spring Batch(0)——控制Step执行流程

    Conditional Flow in Spring Batch I just announced the new Learn Spring course, focused on the fundam ...

  4. 观察者模式之spring事件机制

    ddsspring中的事件机制使用到设计模式中的观察者模式 ,观察者模式有两个概念,1.观察者.被观察者.2.被观察者做出相应得动作,观察者能接收到.不分析设计模式,学习下spring中的事件机制实际 ...

  5. springMVC中响应的返回值获取方式

    package com.hope.controller;import com.hope.domain.User;import org.springframework.stereotype.Contro ...

  6. java输入/输出流的基本知识

    通过流可以读写文件,流是一组有序列的数据序列,以先进先出方式发送信息的通道. 输入/输出流抽象类有两种:InputStream/OutputStream字节输入流和Reader/Writer字符输入流 ...

  7. 关于Mysql java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: YES)的问题

    问题所在: 1.连接数据库一个是密码是否正确, 2.driver是否对, 3.有么有jar包冲突,

  8. tableau绘制热力地图

    一.右键国家地区和城市字段分别设置为地理角色-国家地区和城市 二.双击国家地区和城市添加到工作表 三.把订单id拖拽至标记卡的详细信息,标记改为密度显示,颜色设置为温度发散 四.最终整理结果如下图所示

  9. react功能实现-组件创建

    这里主要从两个角度来分析创建一个组件需要怎么做,一个是元素,一个是数据.整理向,大量借鉴,非原创. 1.渲染组件. 我们先明确一点,所有的元素都必须通过render方法来输出渲染.所有,每个组件类最终 ...

  10. BIT 常态化在线CTF系统 pwn题目

    偶然得到这个平台,发现是BIT的CTF平台,应该是平时的阶段性的训练题目.看了看题,其他方向的题目感觉都是入门题,但是pwn题目,发现还是比入门题难一点点的,来记录一下. pwn1 栈上任意位置的读写 ...