从操作系统角度而言,I/O软件的模型应该是设备无关的,因而,系统可以支持各种设备,甚至是未来出现的设备。针对I/O设备的软件模型必须有足够的通用性,至少能够将上节介绍的各种I/O硬件特性涵盖到模型之中。另外,操作系统必须提供有效的管理手段,从而让设备的软件组件融入到系统的I/O处理框架中,这样,这些软件可以专注于针对特定设备的功能需求,而不必过多地考虑与系统打交道或者与系统中其他模块的协作。例如,针对磁盘读写的软件组件无须考虑磁盘上的文件系统。
设备的软件组件通常称为设备驱动程序,或简称驱动程序。设备驱动程序或者由设备的硬件厂商提供,或者由操作系统厂商提供。由于设备驱动程序直接与硬件打交道,它们需要一定的特权才能操纵硬件设备,所以驱动程序通常运行在处理器的特权模式下,其代码与操作系统的内核代码享有同样的特权。这种设计的一个潜在后果是,驱动程序中的错误可能会导致整个操作系统奔溃。因此,驱动程序代码往往需要经过精心的设计、检查和调试,其代码规模应尽可能地小。从代码功能划分的角度来考虑,应尽可能把代码逻辑移到应用程序中,而让驱动程序只做最必要的事情。
与设备关联的驱动程序,其最基本的功能是,将操作系统的功能请求,解释成针对该设备的请求,然后操纵设备以完成该请求,最后将结果以指定的方式返回给调用者。在此过程中,有些事项往往是驱动程序必须要考虑并解决的。下面逐一讨论。
首先,与设备的通信是同步或异步方式。从软件控制流的角度,同步方式的通信容易实现,而且错误处理和恢复也相对容易。若一个I/O请求是异步方式&#