操作系统总结之 输入输出系统(下)
1. 缓冲管理
为什么引入缓冲? (不想说了)
I/O缓冲方式
1. 单缓冲
块设备输入时, 输入到缓冲区的时间为T, OS将数据从缓冲区传到用户区的时间为M, CPU处理这块数据的时间为C; 显然T和C是可以并行的。
2. 双缓冲
为了加快I/O速度提高设备利用率,又引入了双缓冲机制(缓冲对换 Buffer Swapping); 如果C“<”T, 块设备可连续输入
3.缓冲池(Buffer Pool)
- 缓冲池的组成
- 空缓冲链队列emp:由空缓冲区组成
- 输入缓冲链队列inq:由装满输入数据的缓冲区组成
- 输出缓冲链队列out:由装满输出数据的缓冲区组成
- 4种工作缓冲区
收容输入、提取输入、收容输出、提取输出。
从某队列上取下来操作完后再挂到另一队列上
- 对缓冲池队列操作的两个过程
缓冲池中的队列是临界资源要考虑互斥与同步
2. 设备分配(暂略)
3. 设备驱动
1.设备驱动程序的功能和特点
1.设备驱动程序的功能
(1) 将接受到的抽象(逻辑)要求转化为具体(物理)要求。
(2) 检查用户I/O请求的合法性, 读出和检查I/O设备的状态, 传递有关参数, 设置设备的工作方式。
(3) 发出I/O命令,若设备空闲则启动的I/O设备, 否则将请求进程挂到设备等待队列上。
(4) 及时响应由控制器或通道发来的中断请求, 并根据中断类型调用相应的中断处理程序进行处理。
(5) 对于设置通道的计算机系统, 驱动程序还应能够根据用户的I/O请求, 自动地构造通道程序。
2.设备处理方式
(1) 为每类设备设置一个I/O进程。
(2) 整个系统设置一个I/O进程。
(3) 只为各类设备设置相应的设备处理程序供调用。
- I/O请求的进入
用户程序:调用send将I/O请求发送给I/O进程;调用block将自己阻塞,直到I/O任务完成后被唤醒
系统:利用wakeup唤醒I/O进程,完成用户所要求的I/O处理
I/O中断的进入
当I/O中断发生时,内核中的中断处理程序发一条消息给I/O进程,由I/O进程负责判断并处理中断I/O进程
是系统进程,一般赋予最高优先级。一旦被唤醒,它可以很快抢占处理机投入运行
I/O进程开始运行后,首先关闭中断,然后用receive去接收消息。两种情形:(1) 没有消息,则开中断,将自己阻塞; (2) 有消息,则判断消息(I/O请求或I/O中断);
a. I/O请求
准备通道程序,发出启动I/O指令,继续判断有无 消息
b. I/O中断,进一步判断正常或异常结束正常:唤醒要求进行I/O操作的进程 异常:转入相应的错误处理程序
设备驱动程序的特点
(1) 驱动程序主要是在请求I/O的进程与设备控制器之间的一个通信程序。
(2) 驱动程序与I/O设备的特性密切相关。
(3) 驱动程序与I/O控制方式相关。
(4) 有些驱动程序固化在ROM上。
2. 设备驱动程序的处理过程
- 将抽象的要求转化为具体的要求
如:将逻辑盘块号转换为具体的盘面、磁道和扇区 - 检查I/O请求的合法性
如:打印机请求读, 以读方式打开磁盘后请求写 - 读出并检查设备的状态
如:读并查状态是否为就绪, 确定启动控制器或等待 - 传送必要的参数
如:启动磁盘, 先将字节数和内存起始地址送控制器 - 工作方式的设置
如:异步通信, 先设置波特率、校验方式、停止位等 - 启动I/O设备:向控制器发送控制命令, 将自己阻塞进入睡眠状态。由控制器控制下进行指定的I/O操作。
- 完成I/O后,设备控制器向CPU发出中断请求;CPU响应转向中断处理程序唤醒相应的设备驱动进程。
I/O完成中断处理程序的处理过程
在设备控制器的控制下, 设备完成I/O操作后, 设备控制器便向CPU发出一个中断请求; CPU响应后, 转向中断处理程序,中断处理含以下几个步骤:
(1) 唤醒被阻塞的驱动(程序)进程
(2) 保护被中断进程的CPU环境
(3) 分析中断原因转入相应的设备处理程序
(4) 进行中断处理
(5) 恢复被中断进程的现场
4. 磁盘存取设备管理
1. 磁盘概述
(1)磁盘的特点和结构:
容量大, 断电后仍可保存信息, 存取速度较快, 成本较低,可实现直接(随机)存取, 存取磁盘上任一物理块的时间不依赖于该物理块所处的位置。
盘设备由两部分组成: 驱动部分+存储介质(磁盘)
磁盘以恒定转速旋转, 磁臂沿径向驱动磁头移动到所要求的磁道上, 并等待所要求的扇区开始位置旋转到磁头下, 开始读写数据, 在磁头和缓冲区间传输数据
说明:图中的一圈圈灰色同心圆为一条条磁道,从圆心向外画直线,可以将磁道划分为若干个弧段,每个磁道上一个弧段被称之为一个扇区(图践绿色部分)。扇区是磁盘的最小组成单元,通常是512字节。
提问:盘块(磁盘块)和扇区有什么关系?
答:扇区是从硬件上面来讲的概念,而磁盘块是从操作系统或者说是软件上面来讲的概念,两者不同。磁盘块一般4kb,而扇区一般512b,所以磁盘块由多个扇区构成。
(2)磁盘数据组织和格式
信息记录在磁道上, 多个盘片, 正反两面都用来记录信息, 每面一个磁头, 所有盘面中处于同一磁道号上的所有磁道组成一个柱面
(3)磁盘访问时间(Ta)
- 寻道时间Ts: 把磁头移动定位到指定磁道所经历的时间, 启动时间s与移动n条磁道时间之和
Ts=m x n +s 一般为5~30ms - 旋转时间Tr
等待指定扇区旋转移动到磁头下面所经历的时间
5400r/min=90r/sec的硬盘:平均Tr=1/2r=5.55ms - 传输时间Tt
从磁盘到内存读写数据实际经历的时间: Tt=b/rN 其中b为读写字节数N为一条磁道总字节数
访问时间:Ta= Ts+1/2r+b/rN 主要与Ts有关
2. 磁盘调度
当多个进程都需要访问磁盘时, 访盘请求在等待, 应采用一定的策略, 对这些请求的服务顺序调整安排,旨在降低平均磁盘服务时间, 达到公平、高效。
公平:一个I/O请求在有限时间内满足。
高效:减少设备机械运动所带来的时间浪费。
磁盘调度考虑的问题:
一次访盘时间 = 寻道时间+旋转延迟时间+存取时间
(1) 减少寻道时间(活动头磁盘)
(2) 减少延迟时间(固定头磁盘)
磁盘调度算法:
- 先来先服务FCFS(First-Come First Served)
按访问请求到达的先后次序服务
优点:简单, 公平;
缺点:效率低, 相临两次请求可能会造成最内到最外的柱面寻道, 使磁头反复移动, 增加了平均寻道时间
- 最短寻道时间优先SSTF(Shortest Seek Time First)
优先选择距当前磁头最近的访问请求进行服务,主要考虑寻道优先
优点:磁盘的平均寻道时间最小
缺点:进程”饥饿”现象, 有时会造成与当前磁道距离远的访问请求长期等待得不到服务(不公平)
- 扫描算法SCAN**电梯**调度算法
当设备无访问请求时, 磁头不动;当有访问请求时, 磁头按一个方向移动, 在移动过程中对遇到的访问请求进行服务, 然后, 判断该方向上是否还有访问请求,如果有则继续扫描; 否则改变移动方向,并为经过的访问请求服务, 如此反复。
- 循环扫描(CSCAN)算法
磁头单向移动(如向外), 移动到最外磁道后立即返回最里面要访问的磁道, 构成循环扫描