了解CPU工作原理

计算机在被发明出来之后, 结构基本上没有怎么改变, 目前使用最广泛的结构是“冯诺依曼结构”

冯诺依曼结构

维基百科传送门

简单而言的冯诺依曼结构处理器具有以下几个特点:

  1. 必须有一个存储器;
  2. 必须有一个控制器;
  3. 必须有一个运算器,用于完成算术运算和逻辑运算;
  4. 必须有输入和输出设备,用于进行人机通信。

冯诺依曼结构处理器

并且还有和冯诺依曼不一样的另一种结构: 哈佛结构

CPU的指令集

指令集是存储在CPU内部,对CPU运算进行指导和优化的硬程序

说人话:
指令集就是你驱动CPU运算发送的指令

x86/x64指令集

这两种是我们目前最普遍的台式机和笔记本的CPU种类,

ARM指令集

在我们的移动设备上、 智能手表上、只能音响上

MIPS指令集

一般用在服务器上, 并且是大型的服务器

RISC指令集

这属于一种精简指令, 也可以认为是一种开源的指令集

中国曾经自己研发的芯片 龙芯, 还有中国的超级计算机也是使用的这个指令集

🌗如何兼容各指令集

指令集是CPU原生支持的语言,不同的指令集之间是不能互换的,

所以C语言在编译的时候有一种方式叫交叉编译

你在X64系列的CPU上去给ARM的CPU去编译程序,这就是交叉编译。

这也是做嵌入式的就比较常用这些东西。

CPU的组成

  • 控制器
  • 运算器
  • 存储器

CPU结构

存储器

存储器的主要功能是存储程序和各种数据,并能在计算机运行过程中高速、自动地完成程序或数据的存取。

他是CPU上的缓存, 它相当于是我们考试时的草稿纸, 在上面写的只是运算过程, 而最终答案是写到答题纸上的(内存)

运算器

算术逻辑运算单元(ALU)的基本功能为加、减、乘、除四则运算,与、或、非、异或等逻辑操作,以及移位、求补等操作。

控制器

控制单元又分为: 指令计数器、 指令寄存器

控制负责协调运算器和存储器之间的工作


总之,控制器相当于指挥官, 运算单元相当于士兵, 存储器相当于仓库,

指挥官指挥士兵在存库中搬弹药,做工作

CPU如何与内存沟通

计算机中的数据分为两种

  1. 代码段 —- 指令数据(我们写的代码)
  2. 数据段 —- 纯粹的数据(比如电影文件)

代码段和数据段一般是分开存放的, 一定要放一起也不是不可以, 但是很有可能回引起很严重的安全问题– 缓冲区溢出,看下面的安全问题区域 👇


指令计数器从代码段中找出一段指令, 放到指令寄存器中(指令寄存器可以理解为CPU中一块特殊的内存, 但是它只能放指令, 如果存数据就会宕机), 放到指令寄存器中后, 控制器就开始根据这个指令具体的内容,把数据送入运算器, 数据从哪里来, 控制器通过数据总线从内存中拿到数据然后送入存储单元,供运算器使用

🔥安全问题

🌊 缓冲区溢出

在代码段插入一些数据, 或是插入一些异常的跳转指令, 本来程序中的跳转是体现在if`else或者是for循环, 这些跳转语句在计算机底层会被转换成jmp`指令,从这个地方跳转到另一个地方去执行, 当你跳到另一段代码那, 这段代码就开始执行了, 也就是如果代码是经过精心设计的, 跳转到的目标代码段不是你原本想要的代码段, 而目标代码段要做危险操作, 那就危险大了, 这就是缓冲区溢出。

比如前两年的漏洞: 心脏滴血

如何与内存沟通

经典的8086CPU结构体系

8086是一种比较早的商业化处理器芯片
8086CPU结构

你的支持将鼓励我继续创作