第五章 输入输出系统 5.4 设备驱动程序
一、设备驱动程序概述
1.设备驱动程序功能
①接收由I/O进程发来的命令和参数, 并将命令中的抽象要求(read,write命令)转换为具体要求。
②检查用户I/O请求的合法性,了解I/O设备的状态,传递有关参数,设置设备的工作方式。
③发出I/O命令并检查设备状态。
④及时响应由控制器或通道发来的中断请求并处理。
2.设备驱动程序的特点 (与一般应用程序、系统程序的差异)
①驱动程序,是指在请求I/O的进程与设备控制器之间的一个通信和转换程序。
②驱动程序与设备控制器、I/O设备的硬件特性紧密相关,因而对不同类型的设备应配置不同的驱动程序 。如打印机和显示器需要不同的驱动程序。
③驱动程序与I/O设备所采用的I/O控制方式紧密相关,常用中断驱动和DMA方式。
④由于驱动程序与硬件紧密相关,因而其中的一部分必须用汇编语言编写。
⑤驱动程序允许可重入,在一次调用完成前可以再一次被调用(可有多个进场同时使用)。
3.设备处理方式(处理设备时是否设置进程,设置什么进程)
①为每一类设备设置一个进程,专门用于执行这类设备的I/O操作
②在整个系统中设置一个I/O进程,专门用于执行系统中所有各类设备的I/O操作
③不设置专门的设备处理进程,而只为各类设备设置相应的设备处理程序(模块),供用户进程或系统进程调用
二、设备驱动程序的处理过程
1.将抽象要求转换为具体要求。命令(抽象的要求)无法传送给设备控制器,驱动程序将其转换为具体要求。
2.检查I/O请求的合法性。 ,
3.读出和检查设备的状态 。启动设备前,驱动程序应先把设备控制器中的状态寄存器的内容读入到CPU,来了解设备的状态。
4.传送必要的参数。确定设备处于就绪状态后,驱动程序向设备控制器的寄存器传送数据(以及控制本次数据传送的参数,如数据量,起始地址)
5.启动I/O设备
(驱动程序发出I/O命令,启动一个I/O操作后,便把控制返回给I/O系统,把自己阻塞,等待下一次中断到来被唤醒。
具体的I/O操作是在设备控制器的控制下进行的,当设备忙于传送数据时,处理可以处理其他任务,实现了处理机与I/O设备的并行操作)
三、对I/O设备的控制方式(I/O系统发完命令后做什么)
1.使用轮询的可编程I/O方式
CPU需花代价不断查询I/O状态,CPU资源浪费极大 。
2.使用中断的可编程I/O方式
中断I/O比程序I/O方式高效,但以字/字节为传输单位。每完成一个字/字节的传输,设备均要向CPU请求一次中断。 仅当输完一个数据后,CPU才花费极短时间去做中断处理。
3.直接存储器访问——DMA方式
①特点
数据传输的基本单位是数据块,即在CPU与I/O设备之间,每次传送至少一个数据块;
所传送的数据是从设备直接送入内存的,或者相反;
仅在传送一个或多个数据块的开始和结束时,才需CPU干预,整块数据的传送是在控制器的控制下完成的。
②DMA控制器的组成
主机与DMA控制器的接口(含数据寄存器,内存地址寄存器,数据计数器,命令/状态寄存器);
DMA控制器与块设备的接口;
I/O控制逻辑。
③DMA工作过程 (以读磁盘数据为例)
- CPU首先向磁盘控制器发送一条读命令:该命令被送到命令寄存器CR中;数据内存起始目标地址被送入MAR中;要读数据的字数送入数据计数器DC中;磁盘中的原地址送入DMA控制器的I/O控制逻辑上。
- 启动DMA控制器进行数据传送:传送时,DMA控制器读入一个数据到数据寄存器中,然后传到内存中,接着MAR+1,DC-1,判断DC是否为0,如否,继续,反之控制器发中断请求,传送完毕。
4.I/O通道控制方式
①引入
把对一个数据块的读(写)为单位的干预,减少为对一组数据块的读(写)及有关的控制和管理为单位的干预。 (实现一次将多个数据块传送到不同地址的内存区域)
一个通道控制多台设备。
CPU仅在I/O操作的开始和结束时花费少量时间处理与I/O有关的工作。
实现CPU、通道和I/O设备三者的并行操作,从而更有效地提高整个系统的资源利用率。
②通道程序
通道通过通道程序与设备控制器共同实现对I/O设备的控制。
由一系列通道指令构成,每条通道指令都包含:
③工作流程
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!