您的位置:首页 > 其它

6.学习操作系统之设备管理

2016-01-06 22:09 260 查看

1.设备管理概述

1.1设备管理的任务和功能

设备管理的主要任务是完成用户提出的I/O请求,为用户分配I/O设备,提高I/O设备的利用率,方便用户使用I/O设备。设备管理应该具备以下功能:

设备分配。按照设备类型和相应的分配算法决定将I/O设备分配给哪一个要求使用该设备的进程。如果在I/O设备与CPU之间还存在着设备控制器和通道,则还需分配相应的控制器和通道,以保证I/O设备与CPU之间有传递信息的通路。凡未分配到所需设备的进程应放入一个等待队列。为了实现设备分配,系统中应设置一些数据结构,用于记录设备的状态。

设备处理。设备处理程序实现CPU和设备控制器之间的通信。即当CPU向设备控制器发出I/O指令时,设备处理程序应启动设备进行I/O操作,并能对设备发来的中断请求做出及时的响应和处理。

缓冲管理。设置缓冲区的目的是缓和CPU与I/O设备速度不匹配的矛盾。缓冲管理程序负责完成缓冲区的分配和释放及有关的管理工作。

设备独立性。设备独立性又称设备无关性,是指应用程序独立于物理设备。用户在编制应用程序时,要尽量避免直接使用实际设备名。如果程序中使用了实际设备名,则当该设备没有连接在系统中或者该设备发生故障时,用户程序无法运行,若要运行此程序则需要修改程序。如果用户程序不涉及实际设备而使用逻辑设备,那么它所要求的输入/输出便与物理设备无关。设备独立性可以提高用户程序的可适应性,使程序不局限与某个具体的物理设备。

1.2设备控制器与I/O通道

1.设备控制器

设备一般由机械和电子两部分组成,设备的电子部分通常称为设备控制器。设备控制器处于CPU与I/O设备之间,它接收从CPU发来的命令,并去控制I/O设备工作,使CPU从繁杂的设备控制事务中解脱出来。设备控制器是一个可编址设备,当它仅控制一个设备时,它有一个设备地址;当控制器连接多个设备时,则应具有多个设备地址,使每一个地址对应一个设备。

设备控制器应具有以下功能:接收和识别来自CPU的各种命令,实现CPU与设备控制器、设备控制器与设备之间的数据交换,记录设备的状态供CPU查询,识别它所控制的每个设备地址。为此,设备控制器中应设置控制寄存器存放接收的命令及参数,设置数据寄存器存放传输的数据,设置状态寄存器记录设备状态。

2.I/O通道

在一般计算机系统中,通道指专门用于负责输入/输出工作的处理机。通道有自己的指令系统,该指令系统比较简单,一般只有数据传送指令、设备控制指令等。通道所执行的程序称为通道程序。

根据信息交换方式的不同,可以将通道分成以下几种类型:

字节多路通道。字节多路通道按字节交换方式工作。它通常都含有若干个非分配型子通道,每个子通道连接一台I/O设备,这些子通道按时间片轮转方式共享主通道,当一个子通道控制其I/O设备交换完一个字节后,立即让出字节多路通道(主通道),以便让另一个子通道使用。字节多路通道一般用于连接中、低速I/O设备。一个字节多路通道可以连接多台中、低速设备。

数据选择通道。数据选择通道又称数组选择通道,它以成组方式进行数据传输,即每次传输一批数据,传输的速率很高。数据选择通道只含有一个分配型子通道,在一段时间内只能执行一个通道程序,控制一台设备进行数据传送,当一个I/O请求操作完成后,再选择与通道相连的另一台设备。这样当某台设备占用了该通道时,便一直由它独占,直至该设备传送完毕释放该通道为止。由此可见,这种通道的利用率很低,一般用于连接高速I/O设备。

数据多路通道。数据多路通道又称数组多路通道,它结合了数据选择通道传输速度高和字节多路通道能进行分时并行操作的优点,这使得它既具有很高的数据传送速率,又能获得满意的通道利用率。数据多路通道以分时的方式执行几个通道程序,它每执行一个通道程序的一条通道指令控制传送一组数据后,就转向另一个通道程序。这种通道广泛用于连接高、中速I/O设备。

