System Architecture
第二章. System Architecture
需求
1. 32位、抢先式(preemptive)、可重入(reentrant)的虚拟内存操作系统。
2. 支持多种硬件系统结构和平台。
3. 支持对称多处理器系统(symmetric multiprocessing systems),并能适应处理器的数量。
4. 成为一个分布式计算平台,网络客户或者服务器。
5. 兼容已有的16位MS-DOS和Windows3.1应用程序。
6. 符合政府对POSIX1003.1兼容性的要求。
7. 符合政府和业界对安全性方面的要求。
8. 支持Unicode,以适应全球市场。
设计目标
1. 扩展性(Extensibility)
2. 可移植性(Portability)
3. 可靠性和健壮性(Reliability and Robustness)
4. 兼容性(Compatibility)
5. 性能(Performance)
总体架构
用户模式:
系统支持进程 – 登录和会话管理进程;不是Windows服务,不通过服务控制管理器(SCM)来启动。
服务进程 – Windows服务的宿主(host);独立于用户登录。
环境子系统 – 展示给用户的个性化部分;Windows/POSIX/OS/2。
子系统dll – 应用程序不直接调用原始的Windows系统服务,而是通过子系统dll来调用。它将一个已文档化的函数转发为内部(未文档化)的Windows系统服务调用。
内核模式:
执行体 – 基本的系统服务,如内存管理,进程和线程管理,安全性,I/O,网络,跨进程通信。
内核(kernel) – 低层次的操作系统功能,如线程调度,中断,异常分发,多处理器同步;内核同时提供一组接口以实现执行体中更高层次的功能。
设备驱动程序 – 硬件驱动程序和文件系统和网络驱动程序;硬件驱动程序的将用户的I/O函数调用转换成特定的硬件设备I/O请求。
HAL – 将内核、设备驱动程序和执行体的其余部分与平台相关的硬件差异隔离。
窗口和图形系统 – 实现GUI函数,通常叫做Windows User和GDI函数。
可移植性
分层设计 – 系统有两个关键组件(内核和HAL)为不同处理器体系结构和平台提供可移植性。与体系结构相关的功能(如线程环境切换和陷阱分发)在内核中实现;在同样的体系结构中,不同系统之间的差异(如不同的主板)在HAL中实现。内存管理器也有少部分代码与体系结构相关。
编程语言 – 主要用c编写,少部分c++。只有需要与硬件直接通信的部分(中断陷阱处理器)和性能敏感的部分(线程环境切换),用汇编编写。
关键的系统组件
环境子系统和子系统dll
Windows最初有三个环境子系统:OS/2、POSIX、Windows;Windows子系统总是运行。
Windows子系统(csrss.exe) - 就如IIS架构中的INET进程,随着其架构的演变,它所含有的功能越来越少:
n 控制台(文本)窗口
n 创建或删除进程和线程
n 对16位虚拟DOS机进程的部分支持
n 其他一些函数如GetTempFile()…
内核模式设备驱动程序(Win32K.sys) :
n 窗口管理器 – 控制窗口显示,屏幕输出,采集键盘鼠标输入等
n 图形设备接口(GDI) – 专门针对图形输出设备的函数库,包括文本图形的绘制函数。
子系统dll – Kernel32.dll、Advapi32.dll、User32.dll、Gdi32.dll;将文档化的Windows API
函数翻译成Ntoskrnl.exe和Win32k.sys中的未文档化的内核模式系统服务调用。
Ntdll.dll
系统服务分发存根(stubs),它们会调用执行体系统服务。如NtCreateFile,NtSetEvent等。
内部支持函数,共子系统,子系统dll以及其他原生映像文件使用。如映像加载器(Ldr),堆管理器,Windows子系统进程通信函数(Csr),一般的运行库函数(Rtl),以及用户模式下的APC。
执行体
n 系统服务 - 用户模式调用的导出函数
n 配置管理器 – 负责注册表的实现和管理。
n 进程线程管理器 – 创建或终止进程和线程;底层支持在内核中实现。
n 安全引用监视器(SRM) – 强制在本地计算机上实现安全策略;保护操作系统的资源,执行运行时对象的保护和审计。
n I/O管理器 – 实现与设备无关的I/O操作;负责将I/O操作分派到适当的设备驱动程序处理。
n PnP管理器 – 支持一定的设备,确定哪些驱动程序是必须的并加载这些驱动程序。
n 电源管理器 – 负责协调电源事件,并且向设备驱动程序产生电源管理I/O通知。比如,当系统空闲的时候,通知CPU置于休眠状态而降低消耗。
n 高速缓存管理器 – 提高以文件为基础的I/O操作的性能。
n 内存管理器 – 实现虚拟内存。
四组支持函数:
n 对象管理器 – 创建管理Windows执行体对象和抽象数据类型。如进程、线程对象等。
n LPC设施 – 在同一台机器上的进程间传递消息。
n 公共运行库 – 如字符串处理,算术操作等。
n 执行体支持函数 – 系统内存分配,互锁的内存访问。
内核
内核是由Ntoskrnl.exe中的一组函数(如线程调度和同步)以及对硬件系统结构的底层支持(如中断和异常)构成。它将几乎所有的策略决定留给执行体,唯一例外是线程调度和分发(内核自己实现).
内核对象 – 内核提供了一组定义明确的、可预知的操作系统底层原语和机制,以为执行体中高层组件提供支持。内核实现了操作系统的基本机制并且避免各种策略决定,从而将自己与执行体的高层组件隔离。
硬件支持 – 将执行体和设备驱动程序从Windows所支持的各种硬件体系结构抽象出来,包括中断处理、异常分发和处理器同步等方面的变化。内核通过定义一组可移植的接口,实现这些接口的大部分代码在不同的体系结构上是等同的。不同的部分在HAL中处理。
HAL
HAL提供了针对当前硬件平台的底层接口。它隐藏了与硬件相关的细节如I/O接口、中断控制器,以及多处理器通信机制。
设备驱动程序
可加载的内核模式模块(通常以.sys后缀);它们在I/O管理器和硬件之间建立连接;运行于内核模式下,位于三种执行环境之一:
n 在发起I/O功能的用户线程的环境中
n 在内核模式系统线程中
n 中断结果,不在特定的线程环境中。
设备驱动程序往往使用HAL函数来与硬件打交道,因此可以方便移植。
Windows驱动程序模型(WDM)
n 总线型驱动程序(bus driver) – 它为总线控制器、适配器、桥或任何带有子设备的设备提供服务。
n 功能型驱动程序(function driver) – 为相应的设备提供可操作的接口。
n 过滤型驱动程序(filter driver) – 为某一设备增加新的功能或者修改来自其他设备的I/O请求或应答。
对于一个设备而言,一个总线型驱动程序负责向PnP管理器报告其总线上的设备,而功能型驱动程序操纵该设备。
系统进程
Idle进程 – 每个CPU一个线程,占用空闲CPU时间。
System进程 – 系统线程只能加载运行内核模式下代码。
会话管理器(Smss.exe) – 系统启动的第一个用户模式进程。它负责启动Csrss和Winlogon并等待他们启动成功。
Windows子系统(Csrss.exe) –
登录进程(Winlogon.exe) –
服务控制管理器(Services.exe)以及其创建的子服务进程(如Svchost.exe) –
本地安全认证服务器(Lsass.exe) –