為什麼 64 位作業系統可以執行 32 位應用程式?

時間 2021-05-31 07:06:38

1樓:pansz

amd64 架構,以及 intel em64t 架構的 CPU ,都實現了一種【在 64 位模式下執行 32 位程式】的方式。

這個模式最初是 amd 設計的,有興趣的可以檢視當年 amd k8 cpu 的技術文件,裡面有非常詳細的描述。——從某種意義上說,intel 的 ia64 之所以失敗,就是因為沒有象 amd 一樣設計出一種在 64 位下執行 32 位程式的 cpu 模式。所以後來只得跟風 amd 設計出 em64t。

Windows 通過 wow64 來支援這種 cpu 模式,這意味著 Win64 本身就帶有了 32 位相關的執行庫,雖然這一套庫很可能是直接把 32 位系統呼叫轉換成對 64 位 winapi 的系統呼叫。

Linux 也直接支援這個模式,當然一般需要安裝 multilib 之類的一些庫才可以在 64 位 Linux 下跑 32 位 Linux 程式。

當然,作業系統支援這個模式只能在使用者層,核心態還是必須 64 位,因而驅動程式都需要 64 位。

順便說一下,事實上,對於 amd64/em64t 架構的 cpu ,不但能夠在 64 位模式下執行 32 位應用程式,還可以在 32 位模式下執行 64 位程式。這一點至少目前 Linux 是可以做到的(當然,要做到這一點你需要在你的 32 位Linux下安裝64位相關的執行庫)。補充:

據狼大人反映,類似的技術在 OSX 上面已經運用多年。

都說64位作業系統比32位的快,怎麼感覺同樣配置還是32的快啊?

張三瘋 誰說的 64位比32位快的 個人理解是 64位cpu可以管理更多的記憶體硬碟裝置啥的。32位記憶體有最大的限制 64位也有但是基本上你達不到那個限制 戮世帝尊 這個位數指的是CPU GPRs General Purpose Registers,通用暫存器 的資料寬度為64位,64位指令集就是...

為什麼要學作業系統?

JavaGuide 作業系統中的很多思想 很多經典的演算法,你都可以在我們日常開發使用的各種工具或者框架中找到它們的影子。比如說我們開發的系統使用的快取 比如 Redis 和作業系統的快取記憶體就很像。CPU 中的快取記憶體有很多種,不過大部分都是為了解決CPU處理速度和記憶體處理速度不對等的問題。...

為什麼作業系統 linux 是以fork exec的形式建程序

Will 說一下我的粗淺理解 因為關於程序執行,必定存在以下三種需求 1 建立乙個新程序並執行 2 將乙個正在執行的程序fork成若干個繼續執行3 不需要終止程序,就能讓程序直接載入新的程式檔案功能2或3去掉任何乙個,都沒法用剩下的兩個代替實現,而功能1卻可以用2和3來代替實現。換句話說功能1和2,...