2.输入输出控制方式

常用的输入/输出控制方式有以下几种:

2.1程序直接控制方式

在早起的计算机系统中,由于无中断机构,处理机对I/O设备的控制采用程序直接控制方式,下面以数据输入为例说明这种I/O控制方式。当用户进程需要输入数据时,由处理机向设备控制器发出一条I/O指令启动设备进行输入,在设备输入数据期间,处理机通过循环执行测试指令不间断地检测设备状态寄存器的值,当设备状态寄存器的值显示设备输入完成时,处理机将数据寄存器中的数据取出,送入内存指定单元,然后再启动设备去读下一个数据。反之,当用户进程需要向设备输出数据时,也必须同样发出启动命令启动设备输出并等待输出操作完成。

程序直接控制方式的工作过程非常简单,但CPU的利用率相当低。因为CPU执行指令的速度高出I/O设备几个数量级,所以在循环测试中浪费了大量的CPU处理时间。

2.2中断控制方式

在现代计算机中,对I/O设备的控制广泛采用了中断控制方式。这种控制方式要求CPU与设备之间有相应的中断请求线,且要求在状态寄存器中有中断允许位。

在I/O中断方式下,数据的输入按如下步骤操作:

首先,需要数据的进程通过CPU发出启动指令启动外设输入数据。该指令同时还将状态寄存器中的中断允许位打开。

在进程发出指令启动设备之后,该进程放弃处理机,等待输入完成。而进程调度程序调度其他就绪进程占据处理机。

当输入完成时,I/O控制器通过中断请求线向CPU发出中断信号。CPU在接收到中断信号之后,转向设备中断处理程序。设备中断处理程序将输入数据寄存器中的数据传送到某一特定内存单元中,以便供要求输入的进程使用。同时还把等待完成的那个进程唤醒,再返回到被中断的进程继续执行。

在以后的某个时刻,进程调度程序选中提出请求输入的进程,该进程从约定的内存单元中取出数据做进一步处理。

与程序直接控制方式相比,中断控制方式大大提高了CPU的利用率。但这种控制方式仍然存在许多问题,如每台设备每输入/输出一个数据都要求中断CPU,这样在一次数据传送过程中,中断发生的次数较多,从而耗去大量CPU处理时间。

2.3DMA控制方式

DMA控制方式的基本思想是在外围设备和内存之间开辟直接的数据交换通路。在DMA控制方式中,I/O控制器具有更强的功能,在它的控制下,设备和内存之间可以成批地进行数据交换,而不用CPU干预。这样既大大减轻了CPU的负担,也使I/O数据传送速度大大提高。这种方式一般用于块设备(块设备处理信息的基本单位是字符块。一般块的大小为512B~8KB)的数据传输。

DMA控制方式下进行数据输入的过程如下:

当进程要求设备输入一批数据时,CPU将准备存放输入数据的内存始址以及要传送的字节数分别送入DMA控制器中的内存地址寄存器和传送字节计数器;另外,还要将中断位和启动位设置为1,以启动设备开始进行数据输入,并允许中断。

发出数据请求的进程进入等待状态,进程调度程序调度其他进程占据CPU。

输入设备不断地挪用CPU工作周期,将数据寄存器中的数据源源不断地写入内存,直到所要求的字节全部传送完毕。

DMA控制器在传送字节数完成时通过中断请求线发出中断信号,CPU收到中断信号后转去执行中断处理程序,唤醒等待输入完成的进程,并返回被中断程序。

在以后的某个时刻,进程调度程序选中提出请求输入的进程;该进程从指定的内存单元取出数据并做进一步的处理。

DMA控制方式与中断控制方式的主要区别是:中断控制方式在每个数据传送完成后中断CPU,而DMA控制方式则是在所要求传送的一批数据全部传送结束时中断CPU;中断控制方式的数据传送是在中断处理时由CPU控制完成,而DMA控制方式则是在DMA控制器的控制下完成的。不过DMA控制方式仍然存在一定的局限性,如数据传送的方向、存放数据的内存始址及传送数据的长度等都由CPU控制,并且每台设备需一个DMA控制器,当设备增加时,多个DMA控制器的使用也不经济。

