1 / 92

深入理解 Windows 2000

深入理解 Windows 2000. 陈香兰 2006 年 9 月. 上次课内容回顾. 第一讲:基本概念 第二讲: Windows 2000 体系结构. 第三讲:系统机制(一). 主要内容. 介绍 executive 、内核以及设备驱动程序等内核组件所依赖的一些低层的基本机制: Trap dispatching 对象管理器 同步机制 系统工作者线程 本机过程调用 LPC 等等. 本讲的内容. 3.1 Trap dispatching. 陷阱调度机制中涉及的内容包括: 中断 异常 系统服务调度. 为什么会有中断?.

joshua
Download Presentation

深入理解 Windows 2000

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 深入理解Windows 2000 陈香兰 2006年9月

  2. 上次课内容回顾 • 第一讲:基本概念 • 第二讲:Windows 2000体系结构

  3. 第三讲:系统机制(一)

  4. 主要内容 • 介绍executive、内核以及设备驱动程序等内核组件所依赖的一些低层的基本机制: • Trap dispatching • 对象管理器 • 同步机制 • 系统工作者线程 • 本机过程调用LPC • 等等 本讲的内容

  5. 3.1 Trap dispatching • 陷阱调度机制中涉及的内容包括: • 中断 • 异常 • 系统服务调度

  6. 为什么会有中断? • 操作系统的一个主要功能就是处理外设的I/O操作 • 处理器速度一般比外设快很多 • 轮询?中断? • 另外,如果处理器执行过程中发现错误,怎么办?

  7. 广义的中断 • 中断会改变处理器执行指令的顺序 • 将处理器转移到正常控制流以外的代码上执行 • 中断通常与CPU芯片内部或外部硬件电路产生的电信号相对应 • 根据信号是异步产生的还是同步产生的,中断(广义)进一步分为: • 中断(狭义)和异常

  8. 中断(狭义) • 中断(狭义)是异步的 • 由硬件随机产生,在程序执行的任何时候可能出现 • 与处理器当前正在执行的内容无关 • 主要是由I/O设备、处理器时钟或定时器引发,处理器可以选择是否响应(某个)中断

  9. 异常 • 异常是同步的 • 在(特殊的或出错的)指令执行时由CPU控制单元产生 • 一般可再现 • 典型的异常如:越界访问、一些调试命令、除0错、缺页等等

  10. “陷阱” • 陷阱是处理器的一种运行机制: • 当中断或异常发生时,处理器从正在执行的线程那里获得控制权,并转去操作系统中固定的执行位置进行(中断/异常)处理 • 在Windows 2000中,处理器将转向陷阱处理程序(trap handler) • 陷阱处理程序与特定的中断/异常相关

  11. 停止,然后继续 • 停止 • 中断/异常产生时,当前执行的线程必须停下来,处理器进行中断/异常处理 • 继续 • 当中断/异常处理完时,原先被中断的线程恢复执行,就像中断/异常没有发生过 • HOW?

  12. 陷阱帧(trap frame) • 处理器必须记录足够的状态以便能够返回被中断的执行点 • 陷阱帧: • 由内核在被中断线程的内核栈中创建 • 保存线程的执行状态 • 通常是线程上下文的一个子集

  13. 前端陷阱处理函数 • 用于完成一般化的陷阱处理任务 • 与陷阱处理函数之间的关系为: Func{ … call xxx … } XXX{ … … … } XXX与特定的 中断/异常有关 前端陷阱处理函数 陷阱处理函数

  14. Windows 2000中的陷阱调度 • interrupt dispatching • exception dispatching • System service dispatching

  15. 一、interrupt dispatching • I/O的控制方式有哪些? • 轮询、中断、DMA • 中断驱动的设备 • 中断驱动的设备允许操作系统通过CPU与I/O操作重叠而最大限度的使用处理器 • 下图显示了一个大概的时序图

  16. CPU与I/O操作的重叠

  17. 上图中: • 线程启动从/到某个设备的I/O传输 • 在I/O传输过程中,处理器执行其他一些有效的工作 • 当设备传输结束,就引发中断 • 典型的中断驱动设备有: • 定点设备、打印机、键盘、磁盘驱动器、网卡

  18. Windows 2000的中断处理 • 要点: • 硬件中断处理 • 中断请求级别 • 软件中断

  19. 1、硬件中断处理 以x86体系为例,中断分为: • 可屏蔽中断(Maskable interrupt) • I/O设备发出的所有中断请求(IRQ)都可以产生可屏蔽中断。 • 可屏蔽中断可以处于两种状态:屏蔽的(masked)和非屏蔽的(unmasked) • 非屏蔽中断(Nonmaskable interrupt) • 只有几个特定的危急事件才引起非屏蔽中断。如硬件故障或是掉电

  20. 可屏蔽中断的产生 • 每个能够发出中断请求的硬件设备控制器都有一条称为IRQ(Interrupt ReQuest)的输出线。 • 所有的IRQ线都与一个中断控制器(例如i8259A)的输入引脚相连 • 中断控制器与CPU的INTR引脚相连 设备 设备 控制器 中断 控制器 CPU INTR IRQ

  21. 中断控制器 • 可编程中断控制器 • PIC,Programmable Interrupt Controlor • 典型的中断控制器 • i8259A • APIC,高级可编程中断控制器

  22. 传统的中断控制器:i8259A • 传统的中断控制器使用两片i8259A以“级联”的方式连接在一起 • 每个芯片可以处理最多8个不同的IRQ线 • 主从两片i8259A的连接: • 从主的IRQ2引脚 • 因此,一共可以处理最多15个不同的IRQ线 OS CPU 8259 M device 8259 S

  23. 中断控制器执行下列动作: 1,监视IRQ线,对引发信号检查 2,如果一个引发信号出现在IRQ线上 a,把此信号转换成对应的中断向量 b,把这个向量存放在中断控制器的一个I/O端口,从而允许CPU通过数据总线读这个向量 c,把引发信号发送到处理器的INTR引脚,即产生一个中断 d,等待,直到CPU应答这个信号;收到应答后,清INTR引脚 3,返回到第一步

  24. IRQ号和中断向量号 • 中断控制器对输入的IRQ线从0开始顺序编号 • IRQ0,IRQ1,… • Intel给中断控制器分配的中断向量号从32开始,上述IRQ线对应的中断向量依次是 • 32+0、32+1、… • 可以对中断控制器编程: • 修改起始中断向量的值,或 • 有选择的屏蔽/激活每条IRQ线 屏蔽≠丢失

  25. 屏蔽的中断不会丢失 • 一旦被激活,中断控制器又会将它们发送到CPU • 有选择的屏蔽/激活IRQ线≠全局屏蔽/激活 • 前者通过对中断控制器编程实现 • 后者通过特定的指令操作CPU中的状态字

  26. I386:开中断和关中断 • CPU可以将屏蔽所有的可屏蔽终端 • Eflags中的IF标志:0=关中断;1=开中断。 • 关中断时,CPU不响应中断控制器发布的任何中断请求 • 操作系统内核中使用cli和sti指令分别清除和设置该标志

  27. 中断描述符表 • IDT(Interrupt Description Table) • 中断描述符表是一个系统表,它与每一个中断或者异常向量相联系 • 每个向量在表中有相应的中断或者异常处理程序的入口地址。

  28. Windows 2000的硬件中断处理 • Windows 2000在系统启动时填写IDT表 • 当中断发生时,处理器将会根据IDT将控制转移给适当的中断/异常处理例程

  29. APIC高级可编程中断控制器 • PIC,可编程中断控制器 • 前面介绍过的i8259A,用于单处理器系统 • APIC • 用于多处理器系统 • 现在多数计算机都含有APIC • 提供PIC兼容

  30. 2、中断请求级别(IRQL) • 尽管中断控制器提供中断优先级方案,但是Windows 2000有其自身的(软件级别的)中断优先方案 • 中断请求级别IRQL(0~31) • 数字越大,优先级越高 • 内核为软件中断定义了标准的IRQL集,而HAL将硬件中断号映射成IRQL

  31. X86体系中定义的IRQL 无源

  32. IRQL处理机制 • 中断按照IRQL级别获得服务 • 高优先级的中断优先获得服务 • 高优先级的中断请求发生时,处理器保存被中断的线程的状态,并调用相关的trap dispatcher • 1,提升IRQL • 2,调用ISR • 3,降低IRQL • 4,恢复被中断的线程

  33. 中断的屏蔽 • 当IRQL处于较高的级别时,低优先级的中断请求将会被阻塞 • 当IRQL降低后,被屏蔽的低优先级中断可能触发,此时内核重复上述处理过程

  34. IRQL操作的限制 • 由于改变处理器的IRQL对系统操作影响较大,只能在内核态更改IRQL • 用户态代码运行时,必然处于无源级别 • 只有内核态代码执行时,IRQL会处于较高级别 • 为保证设备驱动程序能够及时对中断进行响应,系统的所有组件都试图将IRQL保持在无源级别

  35. 如何将IRQL分配给设备中断? • 在Windows 2000中 • 总线设备驱动程序,确定存在的设备及相应的中断 • 即插即用管理器,检查并最终决定每个设备的中断,然后 • 调用HAL中的HalpGetSystemInterruptVector把中断映射到IRQL

  36. 以单处理机系统为例 • HAL进行如下转换: • 27-中断向量=IRQL • 若一个设备的中断向量为5,那么IRQL为22,即此中断的ISR在IRQL为22时执行

  37. 预定义的IRQL • IRQL=31:只有当内核在KeBugCheckEx中终止系统并屏蔽所有中断时,才使用 • IRQL=30:电源失败级别,从未使用过 • IRQL=29:处理器间中断

  38. IRQL=28:系统时钟中断,tick来自于此 • IRQL=27:profiling,内核抽样性能测试机制 • IRQL=26~3:设备中断

  39. IRQL=2:DPC中断 • IRQL=1:APC中断 • IRQL=0:无中断源,线程正常运行 软件中断

  40. 中断对象 • Windows 2000为中断处理提供了一种可移植的机制:中断对象 • 中断对象允许设备驱动程序为设备注册ISR • 中断对象中包含一切内核用来将设备ISR与中断级联系在一起的信息 • ISR地址、设备中断的IRQL、内核的IDT中与ISR相关的项

  41. 3、软件中断 • 软件中断 • 软件引起的、在正常处理流程之外的事件 • 例如: • 触发线程调度 • 非紧急的中断处理 • 定时器到期处理 • 在特定的线程上下文中异步执行 • 支持异步I/O操作

  42. Windows 2000的软件中断级别 • DPC中断(IRQL=2) • Dispatch or deferred procedure call • APC中断(IRQL=1) • Asynchronous procedure call

  43. 1)DPC中断 • 场景1: • 当线程不能继续执行时,例如已经执行完毕或者进入等待状态 • 此时,内核可以直接进行线程调度并进行上下文切换 • 场景2: • 有时,内核正陷于深层次的代码调用中,此时检测到需要进行调度

  44. 解决方法 • 请求调度,但是延迟直到内核完成当前作业 • 即使用DPC软件中断 • 当内核将IRQL提升到2或更高级别时,其他的软件中断和线程调度被禁止 • 当内核检测到需要调度时,就请求一个DPC级的调度中断 • 根据IRQL的处理,这个中断被屏蔽 • 当IRQL降低到低于DPC级别时,这个中断被触发(激活),从而调度得到处理

  45. 延迟过程调用 • 原因:尽可能减少在较高IRQL(设备IRQL)级别停留的时间,提高硬件中断的响应速度 • 不需要被立即执行的一些系统任务 • 内核利用DPC处理定时器过期 • 时钟中断相关 • 设备驱动程序利用DPC完成I/O请求 • 设备中断相关

  46. DPC对象 • DPC使用DPC对象表示, • 这是一种内核控制对象 • 对用户态不可见 • 但对设备驱动程序和其他系统代码可见 • DPC对象的最重要信息: • 被延迟的操作(函数)地址

  47. DPC队列 • 每个处理器都有一个DPC队列,用来存放被延迟执行的各个DPC对象 • DPC对象的优先级: • 高(插入队列头部,以便得到尽快处理) • 中(尾部) • 低(尾部)

  48. DPC队列的处理时机 • 当处理器的IRQL从DPC级别或更高级别下降到更低的级别(APC或无源级别)时,内核处理DPC,直到DPC队列为空

More Related