设备管理
IO设备的基本概念与分类
什么是IO设备
IO设备就是可以将数据输入到计算机,或者可以接收计算机输出数据的外部设备,属于计算机的硬件部件。
unix系统将外部设备抽象为一种特殊的文件,用户可以使用与文件操作相同的方式对外部设备进行操作
按使用特性分类
- 人机交互外部设备(鼠标、键盘等):数据传输速度慢
- 存储设备(移动硬盘、光盘等):数据传输速度块
- 网络通信设备(调制解调器等):速度介于上述两者之间
按传输速率分类
- 低速设备
- 中速设备
- 高速设备
按信息交换的单位分类
- 块设备(磁盘等):数据传输的基本单位是“块”,可寻址(随机的读写任一块)
- 字符设备(鼠标、键盘等):数据传输的基本单位是字符(不可寻址,常采用中断驱动的方式)
IO控制器
机械部件
用来执行具体的IO操作
电子部件
因为CPU无法直接控制IO设备的机械部件,因此IO设备需要有一个电子部件作为CPU和IO设备机械部件之间的“中介”,用以实现CPU对设备的控制
功能
- 接收和识别CPU发出的命令(IO设备中有相应的控制寄存器来存放命令和参数)
- 向CPU报告设备的状态(IO控制器中有相应的状态寄存器,用以记录IO设备的当前状态)
- 数据交换(IO控制器中设置相应的数据寄存器。输出时,数据寄存器用以暂存CPU发来的数据,之后再由控制器传送设备。输入时,数据寄存器用于暂存设备发来的数据,之后CPU从数据寄存器中取走数据)
- 地址识别(类似于内存的地址,为了区别设备控制器中的各个寄存器,需要给各个寄存器设置一个特定的“地址”。IO控制器通过CPU提供的“地址”来判断CPU要读写的是哪个寄存器)
组成
CPU与控制器的接口
用于实现CPU与控制器之间的通信。CPU通过控制线发出命令;通过地址线指明要操作的设备;通过数据线来取出(输入)数据,或放入(输出)数据
IO逻辑
负责接收和识别CPU的各种命令(如地址译码),并且负责对设备发出命令
控制器与设备的接口
用于实现控制器与设备之间的通信
IO控制方式
程序直接控制方式 | 中断驱动方式 | DMA方式 | 通道控制方式 | |
---|---|---|---|---|
CPU干预的频率 | 很频繁。IO操作开始之前、完成之后需要CPU介入,并且在等待IO完成的过程中CPU需要不断的轮询检查 | 每次IO操作开始之前、完成之后需要CPU介入 | 仅在传送一个或者多个数据块的开始、结束时,才需要CPU的干预 | 极低,通道会根据CPU的指示执行相应的通道程序,只有一组数据块的读写完成后才需要发出中断信号,请求CPU干预 |
数据传送的单位 | 每次读写一个字 | 每次读写一个字 | 每次读写一个或多个块(每次读写的只能是连续的多个块,且这些块读入内存后在内存中也必须是连续的) | 每次读写一组数据块 |
数据的流向 | 读操作:IO设备->CPU->内存 写操作:内存->CPU->IO设备 | 读操作:IO设备->CPU->内存 写操作:内存->CPU->IO设备 | 读操作:IO设备->内存 写操作:内存->IO设备 | 在通道的控制下进行 读操作:IO设备->内存 写操作:内存->IO设备 |
优点 | 实现简单。在读写指令之后,加上实现循环检查的一系列指令即可 | CPU不再需要不停的轮询,CPU利用率得到提升 | 数据传输以“块”为单位,CPU介入频率进一步降低。数据的传输不再需要经过CPU再写入内存,数据传输效率进一步增加。CPU与IO设备的并行性得到提升 | CPU、通道、IO设备可并行工作,资源利用率很高 |
缺点 | CPU与IO设备只能串行工作,CPU需要一直轮询检查,长期处于“忙等”状态,CPU利用率低 | 每个字在IO设备与内存之间的传输都需要经过CPU。频繁的中断处理会消耗较多的CPU时间 | CPU每发出一条IO指令,只能读写一个或者多个连续的数据块 | 实现复杂,需要专门的通道硬件支持 |
程序直接控制方式
完成一次读写操作的流程
关键:轮询(循环访问状态寄存器)
中断驱动方式
中断机制:由于IO设备速度很慢,因此在CPU发出读写命令后,可将等待IO的进程阻塞,先切换到别的进程执行。当IO完成后,控制器会向CPU发出一个中断信号,CPU检测到中断信号后,会保存当前进程的运行环境信息,转去执行中断处理程序处理该中断。处理中断的过程中,CPU从IO控制器读一个字的数据传送到CPU寄存器,再写入主存,接着CPU恢复等待IO的进程的运行环境,然后继续执行
- CPU会在每个指令周期的末尾检查中断
- 中断处理过程中需要保存、恢复进程的运行环境
DMA方式
Direct Memory Access ,直接存储器存取,主要用于块设备的IO控制
DMA控制器本质上也是一个IO控制器,本质上也是每次读取一个字并且放到DR中暂存
-
数据传送单位是“块”,不再是一个字一个字的传送
-
数据的流向是从设备直接放入内存,或者从内存直接到设备。不再需要CPU作为中转站
-
仅在传送一个或多个数据块的开始和结束时,才需要CPU干预
通道控制方式
通道:一种硬件,可以理解为“猴版CPU”(执行的指令很单一;通道程序是放在主机内存的,与CPU共享内存)。CPU可以识别并执行一系列的通道指令
IO软件层次结构
用户层软件
本质上就是库函数,实现了与用户交互的接口
设备独立性软件
又称设备无关性软件,与设备的硬件特性无关的功能几乎都在这一层实现
主要实现功能:
- 向上层提供统一的调用接口
- 设备的保护
- 差错处理
- 设备的分配与回收
- 数据缓冲区管理
- 建立逻辑设备名到物理设备名的映射关系:根据设备类型选择调用相应的驱动程序。一般通过“逻辑设备表(LUT,logical unit table)”来确定逻辑设备对应的物理设备,并且找到该设备对应的设备驱动程序
设备驱动程序
主要负责对硬件设备的具体控制,将上层发出的一系列命令,转化成特定设备“能听得懂”的一系列操作,包括设置设备寄存器、检查设备状态等
驱动程序一般会以一个独立进程的方式存在
中断处理程序
当IO任务完成时,IO控制器会发送一个中断信号,系统会根据中断信号类型找到相应的中断处理程序并执行
硬件
执行IO操作,由机械部件、电子部件组成
假脱机技术
又称SPOOLing技术,用软件的方式模拟脱机技术
脱机技术
在外围控制机的控制下,慢速输入设备的数据先被输入到更快速的磁带上。之后主机可以从更快速的磁带上读入数据,从而缓解了速度矛盾
输入井输出井
设备的分配与回收
分配时考虑因素
-
固有属性:独占设备、共享设备、虚拟设备
-
设备分配算法:先来先服务、短任务优先等
-
设备分配中的安全性
1)安全分配方式:
为进程分配一个设备后就将进程阻塞,本次IO完成后才将进程唤醒
优点:破坏了“请求和保持”条件,不会出现死锁
缺点:对一个进程来说,CPU和IO设备只能串行工作
2)不安全分配方式:
进程发出IO请求后,系统为其分配IO设备,进程可继续执行,之后还可以发出新的IO请求,只有当某个请求得不到满足时才将进程阻塞
优点:效率高,进程的计算任务和IO任务可以并行处理,使进程迅速推进
缺点:有可能发生死锁
静态分配和动态分配
静态分配:进程运行前为其分配全部所需资源,运行结束后归还资源
动态分配:进程运行过程中动态申请设备资源
设备分配管理中的数据结构
设备控制表(DCT):系统为每个设备配置一张DCT,用于记录设备情况
控制器控制表(COCT):每个设备控制器都会对应一张COCT。操作系统根据COCT的信息对控制器进行操作和管理
通道控制表(CHCT):每个通道都会对应一张CHCT。操作系统根据CHCT的信息对通道进行操作和管理
系统设备表(SDT):记录了系统中全部设备的情况,每个设备对应一个表目
缓冲区管理
缓冲区
缓冲区是一个储存区域,可以由专门的硬件寄存器组成,也可以利用内存作为缓冲区
note:当缓冲区数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时,可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出
作用
- 缓和CPU与IO设备之间速度不匹配的矛盾
- 减少对CPU的中断频率,放宽对CPU中断相应时间的限制
- 解决数据粒度不匹配的问题
- 提高CPU与IO设备之间的并行性
单缓冲
操作系统会在主存中为用户进程分配一个缓冲区(通常一个缓冲区大小就是一个块)
双缓冲
操作系统在主存中分配两个缓冲区