2.4通道控制方式

通道控制方式与DMA控制方式类似,也是一种以内存为中心,实现设备与内存直接交换数据的控制方式。与DMA控制方式相比,通道所需要的CPU干预更少,且可以做到一个通道控制多台设备,从而更进一步减轻了CPU的负担。

3.中断技术

3.1中断的基本概念

中断是指计算机系统内发生了某一急需处理的事件,使得CPU暂时中止当前正在执行的程序而转去执行相应的事件处理程序,待处理完毕后又返回到原来被中断处继续执行。

引起中断发生的事件称为中断源。中断源向CPU发出的请求中断处理的信号称为中断请求。而CPU收到中断请求后转相应事件处理程序的过程称为中断响应。

发生中断时,刚执行完的那条指令所在的单元号称为断点,断点的逻辑后继指令的单元号称为恢复点。而现场是指中断的那一时刻能保证程序继续运行的有关信息。

在某些情况下,尽管产生了中断源和中断请求,但CPU内部的处理机状态字PSW(是一组反映程序运行状态的信息,又称为程序状态字)的中断允许位已被清除,从而不允许CPU响应中断,这种情况称为禁止中断,也称为关中断。CPU禁止中断后,只有等到PSW的中断允许位重新设置后才能接受中断。当设置PSW的中断允许位时,CPU可以接受中断,这种情况称为允许中断,也称为开中断。开中断和关中断是为了保证某些程序执行的原子性。

为了处理上的方便,计算机系统通常采用中断向量来存放中断处理程序的入口地址,以便中断发生时硬件能根据中断向量转入相应的中断处理程序执行。在中断向量中每一个中断信号占用连续的两个单元:一个单元用来存放中断处理程序的入口地址,另一个单元用来保存在处理中断时CPU应具有的状态。

除了禁止中断外,还有一个比较常用的概念是中断屏蔽。中断屏蔽是指系统用软件方式有选择地封锁部分中断而允许其余部分中断仍能得到响应。不过,有些中断请求是不能屏蔽甚至不能禁止的,也就是说,这些中断具有最高优先级,不管CPU是否关中断,只要这些中断请求一提出,CPU必须立即响应。

3.2中断的分类与优先级

根据系统的需要,一般对中断进行分类并对不同中断赋予不同的处理优先级,以便在多个中断同时发生时,按轻重缓急进行处理。

根据中断信号的来源,可以将中断分为两类:

外中断。外中断是指来自处理机外部和内存外部的中断,包括I/O设备发出的中断,时钟中断等。

内中断。内中断主要指在处理机和内存内部产生的中断,内中断一般称为陷入或异常,它包括程序运算引起的各种错误,如地址非法、校验错、存取访问控制错、算术操作溢出、非法指令等。

根据中断信号的含义和功能将中断分为5类:

机器故障中断。机器故障中断是指因机器发生错误而产生的中断,如电源故障、内存奇偶校验错等。

I/O中断。指由输入/输出设备引起的中断,如设备传输结束、设备出错等。

外中断。外中断是指处理机外部的非通道装置引起的中断,如时钟中断、操作员控制台中断等。

程序性中断。程序性中断是指因程序中错误使用指令或数据引起的中断,如定点运算溢出、地址越界、非法指令等。

访管中断。访管中断是指由于程序执行了访管指令(系统调用)而产生的中断,如用户程序请求操作系统为其完成某项工作。

一般情况下,中断优先级的高低顺序为:机器故障中断、访管中断、程序性中断、外部中断、输入/输出中断。

3.3中断处理过程

一旦CPU响应中断,系统就开始进行中断处理。中断处理的过程如下:

保护被中断进程的现场。为了在中断处理结束后能使进程正确地返回到中断点,系统必须保存当前处理机状态字PSW和程序计数器PC等的值。

分析中断原因,转去执行相应的中断处理程序。在多个中断请求同时发生时,处理优先级最高的中断源发出的中断请求。

恢复被中断进程的现场,CPU继续执行原来被中断的进程。

4.缓冲技术

