内存映射
每个I/O设备自己都会携带寄存器,这些寄存器被映射到内存地址空间中。
当CPU访问这些特定的内存地址时,实际上是在与I/O设备进行通信。
轮询
I/O设备的寄存器分为两种:控制寄存器和数据寄存器。
CPU通过轮询(polling)的方式不断检查控制寄存器的状态,以确定I/O设备是否准备好进行数据传输。
当CPU发现控制寄存器的状态表明设备准备好时,CPU就可以通过写入或者读取数据寄存器进行数据传输。
中断
为了避免轮询的资源浪费,I/O设备可以通过中断(interrupt)的方式通知CPU它们已经准备好进行数据传输。
当I/O设备准备好时,它会向CPU发送一个中断信号,CPU会暂停当前的执行,转而处理这个中断请求。
中断处理程序会执行必要的操作来处理I/O设备的请求,例如读取数据寄存器中的数据或者写入数据寄存器。处理完成后,CPU会恢复之前的执行。
DMA
直接内存访问(Direct Memory Access, DMA)是一种允许I/O设备直接与内存进行数据传输的技术,而不需要CPU的干预。
输入数据:
- I/O设备准备好数据后,向CPU发送一个DMA请求
- CPU暂停当前的执行,转而处理这个DMA请求,配置好DMA控制器
- DMA控制器直接从I/O设备读取数据,并将数据写入内存
- DMA控制器完成数据传输后,向CPU发送一个DMA完成的中断信号
输出数据:
- CPU准备好数据后,配置好DMA控制器,向DMA控制器发送一个DMA请求
- DMA控制器直接从内存读取数据,并将数据写入I/O设备
- DMA控制器完成数据传输后,向CPU发送一个DMA完成的中断信号