为什么我的 Mac OS X 10.6 内核在 32 位模式下运行?

Cho*_*er3 10 mac 64-bit osx-snow-leopard kernel macos

我有一台配备 4GB 内存的 MacBook Pro (5,1) 运行 10A432 - 但它运行的是 32 位内核。

任何想法为什么它不会在 64 位模式下运行,以及我如何让它这样做?

Lak*_*ake 12

在 Jon Siracusa 的 Snow Leopard 评论中,他讨论了 64 位转换

老虎 豹 雪豹

简短版本是:因为没有“混合模式”,64 位内核需要 64 位内核扩展和驱动程序

由于这些尚未广泛使用,Apple 选择默认为 32 位以避免破坏很多东西。

文章中的说明:

对于所有支持 K64 的 Mac,启动时同时按住“6”和“4”键以选择 64 位内核。要获得更持久的解决方案,请使用 nvram 命令添加arch=x86_64到您的boot-args字符串,或编辑文件/Library/Preferences/SystemConfiguration/com.apple.Boot.plist并添加arch=x86_64到内核​​标志字符串:

...
    <key>Kernel</key>
    <string>mach_kernel</string>
    <key>Kernel Flags</key>
    <string>arch=x86_64</string>
...
Run Code Online (Sandbox Code Playgroud)

要切换回 32 位内核,请在引导期间按住“3”和“2”键,或使用上述技术之一,将“x86_64”替换为“i386”。


Che*_*ion 7

根据泄露给 MacRumors 的内容(因为官方文档在 NDA 下)(来源)只有以下计算机支持运行 64 位内核:

  • 2008 年初的 Mac Pro(MacPro 3,1)
  • 2008 年初的 Xserve (Xserve 2,1)
  • MacBook Pro (15"/17") (MacBookPro 4,1)
  • 2008 年 iMac(iMac 8,1)
  • Unibody MacBook Pro(MacBookPro 5,1 和 5,2)
  • 2009 年初的 Mac Pro(MacPro 4,1)
  • 2009 iMac (iMac 9,1)
  • 2009 年初的 Xserve (Xserve 3,1)。

默认情况下,只有 XServes 使用 64 位内核。

如果您使用64键启动计算机,您将启动 64 位内核,或者根据另一个破坏其保密协议的消息来源,您可以编辑/Library/Preferences/SystemConfiguration/com.apple.Boot.plist添加内核标志或在 nvram 中执行此操作。


Lar*_*gan 7

与大多数其他操作系统不同,在 Snow Leopard 中运行 64 位内核并没有太大好处。在 Windows 和 Linux 中,您需要一个 64 位内核来运行 64 位应用程序。在 OS X 上,您可以使用 32 位内核运行 64 位应用程序。

大多数人似乎担心在 OS X 中运行 32 位内核会限制他们机器的性能或功能,但实际上这不会产生重大的实质性影响。32 位内核支持运行 64 位应用程序,这些应用程序有一个虚拟的 64 位地址空间,由内核映射到 36 位 PAE 地址空间,因此它们的行为与 64 位应用程序相同。位内核,只是具有更多限制的内存使用和内存映射 I/O 到可用范围。Apple 在 32 位内核中处理此地址空间的方式导致物理内存限制为 32 GB,打破了 PAE 的 4 GB 32 位限制。如果使用具有 32 GB 或更少内存的 64 位内核有一个可衡量的好处,那么在性能方面并没有太大的好处。如果你想,64启动时的键。我怀疑你会看到性能上的显着差异。

另一个问题是与设备驱动程序、内核扩展和设备固件的兼容性。对于设备驱动程序和内核扩展,它们需要匹配位、重新编译或重写(特别是如果它们有任何程序集,这些部分在这些类型的代码中是常见的)。Apple 的 EFI 最初只有 32 位,最近一些型号有 64 位固件。为了让操作系统与固件通信,内核和 EFI 的位数必须匹配。涉及与 EFI 对话的事情包括选择启动磁盘或某些电源管理控制(例如,如果您安装了多个 OS X,并且需要在电池耗尽后从睡眠中唤醒)。

那么 64 位内核会有好处吗?性能方面并不是真正在实践中,我可以看到 Apple 为大多数运行 Snow Leopard 的机器使用 32 位内核以获得更好的兼容性的智慧。


Jus*_*ove 5

不幸的是,Jason 的混淆链接隐藏了一条非常有用的信息:

ioreg -l -p IODeviceTree | grep firmware-abi
Run Code Online (Sandbox Code Playgroud)

64 位 EFI Mac 将报告

| | "firmware-abi" = <"EFI64">
Run Code Online (Sandbox Code Playgroud)