11.10 小结

Windows Vista中的内核态由HAL、NTOS的内核和执行体层以及大量实现了从设备服务到文件系统、从网络到图形的设备驱动程序组成。HAL对其他组件隐藏了硬件上的某些差别。内核层管理CPU以支持多线程和同步,执行体实现大多数的内核态服务。

执行体基于内核态的对象,这些对象代表了关键的执行体数据结构,包括进程、线程、内存区、驱动程序、设备以及同步对象等。用户进程通过调用系统服务来创建对象并获得句柄的引用以用于后续对执行体组件的调用。操作系统也创建一些内部对象。对象管理器维护者一个名字空间,对象可以插入该名字空间以备后续的查询。

Windows系统中最重要的对象是进程、线程和内存区。进程拥有虚拟地址空间并且是资源的容器。线程是执行的单元并被内核层使用优先级算法调度执行,该优先级算法使优先级最高的就绪线程总在运行,并且如有必要可抢占低优先级线程。内存区表示可以映射到进程地址空间的像文件这样的内存对象。EXE和DLL等程序映像用内存区来表示,就像共享内存一样。

广告:个人专属 VPN,独立 IP,无限流量,多机房切换,还可以屏蔽广告和恶意软件,每月最低仅 5 美元

Windows支持按需分页虚拟内存。分页算法基于工作集的概念。系统维护着几种类型的页面列表来优化内存的使用。这些页面列表是通过调整工作集来填充的,调整过程使用了复杂的规则试图重用在长时间内没有被引用的物理页面。缓存管理器管理内核中的虚拟地址并用它将文件映射到内存,这提高了许多应用程序的I/O性能,因为读操作不用访问磁盘就可被满足。

设备驱动程序遵循Windows驱动程序模型,并执行输入/输出。每个驱动程序开始先初始化一个驱动程序对象,该对象含有可被系统调用以操控设备的过程的地址。实际的设备用设备对象来代表,设备对象可以根据系统的配置描述来创建,或者由即插即用管理器按照它在枚举系统总线时所发现的设备创建。设备组织成一个栈,I/O请求包沿着栈向下传递并被每个设备的驱动程序处理。I/O具有内在的异步性,驱动程序程序通常将请求排队以便后续处理然后返回到调用者。文件系统卷作为I/O系统中的设备实现。

NTFS文件系统基于一个主文件表,每个文件或者目录在表中有一条记录。NTFS文件系统的所有元数据本身是NTFS文件的一部分。每个文件含有多个属性,这些属性或存储在MFT记录中或者不在其中(存储在MFT外部的块中)。除此之外,NTFS还支持Unicode、压缩、日志和加密等。

最后,Windows Vista拥有一个基于访问控制列表和完整性级别的成熟的安全系统。每个进程带有一个令牌,此令牌表示了用户的标识和进程所具有的特殊权限。每个对象有一个与其相关联的安全描述符。安全描述符指向一个自主访问控制列表,该列表中包含允许或者拒绝个体或者组访问的访问控制入口项,Windows在最近的发行版本中增加了大量的安全特性,包括用BitLocker来加密整个卷,采用地址空间随机化,不可执行的堆栈以及其他措施使得缓冲区溢出攻击更加困难。