操作系统概念:
1. 总述
2. 进程管理
3. 内存管理
4. 文件管理
5. IO管理
5. I/O设备与管理
5.1 I/O设备
将数据输入/输出的计算机外部设备
5.1.1 分类
5.1.2 I/O设备的组成
机械部件+电子部件
I/O控制器(设备控制器)
IO控制器
cpu无法直接控制设备的机械不见,需要电子部件作为中介
a. 功能
-
接受和识别cpu发出的命令
I/O控制器中的控制寄存器,存放命令与参数
-
向cpu报告设备状态
-
数据交互
I/O控制器中会设置相应的数据寄存器:
输出时,数据寄存器用于暂存cpu发来的数据;之后控制器传送给设备
输入时,暂存设备发来的数据。之后cpu从数据寄存器中取走数据
-
地址识别
类似于内存地址,为了区分设备控制器中的寄存器,需要给每个寄存器设置地址
b. 组成
c. I/O控制器端口的编址方式
5.2 I/O控制方式
5.2.1 程序查询方式
过程
以读操作为例
- cpu向设备控制器发出读指令,设备启动,修改状态寄存器的值为1,表示从设备读入数据
- 轮询检查控制寄存器的状态,若状态位为1,说明设备还没有准备好要输入的数据,于是cpu会不断轮询
- 输入设备准备好数据后,将数据传给设备控制器,并报告自身状态
- 控制器将输入的数据放到数据寄存器中,并将状态位改为0
- cpu发现设备已就绪,即可将数据寄存器中的内容读入cpu寄存器中,再把寄存器中的内容放入内存
特点
数据传送单位:一个字
数据流向:
优点:实现简单
缺点:cpu和IO设备只能串行工作,长期处于忙等状态,cpu利用率低
5.2.2 中断方式
在cpu发出读/写命令后,可将等待I/O的进程阻塞,先切换到别的进程执行。当I/O完成后,设备控制器向cpu发出一个中断信号,cpu检测到中断信号,保存当前进程的运行环境,转去执行中断处理程序处理该中断。
特点
每次读/写一个字
中断的响应是在每个指令周期的末尾
数据流向:
优点
缺点
5.2.3 DMA方式
直接存储器存取,用于块设备的I/O控制
DMA特点
DMA控制器组成
- DR(数据寄存器):暂存从设备到内存,或者从内存到设备的数据
- MAR(内存地址寄存器):在输入时,MAR表示数据应放到内存中的什么位置;输出时MAR表示要输出的数据放到内存中的什么位置
- DC(数据计数器):表示剩余要读/写的字节数
- CR(命令/状态寄存器):用于存放cpu发来的I/O命令,或设备的状态信息
DMA过程
cpu接收到I/O设备的DMA请求时,会给I/O控制器发出一条命令,启动DMA控制器,然后继续做其它工作
DMA控制器直接与存储器交互,传送整个数据块到DR。当数据传送完成后,DMA控制器发送一个中断信号给cpu,将DR中的数据转存到MAR指出的内存空间或者
与中断方式对比
中断驱动方式在每个数据需要传输时,中断cpu。DMA方式则是在要求传送的一批数据全部传送结束才中断cpu;
中断驱动方式的数据传送是在中断处理时由cpu控制完成;DMA控制方式则是在DMA控制器的控制下完成
不适用于离散的数据块
5.2.4 通道控制方式
通道指专门负责输入输出的处理机
通道控制方式过程
- cpu向通道发出I/O指令,指明通道程序在内存中的位置,并指明要操作那个I/O设备,之后切换到其他进程
- 通道执行内存中的通道程序(指明了要读入/写出多少数据,读/写的数据应放在内存的什么位置等信息)
- 通道执行完规定的任务后,向cpu发出中断信号,之后cpu对中断处理
特点
通道会根据cpu的指示执行相应的通道程序,只有完成一组数据块的读/写后才需要发出中断信号,请求cpu干预
每次读/写以一组数据块
5.3 I/O管理
5.3.1 功能
- 状态跟踪:实时掌握外设状态信息
- 设备存取:实现对设备的存取操作
- 设备分配:设备的分配与回收
- 设备控制:设备的驱动,完成故障的中断处理
5.3.2 IO系统层次结构
5.3.1 用户层软件
实现与用户的接口:将用户请求翻译成格式化IO请求,通过 系统调用
请求内核服务
向上层提供库函数
A. SPOOLing技术(假脱机)
将一台物理设备逻辑上虚拟成多台设备,可将独占式设备改造成共享设备
a. 脱机技术
批处理阶段引入了 脱机输入/输出技术
b. 假脱机技术
井:在磁盘上开辟两个存储区域,用于I/O设备数据的输入与输出
实现SPOOLing技术,必须有 多道程序设计的支持
输入缓冲区:在输入进程的控制下,暂存从设备中输入的数据,之后转存到 输入井 中
输出缓冲区:在输出进程的控制下,暂存从 输出井 中送来的数据,之后传送到 输出设备 上
c. 共享打印机
当多个用户进程提出输出打印的请求时,系统会答应请求,但并不是真正把分配打印机,由脱机管理进程为每个进程做两件事
- 在磁盘 输出井 中为进程申请一个空闲缓冲区(相当于分配一个逻辑设备),并将要打印的数据放入其中
- 为用户进程申请一张空白的 打印请求表 ,并将用户的打印请求填入表中(就是说明用户的打印数据存放位置),将该表挂在 假脱机文件队列上
- 当打印机空闲时,输出进程会从文件队列的队头取出一张 打印请求表 ,并根据表中的要求,将数据从 输出井 传送到 输出缓冲区 ,再输出到打印机进行打印
5.3.2 设备独立性软件
用户程序与设备驱动器的统一接口
A. 功能
- 向上层提供系统调用
- 建立逻辑设备名到物理设备名的映射
- 根据设备类型选择相应的设备驱动程序
- 设备保护
- 设备的分配与回收
- 缓冲区管理
B. 逻辑设备表
- 确定逻辑设备对应的物理设备
- 找到物理设备对应的设备驱动程序
如:
逻辑设备名 | 物理设备名 | 驱动程序入口地址 |
---|---|---|
/dev/打印机1 | 3 | 1024 |
/dev/打印机2 | 5 | 2046 |
… | … | … |
C. 设备保护
- 每个设备都有FCB
- 用户请求访问某个设备时,系统根据FCB中的信息判断访问权限
D. 设备的分配与回收
a. 总原则
- 充分发挥设备的使用效率
- 避免不合理分配方式造成的进程死锁
b. 考虑因素
设备固有属性
独占设备
共享设备
- 可分配给多个进程(磁盘)
- 宏观上共享,微观上交替使用
虚拟设备
- 采用SPOOLing技术将独占式设备改为共享设备
- 同时分配给多个进程使用
设备分配算法
设备分配的安全性
安全分配方式
优点:破坏了 “请求并保持” ,不会造成死锁
不安全分配
为一个进程分配设备后,进程继续执行,可以发出IO请求;IO不满足时,才阻塞
优点:效率高;计算任务和IO任务并行处理
缺点:有可能发生死锁
c. 分配策略
静态分配:进程运行前全部分配,结束后全部归还
动态分配
d. 设备分配管理中的数据结构
系统设备表(SDT)
记录系统中全部设备的情况
设备控制表(DCT)
每个设备一张设备控制表
控制器控制表(COCT)
每个设备控制器一张控制器控制表
通道控制表(CHCT)
每个通道一张通道控制表
OS根据通道控制表对通道进行操作
e. 设备分配步骤
设备及其控制器及通道都分配成功才算成功
- 根据进程请求的 物理设备名 查找SDT(物理设备名是进程请求分配时提供的参数)
- 根据SDT查找DCT,若 设备 忙碌则将进程PCB挂到 设备等待队列 中,不忙,则将设备分配给进程
- 根据DCT找到COCT,若 设备控制器 忙则将进程PCB挂到 控制器等待队列 中,不忙,则将 控制器 分配给进程
- 根据COCT查找CHCT,若 通道 忙碌则将进程PCB挂到 通道等待队列 中,不忙,则将通道分配给进程
缺点:
f. 设备分配改进方法
建立 逻辑设备名与物理设备名 的映射机制,用户编程使用的逻辑设备名(设备类型)
逻辑设备表(LUT)
分配步骤
- 根据进程请求的 逻辑设备名 查找SDT
- 查找SDT,找到用户进程 指定的类型、且空闲 的设备,将其分配给该进程。
- 操作系统在逻辑设备表中新增一个表项
- 根据DCT找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙碌则将控制器分配
- 根据COCT找到CHCT,若通道忙碌则将进程PCB挂到通道等待队列中,不忙碌则将通道分配各进程
E. 缓冲区管理
将内存作为缓冲区,屏蔽设备间数据交互的 单位大小和传输速度 的差异
设备独立性 的缓冲区管理就是组织管理好这些缓冲区
磁盘高速缓存:逻辑上属于磁盘,物理上是主流在内存中的盘块
- 缓冲区数据非空,不能向缓冲区冲入数据,只能从缓冲区取出数据
- 缓冲区为空,只能往缓冲区冲入数据,但只能充满才能从缓冲区取出数据
a. 缓冲区作用
b. 引入缓冲区的工作策略
输出时
c. 缓冲管理策略
单缓冲
T>C
初始状态:工作区满,缓冲区空
故cpu处理数据,耗时C,同时块设备将数据读入到缓冲区耗时T。
由于T>C,故 cpu 处理完数据后暂时不能将下一块数据传送到工作区,必须 等待缓冲区中冲满数据
此时处理一块数据的 平均用时 = T + M 平均用时=T+M 平均用时=T+M
T<C
初始状态:工作区满,缓冲区空
当 缓冲区 冲满数据后,必须 等待 工作区取走数据才能继续继续冲入数据
此时处理一块数据的 平均用时 = C + M 平均用时=C+M 平均用时=C+M
单缓冲区间的通信
双缓冲区
在主存中为其分配两个缓冲区
初始状态:工作区空,缓冲区1满,缓冲区2空
处理一个数据块平均耗时=MAX{T,C+M}
T>C+M
每处理一个数据块 平均耗时 = T 平均耗时=T 平均耗时=T
T<C+M
设备输入数据块的速度要比处理机处理数据块的速度快,每处理一个数据块 平均耗时 = C + M 平均耗时=C+M 平均耗时=C+M
双缓冲区机器间的通信
循环缓冲区
d. 缓冲池
三个队列四个区
缓冲队列
四个区
输入进程请求输入数据
从 空缓冲队列 中取出一块作为 收容输入数据的工作区(hin) ,冲满数据后将缓冲区放入 输入队列 队尾
计算进程取得一块输入数据
从输入队列中取得一块充满数据的缓冲区作为 提取数据的工作缓冲区(sin)
缓冲区读完后,挂到空缓冲队列
计算进程将数据输出到输出缓冲区
从空缓冲队列中取出一块作为 收容输出数据的工作缓冲区(hout) ,缓冲区冲满后挂到输出队列队尾
输出进程请求输出数据
F. IO调度
用某种算法确定处理IO请求的顺序
如:磁盘调度
- FCFS
- 最短道优先
- SCAN算法
5.3.3 设备驱动程序
不同设备内部硬件特性不同
- 厂家需要提供与设备对应的驱动程序
- 每类设备一个设备驱动程序
- 将上层抽象的IO命令转化为具体的操作指令,发送给设备控制器
设备驱动程序以一个独立进程存在
cpu只需执行设备对应的驱动程序,完成设置 设备寄存器 ,检查设备的工作状态
5.3.4 中断处理程序
IO任务完成时,IO控制器会发出一个中断信号,系统根据中断信号类型找到对应的中断处理程序
原文地址:https://www.jb51.cc/wenti/3284478.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。