物理地址空間和虛擬地址空間

http://blog.csdn.net/jiasike/article/details/38852485
一、物理地址(空間)
    因爲CPU是32位的,其地址總線是32位的,所以其地址總線可編碼的個數是2^32(4G),這2^32個物理地址的集合就是物理地址空間。這與38譯碼器的道理是一樣的,這一點很好理解。

二、虛擬地址(空間)
    大多數計算機使用8位的塊,或者叫做字節(Byte),來作爲最小的可尋址的存儲器單元,而不是訪問存儲器中單獨的位。
    機器級程序將存儲器視爲一個非常大的字節數組,稱爲虛擬存儲器。存儲器的一個字節都由唯一的數字來標識,稱爲它的地址(虛擬地址)。所有可能虛擬地址的集合就稱作虛擬地址空間。
                                    ——引自《深入理解計算機系統》P23

從上面這段話,我們可以得到2個信息:
1、虛擬地址依賴於“唯一的數字標識”。
2、虛擬地址空間依賴於“所有可能虛擬地址的集合”
稍稍提煉一下,其實這就是說:虛擬地址空間就是數字可能的表示範圍。
     對於32位CPU而言,數據總線是32位的,所表示的數據或者說字長是32位的。所以數字的可能表示範圍就是2^32(4G)。也就是說,虛擬地址空間是4G。

小小結:
    物理地址空間的大小是由地址總線決定的。
    虛擬地址空間的大小是由字長決定的。

cpu看到的都是vm(虛擬地址)(在開啓mmu之後),所以程序中操作的都必須是映射後的地址空間(無論是內存映射後還是總線上掛載的其他模塊)
內存映射其實就是物理地址映射到虛擬地址空間的一個子集,在映射這個層面內存和掛載在總線上的其他模塊沒有什麼區別

映射表是映射表,內存是內存。內存是映射表的一部分,寄存器也是映射表的一部分。除非你用ioremap把寄存器映射到內存上,否則就是通過總線直接寫寄存器

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章