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

时间:2012-03-30 22:45:03

标签: macos operating-system 64-bit kernel

OS X Lion(10.7)操作系统主要运行64位二进制文​​件,由Activity Monitor报告。 考虑到这一点,以及我的笔记本电脑运行32位版本的EFI以及32位内核的事实,拱形混音如何工作?

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无法撤消。

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

2 个答案:

答案 0 :(得分:4)

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位进程没有根本问题。

BTW,OS X还可以在PowerPC G5 CPU上的32位内核下运行64位进程,早在版本10.3。 PPC CPU具有完全不同的架构,我不知道模式切换如何在那里工作。

答案 1 :(得分:1)

EFI和内核是两个不同的东西......
你可以拥有一个32位EFI和64位内核。这不是重点...

狮子会内核通常默认运行为64位模式,除非你强制它以32位模式运行。

你称之为“拱形混合”的是x86_64标准 64位模式完全向后兼容32位代码。

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

修改

显然,Mac OS X没有整体32/64位CPU模式 我真的不知道这是怎么可能的,以及它如何通过CPU在内部管理这些东西。

但似乎每个程序都在“最佳模式”下运行 所以我错了,64位本机代码可以运行32位内核......

将尝试进一步看......:)