記憶體對映輸入輸出

主記憶體對映輸入輸出(英語:Memory-mapped I/O, MMI/O,簡稱為主記憶體對映I/O),以及埠對映輸入輸出port-mapped I/O, PMI/O,也叫作獨立輸入輸出isolated I/O),是PC機在中央處理器CPU)和外部裝置之間執行輸入輸出操作的兩種方法,這兩種方法互為補充。除此之外,執行輸入輸出操作也可以使用專用輸入輸出處理器(dedicated I/O processors)——這通常是指大型電腦上的通道輸入輸出(Channel I/O),這些專用處理器執行自有的指令集

主記憶體對映I/O(不要和主記憶體對映檔案的輸入輸出混淆)使用相同的地址匯流排來定址主記憶體和輸入輸出裝置(簡稱I/O裝置),前提是I/O裝置上的裝置主記憶體和暫存器都已經被對映到主記憶體空間的某個地址。這樣當CPU訪問某個地址的時候,可能是要訪問某一部份物理主記憶體,也可能是要訪問I/O裝置上的主記憶體。因此,裝置主記憶體也可以通過主記憶體訪問指令來完成讀寫。每個I/O裝置監測CPU的地址匯流排,並且在發現CPU訪問被分配到本裝置的地址區域的時候做出響應,建立數據匯流排和相應裝置暫存器之間的連接。為了實現CPU對MMI/O裝置的訪問,相應的地址空間必須給這些裝置保留, 並且不能再分配給系統實體記憶體。這可以是永久保留,也可以是暫時性的保留。通常來說X86架構都是永久保留的,而在Commodore 64中,由於採用了I/O裝置和普通主記憶體之間的堆交換技術(bank switching),可以做到暫時性保留。

PMI/O通常使用一組專門為I/O設計的CPU指令來執行I/O操作。比如在基於x86和x86-64架構的微處理器中使用in/out指令。這兩條指令有一些不同的形式,分別用來在CPU的EAX暫存器(或高16位元/低16位元/高8位元/低8位元)和I/O裝置的某個埠之間完成對單位元組/雙位元組/四位元組數據的操作(比如對out指令,分別有outb, outw和outl) 。I/O裝置有一個和主記憶體地址空間相互獨立的I/O地址空間。I/O裝置通過專用I/O針腳或者專用的匯流排和CPU相連。因為這個I/O地址空間和主記憶體地址空間相互獨立,所以有時候稱為獨立I/O.

外部連結