深入WindowsVista内核

文章作者 100test 发表时间 2007:09:18 12:12:22
来源 100Test.Com百考试题网


  Mark Russinovich 是 Microsoft 平台和服务部门的技术人员。他是《Microsoft Windows Internals》(Microsoft Windows 内部结构)(Microsoft Press, 2004) 的合著者之一,并经常在 IT 和开发人员会议上演讲。

  这是系列文章的第一部分,探讨的是 Windows Vista 内核中的新增内容。在这一期中,将着重说明在进程、线程和 I/O 方面的更改;在将来几期内容中将涉及到内存管理、启动和关闭、可靠性和恢复以及安全性方面的内容。

  本文的范围仅限于对 Windows Vista™. 内核的更改,尤其是对 Ntoskrnl.exe 和与其紧密关联的组件的更改。请记住,在 Windows Vista 中还存在许多其他重大更改,但这些却超出了内核的范围,因此本文将不予以说明。其中包括对外壳(如集成的桌面搜索)、网络(如新的 IPv6 堆栈和双向防火墙)和下一代图形模型(如 Aero™. Glass、Windows®. Presentation Foundation、桌面窗口管理器和新图形驱动程序模型)的改进。而且未涉及的内容还包括新的 Windows 用户模式和内核模式驱动程序框架(UMDF 和 KMDF),因为在较早的 Windows 版本上它们在后级别才是可安装的。

CPU 时钟周期计数

  Windows Vista 包含了进程和线程方面的大量增强功能,其中包括使用 CPU 时钟周期计数器以较公平地进行 CPU 分配,以及使用新的多媒体类计划程序服务 (MMCSS),它有助于媒体应用程序提供稳定的播放。

  所有 Windows NT®. 版本,包括 Windows Vista 程序在内,大约在每 10 ms 或 15 ms(毫秒)执行一次间隔计时器中断例程,间隔取决于硬件平台。该例程查看它所中断的线程并更新线程的 CPU 使用统计数据,就好像该线程在整个间隔期间都在运行,而事实上,线程可能仅在间隔就要结束前才开始执行。而且,从技术上讲,可能已经为线程分配了 CPU,但却一直没有机会运行,因为执行的是硬件和软件中断例程。

  虽然对于报告线程和进程 CPU 使用情况的诊断工具来说,基于时钟的时间计算是一个好方法,但是,若由线程计划程序使用该方法将导致不公平的 CPU 分配。默认情况下,Windows 客户端版本上的线程最多可运行 2 个时钟节拍(如果是在前台中运行则为 6 个时钟节拍)。然而,根据线程在系统上的行为和其他活动,线程实际上可能在 CPU 上根本没有时间或是最多得到 6 个时钟节拍(如果是在前台中运行则为 18 个时钟节拍)。
  
  两个具有相同优先级的线程同时准备好运行时发生的不公平情况。计划程序假定线程 A 在整个间隔期间内运行时,线程 A 一直运行到下一时间片间隔过期,因此也就可以确定线程 A 已运行完毕。而且,在线程 A 运行期间发生的中断应由线程 A 完全负责。在下一间隔内,计划程序挑选线程 B 来接续,并且要在整个间隔内运行。

  在 Windows Vista 中,计划程序使用现代处理器的时钟周期计数器寄存器精确地跟踪线程所执行的 CPU 时钟周期数。通过估计 CPU 在一个时钟间隔内能够执行的时钟周期数,它可以更准确地在 CPU 上布置轮循。另外,Windows Vista 计划程序不会根据线程的轮循计数中断执行。这就意味着,在 Windows Vista 上,线程始终会得到至少一次在 CPU 上运行的机会,而且永远不会执行多个额外时钟间隔,这使应用程序的行为更公平,也更具确定性。 方法是为两个线程提供至少一个时间片的执行间隔。

  “查看进程的 CPU 使用情况”边栏说明了用户如何通过使用 Process Explorer 实用工具监视进程的 CPU 时钟周期使用情况。

多媒体类计划程序服务

  用户期望多媒体应用程序(包括音乐和视频播放器)能够提供无缝的播放体验。然而,其他同时运行的应用程序(如防病毒、内容索引甚至是邮件客户端)对 CPU 的要求会带来不和谐的因素。为了提供更佳的播放体验,Windows Vista 引入 MMCSS 来管理多媒体线程的 CPU 优先级。
  像 Windows Media®. Player 11 这样的多媒体应用程序使用能够表明其多媒体特性的新 API,通过 MMCSS 进行注册,它必须与下列按名称排列的注册表项之一匹配: HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\Currentversion\Multimedia\SystemProfile\Tasks
  
  各种任务注册表项可指定与不同多媒体类型相关联的线程为 CPU 和图形处理器资源获取的首选级别(尽管在 Windows Vista 中未实现图形处理器资源管理)。显示了在干净安装 Windows Vista 后其中一个任务注册表项的内容,尽管第三方开发人员能够添加自己的任务定义。

  在 %SystemRoot%\System32\Mmcss.dll 中实现且在服务主机 (Svchost.exe) 进程中运行的 MMCSS 具有可在优先级 27 运行的优先级管理线程。(Windows 中线程优先级的范围是从 0 到 31。)此线程将已注册的多媒体线程的优先级推进到另一个范围内,该范围与任务注册表项的计划类别值相关联。在 Windows 中,线程优先级 16 及更高级别处在实时优先级范围内并且高于系统上的其他所有线程(除了内核的内存管理器工作线程,该线程在优先级 28 和 29 运行)。仅管理帐户(如执行 MMCSS 的“本地系统”帐户)具有设置实时线程优先级所需的提升优先级权限。

  在播放音频文件时,Windows Media Player 注册音频任务线程;在播放视频时,Windows Media Player 注册播放任务线程。对于已经指明它们在拥有前台窗口的进程中运行时并且在将任务的定义注册表项中的 BackgroundOnly 值设置为 True 时将同时传递流的所有线程,MMCSS 服务会对其进行提升。

但是在 MMCSS 想要帮助多媒体线程获得所需的 CPU 时间的同时,它还想确保其他线程至少也能获得一些 CPU 时间,这样,系统和其他应用程序才能保持响应能力。因此,MMCSS 为其他活动保留了一定百分比的 CPU 时间,并在以下注册表值中进行指定: HKLM\Software\Microsoft\Windows NT\Currentversion\Multimedia\SystemProfile\SystemResponsiveness
  
  默认情况下,此比例为 20%;MMCSS 监视 CPU 的使用情况,以确保在其他线程需要 CPU 时,在 10 ms 期间内提升多媒体线程所占的时间不超过 8 ms。为了使多媒体线程不占用剩下的 2 ms,计划程序将其优先级设置在 1-7 级的范围内。
您可以通过阅读“查看 MMCSS 优先级提升”边栏了解 MMCSS 是如何提升线程优先级的。


相关文章


修改WindowsVista操作系统登陆声效
InternetExplorer7.0技巧放送
深入WindowsVista内核
巧妙备份解决重装Vista双系统后续问题
WindowsVista无法打开摄像头解决方法
澳大利亚华人论坛
考好网
日本华人论坛
华人移民留学论坛
英国华人论坛