2010-07-02 80 views
4

快速概要:在x86-64模式下,遠遠落後於x86-32模式?x86-64和遠程調用/跳轉

在x86處理器,跳躍分爲三類:

  • 短,與PC偏移的+/- 127個字節(2字節指令)
  • 附近,具有+/- 32K偏移「輥上」當前段(3字節指令)
  • 遠,這可以在任何地方跳(5字節的指令)

短和靠近跳躍需要1-2個時鐘週期,而遠跳取50 -80個時鐘週期,具體取決於處理器。從我閱讀文檔的時候,這是因爲他們「脫離目前的代碼段CS」。

在x86-64模式下,不使用代碼段 - 段實際上始終爲0..infinity。埃爾戈,不應該因爲去一個細分市場而受到懲罰。

因此,問題:如果處理器處於x86-64模式,時鐘週期數是否會因遠跳而改變?

相關獎金問題: - 通過頁表>物理轉換完全在32位保護模式下運行大多數* nix-like操作系統明確設置分割大小來0..infinity和管理的線性。從遠程調用的時間(更少的時鐘週期)來看,他們是否從中受益?還是從8086開始,大小段寄存器中的內部CPU遺留問題真的成爲了損失?

+1

您對\ * nix系統的評論也適用於Windows,AFAIK。我不認爲有任何實際使用代碼段的現代操作系統。 – 2010-07-02 17:53:44

回答

1

CS不僅用於基本和限制,還用於權限。所述CPL被編碼在那裏,以及其它領域,例如:

  • d位 - 32位或16位的默認段大小
  • L位 - 爲對選擇兼容性或64位模式段(在這種情況下,基數和限制是顯着的)

遠跳也可以通過任務門,而遠程調用也可以通過調用門。無論64位模式如何,所有這些都必須處理。總之,64位模式下的遠程跳轉不會比32位模式下的跳變快。事實上,考慮到當被啓用64位模式下,段描述符是兩倍大時64位模式下被禁用,所有描述符表的訪問被加倍,這可以延長跳躍時。