【Linux】CPU

硬件

组成一个电脑主机的硬件有哪些?

  1. CPU
    CPU也就是中央处理器。整台计算机的大脑,控制一切。

  2. 总线
    CPU是大脑,那么总线就相当于神经,是CPU与其他设备的高速通道。

  3. 内存
    CPU可以计算东西,但无法保存数据,所计算过程中的所有数据,都需要依靠内存保存。

  4. 输入输出设备
    什么鼠标,显示器之类的,也是通过总线链接在一起的。

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位的系统架构下,我们将前一种称为实模式,后一种称为保护模式

posted @ 2020-01-29 12:04  LampsAsarum  阅读(142)  评论(0编辑  收藏  举报