內存映射IO (MMIO) 簡介
來自專欄現代計算機
MMIO(Memory mapping I/O)即內存映射I/O,它是PCI規範的一部分,I/O設備被放置在內存空間而不是I/O空間。從處理器的角度看,內存映射I/O後系統設備訪問起來和內存一樣。這樣訪問AGP/PCI-E顯卡上的幀緩存,BIOS,PCI設備就可以使用讀寫內存一樣的彙編指令完成,簡化了程序設計的難度和介面的複雜性。
基本概念
MMIO(Memory mapping I/O)即內存映射I/O,它是PCI規範的一部分,I/O設備被放置在內存空間而不是I/O空間。從處理器的角度看,內存映射I/O後系統設備訪問起來和內存一樣。這樣訪問AGP/PCI-E顯卡上的幀緩存,BIOS,PCI設備就可以使用讀寫內存一樣的彙編指令完成,簡化了程序設計的難度和介面的複雜性。I/O作為CPU和外設交流的一個渠道,主要分為兩種,一種是Port I/O,一種是MMIO(Memory mapping I/O)。(來自百度百科)
簡而言之,MMIO就是通過將外圍設備映射到內存空間,便於CPU的訪問。I/O作為CPU和外設交流的一個渠道,主要分為兩種,一種是Port I/O,一種是MMIO(Memory mapping I/O)。前者就是我們常說的I/O埠,它實際上的應該被稱為I/O地址空間。
小概念:
32位操作系統,32bit的處理器,擁有32bit定址能力,即可訪問2^32=4G的物理地址,那麼就具有4G內存的識別能力。
物理地址:並不是指物理內存的地址,而是指處理器和系統內存之間所用到的地址,可以理解為CPU最為方便訪問的地址(有別於我們之前所知道的物理地址的定義:段地址*16+偏移地址),而這一個內存並不獨屬於物理內存,而被分成了很多部分,物理內存當然也能夠佔用其中的一部分。
PortIO和MMIO 的主要區別
1)前者不佔用CPU的物理地址空間,後者佔有(這是對x86架構說的,一些架構,如IA64,port I/O佔用物理地址空間)。
2)前者是順序訪問。也就是說在一條I/O指令完成前,下一條指令不會執行。例如通過Port I/O對設備發起了操作,造成了設備寄存器狀態變化,這個變化在下一條指令執行前生效。uncache的MMIO通過uncahce memory的特性保證順序性。
3)使用方式不同
由於port I/O有獨立的64K I/O地址空間,但CPU的地址線只有一套,所以必須區分地址屬於物理地址空間還是I/O地址空間。
推薦閱讀: