跳至主要内容

CPU的基本结构

概述

目前常见的CPU,无论是x86、ARM或MIPS架构,均是建立在冯诺伊曼体系下的。

简单理解,冯诺伊曼体系计算机有以下几个部件组成:

  1. 运算器(ALU)
  2. 控制器(Controller)
  3. 存储器(Memory)
  4. 和输入输出(I/O)

其中运算器负责运算;控制器协调指令和数据;存储器存储指令和数据;输入输出为外设,比如硬盘、键盘、网卡,毕竟CPU是需要为外界服务的。

演进至今,冯诺伊曼计算机已经具有强大的计算能力,许多CPU引入了流水线、分支预测、乱序执行等策略,提高了CPU的部件利用率和计算力。

从一个简单程序开始

如上图,我们定义了一个简单C程序,负责计算1+2的值,并保存到一个变量a里。为了简单,这个小程序没有I/O操作。

直接的C指令CPU是无法执行的,因为它不认识C字符。因此需要经过编译器编译为汇编指令,汇编再经过汇编器转为机器指令,如果引用了外部库,可能还需要链接这一步骤,但是此处不需要。

有了机器指令,就可以让CPU执行了。但是我们的机器指令存储在外设硬盘上,还需要经过DMA设备将指令载入内存,内存里的东西CPU就能通过寻址拿到了。

内存里存有数据和指令,这些东西都会通过系统总线拿到CPU里。

指令到达CPU后,首先会被译码,操作码将被转换为相关计算行为,而操作数将载入寄存器,最终由ALU计算处理。

ALU计算完毕后,一部分中间数据会写回寄存器,访问寄存器比访问存储器快很多,最终结果将写回存储器。在这个🌰里,汇编指令mov %ecx,-0x4(%rbp)对应的机器码就是告诉CPU将结果写回内存变量a

CPU内部有个时钟,用于周期性发射脉冲信号,控制CPU对指令顺序执行。在最简单的情况下,一个脉冲执行一条指令。

更复杂的构造

以上示例只是最简单的情况,当有I/O时,会复杂许多。

目前,许多CPU加入了流水线、分支预测、乱序执行等功能,大大提升了CPU性能。比如,在本文的示例CPU中,同一时刻只有一个部件在工作,加入流水线可让很好地避免这一问题。

同时,提高指令缓存和数据缓存,增加多级缓存,改进缓存读写策略,都能提高CPU计算效率,这里将不深入展开。

总结

真实的CPU比这个复杂很多,但在量子计算机真正产生前,现存CPU都是基于冯诺依曼体系的,其基本原理一样。

高级的程序语言必须通过编译汇编,转化为CPU指令。通过CPU译码,控制器处理,运算器计算,最后回写。如此,经过若干个时钟周期后,一个程序才算执行完毕了。

评论

此博客中的热门博文

归并排序的两种方式

概述 归并排序是目前最高效的排序算法之一,它兼具稳定和低复杂度的特点,其最坏时间复杂度 O(nlogn) ,空间复杂度 O(n) 。 归并排序采用计算机科学的分治思想,因此有两种实现方式:自顶向下和自底向上。

博客迁移至 Blogger 小记

最早博客是基于 Hexo 搭建,并部署在 Github Page 上。后来因为访问速度原因,迁至大陆腾讯云裸机器上(因为做活动一年¥100不到),使用 Nginx 代理静态文件。裸机器到期后迁至腾讯云 cos 里,成本倒是降低了,但不久备案被吊销,博客停更。