Alex_McAvoy

想要成为渔夫的猎手

设备驱动程序

【概述】

设备驱动程序是 I/O 系统的高层与设备控制器之间的通信程序,其主要任务是将上层软件发来的抽象 I/O 要求转化为具体要求,发送给设备控制器,启动设备去执行。同时,它也将由设备控制器发来的信号,传送给上层软件

为实现 I/O 系统高层与设备控制器间的通信,设备驱动程序应具有以下功能:

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

【设备驱动程序特点】

设备驱动程序属于低级系统例程,其与一般的应用程序及系统程序不同,其特点如下:

  • 位置:驱动程序是与设备无关的软件和设备控制器之间通信和转换的程序
  • 硬件特性:驱动程序与设备控制器和 I/O 设备的硬件特性,紧密相关
  • 控制方式:驱动程序与I/O设备所采用的I/O控制方式紧密相关
  • 语言:由于驱动程序与硬件紧密相关,因而其中的一部分必须用汇编语言编写
  • 重入:驱动程序应允许可重入,一个正在运行的驱动程序常会在一次调用完成前被再次调用

【设备处理方式】

在不同的操作系统中,所采用的的设备处理方式并不完全相同,设备处理方式可分为以下三类:

  • 为每一类设备设置一个进程,专门用于执行这类设备的 I/O 操作
  • 在整个系统中设置一个 I/O 管理进程专门用于执行系统中所有各类设备的 I/O 操作
  • 不设置专门的设备处理进程,只为各类设备设置相应的设备驱动程序,供用户或系统进程调用

【设备驱动程序处理过程】

设备驱动程序的主要任务是启动指定设备,完成上层指定的 I/O 工作,但在启动前,应先完成必要的准备工作。在完成所有的准备工作后,才向设备控制器发送一条启动命令

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

  1. 将抽象要求转换为具体要求
  2. 对服务请求进行校验
  3. 检查设备状态
  4. 传送必要参数
  5. 启动 I/O 设备

【对 I/O 设备的控制方式】

轮询的可编程 I/O 方式

轮询的可编程 I/O 方式,又称忙-等待方式或程序 I/O 方式,其处理过程如下:

  1. 处理机向控制器发送一条 I/O 指令,启动输入设备输入数据,同时将状态寄存器置 busy=1
  2. 不断循环测试 busy 标志
    • busy=1 时,表示输入机尚未输完一个字,CPU 继续对该标志测试
    • busy=0 时,表示数据已输入控制器数据寄存器中
  3. 将 CPU 存取控制器中的数据送入内存单元,完成一个字的 I/O

在程序 I/O 方式中,CPU 的绝大部分时间都处于等待 I/O 设备完成数据 I/O 的循环测试中,造成了对 CPU 的极大浪费,这是因为在 CPU 中无中断机构,使 I/O 设备无法向 CPU 报告其已完成了一个字符的输入

使用中断的可编程 I/O 方式

该方式利用设备控制器来完成对 I/O 设备的控制,其过程如下:

  1. CPU 向相应的设备控制器发送一条 I/O 命令
  2. 立即返回继续执行原来的任务
  3. 设备控制器按照命令控制指定 I/O 设备,此时 CPU 与 I/O 设备并行运行

在 I/O 设备输入每个数据的过程中,可使 CPU 与 I/O 设备并行工作,仅当输完一个数据时,才需要 CPU 花费极短的时间去做中断处理

这样使得 CPU 和 I/O 都处于忙碌状态,从而提高了整个系统的资源利用率与吞吐量

直接存储器访问方式

该方式借助 DMA 控制器完成对 I/O 设备的控制,因此又称为 DMA 方式

该方式的数据传输基本单位是数据块,所传送的数据从设备直接送入内存,或直接从内存进设备,整块数据的传送是在 DMA 控制器的控制下完成的,不需要 CPU 操作,即 CPU 干预进一步减少,仅在传送一个或多个数据块的开始和结束时,才需 CPU 干预

DMA 控制器由三部分组成:主机与 DMA 控制器的接口、DMA 控制器与块设备的接口、I/O 控制逻辑

为实现主机与控制器之间块数据的直接交换,必须设置如下四类寄存器:

  1. 数据寄存器 DR:暂存设备到内存或从内存到设备的数据
  2. 内存地址寄存器 MAR:存放把数据从设备传送到内存的起始的目标地址或内存原地址
  3. 数据计数器 DC:存放本次 CPU 要读或写的字数
  4. 命令/状态寄存器 CR:用于接收从 CPU 发来的 I/O 命令或有关控制和状态信息

DMA 方式的工作过程如下:

  1. CPU 向磁盘控制器发送一条读命令,同时发送数据读入到内存的起始地址
  2. 命令被送到命令寄存器 CR 中,地址被送入内存地址寄存器 MAR 中,要读数据的字数则送入数据计数器 DC
  3. 将磁盘中的数据原地址直接送入 DMA 控制器的 I/O 控制逻辑上,按设备状态启动磁头到相应位置
  4. 启动 DMA 控制器控制逻辑开始进行数据传送:
    1. DMA 控制器读入一个数据到数据寄存器 DR 中,然后传到内存 MAR 地址中
    2. 接着 MAR+1DC-1
    3. 判断 DC 状态
      • DC=0,控制器发送中断请求,传送完毕
      • DC=1,继续传送

I/O 通道控制方式

DMA适用于读一个连续的数据块,若一次读多个数据块到内存的不同区域,那么须由 CPU 分别发送多条 I/O 指令、进行多次 DMA 中断处理

为进一步减少 CPU 的干预,引入了通道方式,CPU 只需发一条 I/O 指令,给出通道程序的首地址及要访问设备即可,这使得 CPU、通道和 I/O 设备三者并行操作,提高整个系统的资源利用率

通道,是一种通过执行通道程序管理 I/O 操作的控制器,它使 CPU、内存与 I/O 操作之间达到更高的并行程度,由于它的任务是管理实现 I/O 操作,提供了一种传送通道,所以将这种部件称作通道

通道,通过执行通道程序,与设备控制器共同实现对 I/O 设备的控制,简单来说,CPU 指令经过设备驱动程序解读后,送往通道程序,通过通道程序的执行来完成通道操作,通道程序由一系列通道指令构成

通道指令一般包含下述信息:

  • 操作码:规定指令所执行的操作
  • 内存地址:标明字符送入内存、从内存取出时的内存首址
  • 计数:表示本指令所要操作的字节数
  • 通道程序结束位 P:表示程序是否结束,P=1 表示本条指令是通道程序的最后一条指令
  • 记录结束标志 R:表示该指令是否与下条指令有关,R=0 表示本通道指令与下一条指令同属一记录;R=1 表示是处理某记录的最后一条指令
感谢您对我的支持,让我继续努力分享有用的技术与知识点!