第三次科技革命

第三次科技革命的能源是一种数字能量,本质是计算。
数字能量是如何产生的:电能供给给芯片,芯片中的一种电子元件晶振(也就是石英晶体)通电后产生震荡,震荡会产生频率稳定的脉冲信号。通常这是一个高频的脉冲信号,每秒可达百万次。然后我们通过谐振效应发放这个信号,形成方波。再通过电子元件调整这种脉冲的频率,把脉冲信号转换为我们需要的频率,这就形成了驱动芯片工作的时钟信号。这种信号的频率,我们称为芯片的时钟频率。最后,时钟信号驱动着芯片工作,就像人体的脉搏一样,每一次脉冲到来,都让芯片的状态发生一次变化,用这种方法,最终存储器中的指令被一行行执行。指令被执行,其实就是数据被计算,这就是计算能量。

摩尔定律

摩尔定律: 当价格不变时,集成电路中可容纳的晶体管数目约每隔 18~24个月就会增加一倍。
但是到今天,摩尔定律失效了。因为随着芯片越来越小,在尺寸和散热等方面已经挑战人类的极限,芯片中无法再放入更多的电子元件了。

计算能力的边界

我们把世界上想要解决的事情称作问题,解决问题往往需要消耗芯片的计算能力,这通常称作时间开销,另外解决问题还需要消耗内存,这叫做空间开销。

图灵机

图灵机的贡献

  1. 它清楚地定义了计算机能力的边界,也就是可计算理论;
  2. 它定义了计算机由那些部分组成,程序又是如何执行的;

图灵机的内部构造

  1. 图灵机拥有一条无限长的纸带,纸带上是一个格子挨着一个格子,格子中可以写字符,可以把纸带看作内存,而这些字符可以看作是内存中的数据或者程序;
  2. 图灵机有一个读写头,读写头可以读取任意格子上的字符,也可以改写任意格子的字符;
  3. 读写头上面的盒子里是一些精密的零件,包括图灵机的存储、控制单元和运算单元;

冯诺伊曼模型

冯诺曼和其他几个科学家遵循了图灵机的设计,并提出电子元件构造计算机,约定了用二进制进行计算和存储,并且计算机分成以下5个部分:

  1. 输入设备;
  2. 输出设备;
  3. 内存;
  4. 中央处理器;
  5. 总线;

内存

在冯诺依曼模型中,程序和数据被存储在一个被称作内存的线性排列存储区域。存储的数据单位是一个二进制位,英文是 bit。最小的存储单位叫做字节,也就是8位,英文是 byte,每一个字节都对应一个内存地址。
内存都是随机存储器,也就是读取任何一个地址数据的速度是一样的,写入任何一个地址数据的速度也是一样的。

CPU

冯诺依曼模型中 CPU 负责控制和计算。为了方便计算较大的数值,CPU 每次可以计算多个字节的数据。

  • 如果 CPU 每次可以计算 4 个 byte,称作 32 位 CPU;
  • 如果 CPU 每次可以计算 8 个 byte,称作 64 位 CPU;
    上述的 32 和 64,称作 CPU 的位宽。
    为什么 CPU 要这样设计呢》 因为一个 byte 最大的表示范围是 0 ~ 255,如果要计算较大的数,就超出范围了。因此, CPU 需要支持多个 byte 一起计算。CPU 位数越大,可以计算的数值就越大。

控制单元和逻辑运算单元

CPU 中有一个控制单元专门负责控制 CPU 工作;还有逻辑运算单元专门负责计算。

寄存器

CPU 要进行计算,因为 CPU 离内存太远,所以需要一种离自己近的存储来存储将要被计算的数字。这种存储就是寄存器。这种存储就在 CPU 里,离控制单元和逻辑运算单元非常近,所以速度很快。

  • 寄存器中有一部分是可供用户编程用的,是通用寄存器;
  • 还有一部分寄存器有特殊的用途,叫做特殊寄存器。比如程序指针,它存储了 CPU 要执行的下一条指令所在的内存地址。程序指针不是存储了下一条要执行的指令,只是存储了下一条指令的地址。
  • 下一条要执行的指令,会从内存读入到另一个特殊的寄存器中,这个寄存器叫做指令寄存器。指令被执行完成之前,指令都存储在这里。

总线

CPU 和内存以及其他设备之间,也需要通信,因此我们用一种特殊的设备进行控制,就是总线。总线分为 3 种:

  1. 地址总线: 用来指定 CPU 将要操作的内存地址;
  2. 数据总线: 用来读写内存中的数据;
    当 CPU 需要读写内存的时候,先是通过地址总线来指定内存地址,再通过数据总线来传输数据;
  3. 控制总线: 用来发送和接收关键信号,比如中断信号、设备复位、就绪等信号。同样的, CPU 需要对这些信号进行响应,这也需要控制总线;

输入输出设备

输入输出设备向计算机输入数据,计算机经过计算,将结果通过输出设备向外界传达。如果输入输出设备想要和 CPU 进行交互,比如用户按键需要 CPU 响应,这时候就需要用到控制总线。

程序的执行过程

CPU 执行程序的时候:

  1. 首先, CPU 读取 PC 指针指向的指令,将它导入指令寄存器。具体来说,完成这件指令有三个步骤:
    (1) CPU 的控制单元操作地址总线指定需要访问的内存地址(就是把 PC 指针中的值拷贝到地址总线中);
    (2) CPU 通知内存设备准备数据(内存设备准备好了,就通过数据总线将数据传送给 CPU);
    (3) CPU 收到内存传来的数据后,将这个数据存入指令寄存器;
  2. CPU 分析指令寄存器中的指令,确定指令的类型和参数;
  3. 如果是计算类型的指令,那么就交给逻辑运算单元计算;如果是存储类型的指令,那么由控制单元执行;
  4. PC 指针自增,并准备获取下一条指令;
    在 32 位的机器上,指令是 32 位 4 个字节,需要 4 个内存地址的存储,因此 PC 指针会自增 4;

指令

举例 load 指令:0x8c000100 -> 1000110000000000000000100000000
100011 + 0000 + 000000000000001000000000
100011: 最左边的 6 位,叫做操作码,100011 代表 load 指令;
0000: 中间的 4 位是寄存器的编号,这里到表寄存器 R0;
后面的 22 位代表要读取的地址

一个问题: 64 位和 32 位比较有什么优势?

64 位的 CPU 和 32 位的 CPU 比较

  1. 64 位 CPU 可以执行更大数字的运算,这个优势在普通应用上不明显,但是对于数值计算多的应用就非常明显;
  2. 64 位 CPU 可以寻址更大的内存空间(此时程序指针寄存器是一个 64 位的寄存器);

64 位程序和 32 位程序

32 位指令在 64 位机器上执行困难不大,可以兼容;64 位指令在 32 位机器上执行就困难了。
如果是 64 位操作系统,不能安装在 32 位机器上;