摘自:
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暫存器中的基位址暫存器來指定對映的首位...