Skip to content

设驱动程序

目录


参考资料:


设备处理程序通常又称为设备驱动程序,它是 I/O 系统的高层与设备控制器之间的通信程序,其主要任务是接收上层软件发来的抽象 I/O 要求,如 read 或 write 命令,再把它转换为具体要求后,发送给设备控制器,启动设备去执行;反之,它也将由设备控制器发来的信号传送给上层软件。

由于驱动程序与硬件密切相关,故通常应为每一类设备配置一种驱动程序。例如,打印机和显示器需要不同的驱动程序。

驱动程序由设备供应商提供,系统提供统一接口,设备供应商去实现,从而在系统层屏蔽复杂性

1 设备驱动程序的功能

  1. 接收由与设备无关的软件发来的命令和参数,并将命中的抽象要求转换为与设备相关的低层操作序列。
  2. 检查用户 I/O 请求的合法性,了解 I/O 设备的工作状态,传递与 I/O 备操作有关的参数,设置设备的工作方式。
  3. 发出 I/O 命令,如果设备空闲,便立即启动 I/O 设备,完成指定的 I/O 操作;如果设备忙碌,则将请求者的请求块挂在设备队列上等待。
  4. 及时响应由设备控制器发来的中断请求,并根据其中断类型,调用相应的中断处理程序进行处理。

2 设备驱动程序的处理过程

设备驱动程序的主要任务是启动指定设备,完成上层指定的 I/O 工作。但在启动之前应先完成必要的准备工作,如检测设备状态是否为“忙”等。在完成所有的准备工作后,才向设备控制器发送一条启动命令。

以下是设备驱动程序的处理过程:

  1. 将抽象要求转换为具体要求。
  2. 对服务请求进行校验。检查该用户的 I/O 请求是不是该设备能够执行的。
  3. 检查设备的状态。检查 I/O 设备否处于接收就绪状态。如果是,启动其设备控制器,否则只能等待。
  4. 传送必要的参数。
  5. 启动 I/O 设备。

在多道程序系统中,驱动程序一旦发出 I/O 命令,启动了一个 I/O 操作后,驱动程序便把控制返回给 I/O 系统,把自己阻塞起来,直到中断到来时再被唤醒。具体的 I/O 操作是在设备控制器的控制下进行的,因此,在设备忙于传送数据时,处理机又可以去干其它的事情,实现了处理机与 I/O 设备的并行操作。

4 对 I/O 设备的控制方式

对设备的控制,早期是使用轮询的可编程 I/O 方式,后来发展为使用中断的可编程 I/O 方式。随着 DMA 控制器的出现,从以字节为单位,改为以数据块为单位进行转输,大大地改善了块设备的 I/O 性能。I/O 通道的出现,又使对 I/O 操作的组织和数据的传送都能独立进行,而无需 CPU 的干预。

在 I/O 控制方式的整个发展过程中,始终贯穿着这样一条宗旨:即尽量减少主机对 I/O 控制的干预,把主机从繁杂的 I/O 控制事务中解脱出来,以便更多地去完成数据处理任务。

4.1 轮询的可编程 I/O 方式

处理机向控制器发出一条 I/O 指令,需要不断地循环测试 I/O 控制器的状态。

缺陷:CPU 的绝大部分时间都处于等待 I/O 设备完成数据 I/O 的循环测试中,造成对 CPU 的极大浪费。

此方式下 CPU 中无中断机构

4.2 中断的可编程 I/O 方式

CPU 向 I/O 设备的设备控制器发出一条 I/O 命令,立即返回继续执行原来的任务。设备控制器根据命令的要求去控制指定 I/O 设备。例如输入时,一旦 I/O 数据准备完成,控制器便通过控制线向 CPU 发送中断信号,通知 CPU 获取数据。

该方式下,CPU 和 I/O 设备都处于忙碌状态,提高了整个系统的资源利用率及吞吐量。

4.3 DMA 控制器

中断驱动 I/O 是以字节为单位进行 I/O 的。每当完成一个字节的 I/O 时,控制器便要向 CPU 请求一次中断。也就是说,为了从磁盘中读出 1KB 的数据块,需要中断 CPU 1K 次。

DMA(Direct Memory Access)方式的特点:

  1. 数据传输的基本单位是数据块。
  2. 所传送的数据是从设备直接送入内存的,或者相反。
  3. 仅在传送一个或多个数据块的开始和结束时,才需 CPU 干预,整块数据的传送是在控制器的控制下完成的。

4.4 I/O 通道

在 DMA 方式下,CPU 每发出一条 I/O 指令,仅能去读写一个连续的数据块。当需要一次去读写多个数据块时,则必须由 CPU 分别发出多条 I/O 指令及进行多次中断处理才能完成。

I/O 通道方式是 DMA 方式的发展,它可进一步减少 CPU 的干预,即把对一个数据块的读(或写)为单位的干预,减少为对一组数据块的读(或写)及有关的控制和管理为单位的干预。同时,又可实现 CPU、通道和 I/O 设备三者的并行操作,从而更有效地提高整个系统的资源利用率。

控制方式的发展,总结起来就是:无中断 -> 有中断(字节) -> 数据块 -> 多个数据块

Copyright © 2022 田园幻想乡 浙ICP备2021038778号-1