《计算机操作系统教程》课件-第6章_第1页
《计算机操作系统教程》课件-第6章_第2页
《计算机操作系统教程》课件-第6章_第3页
《计算机操作系统教程》课件-第6章_第4页
《计算机操作系统教程》课件-第6章_第5页
已阅读5页,还剩163页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

6.1I/O系统的硬件结构6.2采用通道模型的I/O系统6.3I/O系统的软件组织6.4缓冲技术6.5磁盘的驱动调度6.6设备分配程序6.7WindowsNT的I/O系统6.8小结习题6.1.1I/O设备类型

1.按使用特性分类

计算机系统中的外部设备,按设备的使用特性,可分为存储设备、输入/输出设备、终端设备以及脱机设备等,如图6.1所示。6.1I/O系统的硬件结构图6.1按使用特性对设备的分类

2.按所属关系分类

外部设备按其所属关系可分为系统设备和用户设备。

(1)系统设备。这是指在操作系统生成时已经登记在系统中的标准设备,如打印机、磁盘等。时钟也是一个特殊的系统设备,它的全部功能就是按事先定义的时间间隔发出中断。

(2)用户设备。这是指在系统生成时未登记在系统中的非标准设备。这类设备通常是由用户提供的,因此该类设备的处理程序也应该由用户提供,并通过适当的手段把这类设备登记在系统中,以便系统能对它实施统一管理。

3.按资源分配角度分类

从资源分配角度来看,外部设备又可分为独占设备、共享设备和虚拟设备等三类。

(1)独占设备。为了保证信息传输的连贯性,通常该类设备一经分配给某个进程,在该进程释放它之前,其他设备不能使用。多数的低速I/O设备都属于独占设备。如打印机和纸带读入机,只能为某一个进程所独占,而不允许几个进程同时使用。

(2)共享设备。这是指允许若干个进程同时使用的设备。实际上,几个进程可以同时交替地使用一台设备,如几个进程交替地从一台磁盘机上读写数据。显然,共享的效果可获得较高的设备利用率。

(3)虚拟设备。通过假脱机(Spooling)技术把原来的独占设备改造成可为若干个进程所共享的设备,以提高设备的利用率,这种设备即为虚拟设备。

4.按传输数据数量分类

外部设备按传输数据的数量,分为字符设备和块设备。

(1)字符设备。每次传输数据以字节为单位的设备称为字符设备,如打印机、终端、键盘等低速设备。

(2)块设备。以数据块为单位进行传输的设备称为块设备,如磁盘、磁带等高速外存储器等。6.1.2I/O设备的物理特性

1.磁盘

磁盘是一种直接存取存储设备。磁盘是将信息存储在涂有一层铁磁物质的金属圆盘上的一种存储媒体。如果将若干个这样的圆盘片组合在一起,便形成了一个盘组。只有一个盘片的磁盘称为软盘,由多个盘片组成的磁盘称为硬盘。每个盘片有上、下两个盘面,上、下两面都有若干个同心圆和一个读/写磁头。在活动头磁盘中,每个盘面只有一个读/写磁头,让这些磁头在盘面上来回移动,而盘体则绕中心轴高速旋转。图6.2表示一个盘组由若干圆盘组成,磁头在盘面上移动的情况。该盘组由10个圆盘组成,共20个盘面,而每个盘面上只有一个磁头,编号为0~19,其中有一个磁头称为伺服磁头,用于控制定位。图6.2磁盘物理结构概念图在磁盘执行读写操作时,整个盘组在不停地旋转,存取臂带动磁头来回移动。存取臂移动到某一固定位置,对应的磁头就在磁盘上画一个圆,这个圆称为磁道。各个存取臂如以相同的长度沿水平方向移动,则相同半径的一些磁道组成一个圆柱面,称为柱面。对于一个盘组,其柱面由外向里编号,即0,1,2,……在每个柱面上,把磁头号作为磁道号,磁道从上向下编号,即0,1,2,……所有实际的磁盘都组织成许多柱面,一个柱面上的磁道数等于垂直放置的磁头数。一个磁道又可划分为许多扇区,每个磁道上的扇区数,对于软盘是8至32个扇区,在某些硬盘上可多达几百个扇区。通常每条磁道具有相同的扇区数,每个扇区包含相同的字节数。软件使用的数据块通常由几个(一个、两个或四个)连续的扇区组成,作为一个物理记录进行读写。磁盘上一个物理块的物理地址由三部分组成:柱面号(CC)、磁道号(HH)和物理记录号(R)。不难看出,物理上靠近磁盘外边沿的扇区比靠近内边沿的扇区要长一些。不过读写每个扇区的时间是一样的,显然,在最里面的柱面上的数据密度要高一些。这种密度的不同意味着要牺牲一些磁盘容量。有人尝试过设计一种当磁头处于外部磁道时,旋转速度更快的软盘,这样外圈磁道就可以具有更多的扇区,从而增加盘的容量。在现代大容量磁盘中,外圈磁道具有的扇区数比内圈磁道要多,这就产生了IDE(IntegratedDriveElectronics)驱动器。这种驱动器用内置的电子器件进行复杂的处理,屏蔽了具体细节。对操作系统来说,它仍然呈现出简单的结构,每条磁道具有相同的扇区。

表6-1给出了作为IBM-PC机标准存储介质的双面双密度软盘和可用在奔腾机上中等容量磁盘的技术参数。

2.时钟

时钟也是一种外部设备,它既不是一个块设备,也不是一个字符设备。但时钟软件却可以以设备驱动程序的形式进行工作。

在计算机系统中使用两种类型的时钟。一种是最简单的时钟,它被连接到110V或220V的电力线上,以50Hz或60Hz的频率在每个电压周期产生一次中断。另一种时钟如图6.3所示。它由三个元件组成:晶振、计数器和保持寄存器。当把石英晶体进行适当的切削并安装于一定压力之下时,它会产生非常精确的周期信号。把这个信号送入计数器并使其递减,当计数减至零时产生一个中断。图6.3可编程时钟典型的可编程时钟有几种操作模式。在单触发模式(One-shotMode)中,一个时钟启动时,它把保持寄存器的值拷贝到计数器中,然后每当从晶振来一个脉冲,对计数器值减1;当计数器值为零时,产生一次中断,并停止工作,直至再次被软件启动。在方波模式(Square-waveMode)中,每次计数器计数至零并引起中断后,保持寄存器自动拷贝到计数器,整个过程不断重复进行。这些周期性的中断称为时钟滴答(ClockTick)。

可编程时钟的优点是它的中断频率可由软件控制。如果使用振荡频率为1MHz的晶体,那么计数器每一微秒接收到一个脉冲,对于16位的寄存器,中断可编程为按1μs至65536μs的间隔发生。时钟硬件所做的工作仅仅是按给定的时间间隔产生中断,其它和时间有关的工作必须由软件(时钟驱动程序)来做。时钟软件的任务包括:

①维护日期和时间;

②防止进程运行时间超过允许界限;

③对CPU使用进行记帐;

④处理用户进程提出的时间闹钟系统调用;

⑤对系统某些部分提供监视定时器;

⑥支持直方图监视和统计信息搜集。

3.终端

每台计算机都有一个或多个终端。终端的种类、型号较多,需要终端驱动程序屏蔽其细节。

根据操作系统如何与终端通信,将终端分为三类:存储映像终端、RS-232串行接口和网络接口终端。

