windows内核初窥(二)-----系统机制

翻译 2006年06月14日 09:48:00

 

系统机制:

 windows2000为执行体、内核、设备驱动程序等核心态部分提供了一些基础机制。先让我们看看都有哪些:

    (1)陷阱调度:包括中断、延迟过程调用(DPC)、异步过程调用(APC)、异常处理、系统服务调度。

    (2)执行体对象管理

    (3)同步机制:自旋锁、内核调度对象以及等待是如何实现的

    (4)系统线程

    (5)多种系统机制如windows2000全局标志

    (6)本地过程调用

下面我们就来逐个分析:

 

陷阱调度

 

中断和异常的实质是使CPU不按照正常的步骤来工作,硬件和软件都能够察觉到它们。陷阱是当异常或者中断发生时能够保存当前线程状态并转向相应处理的一种系统机制。在windows2000中,处理器将控制交给陷阱处理程序--一些专门来处理中断、异常的程序。下图给出了一些激活陷阱处理程序的示例:

 

中断处理过程

陷阱处理程序

请求系统服务

中断处理过程

软、硬件异常

异常调度程序

异常

处理

虚拟地址异常

虚拟地址管理

 

 

 

内核通过以下方式来分辨中断和异常:中断是一个异步事件(可以在任何时间产生),不管处理器在执行什么程序。中断典型地由I/O设备、时钟、定时器产生,必要时我们可以屏蔽中断。而异常是一个同步事件,它是由正在执行的特定代码产生的,重新执行相同的代码会重复产生特定的异常。比如访问非法内存、除数为0等。系统把系统服务也作为异常来处理。

无论是硬件或者是软件都能产生中断和异常,比如说,一个总线异常是由硬件引起的,而除数为0显然是软件中的BUG导致的;同样,I/O设备可以产生中断,内核本身也能产生软中断(APC,DPC)。

当一个硬件中断或者异常发生时,处理器收集足够的状态信息以保证当异常或中断处理完毕后可以正确返回到当前执行点。处理器通过在当前线程的内核栈区建立一个陷阱框架(用来保存现场)来实现。陷阱框架通常时线程整个上下文环境的一部分。而把软中断当成硬中断的一部分来处理,或者是调用内核中相应的处理程序。

在大多数情况下,当有陷阱发生时内核负责寻找相应的处理程序并且在处理程序返回时负责恢复中断线程的继续执行。

中断调度

硬件中断是由I/O设备产生以求获得CPU服务的,这种中断机制使得CPU的利用率提高很多。软件也能够产生中断,比如说,内核可以发起一个中断来进行线程调度。内核在必要的时候可以关中断,这样CPU就可以屏蔽掉任何中断-----这在有些时候是必要的,比如线程对于临界区的访问,异常处理等。

 硬件中断处理

 在X86家族里,外部中断在中断控制器里进行排队,控制器依次中断CPU的运行。当CPU被中断时,它要求中断控制器提交中断请求,中断控制器将中断请求翻译为中断请求号,并且把这个号码当成索引来查询中断调度表(IDT),并且将控制权交给相应的中断处理程序。中断调度表(IDT)在系统启动的时候就已经初始化了,里面包括中断号和相应处理程序的对应。

 中断请求登等级IRQL:

 中断是有等级的,这对于软、硬中断都是适用。内核将中断为0---31共32个等级,等级高的权限高。内核负责将软中断对应到相应的等级上,HAL负责将硬件中断对应到相应的等级上。如下图所示:

中断处理是按等级来运行的,并且是抢占式的,高等级的可以阻塞低等级的运行。当运行中断处理程序时,CPU把自己的IRQL设置为要执行的中断的IRQL,然后运行.

那么系统是如何把硬件中断映射到相应的IRQL的呢?答案是HAL,在WINDOWS2000中,总线驱动能够得知所有连接到总线上的设备,以及每个设备能发出何种中断,紧接着总线驱动把所得到的情况汇报给PNP(即插即用管理器),它做出抉择。最后调用HAL函数HalpGetSystemInterruptVector来实现映射。

 

 

windows内核初窥(二)-----系统机制

系统机制:windows2000为执行体、内核、设备驱动程序等核心态部分提供了一些基础机制。先让我们看看都有哪些:    (1)陷阱调度:包括中断、延迟过程调用(DPC)、异步过程调用(APC)、异常...
  • haoxing168
  • haoxing168
  • 2009年08月11日 12:27
  • 600

初窥Windows内核——学习Windows Research Kernel手记(一)

 小序 当初只是抱着试一试的想法去找老师的,结果就这么开始了。从一开始拿到Windows Research Kernel(以后简称WRK)我就知道这些材料,包括源码、文档、实例范例等等,都是十分难得的...
  • SaiCT
  • SaiCT
  • 2008年12月19日 11:59
  • 5676

Windows内核初窥

每天我们都在使用Windows系统学习、编程、听音乐、玩游戏,Windows的操作想来是很熟练了,可是你又对Windows到底了解多少呢?本系列的目的,就是让你对Windows系统有个更直观、更清楚、...
  • pizi0475
  • pizi0475
  • 2013年12月21日 08:28
  • 787

初窥Windows内核——学习Windows Research Kernel手记(二)

STEP 1——编写一个最简单的系统调用最简单的系统调用当然是调了它之后什么都不干了,但是我还是决定让它干一件很是经典的事情,想调试器输出一条语句“Hello World!”。几乎每种编程技术的开始都...
  • saict
  • saict
  • 2008年12月19日 13:18
  • 2838

windows内核初窥(一)------体系结构

windows是一个非常优秀的OS,从今天开始,我要和大家共同分享windows给我们带来的快乐!本人只所以将自己的学习笔记与大家分享,一是让自己更深入的理解windows,再就是有什么疏漏之处,望大...
  • xuanner
  • xuanner
  • 2007年09月16日 15:34
  • 844

doT.js初窥二

{{ if(it.success) { }} results {{ for(var i = 0, len = it.data.length; i < len; i++) {...
  • Geek_ymv
  • Geek_ymv
  • 2015年09月30日 16:05
  • 295

初窥nodejs(二)

在上一篇博客里我已经介绍了nodejs的三个模块:服务器模块,文件模块,url模块。同时也结合get请求做了一个小项目。在这篇博客中,我会介绍querystring模块和post请求,并改进这个项目。...
  • Nate__River
  • Nate__River
  • 2017年09月15日 17:25
  • 146

初窥内存管理(二)

发现两篇内存池的博文,博文地址如下,写的很好,能避免内存碎片和内存泄露问题,比我这个玩具代码要好很多,大家可以看看: http://www.cnblogs.com/bangerlee/archive...
  • crzy_sparrow
  • crzy_sparrow
  • 2012年04月09日 11:36
  • 6985

Windows分页管理机制的学习(一)理论部分

PAE模式 什么是PAE模式:PAE,物理地址扩展,是基于x86 的服务器的一种功能,它使运行 Windows Server 2003, Enterprise Edition 和 Windows S...
  • zfdyq0
  • zfdyq0
  • 2014年11月08日 20:55
  • 1186

Windows内核研究总结

Windows 的体系结构 分析环境reactos0.3.1 ,i386体系] 了解了windows的体系结构才知道reactos到底要干什么,以及如何干,因为reactos的目标是兼容win...
  • bcbobo21cn
  • bcbobo21cn
  • 2016年02月05日 11:07
  • 3352
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:windows内核初窥(二)-----系统机制
举报原因:
原因补充:

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