设备管理(一)
目录
5.1 I/O硬件原理
- I/O系统
- I/O控制方式
- 设备控制器
5.2 I/O软件原理
- I/O软件设计目标和原则
- I/O中断处理程序
- I/O设备驱动程序
- 独立于设备的I/O软件
- 用户空间的I/O软件
外部设备分为两大类:
- 存储型设备(如磁带机、磁盘机等),以存储大量信息和快速检索为目标,在系统中存储持久性信息,它作为内存的扩充,又称“外存”
- I/O型设备(如显示机、打印机、通信设备等)
设备管理是OS中最为庞杂和琐碎的部分,通常使用I/O中断、缓冲区管理、通道、设备驱动调度等多种技术,这些措施较好地克服了由于设备和CPU速度不匹配所引起的问题,使主机和设备能够并行工作,提高设备使用效率。另一方面,操作系统将所有设备都抽象成文件,将其统一在文件系统之下,赋予文件属性,对设备的操作就类似于对文件的操作,其优点是:尽可能统一文件和设备的I/O处理;尽可能把设备文件和普通文件纳入同一保护机制下。为了方便用户或高层软件使用,设备管理还对各种设备进行抽象,配置设备驱动程序,屏蔽物理细节和操作过程,统一使用界面。为此,设备管理应具有以下功能:
- 设备中断处理
- 缓冲区管理
- 设备分配和去配
- 实现虚拟设备
5.1 I/O硬件原理
5.1.1 I/O系统
按不同方式对设备进行分类:
- 按I/O操作特性分类:
- 输入型设备
- 输出型设备
- 存储型设备
- 按I/O信息交换单位分类:
- 字符设备
- 块设备
输入型设备和输出型设备通常是字符设备,它与内存进行信息交换的单位是字节,即一次交换1个或多个字节;
存储型设备通常是块设备,可分为
- 顺序存取存储设备
- 直接存取存储设备。
前者严格依赖信息的物理位置进行定位和读写,如磁带;
后者的特点是存取任何一个物理块所需时间几乎不依赖于此信息所处的位置,如磁盘。
设备的物理特性差异:
- 数据传输率
- 数据表示方式
- 传输单位
- 出错条件
5.1.2 I/O控制方式
根据I/O控制器功能的强弱以及它和CPU之间联系方式的不同,可以把设备控制方式分为:
-
轮询
使用查询指令测试设备控制器的忙闲状态位,决定内存和设备是否能交换数据 -
中断
-
DMA
-
通道
它们之间的差异在于:CPU和设备并行工作的方式和程序不同。从早期采用轮询方式,CPU全程参与I/O操作,演变到采用中断方式,以减少CPU参与I/O操作的工作量,直至引入DMA与通道方式,可以在没有CPU参与情况下完成I/O操作,把CPU从I/O操作中彻底解放出来,消除了系统性能瓶颈。
1. 轮询方式
使用查询指令测试设备控制器的忙闲状态位,决定内存和设备能否交换数据。当某个设备准备好允许I/O数据时,就调用这个设备的I/O程序处理数据传输,否则依次轮询下个设备是否准备好。
轮询方式使用:
1)查询指令:查询设备是否就绪
2)读/写指令:当设备就绪时,执行数据交换
3) 转移指令:当设备未就绪时,执行转移指令转向查询指令继续查询。
2. 中断方式
中断方式要求CPU与设备控制器及设备之间有中断请求线,控制器的状态寄存器有相应中断允许位。
CPU与设备间的数据传输过程:
1)进程发出启动I/O指令,CPU加载控制信息到设备控制器的寄存器,然后,进程继续执行或放弃CPU等待设备操作完成。
2)设备控制器检查状态寄存器,按照I/O指令要求,执行相应I/O操作,一旦传输完成,设备控制器通过中断请求线发出I/O中断信号。
3)CPU收到并响应I/O中断后,转向处理该设备的I/O中断例程执行。
4)中断处理例程执行数据读取操作,将I/O缓冲寄存器的内容写入内存,操作结束后退出中断处理程序,返回中断前的执行状态。
5)进程调度程序在适当时刻恢复得到数据的进程执行。
3. DMA方式
如果I/O设备能直接与内存交换数据而不占用CPU,CPU的利用率还可以提高,这就出现了直接存储器存取DMA方式,DMA方式需要以下设施:
- 内存地址寄存器
- 字计数器
- 数据缓冲寄存器或数据缓冲区
- 设备地址寄存器
- 中断机制和控制逻辑
DMA特点
DMA与内存间采用字传送,DMA与设备间可能是字位或字节传送,所以DMA还要设置数据移位寄存器、字节计数器等硬件逻辑。
4. 通道方式
CPU在执行主程序时遇到I/O请求,它启动指定通道上选址的外围设备,一旦启动成功,通道开始控制外围设备进行操作。CPU可执行其他任务并与通道并与通道并行工作,直到I/O操作完成。通道发出操作结束中断时,CPU才停止当前工作,转向处理I/O操作结束事件。
5.1.3 设备控制器
-
什么是控制器
是可插入主板扩充槽的印刷电路板 -
引入控制器的原因
通过传递简单参数就可以进行I/O操作,大大简化系统的设计,有利于计算机系统对各类控制器和设备的兼容性。 -
控制器的功能
- 接收和识别CPU或通道发来的命令
- 实现数据交换,包括设备和控制器间的数据传输
- 发现和记录设备以及自身的状态信息,供CPU处理
- 设备地址识别
-
设备控制器组成部分
- 命令寄存器
- 译码器
- 数据寄存器
- 状态寄存器
- 地址译码器
I/O软件原理
5.2.1 I/O软件设计目标和原则
总体设计目标
- 高效率
- 通用性
要考虑的问题
- 设备无关性
- 出错处理
- 同步(阻塞)——异步(中断驱动)传输
- 独占性外围设备和共享性外围设备
5.2.2 I/O中断处理程序
I/O中断的类型和功能
- 通知用户程序I/O操作沿链推进程度
- 通知用户程序I/O操作正常结束
- 通知用户程序发现的I/O操作异常
- 通知程序外围设备上重要的异步信号
I/O中断的处理原则
- 操作正常结束处理
- 操作发送故障或特殊事件的中断处理
- 人为要求而产生的中断处理
- 外围设备的异步信号处理
5.2.3 I/O设备驱动程序
设备驱动程序包括与设备相关的代码,其工作是:
把用户提交的逻辑I/O请求转化为物理I/O操作的启动和执行,如设备名转化为端口地址,逻辑记录转化为物理记录、逻辑操作转化为物理操作等。
设备驱动程序从与设备无关的软件中接收抽象的I/O请求,一条典型的请求是读第n块。
如果请求到来时驱动程序空闲,则立即执行。如果它正在处理另一条请求,它将该请求挂在等待队列中。
设备驱动程序主要功能:
- 设备初始化
- 执行设备驱动例程
- 执行中断处理例程
5.2.4 独立于设备的操作系统I/O软件
5.2.5 用户空间的I/O软件 - 库函数实现的I/O系统调用
cout=write(fd,buffer,nbytes);
- 非库函数实现的I/O系统调用:spooling系统
I/O操作执行步骤