I/O 体系结构
与外设的通信常称之为输入输出。在实现外设的I/O时,内核必须处理3个可能出现的问题。
- 必须根据具体的设备类型和模型,使用各种方法对其进行寻址。
- 内核必须向用户应用程序和系统工具提供访问各种设备的方法。
- 保证应用程序能够在不考虑特定硬件方法的情况下进行互操作。
简单理解就是,驱动时接口的具体实现,应用程序只需关心接口方法的使用,对不同的接口有不同的实现。
总线系统
总线负责设备与CPU之间以及各个设备之间的通信。
- PCI(Peripheral Component Interconnect): 许多体系接口上适用的主要总线系统。支持热拔插,使得设备可以在系统运行时炼乳或断开,传输速度快,吞吐量高。
- ISA(Industrial Standard Architecture): 一种古老的总线,至今应用广泛。
- SBus: 由SUN公司设计的非私有的开放总线。
- IEEE1394: 有的厂商称之为FireWire或LLink。具有热插拔能力、非常高的传输速率。时高端笔记本电脑上流行的一种外部总线。
- USB: 一种运用非常广泛的外部总线,有很高的市场接受度。支持热拔插以及自动检测新硬件的能力。但速度只是中等水平。
- SCSI(Small Computer System Interface): 被称为船业人员的总线,其外设成本很高,支持非常大的数据吞吐量,主要用在服务器系统上寻址硬盘。
- 并口与串口(Oarallel and Serial Interface): 结构简单,但速率极低,用于外部链接,非常古老,适用于对性能没有过高要求的设备。
交互方式
- I/O端口
内核发送数据给I/O控制器,数据的目标设备通过唯一的端口号表示,数据被传输到设备进行处理。处理器管理了一个独立的虚拟地址空间,用于管理所有的I/O地址。 - I/O内存映射
处理器提供了对I/O端口进行内存映射的选项,将特定外设的端口地址映射到普通内存种,可以像处理器普通内存那样操作外设。 - 轮询和中断
轮询:重复的询问设备数据是否可用,如果可用就取回。缺点是比较浪费资源,为检查湾社的状态需要花费大量运行时间,会影响重要的任务执行。
中断:中断是更好的方案,每个CPU都提供了中断线,可由各个系统设备共享。每个中断通过唯一的号码标示。
- 通过总线控制设备
不同的总线类型称作系统和扩展总线。对内核来说,硬件实现方面的差别并不重要。
inode设备文件
每个文件都恰好关联一个inode,用于管理文件的属性。
PCI总线
PCI系统的布局
- 总线编号:编号从0开始,最多255个。
- 插槽编号:总线内部的唯一标识编号。一个总线最多能附接32个设备,不同总线上的插槽编号可以相同。
- 功能编号:在一个扩展卡上,实现多个扩展设备的设备。一个设备上功能编号最大为8.
地址空间
I/O 空间通过32个比特位描述,提供了最大4GB空间。