码迷,mamicode.com
首页 > 其他好文 > 详细

中断机制

时间:2015-02-09 16:02:01      阅读:220      评论:0      收藏:0      [点我收藏+]

标签:

    中断分为非屏蔽中断和屏蔽中断。异常又分为故障和陷阱。

    异常的向量和非屏蔽中断的向量和是固定的,而屏蔽中断的向量可以通过对中断控制器的编程来改变。Linux对256个向量的分配如下:

    1、从0~31的向量对应于异常和非屏蔽中断。

    2、从32~47的向量(即由I/O设备引起的中断)分配给屏蔽中断。

    3、剩余的从48~255的向量用来标识软中断。Linux只用了其中的一个(即128或者0x80向量)用来实现系统调用。当用户态下的进程执行一条int 0x80汇编指令时,CPU就切换到内核态,并开始执行system_call( )内核函数。


    异常又分为故障和陷阱,故障和陷阱的区别是发生故障,执行完故障处理函数,程序会继续执行发生故障时的指令。但是发生陷阱,程序会执行发生陷阱的下一条指令,这点来中断类似。

    IF=0,只表示禁止屏蔽中断,并不禁止非屏蔽中断,异常和软中断。可以理解软中断也是异常的一种。


    中断门:其类型码为110,中断门包含了一个中断包含了一个中断或者异常处理程序所在段的选择符和段内偏移量。当控制权通过中断门进入中断处理程序时,处理器清IF标志,即关中断,以避免中断嵌套。中断门中的DPL为0。因此,用户态的进程不能访问Intel的中断门。所有的中断处理程序都由中断门激活,并全部限制在内核态。

    陷阱门:其类型码是111,与中断门类似,其唯一的区别是,控制权通过陷阱门进入处理程序时维持IF标志位不变,也就是说,不关中断。

    系统门:这是Linux内核特别设置的,用来让用户态的进程访问Intel的陷阱门,因此,门描述符的DPL为3。通过系统门来激活4个Linux异常处理函数,它们的向量是3,4,5及128,也就是说,在用户态下,可以使用int 3、into、bound及int 0x80四条汇编指令。


    通过中断门执行的中断处理函数,由于已经关中断,不会再执行屏蔽中断,也不会再执行异常,因为,

    1、在内核态能触发的唯一异常就是缺页异常,但中断处理程序从不执行可以导致缺页的操作。

    2、大部分异常发生在用户态,中断处理程序处于内核态。

   

    通过陷阱门执行的中断处理函数,由于未关中断,可能执行屏蔽中断。

中断机制

标签:

原文地址:http://blog.csdn.net/jltxgcy/article/details/43670419

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!