第二章 Windows 2000/XP 的体系结构(下)
description
Transcript of 第二章 Windows 2000/XP 的体系结构(下)
1
第二章 Windows 2000/XP的体系结构(下)
陷阱调度中断调度异常调度系统服务调度
对象管理器本地过程调用
Windows 2000/XP 的系统机制
2
陷阱调度陷阱调度• 当异常或中断发生时,硬件或软件可以检测到,处理器
会从用户态切换到核心态,并将控制转交给内核的陷阱处理程序,该模块检测异常和中断的类型,并将控制交给处理相应情况的代码
陷阱处理程序
异常调度程序
虚拟存储器页面管理程序
异常处理程序
中断
系统服务调用
硬件异常软件异常
虚拟地址异常
中断调度程序 中断服务例程
服务调度程序 系统服务
3
• 异常和中断– 中断是异步事件,可能随时发生,与处理器正在执行的内容无关。中断主要由 I/O 设备、处理器时钟或定时器产生,可以被启用或禁用
– 异常是同步事件,它是某一特定指令执行的结果。在相同条件下,异常可以重现。例如内存访问错误、调试指令以及被零除。
– 系统服务调用也视作异常。– 软件和硬件都可以产生异常和中断。
陷阱调度陷阱调度
4
中断调度中断调度•中断请求级别( IRQL=Interrupt Request Level )
Windows 操作系统运行的不同机器,其中断处理机制是各不相同的,为了可移植性的需要, Windows 将与中断控制器硬件相关的中断级别映射为一个标准的与硬件无关的中断级别,即中断请求级别 IRQL 。这一映射是由 HAL 实现的。
•IRQL 采用符号名来命名°HIGH_LEVEL °POWER_LEVEL°IPI_LEVEL °CLOCK_LEVEL°PROFILE_LEVEL°DEVICE_LEVEL°DISPATCH_LEVEL°APC_LEVEL°PASSIVE_LEVEL
5
中断调度中断调度
在不同机器上, IRQL 的实际取值不尽相同
由于 IRQL 与硬件无关,所以可以将非硬件中断(软件中断)映射到 IRQL 体系结构中。软件中断主要用于启动调度操作。
6
中断调度中断调度•处理器的 IRQL
在多处理器系统中,任一处理器都可以接收中断请求,所以Windows 为每一个处理器维护一个独立的 IRQL 。
7
中断调度中断调度•中断对象
当处理器收到中断请求时,要通知相应设备的驱动程序进行处理。为此,设备驱动程序应该向 I/O 管理器注册一个 ISR ,可以通过调用 IoConnectInterrupt 来实现。
IoConnectInterrupt 初始化一个中断对象,来存放关于中断及其 ISR 的信息。同时使处理器的中断服务表(中断向量表/ 中断描述符表)的相应表项指向该中断对象。
8
中断调度中断调度•硬件中断处理过程
9
中断调度中断调度•延迟过程调用 DPC
当处理器处于较高 IRQL 时,将屏蔽低于或等于处理器当前IQRL 的中断,可能使某些设备的中断得不到及时响应。
为此, Windows 要求处理器在较高 IRQL 上运行的时间尽可能短,故引入延迟过程调用机制。
10
中断调度中断调度
• 延迟过程调用
11
•结构化异常处理Windows 在系统底层提供了一种称为结构化异常处理(SEH) 的系统机制。利用 SEH 可以把程序主要的工作同错误处理分离开来,这样的分离,可以使程序员集中精力关注程序要完成的任务,而将可能发生的错误放在后面处理。异常是在应用程序的正常执行过程中发生的不正常事件。 CPU 引发的异常称为硬件异常,操作系统和应用程序直接引发的异常,称为软件异常
异常调度异常调度
12
SEH 是操作系统的一种系统机制,与特定的程序设计语言无关。
应用程序要利用系统提供的 SEH 机制,则必须借助于特定程序设计语言的相关语法。
因此, SEH 不但涉及操作系统,而且与编译器有密切的关系。
•结构化异常处理
异常调度异常调度
13
__try{
... //guarded section}__except(exception filter){
... //exception handler}
•结构化异常处理
异常调度异常调度
14
异常过滤器返回如下三个异常标识符之一ECXEPTION_EXECUTE_HANDLERECXEPTION_CONTINUE_EXECUTIONECXEPTION_CONTINUE_SEARCH
•结构化异常处理
异常调度异常调度
15
异常调度异常调度•异常调度
每个线程拥有一个称为 TEB 或 TIB 的数据结构,其中包含指向 EXCEPTION_REGISTRATION 结构的指针
EXCEPTION_REGISTRATION 结构包含两个域:•prev 指向前一个 EXCEPTION_REGISTRATION
结构•handler 指向 _except_handler
16
异常调度异常调度•异常调度
17
异常调度异常调度•异常调度
18
系统服务调度系统服务调度• 系统服务是操作系统提供的一组函数,系统服务由执行体实现。
• 为方便用户编程, Windows 以 DLL 的形式提供了 API ,用户可以通过调用 API函数来使用系统服务。
• 利用 API 间接调用系统服务的优点:– 方便– 增加应用程序的可移植性
19
系统服务调度系统服务调度• API 调用与系统服务不存在一一对应的关系
20
系统服务调度系统服务调度
• 在 Alpha 处理器上执行 syscall 指令或在Intel x86 处理器上执行 int 2E 指令都会引起系统服务调度。
mov eax, xxxx ; 系统服务号mov edx, xxxx ;参数指针int 2eh
21
系统服务调度系统服务调度• 内核使用执行 int 2E 指令时设置的系统服务号在系统服务调度表中查找对应的系统服务。
• 系统服务调度表是一个核心数据结构,其中包含了指向各个系统服务的指针。
22
•系统服务调度程序将依次作下面几件事:
•校验参数•调用者的参数从线程的用户堆栈复制到它的核心堆栈中•执行系统服务
系统服务调度系统服务调度
23
系统服务调度系统服务调度
24
对象管理器对象管理器• Windows 2000/XP 的核心态组件使用了面向对象设计原则,从而为执行体实现的内部服务提供了一致且安全的访问机制
• 对象管理器( Object Manager )是执行体组件之一:
• 用于创建、删除、保护和跟踪对象• 实现对象的集中保护• 实现了资源的访问控制• 对象管理器有一套对象命名方案和统一的保留规则,能够容易地操纵现有对象
25
• 执行体对象– 由执行体的各种组件实现 – 进程管理器、内存管理器、 I/O子系统等
• 内核对象– 由内核实现的原始的对象集合– 这些对象对用户态代码是不可见的,它们仅在执行体内创建和使用
• 内核对象提供了一些基本功能,许多执行体对象内包含着一个或多个内核对象。
对象管理器对象管理器
26
对象管理器对象管理器• 对象的结构– 对象头 ——由对象管理器控制
对象名:使对象可以被其它进程所引用安全描述符:包含访问许可打开句柄信息:包含哪些进程使用该对象的信息引用计数:包含未完成的引用该对象的句柄数……
– 对象体——由各执行体组件控制
27
执行体对象
内核对象
执行体
内核
应用程序
句柄
对象管理器对象管理器
用户态
核心态
28
对象管理器对象管理器
对于某些表示共享资源的对象,如果一个对象已经创建,当第二个进程试图再次创建对象时,执行体只是创建一个新的句柄
29
本地过程调用本地过程调用
• LPC=Local Procedure Call( 本地过程调用 ) • 通常在一个服务器进程与该服务器的一个或多个客户进程之间进行通信时使用 LPC 机制。
• 一个用于消息传输的进程间通信机制• 使用 LPC 的例子:– 用户程序调用某些 Win32 API 将导致给 Win32子系统服务进程( CSRSS.EXE )发送消息
30
• LPC 的两种交换消息的方法:– 使用包含信息的缓冲区调用 LPC 可以发送少于
256字节的信息。然后,这个信息又从发送进程的地址空间复制到系统地址空间,再从那里拷贝到接收进程的地址空间。
– 如果用户和服务器想交换大于 256字节的数据,那么他们可以选择使用双方都映射了的共享区。发送方将信息数据放到共享区,然后向接收方发送一小段信息表明在共享区的什么地方可以找到数据。
本地过程调用本地过程调用
31
本地过程调用本地过程调用• LPC导出一个称为端口对象 (port object) 的执
行体对象,用它来维护通信所需要的状态。• 端口对象拥有四种类型的端口:• 服务器连接端口是一个已命名的服务器连接请求指
向端口,客户可通过与这个端口连接从而连接到服务器上。
• 服务器通信端口是服务器用来与特殊客户进行通信的一个未命名的端口,服务器与每一个活动客户都有一个这样的端口。
• 客户通信端口是特殊客户线程用来与特殊服务器通信的未命名的端口。
• 未命名通信端口为用于同一进程中的两个线程而创建的未命名的端口。
32
本地过程调用本地过程调用
33
• Win32子系统Win32
应用程序(client)
CSRSS(server)
Win32子系统 DLL
用户态
核心态WIN32K.SYS LPC 机制
本地过程调用本地过程调用
34
本地过程调用本地过程调用