操作系统第七篇【设备管理】
设备管理概述
计算机系统的一个重要组成部分是I/O系统,在该系统中包括用于实现信息输入、输出和存储功能的设备和相应的设备控制器,在有些大型机中,还有I/O通道或I/O处理机。
I/O设备是计算机系统中重要的资源,并且品种繁多,功能各异,因此设备管理是操作系统中最繁杂而且硬件紧密相关的部分。
设备管理的对象是I/O设备,设备控制器和I/O通道。
设备管理的基本任务是完成用户提出的I/O请求,提高I/O速度,改善I/O设备的利用率。
设备管理的功能包括缓冲区管理、设备分配、设备处理、虚拟设备以及实现设备独立性等。
IO系统
计算机的I/O系统是主机和外设之间的数据传送系统,目前主要有总线型结构和通道型结构两种类型。
与计算机相连接的外部设备有字符设备和块设备两种类型。
前者一次只能传送一个字符,传送速度比较低;
后者一次可以传送一个字符块,传送速度快,效率高
如图6-1所示为总线型IO系统结构示意。
1 I/O设备的类型
1) 按传输速率分类,
2) 按信息交换的单位分类,
3) 按设备的共享属性分类,
设备控制器
设备控制器是计算机中的一个实体,其主要职责是控制一个或多个I/O设备,以实现I/O设备和计算机之间的数据交换。它是CPU与I/O设备之间的接口,它接收从CPU发来的命令,并去控制I/O设备工作,以使处理机从繁杂的设备控制事务中解脱出来。
设备控制器是一个可编址的设备,当它仅控制一个设备时,它只有一个唯一的设备地址;若控制可连接多个设备时,则应含有多个设备地址,并使每一个设备地址对应一个设备。
设备控制器的复杂性因不同设备而异,相差甚大,于是可把设备控制器分成两类:
一类是用于控制字符设备的控制器,
另一类是用于控制块设备的控制器。
设备控制器的基本功能:
(1)接收和识别命令
(2)数据交换
(3)标识和报告设备的状态
(4)地址识别
(5)数据缓冲
(6)差错控制
设备控制器的组成:
(1)设备控制器与处理机的接口
(2)设备控制器与设备的接口
(3)I/O逻辑
通道
设备控制器减少了CPU对I/O的操作,但是当I/O设备较多时,设备控制器的数量也会增加,于是又退化到了类似早期设备较少时的情形,因而CPU的负担仍然很重。
改进措施:
为了实现速度匹配,并使CPU与I/O操作尽可能地并行工作,以提高CPU的利用率,IBM公司提出了“通道”的概念。
-** 通道是一种通过执行通道程序管理I/O操作的控制器,它使CPU与I/O操作达到更高的并行度**。在采用通道的系统中,除了一般的机器指令系统外,系统还设置了供通道专用的一组通道指令,用通道指令编制成通道程序。
通道的任务:**由CPU处理的I/O任务转由通道承担,从而把CPU从繁杂的I/O任务中解脱出来。 **
具体地,使数据的传送独立于CPU,使有关对I/O操作的组织、管理及其结束处理尽量独立,以保证CPU有更多的时间去进行数据处理,从而建立独立的I/O操作。
数据传输的过程:CPU↔内存↔主通道↔子通道↔设备控制器↔设备
通道类型 :
(1)字节多路通道
字节多路通道可以连接多台慢速I/O设备,以交叉方式传送数据,即各设备轮流使用通道与主存进行数据传送,且每次只传送一个字节。因为每次数据传送仅占用了不同的设备各自分得的很短的时间片,所以大大提高了通道的利用率。
子通道采用时间片轮转法调度,低速
(2)数组选择通道
数组选择通道可以连接多台快速I/O设备,但每次只能从中选择一台设备执行通道程序,进行主存与该设备之间的数据传送。
当数据传送完后,才能选择另一台设备。在这种工作方式中,数据传送以成组方式进行,传送速率很高,多用于连接快速I/O设备。
但因连接在选择通道上的多台设备,只能依次使用通道与主存传送数据,故设备之间不能并行工作,且整个通道的利用率不高
**(3)数组多路通道 **
数组多路通道综合了选择通道和字节多路通道的优点,它有多个子通道。结构上采用字节多路通道方式,可以像字节多路通道那样,执行多路通道程序,使所有子通道分时共享总通道;传输方式采用数组方式,可以像选择通道那样进行成组数据的传送,因而高速,利用率高。
控制方式
在早期的计算机系统中,由于无中断机构,处理机对I/O设备的控制,采取程序I/O方式(Programmed I/O方式)。
在程序I/O方式中,由于CPU的高速性和I/O设备的低速性,致使CPU 的绝大部分时间都处于等待I/O设备完成数据I/O的循环测试中,造成对CPU的极大浪费。
这种轮询的方式中,因为在CPU中无中断机构,使 I/O设备无法向CPU报告它已完成了一个字符的输入操作,所以需要CPU不断地测试I/O设备的状态。效率非常低,一次可能读取不到一个字节,如图6-7所示。
中断驱动I/O控制方式
程序I/O方式方式中,CPU主动挨个端口轮询是否有数据要处理,极大地浪费了CPU资源,从而使得整个系统的效率底下
中断驱动I/O控制方式将CPU主动轮询的方式做出了改进,CPU处于被动的位置,等到有设备请求进行输入数据的时候,才去响应,从而提高了CPU的利用率。
也就是说,引入中断之后,每当设备完成I/O操作,便以中断请求方式通知CPU,然后进行相应处理。但由于CPU直接控制输入输出操作,每传达一个单位信息。
相对程序IO方式,CPU资源得以有效地利用。但是每传达一个单位信息都要发生一次中断,仍然消耗大量CPU时间,因此速度较低。
直接存储器访问DMA控制方式
DMA控制器(DMAC)是一种在系统内部转移数据的独特外设
可以将其视为一种能够通过一组专用总线将内部和外部存储器与每个具有DMA能力的外设连接起来的控制器,如图6-8所示。
它之所以属于外设,是因为它是在处理器的编程控制下来执行传输的。
值得注意的是,通常只有数据流量较大(KBps或者更高)的外设才需要支持DMA能力,这些应用方面典型的例子包括视频、音频和网络接口
DMA方式,在一定程度上提升了IO速度,把CPU从低效地IO操作中解脱出来,提高了CPU的利用率,从而提高了整个系统的效率。
特点:
1)数据传送的单位:数据块
2)数据传输的方向:设备(控制器)←→内存
2 DMA控制器的组成 :
DMA控制器由命令/状态寄存器CR、内存地址寄存器MAR、数据寄存器DR和数据计数器DC组成。
缓冲管理
在设备管理部分,存在的主要矛盾是高速的CPU和低速I/O设备之间速度不匹配的问题。
对于这种问题,处理的方法一般是增加缓冲。
类似的,在计算机网络通信中,高速发送设备和低速接收设备之间为了防止数据的丢失,也会增加缓冲区。
缓和CPU和I/O设备速度不匹配的矛盾;
减少对CPU的中断频率,放宽对中断响应时间的限制;
提高CPU和I/O设备之间的并行性。
单缓冲
双缓冲
双缓冲,也成缓冲对换。在IO设备和CPU之间设置了两个缓冲区,使得它们能够交替访问不同的缓冲区,从而提高数据处理的效率。在输入与输出的速度基本匹配时可得到较好的效果,否则,由于缓冲区太少,不能缓解IO设备和CPU之间的速度压力。双缓冲退化为单缓冲。
存在问题:当速度不匹配时效果退化到单缓冲机制的程度。
解决办法:增加缓冲个数,按照循环链的方式组织缓冲区
(3)进程同步
在循环缓冲机制中,如果输入数据和读取数据的速度相当,则运行平稳;如果速度差异较大,则最出现所有缓冲区均为空而无数据可提取或者所有缓冲区均为满而无法输入数据的情况。因此,需要控制数据提取进程和数据输入进程的同步,防止出现与时间相关的错误。与时间相关的错误见第2章2.3.1节P28。
1) Nexti指针追上Nextg指针
输入速度>计算速度,系统受计算限制。
2) Nextg指针追上Nexti指针
输入速度<计算速度,系统受I/O限制。
设备分配
从管理的层次看,设备的分配对象有两级,分别是作业级分配和进程级分配。
对作业级的分配工作,是在作业提交之后,开始执行前进行的。此时,系统按用户对设备的请求,将该作业所需要的有关设备及相关的通道和设备控制器资源,全部一次性的分给作业,直到作业用完自动释放归还给系统为止。这种分配方式属于静态分配。
进程级的分配,一般由在CPU上运行的进程,根据任务需要,通过系统功能调用提出I/O请求,设备分配程序按一定的策略将可用的设备分配给有I/O请求的进程。同时,还分配与设备相关的通道和设备控制器,以确保在CPU与外设之间形成一条有效的数据通路。由于这种分配是在执行中动态完成的,设备用完后又必须立即释放,所以,属于动态分配。
设备分配是对进程使用外设过程的管理
在进程间切换外设
通过一个虚拟设备把外设与应用进程隔开,只由虚拟设备来使用设备
设备控制表
系统中的每台设备都有一张设备控制表(DCT)。在DCT中充分体现出了设备的类型、标识符、状态(忙/闲)、重复执行次数、设备号以及与该设备相连的设备控制器的地址和等待使用该设备的进程队列。
系统为每个控制器配置一张用于记录本控制器情况的表,称为控制器控制表(COCT)。
系统为每个通道都配置一张通道控制表,通道控制表(CHCT)。
系统设备表:
在系统设备表(System Device Table, SDT)表中,每个接入系统中的外围设备都占有一个表目项,记录了该设备的名称、标识及设备控制表DTC的入口地址等相关的信息。
SDT表在整个系统中只有一张,全面反映了系统中的外设资源的类型、数量、占用情况等,
设备分配的总原则:合理使用外设(公平和避免死锁),提高设备使用率。
设备分配算法
(1)先来先服务FCFS
当若干进程申请某一设备的请求得不到满足时,必须排入等队列中。这些进程由于申请的有先后次序,故排入等待队列的次序也是不相同的。当该设备被归还给系统后,就可以重新分配,此时,系统按进程在等待队列中排队的先后次序,将设备分给最早排入队列的那个进程。
(2)优先级高者优先
在此分配对策中,进程的优先级起了决定作用。当从等待某设备的进程队列中挑选下一个可占用设备的进程时,按进程所具有的优先级处理。高优先级的进程先分配,同优先级的,先申请先分配
3 设备分配的安全性
(1)安全分配方式
进程发出I/O请求→阻塞→等待被唤醒
(2)不安全分配方式
进程发出I/O请求→继续执行→根据需要继续发出I/O请求
【建议】在设备分配算法中增加安全性检查。比如银行家算法。
【分析】不安全分配方式可能造成分配不安全是因为有满足死锁成立的条件,即存在请求与保持。也可以认为该分配方式采用的是鸵鸟算法。如果出现死锁是小概率事件,那么用诸如银行家算法之类的死锁避免算法,尽管能够防止死锁的发生,但是从性价比的角度考虑是得不偿失。
设备独立性
绝对号(或物理设备名):
为了便于对这些外设进行管理,系统对每台进入计算机系统中的设备都给定一个对应的编号,作为调用时识别和区分设备用。这种编号无任何重复,一般被称为设备的绝对号(或物理设备名)。
相对号(或称逻辑设备名):
为了方便用户,也为了提高外设利用率,在计算机中规定用户申请外设时,只需要向系统说明所需用的某类设备,至于真正在实际中使用哪台设备,由系统根据这类设备的应用情况作出分配。即使用户所需多台同样的设备,系统也允许用户按自己的使用要求提出编号,这种由用户申请设备时所用的编号称为相对号(或称逻辑设备名)、
有了设备的绝对号和相对号后,用户编制程序使用的设备与实际使用的设备无关,这就是设备的独立性。
(2)设备独立性优点
1) 设备分配时的灵活性。
2)易于实现I/O重定向。
SPOOLing技术
将一台物理的IO设备虚拟为多台的逻辑IO设置,这样多个用户就可以共享一台物理IO设置了。
虚拟设备技术假脱机操作(Simultaneous Peripheral Operations On-Line,SPOOLing),利用专门的外围控制机,将低速I/O设备上的数据传送到高速磁盘上;或者相反。
利用假脱机技术,可把独享设备转变成具有共享特征的虚拟设备,从而提高设备利用率。
由于我们的多道程序技术引入后,我们的利用专门的外围控制机就可以使用程序来进行模拟了。
1)高速虚拟I/O操作:
应用程序的虚拟I/O比实际I/O速度提高,缩短应用程序的执行时间(尽快完成计算,并释放占用的计算机资源)。
另一方面,程序的虚拟I/O操作时间和实际I/O操作时间分离开来。
2)实现对独享设备的共享:
由SPOOLing程序提供虚拟设备,可以对独享设备依次共享使用。
磁盘存储器管理
CPU和内存的访问速度比磁盘要快若干个数量级,磁盘系统的性能对整个系统的性能有重要影响,磁盘设备管理的目标就是提高磁盘系统的性能。
温彻斯特硬盘
1973年,IBM研制成功了一种新型的硬盘IBM3340。IBM3340拥有两个30MB的存储单元,而当时一种很有名的“温彻斯特来复枪”的口径和装药也恰好包含了两个数字“30”;于是这种硬盘的内部代号就被定为“温彻斯特”。温彻斯特硬盘拥有几个同轴的金属盘片,盘片上涂着磁性材料。它们和可以移动的磁头共同密封在一个盒子里面,磁头能从旋转的盘片上读出磁信号的变化。温彻斯特硬盘的参数包括磁头数(heads)、柱面数( tracks)、扇区数和字节数。各个盘面上的同一磁道组成一个柱面。每个磁道有30个扇区。每个扇区存储600个字节,其中512个字节存储数据,其余字节存储控制信息。
2磁盘的类型
1) 固定头磁盘:刚性磁臂、使用于大容量磁盘。
2) 移动头磁盘:移动磁臂、使用于中小型磁盘设备,
磁盘的物理构造决定了一次磁盘的I/O操作。物理记录的位置必须由柱面号,磁头号(盘面号)和扇区号三个参数共同确定。如何确定这三个参数是磁盘访问成功的关键。
1柱面定位时间
2旋转延迟时间
3数据传送时间
磁盘I/O调度策略
先进先出(FCFS)算法
磁盘I/O执行顺序为磁盘I/O请求的先后顺序。该算法的特点是公平性;在磁盘I/O负载较轻且每次读写多个连续扇区时,性能较好。
优先级算法
依据进程优先级来调整磁盘I/O请求的执行顺序。该算法反映进程在系统的优先级特征,目标是系统目标的实现,而不是改进磁盘I/O性能。
后进先出(LIFO算法)
后产生的磁盘I/O请求,先执行。该算法是基于事务系统中顺序文件中磁盘I/O的局部性特征,相邻访问的位置也相邻。它的问题在于系统负载重时,可能有进程的磁盘I/O永远不能执行,处于饥饿状态。
短查找时间优先(SSTF算法)
考虑磁盘I/O请求队列中各请求的磁头定位位置,选择从当前磁头位置出发,移动最少的磁盘I/O请求。
该算法的目标是使每次磁头移动时间最少。它不一定是最短平均柱面定位时间,但比FIFO算法有更好的性能。可能会有进程处于饥饿状态。
扫描(SCAN)算法
选择在磁头前进方向上从当前位置移动最少的磁盘I/O请求执行,没有前进方向上的请求时才改变方向。该算法是对SSTF算法的改进,磁盘I/O较好,且没有进程会饿死。
循环扫描(C-SCAN)算法
在一个方向上使用扫描算法,当到达边沿时直接移动到另一边沿的第一个位置并按原访问方向继续访问。该算法可改进扫描算法对中间磁道的偏好。实验表明,该算法在中负载或重负载时,磁盘I/O性能比扫描算法好。
N步扫描算法
把磁盘I/O请求队列分成长度为N的段,每次使用扫描算法处理这N个请求。当N=1时,该算法退化为FIFO算法。
该算法的目标是改进前几种算法可能在多磁头系统中出现磁头静止在一个磁道上,导致其他进程无法及时进行磁盘I/O。
双队列扫描(FSCAN)算法
把磁盘I/O请求分成两个队列,交替使用扫描算法处理一个队列,新生成的磁盘I/O请求放入另一队列中。
该算法的目标与N步扫描算法一致。
如果文章有错的地方欢迎指正,大家互相交流。习惯在微信看技术文章,想要获取更多的Java资源的同学,可以关注微信公众号:Java3y。为了大家方便,刚新建了一下qq群:742919422,大家也可以去交流交流。谢谢支持了!希望能多介绍给其他有需要的朋友
文章的目录导航:
https://zhongfucheng.bitcron.com/post/shou-ji/wen-zhang-dao-hang