图灵机
意义
- 奠定了可计算理论(图灵完备)
-
构成**
一条无限长的纸带:纸带上是一个格子挨着一个格子,格子中可以写字符,你可以把纸带看作存储器,而这些字符可以看作是内存中的数据或者程序。
- 一个读写头(**指针**):读写头可以读取任意格子上的字符,也可以改写任意格子的字符。
- 一些精密的零件:包括图灵机的存储、控制单元和运算单元。
如何执行程序
想象一下,执行一个 12+17 的程序(不严谨示例,仅供参考),纸带可作为我们读写数据/指令的载体,那么我们可以这样做:
- 从左到右依次在纸带上记录“12”、“17”、“+”。
- 读写头每次向右移动一格,并将纸带上的数据存入状态(入栈),当读取到符号“+”,识别为指令运算符号,存储“加法运算逻辑”状态。
- 从状态里面取出数据并执行“加法运算逻辑”,将运算结果存储到状态,并传递给读写头打印到纸带。
冯诺依曼模型
意义
CPU,存在计算上限,因为1字节可表示的范围是(0~255),一般32位CPU可计算的最大整数为 2^32 - 1 = 4294967295;
逻辑运算控制单元,负责计算和控制;
寄存器,负责存储CPU需要计算的数据,通用寄存器(如逻辑符号),特殊寄存器(如指针),指令寄存器(如指令)
- 总线**:**
地址总线,指定CPU将要操作的内存地址;
数据总线,读写内存中的数据;
控制总线,发送和接收关键信号(如中断信号、设备复位、就绪信号)
如何通信
由上可知,计算机中各个构成部分需要进行通信,实际上传递的就是高低电平(低电平代表0,高电平代表1),高高低低传递的就是1100,相当于数值12。这里默认的是串行**通信,在一个线路上bit by bit发送,效率是非常低的,如果要发送大量数据,则需要增加线路,多条线路同时按bit by bit发送数据,即并行**通信。线路的条数即线路位宽。
CPU如何工作
指令周期
- Fetch:CPU获取地址总线中指令的内存地址,并到数据总线中取出
- Decode:指令解码
- Execute:指令执行
- Store:存储结果
以上即一个CPU的指令周期,CPU的工作就是重复这个过程。
指令类型
按照功能分有:
- I/O 类型的指令,比如处理和内存间数据交换的指令 store/load 等;再比如将一个内存地址的数据转移到另一个内存地址的 mov 指令。
- 计算类型的指令,最多只能处理两个寄存器,比如加减乘除、位运算、比较大小等。
- 跳转类型的指令,用处就是修改 PC 指针。比如编程中大家经常会遇到需要条件判断+跳转的逻辑,比如 if-else,swtich-case、函数调用等。
- 信号类型的指令,比如发送中断的指令 trap。
- 闲置 CPU 的指令 nop,一般 CPU 都有这样一条指令,执行后 CPU 会空转一个周期。
按照寻址方式分:
- 直接寻址,比如直接加载一个内存地址中的数据到寄存器的指令
la
。 - 寄存器寻址,直接将一个数值导入寄存器的指令
li
。 - 间接寻址,将一个寄存器中的数值作为地址,然后再去加载这个地址中数据的指令
lw
。
时钟周期
通过石英晶体的脉冲转化成时钟信号驱动的,每次高低电平的转换就是一个周期,称为时钟周期(即CPU主频)。通常来说,一个指令需要经过多个时钟周期。