基础概念
cpu:命令的执行
内存:中间结果保存、进一步计算,cpu无法保存太多的中间结果
总线:连接cpu、内存、显卡、磁盘空盒子器、usb控制器
进程:可以理解为实例化的程序,程序是存在硬盘的,而进程是要讲程序加载到内存,不同进程的内存空间是隔离的。进程空间粗略的分有代码段和数据段。cpu包含两个寄存器,分别存放当前处理进程的代码段的起始地址和数据段的起始地址,进程切换会切换这两个寄存器存储的起始地址。
cpu
cpu包括三部分:
- 运算单元
- 数据单元
- 控制单元
运算单元
做加法、移位等。
数据单元
包括cpu内部的缓存和寄存器组,空间小、速度快,展示存放数据和运算结果。
数据单元从数据段中读取数据。
8086处理器内部有8个16位通用寄存器:AX、BX、CX、DX、SP、BP、SI、DI。
其中AX、BX、CX、DX可以分成两个8位寄存器使用,分别为AH、BH、CH、DH、AL、BL、CL、DL。H是高位、L是低位。这样长短数据可以用不同大小的寄存器存放。
控制单元
统一指挥,获取下一条命令、执行,指令会指导运算单元获取数据单元数据,进行计算,结果存数据单元。
控制单元中的指令指针寄存器用于存放吓一条指令在内存中的地址,控制单元将代码段的指令放入指令寄存器进行后续执行。
指令分为操作和数据,操作对应运算单元,数据对应数据单元。
控制单元通过指令将数据单元中的数据写会内存中的数据段。
8086处理器控制单元内部的IP寄存器是指令寄存器。
为了满足进程切换,需要下面几个寄存器的配合:
- CS(代码段寄存器),存储代码段在内存中的起始地址,代码段的偏移量存储在IP寄存器
- DS(数据段寄存器),存储数据段在内存中的起始地址,数据段的偏移量存储在通用寄存器
- SS(栈寄存器)
在x86处理器中,CS、DS、IP寄存器和通用寄存器都是16位,但是8086的地址总线是20位,直观上不匹配,所以8086的玩法是起始地址*16+偏移量,通过左移4位,弄出了20位的数据地址。所以8086的内存地址最多1M(2^20),一个段最大64k(2^16),
总线
总线分为:
- 地址总线
- 数据总线
地址总线
地址总线的位数,决定能访问的地址范围,位数越多表示能访问的内存范围越大。
数据总线
数据总线表示一次能获取多少的数据。
举例
型号 | 数据总线位宽 | 地址总线位宽 | 寻址空间 |
---|---|---|---|
8086 | 16 | 20 | 2^20=1M |
80386 | 32 | 32 | 2^32=4G |
8086位处理器->32位处理器
32位处理器地址总线位数和数据总线的位数都是32,可访问2^32=4G内存。
通用寄存器的变化:从8个16位扩展到了8个32位,其低16位依然保留16位和8位的使用方式,高16位没法弄,不兼容。
IP寄存器变化:从16位扩展成32位。
段寄存器:8086的段寄存器地址是16位的,但是在计算内存地址时要左移4位的,但是在32位处理器下,如果段寄存器是32位的话,是完全能cover住4G的地址空间,所以进行了重新定义,CS、SS、DS、ES还是16位,但是数据的含义变了,首先,段的起始地址存放在内存中的一个表格中,表格的每一项是段描述符,这才是段起始地址。而段寄存器保存的是这个表的哪一项,成为选择子。
为了应对段寄存器的数据含义变化,32位系统架构有两个模式。
- 实模式,系统启动时所处模式,兼容原模式,当需要更多内存,切换为保护模式
- 保护模式,
来源:CSDN
作者:互联网-心猿
链接:https://blog.csdn.net/mlsoftware/article/details/104007651