在Linux和Windows上,我已经习惯了这样一种情况:我需要64位内核才能拥有一个具有多重架构/哇的系统,这样我就可以并行运行32位和64位软件。
几年前,当有人向我展示MacOS 10.6雪豹可以以32位模式运行64位内核应用程序时,这让我大吃一惊。这在很大程度上被人们遗忘了,因为这是一次一次性的技术转型。随着移动领域硬件的领先,据我所知,对于iOS和安卓来说,这在64位的移动过程中从来不需要这样做。
我的问题是:在32位Linux内核(i386或armhf)中获得相同功能需要什么?
我知道这可能不是小事。如果是的话,微软可能会把这个功能放到Windows 32位中.但是,一般的要求是什么?是否曾经有过建议的补丁或概念的证明?
在嵌入式世界中,我认为这将是特别有帮助的,因为在设备驱动程序中,64位支持可能会落后很长时间。
发布于 2018-11-13 07:12:24
运行64位应用程序需要内核的一些支持:内核至少需要设置页面表、中断表等,以支持在CPU上运行64位代码,并且需要在应用程序之间(从应用程序切换到内核和后端)时保存完整的64位上下文。因此,纯32位内核不能支持64位用户空间。
然而,内核可以在内核空间中运行32位代码,而在用户空间支持64位代码。这涉及到处理类似于使用64位内核运行32位应用程序所需的支持:基本上,内核必须支持应用程序所期望的64位接口。例如,它必须为64位代码调用内核提供某种机制,并保留参数的含义(在两个方向上)。
问题是这是否值得。在Mac和其他一些系统上,由于支持32位内核代码意味着驱动程序并不都必须同时进行切换,所以可以这样做。在Linux上,开发模型是不同的:内核中的任何东西都是在进行大更改时根据需要迁移的,内核开发人员并不真正支持内核之外的任何东西。用64位内核支持32位用户当然是有用的,值得付出努力(至少,当x86-64支持被添加时),我不确定在32位上是否需要64位.
发布于 2018-11-13 06:03:27
雪豹能够在英特尔64位CPU中运行64位二进制文件。
当你的efi已经是64位的时候,它也可以用64位的内核启动(我生产的Macbook“过渡模式”pro已经是这样一台机器了)。
不涉及仿真,您只是在32位模式启动时支付了较小的性能成本。
在纯32位CPU中,您将无法做到这一点,因为它们不知道如何解释64位代码。除非你是在模仿软件,这对于那些传统上动力不足的嵌入式机器来说是慢的。
https://unix.stackexchange.com/questions/481382
复制相似问题