冯诺依曼结构和图灵机

232 阅读3分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 17 天,点击查看活动详情

冯诺依曼结构

装过电脑的朋友们都知道计算机由以下结构组成:

  • CPU:计算

  • GPU:图形计算

  • 内存:存储

  • 主板:连接各种组件

    • 芯片组(Chipset)
    • 总线(Bus)
    • 南桥:作为“桥”,来连接鼠标、键盘以及硬盘这些外部设备和 CPU 之间的通信。
    • 北桥:作为“桥”,连接 CPU 和内存、显卡之间的通信。现在集成在CPU
  • 输出设备:IO、显示器、打印机

  • 输入设备:鼠标、键盘

这就是源于冯诺依曼体系结构:

image.png

冯诺依曼机是一种计算机结构,核心思想是将计算机的指令和数据存储在同一块存储器中,以便能够实现程序的自动执行。这种设计大大简化了计算机的控制和操作,使得计算机能够更加高效地工作。

图灵机

图灵机的基本思想是把计算看作是一种运行在无限长纸带上的操作。纸带被划分为一系列单元,每个单元上可以写入一个符号,如0或1。图灵机通过在纸带上移动和改变符号来执行计算。它还包括一个有限状态控制器,该控制器根据当前的符号和状态执行特定的指令。

图灵机和冯诺依曼机的区别:

  1. 存储方式不同:冯诺依曼机使用存储器来存储指令和数据,而图灵机使用纸带来存储数据。
  2. 操作方式不同:冯诺依曼机使用指令和数据在存储器中进行操作,而图灵机使用单个读写头在纸带上读取和写入数据。
  3. 指令集不同:冯诺依曼机使用指令集来执行计算,而图灵机使用单个指令来操作数据。
  4. 应用领域不同:冯诺依曼机主要用于实际的计算机实现,而图灵机主要用于理论计算模型的研究。

程序是怎么运行的?

一个程序执行的时候,CPU 会根据 PC 寄存器里的地址,从内存里面把需要执行的指令读取到指令寄存器里面执行,然后根据指令长度自增,开始顺序读取下一条指令。可以看到,一个程序的一条条指令,在内存里面是连续保存的,也会一条条顺序加载。

常见的计算机指令:

  1. 加载指令(Load):将数据从内存中读取到寄存器或其他存储器中。
  2. 存储指令(Store):将数据从寄存器或其他存储器中写入内存。
  3. 运算指令(Arithmetic and Logic):包括加、减、乘、除、与、或、异或等运算。
  4. 分支指令(Branch):根据条件跳转到程序的不同位置。
  5. 跳转指令(Jump):直接跳转到指定位置执行。
  6. 子程序指令(Call/Return):调用和返回子程序。
  7. 输入输出指令(Input/Output):从输入设备读取数据或向输出设备写入数据。
  8. 空指令(No Operation):什么也不做,只是用来占据指令空间。
  9. 陷阱指令(Trap):用来触发操作系统中的系统调用。
  10. 浮点数指令(Floating Point):用于浮点数的加减乘除等运算。
  11. 向量指令(Vector):用于向量运算,处理器同时执行多个操作。
  12. 加密指令(Encryption):用于加密和解密数据。

对于我们熟悉的编程语言,都可以转化为基本的计算机指令:

  • If else:cmp+jne (jump if not equal)
  • for:cmp+jle
  • Switch:cmp+je

就像是一条纸带,顺序执行时顺序读取,jump时纸带前后倒带,符合了图灵机的构想。