(1)存储映像终端。其包括键盘和显示器,二者直接与计算机相连。存储映像终端使用称为视频RAM(VideoRAM)的特殊存储器。视频RAM是计算机地址空间的一部分,使用与其它地址空间一样的方式对它进行访问。视频存储卡上有一个芯片称为视频控制器(VideoController)。这个芯片从视频RAM中取出字符,产生用于驱动显示器(监视器)的视频信号,如图6.4所示。监视器产生水平扫描屏幕的电子束。典型的屏幕有480至1024行,每行640至1200点。这些点称为像素(Pixel)。视频控制器调节电子束,决定一个像素是亮的还是黑的。彩色监视器有三个电子束,分别对应红色、绿色和蓝色。图6.4存储映像终端直接写入视频RAM一个简单的单色显示器可显示25行,每行80个字符。每个字符的宽度为9个像素,高度为14个像素(包括字符间的空白)。这种显示器有350行扫描线,每行扫描线有720个点,每帧每秒重画45至70次。视频控制器被设计成首先从视频RAM中取出80个字符,产生14行扫描线,再取80个字符,再产生14行扫描线,这样一直工作下去。事实上,大多数视频控制器显示每个字符的每行扫描线时,都取一次字符以便在控制器中不需要缓冲。每个字符的9列宽14行高的位模保存在视频控制器的视频ROM中(也可以使用RAM,以支持用户字体)。ROM按12位编址,8位来自字符代码,4位指定扫描线。ROM中每个字节的8位控制8个像素,字符间的第9个像素总是为空。因此屏幕上的每行文本需14×80次存储器访问,也需访问相同次数的字符发生器。对于存储映像显示器,键盘是与显示器分开的,它可能通过一个串行口或并行口和计算机相连。对于每一个键动作,产生CPU中断,键盘中断程序通过读I/O口取得键入的字符。

在IBM-PC中,键盘包括一个内嵌的微处理器,通过特殊的串行口和主板上的一个控制芯片通信。任何时刻击键或释放键,都产生一个中断,而且键盘仅仅提供键码,而不是ASCII码。当击A键时,键码(30)被存放于I/O寄存器。输入字符是大写、小写、CTRL-A、ALT-A、CTRL-ALT-A,还是其它的组合,则由驱动程序确定。因为驱动程序知道哪些键被按下还没有释放,因此它有足够的信息完成这项工作。虽然键盘接口把全部工作交给了软件,但这提供了很大的灵活性。

(2)RS-232终端。其通过一次传输一位的串行口与计算机通信,如图6.5所示。这些终端使用9针或25针的连接器。其中一针为发送数据,一针为接收数据,一针接地,其它各针可用于各种控制功能,实际上大多数并未使用。为了向RS-232终端发一个字符,计算机必须一次传输一位,在字符前面加一起始位,后接一个或两个终止位为字符定界。可在终止位前插入一提供基本校验的奇偶位,但通常仅在与主机系统通信时才需要这种技术。RS-232终端通常用于计算机远程通信,两者之间使用调制解调器及电话线。图6.5RS-232终端与计算机通信计算机和终端在内部都是对整个字符进行操作的,但又必须通过串行线路以一次传输一位的方式进行通信。为此开发了一种芯片用来实现字符到串行口和串行口到字符的转换,称为UART(通用异步收发器,UniversalAsynchronousReceiverTransmitter)。UART通过把RS-232接口板插入总线和计算机相连。RS-232终端正逐渐消失,而由PC和X终端代替,但它们仍用于一些老的大型系统中。

RS-232终端有多种形式,最简单的是硬拷贝终端,通过键盘键入的字符传输到主机,主机传出的字符打印在纸上。这些终端已经过时且很少见到。另一类的哑终端也按这种方式工作,不同的是用屏幕代替了纸。因为在功能上和硬拷贝是一样的,这些终端被称为玻璃终端。玻璃终端也已过时。

智能终端事实上是微缩专用计算机,其具有CPU、存储器和软件。软件一般在ROM中。从操作系统的观点来看,智能终端与玻璃终端的不同在于智能终端可以理解特殊的转义字符序列。

(3)X终端。此为智能终端最高档的一种,它包含和主机CPU一样强大的CPU。X终端还包含几兆字节的主存、键盘和鼠标,在其上运行MIT的X-Window系统,一般X终端通过以太网和主机通信。

一个X终端是运行X软件的计算机。一些产品只能运行X,其它产品作为通用机能把X作为和其它程序一样的程序来运行。无论哪种方式,X终端都有一个大的位映像屏幕,一般为960×1200或更高,黑色、灰色或彩色。此外,还有一个完整的键盘和一个鼠标。

X终端内收集从键盘或鼠标来的输入并接收远程计算机命令的一个程序称为X服务器。它通过网络与运行在主机上的X客户通信,使X服务器运行于终端内,客户程序运行在远程主机上会令人奇怪,但X服务器的工作是位显示,因此它靠近用户是有益的。客户和服务器的管理示于图6.6中。图6.6X-Window系统中的客户和服务器

X终端的屏幕包含一些窗口,每个窗口都是采用长方形像素网格的形式。在其顶部有一标题条,左边有一滚动条,在右上角有一改变窗口大小的方小框。一个X客户是一个称为窗口管理器(WindowManager)的程序,它的工作是控制在屏幕上创建、删除和移动窗口。为了管理窗口,它向X服务器发一命令,告诉它做什么。这些命令包括画点画线、画矩形、画多边形、填充矩形、填充多边形等。

X服务器的工作是调度来自鼠标、键盘和X客户的输入并更新显示。它要跟踪当前选中了的那一窗口(鼠标所指的),所以它知道键盘输入的内容应送给哪个客户。6.1.3I/O系统的硬件组织

在计算机系统中,所谓输入/输出,是指主存和外围设备之间的数据传输操作。在多道程序设计技术引入系统之后,输入、输出操作的能力不仅影响计算机的通用性和可扩充性,而且也成为计算机系统的综合处理能力和性能价格比的重要因素。

1.I/O控制方式

计算机系统中对输入/输出的控制有以下几种方式:

(1)循环I/O测试方式。在早期计算机或现代微机系统中,往往采用循环I/O测试方式。

循环I/O测试方式是一种用程序直接控制I/O操作的方式。在这种方式下,计算机的I/O测试指令,通过测试一台设备的忙/闲标志,决定主存和外设之间是否要传输一个字符或一个字。很显然,在这种方式下,中央处理机的大量时间用在等待输入、输出的循环检测上,使主机不能充分发挥效率,外设也不能得到合理使用,整个系统效率很低。

(2)程序中断I/O方式。中断机构引入之后,外围设备有了反映其自身状态的能力,仅当I/O操作正常或异常结束时才中断中央处理机,从而实现了一定程度的并行操作,这种方式称为程序中断方式。例如行式打印机每打印一行需60ms,在循环I/O测试方式中,中央处理机要大约花费59.99ms的时间用于测试,并处于循环等待;但在程序中断I/O方式中,中央处理机可用多于59.9ms的时间去做别的计算,仅用0.1ms的时间来处理I/O设备发来的中断。虽然中断的引入改善了中央处理机的利用率,并使输入、输出和处理这三者更好地并行操作。但I/O操作毕竟还是由CPU控制的,此时每传输一个字或字符,往往就要做一次中断处理。例如,为传输1000个字符需经1000次中断才能完成,其中999次中断用以传输下一个字符,第1000次中断用作结束处理。通常每次中断处理经历几十条指令,每条指令的典型时间是1~2μs,这样每次中断处理需花费100μs的处理机时间,对于传输速率为1000字符/s的输入机,处理机所花费的时间要占10%左右。由此可见,当I/O设备很多时,CPU可能完全陷入I/O处理中。

