X86架構的幾種位址空間

2021-10-13 04:38:40 字數 1956 閱讀 4920

1.cpu位址空間

cpu位址空間是指cpu所能定址的空間大小,比如對於32位cpu來說,其所能定址的空間大小為0~4g。這是由cpu自身的位址匯流排數目決定的。這段空間也被稱作cpu實體地址空間。

2.記憶體位址空間

記憶體位址空間就是指記憶體控制器所能定址的空間大小。在x86處理器系統中,記憶體位址空間是cpu位址空間的一部分。但是在32位x86系統中,並不是所有的記憶體位址空間都能被系統使用,如下圖:

如圖所示,左側0~4g為cpu所能定址的位址空間,紅框內的空間是能被cpu識別的記憶體位址空間。右側為記憶體控制器所能定址的空間大小為4gb,但是只有一部分空間能被cpu所識別。這就是為什麼4gb內存在32位x86系統只能被識別為3g多的原因,因為剩下的cpu位址空間被其他裝置占用了,比如pci裝置、local apic或者io apic等,這些cpu位址空間對應的是這些裝置的暫存器區域。

3.裝置的記憶體對映空間

注意,這裡的裝置記憶體對映空間是指硬體機制上實現的裝置暫存器訪問方式對映,而不是指mmu中虛擬位址到實體地址的對映。在上圖中,我們可以得知,cpu通過cpu位址空間中的記憶體位址空間能訪問記憶體裝置,大概的訪問流程如下:

cpu傳送相關訊號給北橋,告知其要訪問記憶體,然後北橋通過記憶體控制器來訪問記憶體裝置。在彙編指令級別,這是通過mov指令實現的,比如mov eax,[mem addr],就能觸發北橋通過記憶體控制器訪問記憶體。這是cpu訪問記憶體裝置的情況,那麼cpu如果要訪問別的裝置呢,比如要訪問pci裝置,這是如何實現的?

從第2小節的圖中可以看出,在cpu位址空間中有一段空間叫做pci memory range,這段空間也叫做pci裝置暫存器對映區。cpu通過訪問這段空間,從而達到訪問pci裝置的目的訪問,意思就是cpu能通過像訪問記憶體那樣的方式來訪問這些裝置。注意,cpu訪問cpu位址空間上的裝置都是通過mov指令來實現的。cpu訪問pci裝置的大概流程如下:

cpu傳送相關訊號給北橋,告知其要訪問pci裝置,然後北橋通過pci控制器來訪問pci裝置中的暫存器。

4.埠位址空間

埠位址訪問是x86處理器系統中另外一種訪問裝置的方式,不同於cpu位址空間,埠位址空間只有64kb大小,為0~65535,這是因為訪問埠時必須將埠位址放入dx暫存器,dx暫存器是16位的,故埠位址空間只有64kb大小。如下圖:

埠其實就是裝置中的暫存器,只不過訪問這些暫存器並不是通過mov指令來訪問,而是通過in/out指令來訪問。比如在北橋中有乙個埠,其位址為0xcf8,訪問這個埠流程如下:

cpu傳送相關訊號給北橋,告知其要訪問0xcf8埠,然後北橋發現這個埠是屬於自己的,就直接訪問。

5.x86處理器系統中裝置驅動編寫注意

在ppc和arm處理器系統中,外設的暫存器都是被對映到cpu位址空間上的,所以訪問這些外設暫存器通過readl、writel等系統介面就可以,因為readl、writel這些系統介面最終都會被翻譯為mov指令。但是在x86處理器系統中,還存在著通過埠位址空間訪問裝置的情況,如果乙個裝置的暫存器是通過埠位址來訪問的,那麼就需要用in8、out8等這些系統介面,因為這些系統介面最終會被翻譯為in/out指令。所以在為x86處理器系統下的裝置編寫驅動時,一定要搞清楚裝置的暫存器是通過cpu位址空間來訪問的還是通過埠位址來訪問的。比如顯示卡裝置,有的暫存器是通過cpu位址空間來訪問的,有的暫存器是通過埠位址來訪問的,這時候訪問這些不同方式的暫存器就需要使用不同的系統介面。

最後感謝蛋哥的文章分項。

x86架構中特權級

特權級,可以分為三種 第 一 描述符中的特權級dpl,表示這個段的特權 第 二 選擇子的rpl表示請求方的特權級 第 三 當前特權級,表示正在執行的 段所具有的特權 下面有關特權級知識的總結 第一 對於資料段來說,特權級dpl表示了可以訪問該資料的最低特權。若資料段的dpl為1,那麼只有特權級為0或...

x86架構和arm構架

x86是英特爾公司開發的並且通治了幾十年.x86反應快在pc應用廣泛.86與arm最大不同在於指令集上.x86跟硬體發揮優勢.但是帶來的功耗大.arm構架指令簡單執行起來快功耗也低.現在智慧型手機和平板很火.平板電腦要求便攜和續航能力.arm構架具有低功耗.使之有了市場.那麼為什麼沒有得到普及原因主...

x86架構下的函式引數

這裡就拿x86 64架構下來舉例子,在這個架構下分別用rdi,rsi,rdx,rcx,r8,r9作為第1 6個引數。rax作為返回值 當我們去呼叫函式的時候 long test long a,long b,long c long sum long a,long b,long c,long d,lon...