在32位内核上运行64位Userland软件需要什么?


10

在Linux和Windows上,我习惯于以下情况:我需要64位内核才能拥有具有multiarch / WoW的系统,在该系统中可以并行运行32位和64位软件。

然后,几年前,当有人向我展示MacOS 10.6 Snow Leopard可以在32位模式下运行带有内核的64位应用程序时,我大为震惊。现在这可能在很大程度上被忘记了,因为这是一次技术转换。据我所知,随着硬件在移动领域的领先地位,就我所知,在将iOS和Android移植到64位系统时,这是永远不需要的。

我的问题:在32位Linux内核(i386或armhf)中获得相同的功能需要什么?

我了解这可能并不简单。如果是这样,Microsoft可能会将其放入32位Windows XP中。一般要求是什么?有没有提议的补丁或概念证明?

在嵌入式世界中,我认为这将特别有帮助,因为64位支持可能会在设备驱动程序中长期滞后。


您确定Snow Leopard可以运行具有32位内核的64位应用程序吗?IIRC内核也已在功能强大的硬件上更新为64位。
大师

5
没关系,您说得对:superuser.com/a/340591/334516
muru,

Answers:


16

运行64位应用程序需要内核的一些支持:内核至少需要设置页表,中断表等以支持在CPU上运行64位代码,并且它需要保存完整的64位在应用程序之间切换(以及从应用程序到内核再到内核)之间切换时的上下文。因此,纯32位内核不能支持64位用户空间。

但是,内核可以在内核空间中运行32位代码,同时在用户空间中支持64位代码。这涉及到与使用64位内核运行32位应用程序所需的支持类似的处理:基本上,内核必须支持应用程序期望的64位接口。例如,它必须为64位代码提供某种机制以调用内核,并保留参数的含义(双向)。

然后的问题是,这是否值得。在Mac和其他一些系统上,可以这样做,因为支持32位内核代码意味着驱动程序不必全部同时进行切换。在Linux上,开发模型是不同的:进行大的更改时,内核中的任何内容都会根据需要进行迁移,内核开发人员实际上并不支持内核之外的任何内容。用64位内核支持32位用户区无疑是有用的,值得付出努力(至少是在添加x86-64支持时),我不确定是否有必要在32位处理器上使用64位位...


谢谢,这是有帮助的,尽管现在吉尔斯指出了他对unix.stackexchange的相关回答,但我认为对完整性的要求更高。从我收集的评论流中隐藏的内容来看,由于架构上的限制,显然在armhf上这仍然是不可能的,而在理论上对i386可行吗?需要说明的理由:最初的动机是Raspbian,该基金会的路线图是在保持与Pi Zero兼容的同时,保持未来几年的单个内核。
jdonald '18

3

Snow Leopard能够在Intel 64位CPU中运行64位二进制文​​件。

当您的efi已经是64位(我的Macbook“过渡模型” pro的生产批次已经是这样的机器)时,它也可以使用64位内核启动。

无需进行任何仿真,以32位模式公平启动时,您只需付出较小的性能成本。

在纯32位CPU中,您将无法执行此操作,因为它们不知道如何解释64位代码。除非您使用软件进行仿真,否则对于那些传统上功能不足的嵌入式计算机而言,这将会减慢速度。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.