(3)DMA方式。许多设备,尤其是块设备都支持DMA(DirectMemoryAccess)方式。我们先看一下没有使用DMA时磁盘是怎样读数据的。首先,控制器逐个比特(bit)地从设备完整地读出一块(一个或多个扇区)数据放入内部缓冲区中,然后,计算该块数据的检查和,以保证读取的正确性,接着,控制器发出中断信号,操作系统开始逐个字节(byte)地从

控制器的设备寄存器中将数据读入内存。由于一次只能读一个字节,因此需要通过一个循环才能将整个数据块读完。显然,CPU循环地每次从控制器读一个或几个字节是很费时的,为了解决这个问题,人们引入DMA,将CPU从这项工作中解脱出来。使用DMA时,CPU除了要告诉控制器数据块的地址外,只需告诉控制器两条消息:数据块将要存放的内存地址和要传输的字节数,如图6.7所示。

控制器首先从设备中将整个数据块读入内部缓冲区并进行校验,接着它将第一个字节(或字)按内存地址寄存器所指示的地址从内部缓冲区传送到内存。随后它对内存地址寄存器和传输字节计数器分别进行增减,这一过程一直重复下去,直至传输字节计数器变成0。此时,设备控制器发出中断信号,通知操作系统数据已经读完。图6.7DMA方式下的数据传输也许有人会问:“为什么控制器从设备读到数据后不立即将其送入内存,而是需要一个内部缓冲区呢?”原因是一旦磁盘启动开始读数据,从磁盘读出比特流的速度是恒定的。若此时控制器将数据直接传送到内存,则它必须在每个字节传送完毕后获得总线控制权。如果由于其它设备的争用而导致总线忙,则只能等待。如果在上一字节还未送入内存之前下一字节到达,控制器只好找另一个地方暂时存下来。从另一方面看,如果采用内部缓冲区,则在DMA操作启动之前不需要使用总线,这样控制器就能设计得简单(因为DMA到内存的传输对时间要求并不严格)。采用DMA方式的数据传输处理过程如下:

①当进程要求设备输入数据时,CPU把准备存放输入数据的内存始址及要传输的字节数分别送入DMA控制器中的内存地址寄存器和传送字节计数器;另外,还要把控制/状态寄存器中的中断允许位和启动位置1,从而启动设备,开始数据输入。

②发出数据输入要求的进程进入阻塞状态,进程调度程序调度其它进程占有CPU。

③输入设备不断地挪用CPU工作周期,将数据从内部缓冲区源源不断地送入内存,直至所要求的字节数全部传送完毕。

④DMA控制器在传输完成时通过中断请求线发出中断信号,CPU接到中断信号后转中断处理程序进行相应处理。

⑤中断处理结束后,CPU返回被中断的进程或去运行重新被调度的进程。

(4)通道方式。为了获得CPU和外设之间更高的并行能力,也为了让种类繁多、物理特性各异的外设能以标准的接口方式连接到系统中,计算机系统引入了各自独立体系的通道结构。通道的出现是现代计算机系统功能不断完善、性能不断提高的结果,是计算机技术的一个重要进步。

采用通道方式实现输入/输出控制将在6.2节详细讨论。

2.设备控制器

I/O设备通常由机械和电子部件组成。为了达到设计的模块化和通用性,一般将它们分开。其中的电子部件称为设备控制器。在个人计算机中它常常是一块可以插入主板扩展槽的印刷电路板,而机械部分则是设备本身。操作系统一般只与设备控制器打交道。控制器卡上一般都有一个接线器,可以把与设备相连的电缆接进来。许多控制器可以控制2个、4个甚至8个相同设备。如果控制器与设备之间的接口是标准接口,如ANSI、IEEE、ISO,则多家厂商都可以制造与该接口匹配的控制器和设备。大多数微机、小型计算机的CPU和控制器之间的通信采用单总线模型,而大型主机则采用其它模型,常常是多总线以及专门用于I/O的计算机,即通道模型。由于设备控制器处于CPU和设备之间,它既要与CPU通信,又要与设备通信,还应具有按照CPU所发来的命令去控制设备操作的功能。因此,现有大多数的设备控制器由以下三部分组成:

(1)设备控制器与CPU的接口。该接口用于实现设备控制器与CPU之间的通信。在该接口中有三类信号线:数据线、地址线、控制线。数据线通常与两类寄存器相连接:

①数据寄存器。设备控制器中可以有一个或多个数据寄存器,用于存放从设备送来的数据(输入)或从CPU送来的数据(输出)。

②控制/状态寄存器。在控制器中同样可以有一个或多个控制/状态寄存器,用于存放从CPU送来的控制信息或由设备产生的状态信息。

(2)设备控制器与设备的接口。在一个设备控制器上,可以连接一台或多台设备。相应地,在控制器中就有一个或多个设备接口,一个接口连接一台设备,在每个接口中都有数据、控制和状态三种类型的信号。

①数据信号。这些数据信号通常是一些位(bit)流,控制器的任务是把从CPU来的字节流转换成相应的位流传递给设备,或者把从设备来的位流转换成字节流送给CPU。

②控制信号。它通常是输出信号,是控制器发给设备的,用于指示设备执行读、写操作或者其它操作(如移动磁头)的信号。

③状态信号。它通常是输入信号,用于指示设备的当前状态。如指示设备正在进行读、写操作,或者指示设备已经完成读、写操作,并准备好接受下一次的数据传输。

(3)I/O逻辑。其用于对I/O的控制。它通过一组控制线与CPU交互。CPU利用该逻辑向控制器发送I/O命令;I/O逻辑对接收到的命令进行译码。每当CPU要启动一个设备时,一方面要将启动命令送给控制器;另一方面又同时通过地址线把地址送给控制器。由控制器的I/O逻辑对收到的地址进行译码,再根据译出的命令对所选的设备进行控制。设备控制器的组成示于图6.8中。图6.8设备控制器的组成

计算机的I/O系统可采用多种模型:单总线模型、多总线模型和通道模型。

通道又称I/O处理机,即专门用于输入/输出的处理机,其I/O系统的结构如图1.3所示。

具有通道结构的计算机系统,主存、通道、控制器和设备之间采用四级连接,实施三级控制。采用通道技术后,I/O操作过程如下:CPU在执行用户程序时如遇到I/O请求,则它用I/O指令启动指定通道上选址的设备,一旦启动成功,通道开始控制设备进行操作。当设备I/O操作完成后,由通道发出I/O,结束中断,CPU停止当前工作,转向中断处理程序。6.2采用通道模型的I/O系统6.2.1通道类型

按信息交换方式和连接的设备类型不同,通道可分为三种类型。

1.字节多路通道

它是为连接大量慢速外围设备而设置的。它以字节为单位交叉地工作。当一台设备传送一个字节后,立即转去为另一设备传送一个字节。

2.选择通道

它用于连接磁带、磁鼓和磁盘等快速设备,以成组方式工作。每次传送一批数据,故传送速度很快,但在这段时间内只能为一台设备服务。每当一个I/O请求操作完成后,再选择与通道相连的另一设备。

3.数组多路通道

对于像磁盘这样的外围设备,虽然传送信息很快,但是移臂定位时间很长。如果将其连在字节多路通道上,那么通道很难承受这样高的传输率。如果连在选择通道上,那么在磁盘移臂的时间内,通道只能空等。数组多路通道可以解决这一矛盾,它先为一台设备执行一条通道命令,然后自动转换,为另一台设备执行一条通道命令。对于连在数组通道上的若干台磁盘机,可以启动它们进行移臂,查找欲访问的柱面,然后,按次序交叉传送一批批信息。这样就避免了因移臂时间过长而长期占用通道。由于它在任一时刻只能为一台设备作数据传送服务,这类似于选择通道,但它不等整个通道程序执行结束就能执行另一设备的通道程序的命令,这又类似于字节多路通道。数组多路通道的实质是:对通道程序采用多道程序设计技术的硬件实现。6.2.2多通路I/O系统

