真傷腦筋...yuzu 寫:因為種種考量,蘋果或許會將mac os x鎖死,繼續只能在自己家的硬體上使用,不會讓任何隨便一台wintel pc來跑mac os x。(當然到底事實會如何也不曉得)
那麼,(1)intel mac硬體能灌微軟系統嗎?(2)到底使用intel晶片的mac,在軟體部份還會再區分mac版跟pc版嗎?還是就都跨平台了呢?
究竟cpu更換的影響是什麼?不知道有沒有電腦程式達人,能為一般mac使用者來解惑?
舉個容易懂的例子,Windows & Linux。RedHat 也是安裝在一般 Wintel PC 上,但是 Windows 還是不能安裝 RedHat RPM,Linux 也不能執行 .exe 檔。
簡單講一下一台能稱的上是一台『電腦』的東西的基本架構好了。
CPU 本身什麼事情都不能做,CPU 只能做運算、邏輯判斷、存取記憶體、I/O 等工作。要用到 DRAM?需要一個 DRAM Controller 來負責 Data path 的切換、Addressing & Banking 切換、DRAM 電容 Refresh 等工作。要用到 IDE?需要一個 IDE Controller 來作裝置識別、啟動、尋找、讀取等工作。這些所有周邊裝置的串連全都是要靠 Firmware,也就是 Basic Input Output System。CPU、控制晶片與 Firmware 三者共同組成電腦的基底層架構。Firmware 決定了 CPU 的各種 I/O 動作與軟、硬體中斷處理。程式的組語控制 CPU,CPU 使用 Firmware 的服務常式連接控制晶片,控制晶片再將資料傳輸給其他周邊裝置。如果基底層架構不同,同樣的一段組語連外部時鐘都讀不到。
上面一層就是作業系統的核心 Kernel。Kernel 主要負責三大工作,分別是『Process』、『Memory』與『Device』。Process 提供應用程式之間的多工或多緒切換,Memory 提供記憶體的存取、配置與釋放,Device 則提供周邊裝置的存取。Kernel 層聯結了更上一層的系統與底層的硬體裝置,對上層提供各種服務界面,對下則需要和底層硬體裝置直接交流。作為這些硬體裝置控制的程式就稱為『Module』。不同的主機板、不同的元件,就需要搭配不同的 Module。
Kernel 之上是作業系統的服務層 Service。包括了 GUI、資料封裝與解構、高階(Buffered)資料存取、外接裝置的驅動程式等。提供各種 API 服務讓應用程式呼叫。
Service 之上則是軟體元件層 Framework。例如 JVM、Cocoa,或是 Win32 的 MFC、OWL、.NET。提供各種資料與控制元件。
Framework 之上的,才是應用程式 Application。
你現在看到的絕大多數、有 GUI 畫面的應用程式,都屬於 Application 範疇。他們不必在意 CPU 與 Firmware 是啥、只要 Framework 提供的服務界面一樣,就能夠毫無問題的執行。注意這個句子:『提供的服務界面一樣』。你問的相容性問題的關鍵就在這裡,這兩個不同平台提供的服務界面並不相同。
假設不管這些程式語言(OBJ-C v.s. C++,或是 Java v.s. MS-J)的問題,也不管程式碼 ELF 檔格式的問題,單從程式碼本身的組語來看,假設一段程式碼要從鍵盤讀一個字,Darwin 編出來的程式碼可能是【跳到服務常式 $00003A89 執行】,那是 Darwin 的鍵盤讀取服務常式的位置(舉例,隨便掰的)。但是在 Win32 平台上,$00003A89 可能不是用來讀取鍵盤的服務常式,而是控制硬碟磁頭位置重置的服務常式。所以這個程式當然不能用。
那麼 Windows 能不能灌到 Intel Based Mac 上?不曉得。今天 Apple 並沒有宣佈 Intel Based Mac 的架構是否與一般 Wintel 機器相同,也未詳述在其上執行 Win32 程式的方式到底是用 CPU 本身的 Virtual 架構,還是 VMware 模擬器。Pentinum 4 這個 CPU 本身就是一個 CISC 指令的 Wrapper 加上 Pipeline 切分到二十幾層的簡單指令核心,能夠玩的花樣太多了。
所以說,換了 CPU,Windows 的程式和 Mac 的程式還是一樣不通。更換 CPU 的真正影響會是什麼?
1. Apple 必須重新撰寫 Kernel 到 Service 層的所有程式。這點似乎已經做到了。
2. 給 PPC 用的程式必須從原始碼重新編譯,否則只能像 68K 程式一樣在模擬器中執行。