<aside>
💡 Terminologies
- ATA → AT Attachment
SATA → Serial ATA
eSATA → external SATA
- DMI → Direct Media Interface
- PCIe → Peripheral Component Interconnect Express
</aside>
1. 输入输出设备
概念很简单,但实际设备很复杂,编写驱动也很复杂
<aside>
💬 I/O设备:计算和物理世界之间的桥梁
CPU视角:一个能与CPU交换数据的接口/控制器
</aside>
交换状态、指令、数据
- “几组约定好功能的线”
- 每一组线有自己的地址
- CPU 可以直接使用指令 (in/out/MMIO) 和设备交换数据
- (CPU 完全不管设备具体是如何实现的)
<aside>
💬 Universal asynchronous receiver-transmitter, UART, 串口
</aside>
2. 总线、中断控制器和 DMA
2.1 总线:一个特殊的 I/O 设备
提供设备的注册和地址到设备的转发
- 把收到的地址 (总线地址) 和数据转发到相应的设备上
- 例子: port I/O 的端口就是总线上的地址
- IBM PC 的 CPU 其实只看到这一个 I/O 设备
这样 CPU 只需要直连一个总线就行了
- 今天 PCI 总线肩负了这个任务
- 总线可以桥接其他总线 (例如 PCI → USB)
lspci -tv
和 lsusb -tv
: 查看系统中总线上的设备
2.2 中断控制器