当前位置:
文档之家› Windows操作系统-体系结构(二)
Windows操作系统-体系结构(二)
_except_handler() {
//except code here }
16
异常调度
1
Exception Generated
EXCEPTION_REGISTRATION_RECORD
Next
Handler Callback Pointer
9
_except_handler()
10
(Does handle it)
–异常是同步事件,它是某一特定指令执行的结果。在相 同条件下,异常可以重现。例如内存访问错误、调试指 令以及被零除。
–系统服务调用也视作异常。 –软件和硬件都可以产生异常和中断。
3
中断调度
•中断请求级别(IRQL=Interrupt Request Level)
Windows 操作系统运行 的不同机器,其中断处 理机制是各不相同的, 为了可移植性的需要, Windows将与中断控制器 硬件相关的中断级别映 射为一个标准的与硬件 无关的中断级别,即中 断请求级别IRQL。
•handler 指向_except_handler
15
异常调度
•异常调度
Thread Enห้องสมุดไป่ตู้ironment Block (FS:[0])
EXCEPTION_REGISTRATION_RECORD
… Other Fields
…
EXCEPTION_REGISTRATION_RECORD
Next
Handler Callback Pointer
在不同机器上, IRQL的实际取值不 尽相同
由于IRQL与硬件无 关,所以可以将非 硬件中断(软件中 断)映射到IRQL体 系结构中。软件中 断主要用于启动调 度操作。
5
中断调度
•处理器的IRQL
在多处理器系统中,任一处理器都可以接收中断请求,所以 Windows为每一个处理器维护一个独立的IRQL。
... }
//guarded section //exception handler
13
异常调度
•结构化异常处理
异常过滤器返回如下三个异常标识符之一 ECXEPTION_EXECUTE_HANDLER ECXEPTION_CONTINUE_EXECUTION ECXEPTION_CONTINUE_SEARCH
•结构化异常处理
Windows在系统底层提供了一种称为结构化异常处理 (SEH)的系统机制。利用SEH可以把程序主要的工作 同错误处理分离开来,这样的分离,可以使程序员集 中精力关注程序要完成的任务,而将可能发生的错误 放在后面处理。 异常是在应用程序的正常执行过程中发生的不正常事 件。CPU引发的异常称为硬件异常,操作系统和应用 程序直接引发的异常,称为软件异常
第二章 Windows操作系统 的体系结构(下)
Windows的系统机制 陷阱调度
中断调度 异常调度 系统服务调度
对象管理器 本地过程调用
1
陷阱调度
• 当异常或中断发生时,硬件或软件可以检测到,处理器 会从用户态切换到核心态,并将控制转交给内核的陷阱 处理程序,该模块检测异常和中断的类型,并将控制交 给处理相应情况的代码
7
中断调度
•硬件中断处理过程
8
中断调度
•延迟过程调用DPC
当处理器处于较高IRQL时,将屏蔽低于或等于处理器当前 IQRL的中断,可能使某些设备的中断得不到及时响应。 为此,Windows要求处理器在较高IRQL上运行的时间尽可能 短,故引入延迟过程调用机制。
9
中断调度
• 延迟过程调用
10
异常调度
陷阱处理程序
中断
中断调度程序
中断服务例程
系统服务调用
服务调度程序
系统服务
硬件异常 软件异常
异常调度程序
异常处理程序
虚拟地址异常
虚拟存储器 页面管理程序
2
陷阱调度
• 异常和中断
–中断是异步事件,可能随时发生,与处理器正在执行的 内容无关。中断主要由I/O设备、处理器时钟或定时器产 生,可以被启用或禁用
6
中断调度
•中断对象
当处理器收到中断请求时,要通知相应设备的驱动程序进行 处理。为此,设备驱动程序应该向I/O管理器注册一个ISR, 可以通过调用IoConnectInterrupt来实现。 IoConnectInterrupt初始化一个中断对象,来存放关于中断及 其ISR的信息。同时使处理器的中断服务表(中断向量表/中 断描述符表)的相应表项指向该中断对象。
14
异常调度
•异常调度
每个线程拥有一个称为TEB的数据结构,其中包含指向 EXCEPTION_REGISTRATION_RECORD结构的指针
EXCEPTION_REGISTRATION_RECORD结构包含两个域:
•next
指向下一个EXCEPTION_REGISTRATION_RECORD
结构
这一映射由HAL实现。
•IRQL采用符号名来命名 °HIGH_LEVEL °POWER_LEVEL °IPI_LEVEL °CLOCK_LEVEL °PROFILE_LEVEL °DEVICE_LEVEL °DISPATCH_LEVEL °APC_LEVEL °PASSIVE_LEVEL
4
中断调度
11
异常调度
•结构化异常处理
SEH是操作系统的一种系统机制,与特定的程序 设计语言无关。 应用程序要利用系统提供的SEH机制,则必须借 助于特定程序设计语言的相关语法。 因此,SEH不但涉及操作系统,而且与编译器有 密切的关系。
12
异常调度
•结构化异常处理
__try {
... } __except(exception filter) {
Next
3
Handler Callback Pointer
_except_handler() 7
(Doesn’t handle it)
_except_handler()
4
(Doesn’t handle it)
17
系统服务调度
• 系统服务是操作系统提供的一组函数, 系统服务由执行体实现。
• 为方便用户编程,Windows以DLL的形式 提供了API,用户可以通过调用API函数 来使用系统服务。
8
Thread Environment Block (FS:[0])
…
EXCEPTION_REGISTRATION_RECORD
…
2 5
EXCEPTION_REGISTRATION_RECORD
Next
6
Handler Callback Pointer
EXCEPTION_REGISTRATION_RECORD