X86结构的今生前世

总线:CPU和其他设备的高速通道;

CPU:

运算单元:负责运算、加法位移等

数据单元:CPU内部的缓存和寄存器组,存取速度快,存放数据和运算结果;

控制单元:通过获取指令、执行指令;

 

进程切换:CPU里有两个寄存器,专门保存当前处理进程的代码段的起始地址、以及数据段的起始地址。这里面写的都是进程A,说明当前执行的进程都是进程A的指令,等切换到进程B,就会执行B的指令,这叫做进程切换。

 

总线分为

地址总线:传输地址数据;地址总线的位数决定访问的地址范围有多广,位数越多,能够访问的位置就越多,能管理的内存的范围也就越广;

数据总线:传输数据;数据总线的位置决定一次能拿出几个数据进来,位数越多,一次拿的数据就越多,访问速度也就越快;

 

8086的原理

 

X86有8个16位的通用寄存器,即CPU内部的数据单元,分别是 AX、BX、CX、DX、SP、BP、SI、DI 这些数据在计算过程中暂存数据。

其中 AX、BX、CX、DX 可以分成两个 8 位的寄存器来使用,分别是 AH、AL、BH、BL、CH、CL、DH、DL,其中 H 就是 High(高位),L 就是 Low(低位)的意思;

 

IP寄存器就是指令寄存器Instruction Pointer Register,指向代码段中下一条指令的位置,CPU 会根据它来不断地将指令从内存的代码段中,加载到 CPU 的指令队列中,然后交给运算单元去执行;

 

每个进程都分代码段和数据段,为了指向不同进程的地址空间,有四个 16 位的段寄存器,分别是 CS、DS、SS、ES。

CS :代码段寄存器Code Segment Register

DS:数据段寄存器 Data Segment Register

SS:栈寄存器 Stack Register—— 数据的存取只能从一端进行,秉承后进先出的原则,push 就是入栈,pop 就是出栈

A调用B,B调用C——当A要执行B时,A相关的运行信息会被push到栈中,同样B要执行C时,B相关的信息要被push到栈中;当C执行完,先pop出现的是B,当B执行完最后pop出来的是A。

运算中需要加载内存中的数据,需要通过 DS 找到内存中的数据,加载到通用寄存器中。对于每一个段都有一个起始地址,段内的具体位置,我们称为偏移量(Offset)。代码段的偏移量在 IP 寄存器中,数据段的偏移量会放在通用寄存器中。

32位处理器

通用寄存器进行扩展,将8个16位的扩展到了8个32位的,保留了8位和16位的使用方式;

CS、SS、DS、ES 仍然是 16 位的,但是不再是段的起始地址。段的起始地址放在内存的某个地方。这个地方是一个表格,表格中的一项一项是段描述符(Segment Descriptor)。这里面才是真正的段的起始地址。而段寄存器里面保存的是在这个表格中的哪一项,称为选择子(Selector);将一个从段寄存器直接拿到的段起始地址,变成了先间接从段寄存器中找到表格中的一项,再从表格中的一项中拿到段起始地址。

 

- 16位为实模式, 32位为保护模式

- 刚开机为实模式, 需要更多内存切换到保护模式

补充学习连接:http://www.cs.virginia.edu/~evans/cs216/guides/x86.html

《深入理解操作系统》第三章

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值