日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

浅谈内存映射I/O(MMIO)与端口映射I/O(PMIO)的区别

發(fā)布時(shí)間:2025/3/15 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 浅谈内存映射I/O(MMIO)与端口映射I/O(PMIO)的区别 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

最近在看NVMeDirect和SPDK的源碼,覺(jué)得有必要梳理一下MMIO和PMIO的區(qū)別。關(guān)于MMIO和PMIO,維基百科上是這么講滴,

Memory-mapped I/O (MMIO) and port-mapped I/O (PMIO) (which is also called isolated I/O) are two complementary methods of performing input/output (I/O) between the central processing unit (CPU) and peripheral devices in a computer. An alternative approach is using dedicated I/O processors, commonly known as channels on mainframe computers, which execute their own instructions.

在計(jì)算機(jī)中,內(nèi)存映射I/O(MMIO)和端口映射I/O(PMIO)是兩種互為補(bǔ)充的I/O方法,在CPU和外部設(shè)備之間。另一種方法是使用專用的I/O處理器,通常為大型機(jī)上的通道,它們執(zhí)行自己特有的指令。

1. MMIO

Memory-mapped I/O (MMIO), 內(nèi)存映射IO。 先上圖,圖片來(lái)源戳這里

從上圖中我們可以看到,在MMIO中,內(nèi)存和I/O設(shè)備共享同一個(gè)地址空間。 MMIO是應(yīng)用得最為廣泛的一種IO方法,它使用相同的地址總線來(lái)處理內(nèi)存和I/O設(shè)備,I/O設(shè)備的內(nèi)存和寄存器被映射到與之相關(guān)聯(lián)的地址。當(dāng)CPU訪問(wèn)某個(gè)內(nèi)存地址時(shí),它可能是物理內(nèi)存,也可以是某個(gè)I/O設(shè)備的內(nèi)存。因此,用于訪問(wèn)內(nèi)存的CPU指令也可來(lái)訪問(wèn)I/O設(shè)備。每個(gè)I/O設(shè)備監(jiān)視CPU的地址總線,一旦CPU訪問(wèn)分配給它的地址,它就做出響應(yīng),將數(shù)據(jù)總線連接到需要訪問(wèn)的設(shè)備硬件寄存器。為了容納I/O設(shè)備,CPU必須預(yù)留給I/O一個(gè)地址區(qū)域,該地址區(qū)域不能給物理內(nèi)存使用。

2. PMIO

Port-mapped I/O (PMIO),端口映射IO,又叫做被隔離的I/O(isolated I/O)。還是先上圖,圖片來(lái)源戳這里

從上圖中我們可以看到,在PMIO中,內(nèi)存和I/O設(shè)備有各自的地址空間。 端口映射I/O通常使用一種特殊的CPU指令,專門執(zhí)行I/O操作。在Intel的微處理器中,使用的指令是IN和OUT。這些指令可以讀/寫(xiě)1,2,4個(gè)字節(jié)(例如:outb, outw, outl)從/到IO設(shè)備上。I/O設(shè)備有一個(gè)與內(nèi)存不同的地址空間,為了實(shí)現(xiàn)地址空間的隔離,要么在CPU物理接口上增加一個(gè)I/O引腳,要么增加一條專用的I/O總線。由于I/O地址空間與內(nèi)存地址空間是隔離的,所以有時(shí)將PMIO稱為被隔離的IO(Isolated I/O)。

3. MMIO v.s. PMIO

?MMIOPMIO
1Same address bus to address memory and I/O devicesDifferent address spaces for memory and I/O devices
2Access to the I/O devices using regular instructionsUses a special class of CPU instructions to access I/O devices, Intel x86 microprocessors - IN and OUT instructions
  • 在MMIO中,IO設(shè)備和內(nèi)存共享同一個(gè)地址總線,因此它們的地址空間是相同的; 而在PMIO中,IO設(shè)備和內(nèi)存的地址空間是隔離的。
  • 在MMIO中,無(wú)論是訪問(wèn)內(nèi)存還是訪問(wèn)IO設(shè)備,都使用相同的指令; 而在PMIO中,CPU使用特殊的指令訪問(wèn)IO設(shè)備,在Intel微處理器中,使用的指令是IN和OUT。

注意: 內(nèi)存映射(MMIO和PMIO)作為一種CPU對(duì)I/O設(shè)備(CPU-to-device)的通信方法,并不影響DMA(直接內(nèi)存訪問(wèn)), 因?yàn)镈MA是一種繞過(guò)CPU的內(nèi)存對(duì)設(shè)備(memory-to-device)的通信方法。

4. 如何實(shí)現(xiàn)MMIO?

在Linux中, 內(nèi)核使用ioremap()將IO設(shè)備的物理內(nèi)存地址映射到內(nèi)核空間的虛擬地址上; 用戶空間程序使用mmap(2)系統(tǒng)調(diào)用將IO設(shè)備的物理內(nèi)存地址映射到用戶空間的虛擬內(nèi)存地址上,一旦映射完成,用戶空間的一段內(nèi)存就與IO設(shè)備的內(nèi)存關(guān)聯(lián)起來(lái),當(dāng)用戶訪問(wèn)用戶空間的這段內(nèi)存地址范圍時(shí),實(shí)際上會(huì)轉(zhuǎn)化為對(duì)IO設(shè)備的訪問(wèn)。

參考資料

  • Memory-mapped I/O
  • Programmed I/O: isolated vs. memory-mapped
  • Memory-mapped I/O
  • What is the difference between an I/O mapped I/O, and a memory mapped I/O in the interfacing of the microprocessor?
  • Difference between port mapped and memory mapped access?

轉(zhuǎn)載于:https://www.cnblogs.com/idorax/p/7691334.html

總結(jié)

以上是生活随笔為你收集整理的浅谈内存映射I/O(MMIO)与端口映射I/O(PMIO)的区别的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。