由于通道的成本高,因此通道的数量远比设备少。这样,往往因通道数量不足而产生一种“瓶颈”现象,影响整个系统的处理能力。

为了使设备能得到充分利用,在通道、控制器和设备的连接上,若采用多通路的配置方案(如图6.9所示),便可提高设备利用的灵活性。图6.9多通路的配置方案由图6.9可见,I/O设备E、F、G、H均有四条通路到达主存。例如设备E到达主存的四条通路是:

通道A——控制器C——设备E通道A——控制器D——设备E

通道B——控制器C——设备E通道B——控制器D——设备E

可见,此时不会因某一通道或某一控制器被占用而妨碍主存和设备E之间的数据传输。仅当两个通道或两个控制器都被占用时,才阻塞主存和设备E之间的交换信息。采用多通路的I/O系统也可提高系统的可靠性。例如通道A出现了故障,仍可使用通道B来访问所要的设备。

设备管理程序通过对所有通路上状态信息的管理,找出一条能用的通路来使用所请求的设备。6.2.3通道命令和通道程序

I/O通道作为I/O处理机具有自己的指令系统。为了与CPU的指令相区别,我们把I/O处理机的指令称为通道命令。一条通道命令称为一个通道命令字(CCW),用通道命令编写的程序称为通道程序,也叫I/O程序,编写通道程序的过程叫做通道程序设计或I/O程序设计。

1.通道命令及其格式

通常,计算机系统的I/O处理机具有如下三类基本通道操作:

(1)数据传送类,如读、写、反读、断定(检验设备状态);

(2)设备控制类,如控制换页、磁带反绕等;

(3)转移类,即通道程序内部的控制转移。

例如,某系统中通道命令的格式如下:

每条通道命令由四个字段组成:

(1)操作码(0~7):表示通道要执行的命令;

(2)数据主存始址:表示本命令要访问的主存数据区的起始地址;

(3)特征位(32~47,只使用了32~36位,其余未用):37~39位必须置0,否则认为通道命令错。特征位进一步规定了本通道命令的意义,其各特征如下:

数据链特征(32位):当该位为“1”时,在执行本命令后,使计数值为0并取下一条CCW,下一条CCW(它规定了新的数据主存始址、特征和计数)继续执行原来的操作。

命令链特征(33位):该位为“1”时,当前命令正常结束后,顺序执行下一条CCW。

在通道程序中,除最后一条CCW外,每条CCW应指定32位为“1”,或33位为“1”。最后一条CCW的所有特征位为“0”时,表示通道在完成当前命令后自动停止。

禁发长度错特征(34位):表示对不正确的数据长度不发出错信号。一般地说,如果通道命令给出的字节数与I/O设备所用的字节数不一致,就发出错信号。如果该位置为“1”,则禁止发出错信号。

跳读特征(35位):表示禁止数据传送到内存。当该位为“1”时,从I/O设备上读出的数据不写入内存,这样就可以跳过一些数据。

程序控制中断特征(36位):如果该位为“1”,只要取出CCW并开始操作,则通道就向CPU发中断信号。

(4)字节计数(48~63位):规定了数据区的字节数。数据主存始址和字节计数这两个字段主要用于数据传送类命令。

2.通道地址字和通道状态字

在通道进行输入/输出操作期间,要访问两个固定内存单元:通道地址字(CAW)和通道状态字(CSW)。

通道地址字的格式如下:其中0~3位为存储保护钥;4~7位必须为0;8~31位为通道程序的起始地址,也就是通道程序的第一条CCW的地址。钥的作用是:当数据写入主存时,检查钥与保护锁是否一致。

通道状态字CSW中包含有通道状态的编码信息。通道状态字一般在I/O操作结束时送入主存固定单元,但也可以在执行I/O操作期间送入。在CSW的内容未改变之前,主存中的CSW仍然是可用的。通道状态字的格式如下:

其中:

钥——通道访问主存时所用的保护钥,它由CAW的前4位送来;

下一条CCW地址——通道命令计数,每当一条CCW执行完毕,该地址自动加“8”,指向下一条CCW;

设备状态——记录设备状态的字节;

通道状态——记录通道状态的字节;

剩余计数——上一条CCW执行结束后,剩余数据的字节数。

设备状态字节与通道状态字节的内容如图6.10所示。图6.10设备状态字节和通道状态字节

(a)设备状态字节;(b)通道状态字节设备状态字节是由设备控制器和相应设备产生的信号,并通过标准接口送来。其中,“注意”一般用于人工请求输入、人机联系或其它外部调用;“忙碌”表示设备或控制器正忙;“通道结束”表示设备不再占用子通道,设备与通道之间的信息传送已经结束;“设备出错”表示设备或控制器发现程序出错或设备故障,但具体原因尚需借助断定字节指明。

通道状态字节是通道中发现并记下的信号,除与设备故障有关的信号外,所有这些信号只在子通道参与执行输入/输出操作时才能出现。

中断处理程序在分析I/O中断原因时,要访问主存固定单元的CSW,还要利用断定命令到设备控制器取出断定字节。这是因为断定字节里保存了设备、控制器的更详细的状态信息。6.2.4CPU和通道间的通讯

1.输入/输出指令

输入/输出指令是中央处理机的指令,在一般计算机中,这类指令均为特权指令,只能在管态下运行,否则作为出错引起程序中断。

CPU在何时、如何向通道发出I/O指令呢?当用户程序要求在主存和I/O设备间传送数据时,就在用户程序中以广义指令或系统调用的形式向操作系统提出I/O要求。这样,处理机的状态就由算态进入管态,在管态下运行的系统程序便可使用I/O指令了。

例如,某系统中输入/输出类指令主要有:SIO,TIO,HIO,TCH。所有I/O指令都具有如下格式:

由(B1)+D1形成的地址指出通道号和设备号的存放单元,该单元的内容为:

SIO(STARTI/O):用于启动指定通道和设备开始工作。SIO指令发出后,根据通道和设备状态建立结果特征,即条件码。CPU根据执行结果建立的条件码得知此次启动是否成

功,再确定下一步的动作。

TIO(TESTI/O):用以检查I/O操作是否完成,建立相应的条件码。

HIO(HALTI/O):强行停止通道和I/O设备正在执行的操作。

TCH(TESTCHANNEL):测试通道,根据对通道测试的结果建立相应的条件码。

2.CPU和通道间的通讯

CPU和通道之间的关系是主从关系,CPU是主设备,通道是从设备。CPU和通道之间的通讯方式是:

(1)由CPU向I/O通道发I/O指令,命令通道工作,并检查其工作情况;

(2)通道以中断方式向CPU汇报,等候CPU处理。

CPU启动外围设备工作过程可用图6.11表示。图6.11CPU启动通道的工作流程图中表示了一次成功的输入/输出请求过程。当进程i在执行中要求读写外设上的信息时,通过广义指令或系统调用提出I/O请求,通过访管中断进入操作系统,操作系统在管态下,发SIO指令,命令通道程序工作。当指定的通道和设备空闲时,则启动成功,这时通道按通道程序控制设备操作,同时进程i进入阻塞状态。此时CPU可与通道并行工作,由进程调度程序选择了进程j开始执行,直到通道产生I/O中断事件(如I/O完成)时才中止进程j的运行,转入中断处理程序,激活进程i,引起重新调度。上面我们讨论了计算机系统中I/O的硬件结构,现在来看I/O系统的软件是如何组织的。

