在计算机系统,无论软硬,经常用到的结构是层次结构。
同样,IO也不例外。将IO需要完成的功能组织成一系列的层次结构,每一层利用下一层提供的服务。每层完成的是一个子功能,并向上层提供服务接口。这些特征基本上都是层次系统通用的特性,不必多说。
IO系统分类的层次通常是5层。列举如下:
- 用户层IO软件
- 设备独立性软件
- 设备驱动程序
- 中断处理程序
- 硬件
首尾两个不用解释都能明白,最抽象的当然是用户看到的那些IO软件,最具体的是底层提供功能的硬件,那么中间的三层作何解释,功能是什么,就需要仔细思考记忆了。
- 设备独立性软件: 用于实现用户程序与设备驱动器的统一接口、设备命令、设备保护,以及设备分配与释放等,同时也为设备管理和数据传送提供必要的存储空间。
上面是十分拗口的定义,也极易出现理解偏差。而实际上是很具体的东西。所谓设备独立性,就是能够让上层,即用户层的操作能够统一定义,不用再管插入的是什么设备,什么型号,个体特征等等,只需要能够将设备归类,对一类设备进行操作。在用户层,只需要知道我调用一个库函数等就能够使用这个设备了。设备独立性软件就是弥合各种设备的差别,从而为用户层提供一个统一漂亮的接口。另一方面,这一层要面向设备,为了能够满足向上提供服务的要求,需要的准备材料有设备命令,设备保护措施,对设备进行分配与释放的方法等,而引入存储作为缓存自然也是必要的举措。
再细化一点说来,在这一层,引入了逻辑设备和物理设备两种概念。用户层看的是设备的逻辑名字,就像文件系统中看的也是逻辑文件。系统执行时,要操作的是物理设备,二者必然有个映射关系。
设备驱动程序:硬件相关,具体实现OS对设备发出的操作指令,驱动IO设备工作。每一类设备有一个设备驱动程序。比如我们插入U盘时,系统会弹出安装驱动,安装完成后,这个驱动程序不会消失,而是运行在后台进程。无论你用的是正版金士顿还是盗版,用的是东芝还是闪迪,驱动程序都是一类,系统