加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

cpu-architecture – 在32位Windows下使用Amd64指令的轻量级方法

发布时间:2020-12-14 01:45:08 所属栏目:Windows 来源:网络整理
导读:对于某些使用64位变量的CPU绑定代码,使用Amd64指令集而不是x86是有益的.如何在32位 Windows(例如 Windows XP SP3)下完成?当然,我假设一个现代的,支持Amd64的CPU.我排除了工作但重量级的方法:将一个完整的64位操作系统作为虚拟机运行,例如Virtualbox下的Udn
对于某些使用64位变量的CPU绑定代码,使用Amd64指令集而不是x86是有益的.如何在32位 Windows(例如 Windows XP SP3)下完成?当然,我假设一个现代的,支持Amd64的CPU.我排除了工作但重量级的方法:将一个完整的64位操作系统作为虚拟机运行,例如Virtualbox下的Udntu for Amd64.

我知道需要一些程序集,并且会有限制,特别是解决比32位Windows管理更多的内存.但我正在考虑纯粹的计算任务,只需要适量的内存而不需要调用外部函数.

在32位通用OS(无内核修改/特殊驱动程序/管理程序)中无法使用Amd64指令(长模式).

这是因为:

1)使用本机64位指令需要切换到长模式.这是特权行动.如果CPU切换到64位模式,32位操作系统内核无法继续工作,因此在进入内核之前应该切换回来

2)但是内核通常是异步调用的,用于定时器(调度程序)和其他硬件中断(驱动程序).它不会保存64位寄存器,也不会将模式从long更改为protected.

也许可以编写特殊的驱动程序,它将在32位操作系统上执行64位任务,但这种驱动程序更像是64位内核和内核的动态修补程序.我不知道这样的解决方案.

在32位操作系统中运行时,只能使用MMX,SSE,SSE2,SSE3,AVX访问64位ALU和CPU寄存器.

我可以说,当使用64位内核时,Linux,某些BSD,Mac OS X都有一种模式,但用户空间软件是32位.在这种情况下,可以运行32位和64位应用程序,因为内核知道64位模式并且可以访问64位寄存器来执行任务切换.据我所知,MS Windows本身没有这样的模式(W7模拟32位模式,但这被称为我的MS作为模拟器,因此我认为它不是内核中的特性).

其他可能性(这是更好的,你的CPU支持硬件虚拟化),是使用64位虚拟机管理程序(VMware / Xen,其他价格过高的解决方案)与32位和64位客户操作系统. VirtualBox是使用管理程序的另一种选择,可以免费使用.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读