Windows
- Windows 内核结构
- 内核对象:内核提供的初级对象,对用户不可见,仅供执行体使用。
- 控制对象:控制除了线程调度以外的内核操作,包括 APC、DPC、中断处理。
- 调度程序对象:包括事件、互斥锁、信号量、内核进程、内核线程等。
- 执行体对象:内嵌内核对象,提供更多的接口。
- 内核对象:内核提供的初级对象,对用户不可见,仅供执行体使用。
- 系统机制
- 陷阱调度
- 功能
- 处理异常(包括系统调用,同步)、中断(异步)、APC、DPC 等。
- 中断按照 IRQL 排序,值越高优先级越高。
- DPC 为 2,APC 为 1,用户线程为 0。
- DPC
- 即延迟过程调用。
- 用于延迟执行不紧急的任务,减少 CPU 停留在高优先级的事件。
- DPC 队列是系统范围的,能记住有哪些工作尚未处理。
- 当 IRQL 降低到 DPC 级别以下时,DPC 中断就产生,执行 DPC 队列的所有任务。
- APC
- 即异步过程调用。
- 每个线程一个 APC 队列,APC 比用户线程更优先执行,对于用户线程是异步的。
- 功能
- 执行体对象管理器
- 对象包括对象头和对象体,对象头由对象管理器创建,对象体由执行体创建。
- 对象头包括对象类型,不同类型的对象体不同。
- 所有同类型对象链接在一起。
- 每个进程 PCB 包括句柄表,引用各种对象。
- 同步
WaitForSingleObject(),使线程和调度程序同步。
- 本地过程调用
- 类似 Unix Domain Socket,处理客户端请求。
- 陷阱调度
- 线程
- 结构
ETHREAD,内嵌KTHREAD。- VAD:虚拟地址描述符。
- 线程状态
- 初始化
- 就绪
- 备用:选好 CPU,等待运行。
- 运行
- 等待
- 传输:内核栈被换到外存的就绪态。
- 终止
- 调度
- 系统可能动态提升线程的优先级,改善性能。
- 同步
- 事件对象
- 互斥体对象
- 信号量对象
- 结构
- 内存管理
- VAD
- 即虚拟地址描述符,表示一段虚拟地址。
- 用平衡二叉树管理。
- 区域对象
- 一种文件映射对象,可以被多个进程共享。
- 原型页表
- 一个页框被多个进程共享时,使用原型页表记录这些页框。
- 区域对象包含原型页表。
- 页置换策略
- 单 CPU:LRU。
- 多 CPU:先进先出。
- VAD
- NTFS
- 文件卷结构
- 分区引导扇区
- 主控文件表:包含所有文件、目录的管理信息。
- 文件数据区:包含真正的数据。
- 组织方式
- 文件系统的所有的成分都是同样基本结构的文件,文件包括各种属性。
- 文件的内容也是属性。
- 不同文件包括的属性不同,易扩展。
- 主控文件表
- 由记录组成,记录包括记录头和若干属性键值对。
- 每条记录 1 KiB,前 16 条保留 NTFS 使用。
- 小文件和小目录直接保存在记录中,小文件使用无名属性保存内容,小目录使用索引根属性保存子项。
- 大文件分为多个 run,MFT 记录每个 run 的 VCN(虚拟的块号)、LCN(物理的块号)、run 长度。
- 大目录中目录项以 B 树组织
- 索引根属性为 B 树根节点。
- 子节点为固定大小 4 KiB 的索引缓冲区。
- 文件引用号
- 低 48 位为文件号,对应 MFT 中的索引位置。
- 高 16 位为文件顺序号,MFT 记录位置被修改后自增。
- 文件卷结构