缓冲技术的实现思想是在CPU和外设之间设立缓冲,用以暂存CPU和外设之间交换的数据,从而缓和CPU与外设速度不匹配所产生的矛盾。事实上,凡是数据到来速度和数据离去速度不同的地方都可以使用缓冲。

缓冲的实现方法有两种:一种实现方法是采用硬件缓冲器,但由于这种方法成本太高,除一些关键部位外,一般情况下不采用硬件缓冲器;另一种实现方法是在内存划出一块存储区,专门用来临时存放输入/输出数据,这个区域称为缓冲区。

根据系统设置的缓冲区个数不同,可以将缓冲分为单缓冲、双缓冲、环形缓冲和缓冲池。

单缓冲是在设备和处理机之间设置一个缓冲区。设备和处理机交换数据时,先把被交换数据写入缓冲区,然后,需要数据的设备或处理机从缓冲区取走数据。由于只设置了一个缓冲区,因而设备与处理机对缓冲区的操作是串行的。

引入双缓冲可以提高处理机与设备的并行操作程度。例如,在设备输入时,输入设备先将第一个缓冲区装满数据,在输入设备装填第二个缓冲区的同时,处理机可以从第一个缓冲区中取出数据供用户进程进行处理;当第一个缓冲区中的数据处理完后,若第二个缓冲区已填满,则处理机又可以从第二个缓冲区中取出数据进行处理,而输入设备又可以装填第一个缓冲区。显然,双缓冲的使用提高了处理机和输入设备并行操作的程度。只有当两个缓冲区都为空,且进程还要提取数据时,该进程被迫等待。

环形缓冲(又称循环缓冲)中包含多个大小相等的缓冲区,每个缓冲区中有一个链接指针指向下一个缓冲区,最后一个缓冲区指针指向第一个缓冲区,这样多个缓冲区构成一个环形。环形缓冲用于输入/输出时,还需要有两个指针in和out。对于输入而言,首先要从设备接收数据到缓冲区,in指针指向可以输入数据的第一个空缓冲区;当运行进程需要数据时,从环形缓冲中取一个装满数据的缓冲区,并从此缓冲区中提取数据,out指针指向可以提取数据的第一个满缓冲区。显然,对输入而言正好相反,进程将处理过的需要输出的数据从到空缓冲区中,而当设备空闲时,从满缓冲区中取出数据由设备输出。

缓冲池也由多个缓冲区组成,与环形缓冲不同的是缓冲池中的缓冲区是系统公用资源,这些缓冲区可供多个进程共享,且既能用于输入又能用于输出。

缓冲池中的缓冲区按其使用状况可以形成三个队列:

空缓冲队列

装满输入数据的缓冲队列(输入队列)

装满输出数据的缓冲队列(输出队列)

除上述三个队列外,还应具有四种工作缓冲区:

用于收容输入数据的工作缓冲区

用于提取输入数据的工作缓冲区

用于收容输出数据的工作缓冲区

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

当输入进程需要输入数据时,便从空缓冲队列的队首摘下一个空缓冲区,把它作为收容输入工作缓冲区,然后把数据输入其中,装满后再将它挂到输入队列队尾。当计算进程需要输入数据时,便从输入队列取得一个缓冲区作为提取输入工作缓冲区,计算进程从中提取数据,数据用完后再将它挂到空缓冲队列尾。当计算进程需要输出数据时,便从空缓冲队列的队首取得一个空缓冲区,作为收容输出工作缓冲区,当其中装满输出数据后,再将其挂到输出队列尾。当要输出时,由输出进程从输出队列中取得一个装满输出数据的缓冲区,作为提取输出工作缓冲区,当数据提取完后,再将它挂到空缓冲队列的末尾。

5.设备分配

设备分配是设备管理的功能之一,当进程向系统提出I/O请求之后,设备分配程序将按照一定的分配策略为其分配所需的设备。同时还要分配相应的控制器和通道,以保证CPU与设备之间的通信。

5.1设备分配中的数据结构

为了实现对I/O设备的管理和控制,需要对每台设备、通道、控制器的情况进行登记。设备分配依据的主要数据结构有设备控制表(DCT)、控制器控制表(COCT)、通道控制表(CHCT)和系统设备表(SDT)。

