1.x86處理器系統地址空間簡介3d
1.1 CPU地址空間blog
CPU地址空間是指CPU所能尋址的空間大小,好比對於32位CPU來講,其所能尋址的空間大小爲0~4G。這是由CPU自身的地址總線數目決定的。這段空間也被稱做CPU物理地址空間。內存
1.2 內存地址空間硬件
內存地址空間就是指內存控制器所能尋址的空間大小。在x86處理器系統中,內存地址空間是CPU地址空間的一部分。在32位x86系統中,並非全部的內存地址空間都能被系統使用,以下圖所示:im
如上圖所示,左側0~4G爲CPU所能尋址的地址空間,紅框內的空間是能被CPU識別的內存地址空間。右側爲內存控制器所能尋址的空間,大小爲4GB,可是隻有一部分空間能被CPU所識別。這就是爲何4GB內存在32位x86系統只能被識別爲3G多的緣由,由於剩下的CPU地址空間被其餘設備佔用了,好比PCI設備、Local APIC或者IO APIC等,這些CPU地址空間對應的是這些設備的寄存器區域。db
1.3 設備的內存映射空間img
這裏的設備內存映射空間是指硬件機制上實現的設備寄存器訪問方式映射,而不是指MMU中虛擬地址到物理地址的映射。CPU經過CPU地址空間中的內存地址空間能訪問內存設備,大概的訪問流程以下圖所示:端口
CPU發送相關信號給北橋,告知其要訪問內存,而後北橋經過內存控制器來訪問內存設備。在彙編指令級別,這是經過MOV指令實現的,好比MOV eax,[mem addr],就能觸發北橋經過內存控制器訪問內存。co
在CPU地址空間中有一段空間叫作PCI Memory Range,這段空間也叫作PCI設備寄存器映射區。CPU經過訪問這段空間,從而達到訪問PCI設備的目的。因爲這種方式一樣是經過MOV指令實現的,故這種方式被稱爲內存映射訪問,意思就是CPU能經過像訪問內存那樣的方式來訪問這些設備。注意,CPU訪問CPU地址空間上的設備都是經過MOV指令來實現的。CPU訪問PCI設備的大概流程以下圖所示:ps
CPU發送相關信號給北橋,告知其要訪問PCI設備,而後北橋經過PCI控制器來訪問PCI設備中的寄存器。
1.4 端口地址空間
端口地址訪問是x86處理器系統中另一種訪問設備的方式,不一樣於CPU地址空間,端口地址空間只有64KB大小,爲0~65535,這是由於訪問端口時必須將端口地址放入dx寄存器,dx寄存器是16位的,故端口地址空間只有64KB大小。以下圖所示:
端口其實就是設備中的寄存器,只不過訪問這些寄存器並非經過MOV指令來訪問,而是經過IN/OUT指令來訪問。好比在北橋中有一個端口,其地址爲0xCF8,訪問這個端口流程以下圖所示:
CPU發送相關信號給北橋,告知其要訪問0xCF8端口,北橋發現這個端口屬於本身,直接訪問。