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:先进先出。
  • NTFS
    • 文件卷结构
      • 分区引导扇区
      • 主控文件表:包含所有文件、目录的管理信息。
      • 文件数据区:包含真正的数据。
    • 组织方式
      • 文件系统的所有的成分都是同样基本结构的文件,文件包括各种属性。
      • 文件的内容也是属性。
      • 不同文件包括的属性不同,易扩展。
    • 主控文件表
      • 由记录组成,记录包括记录头和若干属性键值对。
      • 每条记录 1 KiB,前 16 条保留 NTFS 使用。
      • 小文件和小目录直接保存在记录中,小文件使用无名属性保存内容,小目录使用索引根属性保存子项。
      • 大文件分为多个 run,MFT 记录每个 run 的 VCN(虚拟的块号)、LCN(物理的块号)、run 长度。
      • 大目录中目录项以 B 树组织
        • 索引根属性为 B 树根节点。
        • 子节点为固定大小 4 KiB 的索引缓冲区。
    • 文件引用号
      • 低 48 位为文件号,对应 MFT 中的索引位置。
      • 高 16 位为文件顺序号,MFT 记录位置被修改后自增。