I/O软件层次结构
的有关信息介绍如下:1、知识总览
2、用户层软件
3、设备独立性软件
4、设备驱动程序
5、中断处理程序
I/O软件的层次可分为用户层软件、设备独立性软件、设备驱动程序、中断处理程序和硬件。其中设备独立性软件、设备驱动程序、中断处理程序属于操作系统的内核部分,即“I/O系统”或“I/O核心子系统”。
越上面的层次越接近用户,越下面的层次越接近硬件。每一层会利用其下层提供的服务,实现某些功能,并屏蔽实现的具体细节,向高层提供服务(“封装思想”)。
用户层软件实现了与用户交互的接口(库函数),用户可直接使用该层提供的、与I/O操作相关的库函数对设备进行操作。
用户层软件将用户请求翻译成格式化的I/O请求,并通过“系统调用”请求操作系统内核的服务。例如,printf("hello world!"),会被翻译成等价的write系统调用,当然,用户层软件也会在系统调用时填入相应参数。
设备独立性软件,又称为设备无关性软件。与设备的硬件特性无关的功能几乎都在这一层实现。
主要功能如下:
1、向上提供统一的调用接口(如read/write系统调用)。
2、实现设备的保护。原理类似于文件保护。设备被看做是一种特殊的文件,不同用户对各个文件的访问权限是不一样的,同理,对设备的访问权限也不一样。
3、差错处理。设备独立性软件需要对一些设备的错误进行处理。
4、设备的分配与回收。
5、数据缓冲区管理。
6、建立逻辑设备名到物理设备名的映射关系,根据设备类型选择调用相应的驱动程序。
用户或用户层软件发出I/O操作相关系统调用的系统调用时,需要指明此次需要操作的I/O设备的逻辑设备名。
设备独立性软件需要通过“逻辑设备表(LUT,Logical Unit Table)”来确定逻辑设备对应的物理设备,并找到该设备对应的设备驱动程序。
操作系统可以采用两种方式管理逻辑设备表(LUT):
第一中方式,整个系统只设置一张LUT,这就意味着所有用户不能使用相同的逻辑设备名,因此这种方式只适合用于单用户操作系统。
第二中方式,为每个用户设置一张LUT,各个用户使用的逻辑设备名可以重复,适用于多用户操作系统。系统会在用户登录时为其建立一个用户管理进程,而LUT就存放在用户管理进程的PCB中。
为何不同的设备需要不同的设备驱动程序?
各式各样的设备,外形不同,其内部的电子部件(I/O控制器)也有可能不同。不同设备的内部硬件特性也不同,这些特性只有厂家知道,因此厂家须提供与设备相对应的驱动程序,CPU执行驱动程序的指令序列,来完成设置设备寄存器,检查设备状态等工作。
主要负责对硬件设备的具体控制,将上层发出的一系列命令(如read/write)转化为特定设备“能听得懂”的一系列操作,包括设置设备寄存器,检查设备状态。
驱动程序一般以一个独立进程的方式存在。
当I/O任务完成时,I/O控制器会发送一个中断信号,系统会根据中断信号类型找到相应的中断处理程序并执行。中断处理程序的处理流程如下:首先从控制器读出设备状态,然后查看I/O是否正常结束,是的话,从设备中读入一个字的数据并经由CPU放到内存缓冲区中,否的话,根据异常原因做相应处理。
可见,除了设备驱动程序会和硬件直接打交道,中断处理程序也可以和硬件直接打交道。