Windows 操作系统深度梳理

Windows 是微软开发的图形化桌面操作系统,基于 Windows NT 内核架构。本文从行为到结构递进梳理:先通过行为图展示系统运作,再通过结构图分解系统组成,最后概述编程接口与关键子系统。

0. 总览

Windows 操作系统核心架构遵循分层设计,分为用户态(User Mode)和内核态(Kernel Mode)两大层级。用户态的应用程序通过子系统 DLL 与内核通信,内核态的核心组件包含执行体(Executive)、内核(Kernel)、硬件抽象层(HAL)以及各类驱动。

核心设计原则:
维度说明
内核类型混合内核(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 提供的核心功能及交互边界。

Windows Use Case Diagram
图 1-1:Windows 操作系统用例图

1.2 活动图 — Windows 启动流程

展示 Windows 从加电到桌面的完整启动过程,涉及固件、引导管理器、内核加载、服务启动、用户登录等多个阶段。

Windows Boot Activity Diagram
图 1-2:Windows 启动流程活动图(带泳道)

1.3 状态机图 — 线程状态转移

Windows 线程在其生命周期中经历多种状态,由调度器(Scheduler)控制状态转移。

Thread State Machine
图 1-3:Windows 线程生命周期状态机

1.4 序列图 — Win32 API 系统调用路径

一个 Win32 API 调用(如 CreateFile)如何穿越用户态到内核态的完整路径。

Win32 Syscall Sequence
图 1-4:Win32 API (CreateFile) 到内核驱动的序列图

2. 结构图(系统"由什么组成")

2.1 组件图 — Windows NT 架构总览

展示 Windows 系统的分层组件架构:用户态子系统、系统服务、执行体、内核、HAL。

Windows NT Architecture
图 2-1:Windows NT 分层架构组件图

2.2 包图 — 内核子系统依赖关系

内核态内部各个管理器(Object Manager、Process Manager、I/O Manager、Memory Manager、Security Reference Monitor 等)之间的依赖关系。

Kernel Subsystems Package Diagram
图 2-2:内核态子系统包图

2.3 类图 — 核心操作系统对象

展示 Windows 对象管理器统一管理的核心对象(文件对象、进程对象、线程对象、事件对象等)以及它们之间的关系。

OS Core Objects Class Diagram
图 2-3:Windows 核心内核对象类图
代码示例 — Win32 对象创建:
// 创建进程
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、网络设备等硬件上部署核心组件。

Windows Deployment Diagram
图 2-4:Windows 硬件拓扑部署图

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 / Direct3DGPU 加速 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(低碎片堆)
代码示例 — VirtualAlloc 使用:
#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 复杂度
IOCPI/O 完成端口:高效处理大量并发异步 I/O
I/O Subsystem Flow
图 4-1:Windows I/O 请求处理流程(同步 vs 异步)

4.4 文件系统 (NTFS)

NTFS (New Technology File System) 是 Windows 的默认文件系统,支持最大卷 8 PB(Windows Server 2019+),特性包括:日志(Journaling)、硬链接/符号链接、压缩、加密(EFS)、稀疏文件、配额、卷影复制(VSS)、事务(TxF)。

关键概念说明
MFT (Master File Table)NTFS 核心元数据表,每个文件/目录至少一条记录
$LogFileNTFS 日志文件,保证元数据操作原子性
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_ROOTHKCR文件关联、COM 注册
HKEY_CURRENT_USERHKCU当前登录用户的配置
HKEY_LOCAL_MACHINEHKLM全局系统硬件和软件配置(最重要)
HKEY_USERSHKU所有用户的配置集合
HKEY_CURRENT_CONFIGHKCC当前硬件配置文件的硬件信息

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网络驱动接口规范,网卡驱动的标准接口
WFPWindows 过滤平台:防火墙、入侵检测等可插拔钩子
HTTP.sys内核态 HTTP 协议栈,服务于 IIS 和 WCF
WinHTTP / WinINet高层 HTTP/FTP 客户端 API
Windows Network Stack
图 4-2:Windows 网络栈分层结构

5. Windows 版本简史

年代版本内核里程碑
1993Windows NT 3.1NT 3.1首个 NT 内核纯 32 位系统
1995Windows 95DOS 9x (16/32混合)消费级 GUI 革命
2000Windows 2000NT 5.0NT 内核统一消费和企业线
2001Windows XPNT 5.1史上最成功的 Windows 消费版
2007Windows VistaNT 6.0UAC、DWM、WDDM 引入
2009Windows 7NT 6.1被广泛用于企业的稳定版本
2012Windows 8 / 8.1NT 6.2 / 6.3UWP 应用、开始屏幕引入
2015Windows 10NT 10.0统一内核、WSL 引入、Windows as a Service
2021Windows 11NT 10.0全新 UI、DirectStorage、原生 Android 支持 (WSA)
2024Windows Server 2025NT 10.0热补丁 (Hotpatching)、SMB over QUIC