2012-03-30 45 views
2

OS X Lion(10.7)OS在活動監視器報告的大多數64位二進制文​​件上運行。 考慮到這一點以及我的筆記本電腦運行32位版本的EFI以及32位內核的事實,通常如何進行混音工作?達爾文內核架構和OS X,32位內核上的64位,這是如何工作的?

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不能撤消。

希望這個問題不夠清楚..

回答

4

x86-64架構是相當複雜的;它不僅具有64位模式和32位模式,而且具有兩種主要模式(長時間和傳統模式),每種模式都有多種子模式(請參閱Wikipedia article)。

在傳統模式下,CPU本質上模擬32位CPU。它有各種子模式(真正的,受保護的等),但不能切換使用64位指令或尋址。一般來說,不支持64位的操作系統將以此模式運行。

在長模式中,CPU具有64位的能力,但也可以在32位和16位的「相容性」模式下運行。模式切換由代碼段描述符中的L和D標誌控制(請參閱this PDF中的「擴展x86 for the 64-bit World」) - 實質上,不同的內存段可以標記爲包含64,32,或16位代碼,並且CPU切換到當前正在運行的代碼段的適當模式。內核的代碼段可以獨立於運行應用程序的代碼段標記爲64位或32位。

所以原則上很簡單。在實踐中,我確信有很多我並沒有意識到的複雜問題(我並不十分了解上下文切換過程),但只要操作系統「知道」它正在運行在64位CPU並適當地配置代碼段描述符,在32位內核下運行64位進程沒有根本問題。

順便說一句,早在10.3版本,BTW OS X也可以在PowerPC G5 CPU上的32位內核下運行64位進程。 PPC CPU具有完全不同的架構,我不知道模式切換如何在那裏工作。

+1

好的答案,+1 :) – Macmade 2012-03-31 14:18:59

1

的EFI和內核是兩回事......
你可以有一個32位EFI具有64位內核。不是這裏的點...

獅子內核通常運行在默認情況下64位模式,除非你強迫它在32位模式下運行。

你叫什麼«弓混合»由x86_64的標準保證的。
64位模式完全向後兼容32位代碼。

以32位模式運行64位代碼是不可能的。
但是,Apple的Mach-O格式解決了這個問題,因爲您可以構建提供32位和64位代碼的二進制文件。

EDIT

顯然,Mac OS X中不具有整體32/64位CPU模式。
我真的不知道這是如何實現的,以及它如何用CPU在內部管理這些東西。

但似乎每個程序都在其「最佳可能模式」下運行。
所以我是不對的,64位原生代碼可與32位內核上運行...

將嘗試進一步看...:)

+0

感謝您的回答。很明顯,我的系統總是啓動32位內核,正如uname報告的那樣。我的問題更多地是關於如何在32b內核上運行64b代碼。我知道相反的情況是常見的地方,即在Linux,Win等 – overscore 2012-03-30 22:55:33

+1

請參閱編輯...:)非常好的問題的方式... – Macmade 2012-03-30 23:02:27