GDT与IDT的初始化

  • GDT

      实地址模式

        286架构以前的采用实地址模式,使用16位段寄存器的内容乘以16得到段基地址,加上16位的偏移地址得到内存地址。这种方式只能访问1MB的内存地址。

保护地址模式

80286开始出现的保护模式可以寻址1MB以上的内存,采用的是段号加GDT的方式。

 

        CPU用8个字节的数据表示这些信息,由于段寄存器只有16位,加上CPU设计上的原因,段寄存器的低3位不能使用,能够使用的只有13位。所以只能有2^13=8192个段号,即0~8191。这些段号信息记录在GDT中,需要8x8192个字节即64KB。由于CPU的存储能力有限,所以GDT存放于内存之中,将内存起始地址和有效设定个数存放在CPU里的GDTR 寄存器之中。

 

  • IDT

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
GDT(全局描述符表)和IDT(中断描述符表)是操作系统中用于管理内存和中断的重要数据结构。 GDT是一个表,用于存储所有内存段的描述符,描述符包含了段的基地址、段的长度、访问权限等信息。在x86体系结构的保护模式下,所有的内存访问都必须通过段寄存器来实现。当CPU执行一条访存指令时,它会把段寄存器的值当做段描述符的索引,在GDT中找到对应的描述符,从而确定要访问的内存地址的范围和访问权限。因此,初始化GDT是操作系统启动时的必要步骤。 IDT是另一个表,用于存储所有中断和异常处理程序的描述符。当CPU收到一个中断请求或异常时,它会从IDT中找到对应的描述符,从而确定要执行的中断或异常处理程序的地址。因此,初始化IDT也是操作系统启动时的必要步骤。 GDTIDT初始化大致可以分为以下几个步骤: 1.创建并填充GDTIDT的表项,每个表项对应一个内存段或中断处理程序。 2.创建并填充GDTR(GDT寄存器)和IDTR(IDT寄存器),这两个寄存器分别存储GDTIDT表的地址和大小信息。 3.使用LGDT和LIDT指令将GDTR和IDTR的值加载到CPU中,从而告诉CPU如何寻找GDTIDT表。 需要注意的是,为了保证安全性,GDTIDT表通常被放置在内核态的固定位置,并且只有内核态的代码才能够修改它们。此外,为了简化实现,现代操作系统通常会使用一些预定义的GDTIDT表项,而不是每次都手动填充表项。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值