系统机制:

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内核初窥(二)-----系统机制的更多相关文章

  1. 【转】深入Windows内核——C++中的消息机制

    上节讲了消息的相关概念,本文将进一步聊聊C++中的消息机制. 从简单例子探析核心原理 在讲之前,我们先看一个简单例子:创建一个窗口和两个按钮,用来控制窗口的背景颜色.其效果 图1.效果图  Win32 ...

  2. 《天书夜读:从汇编语言到windows内核编程》二 C语言的流程与处理

    1) Debug与Release的区别:前者称调试版,后者称发行版.调试版基本不优化,而发行版会经过编译器的极致优化,往往与优化前的高级语言执行流程会大相径庭,但是实现的功能是等价的. 2) 如下fo ...

  3. Windows内核读书笔记——Windows异常分发处理机制

    本篇读书笔记主要参考自<深入解析Windows操作系统>和<软件调试>这两本书. IDT是处理异常,实现操作系统与CPU的交互的关口. 系统在初始化阶段会去填写这个结构. ID ...

  4. Windows内核开发-6-内核机制 Kernel Mechanisms

    Windows内核开发-6-内核机制 Kernel Mechanisms 一部分Windows的内核机制对于驱动开发很有帮助,还有一部分对于内核理解和调试也很有帮助. Interrupt Reques ...

  5. 深入解析Windows操作系统笔记——CH3系统机制

    3.系统机制 微软提供了一些基本组件让内核模式的组件使用: 1.陷阱分发,包括终端,延迟的过程调用(DPC),异步过程调用(APC),异常分发以及系统服务分发 2.执行体对象管理器 3.同步,包括自旋 ...

  6. 【windows 操作系统】Windows系统机制之对象管理器

    转载自 Windows系统机制之对象管理器 设计的几个目的: 提供一种公共统一的机制来使用系统资源 将对象保护隔离到OS中的一个地方,从而确保统一的一致的对象访问策略 提供一种机制来管理进程对对象的使 ...

  7. C++拾遗(二)——初窥标准库类型

    本篇博文的开始,先介绍一道书上看到的智力题:有20瓶药丸,其中19瓶装有1克/粒的药丸,余下一瓶装有1.1克/粒的药丸.有一台称重精准的天平,只是用一次天平的情况下如何找出比较重的那瓶药丸? 好了,直 ...

  8. 初窥软件工程 2020BUAA软件工程$\cdot$个人博客作业

    初窥软件工程 2020BUAA软件工程\(\cdot\)个人博客作业 目录 初窥软件工程 2020BUAA软件工程$\cdot$个人博客作业 一.作业要求简介 二.正文 (一) 快速看完整部教材,列出 ...

  9. Windows内核

    每天我们都在使用Windows系统学习.编程.听音乐.玩游戏,Windows的操作想来是非常熟练了,但是你又对Windows究竟了解多少呢?本系列的目的,就是让你对Windows系统有个更直观.更清楚 ...

随机推荐

  1. 3141: [Hnoi2013]旅行 - BZOJ

    Description Input 第一行为两个空格隔开的正整数n, m,表示旅行的城市数与旅行所花的月数.接下来n行,其中第 i行包含两个空格隔开的整数Ai和Bi,Ai表示他第i个去的城市编号.Bi ...

  2. [转载]Dotfuscator Professional Edition 4.9.7500.9484 混淆工具破解版+使用教程

    如有转载,请注明出处: http://www.cnblogs.com/flydoos/archive/2012/01/26/2329536.html Dotfuscator Professional ...

  3. hdu 3859 Inverting Cups

    题意是给出A个杯子,一开始都朝上,每次可以翻B个杯子,问最少需要翻转多少次可以让所有杯子都朝下. 分类讨论: 首先对于A%B==0一类情况,直接输出. 对于A>=3B,让A减到[2B,3B)区间 ...

  4. POJ 2778 DNA sequence

    QAQ 做完禁忌 又做过文本生成器 这道题就是个水题啦 首先转移方程还是文本生成器的转移方程 但是注意到L很大,但是节点数很小 转移都是固定的,所以我们可以用AC自动机来构造转移矩阵 之后进行矩阵乘法 ...

  5. Android:控件ProgressBar进度条

    各种进度条属于 ProgressBar的子类 设置style: 环形进度条   style="?android:attr/progressBarStyleLarge" 横向进度条, ...

  6. 关于Apache Struts 2 S2-032高危漏洞的一些确认

    2016年4月21日Struts2官方发布两个CVE,其中CVE-2016-3081(S2-032)官方评级为高. 主要原因为在用户开启动态方法调用的情况下,会被攻击者实现远程代码执行攻击. 具体的漏 ...

  7. hdr_beg(host) hdr_reg(host) hdr_dom(host)

    case 1 测试hdr_beg(host) 的情况 acl zjtest7_com hdr_beg(host) -i zjtest7.com use_backend zjtest7_com if z ...

  8. 安装win7 32位系统出现的问题解决办法

    计算机意外地重新启动或遇到错误.Windows 安装无法继续.若要安装Windows,请单击“确定”重新启动计算机,然后重新启动安装”. http://www.baidusoso.net/      ...

  9. chrome渲染hover状态tranform相邻元素抖动bug

    最近同事在使用 css3 的 transition + tranform 的时候影响了相邻的元素出现bug.或者说相邻的元素出现抖动bug. 然而把 hover 状态的 tranform 属性删了后, ...

  10. poj 1039 Pipe(叉乘。。。)

    题目:http://poj.org/problem?id=1039 题意:有一宽度为1的折线管道,上面顶点为(xi,yi),所对应的下面顶点为(xi,yi-1),假设管道都是不透明的,不反射的,光线从 ...