I/O系统的软件设计目标很明确,其基本思想是,将软件组织成一种层次结构,低层软件用来屏蔽硬件的细节,高层软件则主要为用户提供一个简洁、规范的接口。6.3I/O系统的软件组织6.3.1I/O软件设计的目标

I/O软件设计的第一个目标是设备无关性。其含义就是使程序员写出的软件无需任何修改便能读出软盘、硬盘以及CD-ROM等不同设备上的文件,而与具体设备无关。例如,用户可以简单地输入如下命令:

sort<input>output

就能够从各种设备上获得输入,包括软盘、硬盘或键盘,同时将输出送到各种不同的设备上,例如,软盘、硬盘甚至是屏幕。不同设备之间的差异由操作系统去处理,操作系统会调用不同的设备驱动程序来真正地将输入数据写到输出设备上。

I/O软件设计的第二个目标是错误处理。总的来说,错误应尽可能在接近硬件的地方处理。如果控制器发现一个错误,则应尽量让自己去处理;如果处理不了,可交给设备驱动程序,它可能只需重读一次就能解决问题。只有在低层软件处理不了的情况下才通知高层软件。在许多情况下,低层软件可以自己处理错误而不被高层软件感知。

I/O软件设计的第三个目标是同步/异步传输。多数I/O设备采用异步传输,即CPU启动传输操作后便转去做其它工作,直至中断到达。如果采用同步I/O操作,则用户编程将会简单得多,在发出一条Read命令后,则用户进程自动阻塞,直至数据读到缓冲区中。操作系统的I/O软件不仅能处理异步传输,也能处理同步传输。

I/O软件设计的第四个目标是必须能处理独占设备和共享设备的I/O操作。

为实现以上四个目标,I/O系统应组织成以下四个层次:

(1)中断处理程序;

(2)设备驱动程序;

(3)与设备无关的I/O软件;

(4)用户空间的I/O软件。

6.3.2中断处理程序

中断处理程序位于I/O系统的最低层。当进程需要进行I/O操作时,操作系统应将该进程挂起,即进入阻塞,直至I/O操作结束并发生中断。当中断发生时,中断处理程序执行相应的操作,以解除相应进程的阻塞状态。

6.3.3设备驱动程序

设备驱动程序包括了所有与设备有关的代码。每一个设备驱动程序只处理一种设备或者一类密切相关的设备。设备驱动程序的功能是从与设备无关的软件中接收抽象的请求,并执行该请求。例如,读磁盘上的第n块。如果请求到来时,驱动程序空闲,则它立即执行该请求;但如果它正在处理另一请求,则它将该请求挂在一个等待队列中。

执行一条I/O请求的第一步,是将该请求转换成更具体的形式。例如,对磁盘驱动程序,它包括:计算所请求的块n的物理地址,检查驱动电机是否在转,检测存取臂是否定位在正确的柱面。总之,它必须确定需要哪些控制器命令以及命令的执行次序。一旦决定应向控制器发送什么命令,驱动程序就向控制器中的设备寄存器写入这些命令。某些控制器一次只能处理一条命令,另一些则可以接收一串命令并自动进行处理。

这些控制命令发出后有两种可能。多数情况下,驱动程序需要等待控制器完成一些操作,而使驱动程序阻塞,直至中断信号到达时方被唤醒。另一种可能是不需要等待,不必进入阻塞。对于前一种情况,被阻塞的驱动程序必须由中断唤醒。无论哪种情况,都要进行错误检查。如果一切正常,则驱动程序将数据传送给上层的与设备无关的软件。最后,它将向它的调用者返回一些关于错误报告的状态信息。如果请求队列中有别的请求,则它选中一个进行处理;若等待队列空,则它阻塞并等待下一请求。6.3.4与设备无关的I/O软件

与设备无关的I/O软件提供适用于所有设备的常用I/O功能,并向用户层软件提供一个一致的接口。现以块设备为例,与设备无关的I/O软件的主要功能包括:

(1)设备命名。与设备无关的I/O软件负责将设备名映射到相应的设备驱动程序上。

(2)设备保护。操作系统应向各个用户赋予不同设备的访问权限,以实现对设备的保护。例如,UNIX对I/O设备的设备文件采用了rwx的保护机制,系统管理员可以为每台设备设置合理的访问权限。

(3)与设备无关的块大小。不同磁盘的扇区大小可能不同,设备无关软件屏蔽了这一差异并向上层软件提供统一的数据块大小。例如,把若干扇区作为一个逻辑块,这样高层软件就只和逻辑块大小相同的抽象设备交互,而不管磁盘物理扇区的大小。

(4)数据缓冲。块设备和字符设备都需要数据缓冲。对于块设备,硬件每次读写均以块为单位,而用户程序则可以读写任意大小的单元。如果用户写半个块,操作系统将在内部保留这些数据,直到其余数据到齐后才一次性地将这些数据写到盘上。对字符设备,用户向系统写数据的速度可能比向设备输出的速度快,所以也需要缓冲。

(5)数据块的分配。当创建了一个文件并向其写入数据时,必须为该文件分配新的磁盘块。为了完成这种分配工作,操作系统需要为每个磁盘配置一张记录空闲盘块的表或位示图,但定位一个空闲块的算法应是独立于设备的。

(6)对独占设备的分配与释放。一些设备在同一时刻只能由一个进程使用,这就要求操作系统检验对该设备的使用要求,并根据设备的忙闲情况来决定是接受还是拒绝此请求。

(7)错误处理。错误处理多数由驱动程序完成。多数错误是与设备紧密相关的,因此只有驱动程序知道应如何处理。一种典型的错误是磁盘块受损导致不能读写。驱动程序在尝试若干次读操作失败后将放弃,并向设备无关软件报错。从此处往后,错误处理就与设备无关了。如果读一个文件时出错,则向调用者报错即可;如果是在读一些关键系统数据结构时出错,则操作系统只能打印出错信息,并终止运行。6.3.5用户空间的I/O软件

尽管大部分I/O软件属于操作系统,但是也有一小部分是与用户程序链接在一起的库例程,甚至是在核心外运行的完整程序。系统调用包括I/O系统调用,通常是库例程调用。

在如下C语句:

count=write(fd,buffer,nbyte);

中,所调用的库函数write()将与用户程序链接在一起,并包含在运行时的二进制代码中。这一类库例程显然也是I/O系统的一部分。标准I/O库包含相当多涉及I/O的库例程,它们作为用户程序的一部分运行。并非所有的用户层I/O软件都由库例程构成,另一个重要的类型就是Spooling系统,它是在多道程序设计中处理独占设备的一种方法。例如,对于打印机,尽管可以打开其设备文件来进行申请,但如果一个进程打开它而长时间不用,则其它进程都无法使用。

解决这一问题的方法是创建一个精灵进程(守护进程Daemon)以及一个特殊的目录,称Spooling目录。打印一个文件之前,进程首先产生完整的待打印文件,并将其放在Spooling目录下,而由该精灵进程进行打印。这里只有该精灵进程能使用打印机设备文件,通过禁止用户直接使用打印机设备文件便解决了上述打印机空占的问题。

Spooling还可以用于打印机以外的其它情况。例如,在网络上传输文件常使用网络精灵进程,发送文件前先将其放在一特定目录下,而后由网络精灵进程将其取出发送。这种文件传输方式的用途之一就是Internet电子邮件系统。Internet通过许多网络将大量的计算机连在一起,当向某人发送E-mail时,用户使用某一个程序如Send,该程序接收要发送的信件并将其送入一个固定的Spooling目录下待以后发送。整个E-mail系统在操作系统之外运行。6.3.6I/O系统软件的层次结构

