您好,欢迎来到爱问旅游网。
搜索
您的当前位置:首页Windows NT架构内核分析

Windows NT架构内核分析

来源:爱问旅游网
维普资讯 http://www.cqvip.com

第22卷 第5期 重庆工学院学报(自然科学) 2008年5月 Vo1.22 No.5 Journal of Chongqing Institute of Technology(Natural Science) May 2008 Windows NT架构内核分析 李 双 (重庆工学院电子与自动化学院,重庆400050) Windows NT Architecture Kernel Analysis LI Shuang (School of Electronic hfformation and Automation,Chongqing Insittute ofTechnology,Chongqing 400050,China) Abstract:This paper describes the history of Microsoft Windows operation system,and the new features for 32bit hardware platform.Besides,this paper analyzes kernel architceture of Microsoft Windows NT/2000/ XP operation system,and describes OS kernel nmning level,running rule and nmning flow.Finally,it explmns with an example the interruption—handling process in Windows NT architceture. Key words:Windows NT;kernel;architecture;interrupt 在Windows 3、0的开始过程中同步开发了全新的 1 Windows NT的历史 32位操作系统——MicIDs0fI Window NT.它的用户 界面和应用程序接口与Windows 3.0相同,但内核 1990年,Microsoft Windows 3.0的出现使个人 却有了天翻地覆的变化、与CPU紧密配合的32位 计算机真正进入了图形时代.多媒体、CDROM和 内核代码可以将新CPU的性能发挥到极致,同时 GUI(图形用户界面)开始成为了新一代操作系统 安全性和稳定性也有了飞跃的变化. 的标准.不过Windows 3.0/3.1从本质上来说不能 算是一个的操作系统,而只能算是依附于 2全新的32位内核 DOS之上的一个外壳(SHELL),与随后的继承者 Windows 95/98都是使用老旧的16位内核.为了能 相对于80286CPU,80386增加了32位保护模 够发挥新式32位CPU一80386的全部性能,微软 式和内存分页支持,使得这款CPU能够实现提供 *收稿日期:2008—03—06 作者简介:李双(1978一),女,重庆永川人,实验师,主要从事电子技术实验教学与研究 维普资讯 http://www.cqvip.com 132 重庆工学院学报 了完整的保护模式支持.以此CPU为基础开发的 Windows NT内核充分利用了保护模式的安全性和 32位CPU的扩展性.为了兼容DEC的AlphaCPU, 定线程执行时间作出响应.如果硬件平台支持2 个时钟,内核就需添加另一时钟中断级别来度量 性能.HAL提供了一系列的中断级别供中断驱动 的设备使用,具体数目随处理器和系统设置不同 而不同.另一组则关联到软件中断.内核使用这些 Windows NT使用了2个特权级(IA32CPU支持4个 特权级):特权级0可以访问所有系统资源(内存/ 中断/端口),用于OS代码和驱动程序;特权级3 对所有资源的访问都有严格的.所有的操作 都必须经过OS的许可才能进行.如此一来,就可 以保证当某个用户程序崩溃或非法操作的时候不 至于影响其他用户程序和OS. 为了提高系统的工作效率,Windows NT把内 核层又划分成了32个优先级.微软公司将其命名 为软件中断请求级别(IRQL).中断请求级别在内 核中表示为0~31的数字,数字越大,优先级别就 越高.HAL会将硬件中断映射到IRQL上.图1给 出了IA32体系中定义的IRQL. 3l 30 掉电 29 处理器间中断 28 时钟 27 配置文件 ] 硬件中断 26 设备N lI 3 设备l —l DPC/ ̄ 2 DPC/d;spatch 线程优先级o APC 3-软件中断 无源级 图1 IA32体系中定义的IRQL 中断和内核代码会按照优先级顺序获得服务. 优先级高的中断/代码先于优先级低的中断获得服 务,此时系统将屏蔽较低优先级的中断请求.当优 先级高的中断出现时,处理器保存被中断的纯种的 状态,并调用与中断相关的陷阱调度程序.陷阱调 度程序提升mQL,并调用中断服务例程.当服务例 程执行完毕后,中断调度程序将处理器的IRQL恢 复到中断发生前的级别,然后加载保存的机器状 态,中断的线程继续从其停止处执行.内核降低 IRQL后,被屏蔽的低优先级中断才可能被触发. 这32个IRQL被分为2级,其中一组关联到硬 件中断,比如:处理器间中断(IPI—IRQL29)时,请 求另一处理器动作,如调度执行某一特定线程或 更新其变换监视缓冲区高速缓存,系统时钟以固 定时间间隔产生中断,内核则通过更新时钟和测 中断来启动线程调度,并异步中断线程的执行. 3映射硬件中断到IRQL 这些IRQL级别与IA32架构的中断请求 (IRQ)不同,IA32架构没有在硬件中实现IRQL概 念.从IRQ到IRQL的映射是由Windows NT的HAL 实现的.总线驱动程序在枚举硬件设备的时候会 为每个设备配置相应的中断,然后再按照分配规 则把中断映射到IRQL(对于单处理器和多处理器, 分配规则是不同的). 4映射软件中断到IRQL DPC/Dispatch级别以下的IRQL是映射到软件 中断.IRQL0一无源级别,它实际上不是真正的中 断级别,而是正常线程运行允许所有中断发生的 设置.IRQL1一APC级别和IRQL2一DPC级别是由 内核和设备驱动程序产生的软件中断使用. 在DPC/Dispatch级别或之上级别运行的代码 有一个重要就是它不能在对象上等待,如果 它在对象上等待就使得调度程序需要选择运行另 一线程.另一条是在这些级别上只能访问非 分页内存.这一规则是第1条的延伸.因为试 图访问分页内存可能会引起页面异常(当该页面 已经被转储到外部存储器上时).当出现页面异常 时,内存管理器会初始化磁盘操作,然后需要等待 文件系统驱动程序从磁盘将该页面读入内存.该 等待接送请求调度程序执行环境切换(如果此时 没有用户线程运行就可能切换到空闲线程),因 此,违反该规则就无法调用调度程序(因为在访问 磁盘时,IRQL处于DPC/Dispatch或者更高的级 别).如果违反以上2条规则的任意一条,系 统将出现崩溃,并产生IRQL—NOT—LESS—OR—E. QUAL崩溃代码,具体细节请参考Micorosoft关于 维普资讯 http://www.cqvip.com 李双:Windows NT架构内核分析 133 系统崩溃的帮助信息. 下面就以Windows 2000DDK自带的FDC驱动 为例分析Windows NT架构下的IRQL的应用. 5整体描述 综合上面的描述,可以得出在Windows NT架 在驱动程序被装人内存之后,首先初始化 DPC以备使用. 构下的内核运行框图,如图2所示. 图2正常情况下的线程调度 当一个硬件中断产生时,对象管理器中断当 前运行的线程并保护当前运行环境,将IRQL提高 到该中断注册的IRQL级别,然后将控制权转交给 设备注册的ISR(Interrupt Service Routine).ISR对设 备的状态/数据/命令作出相应的处理,然后返回 对象管理器.对象管理器再将IRQL恢复到被中断 时的级别,然后恢复被中断的线程的运行.当CPU 运行于一个较高的IRQL级别时,低于此级别的中 断请求将被屏蔽,如果CPU长时间运行高级别的 IRQL上,则可能会影响低级中断的处理,因此,在 ISR中应该尽可能只做最必须的动作,然后为未完 成的处理工作建立一个DPC例程或者建立一个线 程来完成,这样可以减少CPU处于高IRQL级别的 时间,确保系统能够响应尽可能多的中断.这样同 时也有效地提高了系统工作的效率.而较关键的 是,时间关联性高的代码在短时间内可不被打断 地运行,大量普通代码则平衡CPU的负荷,以尽可 能有效利用CPU.此时的内核运行流程如图3所 示. 图3有中断发生时的调度 IoInitializeDpcRequest(fdoExtension一>Self, FdcDe ̄rredProcedure); 然后继续其他部分的初始化,在枚举FDC控 制器设备之后,将中断服务例程挂接到相对应的 中断级别上,并为之指定相应的IRQL级别. ntStatus=IoConnectInterrupt(&FdoExtension一 >InterruptObject, FdcInterruptService, FdoExtension, NULL, FdoExtension一>ControllerVector. FdoExtension一>ControllerIrq1. FdoExtension一>ControllerIrq1. FdoExtension~>InterruptMode. FdoExtension一>SharableVector. FdoExtension一>ProcessorMask. FdoExtension~>SaveFloatState); 驱动程序在接受到操作之后,向FDC发出命 令,并为之设置相应的参数. FcIssueCommand(…) { ntStatus:FcStartCommand(FdoExtension, FifoInBuffer, FifoOutBuffer, IoHandle, IoOffset, TransferBytes, TRUE); 然后将挂起当前线程等待中断事件的完成 ntStatus:KeWaitForSingleObject( 维普资讯 http://www.cqvip.com l34 重庆工学院学报 &FdoExtension一>InterruptEvent, Executive, KemelMode, FALSE, &FdoExtension一>InterruptDelay);注l FDC接受命令之后对软盘进行操作,操作完 毕后并生中断,然后内核就会调用驱动程序关连 到该中断的服务例程FdcInterruptService().在中断 服务例程中,驱动程序检查FDC的状态,如果操作 完成并且没有错误,则向对象管理器申请调度 DPC进行后续操作. IoRequestDpc(currentDeviceObject, currentDeviceObject一>CurrentIrp. (PVOID)NUIJLJ); 然后清除FDC状态后结束中断服务例程.由 于DPC例程在软中断中是最高IRQL级别,因此在 中断完成IRQL级别降低后,系统会立刻调度DPC 例程.在DPC例程中,完成FDC命令的后续操作. 比如将读入的数据拷贝到调用者指定的缓冲区. FdcDeferredProcedure(…) { ntStatus=FcFinishCommand( fdoExtension, issueCommandParms一>FifoInBuffer, issueCommandParms一>FifoOutBuffer. issueCommandParms一>IoHandle. issueCommandParms一>IoOffset, issueCommandParms一>TransferBytes, FALsE): KeSetEvent(&fdoExtension一>InterruptEvent, (KPRIORITY)0,FALSE); } 然后置位中断完成事件.然后系统就会恢复 被挂起的线程,向上层完成当前的操作. 以上简要的介绍了在驱动程序中内核架构的 运行流程,作为一个完整的Windows NT架构驱动, 完整的操作远不止以上描述的如此简单,不过那 已经超出本研究的讨论范围. 注意,此时线程是运行在PASSIVE.LEVEL级 别之上,所以允许等待事件,在DPC及以上级别运 行时只能检查事件是否置位,这一规则在本研究 中已经详细说明. 参考文献: [1]SolomonDA,RussinovichM E.Windows 2000内部揭秘 [M].北京:机械工业出版社,2000. [2]Tom Shanley,Don Anderson.PC!系统结构[M].北京: 电子工业出版社。2000. [3]Baker A,Lozano J.Windows 2000设备驱动程序设计 指南[M].北京:机械工业出版社,2001. [4]徐显秋.Windows 20OO和XP系统常用安全策略[J]. 重庆科技学院学报:自然科学版,2005(4):86—87. (责任编辑刘舸) 

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- awee.cn 版权所有 湘ICP备2023022495号-5

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务