系统为每一个设备配置一张设备控制表,用于记录设备的特性及与I/O控制器连接的情况。设备控制表中包括设备标识符、设备类型、设备状态、设备等待队列指针、指向控制器控制表的指针等。其中,设备状态用来指示设备是忙还是闲,设备等待队列指针指向等待使用该设备的进程组成的等待队列,控制器控制表指针指向与该设备相连接的设备控制器。

每个控制器都配有一张控制器控制表,它反映设备控制器的使用状态以及和通道的连接情况。控制器控制表中包括控制器标识符、控制器状态(忙/闲)、控制器等待队列指针、与控制器连接的通道控制表指针等。

每个通道也都配有一张通道控制表。通道控制表包括通道标识符、通道状态、等待获得该通道的进程等待队列指针等。

整个系统只有一张系统设备表,它记录了已连接到系统中的所有物理设备的情况,每个物理设备占一个表目。系统设备表的每个表目包括设备类型、设备标识符、设备控制表指针等。其中,设备控制表指针指向该设备对应的设备控制表。

5.2设备分配策略

在计算机系统中,请求设备为其服务的进程数往往多余设备数,这样就出现了多个进程队某类设备的竞争问题。为了保证系统有条不紊地工作,系统在进行设备分配时,应考虑以下几个因素。

设备的使用性质

按照设备自身的使用性质,可以采用以下3中不同的分配方式:

独享分配。又称独占设备。即在将一个设备分配给某进程后便一直由该进程独占,直至该进程完成或释放该设备后,系统才能再将该设备分配给其他进程使用。如打印机就不能由多个进程共享,而应采取独享分配方式。实际上,大多数低速设备都适合采用这种分配方式,这种分配方式的主要缺点是I/O设备通常得不到充分利用。

共享分配。对于共享设备,可以将它同时分配个多个进程使用。如磁盘是一种共享设备,因此可以分配给多个进程使用。共享分配方式显著提高了设备的利用率,但对设备的访问需要进行合理调度。

虚拟分配。虚拟分配是针对虚拟设备而言的,其实现过程是:当进程申请独占设备时,系统给它分配共享设备上的一部分存储空间;当进程要与设备交换信息时,系统就把要交换的信息存放在这部分存储空间中;在适当的时候,将设备上的信息传输到存储空间中或将存储空间中的信息传送到设备。

设备分配算法

I/O设备的分配除了与I/O设备的固有属性相关外,还与系统所采用的分配算法有关。设备分配主要采用先请求先服务和优先级高者优先算法。

设备分配的安全性

所谓设备分配的安全性是指设备分配中应防止发生进程死锁。在进行设备分配时,可以采用静态分配和动态分配两种方式。静态分配是在作业级进行的,用户作业开始执行之前,由系统一次分配该作业所要求的全部设备、控制器和通道。一旦分配,这些设备、控制器和通道就一直为该作业所占用,直到该作业撤销为止。静态分配方式不会出现死锁,但设备的利用率低。

动态分配是在进程执行过程中根据执行需要进行的设备分配。当进程需要设备时,通过系统调用命令向系统提出设备请求,由系统按照事先规定的策略给进程分配所需要的设备、控制器和通道,一旦用完之后,立即释放。动态分配方式有利于提高设备的利用率,但如果分配算法不当,则有可能造成进程死锁。

在进行动态分配时也分两种情况。在某些系统中,每当进程发出I/O请求后,便立即进入阻塞状态,直到所提出的I/O请求完成才被唤醒。在这种情况下,设备分配时安全的,单进程推进缓慢。在有的系统中,运行进程发出I/O请求后仍然继续进行,并且在需要时又可以发出第二个I/O请求,第三个I/O请求…,仅当进程所请求的设备已被另一进程占用时才进入阻塞状态。这样一个进程有可能同时操作多个设备,从而使进程推进迅速,但这种设备分配有可能产生死锁。

设备独立性

设备独立性是指用户在编制程序时所使用的设备与实际使用的设备无关。为此,要求用于程序对I/O设备的请求采用逻辑设备名,而在程序实际执行时使用物理设备名,它们之间的关系类似于存储管理中的逻辑地址与物理地址。

