1. 程式人生 > >實體地址,實體記憶體,與io記憶體的區別

實體地址,實體記憶體,與io記憶體的區別

實體地址(RAM):cpu發出的地址
實體記憶體(DRAM):只佔實體地址一部分,由/proc/iomem可見,“System RAM” 就是實體記憶體(DRAM)的空間:
>/proc/iomem
00000000-00000fff : reserved
00001000-0009fbff : System RAM
0009fc00-0009ffff : reserved
000a0000-000bffff : PCI Bus 0000:00
000c0000-000c8bff : Video ROM
000e0000-000fffff : reserved
  000f0000-000fffff : System ROM
00100000-202fffff : System RAM
  01000000-01534484 : Kernel code
  01534485-01c0cc8f : Kernel data
  01d59000-02020aa3 : Kernel bss
20300000-23ffffff : RAM buffer
io記憶體: 對外部裝置暫存器(有的外部裝置還有其記憶體)的編址方式,實體地址(RAM)的一部分劃出來用作IO地址空間。由上圖可見,除了DRAM,其他空間有的被外設的暫存器佔用。
虛擬地址:現代作業系統普遍採用虛擬記憶體管理(Virtual Memory Management)機制,這需要MMU(Memory Management Unit)的支援。MMU通常是CPU的一部分,如果處理器沒有MMU,或者有MMU但沒有啟用,CPU執行單元發出的記憶體地址將直接傳到晶片引腳上,被記憶體晶片(實體記憶體)接收,這稱為實體地址(Physical Address),如果處理器啟用了MMU,CPU執行單元發出的記憶體地址將被MMU截獲,從CPU到MMU的地址稱為虛擬地址(Virtual Address),而MMU將這個地址翻譯成另一個地址發到CPU晶片的外部地址引腳上,也就是將虛擬地址對映成實體地址