深入WindowsVista内核,第1张

深入WindowsVista内核,第2张

Mark Russinovich是微软平台和服务部门的一名技术人员。他是Microsoft Windows Internals(微软出版社,2004年)的合著者之一,他经常在IT和开发人员会议上发言。

这是系列文章的第一部分,讨论Windows Vista内核中的新内容。这一期,我们将重点介绍进程、线程和I/O的变化;未来的问题将涵盖内存管理,启动和关闭,可靠性和恢复,以及安全性。

本文的范围仅限于Windows Vista & # 8482内核更改,尤其是对Ntoskrnl.exe及其密切相关的组件的更改。请记住,Windows Vista中还有许多其他重大变化,但这些都超出了内核的范围,因此本文将不解释它们。包括shell(如集成桌面搜索)、network(如新IPv6栈和双向防火墙)和下一代图形模型(如Aero & # 8482玻璃、窗户& reg演示基础、桌面窗口管理器和新的图形驱动程序模型)。没有涵盖的内容还包括新的Windows用户模式和内核模式驱动程序框架(UMDF和KMDF),因为它们只能在早期Windows版本的后期安装。

CPU的时钟周期计数

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

所有Windows NT & reg版本,包括Windows Vista程序,大约每隔10毫秒或15毫秒(毫秒)执行一次间隔定时器中断例程,具体取决于硬件平台。这个例程查看被它中断的线程,并更新该线程的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 & reg。诸如播放器11之类的多媒体应用程序是使用能够显示其多媒体特性的新API通过MMCSS注册的。它必须与以下按名称排列的注册表项之一匹配:HKEY _本地_机器\软件\微软\ Windows NT \当前版本\多媒体\系统配置文件\任务

各种任务注册表项可以指定与不同多媒体类型相关的线程获取CPU和GPU资源的首选级别(尽管在Windows Vista中没有实现GPU资源管理)。显示了Windows Vista全新安装后的一个任务注册表项的内容,尽管第三方开发人员可以添加他们自己的任务定义。


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

Windows Media Player在播放音频文件时注册音频任务线程;播放视频时,Windows Media Player注册播放任务线程。当任务的definition注册表项中的BackgroundOnly值设置为True时,MMCSS服务将提升所有表明它们正在前台窗口中运行的线程,并同时传递流。

然而,虽然MMCSS希望帮助多媒体线程获得所需的CPU时间,但它也希望确保其他线程至少可以获得一些CPU时间,以便系统和其他应用程序可以保持响应。因此,MMCSS为其他活动保留一定百分比的CPU时间,并在以下注册表值中指定:HKLM \软件\微软\ Windows NT \当前版本\多媒体\系统配置文件\系统响应性

默认情况下,此百分比为20%;MMCSS监控CPU使用情况,确保当其他线程需要CPU时,在10 ms内升级多媒体线程不超过8 ms为了使多媒体线程不占用剩余的2 ms,调度器将其优先级设置在1-7的范围内。
你可以通过阅读侧栏“查看MMCSS优先级提升”来了解MMCSS如何提升线程优先级。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » 深入WindowsVista内核

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情