zoukankan      html  css  js  c++  java
  • 80x86保护模式下IDT和中断调用过程分析

    80x86保护模式下IDT和中断调用过程分析

    1.中断描述符表(IDT),将每个异常或中断向量分别与它们的处理过程联系起来。与GDT和LDT类似,IDT也是由8字节长度的描述符组成。IDT空描述符的存在标志位必须是0。IDT表可以驻留在线性地址空间的任何地方,处理器使用IDTR寄存器来定位IDT表的位置。

    LIDT指令可以把内存中的限长值和基地址操作数加载到IDTR寄存器中,该指令仅能由当前特权级CPL是0的代码执行,通常被用于创建IDT时的操作系统初始化代码中。SIDT作用相反,但可以在任何特权级执行。

    2.IDT描述符

    IDT表中可以存放3种类型的门描述符:中断门描述符、陷阱门描述符、任务门描述符。先介绍中断门描述符

    注:上面过程入口点偏移,和代码段描述符的基地址不同,这里入口点偏移值代码中断处理程序在.text段中的偏移量。

    3.异常和中断处理过程

    当相应一个异常或中断时,处理器使用异常或中断的向量作为IDT表中的索引。如果索引值指向中断们或陷阱门,则处理器使用与CALL指令操作调用门类似的方法调用异常或者中断处理过程。如果索引值指向任务门,则处理器使用与CALL指令操作任务门类似的方法进行任务切换,执行异常或中断处理过程。

    下图介绍中断过程调用。门中的段选择符指向GDT或LDT中的可执行代码段描述符。门描述符中的偏移字段指向异常或中断处理过程的开始处。

    4.中断任务处理

    当通过IDT中的任务门来访问异常或中断处理过程时就会导致任务切换。IDT中的任务门会引用GDT中的TSS描述符。

  • 相关阅读:
    C++-POJ1020-Anniversary Cake[搜索][dfs]
    C++-POJ1988-Cube Stacking[数据结构][并查集]
    大佬的代码
    C++-POJ3349-Snowflake Snow Snowflakes[STL][set][hash未写]
    C++-POJ3274-Gold Balanced Lineup[hash]
    ListView 在设备切换横竖屏时保存状态
    Android Studio 常见命令
    android textView 总是有paddingtop怎么解决
    ionic build Android错误记录 error in opening zip file
    git grep 或者 ag 进行快速代码搜索
  • 原文地址:https://www.cnblogs.com/dongguolei/p/8026269.html
Copyright © 2011-2022 走看看