图6.12概括地总结了I/O系统的软件层次结构。图中列出了每一层软件及其主要功能。从底层开始分别是硬件、中断处理程序、设备驱动程序、与设备无关I/O软件,最上层是用户空间的I/O软件。图6.12I/O系统的层次结构图6.12中的箭头表示控制流。例如,当用户程序试图从文件中读一数据块时,需通过操作系统来执行此操作。设备无关软件首先在数据块缓冲区中查找此块。若未找到,则它调用设备驱动程序,向硬件提出相应的请求。用户进程随即阻塞,直至数据块被读出。

当磁盘操作结束时,硬件发出一个中断,它将激活中断处理程序。中断处理程序则从设备获取返回状态值,并唤醒被阻塞的用户进程来结束此次I/O请求,随后,用户进程将继续运行。随着计算机技术的发展,计算机外部设备技术也有长足的进步,其速度也在不断提高。但是,这与CPU的速度相比,仍相差甚远。因此,将会出现CPU数据处理的速度与外设输入/输出的速度极不匹配的现象。例如,当用户进程正在计算时,无数据输出,打印机是空闲的。当计算结束时会产生大量的输出结果,在极短的时间内要向打印机发送大量数据,这时打印机根本来不及处理。这种CPU与外设之间速度的不匹配可能造成数据的丢失,或者使CPU长时间“空等”。6.4缓冲技术虽然通道技术和中断技术为计算机系统的并行活动提供了强有力的支持,但由于CPU与外设之间的不匹配,使得它们之间的并行程度并未得到充分发挥。

缓冲技术的引入可明显地提高CPU和外设的并行程度,提高系统的处理能力和设备的利用率。缓冲技术的基本思想是在CPU和外设之间设立缓冲区,用于暂存CPU和外设之间交换的数据,从而缓和CPU和外设速度不匹配所产生的矛盾。缓冲技术包括输入缓冲和输出缓冲。所谓输入缓冲,是指在用户进程需要数据之前,操作系统已经把数据从设备读入系统存储区中;所谓输出缓冲,则是指操作系统先把要输出的数据写入系统存储区,当进程继续运行时,操作系统再把数据送往设备输出。

缓冲区按使用方式有专用缓冲区和通用缓冲区。专用缓冲区是专为某一设备而设置的缓冲区,它为该设备所专用,它占用一定的内存空间,如键盘缓冲区。通用缓冲区可为多个设备所共享,按其组织方式,可分为单缓冲、双缓冲以及缓冲池。6.4.1单缓冲

所谓单缓冲,是指在操作系统中设置一个缓冲区,供用户进程和操作系统之间交换数据使用。现以输入为例,操作系统从输入设备读入数据(可以是一字节、一行或一数据块),把它放入该缓冲区中,用户进程将从该缓冲区将数据取至用户缓冲区。图6.13给出了无缓冲与单缓冲的示意图。我们可以粗略估计无缓冲和单缓冲对系统性能的影响。以块设备为例,设T为输入一块数据所需的时间,C是介于两个输入请求之间处理数据所需的时间。如果无缓冲区,则处理一

块数据所需的时间为T+C;如果采用单缓冲区,则处理时间为Max{C,T}+M,其中M是把一数据块从系统缓冲区传送到用户数据区所需的时间。大多数的情况下,M远小于T或C。图6.13无缓冲与单缓冲(a)无缓冲;(b)单缓冲6.4.2双缓冲

在单缓冲的情况下,当操作系统把数据存放到系统缓冲区后,假如又有新的数据从设备中读入,而此时用户进程还没有把数据送到用户数据区,操作系统不得不暂停从设备读数据,直至将缓冲区中的数据全部送到用户数据区。这种情况明显地影响了CPU和设备之间的并行程度。为此,可采用双缓冲方式。

所谓双缓冲,就是在操作系统中为某一设备设置两个缓冲区,当一个缓冲区中的数据尚未被处理时可用另一缓冲区存放从设备读入的数据,以此来平滑CPU和I/O设备之间速度的差异。如图6.14所示,设备首先把数据放入缓冲区A中,当用户进程正对该数据处理时,如果从设备读出一些数据,此时操作系统将会把数据暂存到缓冲区B中,待用户进程处理完A中的数据后,就从B中读取数据,而下次操作系统又可以把从设备读入的数据放入缓冲区A中。这就是说,用户进程处理第i个数据与操作系统从设备读入第i+1个数据的工作是重叠的。操作系统和用户进程这样轮流地使用两个缓冲区A和B,以达到并行工作的目的。图6.14双缓冲在双缓冲情况下,处理一个数据块的时间大致为Max{C,T}。如果C<T,则可使块设备很忙,连续输入;如果C>T,则可以保证用户进程处理完一个数据后无需等待I/O操作就可以获得下一个数据。与单缓冲相比,不论哪种情况,系统性能都得到了改善。

双缓冲可以进一步扩充成多缓冲。此时操作系统与用户进程将轮流地使用多个缓冲区,以改善系统的性能。但是,系统性能并不是随着缓冲区的数量不断增加而无休止提高,当缓冲区到达一定数量时,对系统性能的提高将是微乎其微的,甚至会使系统性能下降。6.4.3缓冲池

上述缓冲区一般仅适用于某一特定的I/O设备,因而它属于专用缓冲区。如果系统配置的设备较多,那么即使每个设备配置一个缓冲区,累计起来,内存的开销也十分可观,而且专用缓冲区的利用率也不高。为了克服专用缓冲区的上述缺陷,操作系统经常采用公用缓冲技术——缓冲池(BufferPool)。

1.缓冲池的组成

对于既可用于输入又可用于输出的公用缓冲池,其中至少应包含以下三种类型的缓冲区:

①空闲缓冲区;②装满输入数据的缓冲区;③装满输出数据的缓冲区。为了管理方便,可将相同类型的缓冲区链成一个队列。于是,可形成以下三个队列:

(1)空缓冲区队列emq:由空缓冲区所链成的队列;

(2)输入队列inq:由装满输入数据的缓冲区所链成的队列;

(3)输出队列outq:由装满输出数据的缓冲区所链成的队列。除了上述三个队列外,还应具有四种工作缓冲区:

(1)用于收容输入数据的工作缓冲区;

(2)用于提取输入数据的工作缓冲区;

(3)用于收容输出数据的工作缓冲区;

(4)用于提取输出数据的工作缓冲区。

2.缓冲池管理的基本操作

对缓冲池管理提供两个基本操作(过程):

(1)getbuf(type):用于从type所指定的队列的队首,摘下一个缓冲区;

(2)putbuf(type,number):用于将用参数number所指示的缓冲区,挂在type队列上。

3.缓冲池的工作方式

缓冲池可以工作在收容输入、提取输入、收容输出和提取输出四种工作方式(见图6.15)。图6.15缓冲池的工作方式

1)收容输入工作方式

在输入进程需要输入数据时,调用getbuf(emq)过程,从emq队列的队首摘下一个缓冲区,把它作为收容输入工作缓冲区hin。然后,把数据输入其中,装满后再调用putbuf(inq,hin)过程,将该缓冲区挂在输入队列inq的队尾。

2)提取输入工作方式

当计算进程需要输入数据时,调用getbuf(inq)过程,从输入队列取得一缓冲区sin作为提取输入工作缓冲区,计算进程从中提取数据。当计算进程用完该数据后,再调用putbuf(emq,sin),将该缓冲区挂在空缓冲队列emq上。

3)收容输出工作方式

