Windows NT 内核架构(主通用模型)流 NT 5.x/10+

结合Windows NT 内核架构 (主流 NT 5.x/10+ 通用模型),分分层架构、核心组件、调用流程三部分整理,附带可视化架构图、模块说明,同时适配 ReactOS 对标体系。

一、Windows NT 整体分层架构(经典双层模型)

Windows 采用用户态 (User Mode) + 内核态 (Kernel Mode) 严格隔离架构,通过系统调用切换权限,硬件资源仅内核态可直接访问。

复制代码
┌─────────────────────────────────────────────────────────────┐
│                        用户态 User Mode                       │
│  权限低、隔离安全,应用程序、服务、外壳全部运行在此层级        │
├─────────────┬─────────────────────────────────────────────┤
│ 应用层      │ 普通应用、记事本、浏览器、Office、第三方软件   │
│ Win32 子系统 │ User32.dll / Gdi32.dll / Kernel32.dll        │
│ 系统进程    │ winlogon.exe、lsass.exe、svchost.exe、explorer │
│ 其他子系统  │ POSIX 子系统、WoW64(32位兼容层)                │
└─────────────┴─────────────────────────────────────────────┘
          ↓ 系统调用 / 中断 / 异常
┌─────────────────────────────────────────────────────────────┐
│                        内核态 Kernel Mode                     │
│ 最高权限,直接操作硬件、内存、CPU、中断,操作系统核心所在      │
├─────────────┬─────────────────────────────────────────────┤
│ 系统执行体   │ 内核主体(ntoskrnl.exe) 绝大多数系统服务       │
│ 内核核心     │ 调度、对象管理、内存管理、I/O、安全、进程线程  │
│ 设备驱动层   │ 各类硬件驱动、文件系统驱动、过滤器驱动        │
│ 硬件抽象层 HAL │ hal.dll 屏蔽硬件差异,适配不同主板/CPU      │
└─────────────┴─────────────────────────────────────────────┘

二、用户态(User Mode)核心组件详解

1. Win32 子系统(最核心,桌面应用依赖)

Windows 桌面生态全部基于该子系统,也是 ReactOS 重点兼容对象:

  1. Kernel32.dll 基础系统服务:进程、线程、文件、目录、注册表、同步对象、内存管理(用户态接口)。
  2. User32.dll 窗口管理:窗口创建、消息循环、菜单、按钮、控件、桌面交互。
  3. Gdi32.dll 图形设备接口:绘图、字体、位图、窗口渲染、打印。
  4. Shell 组件 shell32.dll、explorer.exe(资源管理器 / 桌面 / 任务栏)、控制面板、文件对话框。
  5. COM 组件 系统组件通信标准,外壳、控制面板、大量系统工具均依赖 COM。

2. 关键系统进程

  • smss.exe:会话管理器,系统启动早期核心,创建会话、加载子系统
  • winlogon.exe:登录管理器,负责用户登录、锁屏、会话切换
  • lsass.exe:本地安全授权子系统,身份验证、权限、安全策略
  • svchost.exe:服务宿主进程,承载绝大多数 Windows 系统服务

3. 兼容层

  • WoW64:64 位系统下运行 32 位应用的兼容层,双向转发 API 调用。

三、内核态(Kernel Mode)核心架构(NT 内核本体)

内核态由 4 大层级 组成,从上至下依次为:执行体 → 内核核心 → 驱动程序 → HAL

1. 系统执行体(Executive)

文件:ntoskrnl.exe 主体部分,对外提供系统调用接口,是用户态与内核的桥梁。 包含八大核心管理器:

  • 对象管理器:统一管理所有内核对象(进程、线程、文件、句柄、事件、互斥体等)
  • 进程 / 线程管理器:创建、终止、管理进程与线程,维护进程地址空间
  • 虚拟内存管理器 (VMM):分页、物理内存管理、地址空间映射、缓存、内存保护
  • I/O 管理器:统一管理设备 I/O、驱动调用、异步 IO、文件系统、网络 IO
  • 安全引用监视器 (SRM):权限校验、访问控制、安全审计
  • 配置管理器:内核态注册表读写
  • 电源管理器:电源策略、休眠、待机、硬件节电控制
  • 即插即用管理器 (PnP):硬件枚举、驱动加载、热插拔管理

2. 内核核心(Kernel Core)

