實體地址,實體記憶體,與io記憶體的區別
阿新 • • 發佈:2019-01-06
實體地址(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晶片的外部地址引腳上,也就是將虛擬地址對映成實體地址。