我注意到我兄弟的运行 Windows 7 的游戏电脑的 nvidia 690 显卡驱动程序崩溃了,但操作系统本身并没有崩溃,而是声称已经恢复。我很好奇这是怎么可能的?我的印象是,由于内核没有内存保护,驱动程序崩溃会导致整个操作系统崩溃,这是我根据对 Linux 内核的了解得出的结论。Windows 7 如何避免整个操作系统崩溃?
答案1
从 Windows Vista 和 WDDM 驱动程序模型开始,GPU 驱动程序被分为内核和用户模式部分。因此用户模式部分的问题不再会导致 Windows 崩溃。
您看到的功能称为GPU 超时检测与恢复 (TDR). 微软解释这篇文章。
Windows Vista 图形堆栈的视频调度程序组件检测到 GPU 执行特定任务所花费的时间超过允许的量子时间,并尝试抢占此特定任务。抢占操作有一个“等待”超时 - 实际的“TDR 超时”。因此,此步骤是该过程的“超时检测”阶段。Windows Vista 中的默认超时期限为 2 秒。如果 GPU 无法在 TDR 超时内完成或抢占当前任务,则 GPU 被诊断为挂起。
操作系统通知 WDDM 驱动程序已检测到超时,必须重置 GPU。驱动程序被告知停止访问内存,并且在此时间之后不应访问硬件。操作系统和 WDDM 驱动程序收集硬件和其他状态信息,这些信息可能对事后诊断有用。
操作系统重置图形堆栈的相应状态。图形堆栈的视频内存管理器组件清除视频内存中的所有分配。WDDM 驱动程序重置 GPU 硬件状态。图形堆栈采取最终操作并将桌面恢复到响应状态。如前所述,一些较旧的 DirectX 应用程序现在可能只呈现黑色,用户可能需要重新启动这些应用程序。编写良好的 DirectX 9Ex 和 DirectX 10 应用程序处理“设备移除”,可继续正常工作。应用程序必须释放并重新创建其 Microsoft Direct3D 设备及其所有对象。
在 GPU 挂起检测和恢复的整个过程中,桌面没有响应,因此用户无法使用。在恢复的最后阶段,会出现短暂的屏幕闪烁,类似于屏幕分辨率更改时的闪烁。成功恢复桌面后,用户将看到以下信息消息。
如果您经常看到此消息,请查看此知识库文章:
Windows 7 或 Windows Vista 中的“显示驱动程序停止响应并已恢复”错误
http://support.microsoft.com/kb/2665946/en-us
如果您使用 AMD GPU,请查看 AMD 的这篇文章:
如何解决“显示驱动程序停止响应并已恢复”,ATIKMDAG.sys 类型错误
答案2
“崩溃” 是一个非常宽泛的术语。你可能指的是这个气球消息:
显示驱动程序停止响应并已恢复。
它也不是很详细,你应该这样阅读:
您的 GPU 发生了意外情况,但驱动程序已施展魔法将其恢复。不要惊慌,现在情况已得到控制。
所以基本上不是驱动程序崩溃了,而是硬件崩溃了。驱动程序已经尽了最大努力并成功了。当 GPU 崩溃时,引擎盖下发生了什么取决于实现,但通常驱动程序会重置它以确保它没有处于某种异常状态。
我相信 Windows 自 Vista 以来就支持这种形式的 GPU 崩溃恢复,但我记得在大约 8 年前,即 Vista 发布之前,在 XP 上使用 ATI GPU 的华硕卡上看到过类似的自动恢复功能。
答案3
驱动程序没有崩溃,GPU 崩溃了。PC 通过重置 GPU 恢复。
答案4
在 Win7 上我不能肯定,但在其他系统上,驱动程序有顶部和底部。底部很可能会使整个系统崩溃,因为它在公共内存中运行。顶部运行在更高的级别,可以保护它免受损坏其他东西,因此可以通过越界内存请求检测到崩溃,从而在它们破坏其他东西之前捕获它们。