同属 ntoskrnl.exe,偏向底层硬件与调度,为执行体提供基础支撑:

  • 线程调度器:CPU 时间片分配、优先级调度、上下文切换
  • 中断与异常处理:硬件中断、CPU 异常、陷阱处理
  • 同步原语:自旋锁、内核信号量、事件、互斥体(内核专用同步机制)
  • 陷阱处理:承接用户态发起的系统调用,完成权限切换

3. 设备驱动层(Drivers)

运行在内核态,直接对接硬件,分层设计:

  1. 高层驱动:文件系统驱动、网络协议驱动、过滤器驱动(加密、压缩、监控)
  2. 类驱动:通用设备驱动(磁盘、键盘、鼠标、显卡、USB 通用协议)
  3. 微型端口驱动:硬件厂商专属驱动,对接具体硬件芯片
  4. 分类:字符设备、块设备、网络设备、总线驱动(PCI/USB/SATA)

4. 硬件抽象层 HAL

文件:hal.dll 作用:屏蔽不同硬件平台差异,让内核不用关心具体主板、CPU、芯片组细节。 负责:硬件中断路由、时钟控制、DMA、主板总线、CPU 平台适配。 ReactOS 同样独立实现多平台 HAL。


四、完整调用流程(示例:打开一个文件)

以「应用双击打开文件」为例,梳理全链路:

  1. 应用程序(用户态)→ 调用 Kernel32.dll 打开文件 API
  2. Kernel32.dll 发起系统调用,陷入内核态
  3. 内核陷阱处理器接收请求,转交 I/O 管理器
  4. I/O 管理器调用 文件系统驱动
  5. 文件系统驱动 调用 磁盘类驱动 + 磁盘微型端口驱动
  6. 驱动通过 HAL 操作物理磁盘硬件
  7. 数据原路逐层返回,切回用户态,应用读取文件内容

五、精简版拓扑图(纯文本,可直接文档使用)

复制代码
【用户态】
应用程序
   │
   ├─ Win32 DLL: Kernel32 / User32 / Gdi32
   ├─ 系统进程: smss / winlogon / lsass / svchost / explorer
   └─ 子系统: WoW64 / COM / Shell
          ↓ 系统调用
【内核态 - ntoskrnl.exe】
   ├─ 执行体(Executive)
   │   ├─ 对象管理器
   │   ├─ 进程/线程管理器
   │   ├─ 虚拟内存管理器(VMM)
   │   ├─ I/O 管理器
   │   ├─ 安全监视器
   │   └─ 配置/电源/PnP管理器
   │
   └─ 内核核心(Kernel)
       ├─ 线程调度
       ├─ 中断/异常处理
       └─ 内核同步
          ↓
【驱动层】文件系统 / 网络 / 磁盘 / USB / 显卡 等驱动
          ↓
【硬件抽象层 HAL (hal.dll)】
          ↓
【物理硬件】CPU / 内存 / 磁盘 / 网卡 / 外设

六、补充:Windows 10/11 现代架构新增模块

在经典 NT 架构基础上扩展:

  1. Hyper-V 虚拟机监控程序:底层虚拟化,隔离内核与用户环境(核心隔离、安全基础)
  2. UMDF / KMDF:微软驱动框架,简化驱动开发,替代传统 WDM 驱动
  3. 容器子系统:基于进程隔离的应用容器
  4. 安全内核 (Secure Kernel):独立安全分区,处理加密、安全启动、隔离权限

该架构完全兼容 ReactOS 开发文档中对应的模块划分,可直接用于学习、文档、绘图参考。

相关推荐
阳光是sunny5 小时前
Vue 项目怎么做用户行为全链路监控?轻量插件方案详解
前端·面试·架构
EMA10 小时前
Docker虚拟化失败解决方案
架构
李斯维11 小时前
从历史的角度看 Android 软件架构
android·架构·android jetpack
JouYY13 小时前
聊一下多 Agent 编排架构的应用实践
架构·llm·agent
Sunia14 小时前
《AgentX 专栏》10-生产部署:3台2C4G云服务器把企业级Agent真正跑起来的完整方案
java·架构
ZhengEnCi2 天前
Q01-高并发点赞系统架构设计
架构
笨鸟飞不快2 天前
从 MVC 到 DDD:一次真实的渐进式迁移实录
后端·架构
这个DBA有点耶2 天前
GROUP BY优化全解:如何写出既不丢数据又飞快的分组查询
数据库·mysql·架构
锋行天下2 天前
我试图优化 Vite 的拆包,结果首屏慢了 10 倍
前端·vue.js·架构