内存映射输入输出(英语: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.
外部链接
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.