操作系统——中断机制(trap, interrupts)

原创 2016年07月28日 21:22:50

中断描述符表(Interrupt Descriptor Table,IDT)将每个异常或中断向量分别与它们的处理过程联系起来,IDT也是由8字节长描述符组成的一个数组。

IDT表可以存放在线性地址空间的任何地址,处理器使用IDTR寄存器来定位IDT表的位置。

IDTR寄存器中含有32位的基地址和16位的长度值。

LIDT和SIDT指令分别用于加载和保存IDTR寄存器的内容。

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

The x86 allows up to 256 different interrupt or exception entry points into the kernel, each with a different interrupt vector.A vector is a number between 0 and 255. An interrupt's vector is determined by the source of the interrupt: different devices, error conditions, and application requests to the kernel generate interrupts with different vectors. The CPU uses the vector as an index into the processor's interrupt descriptor table (IDT), which the kernel sets up in kernel-private memory, much like the GDT. From the appropriate entry in this table the processor loads:

  • the value to load into the instruction pointer (EIP) register, pointing to the kernel code designated to handle that type of exception.
  • the value to load into the code segment (CS) register, which includes in bits 0-1 the privilege level at which the exception handler is to run. 

中断向量和中断向量表
中断向量:中断处理程序的入口地址。其实
中断向量表:中断处理程序的入口地址的列表

中断描述符表和中断向量表的区别联系

在保护模式下,中断向量表中的表项由8个字节组成,根据中断号可以索引其在中断向量表中的位置,在该模式下,中断向量表也可称为中断描述符表IDT.

表中的每个entry称为一个门描述(gate descriptor) ,通过它进入相应的处理程序。

中断门(interrupt gate)分类:

中断门(Interrupt gate)
其类型码为110,中断门包含了一个中断或异常处理程序所在段的选择符和段内偏移量。当控制权通过中断门进入中断处理程序时,处理器清IF标志,即关中断,以避免嵌套中断的发生。中断门中的DPL(Descriptor Privilege Level)为0,因此,用户态的进程不能访问Intel的中断门。所有的中断处理程序都由中断门激活,并全部限制在内核态。
· 陷阱门(Trap gate)
其类型码为111,与中断门类似,其唯一的区别是,控制权通过陷阱门进入处理程序时维持IF标志位不变,也就是说,不关中断。
· 系统门(System gate)
这是Linux内核特别设置的,用来让用户态的进程访问Intel的陷阱门,因此,门描述符的DPL为3。通过系统门来激活4个Linux异常处理程序,它们的向量是3、4、5及128,也就是说,在用户态下,可以使用int3、into、bound 及int0x80四条汇编指令
最后,在保护模式下,中断描述符表在内存的位置不再限于从地址0开始的地方,而是可以放在内存的任何地方。为此,CPU中增设了一个中断描述符表寄存器IDTR,用来存放中断描述符表在内存的起始地址。中断描述符表寄存器IDTR是一个48位的寄存器,其低16位保存中断描述符表的大小,高32位保存IDT的基址.


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

操作系统——中断、异常和系统调用比较

我们首先要明确,为什么操作系统需要中断、异常和系统调用:     在计算机运行时,内核是被信任的第三方    只有内核才可以执行特权指令    方便应用程序     接下来我们先简单了解一下三...

操作系统关于中断的实现

/*Interrupt, trap and exception handling in Windows nt把硬件中断映射到software interrupt request level上了,实现了...
  • wzsy
  • wzsy
  • 2013年03月04日 15:05
  • 767

操作系统的中断与异常(陷阱)

刚开始学习操作系统原理,转载一下关于中断(interrupt)和陷阱(trap)的内容。 1.中断的基本概念  中断是指计算机在执行期间,系统内发生任何非寻常的或非预期的急需处理事件,使得CPU暂...

一个操作系统的实现(9)-中断和异常

这节讲了中断与异常的一些基本概念。然后通过代码实现一个显示字符的中断和时钟中断。 实模式与保护模式下的中断有区别 保护模式下的中断与实模式下的中断有几点不同。 实模式下的中断向量...

操作系统是如何利用中断机制的

1、中断。 2、中断的类型。 从中断事件的性质出发,中断可以分为两大类: 强迫性中断事件 包括硬件故障中断,程序性中断,外部中断和输入输出中断等 自愿性中断事件 是由正在运行的进程执行一条访管...

【操作系统】trap,interrupt,和异常

陷阱计算机有两种运行模式:用户态, 内核态。 其中操作系统运行在内核态,在内核态中,操作系统具有对所有硬件的完全访问权限,可以使机器运行任何指令;相反,用户程序运行在用户态,在用户态下,软件只能使用少...
  • cww97
  • cww97
  • 2016年10月08日 00:10
  • 733

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

操作系统学习笔记(20)--开中断、关中断及原子操作

  操作系统在很多情况下,需要进行原子操作,此时是不可以进行中断响应的。根据需要此时需要关闭中断,在原子操作完了之后再进行开中断。 中断相关的操作有:1 知道EFFLAG的中断位2 中断开、关的指令3...

操作系统关于中断的实现

/*Interrupt, trap and exception handling in Windows nt把硬件中断映射到software interrupt request level上了,实现了...
  • dog250
  • dog250
  • 2010年02月09日 17:11
  • 3158

什么是Trap消息?

用一句话来说的话,SNMP Trap就是被管理设备主动发送消息给NMS的一种机制。         当被管理设备出现性能问题,甚至是网络设备接口宕掉问题时,Agent需要主动发送消息通知NMS。假如...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:操作系统——中断机制(trap, interrupts)
举报原因:
原因补充:

(最多只允许输入30个字)