当计算进程需要输出时,调用getbuf(emq)过程,从空缓冲队列emq的队首取得一个空缓冲区并以此作为收容输出工作缓冲区hout。当其装满输出数据后,又调用put(outq,hout)过程,将该缓冲区挂在outq的队尾。

4)提取输出工作方式

当要输出时,由输出进程调用getbuf(outq)过程,从输出队列的队首取得一个装满输出数据的缓冲区,作为提取输出工作缓冲区sout。在数据提取完成后,再调用put(emq,sout)过程,将它挂在空缓冲队列的末尾。6.4.4预先读与延迟写

操作系统对块设备的管理通常采用缓冲池技术。为了提高块设备的读写效率,操作系统广泛采用了预先读与延迟写技术。

1.预先读

操作系统读块设备时,一般通过同步方式把一指定的数据块读入缓冲区,此时用户进程不得不进入阻塞状态,等待数据传输的结束。为了加快进程的推进速度,提高CPU和块设备工作的并行程度,最好在使用某一块之前,用异步方式提早把它读入缓冲区。当用户进程实际需要该块数据时,可以立即从缓冲区取走而无需等待。这种技术称为预先读。

2.延迟写

当块设备进行输出时,如果某一缓冲区只写了一部分,则不要急于把该缓冲区的内容写到块设备上,而是把写块操作推迟到某个适当的时机进行。那么什么是适当的时机呢?一般有两个:其一是延迟写的缓冲区被写满时,其二是该缓冲区被重新分配时。作为计算机系统中的辅助存储器,即用来存放文件的磁盘、磁鼓一类高速大容量旋转型的存储设备,在多道程序设计的环境下,可能会出现若干个进程同时对其提出输入/输出请求并等待处理的现象。系统必须采用一种调度策略,使得能按最佳次序处理这些请求。这就是所说的驱动调度问题,所采用的调度策略称为驱动调度算法。

驱动调度能减少为若干个输入/输出请求服务所需的总时间,从而提高系统的效率。除了输入/输出请求的优化排序外,信息在辅助存储器上的排列方式,文件在辅存空间上的分配方法都能影响存取访问速度。6.5磁盘的驱动调度磁盘的驱动调度是先进行移臂(移动存取臂)调度,再进行旋转调度。例如,某一时刻对磁盘的输入/输出请求序列是:

柱面(CC) 磁道(HH) 物理记录R

7

4

1

7

4

8

7

4

5

40

6

4

2

7

7

如果当前存取臂处于0号柱面,若按上述序列访问磁盘,则存取臂将从0号柱面移至7号柱面,再移至40号柱面,最后回到2号柱面。显然,这样就要来回移臂。如果将输入/输出请求按柱面号2、7、7、7、40的次序处理,就可大大节省移臂时间。进一步考查7号柱面上的三个输入/输出请求。按上述次序,磁盘需旋转近两周才能完成访问。若将输入/输出请求按照下列的次序完成访问:

柱面(CC) 磁道(HH) 物理记录R

7

4

1

7

4

5

7

4

8

则对7号柱面4号磁道的三次访问只需旋转一周就可完成。因此,对于磁盘来说,不仅要考虑移臂时间最短,而且还要使旋转周数最少。移臂调度算法有:

(1)先来先服务算法(FCFS)。先来先服务调度算法是最简单的一种方法,它按照输入/输出请求到达的顺序,逐一完成访问请求。

(2)最短查找时间优先法(SSTF)。这种算法总是先完成距当前存取臂距离最近的柱面上的输入/输出请求。

(3)扫描法(SCAN)。由于请求序列具有动态性质,因此可采用扫描法。存取臂从磁盘的一端出发,向另一端移动,遇到需要访问的柱面就完成访问请求,直至到达磁盘的另一端。到达另一端后,存取臂移动方向就倒转过来,继续完成这一方向上的访问请求。

在扫描法中,存取臂总是从磁盘的一端移动到另一端。实际上并不需要这样,通常的方法是,存取臂仅需移到一个方向最远的所请求的柱面后,一旦没有访问请求了,存取臂就改变移动方向。这种扫描法又称电梯调度算法。

电梯调度算法是一种简单而又实用的算法,图6.16给出了电梯调度算法的流程。图6.16电梯调度算法流程设备分配程序的主要功能是,当某进程向系统提出I/O请求后,设备分配程序按照一定的策略,把所要求的设备分配给它.6.6设备分配程序6.6.1设备分配的数据结构

在配置有通道的计算机系统中,设备分配程序至少应解决以下三个问题:

(1)是否有能用来为I/O请求提供的通路?

(2)是否有一条以上的通路可用?

(3)如果当前尚无通路可用,那么通路何时才能空闲?

为了回答这些问题,I/O设备分配程序应建立一套反映系统设备状态的数据结构。这一套数据结构包括设备控制块(UCB)、控制器控制块(CUCB)、通道控制块(CCB)(图6.17)以及系统设备表SDT(图6.18)。图6.17设备管理中的三种控制块图6.18UCB和PCB的连接现以设备控制块UCB为例,说明表中各项的意义,控制器控制块、通道控制块的各相应项意义与之类似。

在设备控制块UCB中通常包括如下内容:

(1)设备标识符。该设备的设备名或设备号。

(2)设备状态。如该设备正忙,则记入使用该设备的进程PCB的首址;如果不忙,则置空闲标志,如图6.18所示。

(3)与此设备相连的控制器表。如图6.19所示,与设备E连接的控制器有C、D。在该项内置入与此设备相连接的控制器控制块首址,因控制器C和D连接到同一设备E,故控制器C和D的CUCB也连接在一起。图6.19UCB、CUCB、CCB间的连接

(4)等待此设备的进程表。由于提出使用此设备要求的进程有几个,因此等待此设备的进程按某种调度策略构成了进程链,如图6.18所示。

系统设备表SDT是系统范围的数据结构,它记录了系统中拥有的全部I/O设备,每一类设备占用一个表目。每个表目包含若干项,项目的多少和项目内容随系统而异。图6.20给出了系统设备表和UCB的关系。图6.20系统设备表与UCB的关系有了上述数据结构,I/O设备分配程序一方面随时登记通道、控制器和设备的状态信息,另一方面构成I/O设备到主存的通路。

根据所请求的I/O设备,由系统状态表找到该设备的UCB,然后检查UCB。例如,所要求的设备是图6.9中的设备E,于是I/O设备分配程序检查设备E的UCB,从中找到与此设备相连的CUCB,发现控制器C、D与E相连。如果控制器C不忙,则从控制器C的CUCB中找出与此控制器相连的通道。其结果是:通道A和B与控制器C相连。如果通道A正忙,而通道B空闲,那么便可构成一条I/O通路:通道B——控制器C——设备E。对于所请求的I/O设备,根据上述的查找方法,可能出现三种情况:

(1)对于所请求的I/O设备,仅有一条通路可用,例如:通道B——控制器C——设备E。

(2)对于所请求的I/O设备,可以找到一条以上的可用通路,例如上例中,最多可找出四条可用通路:

通道A——控制器C——设备E

通道A——控制器D——设备E

通道B——控制器C——设备E

通道B——控制器D——设备E

(3)对于所请求的I/O设备,没有一条可用的通路。例如通道A、B都处于忙状态,则对于设备E,便没有可用通路。

在I/O繁忙的情况下,暂时没有可用通路是完全可能的。但是当I/O完成后就会有一个或多个部件(设备、控制器和通道)被释放。于是此时I/O设备分配程序又会构成I/O通路。为此,当有进程提出I/O请求后,如果有可用通路,则在UCB、CUCB、CCB中将进程名(或进程PCB的首址)登记在表示正在使用该设备(或控制器或通道)的状态表目内;如果没有一个可用的通路,则进行排队等候,如图6.18所示。至此,上述三个问题都已解决。6.6.2I/O调度程序

