【Linux】CPU
硬件
组成一个电脑主机的硬件有哪些?
-
CPU
CPU也就是中央处理器。整台计算机的大脑,控制一切。 -
总线
CPU是大脑,那么总线就相当于神经,是CPU与其他设备的高速通道。 -
内存
CPU可以计算东西,但无法保存数据,所计算过程中的所有数据,都需要依靠内存保存。 -
输入输出设备
什么鼠标,显示器之类的,也是通过总线链接在一起的。
CPU与内存
CPU分为三个部分:运算单元、数据单元、控制单元。
运算单元:
- 用来计算。
- 但数据从哪来,往哪放它不管。
数据单元:
- 包括CPU内部的缓存和寄存器组。
- 一般来说运算单元需要的数据可以通过总线从内存中读取,但很明显这样太慢了。所以就有了数据单元,可以暂存数据。
控制单元:
- 指挥中心,获得下一条指令,并执行。
- 指导运算单元取出数据单元的某几个数据,然后计算出结果后放到数据单元的某个地方。
CPU如何执行程序并操作数据呢?
- 在控制单元里,有一个指令指针寄存器。其中存放了下一条指令在内存中的地址。控制单元会不停的将代码段的指令拿进来,先放到指令寄存器。
- 指令的构成分为两部分:前部分是具体的计算操作,后部分是待操作的数据的地址。
- 把前半部分给运算单元,后半部分给数据单元。数据单元获取到数据后,运算单元进行运算,之后产生结果会先放到数据单元的寄存其里,最后会有指令将数据写回到内存的数据段。
在上述中发现在总线上跑的有两类:地址数据、真实数据。所以总线也有两类,一类是地址总线,一类是数据总线。也可以看出来总线的能力强弱在一定程度上决定了计算的强弱,而总线的强弱就在于总线的位数。
地址总线:
- 地址总线的位数,决定了能访问的地址范围到底有多广。
- 例如只有两位,那CPU就只能认00,01,10,11四个位置,超过四个位置,就区分不出来了。位数越多,能够访问的位置就越多,能管理的内存的范围也就越广。
数据总线:
- 数据总线的位数,决定了一次能拿多少个数据进来。
- 例如只有两位,那CPU一次只能从内存拿两位数。要想拿八位,就要拿四次。位数越多,一次拿的数据就越多,访问速度也就越快。
8086处理器(16位)
8086处理器是Inter的16位微处理器 有16根数据线和20根地址线。(计算机的位数实际上就是数据总线的位数)
8086内部8个16位通用寄存器,其中有4个可以分为两个8位寄存器。这些寄存器可以用来暂存数据。
IP寄存器:存放了代码段中下一条指令的位置。
CS代码段寄存器、DS数据段寄存器、SS栈寄存器、ES附加段寄存器(都是16位)。
从内存取数据:DS寄存器保存了数据段的段基地址(16位),同时在通用寄存器里保存了数据段的偏移量(16位)。
从内存取代码:CS代码段寄存器保存了代码段的基地址(16位),同时在IP寄存器中保存了代码段的偏移地址(16位)。
因为8086的地址总线是20位,所以会把基地址左移4位再加上16位偏移量,就能得到20位数据地址。
由于地址总线长度为20位,所以8086CPU能够访问的内存只有220=1M大小**。由于偏移量是116位,所以**一个段的大小是216=64k。
32位处理器
32位处理器也就是有32位的数据总线,同时他的地址总线也是32位。
虽说扩展到了32位,但必须兼容之前的16位处理器。如何兼容就成了绕不过的问题。
通用寄存器和IP寄存器的变化不大,主要不兼容的是段寄存器。
段寄存器设定为32位那就可以访问4G的内存,那就不需要偏移了。
所以在32位CPU中,CS、SS、DS、ES仍然是16位的,但是不再是段的起始地址。段的起始地址放在内存中叫全局描述符表,表中每一项叫段描述符。段寄存器里面保存的是该表某一项的地址。
这样,将一个从段寄存器直接拿到的段起始地址,就变成了先间接地从段寄存器找到表格中的一项,再从表格中的一项中拿到段起始地址。
因而到了32位的系统架构下,我们将前一种称为实模式,后一种称为保护模式。