第六章 设备管理(2)

与设备无关的I/O软件

1.设备独立性(无关性)
用户编程时所用的设备名(逻辑上的)与实际物理设备无关;
好处:
设备分配时的灵活性
3个物理设备(如打印机),程序中申请一台打印机,执行时不拘泥必须是某台(如第2个)打印机
易于实现I/O重定向
指用于I/O操作的设备可以更换(重定向),而不必改变应用程序。 程序调试、运行中的“打印”,可通过修改逻辑设备表的显示终端,实现不同时候的不同的设备使用。
2.设备分配
多道环境下,系统中设备是所有进程共享的。要防止无序竞争,提高外设资源的利用率。需由OS进行统一、合理的设备分配。
1)数据结构
记录相应设备或控制器的状态,及对设备或控制器进行控制所需的信息。所需数据结构:
设备控制表(DCT)
系统为每一设备都配置一张
记录本设备的情况。
在这里插入图片描述
控制器控制表(COCT)
系统为每一控制器都配置一张
记录本控制器的情况。
在这里插入图片描述
通道控制表(CHCT)
在这里插入图片描述
系统设备(总)表(SDT)

在这里插入图片描述
系统根据进程对设备的请求进行设备分配的过程:
在这里插入图片描述
2)设备分配需考虑的因素
设备固有属性:独占、共享、独占但可虚拟。根据属性采取互斥、次序调度、虚拟等不同分配策略。
设备分配算法(对不同进程的设备请求序列,如何进行选择),常采用两种:
FCFS
优先级高者优先

设备分配的安全性:进程开始I/O后就阻塞直到I/O完成。不“请求和保持”(安全的);允许连续I/O请求,是不安全的,此类分配方式需进行安全性检查。
设备独立性
用户IO请求中使用逻辑名申请某类设备,实际物理名称是系统根据设备类型分析分配后才确定的。
3)设备的分配过程
基本分配步骤(有通道):
分配设备
根据请求设备名,查找SDT,找到DCT;
状态、安全性等因素都可能导致本申请进程阻塞,挂入DCT等待队列中。
分配控制器
通过1步分配设备后,从DCT找到COCT;
检查COCT状态字,若忙碌,进程PCB挂到其等待队列
分配通道
COCT找到CHCT
判断状态,…
设备分配程序的改进细节
1.增加设备的独立性
2.考虑多通路情况
分配设备
在这里插入图片描述
分配控制器
在这里插入图片描述

用户层的I/O软件

1.系统调用与库函数
2.设备分配中的虚拟技术—SPOOLing技术
(1)组成
<1>输入井和输出井:
磁盘上开辟两大存储空间。输入井模拟脱机输入的磁盘设备,输出井模拟脱机输出时的磁盘。
<2>输入缓冲区和输出缓冲区:为缓解速度矛盾,内存中开辟两大缓冲空间,输入缓冲区暂存输入设备送来的数据,再送给输入井;输出缓冲区暂存输出井送来的数据,再送输出设备。
<3>输入进程和输出进程
用一进程模拟脱机输入时外围设备控制器的功能,把低速输入设备上的数据传送到高速磁盘上;
用另一进程模拟脱机输出时外围设备控制器的功能,把数据从磁盘上传送到低速
在这里插入图片描述
(2)特点
<1>提高了I/O的速度。利用输入输出井模拟成脱机输入输出,缓和了CPU和I/O设备速度不匹配的矛盾。
<2>将独占设备改造为共享设备。并没有为进程分配设备,而是为进程分配一存储区和建立一张I/O请求表。
<3>实现了虚拟设备功能。多个进程可“同时”使用一台独占设备。

缓冲区管理

