在x86(32位)Linux上启动x86_64代码,在x86_64 CPU上运行

时间:2011-06-02 11:58:06

标签: linux x86 x86-64

?是否可以在i686 Linux(x86,32位)上启动x86_64代码?我的CPU是现代的Core 2,它本身可以运行x86_64 64位代码,但操作系统是32位。

要启动的代码是纯粹的数学,它几乎不需要与OS进行交互。

我想测量一下,与32位模式相比,我的程序在64位模式下的速度有多快。该计划是解决巨大的组合问题,全尺寸运行是几十个小时。

我可以使用qemu启动64位代码,但它不是本机执行,qemu中的速度与实际cpu速度无关。

3 个答案:

答案 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支持

但速度应与实际运行相关,并且有大量信息可供使用。