注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

写着玩

Bob

 
 
 

日志

 
 
 
 

陷阱调度--1  

2009-07-26 23:52:28|  分类: Win32 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

http://hi.baidu.com/l_wait/blog/item/1f7a003045179b9da9018e1e.html

陷阱调度

    中断和异常是指使处理器转而执行正常控制流以外代码的操作系统条件。软件或硬件均可检测到它们。陷阱是一种捕获执行线程的处理器机制,当有异常或中断发生,就将控制转到系统的一个指定位置。Windows将控制转到陷阱处理程序(trap handler),某个函数会被指定给特定的中断或异常。

    内核以以下方法辨别中断和异常。中断是一个异步事件(会在任何时间发生的事件),它与处理器正在做的事无关。中断主要由I/O设备、时钟、或者计时器产生,可以被启用或禁用。与之相对, 异常是一个同步的情况,它是由于处理特定指令而造成的。当再次用相同的数据,在相同条件下运行某程序会再次发生异常。异常可能源于非法的内存访问,某个除错器命令,或者除0错误。内核也将系统服务叫做异常(从技术上说它们是系统陷阱)。

    软件和硬件均可制造异常及中断。例如,硬件故障可能导致一个总线错误异常,软件Bug可能引起一个除0异常。同样的,I/O设备可能产生一个中断,或者内核本身就会触发一个软件中断(像APC或DPC)。

    当有一个硬件异常或中断发生,处理器会在内核堆栈中存储被中断线程的必要的机器状态,使得控制流可以再回到该点继续执行。如果线程是在用户模式下执行,Windows会切换到线程的内核模式堆栈。然后Windows会在内核堆栈中生成一个被中断线程的陷阱帧(trap frame),其中存储该线程的执行状态。该陷阱帧是线程上下文的子集,你可以通过在内核除错器(kernel debugger)中输入dt nt!_ktrap_frame 来查看其定义。内核处理软件中断,以及部分硬件中断,在某线程调用与软件中断相关的内核函数时使之同步。

    多数情况下,内核会加载前期陷阱处理程序,在控制转移到其他函数之前或之后,完成常规陷阱处理任务。 例如,如果发生了设备中断,内核硬件中断陷阱处理程序会将控制转移到中断服务例程(interrupt service routine ,ISR),此为提供给中断设备的设备驱动。如果调用了系统服务,系统服务陷阱处理程序会将控制转移到执行程序中指定的系统服务函数。内核也会为那些计划外的以及不被处理的陷阱安排陷阱处理程序。这些陷阱处理程序一般执行系统函数KeBugCheckEx,该函数在内核检测到可疑或者错误的行为时停止计算机,不然可能导致数据错误。

  评论这张
 
阅读(550)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017