大纲问题回答(精简版)
1. Windows 采用什么样的体系结构?
从图中看出,系统划分为两种状态,核心态和用户态。粗线上方代表用户态进程,下方是核心态的操作系统服务。用户态的进程只能运行在受保护的地址空间。因此,四种类型的用户态进程都有各自的私有地址空间。核心态的操作系统服务组件运行在统一的核心地址空间。核心态组件包括:执行体( executive)、内核(kernel)、文件和设备驱动程序(Fileand and device drivers)、 硬件抽象层( Hardware Abstraction Layer, HAL), 以及窗口和图(Windows USER, GDI) 等。
2. 硬件抽象层HAL的作用是什么?
硬件抽象层
◼ 可加载的核心态模块HAL.dll,直接操作硬件,为Windows运行在硬件平台上提供低级接口。
◼ 隐藏各种与硬件有关的细节,使上层免受特殊硬件平台的影响,系统可移植性好。
3. Windows系统组件的基本机制包括:陷阱调度、执行体对象管理器、同步(自旋锁、内核调度程序对象)、本地过程调用LPC等。
① 陷阱调度。属于内核的功能。包括中断、DPC 、APC 、异常调度、系统服务调度。
② 执行体对象管理器。
③ 同步。自旋锁、内核调度程序对象。
④ 本地过程调用LPC。在同一台计算机上实现客户进程和服务器进程之间的消息传递。服务器创建一个LPC连接端口对象,然后在该端口上监听客户连接请求。类似socket编程。
4. 理解:延迟过程调用DPC,异步过程调用APC。
延迟过程调用 DPC
DPC被内核用来执行一些相对于当前高优先级的任务来说不那么紧急的任务。
◼有时内核在进行系统嵌套调用时,检测到应该进行线程调度,为了保证调度的正确性,内核用DPC来延迟调度的产生。
◼在硬件中断服务例程中,可以把一些相对不紧急的事情放到一个DPC对象中,从而缩短处理机停留在高IRQL的时间。
◼DPC对象主要包含需调用的系统函数地址
◼DPC队列是系统范围的,能记住有哪些工作尚未处理。
◼当IRQL降低到DPC/Dispatcher级别以下时,DPC中断就产生。依次执行DPC队列中的各个例程,直至DPC队列为空。
异步过程调用 APC
◼每个线程都有自己的APC队列。当一个线程被调度时,它的APC过程会立刻被执行。
◼有两种APC:
◼核心态APC可以中断线程,在线程被调度时立即执行,不需要得到线程的“允许”;
◼用户态APC需要得到线程的“允许”才能执行。
5. Windows中有哪些对象,都有什么作用?
(两种类型对象:执行体对象和内核对象。执行体组件:进程和线程管理器、内存管理器、I/O管理器、对象管理器等。内核对象是由内核实现的一个初级对象集,对用户态代码不可见,仅供执行体使用。内核对象又分为控制对象和调度程序对象两种。一个执行体对象可以包含一个或多个内核对象。)
内核
◼ 内核功能:线程调度,中断和异常调度,多处理机同步,提供执行体使用的一组例程和基本对象。
◼ 内核对象是由内核实现的一个初级对象集,对用户态代码不可见,仅供执行体使用。
◼ 执行体对象绝大多数封装了一个或多个内核对象。
执行体
◼ 在内核之上,包含基本的操作系统服务。
◼ 可供用户态调用的系统服务函数
◼ 仅供核心态内部使用和调用的函数
◼ 各功能组件函数
◼ 进程和线程管理器、虚拟内存管理器
◼ 安全监视器、高速缓存管理器
◼ I/O管理器、对象管理器
◼ 本地过程调用机制、即插即用管理
◼ 电源管理、网络管理
内核
◼ 执行Windows最基本的操作,由一组底层的操作系统功能构成。
◼ 线程安排和调度
◼ 中断和异常调度
◼ 多处理机同步
◼ 提供执行体使用的一组例程和基本对象
◼ 运行在核心态,除中断服务例程ISR以外,正在运行的线程不能抢占内核。
6. 在多处理机系统中,提供了哪些同步和互斥机制?
(内核引入自旋锁实现多处理机互斥机制。内核以内核对象的形式给执行体提供其他的同步机构—“调度程序对象”,包括:进程对象、线程对象、事件对象、信号量对象、互斥体对象、可等待的定时器对象及文件对象等。每个同步对象都有“有信号”或“无信号”两种状态。)
1. 内核同步
▪ 内核引入自旋锁实现多处理机互斥访问核临界区(修改全局数据结构的代码段)。
▪ 在Intel处理机上,自旋锁是通过“测试与设置”test&set( )硬件指令实现的。
▪ 拥有自旋锁的线程不被剥夺处理机。
2. 执行体同步
▪ 执行体组件需要同步访问全局数据结构(如页框数据库),执行体还提供用户态的同步机制。
▪ Windows定义了统一的同步机制:等待调度程序对象为有信号状态,WaitForSingleObject( ) 。
▪ 每个同步对象有两种状态:“有信号”,“无信号”。(线程、进程终止时有信号)
7. 线程如何实现等待一个同步对象的操作?
◆WaitForSingleObject( )
▪ 执行体组件需要同步访问全局数据结构(如页框数据库),执行体还提供用户态的同步机制。
▪ Windows定义了统一的同步机制:等待调度程序对象为有信号状态,WaitForSingleObject( ) 。
▪ 每个同步对象有两种状态:“有信号”,“无信号”。(线程、进程终止时有信号)
大纲问题回答
1. Windows 采用什么样的体系结构?(3)
从图中看出,系统划分为两种状态,核心态和用户态。粗线上方代表用户态进程,下方是核心态的操作系统服务。用户态的进程只能运行在受保护的地址空间。因此,四种类型的用户态进程都有各自的私有地址空间。核心态的操作系统服务组件运行在统一的核心地址空间。核心态组件包括:执行体( executive)、内核(kernel)、文件和设备驱动程序(Fileand and device drivers)、 硬件抽象层( Hardware Abstraction Layer, HAL), 以及窗口和图(Windows USER, GDI) 等。
2. 硬件抽象层HAL的作用是什么?(1)
◼ 可加载的核心态模块HAL.dll,直接操作硬件,为Windows运行在硬件平台上提供低级接口。
◼ 隐藏各种与硬件有关的细节,使上层免受特殊硬件平台的影响,系统可移植性好。
注:做人留一线
3. Windows系统组件的基本机制包括:陷阱调度、执行体对象管理器、同步(自旋锁、内核调度程序对象)、本地过程调用LPC等。(3)
① 陷阱调度。属于内核的功能。包括中断、DPC 、APC 、异常调度、系统服务调度。
② 执行体对象管理器。
③ 同步。自旋锁、内核调度程序对象。
④ 本地过程调用LPC。在同一台计算机上实现客户进程和服务器进程之间的消息传递。服务器创建一个LPC连接端口对象,然后在该端口上监听客户连接请求。类似socket编程。
4. 理解:延迟过程调用DPC,异步过程调用APC。(4)
DPC 用于执行一些相对当前高优先级任务不那么紧急的任务;相对不紧急的事情放入 DPC 对象,形成 DPC 队列,之后当中断请求级别 IRQL 降低至 DPC/Dispatcher 以下,就产生 DPC 中断,调度程序依次执行 DPC 队列中的例程直至其为空;
APC 为用户程序和系统代码提供了一种在特定用户线程环境中执行代码的方法,各线程均有其 APC 队列;
理解“特定环境”:如要从内核空间复制一个缓冲区到用户进程地址空间,则这个复制过程必须在用户进程上下文进行,才能使页表包含内核缓冲区和用户缓冲区;
延迟过程调用 DPC
DPC被内核用来执行一些相对于当前高优先级的任务来说不那么紧急的任务。
◼有时内核在进行系统嵌套调用时,检测到应该进行线程调度,为了保证调度的正确性,内核用DPC来延迟调度的产生。
◼在硬件中断服务例程中,可以把一些相对不紧急的事情放到一个DPC对象中,从而缩短处理机停留在高IRQL的时间。
◼DPC对象主要包含需调用的系统函数地址
◼DPC队列是系统范围的,能记住有哪些工作尚未处理。
◼当IRQL降低到DPC/Dispatcher级别以下时,DPC中断就产生。依次执行DPC队列中的各个例程,直至DPC队列为空。
异步过程调用 APC
◼每个线程都有自己的APC队列。当一个线程被调度时,它的APC过程会立刻被执行。
◼有两种APC:
◼核心态APC可以中断线程,在线程被调度时立即执行,不需要得到线程的“允许”;
◼用户态APC需要得到线程的“允许”才能执行。
5. Windows中有哪些对象,都有什么作用?(4)
执行体对象:进程管理器、主存管理器、I/O子系统等。
内核对象:由内核实现的一个初级对象的集合,对用户态代码不可见,仅供执行体使用。
一个执行体对象可以包含一个或多个內核对象。
内核
◼ 内核功能:线程调度,中断和异常调度,多处理机同步,提供执行体使用的一组例程和基本对象。
◼ 内核对象是由内核实现的一个初级对象集,对用户态代码不可见,仅供执行体使用。
◼ 执行体对象绝大多数封装了一个或多个内核对象。
执行体
◼ 在内核之上,包含基本的操作系统服务。
◼ 可供用户态调用的系统服务函数
◼ 仅供核心态内部使用和调用的函数
◼ 各功能组件函数
◼ 进程和线程管理器、虚拟内存管理器
◼ 安全监视器、高速缓存管理器
◼ I/O管理器、对象管理器
◼ 本地过程调用机制、即插即用管理
◼ 电源管理、网络管理
内核
◼ 执行Windows最基本的操作,由一组底层的操作系统功能构成。
◼ 线程安排和调度
◼ 中断和异常调度
◼ 多处理机同步
◼ 提供执行体使用的一组例程和基本对象
◼ 运行在核心态,除中断服务例程ISR以外,正在运行的线程不能抢占内核。
6. 在多处理机系统中,提供了哪些同步和互斥机制?(3)
- 内核同步:多处理器系统中,内核引入自旋锁实现多处理机互斥机制,通过硬件指令“测试与设置”实现;(详见第三章)
- 执行体同步:内核以内核对象的形式给执行体提供其他的同步机构—“调度程序对象”,包括:进程对象、线程对象、事件对象、信号量对象、互斥体对象、可等待的定时器对象及文件对象等。每个同步对象都有“有信号”或“无信号”两种状态。
- 内核同步
▪ 内核引入自旋锁实现多处理机互斥访问核临界区(修改全局数据结构的代码段)。
▪ 在Intel处理机上,自旋锁是通过“测试与设置”test&set( )硬件指令实现的。
▪ 拥有自旋锁的线程不被剥夺处理机。
2. 执行体同步
▪ 执行体组件需要同步访问全局数据结构(如页框数据库),执行体还提供用户态的同步机制。
▪ Windows定义了统一的同步机制:等待调度程序对象为有信号状态,WaitForSingleObject( ) 。
▪ 每个同步对象有两种状态:“有信号”,“无信号”。(线程、进程终止时有信号)
7. 线程如何实现等待一个同步对象的操作?(3)
◆WaitForSingleObject( )
▪ 执行体组件需要同步访问全局数据结构(如页框数据库),执行体还提供用户态的同步机制。
▪ Windows定义了统一的同步机制:等待调度程序对象为有信号状态,WaitForSingleObject( ) 。
▪ 每个同步对象有两种状态:“有信号”,“无信号”。(线程、进程终止时有信号)
对象管理器提供了两个系统服务程序,使线程与调度程序对象同步;
WaitForSignalObjects(); //等待单个调度程序对象(即同步对象);
WaitForMultipleObjects(); //等待多个调度程序对象(即同步对象);