操作系统(第五章 设备管理)
I/O系统
I/O设备的类型:
1,按使用特性分类:存储设备;输入/输出设备
2,按传输速率分类:低速设备;中速设备;高速设备
3,按信息交换的单位分类:块设备;字符设备
4,按设备的共享属性分类:独占设备;共享设备;虚拟设备
设备与控制器之间的接口:
![操作系统(第五章 设备管理) - 简单的猪 - 简单的猪](http://img615.ph.126.net/7w3LCqjS9b8kBoZIGIbNyw==/1677027911244156016.gif)
数据信号线用于在设备和设备控制器之间传送数据信号。
控制信号线由设备控制器向I/O设备发送控制信号时的通路。
状态信号线用于传送指示设备当前状态的信号。
设备控制器:主要职责是控制一个或多个I/O设备,以实现I/O设备和计算机之间的数据交换。它是CPU与I/O设备之间的接口。
设备控制器的基本功能:接受和识别命令;数据交换;标识和报告设备的状态;地址识别;数据缓冲;差错控制
设备控制器的组成:
1,设备控制器与处理机的接口:用于实现CPU与设备控制器之间的通信。
2,设备控制器与设备的接口
![操作系统(第五章 设备管理) - 简单的猪 - 简单的猪](http://img857.ph.126.net/QW8xLss9j79WXEPVeE2Ihg==/2788009644320393074.gif)
3,I/O逻辑:用于实现对设备的控制。
I/O通道设备的引入:I/O通道是一种特殊的处理机。它具有执行I/O指令的能力,并通过执行通道(I/O)程序来控制I/O操作。但I/O通道又与一般的处理机不同,主要表现在以下两个方面: 一是其指令类型单一,这是由于通道硬件比较简单, 其所能执行的命令,主要局限于与I/O操作有关的指令; 再就是通道没有自己的内存,通道所执行的通道程序是放在主机的内存中的, 换言之,是通道与CPU共享内存。
通道类型:
1,字节多路通道:按字节交叉方式工作的通道
2,数组选择通道
3,数组多路通道
瓶颈问题:由于通道价格昂贵,致使机器中所设置的通道数量势必较少,这往往又使它成了I/O的瓶颈,进而造成整个系统吞吐量的下降。假设设备1至4是四个磁盘,为了启动磁盘4,必须用通道1和控制器2,但若这两个设备已占用,则无法启动。这就是瓶颈现象。
总线系统:计算机中各部件之间的通信都是通过总线来实现的。总线的性能用总线的时钟频率,带宽和相应的总线传输速率等指标来衡量的。
ISA(Industry Standard Architecture)总线 和EISA(Extend ISA)总线
局部总线:指将多媒体卡,高速LAN网卡,高性能图形板等,从ISA总线上卸下来,再通过局部总线控制器直接接到CPU总线上,使之与高速CPU总线相匹配。典型的有VESA总线和PCI总线。
I/O控制方式
程序I/O方式:忙—等待方式
中断驱动I/O控制方式:在I/O设备输入每个数据的过程中,由于无须CPU干预,因而可使CPU与I/O设备并行工作。仅当输完一个数据时,才需CPU花费极短的时间去做些中断处理。可见,这样可使CPU和I/O设备都处于忙碌状态,从而提高了整个系统的资源利用率及吞吐量。
![操作系统(第五章 设备管理) - 简单的猪 - 简单的猪](http://img.ph.126.net/Wd9v14r6J7O6M7zyiqkoog==/181269885018491692.gif)
直接存储器访问(DMA)I/O控制方式:特点是:① 数据传输的基本单位是数据块,即在CPU与I/O设备之间,每次传送至少一个数据块;② 所传送的数据是从设备直接送入内存的,或者相反; ③ 仅在传送一个或多个数据块的开始和结束时,才需CPU干预,整块数据的传送是在控制器的控制下完成的。
DMA控制器的组成:主机与DMA控制器的接口;DMA控制器与块设备的接口;I/O控制逻辑。
为了实现在主机与控制器之间成块数据的直接交换, 必须在DMA控制器中设置如下四类寄存器:
(1) 命令/状态寄存器CR。用于接收从CPU发来的I/O命令或有关控制信息,或设备的状态。
(2) 内存地址寄存器MAR。在输入时,它存放把数据从设备传送到内存的起始目标地址;在输出时,它存放由内存到设备的内存源地址。
(3) 数据寄存器DR。用于暂存从设备到内存,或从内存到设备的数据。
(4) 数据计数器DC。 存放本次CPU要读或写的字(节)数。
DMA工作过程:以磁盘读入数据为例,当CPU要从磁盘读入一数据块时,便向磁盘控制器发送一条读命令,该命令被送到其中的命令寄存器(CR)中,同时,还须发送背刺要将数据读入的内存起始目标地址,该地址被送入内存地址寄存器(MAR)中;本次要读的数据的字节数则送入数据计数器(DC)中,还须将磁盘中的源地址直接送到DMA控制器和I/O控制逻辑上,然后启动DMA控制器进行数据传送,以后CPU便可去处理其他任务。此后,整个数据传送过程便由DMA控制器进行控制,当DMA控制器已从磁盘中读入一个字节的数据并送入数据寄存器(DR)后,再挪用一个存储器周期,将该字节传送到MAR所指示的内存单元中,接着便对MAR内容加1,将DC内容减1。若减1后DC内容不为0,表示传送未完,便继续传送下一个字节。否则,由DMA控制器发送中断请求。如图所示:
I/O通道控制方式
引入:I/O通道方式是DMA方式的发展,它可进一步减少CPU的干预,即把对一个数据块的读(或写)为单位的干预,减少为对一组数据块的读(或写)及有关的控制和管理为单位的干预。 同时,又可实现CPU、通道和I/O设备三者的并行操作,从而更有效地提高整个系统的资源利用率。例如,当CPU要完成一组相关的读(或写)操作及有关控制时,只需向I/O通道发送一条I/O指令,以给出其所要执行的通道程序的首址和要访问的I/O设备,通道接到该指令后,通过执行通道程序便可完成CPU指定的I/O任务。
通道程序:通道是通过执行通道程序,并与设备控制器共同实现对I/O设备的控制的。通道程序是由一系列通道指令所构成的。与一般通道指令不同,每条指令中都包含下列诸信息:
(1)操作码:规定了指令所执行的操作。
(2)内存地址:标明读操作和写操作时的内存首址
(3)计数:表示本条占领所要读或写数据的字节数
(4)通道程序结束位P:用于表示通道程序是否结束
(5)记录结束标志R。
缓冲管理
引入原因:缓和CPU与I/O设备间速度不匹配的矛盾;减少对CPU的中断频率,放宽对CPU中断响应时间的限制;提高CPU和I/O设备之间的并行性。
单缓冲:每当用户进程发出一I/O请求时,系统便在主存中为之分配一缓冲区。假定一块数据输入到缓冲区的时间为T,数据传送到用户区的时间为M,cpu对这一块数据的处理时间为C,故系统对每一块数据的处理时间表示为Max(C,T)+M。
双缓冲:也成为缓冲对换,在设备输入时,先将数据送入第一缓冲区,装满后便转向第二缓冲区。此时,系统处理一块数据的时间可以粗略的认为是Max(C,T),如果C<T,可使块设备连续输入;如果C>T,可使Cpu不必等待设备输入。
双机通信时缓冲区的设置:
循环缓冲的组成:
(1)多个缓冲区。每个缓冲区的大小相同。用于装入数据的空缓冲区R、已装满数据的缓冲区G以及计算进程正在使用的现行工作缓冲区C。
(2)多个指针。用于指示计算进程下一个可用缓冲区G的指针Nextg、指示输入进程下次可用的空缓冲区R的指针Nexti,以及用于指示计算进程正在使用的缓冲区C的指针Current。
循环缓冲区的使用:
(1)Getbuf过程。当计算进程要使用缓冲区中的数据时,可调用Getbuf过程。该过程将由指针Nextg所指示的缓冲区提供给进程使用。相应地须把它改为现行工作缓冲区,并令Current指针指向该缓冲区的第一个单元,同时将Nextg移向下一个G缓冲区。
(2)Releasebuf过程。当计算进程把C缓冲区中的数据提取完毕时,便调用Releasebuf过程,将缓冲区C释放。此时,把该缓冲区由当前工作缓冲区C改为空缓冲区R。类似的当输入进程把缓冲区装满时,也应调用Releasebuf过程,将该缓冲区释放,并改为G缓冲区。
进程同步:
(1)Nexti指针追赶上Nextg指针。输入进程输入数据的速度大于计算进程处理数据的速度,已把全部可用的空缓冲区装满,再无缓冲区可用。
(2)Nextg指针追赶上Nexti指针。输入数据的速度低于计算进程处理数据的速度,使全部装有输入数据的缓冲区都被抽空,再无装有数据的缓冲区供计算进程提取数据。
缓冲池引入:上述的缓冲区仅适用于某特定的I/O进程和计算进程,因而它们属于专用缓冲。当系统较大时,将会有许多这样的循环缓冲,这不仅要消耗大量的内存空间,而且其利用率不高。为了提高缓冲区的利用率,适用公用缓冲池,在池中设置多个可供若干个进程共享的缓冲区。
缓冲区的组成:对于既可用于输入又可用于输出的公用缓冲池, 其中至少应含有以下三种类型的缓冲区:① 空(闲)缓冲区; ② 装满输入数据的缓冲区; ③ 装满输出数据的缓冲区。 为了管理上的方便,可将相同类型的缓冲区链成一个队列,于是可形成以下三个队列:
(1)空缓冲队列emq。
(2) 输入队列inq。
(3) 输出队列outq。
除了上述按个队列外,还应有四种工作缓冲区:①用于收容输入数据的工作缓冲区;②用于提取输入数据的工作缓冲区;③用于收容输出数据的工作缓冲区;④用于提取数据的工作缓冲区。
Getbuf过程和Putbuf过程
Procedure Getbuf(type)
begin
Wait(RS(type));
Wait(MS(type));
B(number)∶[KG-*3]=Takebuf(type);
Signal(MS(type));
end
Procedure Putbuf(type, number)
begin
Wait(MS(type));
Addbuf(type, number);
Signal(MS(type));
Signal(RS(type));
end
缓冲区的工作方式:
(1)收容输入。在输入进程需要输入数据时,便调用Getbuf(emq)过程,从空缓冲队列emq的队首摘下一空缓冲区,把它作为收容输入工作缓冲区hin。然后,把输入其中,装满后再调用Putbuf(inq,bin)过程,将该缓冲区挂在输入队列inq上。
(2)提取输入。当计算进程需要输入数据时,调用Getbuf(inq)过程,从输入队列inq的队首取得一个缓冲区,作为提取输入工作缓冲区(sin),计算进程从中提取数据。计算进程用完该数据后,再调用Putbuf(emq,sin)过程,将该缓冲区挂到空缓冲队列emq上。
(3)收容输出。当计算进程需要输出时,调用Getbuf(emq)过程从空缓冲对队列emq的队首取得一个空缓冲区,作为收容输出工作缓冲区hout。当其中装满输出数据后,又调用Putbuf(outq,hout)过程,将该缓冲区挂在outq末尾。
(4)提取输出。由输出进程调用Getbuf(outq)过程,从输出队列的队首取得一装满输出数据的缓冲区,作为提取输出工作缓冲区sout。在数据提取完后,再调用Putbuf(emq,sout)过程,将该缓冲区挂在空缓冲队列末尾。
I/O软件
I/O软件的总体设计目标是高效率和通用性。前者是要确保I/O设备与CPU的并发性,以提高资源的利用率;后者则是尽可能地提供简单抽象、清晰而统一的接口,采用统一标准的方法来管理所有的设备以及所需的I/O操作。
I/O软件应达到下面的几个目标:①与具体设备无关;②统一命名;③对错误的处理;④缓冲技术;⑤设备的分配和释放;⑥I/O控制方式。
I/O软件的层次结构:
(1)用户层软件:实现与用户交互的接口,用户可直接调用在用户层提供的、与I/O操作有关的库函数,对设备进行操作。
(2)设备独立性软件:负责实现与设备驱动器的统一接口、设备命名、设备的保护以及设备的分配与释放等,同时为设备管理和数据传送提供必要的存储空间。
(3)设备驱动程序:与硬件直接相关,负责具体实现系统对设备发出的操作指令,驱动I/O设备工作的驱动程序。
(4)中断处理程序:用于保存被中断进程的Cpu环境,转入相应的中断处理程序进行处理,处理完后再恢复被中断进程的现场后返回到被中断进程。
中断处理层的主要工作有:进行进程上下文的切换,对处理中断信号源进行测试,读取设备状态和修改进程状态等。
中断处理程序的处理过程分成以下步骤:
(1)唤醒被阻塞的驱动进程;
(2)保护被中断进程的Cpu环境;
(3)转入相应的设备处理程序;
(4)中断处理;
(5)恢复被中断进程的现场。
设备驱动程序:I/O进程与设备控制器之间的通信程序。
设备驱动程序的功能:
(1)接受由设备独立性软件发来的命令和参数,并将命令中的抽象要求转换为具体要求。
(2)检查用户I/O请求的合法性。
(3)发出I/O命令。
(4)及时响应由控制器或通道发来的中断 请求,并根据其中断类型调用相应的中断处理程序进行处理。
(5)对于设置有通道的计算机系统,驱动程序还应能够根据用户的I/O请求,自动地构成通道程序。
设备处理方式:(1)为每一类设备设置一个进程。(2)在整个系统中设置一个I/O进程。(3)不设置专门的设备处理进程,只为各类设备设置相应的设备处理程序。
设备驱动程序的特点:
(1)驱动程序主要是指在请求I/O的进程与设备控制器之间的一个通信和转换程序。
(2)驱动程序与设备控制器和I/O设备的硬件特性紧密相关,因而对不同类型的设备应配置不同的驱动程序。
(3)驱动程序与I/O设备所采用的I/O控制方式紧密相关。
(4)由于驱动程序与硬件紧密相关,因而其中的一部分必须用汇编语言书写。
(5)驱动程序应允许可重入。
(6)驱动程序不允许系统调用。
设备驱动程序的处理过程:
(1)将抽象要求转换为具体要求。
(2)检查I/O请求的合法性。
(3)读出和检查设备的状态。
(4)传送必要的参数。
(5)工作方式的设置。
(6)启动I/O设备。
设备独立性的好处:设备分配时的灵活性;易于实现I/O重定向。
设备独立性软件功能:
(1)执行所有设备的公有操作:①对独立设备的分配与回收;②将逻辑设备名映射为物理设备名;③对设备进行保护,禁止用户直接访问设备;④缓冲管理;⑤差错控制;⑥提供独立于设备的逻辑块。
(2)向用户层软件提供统一接口。
逻辑设备名到物理设备名映射的实现:
(1)逻辑设备表:系统设置一张逻辑设备表(LUT,Logical Unit Table),表目中包含:逻辑设备名、物理设备名和设备驱动程序的入口地址。
(2)LUT设置:①整个系统中只设置一张LUT。②为每个用户设置一张LUT
设备分配
设备控制表(DCT)
控制器控制表、通道控制表和系统设备表
设备的固有属性:独占设备,共享设备,可虚拟设备。
设备分配算法:先来先服务;优先级高者优先
设备分配中的安全性:
(1)安全分配方式:每当进程发出I/O请求后,便进入阻塞状态,直到其I/O操作完成时才被唤醒。一旦进程已经获得某种设备资源后阻塞,使该进程不可能再请求任何资源,而它在运行时有不保持任何资源。摒弃了造成死锁的四个必要条件之一的请求和保持条件。缺点是进程进展缓慢,CPU与I/O是串行工作的。
(2)不安全分配方式。进程在发送出I/O请求后仍继续进行,需要时又发出I/O请求。仅当进程所请求的设备已被另一进城占用时,请求进程才进入阻塞状态。
设备分配程序:分配设备;分配控制器;分配通道。
设备分配程序的改进:增加设备的独立性;考虑多通路情况。
SPOOLing技术:为了缓和CPU的高速性与I/O设备低速性间的矛盾而引入了脱机输入、 脱机输出技术。 该技术是利用专门的外围控制机, 将低速I/O设备上的数据传送到高速磁盘上;或者相反。事实上, 当系统中引入了多道程序技术后,完全可以利用其中的一道程序,来模拟脱机输入时的外围控制机功能,把低速I/O设备上的数据传送到高速磁盘上;再用另一道程序来模拟脱机输出时外围控制机的功能,把数据从磁盘传送到低速输出设备上。这样,便可在主机的直接控制下,实现脱机输入、 输出功能。 此时的外围操作与CPU对数据的处理同时进行, 我们把这种在联机情况下实现的同时外围操作称为SPOOLing(Simultaneaus Periphernal Operating On-Line),或称为假脱机操作。
SPOOLing系统的组成:
(1)输入井和输出井,磁盘上开辟的两个大存储空间。
(2)输入缓冲区和输出缓冲区,内存中开辟的缓冲区。
(3)输入进程SPi和输出进程SP0。利用这两个进程来模拟脱机I/O时的外围控制机。
共享打印机:共享打印机技术已被广泛地用于多用户系统和局域网络中。 当用户进程请求打印输出时, SPOOLing系统同意为它打印输出, 但并不真正立即把打印机分配给该用户进程, 而只为它做两件事: ① 由输出进程在输出井中为之申请一个空闲磁盘块区, 并将要打印的数据送入其中; ② 输出进程再为用户进程申请一张空白的用户请求打印表,并将用户的打印要求填入其中, 再将该表挂到请求打印队列上。
SPOOLing系统的特点:提高I/O速度;将独占设备改造为共享设备;实现了虚拟设备的功能。
磁盘存储器的管理
磁盘的类型:
(1) 固定头磁盘
这种磁盘在每条磁道上都有一读/写磁头,所有的磁头都被装在一刚性磁臂中。通过这些磁头可访问所有各磁道,并进行并行读/写,有效地提高了磁盘的I/O速度。 这种结构的磁盘主要用于大容量磁盘上。
(2) 移动头磁盘
每一个盘面仅配有一个磁头,也被装入磁臂中。为能访问该盘面上的所有磁道,该磁头必须能移动以进行寻道。可见,移动磁头仅能以串行方式读/写,致使其I/O速度较慢;但由于其结构简单, 故仍广泛应用于中小型磁盘设备中。
磁盘的访问时间:
(1) 寻道时间Ts
这是指把磁臂(磁头)移动到指定磁道上所经历的时间。该时间是启动磁臂的时间s与磁头移动n条磁道所花费的时间之和, 即
Ts=m×n+s
其中,m是一常数,与磁盘驱动器的速度有关,对一般磁盘, m=0.2;对高速磁盘,m≤0.1,磁臂的启动时间约为2 ms。 这样,对一般的温盘, 其寻道时间将随寻道距离的增加而增大, 大体上是5~30 ms。
(2) 旋转延迟时间Tτ
这是指定扇区移动到磁头下面所经历的时间。对于硬盘,典型的旋转速度大多为5400 r/min,每转需时11.1 ms,平均旋转延迟时间Tτ为5.55 ms;对于软盘,其旋转速度为300 r/min或600 r/min,这样,平均Tτ为50~100 ms。
(3)传输时间Tt,这是指把数据从磁盘读出或向磁盘写入数据所经历的时间。 Tt的大小与每次所读/写的字节数b和旋转速度有关:
其中,r为磁盘每秒钟的转数;N为一条磁道上的字节数, 当一次读/写的字节数相当于半条磁道上的字节数时,Tt与Tτ相同, 因此, 可将访问时间Ta表示为:
磁盘调度:
1,先来先服务(FCFS)
2,最短寻道时间优先(SSTF,Shortest Seek Time First)
3.,扫描(SCAN)算法
(1)进程饥饿现象:SSTF算法虽然能获得较好的寻道性能, 但却可能导致某个进程发生“饥饿”(Starvation)现象。因为只要不断有新进程的请求到达, 且其所要访问的磁道与磁头当前所在磁道的距离较近,这种新进程的I/O请求必须优先满足。对SSTF算法略加修改后所形成的SCAN算法, 即可防止老进程出现“饥饿”现象。
(2)SCAN算法
3,循环扫描(CSCAN)算法
磁盘高速缓存的形式:是指利用内存中的存储空间,来暂存从磁盘中读出的一系列盘块中的信息。因此,这里的高速缓存是一组在逻辑上属于磁盘, 而物理上是驻留在内存中的盘块。高速缓存在内存中可分成两种形式。第一种是在内存中开辟一个单独的存储空间来作为磁盘高速缓存,其大小是固定的,不会受应用程序多少的影响;第二种是把所有未利用的内存空间变为一个缓冲池,供请求分页系统和磁盘I/O时(作为磁盘高速缓存)共享。此时高速缓存的大小,显然不再是固定的。当磁盘I/O的频繁程度较高时,该缓冲池可能包含更多的内存空间;而在应用程序运行得较多时,该缓冲池可能只剩下较少的内存空间。
数据交付方式:系统可以采取两种方式, 将数据交付给请求进程:
(1) 数据交付。这是直接将高速缓存中的数据, 传送到请求者进程的内存工作区中。
(2) 指针交付。只将指向高速缓存中某区域的指针, 交付给请求者进程。
后一种方式由于所传送的数据量少,因而节省了数据从磁盘高速缓存存储空间到进程的内存工作区的时间
置换算法:由于请求调页中的联想存储器与高速缓存(磁盘I/O中)的工作情况不同,因而使得在置换算法中所应考虑的问题也有所差异。因此,现在不少系统在设计其高速缓存的置换算法时,除了考虑到最近最久未使用这一原则外, 还考虑了以下几点:
(1) 访问频率。
(2) 可预见性。
(3) 数据的一致性。
周期性地写回磁盘:在UNIX系统中专门增设了一个修改(update)程序, 使之在后台运行,该程序周期性地调用一个系统调用SYNC。该调用的主要功能是强制性地将所有在高速缓存中已修改的盘块数据写回磁盘。一般是把两次调用SYNC的时间间隔定为30 s。这样,因系统故障所造成的工作损失不会超过30 s的劳动量。而在MS-DOS中所采用的方法是:只要高速缓存中的某盘块数据被修改,便立即将它写回磁盘,并将这种高速缓存称为“写穿透、高速缓存”(write-through cache)。 MS-DOS所采用的写回方式,几乎不会造成数据的丢失, 但须频繁地启动磁盘。
提高磁盘I/O速度的其它方法:提前读(Read-Ahead);延迟写;优化物理块的分布;虚拟盘
RAID的优点:可靠性高;磁盘I/O速度高;性能价格比高。