存儲器映射輸入輸出

內存映射輸入輸出(英語: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.

外部連結

編輯