5.3设备分配步骤

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

当某一进程提出I/O请求后,系统的设备分配程序可以按下述步骤进行设备分配:

分配设备。根据进程提出的物理设备名查找系统设备表,从中找到该设备的设备控制表。查看设备控制表中的设备状态字段,若该设备处于忙状态,则将进程插入到设备等待队列;若设备空闲,便按照一定的算法来计算本次设备分配的安全性,若分配不会引起死锁则进行分配;否则仍将该进程插入设备等待队列。

分配控制器。在系统把设备分配给请求I/O的进程后,再到设备控制表中找到与该设备相连的控制器控制表,从该表的状态字段中可以知道该控制器是否忙碌。若控制器忙碌,则将进程插入该控制器的等待队列;否则将该控制器分配给进程。

分配通道。从控制器控制表中找到与该控制器连接的通道控制表,从该表的状态字段中可以知道该通道是否忙碌。若通道处于忙碌状态,则将该进程插入该通道的等待队列;否则将该通道分配给进程。若分配了通道,则此次设备分配成功,在将相应的设备、控制器、通道分配给进程后,便可以启动I/O设备实现I/O操作了。

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

为了提高系统的灵活性和可靠性,通常采用多通路的I/O系统结构。在这种系统结构中,一个设备可以与几个控制器相连,而一个控制器又可以与几个通道相连,这使得设备分配的过程较单通路的情况要复杂些。若某进程向系统提出I/O请求,要求为它分配一台I/O设备,则系统可以选择该类设备中的任何一台设备分配给该进程,其步骤如下:

根据进程所提供的设备类型,检测系统设备表,找到第一个该类设备的设备控制表,由其中的状态字段可以知道其忙碌情况,若设备忙,则检查第二个该类设备的设备控制表,仅当所有该类设备都处于忙碌状态时,才把进程插入到该类设备的等待队列中。只要有一个该类设备空闲,系统便可以计算分配该设备的安全性。若分配不会引起死锁则进行分配,否则仍将该进程插入该类设备的等待队列。

当系统把设备分配给进程后,便可以检查与此设备相连的第一个控制器控制表,从中了解该控制器是否忙碌。若控制器忙,则再检查第二个与设备相连的控制器控制表,若是所有与此设备相连的控制器都忙,则表明没有控制器可以分配给该设备。只要改设备不是该类设备的最后一个,便可以退回到第一步,试图再找下一个空闲设备;否则将该进程插入控制器等待队列中。

若给进程分配了控制器,便可以进一步检查与此控制器相连的第一个通道是否忙碌。若所有通道都忙,表明无通道可以分配给该控制器。只要该控制器不是与设备相连的最后一个控制器,便返回到第二步,试图再找出一个空闲的控制器,否则将该进程插入通道等待队列。若有空闲通道可用,则此次设备分配成功,在将相应的设备、控制器和通道分配给进程后,接着便可以启动I/O设备,开始信息传送。

6.SPOOLing系统

SPOOLing的意思外部设备同时联机操作,又称为假脱机输入/输出操作,是操作系统中采用的一项将独占设备改造成共享设备的技术。

SPOOLing系统是对脱机输入/输出工作的模拟,它必须有高速大容量且可随机存取的外存支持。SPOOLing系统主要包括以下三部分:

输入井和输出井

这是在磁盘上开辟出来的两个存储区域。输入井模拟脱机输入时的磁盘,用于收容I/O设备输入的数据。输出井模拟脱机输出时的磁盘,用于收容用户程序的输出数据。

输入缓冲区和输出缓冲区

这是在内存中开辟的两个缓冲区。输入缓冲区用于暂存由输入设备送来的数,以后再传送到输入井。输出缓冲区用于暂存从输出井送来的数据,以后再传送到输出设备。

输入进程和输出进程

输入进程模拟脱机输入时的外围控制机,将用户要求的数据从输入机通过输入缓冲区再送到输入井。当CPU需要输入数据时,直接将数据从输入井读入内存。输出进程模拟脱机输出时的外围控制机,把用户要求输出的数据先从内存送到输出井,带输出设备空闲时,再将输出井中的数据输出缓冲区送到输出设备上。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: