§5 设备管理
C1 IO 管理
1)功能:
- 提供统一的独立于设备的用户接口:命令接口和编程接口
- 分配和释放设备
- 设备访问控制:并发访问和差错处理、访问权限控制
- IO缓冲和IO调度,提升IO效率
2)分层设计思想:每一层执行OS功能的一个子集,依赖于第一层的更原始的功能,同时为高一层服务。高层不依赖于硬件,为用户提供友好清晰简单的功能强的接口
- 用户层次:IO系统调用
- 中间层:逻辑IO → 设备IO → 调度控制
- 逻辑IO:完成设备工作,分配回收设备,准备数据
- 设备驱动:驱动设备控制器
- 设备控制器:IO调度
- 底层硬件
3)设备分类:
-
按数据组织形式:
- 块设备:数据块传输,高速率,可寻址(随机读写)
- 字符设备:字符传输,低速率,不可寻址
-
按用途:存储设备、传输设备、人机交互设备
-
按资源分配:
-
独占设备:只允许进程互斥使用,通常是慢速设备,如打印机
-
共享设备:多个进程交叉使用,如硬盘
-
虚设备:一类设备上模拟另一类设备,共享设备上模拟独占设备,高速设备上模拟低俗设备,如Spooling技术将打印机变成共享设备
-
4)设备控制器
:
-
功能:
- 识别CPU指令
- 数据交换:CPU ↔ 控制器 ↔ 设备
- 设备状态记录和报告
- 缓冲区
- 数据差错检测
-
组成:
- 面向CPU接口:数据寄存器、控制寄存器、状态寄存器,采取内存映射/专门IO指令访问
- 面向设备接口:数据信号、控制信号、状态信号
- IO逻辑:用于实现CPU对IO设备控制
-
IO端口地址
:接口电路中每个寄存器有唯一地址-
所有IO端口地址形成IO端口地址空间,受OS保护
-
IO编制与IO指令形式:
-
内存映射编址- 内存映像IO
- 控制器内存/寄存器作为物理内存空间一部分)
- 不允许对控制寄存器的内存进行高速缓存
- OS不应将其地址空间放入用户虚拟地址空间
-
IO独立编址 -专用IO指令
- 优点:外设不占用内存地址空间;编程时易区分是内存操作还是IO操作
- 缺点:IO指令少,不灵活
- Intel体系架构in/out指令
-
-
5)设备驱动程序
:
-
存放与设备密切相关的代码,每个处理一种设备类型
-
接受与设备无关的抽象请求并执行。驱动程序负责设置设备寄存器,并监督执行
-
组成
- 自动配置和初始化子程序:检测设备并初始化,仅初始化一次
- IO操作子程序:此时和调用程序仍是同一程序,只是转入内核态
- 中断服务子程序:负责处理中断
-
和应用程序区别:没有main,以模块初始化函数为入口;初始化后不再允许,等待系统调用;不使用标准C库
-
动态装载:
- UNIX将内核与设备驱动程序链接后重启系统
- Windows使用一个文件告知操作系统,在重启时装载
- USB及IEEE1384设备动态加载驱动程序,不需要重启
6)IO控制技术:
-
程序控制IO:轮询,适用于高速设备
- 向设备驱动程序提出IO请求
- 设备驱动程序查询状态寄存器,若准备好则设置控制寄存器
- 轮询状态寄存器
- 将数据寄存器数存回用户空间,告知完成
-
中断驱动方式:
- 向设备驱动程序提出IO请求
- 设备驱动程序查询状态寄存器状态,若准备好则设置控制寄存器
- 将设备状态记录在设备状态表后执行其它工作
- 设备完成IO后产生中断信号,中断处理程序交付设备管理程序
- 查询设备状态表,拷贝数据给请求进程,解除请求进程IO阻塞
-
直接存储访问:DMA,适用于高速设备
-
设置DMA控制器寄存器值
-
DMA控制器自动完成外设与内存数据拷贝
-
完成后DMA发出中断
-
优点:CPU无需控制
-
缺点:每个设备都占用一个DMA控制器,设备增加时需要新的控制器;DMA操作可能竞争总线
-
-
IO通道控制方式:
-
IO通道:专门的IO处理器,独立于CPU,有自己的指令体系。通道指令组成通道程序,存放在内存中,允许复杂IO控制。
-
优点:一个通道程序可完成多做IO操作,完成复杂IO控制。减少CPU干预;
一个IO通道可控制多台设备(DMA不行)
-
缺点:贵
-
种类:
- 字节多路通道:在多台设备间轮流切换,每次发一字节数据,适合中低速
- 数组选择通道:为一台设备成组传送数据,适合高速设备
- 数组多路通道:适用了多道程序设计的通道程序,为多台设备成组传送
-
6)设备独立性:
- 逻辑设备:用户使用逻辑设备名称请求使用设备,实际使用必须使用物理设备
逻辑设备表LUT
:逻辑设备名+物理设备名+驱动入口地址。- 单LUT设备表:不允许有重复的逻辑设备名,多用户实用
- 多LUT设备表:每个用户一张LUT
- 优点:设备分配灵活,可调度设备而不是固定设备;易于实现IO重定向
7)IO设备分配:
- 控制结构
- 系统设备表SDT:记录设备状态和设备控制表DCT入口
- 设备控制表DCT:
- 设备(请求)队列队首指针:请求设备IO进程的PCB
- 设备状态
- 控制器表指针:设备的设备控制器
- 重复执行次数:用于传输失败重试
- 控制器表COCT:每个设备控制器有一张,描述IO控制器配置和状态,如DMA中断号、DMA数据通道的分配
- 通道控制表CHCT:每个通道一张,描述通道状态
- 分配策略:
- 安全性:
- 安全分配:请求设备IO后阻塞
- 不安全分配:请求IO后可继续请求其它设备IO,但应当进行安全性检测
- 分配算法
- 设备固有属性:独享、共享、虚拟
- 安全性:
- 单/多通路IO设备分配:
- 单/多通路:一个设备对应一个/多个控制器,控制器对应一个/多个通道
- 分配设备:查SDT,找到DCT,死锁检测后分配
- 分配设备控制器:DCT中找到COCT,若控制器空闲则分配
- 分配通道:找到通道控制表CHCT,分配通道
8)假脱机技术(虚拟设备技术):在设备和用户进程间建立缓冲区,中介IO
- 组成:
- 输入井和输出井:模拟脱机输入输出的磁盘
- 输入缓冲和输出缓冲区:缓解磁盘和CPU速度不匹配
- 输入进程和输出进程:模拟脱机IO时的外围控制机。输入设备的输入先进入缓冲区,再送到输入井。数据输出先放到输出井,再送到输出缓冲区
- 作用:模拟共享设备;将虚拟IO时间和实际IO时间分离
C2 缓冲技术
1)缓冲技术:提高设备利用率(匹配CPU与外设处理速度、减少COU中断、提升CPU和IO设备并行度)
2)单缓冲:每发出一个IO请求边分配一个缓冲区
- 除第一块,每块处理时间为
3)双缓冲:CPU和外设连续处理而不必等待对方。即移动和处理同时
-
要求CPU与外设处理速度相近
-
除第一块,每块处理时间为
4)环形缓冲:多个缓冲组织成环形。
- CPU与外设处理速度差异大
- 管理:
- 缓冲区分空缓冲区、正在工作缓冲区、满缓冲区
- 使用3个指针指示上述缓冲区的位置
5)缓冲池:提供多个可供进程共享的缓冲区
- 管理:
- 缓冲区分输出缓冲、输入缓冲、空缓冲区
- 相同类型缓冲组成链表
- 四种工作方式:收容输入,收容输出,提取输入,提取输出
6)缓冲带来的问题:多次复制一个数据包
C3 IO性能
1)IO流程:
- 进程发起IO系统调用
- 陷入内核,进入IO处理
- 磁盘将文件载入内核内存空间
- 内核将文件复制到用户内存空间
- 数据完成复制,唤醒进程,退出内核态
2)阻塞与非阻塞IO
-
阻塞IO:调用结果返回前,进程被阻塞挂起
-
非阻塞IO:进程发起IO调用后,返回执行其它任务
3)IO多路复用:允许进程发起多个IO请求。当某个请求到位后,执行其它请求。全部请求到位再通知相应的进程。一二阶段都是阻塞的
5)事件驱动IO:IO第一阶段完成后,通知进程,使其第一阶段非阻塞。而第二阶段仍需要阻塞等待
6)异步IO:第二阶段数据复制完成再通知进程