段、GDT/IDT 相关知识点

导读:
段是学习汇编、操作系统经常遇到的知识,那么什么是段?为何使用段也是需要清楚的内容。此外还初步讲解了GDT和IDT的相关知识。

段的由来

  1. 现在所有的操作系统都能同时运行多个程序。在这种情况下内存使用重叠了该怎么办?会出现让一个程序停止运行并且提示“内存地址冲突”的错误吗?是不会出现的。这就是采用了分段的机制。
  2. 分段就是指按照自己喜欢的方式,将4GB的内存空间分为多个block(块),一个块的首地址都当做0来看待。这样所有的程序开头都可以协商ORG 0。像这样分割出来的块,就称之为段(segment)。一般来说采用分页(paging)也可以解决这种问题,我们这里不讨论。

段号

  1. 段寄存器是16位的,因为CPU设计的原因,低3bit不能使用,只能使用高13bit。那么段号的范围是0~8191。
  2. 段号该如何设定呢?因为有0~8191个段,定义这么多段需要8192x8=65536(64KB)大小。可是CPU没有这么大的存储能力,那么该怎么办?这时候就需要将其存放在内存中。那么这64KB(可能小些)的数据就称之为GDT。

GDT

GDT是“global(segment) descriptor table”的缩写,也就是全局段描述符表。这些64kb数据整齐的排列在内存中某一位置。而该位置的内存地址以及有效的个数就存放在GDTR中。GDTR是一种特殊的寄存器。如此一来段号就设定好了。

IDT

IDT是“interrupt descriptor table”的缩写,是中断描述符表。IDT记录了0~255的中断号码和中断服务函数的关系。当发生中断的时候,通过中断号码去执行中断服务函数。(IDT的设定方法和GDT非常相似,因为采用相似的方法能简化CPU的电路)

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猎羽

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值