操作系统——中断机制(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的基址.


版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/yyf_it/article/details/52059257

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

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

操作系统之中断(四)

上一篇文章中简单的提到了IDT是记录了终端号和中断函数之间的关系,实际上在保护模式下,IDT在中断中的地位举足轻重。一、实模式切换到保护模式IDT是在保护模式中出现的,计算机启动后运行在实模式下,所以...
  • ice__snow
  • ice__snow
  • 2016-02-16 13:09:36
  • 955

操作系统中断

1、中断的类型。 从中断事件的性质出发,中断可以分为两大类: 强迫性中断事件:包括硬件故障中断,程序性中断,外部中断和输入输出中断等。 自愿性中断事件:是由正在运行的进程执行一条访管指令用以请求...
  • haoyunsheng_1201
  • haoyunsheng_1201
  • 2012-05-27 23:06:32
  • 3128

一个操作系统的实现(10)-中断和异常的补充说明

这节对中断和异常机制做一些额外的补充说明。还介绍了保护模式下的I/O操作。最后总结了一下前面学习的保护模式。 特权级变换规则 上节的代码始终运行在ring0层,没有涉及特权级的变换。这...
  • u010197364
  • u010197364
  • 2016-06-10 12:29:35
  • 1404

【操作系统】系统中断技术

目录一、什么是CPU中断?二、CPU中断的作用三、CPU中断的类型四、CPU中断的过程五、多核CPU对中断的处理一、什么是CPU中断?  使用计算机的过程中,经常会遇到这么一种情景:  1. 你正在看...
  • HaoDaWang
  • HaoDaWang
  • 2017-11-21 20:04:28
  • 449

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

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

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

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

操作系统的中断机制

CPU进行进程之间的切换以及可以处理多个任务都是通过中断请求来实现的。在计算机系统中每个硬件组建都有各自唯一的一个中断请求装置,例如键盘键盘的中断装置,鼠标有鼠标的中断装置,那键盘来说,当按下某个按键...
  • liliangbing123
  • liliangbing123
  • 2014-01-19 03:19:18
  • 2169

浅谈操作系统中断和异常

在操作系统中,引入核心态和用户态这两种工作状态后,需要考虑这两种状态之间如何切换。 操作系统内核工作在核心态,而用户程序工作在用户态。 操作系统不允许用户程序实现核心态的功能,而它们又必须使用这些...
  • zhouziyu2011
  • zhouziyu2011
  • 2017-04-09 15:30:23
  • 410

操作系统—陷阱、中断、异常

在操作系统中,陷阱,中断和异常是常见的术语,它们贯穿操作系统学习的始终,这篇文章主要区分它们之间的不同。 陷阱 计算机有两种运行模式:用户态, 内核态。 其中操作系统运行在内核态,在内核态中,操作...
  • qq_30866297
  • qq_30866297
  • 2016-07-27 16:20:17
  • 868
收藏助手
不良信息举报
您举报文章:操作系统——中断机制(trap, interrupts)
举报原因:
原因补充:

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