?是否可以在i686 Linux(x86,32位)上启动x86_64代码?我的CPU是现代的Core 2,它本身可以运行x86_64 64位代码,但操作系统是32位。
要启动的代码是纯粹的数学,它几乎不需要与OS进行交互。
我想测量一下,与32位模式相比,我的程序在64位模式下的速度有多快。该计划是解决巨大的组合问题,全尺寸运行是几十个小时。
我可以使用qemu启动64位代码,但它不是本机执行,qemu中的速度与实际cpu速度无关。
答案 0 :(得分:3)
如果没有某种形式的仿真,您将无法在32位内核上运行x86_64程序。 (另一种方式可以正常工作,没有仿真。)
为了能够在x86_64上运行64位代码,您必须输入“长模式”,这需要设置适当的页表(以及其他内容)。 32位内核不会做任何64位页表或映射。因此用户空间代码无法进入64位模式。可能有一些内核帮助,但32位内核根本就没有为这种事情做好准备。
既然您可以使用64位内核运行32位代码,那么现在没有理由不使用64位内核,尤其是如果您有一些代码可以从64位模式中受益(特别是更多的寄存器)。
为什么不从64位live-cd启动?或者在单独的磁盘或分区上安装64位分发版?
答案 1 :(得分:1)
使用vmware;如果CPU支持它,它将在32位主机操作系统上正常运行64位虚拟机。
答案 2 :(得分:0)
x86 / x86_64有一个周期精确的模拟器。默认情况下,它将模拟AMD的K8
PTLsim是x86和x86-64指令集的最先进的精确微处理器模拟器和虚拟机。 PTLsim模拟了一个完整的乱序处理器内核,具有广泛的内存和分支推测以及重放,高度可配置的集群微架构,各种问题队列设计,完整的缓存层次结构和内存子系统以及支持硬件。
不幸的是它无法在32位x86上运行x86_64代码(引用常见问题解答)
当然,32位版本的PTLsim缺少x86-64支持
但速度应与实际运行相关,并且有大量信息可供使用。