首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Darwin内核架构和OS,32位内核上的64位,这是如何工作的?

Darwin内核架构和OS,32位内核上的64位,这是如何工作的?
EN

Stack Overflow用户
提问于 2012-03-31 06:45:03
回答 2查看 1.2K关注 0票数 2

据Activity Monitor报道,OS X Lion (10.7)操作系统主要运行在64位二进制文件上。鉴于此,以及我的笔记本电脑运行32位版本的EFI,因此也运行32位内核的事实,arch混合通常是如何工作的?

代码语言:javascript
复制
Darwin Kernel Version 11.3.0: Thu Jan 12 18:48:32 PST 2012; root:xnu-1699.24.23~1/RELEASE_I386

通常情况下,会在x86_64上运行32b二进制文件,但另一种方式则需要将cpu推入64b模式,这是AFAIK无法撤销的。

希望这个问题足够清楚..

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-03-31 13:26:12

x86-64体系结构相当复杂;它不仅仅有64位模式和32位模式,它还有两种主模式(长模式和遗留模式),每种模式都有许多子模式(参见Wikipedia article)。

在传统模式下,CPU基本上模拟32位CPU。它有各种子模式(实数、保护等),但不能使用64位指令或寻址进行切换。通常,不支持64位的操作系统将在此模式下运行。

在长模式下,CPU具有64位功能,但也可以在32位和16位“兼容”模式下运行。模式切换是由代码段描述符中的L和D标志控制的(参见this PDF中的“为64位世界扩展x86”) --本质上,内存的不同部分可以被标记为包含64位、32位或16位代码,并且CPU根据它当前运行的代码段切换到适当的模式。内核的代码段可以被标记为64位或32位,独立于运行应用程序的代码段。

所以原则上来说,这很简单。在实践中,我确信有很多我不知道的复杂性(我对上下文切换过程了解不多),但只要操作系统“知道”它在64位CPU上运行,并适当地配置代码段描述符,在32位内核下运行64位进程就不存在根本问题。

顺便说一句,OS也可以在PowerPC G5 CPU上的32位内核下运行64位进程,最早可以追溯到10.3版。PPC CPU具有完全不同的体系结构,我不知道模式切换是如何在那里工作的。

票数 4
EN

Stack Overflow用户

发布于 2012-03-31 06:52:15

EFI和内核是两个不同的东西...

您可以使用32位EFI和64位内核。这不是重点。

Lions的内核通常默认运行的是64位模式,除非你强制它在32位模式下运行。

你所说的“拱门混合”是由x86_64标准保证的。

64位模式完全向后兼容32位代码。

以32位模式运行64位代码是不可能的。

但苹果的Mach-O格式解决了这个问题,因为你可以构建提供32位和64位代码的二进制文件。

编辑

显然,Mac没有整体的32/64位CPU模式。

我真的不知道这是怎么可能的,以及它是如何在内部管理CPU的东西的。

但似乎每个程序都是在其“最佳可能模式”下运行的。

所以我错了,64位本机代码可以在32位内核上运行…

会试着看得更远一些。:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9951287

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档