實體地址和匯流排位址區別

2021-07-15 11:31:49 字數 1131 閱讀 8397

1) 實體地址是與cpu相關的。在cpu的位址訊號線上產生的就是實體地址。在程式指令中的虛擬位址經過段對映和頁面對映後,就生成了實體地址,這個實體地址被放到cpu的位址線上。

(從cpu端看)

2) 匯流排位址,顧名思義,是與匯流排相關的,就是匯流排的位址線或在位址週期上產生的訊號。

外設使用的是匯流排位址。(從裝置端看)

3) 實體地址與匯流排位址之間的關係由系統的設計決定的。在x86平台上,實體地址與pci匯流排位址是相同的。

在其他平台上,也許會有某種轉換,通常是線性的轉換。

比如:cpu需要訪問實體地址是0xfa000的單元,那麼在x86平台上,會產生乙個pci匯流排上對0xfa000位址的訪問。這個單元或者是記憶體中,或者是某個卡上的儲存單元,甚至可能這個位址上沒有對應的儲存器。而在另外乙個平台上,或許在pci匯流排上產生的訪問是針對位址為0x1fa000的單元。

pci裝置匯流排位址與cpu實體地址的區別

1 域的概念

之所以把pci裝置和cpu加紅色高亮,是因為這裡有個域的概念對理解匯流排位址和實體地址很重要,區分這兩個域是理解兩個位址的基礎。

pci裝置域包括: pci裝置,pci裝置上的dma enginer, cpu端的dma 控制器。

cpu域包括: cpu

2 實體地址到匯流排位址的對映 --pci控制器將兩個位址進行相互轉換

實體地址和匯流排位址一一對映,而且在絕大多數平台上,為了簡便,匯流排位址和實體地址起始位址也是一樣的。雖然方便,但是很多開發者弄不清楚某個具體值到底是實體地址還是匯流排位址。有了域的概念,就好理解多了,如裝置的pci config space 中的bar位址就是匯流排位址,因為它是給裝置用的。而呼叫kernel api pci_resource_start(dev,...) 返回的值則是cpu域的實體地址。

*************************完***********************************

我的理解就是,實體地址一般與cpu有關係,是給cpu指令使用的。而匯流排位址主要是給裝置使用的,是裝置中的一些記憶體資源。如果要cpu的實體地址連線上裝置上的匯流排位址就需要使用mmapi對映,這樣就能將實體地址與匯流排位址鏈結在一起。

邏輯位址 虛擬位址 實體地址 匯流排位址的區別

1 邏輯位址 邏輯位址是最為模糊的概念。understanding the linux kernel 上的解釋是與虛擬位址相關,基於硬體mmu與軟體記憶體管理的乙個概念,具體可以看utlk的第二章記憶體定址,有很詳細的解釋。同一塊記憶體被分別線性對映到這2個位址空間中,無論處理器有無mmu單元,上電...

邏輯位址 虛擬位址 實體地址 匯流排位址的區別

1 邏輯位址 邏輯位址是最為模糊的概念。understanding the linux kernel 上的解釋是與虛擬位址相關,基於硬體mmu與軟體記憶體管理的乙個概念,具體可以看utlk的第二章記憶體定址,有很詳細的解釋。同一塊記憶體被分別線性對映到這2個位址空間中,無論處理器有無mmu單元,上電...

邏輯位址,虛擬位址,實體地址,匯流排位址

很多人可能寫程式這麼多年,都分不清以下幾個位址的概念,亦或是當進入程式設計師行列時由於平台的關係有些概念已經漸漸弱化,沒有趕上那個必須與硬體親密接觸才能夠寫好程式的年代,所以平時也不會接觸到這些概念,但了解這些概念無疑是對程式設計生涯是有好處的,下面就簡述一下這幾個概念的意思。匯流排上的值。包機上,...