图灵机

阿兰图灵团队,计算机的起源
image.png

意义

  • 奠定了可计算理论(图灵完备
  • 定义了计算机的构成和程序执行规则

    构成**

  • 一条无限长的纸带:纸带上是一个格子挨着一个格子,格子中可以写字符,你可以把纸带看作存储器,而这些字符可以看作是内存中的数据或者程序。

  • 一个读写头(**指针**):读写头可以读取任意格子上的字符,也可以改写任意格子的字符。
  • 一些精密的零件:包括图灵机的存储、控制单元和运算单元。

    如何执行程序

    想象一下,执行一个 12+17 的程序(不严谨示例,仅供参考),纸带可作为我们读写数据/指令的载体,那么我们可以这样做:
  1. 从左到右依次在纸带上记录“12”、“17”、“+”。
  2. 读写头每次向右移动一格,并将纸带上的数据存入状态(入栈),当读取到符号“+”,识别为指令运算符号,存储“加法运算逻辑”状态。
  3. 从状态里面取出数据并执行“加法运算逻辑”,将运算结果存储到状态,并传递给读写头打印到纸带。

冯诺依曼模型

冯诺依曼团队,遵循图灵机设计,开创新纪元
image.png

意义

  • 使用电子元件(三极管),约定使用二进制(0和1)进行存储计算
  • 奠定了现代计算机模型

    构成

  • 输入设备

  • 输出设备
  • 存储器**线性排列存储区域,1字节=8比特(或者叫8位),即1byte=8bit**
  • 中央处理器

CPU,存在计算上限,因为1字节可表示的范围是(0~255),一般32位CPU可计算的最大整数为 2^32 - 1 = 4294967295
逻辑运算控制单元,负责计算和控制;
寄存器,负责存储CPU需要计算的数据,通用寄存器(如逻辑符号),特殊寄存器(如指针),指令寄存器(如指令)

  • 总线**:**

地址总线,指定CPU将要操作的内存地址;
数据总线,读写内存中的数据;
控制总线,发送和接收关键信号(如中断信号、设备复位、就绪信号)

如何通信

由上可知,计算机中各个构成部分需要进行通信,实际上传递的就是高低电平(低电平代表0,高电平代表1),高高低低传递的就是1100,相当于数值12。这里默认的是串行**通信,在一个线路上bit by bit发送,效率是非常低的,如果要发送大量数据,则需要增加线路,多条线路同时按bit by bit发送数据,即并行**通信。线路的条数即线路位宽

CPU如何工作

指令周期

  1. Fetch:CPU获取地址总线中指令的内存地址,并到数据总线中取出
  2. Decode:指令解码
  3. Execute:指令执行
  4. Store:存储结果

image.png
以上即一个CPU的指令周期,CPU的工作就是重复这个过程。

指令类型

按照功能分有:

  1. I/O 类型的指令,比如处理和内存间数据交换的指令 store/load 等;再比如将一个内存地址的数据转移到另一个内存地址的 mov 指令。
  2. 计算类型的指令,最多只能处理两个寄存器,比如加减乘除、位运算、比较大小等。
  3. 跳转类型的指令,用处就是修改 PC 指针。比如编程中大家经常会遇到需要条件判断+跳转的逻辑,比如 if-else,swtich-case、函数调用等。
  4. 信号类型的指令,比如发送中断的指令 trap。
  5. 闲置 CPU 的指令 nop,一般 CPU 都有这样一条指令,执行后 CPU 会空转一个周期。

按照寻址方式分:

  1. 直接寻址,比如直接加载一个内存地址中的数据到寄存器的指令la
  2. 寄存器寻址,直接将一个数值导入寄存器的指令li
  3. 间接寻址,将一个寄存器中的数值作为地址,然后再去加载这个地址中数据的指令lw

时钟周期

通过石英晶体的脉冲转化成时钟信号驱动的,每次高低电平的转换就是一个周期,称为时钟周期(即CPU主频)。通常来说,一个指令需要经过多个时钟周期。