1. 程式人生 > >PCI簡介(二)

PCI簡介(二)

http height ont justify 技術 water 32位 top 發送

1.x86處理器系統地址空間簡介

1.1 CPU地址空間

CPU地址空間是指CPU所能尋址的空間大小,比如對於32位CPU來說,其所能尋址的空間大小為0~4G。這是由CPU自身的地址總線數目決定的。這段空間也被稱作CPU物理地址空間。

1.2 內存地址空間

內存地址空間就是指內存控制器所能尋址的空間大小。在x86處理器系統中,內存地址空間是CPU地址空間的一部分。在32位x86系統中,並不是所有的內存地址空間都能被系統使用,如下圖所示:

技術分享圖片

如上圖所示,左側0~4G為CPU所能尋址的地址空間,紅框內的空間是能被CPU識別的內存地址空間。右側為內存控制器所能尋址的空間,大小為4GB,但是只有一部分空間能被CPU所識別。這就是為什麽4GB內存在32位x86系統只能被識別為3G多的原因,因為剩下的CPU地址空間被其他設備占用了,比如PCI設備、Local APIC或者IO APIC等,這些CPU地址空間對應的是這些設備的寄存器區域。

1.3 設備的內存映射空間

這裏的設備內存映射空間是指硬件機制上實現的設備寄存器訪問方式映射,而不是指MMU中虛擬地址到物理地址的映射。CPU通過CPU地址空間中的內存地址空間能訪問內存設備,大概的訪問流程如下圖所示:

技術分享圖片

CPU發送相關信號給北橋,告知其要訪問內存,然後北橋通過內存控制器來訪問內存設備。在匯編指令級別,這是通過MOV指令實現的,比如MOV eax,[mem addr],就能觸發北橋通過內存控制器訪問內存。

在CPU地址空間中有一段空間叫做PCI Memory Range,這段空間也叫做PCI設備寄存器映射區。CPU通過訪問這段空間,從而達到訪問PCI設備的目的。由於這種方式同樣是通過MOV指令實現的,故這種方式被稱為內存映射訪問,意思就是CPU能通過像訪問內存那樣的方式來訪問這些設備。註意,CPU訪問CPU地址空間上的設備都是通過MOV指令來實現的。CPU訪問PCI設備的大概流程如下圖所示:

技術分享圖片

CPU發送相關信號給北橋,告知其要訪問PCI設備,然後北橋通過PCI控制器來訪問PCI設備中的寄存器。

1.4 端口地址空間

端口地址訪問是x86處理器系統中另外一種訪問設備的方式,不同於CPU地址空間,端口地址空間只有64KB大小,為0~65535,這是因為訪問端口時必須將端口地址放入dx寄存器,dx寄存器是16位的,故端口地址空間只有64KB大小。如下圖所示:

技術分享圖片

端口其實就是設備中的寄存器,只不過訪問這些寄存器並不是通過MOV指令來訪問,而是通過IN/OUT指令來訪問。比如在北橋中有一個端口,其地址為0xCF8,訪問這個端口流程如下圖所示:

技術分享圖片

CPU發送相關信號給北橋,告知其要訪問0xCF8端口,北橋發現這個端口屬於自己,直接訪問。


PCI簡介(二)