据我了解,从 16 位到 32 位,架构并没有发生太大变化,那么为什么我们需要 XP 模式等才能在 Windows 7 64 位中运行 32 位应用程序?
还是我理解错了?
答案1
它可以很好地运行 32 位程序。但无法运行 16 位程序。
XP 模式是一种保险 - 如果某个软件无法在 7 上运行(32 位或 64 位 - 专业版及以上版本均提供 XP 模式),那么您可以在 XP 模式下运行它。我还没有遇到过这种情况,但这可能是针对那些“你可以从我垂死的手中夺走 XP”的人。
在大多数情况下,兼容模式就可以了
答案2
我希望这可以解释一下不兼容性:
微软决定在 64 位版本中加强对内核的控制。设备驱动程序对硬件的访问级别与内核相同,因此出于安全性考虑,64 位版本中更改了一些具体内容:
- 驱动程序必须经过 Microsoft 签名才能加载。
- 我不知道 32 位驱动程序在技术上是否可以与 64 位内核兼容(不太可能),但微软不会使用 64 位内核所需的密钥签署新的 32 位驱动程序。因此所有现有的 XP 32 位驱动程序都无法在 64 位 Vista/7 上运行。
- 驱动程序不能覆盖或修补内核。
微软还改用了新的视频显示驱动程序模型 (LDDM),但保留了旧模型 (XDDM)。旧模型 XDDM 不支持 Aero。
有些程序会动态加载定制的设备驱动程序来完成任务。这些程序肯定无法在 Vista/7 上运行。
Microsoft 在 Vista/7 中更新了相当多的组件。这可能意味着这些组件的未记录行为会发生变化。依赖这些组件中的错误或未记录的 DLL 函数的程序也会有问题。
答案3
32 位程序在 64 位 Windows 下应该可以正常运行。
XP 模式适用于与 Windows Vista 和 Windows 7 不兼容的程序。
看这篇 Ars Technica 文章了解更多信息。
随着 Windows Vista 的发布,这个问题真正达到了顶峰。Vista 与 XP 的兼容性非常好,但并不完美。微软在 Vista 上做了很多工作来加强它对攻击的防御能力(当然是 UAC,但也包括其他方面,比如禁止服务与用户交互),这些修改和改进,以及更新 Windows 的版本号等更普通的东西,合谋破坏了一些旧软件。