Windows 8 是怎樣做到同時支持 ARM 和 x86 架構的?


Linux 等操作系統如何做到,Windows 8 就如何做到。

Source 級別,把內核分為 architecture dependent 和 arch independent 兩個部分。前一部分對 x86 和 ARM 分別編寫。然後把內核分別編譯成 x86 和 ARM 兩套二進位。

和微內核沒有必然關係。


當年 NT 就支持過 DEC Alpha 和 X86

現在 win8 支持 ARM 並不困難。

不過第三方發布的二進位軟體就蛋疼了……


先從wikipedia弄張windows2000的系統架構圖片過來(實際上這架構對於所有WinNT架構的操作系統都適用,直到Windows 8)。

這張圖片可以明確地看出,Windows是Hybrid架構,即:它既不是Microkernel也不是Macrokernel。借鑒了Mach的Micro架構,但是實際在內核態運行的要遠遠比Microkernel要多。關於這點微軟自己的白皮書也有明確的說法

http://technet.microsoft.com/library/cc750820.aspx

他們自己認為在micro的靈活和macro的高效之間只見取得了很好的平衡,達到了"sweetspot"。話說回來,實際上windows對底層硬體的抽象是通過HAL層完成的,這一層用到了大量同處理器架構相關的代碼,為了效率也大量用了彙編語言編寫。至於之上的操作系統都是和硬體無關的。Windows設計的目標之一就是硬體無關性。所以windows的硬體無關性要遠遠超出一般人認為的"wintel"概念。實際上,windows NT架構支持過如下的處理器架構

  • x86 (32位,大家最熟悉啦)

  • MIPS R3000/R4000 (Windows NT 4放棄)

  • DEC Alpha (Windows NT 4放棄)

  • PowerPC (這個Mac OS也支持過!NT4 放棄)

  • Itanium (Windows Server R2以後不支持)

  • x64 (唔,32x2啦)

  • ARM (Windows 8以後支持)

當然,支持和放棄的決定,最終都是由市場說了算,所以這不是第一次,也很可能不會是最後一次微軟支持一個新的處理器架構。所以沒什麼好大驚小怪的。操作系統在不同硬體上的工程實現早就是成熟的事情,類似的例子是Mac OS從PowerPC遷移到x86/x64架構。

另外再附上一張從wikipedia無恥地抄來的Windows家族族譜,對了,Windows Phone8也是基於NT架構的,所以運行Windows Phone 7及更舊的windows移動操作系統的手機將無法官方升級到Windows Phone 8。


Kernel/native 當然要重新編譯。App可以用.Net Framework


跟Windows之前支持x86和x64是一樣的吧,只是一個擴展。處理器相關的HAL, 內核與處理器相關的部分,比如硬體上下文,內存頁表等,不管是彙編還是C,都是要重寫的。用戶態的程序把PE文件格式擴展一下,重新編譯,也差不多了吧,也就是說,微軟的VC++編譯器也要支持Arm的編譯目標。


你在系統目錄下能找到一個hal.dll據說這三個字母就是「硬體抽象層」的縮寫。


使用微內核了。簡單地說就是內核部分只承擔硬體抽象化的工作,其餘所有的工作由基於內核的函數庫完成。

內核部分由c++/彙編完成,也只有這部分與硬體有關,微軟只要寫一份arm的內核,一份x86的內核,一份x64的內核就好了。


應用軟體用 .net編寫就可以跨平台。

當年pcc時代,.net寫的pcc軟體,拿到x86上也可以運行。

所以在arm平台的win8, 只要軟體是.net寫的,那麼就沒有平台差異了。

所以我一點也不擔心,arm平台軟體的問題。

其實.net可以理解成一個虛擬機,有些地方在抄java


推薦閱讀:

Windows低端平板這段時間是否火了起來?
買不起surface pro,有哪些性價比較高的win8平板?
Windows下有什麼好用、功能強大的截圖工具?
盜版Windows上裝正版Office是不是會心裡覺得怪怪的?

TAG:x86 | Windows8 | ARM架構 |