Windows 操作系统深度梳理
Windows 是微软开发的图形化桌面操作系统,基于 Windows NT 内核架构。本文从行为到结构递进梳理:先通过行为图展示系统运作,再通过结构图分解系统组成,最后概述编程接口与关键子系统。
0. 总览
Windows 操作系统核心架构遵循分层设计,分为用户态(User Mode)和内核态(Kernel Mode)两大层级。用户态的应用程序通过子系统 DLL 与内核通信,内核态的核心组件包含执行体(Executive)、内核(Kernel)、硬件抽象层(HAL)以及各类驱动。
- 隔离性:每个用户进程拥有独立的虚拟地址空间,互不影响
- 对象化:进程、线程、文件、互斥量等均为统一对象模型
- 可扩展性:通过驱动框架、子系统支持多 API 环境
- 安全性:基于 ACL 的对象级访问控制
| 维度 | 说明 |
|---|---|
| 内核类型 | 混合内核(Hybrid Kernel)— 融合微内核结构 + 宏内核性能 |
| API 集 | Win32 API (Windows API)、UWP API、.NET、POSIX (WSL) |
| 文件系统 | NTFS(原生)、FAT32/exFAT、ReFS、CDFS、UDF |
| 调度器 | 抢占式多任务,32 个 IRQL 优先级等级 |
| 体系架构 | x86、x86-64 (AMD64)、ARM64 |
| 桌面环境 | Windows Shell (explorer.exe)、DWM 合成窗口管理器 |
1. 行为图(系统"做什么")
行为图描述系统的动态运行过程,从用户视角到内部调用逐步细化。
1.1 用例图 — Windows 用户交互场景
从用户角度描述 Windows 提供的核心功能及交互边界。
1.2 活动图 — Windows 启动流程
展示 Windows 从加电到桌面的完整启动过程,涉及固件、引导管理器、内核加载、服务启动、用户登录等多个阶段。
1.3 状态机图 — 线程状态转移
Windows 线程在其生命周期中经历多种状态,由调度器(Scheduler)控制状态转移。
1.4 序列图 — Win32 API 系统调用路径
一个 Win32 API 调用(如 CreateFile)如何穿越用户态到内核态的完整路径。
2. 结构图(系统"由什么组成")
2.1 组件图 — Windows NT 架构总览
展示 Windows 系统的分层组件架构:用户态子系统、系统服务、执行体、内核、HAL。
2.2 包图 — 内核子系统依赖关系
内核态内部各个管理器(Object Manager、Process Manager、I/O Manager、Memory Manager、Security Reference Monitor 等)之间的依赖关系。
2.3 类图 — 核心操作系统对象
展示 Windows 对象管理器统一管理的核心对象(文件对象、进程对象、线程对象、事件对象等)以及它们之间的关系。
// 创建进程
STARTUPINFO si = { sizeof(si) };
PROCESS_INFORMATION pi;
CreateProcess(NULL, "notepad.exe", NULL, NULL, FALSE,
0, NULL, NULL, &si, &pi);
// 创建文件对象
HANDLE hFile = CreateFile("test.txt", GENERIC_WRITE, 0, NULL,
CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
// 创建线程
HANDLE hThread = CreateThread(NULL, 0, MyThreadProc, NULL, 0, NULL);
// 创建互斥量 (同步对象)
HANDLE hMutex = CreateMutex(NULL, FALSE, "MyMutexName");
// 关闭句柄(释放对象引用)
CloseHandle(hFile);
CloseHandle(hThread);
CloseHandle(hMutex);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
2.4 部署图 — Windows 系统硬件拓扑
展示操作系统如何在多核 CPU、内存、磁盘、GPU、网络设备等硬件上部署核心组件。
3. 编程接口概览
Windows 提供多层级的编程接口,覆盖用户界面、系统服务、网络、安全、图形等全方位功能。主要 API 家族:
| API 族 | 用途 | 运行模式 | 典型头文件/命名空间 |
|---|---|---|---|
| Windows API (Win32) | 桌面应用核心 API,涵盖窗口管理、文件 I/O、进程线程、GDI 绘图、网络等 | 用户态 | windows.h |
| Component Object Model (COM) | 二进制级别的组件复用与跨语言互操作 | 用户态 | combaseapi.h |
| Windows Runtime (WinRT) | UWP 应用的现代 API,基于 COM 增强 | 用户态 | winrt/ (C++/WinRT) |
| .NET / CLR | 托管运行时,C#/VB.NET/F# 开发 | 用户态 | System.* |
| Windows Subsystem for Linux (WSL) | Linux 二进制兼容层,内核级 syscall 翻译 | 用户/内核 | Linux syscall ABI |
| Kernel-mode API | 驱动开发、内核模块开发 | 内核态 | ntddk.h, wdm.h |
| DirectX / Direct3D | GPU 加速 2D/3D 图形、视频、音频 | 用户/内核 | d3d11.h, dxgi.h |
4. 关键子系统详解
4.1 进程与线程管理
每个 Windows 进程至少包含:一个虚拟地址空间(VAD)、一个句柄表(Handle Table)、一个访问令牌(Access Token)、至少一个线程。进程间通过 IPC 机制通信(管道、邮槽、共享内存、RPC、COM)。
| 特性 | 说明 |
|---|---|
| 调度单位 | 线程(Thread)— 抢占式、基于优先级的时间片轮转 |
| 优先级 | 0–31(16-31 为实时优先级,0 为零页线程) |
| 亲和性 | 可将线程绑定到特定 CPU 核心(Affinity Mask) |
| Job Object | 将多个进程作为一组统一管理,可限制 CPU/内存/IO |
| UMS | 用户态调度(User-Mode Scheduling),应用自行调度线程 |
| Fiber | 协程机制,一个线程内手动协作式调度 |
| Thread Pool | 系统级线程池,异步回调无需手动创建线程 |
#include <windows.h>
int main() {
STARTUPINFO si = { sizeof(STARTUPINFO) };
PROCESS_INFORMATION pi;
BOOL ok = CreateProcess(
"C:\\Windows\\System32\\cmd.exe",
"/c echo Hello World",
NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi
);
if (ok) {
WaitForSingleObject(pi.hProcess, INFINITE);
DWORD exitCode;
GetExitCodeProcess(pi.hProcess, &exitCode);
CloseHandle(pi.hProcess);
CloseHandle(pi.hThread);
}
return 0;
}
4.2 内存管理
Windows 内存管理器实现虚拟内存,提供按需换页(Demand Paging)、内存映射文件、写时复制(Copy-on-Write)、大页支持等机制。每个用户进程默认有 2 GB 虚拟地址空间(32 位,/LARGEADDRESSAWARE 可扩展到 3 GB 或 4 GB),64 位进程拥有 128 TB(用户态 8 TB 起步)。
| 机制 | 说明 |
|---|---|
| 虚拟地址空间 (VAS) | 每个进程独立的虚拟地址范围,内核空间在所有进程共享 |
| 页面大小 | 4 KB(标准),2 MB(Large Page),1 GB(Huge Page, x64) |
| 页表结构 | x64:四级页表(PML4 → PDPT → PD → PT → Page) |
| 工作集(Working Set) | 进程当前驻留在物理内存中的页面集合 |
| 页文件 (Pagefile.sys) | 物理内存不足时将页面换出到磁盘 |
| ASLR | 地址空间布局随机化,加固安全 |
| 堆 (Heap) | 进程默认堆 + 可创建私有多堆,支持 LFH(低碎片堆) |
#include <windows.h>
int main() {
// 保留 + 提交 64 KB
LPVOID p = VirtualAlloc(NULL, 65536,
MEM_RESERVE | MEM_COMMIT, PAGE_READWRITE);
if (p) {
strcpy((char*)p, "Hello Virtual Memory!");
VirtualFree(p, 0, MEM_RELEASE);
}
return 0;
}
4.3 I/O 系统
Windows I/O 子系统采用分层驱动模型,核心是 I/O 管理器(I/O Manager),负责将用户 I/O 请求打包为 IRP(I/O Request Packet),依次传递给设备栈中的各层驱动处理。支持同步/异步 I/O、IOCP(完成端口)、分散/聚集 I/O 等。
| 组件 | 说明 |
|---|---|
| I/O Manager | 核心调度器,创建 IRP,递送驱动栈 |
| PnP Manager | 即插即用设备枚举、资源分配 |
| Power Manager | 设备电源状态管理(D0–D3) |
| WDF (KMDF/UMDF) | 现代驱动开发框架,封装 WDM 复杂度 |
| IOCP | I/O 完成端口:高效处理大量并发异步 I/O |
4.4 文件系统 (NTFS)
NTFS (New Technology File System) 是 Windows 的默认文件系统,支持最大卷 8 PB(Windows Server 2019+),特性包括:日志(Journaling)、硬链接/符号链接、压缩、加密(EFS)、稀疏文件、配额、卷影复制(VSS)、事务(TxF)。
| 关键概念 | 说明 |
|---|---|
| MFT (Master File Table) | NTFS 核心元数据表,每个文件/目录至少一条记录 |
| $LogFile | NTFS 日志文件,保证元数据操作原子性 |
| USN Journal | 变更序号日志,记录文件变更以便索引和备份 |
| Sparse File | 仅分配实际非零区域的磁盘块 |
| EFS | 加密文件系统:基于证书的透明文件加解密 |
| VSS | 卷影复制服务:创建快照用于备份 |
| ReFS | 弹性文件系统:面向服务器的高容错文件系统(Server 2012+) |
4.5 安全子系统
Windows 安全基于三大组件:LSA (Local Security Authority)、SRM (Security Reference Monitor)、SAM (Security Account Manager)。每次访问对象时,SRM 根据安全描述符(SD)和访问令牌(Token)进行权限校验。
| 概念 | 说明 |
|---|---|
| 安全描述符 (SD) | 包含 SID、DACL、SACL,挂载在每个安全对象上 |
| ACL / ACE | 访问控制列表 / 访问控制条目,定义允许/拒绝的权限 |
| 访问令牌 | 进程/线程的安全上下文,包含用户 SID、组 SID、特权 |
| 完整性级别 | Low/Medium/High/System,用于 UAC 隔离 |
| 认证包 | Kerberos (域)、NTLM、TLS/SSL 证书 |
| BitLocker | 全卷加密,集成 TPM |
| Windows Hello | 生物识别(指纹/面部/PIN)认证 |
| Credential Guard | 基于虚拟化安全隔离凭据 |
4.6 注册表(Registry)
注册表是 Windows 的配置数据库,以树状层次结构组织键(Key)和值(Value),替代了传统 .ini 文件。由 Configuration Manager 在内核态管理。
| 根键 | 缩写 | 用途 |
|---|---|---|
| HKEY_CLASSES_ROOT | HKCR | 文件关联、COM 注册 |
| HKEY_CURRENT_USER | HKCU | 当前登录用户的配置 |
| HKEY_LOCAL_MACHINE | HKLM | 全局系统硬件和软件配置(最重要) |
| HKEY_USERS | HKU | 所有用户的配置集合 |
| HKEY_CURRENT_CONFIG | HKCC | 当前硬件配置文件的硬件信息 |
4.7 网络栈
Windows 网络栈遵循Winsock 2 SPI 模型,在应用层和协议栈之间提供标准服务提供者接口(SPI),使得同一套 API 可适配多种协议(TCP/IP、蓝牙、红外等)。核心组件包括:
| 组件 | 说明 |
|---|---|
| Winsock (ws2_32.dll) | 网络编程主 API,socket()/connect()/send()/recv() |
| AFD (afd.sys) | Ancillary Function Driver,用户态 socket 到 TCP/IP 协议栈的桥梁 |
| TCP/IP Stack (tcpip.sys) | 内核态 TCP/IP 协议实现 |
| NDIS | 网络驱动接口规范,网卡驱动的标准接口 |
| WFP | Windows 过滤平台:防火墙、入侵检测等可插拔钩子 |
| HTTP.sys | 内核态 HTTP 协议栈,服务于 IIS 和 WCF |
| WinHTTP / WinINet | 高层 HTTP/FTP 客户端 API |
5. Windows 版本简史
| 年代 | 版本 | 内核 | 里程碑 |
|---|---|---|---|
| 1993 | Windows NT 3.1 | NT 3.1 | 首个 NT 内核纯 32 位系统 |
| 1995 | Windows 95 | DOS 9x (16/32混合) | 消费级 GUI 革命 |
| 2000 | Windows 2000 | NT 5.0 | NT 内核统一消费和企业线 |
| 2001 | Windows XP | NT 5.1 | 史上最成功的 Windows 消费版 |
| 2007 | Windows Vista | NT 6.0 | UAC、DWM、WDDM 引入 |
| 2009 | Windows 7 | NT 6.1 | 被广泛用于企业的稳定版本 |
| 2012 | Windows 8 / 8.1 | NT 6.2 / 6.3 | UWP 应用、开始屏幕引入 |
| 2015 | Windows 10 | NT 10.0 | 统一内核、WSL 引入、Windows as a Service |
| 2021 | Windows 11 | NT 10.0 | 全新 UI、DirectStorage、原生 Android 支持 (WSA) |
| 2024 | Windows Server 2025 | NT 10.0 | 热补丁 (Hotpatching)、SMB over QUIC |