PCI匯流排位址空間與系統位址空間的關係

2021-06-28 07:33:44 字數 4474 閱讀 1368

1、pci位址空間

pci匯流排具有

32位資料

/位址復用匯流排,所以其儲存位址空間為

2的32次方=4gb

。也就是

pci上的所有裝置共同對映到這

4gb上,每個

pci裝置占用唯一的一段

pci位址,以便於

pci匯流排統一定址。每個

pci裝置通過

pci暫存器中的基位址暫存器來指定對映的首位址。

pci位址空間對應於計算機系統結構中的

pci匯流排。

2、系統位址空間

如果處理器具有32位的位址匯流排,其理論可定址空間為2的32次方=4gb。但這並不意味著記憶體就可以4gb大小,其實xp系統最大記憶體大約為2gb,這與cpu訪問系統中其它裝置的儲存器方式有關(比如cpu訪問pci匯流排上的儲存器)。

計算機系統中在不同的物理位置上存在著不同裝置,不同的裝置又各自具有儲存器,那麼cpu如何訪問這些儲存器呢?cpu把系統中各個裝置的儲存空間對映到乙個統一的儲存空間上,稱為系統儲存空間共4gb,這樣cpu就可以訪問到所有的儲存器。比如pci儲存器對映到從0xfff80000開始的位址空間,顯示卡對映到0xfff00000,再加上作業系統會占用一些空間,就只剩下不到2g能真正分配給物理記憶體了。(具體數值是為解釋需要取的任意值,不代表真實情況)

系統位址空間對應於計算機系統結構中的前端匯流排(fsb)。

3、pci匯流排位址與系統儲存空間轉換對映

我們假設在乙個

32位處理器中,其儲存器域的

0xf000-0000~0xf7ff-ffff(

共128mb)

這段實體地址空間與

pci匯流排的位址空間存在對映關係。

當處理器訪問這段儲存器位址空間時,

host

主橋將會認領這個儲存器訪問,並將這個儲存器訪問使用的實體地址空間轉換為

pci匯流排位址空間,並與

0x7000-0000~0x77ff-ffff

這段pci

匯流排位址空間對應。

為簡化起見,我們假定在儲存器域中只映**

pci裝置的儲存器位址空間,而不對映

pci裝置的

i/o位址空間。而

pci裝置的

bar空間使用

0x7000-0000~0x77ff-ffff

這段pci

匯流排域的儲存器位址空間。

pci橋的

base

、limit

暫存器儲存「該橋所管理的

pci子樹」的儲存器或者

i/o空間的基位址和長度。值得注意的是,

pci橋也是

pci匯流排上的乙個裝置,在其配置空間中也有

bar暫存器,本節不對

pci橋

bar暫存器進行說明,因為在多數情況下透明橋並不使用其內部的

bar暫存器。下文以圖3

‑2所示的處理器系統為例說明上述暫存器的初始化過程,該處理器系統使用的儲存器域與

pci匯流排域的對映關係如圖3

‑1所示。

注意觀察上圖中pci裝置的bar0暫存器值,如果pci裝置向下級聯了(相當於pci橋),bar0是不變的,而且limit暫存器受pci未繼續級聯(而是直接接了pci裝置)的bar0影響。 在

pci裝置的

bar暫存器中,包含該裝置使用的

pci匯流排域的位址範圍。在

pci裝置的配置空間中共有6個

bar暫存器,因此乙個

pci裝置最多可以使用6組

32位的

pci匯流排位址空間,或者3組

64位的

pci匯流排位址空間。這些

bar空間可以儲存

pci匯流排域的儲存器位址空間或者

i/o位址空間,目前多數

pci裝置僅使用儲存器位址空間。而在通常情況下,乙個

pci裝置使用2到

3個bar暫存器就足夠了。

為簡化起見,我們首先假定在圖3

‑2中所示的

pci匯流排樹中,所有

pci agent

裝置只使用了

bar0

暫存器,其申請的資料空間大小為

16m位元組(即

0x1000000位元組)

而且不可預讀,而且

pci橋不占用

pci匯流排位址空間,即

pci橋不含有

