深入解析Windows操作系统(Windows Internals) 4th Edition 读书笔记 - 第二章 系统结构 (二)

来源:互联网 发布:网站快速排名优化方式 编辑:程序博客网 时间:2024/05/17 01:58

2.4 关键的系统组件

这一节将会深入介绍Windows内部结构和每个关键的系统组件所扮演的角色。下图是Windows核心组件更详细的图,它是2.1节的结构图细化版本。

3

 

环境子系统和子系统DLL

Windows最初有三个子系统:OS/2POSIXWindows。但是到了Windows XP以后,只有Windows子系统随系统一起发布。实际上Windows子系统已经成了Windows必不可少的组件,而其他两个子系统被配置成按需启动。

HKLM/SYSTEM/CurrentControlSet/Control/Session Manager/SubSystems下面保存了子系统启动信息。其下的Required键值为必选子系统,被设置成Windows。其下的Optional键值为按需启动子系统,可以是Os2Posix中的一个或全部。

环境子系统的角色是将Windows基本服务(Native API)的部分子集暴露给应用程序。

每一个可执行的映像(.exe)被绑定到唯一一个子系统上。映像文件的头部有子系统类型信息。Visual C++的链接器的/SUBSYSTEM选项可以指定此信息。已经链接好的映像,可以使用exetype工具来查看这个信息。

 

Windows子系统

组成部分:

l         环境子系统进程(csrss.exe),包含以下支持:

²        控制台(文本)窗口

²        创建或删除进程和线程

²        16位虚拟DOS机的支持

²        其他一些函数,如GetTempFileExitWindowsEx等。

l         内核模式设备驱动程序(win32k.sys),包含:

²        窗口管理器(窗口显示,屏幕输出,键盘、鼠标的输入等)

²        图形设备接口(GDI

l         子系统DLLKernel32.dllAdvapi32.dllUser32.dllGdi32.dll

l         图形设备驱动程序

 

POSIX子系统

POSIX: Portable Operating System Interface based on Unix

l         Windows只实现了众多POSIX标准中的一个,即POSIX.1。这个标准只提供了对POSIX应用程序极其有限的支持。

l         Microsoft提供一个称为“Windows Services for Unix”的产品,提供了一个增加的POSIX支持环境。

l         Windows中编译和链接一个POSIX应用程序,应该使用Platform SDK中的POSIX头文件和库文件(psxdll.dll)。

l         POSIX子系统默认配置成按需启动。当第一次启动POSIX程序时,POSIX子系统进程(psxss.exe)会被启动。

 

实验

书中提供了一个实验可以观察POSIX子系统的启动。只需要运行一个POSIX程序,如“Windows Services for Unix”中带的C Shell,即可用进程管理器观察到POSIX子系统进程psxss.exe被启动起来。但从我的实际操作结果来看,安装了Windows Services for Unix 3.5以后,每次操作系统启动后,psxss.exe进程就已经启动,似乎不太符合书中所说的按需启动。

安装Windows Services for Unix 3.5以后,系统中多了以下进程:

init进程(linux下耳熟能详的名字)

initd进程(同上)

psxss.exePOSIX子系统进程)

psxrun.exe(不知为何物)

zzinterix(不知为何物)

tcshC Shell进程,同样是linux下耳熟能详的名字)

 

OS/2子系统

OS/2子系统在可用性方面比POSIX子系统更逊一筹,略去。

 

Ntdll.dll

Ntdll包含两类函数:

l         系统服务分发存根。这类函数以Nt开头,就是所谓的Native API,通过调用它们可切换到内核模式下,从而调用系统服务。

l         内部支持函数。在ntdll.dll中具体实现的函数,以Ldr开头的是映像加载器,Csr开头的是子系统进程通信函数,以Rtl开头的是运行库函数。

 

执行体

Windows执行体是Ntoskrnl.exe中的上层(内核是其下层),包含以下组件:

l         配置管理器

l         进程和线程管理器

l         安全引用监视器

l         I/O管理器

l         即插即用管理器

l         电源管理器

l         WDM Windows管理规范例程

l         高速缓存管理器

l         内在管理器

l         逻辑预取器

l         对象管理器

l         LPC设施

l         公共运行库

l         执行体支持例程

 

内核

内核是由Ntoskrnl.exe中的一组函数和硬件低层支持(如中断和异常分发)构成,提供了一些基本的机制,如线程调度和同步服务。内核中的许多函数以Ke开头。在DDK中有详细描述。当然,如果下载了Windows Research Kernel,就可以直接看这些函数的实现细节。