据Activity Monitor报道,OS X Lion (10.7)操作系统主要运行在64位二进制文件上。鉴于此,以及我的笔记本电脑运行32位版本的EFI,因此也运行32位内核的事实,arch混合通常是如何工作的?
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无法撤销的。
希望这个问题足够清楚..
发布于 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具有完全不同的体系结构,我不知道模式切换是如何在那里工作的。
发布于 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位内核上运行…
会试着看得更远一些。:)
https://stackoverflow.com/questions/9951287
复制相似问题