bar空間。並且假定當前

host

主橋已經完成了對

pci匯流排樹的編號。

根據以上假設,系統軟體該

pci匯流排樹的遍歷過程如下所示。

(1)系統軟體根據

dfs演算法,系統軟體率先尋找到第一組

pci裝置,分別為

pci裝置31和

pci裝置

32[1]

,並根據這兩個

pci裝置需要的

pci空間大小,從

pci匯流排位址空間中

(0x7000-0000~0x77ff-ffff)

為這兩個

pci裝置的

bar0

暫存器分配基位址,分別為

0x7000-0000

和0x7100-0000。

(2)當系統軟體完成

pci匯流排

3下所有裝置的

bar空間的分配後,將初始化

pci橋

3的配置空間。這個橋片的

memory base

暫存器儲存其下所有

pci裝置使用的「

pci匯流排域位址空間的基位址」,而

memory limit

暫存器儲存其下

pci裝置使用的「

pci匯流排域位址空間的大小」。系統軟體將

memory base

暫存器賦值為

0x7000-0000

,而將memory limit

暫存器賦值為

0x200-0000。

(3)系統軟體回朔到

pci匯流排

2,並找到

pci匯流排2上的

pci裝置

21,並將

pci裝置21的

bar0

暫存器賦值為

0x7200-0000。

(4)完成pci匯流排2

的遍歷後,系統軟體初始化

pci橋

2的配置暫存器,將

memory base

暫存器賦值為

0x7000-0000

,memory limit

暫存器賦值為

0x300-0000。

(5)系統軟體回朔到

pci匯流排

1,並找到

pci裝置

11,並將這個裝置的

bar0

暫存器賦值為

0x7300-0000

。並將pci橋1

的memory base

暫存器賦值為

0x7000-0000

,memory limit

暫存器賦值為

0x400-0000。

(6)系統軟體回朔到

pci匯流排

0,並在這條匯流排上發現另外乙個

pci橋,即

pci橋

4。並使用

dfs演算法繼續遍歷

pci橋

4。首先系統軟體將遍歷

pci匯流排

4,並發現

pci裝置41和

pci裝置

42,並將這兩個

pci裝置的

bar0

暫存器分別賦值為

0x7400-0000

和0x7500-0000。

(7)系統軟體初始化

pci橋

4的配置暫存器,將

memory base

暫存器賦值為

0x7400-0000

,memory limit

暫存器賦值為

0x200-0000

。系統軟體再次回到

pci匯流排

0,這一次系統軟體沒有發現新的

pci橋,於是將初始化這條匯流排上的所有

pci裝置。

(8)pci匯流排0

上只有乙個

pci裝置,

pci裝置

01。系統軟體將這個裝置的

bar0

暫存器賦值為

0x7600-0000

,並結束整個

dfs遍歷過程。

PCI匯流排位址空間與系統位址空間的關係

摘自 1 pci位址空間 pci匯流排具有 32位資料 位址復用匯流排,所以其儲存位址空間為 2的32次方 4gb 也就是 pci上的所有裝置共同對映到這 4gb上,每個 pci裝置占用唯一的一段 pci位址,以便於 pci匯流排統一定址。每個 pci裝置通過 pci暫存器中的基位址暫存器來指定對映...

PCI匯流排位址空間與系統位址空間的關係

1 pci位址空間 pci匯流排具有 32位資料 位址復用匯流排,所以其儲存位址空間為 2的32次方 4gb 也就是 pci上的所有裝置共同對映到這 4gb上,每個 pci裝置占用唯一的一段 pci位址,以便於 pci匯流排統一定址。每個 pci裝置通過 pci暫存器中的基位址暫存器來指定對映的首位...

PCI匯流排位址空間與系統位址空間的關係

摘自 1 pci位址空間 pci匯流排具有 32位資料 位址復用匯流排,所以其儲存位址空間為 2的32次方 4gb 也就是 pci上的所有裝置共同對映到這 4gb上,每個 pci裝置占用唯一的一段 pci位址,以便於 pci匯流排統一定址。每個 pci裝置通過 pci暫存器中的基位址暫存器來指定對映...