Linux系统中I/O设备管理与驱动详解
1. I/O架构概述
为使计算机正常工作,需在CPU、RAM和众多I/O设备间建立数据通路,这些通路统称总线,是计算机内部的主要通信渠道。常见总线类型有ISA、EISA、PCI和MCA等。通常所说的总线由数据总线、地址总线和控制总线三种专用总线组成:
-数据总线:并行传输数据,如奔腾处理器的数据总线为64位。
-地址总线:并行传输地址,奔腾处理器的地址总线为32位。
-控制总线:向连接电路传输控制信息,如指定总线用于处理器与RAM或I/O设备间的数据传输,以及确定是读还是写操作。
当总线连接CPU和I/O设备时,称为I/O总线。80x86微处理器使用32位地址线中的16位来寻址I/O设备,使用64位数据线中的8、16或32位来传输数据。I/O总线通过I/O端口、接口和设备控制器等硬件组件与每个I/O设备相连。
1.1 I/O端口
每个连接到I/O总线的设备都有自己的I/O地址集,通常称为I/O端口。在IBM PC架构中,I/O地址空间提供多达65,536个8位I/O端口。两个连续的8位端口可视为一个16位端口,必须从偶数地址开始;两个连续的16位端口可视为一个32位端口,必须从4的倍数地址开始。CPU可通过in、ins、out和outs这四条特殊汇编语言指令对I/O端口进行读写操作。
I/O端口也可映射到物理地址空间的地址,现代硬件设备更适合映射I/O,因为它速度更快且可与DMA结合使用。为实现I/O编程的统一方法,每个设备的I/O端口被组织