windows&linux中断、异常处理机制分析

windows&linux中断、异常处理机制分析

ID:12612959

大小:132.50 KB

页数:9页

时间:2018-07-18

windows&linux中断、异常处理机制分析_第1页
windows&linux中断、异常处理机制分析_第2页
windows&linux中断、异常处理机制分析_第3页
windows&linux中断、异常处理机制分析_第4页
windows&linux中断、异常处理机制分析_第5页
资源描述:

《windows&linux中断、异常处理机制分析》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库

1、一、引言处理器的速度跟外围硬件设备的速度往往不在一个数量级上,因此,如果内核采取让处理器向硬件发出一个请求,然后专门等待回应的办法,显然差强人意。既然硬件的响应这么慢,那么内核就应该在此期间处理其他事务,等到硬件真正完成了请求的操作之后,再回过头来对它进行处理。想要实现这种功能,轮询(polling)可能会是一种解决办法。可以让内核定期对设备的状态进行查询,然后做出相应的处理。不过这种方法很可能会让内核做不少无用功,因为无论硬件设备是正在忙碌着完成任务还是已经大功告成,轮询总会周期性地重复执行。

2、更好的办法是由我们来提供一种机制,让硬件在需要的时候再向内核发出信号(变内核主动为硬件主动),这就是中断机制。众所周知,在C++中有着较为完善的异常处理机制,同样在C语言中也有很不错的异常处理机制来支持,另外在其它许多现代编程语言中,也都有各自的异常处理编程机制,如Ada语言等。但我们更应该知道这些编程语言所提供的异常处理机制的实现,都是建立在操作系统中所提供的异常处理机制之上,如Windows平台上的VC编译器所实现的C++异常处理模型,它就是建立在SEH机制之上的。如果没有采用这种方式,比如

3、Linux操作系统上的gcc就没有采用到操作系统中所提供的异常处理机制,这样就会有一个很大的缺点,那就是对于应用程序的开发者而言,它不能够很好在自己的应用程序中,来有效控制操作系统中所出现的一些意外的系统异常,例如程序执行过程中可能出现的段错误,被零除等计算异常,以及其它许多不同类型的系统异常等。所以Linux操作系统上的gcc编译的程序中,它只能捕获程序中,曾经被自己显式地抛出来的异常,而对于系统异常,catchblock则毫无办法。因此,操作系统平台中所提供的中断、异常处理机制是非常有必要的

4、。它除了能够帮助开发人员发现和解决软件中的错误外,还被广泛应用于软件保护技术、软件漏洞利用等方面。因此,深入研究中断、异常处理机制的原理和实现以扩展其应用的范围是有必要的。二、中断处理方式Ⅰ、WINDOWS系统的中断处理方式Windows内核对于中断使用了陷阱派发机制,它使用中断陷阱处理器来响应设备的中断,中断陷阱处理器或者将控制权给负责处理中断的外部例程(中断服务程序,ISR),或者传递给一个响应该中断的内部内核例程。设备驱动程序提供了ISR来处理设备中断,内核为其他类型的中断提供了ISR。W

5、indows的中断主要有硬件中断和软件中断,通过Windows核心我们可以禁止软件中断和硬件中断。软件中断主要引发对线程的调度以及以异步方式打断一个线程执行的机制。而硬件中断主要是为了实现处理器和设备并行工作。对于硬件中断,Windows将硬件中断转化为能够触发执行的驻留在不同虚拟机中的ISR(中断服务程序)事件,这是一个较好的中断处理方法。下面我们来讨论一下Windows系统的硬件终端处理机制。在Windows系统下,处理器可以在不同的状态(V86、实模式和保护模式)下运行。当DOS运行时,则

6、处理器运行V86模式。当Windows执行时或当DOSVM已经切换进保护模式时,处理器则运行Ring3保护模式。当VMM(虚拟机管理器)或VXD(虚拟设备驱动程序)执行时,处理器则运行在Ring0保护模式。在Windows系统环境中,Windows将所有的IDT入口指向VMM中的一个函数。VMM会判断出来自IDT入口项的调用是作为异常被调用还是作为中断被调用。VMM本身负责处理异常而将所有硬件中断交给一个名为VPICD(虚拟可编程中断控制器设备)的VXD。如果某个VXD已经为某个硬件中断注册了中

7、断处理函数,那么VPICD就将中断传递给该VXD。如果没有,VPICD将把某个中断传递给某个VM,这一过程被称作“中断反射”。VXD通过调用VPICD的VPICD_Viutualize_IRQL服务函数为特定的硬件中断注册并将回调函数传递给VPICD。一旦VXD已经为中断注册,它将作为一个真正的中断处理器,为中断设备进行中断服务,同时VXD可能使用另一个VPICD服务函数VPICD_Set_Int_Request来把中断映射到VM,让VM的中断处理函数来提供服务。从IDT到VXD中断处理函数的途

8、径在使用中断服务时,我们也要对下列情况进行注意。1、中断响应时间:为了实现实时操作,一般要求中断响应时间尽可能的短。由于硬件中断的响应过程比较复杂,中断响应时间通常在1ms以上。为了使中断响应时间最短,硬件中断的处理应在VXD中进行。但即使在VXD中进行,VXD也不能保证对硬件中断的实时响应。原因在于ring转换以及VMM和VPICD之间存在多个层次的联系。2、中断结束处理(EOI):在编写中断处理函数时,常见的错误是忘记EOI,导致一个硬件中断仅被调用一次。虽然设备本身能产生更多的中断,但是P

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。