引入缓冲区的主要原因
缓和CPU与I/O设备间速度不匹配的矛盾。
缓冲区数据成批传入内存,也可进一步减少对CPU的中断频率
最终目的:提高CPU和I/O设备的并行性。
使用缓冲区的方式
1)单缓冲、多缓冲
单缓冲
OS在主存中为之分配一个缓冲区。
CPU和外设轮流使用,一方处理完后等待对方处理。
双缓冲
两个缓冲区,CPU和外设不再针对一块交替
可能实现连续处理无需等待对方。前提是CPU和外设对一块数据的处理速度相近。而如下图情况CPU仍需等待慢速设备。
在这里插入图片描述
为进一步协调速度差,可增加缓冲区数量,同时进行一定的多缓冲管理入和出的同步
2)循环缓冲
在这里插入图片描述
循环缓冲的组成
多个缓冲区
大小相同,三种类型
预备装输入数据的空缓冲区R
装满数据的缓冲区G
计算进程正在使用的现行工作缓冲区C
多个指针
指示正在使用的缓冲区C的指针Current
指示计算进程下一个可取的缓冲区G的指针Nextg
指示输入进程下次可放的缓冲区R的指针Nexti
循环缓冲区的使用
计算进程(CPU)和输入进程(I/O操作)可利用两个过程来使用循环缓冲区。
Getbuf过程:使用缓冲区时,可调用该过程
计算进程取:current=Nextg,G—>C,nextg下移一个。
输入进程放:current=nexti,R—>C,nexti下移一个
Releasebuf过程
计算进程:C->R
输入进程:C->G
一个时段只能用于输入或输出,不能同时双向通信。
进程同步
3)缓冲池(Buffer Pool)
①缓冲池的组成
对于既可输入又可输出的公用缓冲池,至少应含有下列三种类型的缓冲区:
空缓冲区;
装满输入数据的缓冲区;
装满输出数据的缓冲区;
为方便管理,将上述类型相同的缓冲区连成队列
空缓冲区队列(所有进程都可用)
输入队列(n个进程有各自的队列)
输出队列(n个进程有各自的队列)
工作状态决定了current有四种工作缓冲区:
收容输入数据的工作缓冲区
提取输入数据的工作缓冲区
收容输出数据的工作缓冲区
提取输出数据的工作缓冲区
②缓冲区的工作方式
(1)收容输入:Getbuf(emq),hin;输入数据填入一空缓冲区;Putbuf(inq,hin)
(2)提取输入: Getbuf(inq),sin;从输入缓冲队列中取出一数据区的内容;Putbuf(emq,sin)
(3)收容输出: Getbuf(emq),hout;输出数据填入一空缓冲区;Putbuf(outq,hout)
(4)提取输出: Getbuf(outq),sout;从输出缓冲队列中取一数据区的内容;Putbuf(emq,sout)
缓冲区的使用
Getbuf(队列,工作区)
Putbuf(队列,工作区)
同步控制

磁盘存储器的性能和调度

1.磁盘性能简述
与格式有关
数据的组织和格式
盘片、面、磁道、扇区
为方便处理,每条磁道存储容量相同,每个磁道上的每个扇区相当于一个盘块。磁盘”格式化”的过程就是按规定的格式规划盘块。
与速度有关
磁盘类型
固定磁头(每道一磁头)
移动磁头(每盘一磁头)

访问时间的计算
寻道时间(到磁道)
旋转延迟(到扇区)
传输时间

传输时间占总时间的比例最小,磁盘读写速度的提高要选择合适的调度算法,减少前两项用时,使所有作业的磁盘处理时间均衡。
2.磁盘调度方法
对所有请求访问磁盘的进程进行合理调度,使对磁盘的平均访问时间最小
目标:使平均寻道时间最少
算法:
FCFS
多个进程的磁盘I/O请求构成一个随机分布的请求队列。
磁盘I/O执行顺序按磁盘请求的先后顺序。
在这里插入图片描述
最短寻道时间优先SSTF
选择从当前磁头位置出发移动最少的磁盘I/O请求
使每次磁头移动时间最少。
不一定是最短平均柱面定位时间,但比FIFO算法有更好的性能。
对中间的磁道有利,但可能会有进程处于饥饿状态(I/O请求总不被执行)。
在这里插入图片描述
扫描算法SCAN(磁盘电梯调度算法)
规定磁头移动方向:自里向外,再自外向里移动。
后续的I/O磁道请求,哪个在规定方向上距离最近,就先执行哪个。
循环扫描算法CSCAN
SCAN的错过问题:
容易错过与当前磁道距离近,但方向不一致的磁道。
修改:将SCAN规定的移动方向改为“单向移动”
由里向外后,再由里向外。

N-Step-SCAN算法
前述最近寻道算法共同问题:
“磁臂粘着”——磁头静止在一个磁道上,导致其它进程无法及时进行磁盘I/O。(因:高密度盘,进程的读写可能集中在某一磁道)
改进:
将磁盘请求队列分成长为N 的子队列
按FCFS选择子队列。队列内又按SCAN算法。

FSCAN算法
N-Step-SCAN的简化:
请求队列只分为两个子队列
当前一个队列,按SCAN算法执行;
扫描期间新生成的组成一个队列,等待被扫描。
3.磁盘高速缓存
4.提高速度的其他方法

猜你喜欢

转载自blog.csdn.net/weixin_42630417/article/details/84374403