缓存管理器(第二部分第11章介绍)增强文件io的性能。它可以将最近访问的磁盘数据存在内存中,这有助于加快读操作的速度;还可以推迟磁盘写入,有助于加快写操作的速度。这个机制依赖于内存管理器对内存映射文件的支持。
内存管理器(第二部分第十章介绍)实现虚拟内存,为每个进程提供一个虚拟地址空间,大小可能超过物理内存。内存管理器也对缓存管理器提供底层支持。
逻辑预取器和superfetch(第二部分第十章介绍)通过优化启动过程中的数据加载加速系统启动。
执行体包含四种类型的支持函数,以方便上述组件使用。大约三分之一在WDK中描述了。分类如下
对象管理器 创建管理删除代表系统资源(如进程,线程和同步对象)的windows执行体对象和抽象数据类型。第三章会详细介绍。
高级LPC(Advanced LPC facility ALPC),在客户端和服务端传递消息。ALPC同时也作为RPC的本地传输层。RPC是客户端和服务端通信的工业标准。
公共运行库。如 字符串处理 数学运算 数据类型转换 安全结构处理
执行体支持例程 系统内存分配 互锁内存访问 以及三种特殊类型的同步 资源 快速互斥体 和压栈锁。
执行体也包含其他结构。本书后面会介绍。
内核调试器库。允许调试内核。windbg和kd都实现了KD协议,KD协议可以通过各种传输层传输(如USB IEEE1394)。
用户态调试框架,为用户态调试API发送事件,支持断点和单步跟踪,以及改变线程上下文。
内核事务管理器,为资源管理器提供通用的,两个阶段的提交机制,如事务化注册表(TxR) 和事务化NTFS(TxF).
Hyper-V库。作为Hyper-V栈的一部分,为虚拟机提供内核支持,为虚拟机下运行的部分代码提供优化。
错误数据管理器 为非标准和非兼容性的硬件设备提供服务。
驱动程序验证器,为内核态驱动程序和代码提供校验。
windows事件跟踪,对用户态组件和内核态组件进行事件跟踪。
windows诊断结构,根据诊断场景智能跟踪系统活动。
windows硬件错误架构支持例程,提供通用框架来报告硬件错误。
文件系统运行时库,为文件系统驱动提供通用支持例程。
内核
内核包含Ntoskrnl.exe中一组函数,他们为执行体组件提供基础设施(线程调度,同步服务),和底层硬件架构相关的支持(中断,异常分发)。内核代码主要有C来编写,C语言不方便操作的地方(如特定的指令和寄存器),用汇编。
内核中的许多函数都在WDK中描述,以KE开头。
内核对象
内核提供底层的,定义良好的,可预测的操作系统原语和机制,以方便高层调用。内核通过实现系统机制并避免做决策来和执行体隔离。它把所有的决策留给了执行体,除了线程调度。
在内核之外,执行体用对象来代表线程和其他可共享资源。这些对象需要一些策略,如利用句柄来操作,利用安全检查来进行保护以及创建时推测资源限额。这个负担被内核排斥了。内核实现了一些简单的对象,称为内核对象,帮助内核控制关键处理,支持执行体对象创建。大多数执行体对象封装了一个或者多个内核对象,包括内核定义的属性。
有一组内核对象,称为控制对象,建立语义控制各种操作系统功能。包括APC,DPC,以及IO管理器使用的一部分对象,如中断对象。
另外一组内核对象,称为分发器对象,拥有同步能力,可以改变和影响线程调度。分发器对象包括内核线程,互斥体,时间,内核事件对,信号灯,时钟,可等待时钟。执行体使用内核函数来创建内核对象,构造更复杂的对象。第三章进一步介绍了对象,第五章介绍进程和线程。
内核 处理器控制区域 和控制块(Kernel Processor Control Region and Control BlockKPCR KPRCB)
内核使用一个称为处理器控制区域(processor control region KPCR)的数据结构来保存处理器相关的数据。KPCR包括基本信息如处理器中断分发表(IDT)任务状态段(TSS),全局描述符表(GDT).还包含中断控制器状态,和其他模块共享,如(ACPI驱动程序和HAL)。为便于访问KPCR,在在32为系统上,寄存器fs中保存了一个指针,在x64系统上gs保存了一个指针,在IA64上,KPCR位于0xe0000000ffff0000.。
KPCR包含一个结构,称为内核处理器控制块kernel processor control block
(KPRCB).。和已经文档化的KPCR不同,KPRCB是一个私有数据结构,只被Ntoskrnl.exe使用。它包含调度信息,如当前、下一个、空闲线程。处理器的分发数据库(包含每个优先级的就绪队列):DPC队列;CPUID(模型,步长,速度,特性位)。CPU和NUMA拓扑(节点信息,内核,逻辑处理器等等);缓存大小,时间统计信息(DCP和中断时间)KPRCB也包含处理器的统计信息,如IO统计信息,缓存管理器统计信息(参考第二部分第11章),DPC统计信息,内存管理器统计信息(第二部分第十章)。KPRCB有时也用来保存一些结构来优化内存访问,特别是在NUMA系统上。这些结构基于每个处理器,并且是缓存对齐的,如换页和非换页内存池旁视链表就存在KPRCB中。
(KPRCB).。和已经文档化的KPCR不同,KPRCB是一个私有数据结构,只被Ntoskrnl.exe使用。它包含调度信息,如当前、下一个、空闲线程。处理器的分发数据库(包含每个优先级的就绪队列):DPC队列;CPUID(模型,步长,速度,特性位)。CPU和NUMA拓扑(节点信息,内核,逻辑处理器等等);缓存大小,时间统计信息(DCP和中断时间)KPRCB也包含处理器的统计信息,如IO统计信息,缓存管理器统计信息(参考第二部分第11章),DPC统计信息,内存管理器统计信息(第二部分第十章)。KPRCB有时也用来保存一些结构来优化内存访问,特别是在NUMA系统上。这些结构基于每个处理器,并且是缓存对齐的,如换页和非换页内存池旁视链表就存在KPRCB中。