I/O调度程序的主要功能是为满足进程的I/O请求,决定设备(以及相应的控制器和通道)的分配策略。

在多进程的系统中,由于进程数多于设备数,就必然要引起进程对资源的争夺。为使系统有条不紊地工作,系统必须具有一套合理的设备分配原则。这些原则与下述的四个因素有关:

1)I/O设备的固有属性

I/O设备的固有属性是指该设备是适合于某进程独占,还是适合于由几个进程共享。

前已指出,从设备分配角度看,设备分成独享、共享和虚拟三种,它们分别对应于三种不同的分配方式。独享设备包括行式打印机、键盘/显示器等低速I/O设备。一方面,因为这类设备的输入/输出介质(显示器、打印纸等)如果交叉出现用户信息,则容易造成混乱;另一方面,这些设备的操作常常需要人工干预,如果采用共享分配,则增加操作员的负担。所以独享设备应采用独享分配方式,即一旦某设备分配给一进程,该设备就一直归它独自使用,直至该进程将其释放为止。

共享设备(如磁盘、磁鼓等)可作为大容量外存储器使用,而且其定位操作的时间较短,可直接进行存取。因此该类设备适合于由若干个进程共享,即采用共享分配方式。

虚拟设备的分配适于采用虚拟分配方式。

2)I/O设备的分配算法

如果请求I/O设备的进程数多于可用的通路,那么有些进程就要进入设备(或控制器或通道)的等待队列;当有可用通路时,I/O调度程序便依据某种算法选择一个进程,使它的I/O要求得到满足,将它所等待的设备分配给它。

I/O调度程序所遵循的分配策略,可采用前述的进程调度策略。但I/O操作有一个特点,即一个通道程序一经启动便一直进行下去,直到最后完成。在它完成之前不会产生中

断,所以进程调度所采用的时间片轮转法在I/O调度中不能采用。除此之外的其它方法均可采用。通常采用如下两种算法:

(1)先请求先服务。当有多个进程对同一设备提出I/O请求时,该算法是把所有发出I/O请求的进程,按其发出请求的先后顺序排成一个等待该设备的队列。I/O调度程序把I/O设备分配给该队列中的第一个进程。

(2)优先级高者优先。在进程调度中优先级高者,优先获得处理机。如果在I/O调度中,对优先级高者优先满足它的I/O请求,这也是非常合理的。因为这样做有利于尽快地结束该进程,从而尽早地释放它所占有的资源。

I/O调度程序在规定了具体的调度算法之后,等待I/O设备的进程就可以排队定序。如果采用优先级高者优先的算法,那么图6.19的进程等待队列就可按优先级(由高到低)排队。一旦I/O调度程序确定了满足I/O请求的相对顺序之后,如有可用的通路,I/O设备分配程序就必须满足那个进程的I/O请求。

3)设备分配的安全性

在有些系统中,每当进程以命令(或广义指令)的形式向系统发出I/O请求后,便立即进入阻塞状态,直到所提出的I/O请求完成后才被唤醒。此时,一个进程只能提出一个I/O请求。这种方法的优点是:首先,使程序的编制更为方便,例如某进程发出一条“读入一块数据到缓冲区”的命令,则在下一条指令执行时,就可以认为在缓冲区中已读入了所读数据;其次,这种方法对设备分配比较安全,不会产生死锁现象。这种方法也有一个缺点,就是进程和I/O设备之间是串行工作的,进程推进缓慢。为加快进程推进的速度,使CPU和I/O设备能并行工作,应使某些进程以命令形式发出I/O请求之后,仍可继续运行,需要时又可发出第二个I/O请求、第三个I/O请求。仅当进程

所请求之设备已为另一进程占用时才进入阻塞状态。这样就可同时操作多个外部设备。但这种多请求方式会导致设备分配不安全,有可能产生死锁现象。对此,在多请求方式中,设备分配应保证安全而不出现死锁。

4)与设备的无关性

所谓与设备的无关性,是指用户程序中所使用的设备(逻辑设备)与系统配置的实际物理设备无关。6.6.3设备分配的实施

1.单通路I/O系统的设备分配

在单通路I/O系统中,按如下步骤实施设备分配:

(1)分配设备。根据进程n所提出的设备名(由逻辑设备名转换为物理设备名)来检索系统设备表SDT,从中找到该物理设备之UCB;根据UCB中的状态,可知该设备的忙闲。若忙,则将要求I/O的进程n插入到设备队列中等待;若不忙,系统按一定算法来计算设备分配的安全性。若分配不会引起死锁,则把该设备分配给进程n;否则,仍把它插入到设备等待队列中。

(2)分配控制器。当系统把该设备分配给要求I/O的进程后,从UCB中的控制器表指针可找到与此设备相连的控制器表CUCB,再检查该表的状态信息。若忙,将进程插入等待该控制器的队列;若不忙,则把该控制器分配给进程n。

(3)分配通道。通过CUCB找到与此控制器相连的通道表CCB,从中了解此通道的状态信息。若忙,则将进程n插入到通道队列中等待;若不忙,则将该通道分配给进程n。于是,进程n本次所请求之I/O设备、控制器和通道均已得到,便可启动I/O设备进行信息传送了。

2.多通路I/O系统的设备分配

上面讲了单通路I/O系统的设备分配。所谓单通路I/O系统,就是只有一条通路和主存相连。事实上,为了提高系统的灵活性和可靠性,往往采用多通路的I/O系统。此时,一个设备可连几个控制器,而一个控制器又可连几个通道。因此,在这种情况下,设备的分配除了考虑与设备无关性外,尚须考虑分配的安全性。于是,这将使得设备分配变得复杂化了。

现在假定某进程n向系统提出I/O请求,要求为它分配一台I/O设备。于是系统可选取该类设备中的任何一台设备分配给该进程。其步骤如下:

(1)根据要求I/O的进程n所提供的设备类型,检索SDT表,找到第一个该类物理设备的UCB,由状态信息可知其忙闲情况。若忙,则检查第二个物理设备的UCB。若该类型的全部设备都处于忙碌状态,则表明该类设备已分配完毕。进程n的此次I/O请求无法满足,只好把进程n插入到等待该类设备的队列中。只要在该类设备中有一个空闲设备,系统便可对其计算分配该设备给进程n的安全性。若安全,则把设备分配给进程n,否则将其插入该类设备的等待队列。

(2)当系统把第i个设备分配给进程n后,便可通过检查与此设备相连的第一个CUCB,而得知该控制器是否忙碌;若忙,再检查第二个CUCB表。若与此设备相连的所有的控制器都忙,则表明无控制器可分配给设备i。只要设备i不是该类设备中的最后一个,便可返回到步骤(1),试图再找下一个空闲设备;否则,仍将该进程插入控制器等待队列中。

(3)若有空闲的控制器,便可进一步检查与此控制器j相连的第一个通道是否忙碌。若忙,再查看第二个CCB表,若与此控制器相连的全部通道都忙,表明无通道可分配给控制器j。只要控制器j不是该设备i的最后一个控制器,便返回到步骤(2),试图找出一个空闲的控制器,否则,将该进程插入通道等待队列。若有空闲通道可用,则此次设备分配成功,将相应的设备、控制器和通道分配给进程n,接着便可启动I/O设备,开始信息传送。多通路I/O系统设备分配的流程示于图6.21。6.21设备分配流程图6.7.1I/O系统的结构

1.I/O系统概貌

WindowsNT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论