1缓冲(Buffering)管理缓冲管理的主要职责:组织好缓冲区并提供获得和释放缓冲区的手段。(1)引入缓冲的主要原因,可归结为以下几点:1、改善CPU与I/O设备间速度不匹配的矛盾事实上,凡在数据的到达速率与其离去速率不同的地方,都可设置缓冲,以缓和它们之间速度不匹配的矛盾。2、可以减少对CPU的中断频率,放宽对中断响应时间的限制如果I/O操作每传送一个字节就要产生一次中断,那么设置了n个字节的缓冲区后,则可以等到缓冲区满才产生中断,这样中断次数就减少到1/n,而且中断响应的时间也可以相应的放宽。3、提高CPU和I/O设备之间的并行性例如,在CPU和打印机之间设置了缓冲区后,便可以使CPU和打印机并行工作。2缓冲区设置硬缓冲:在设备中设置缓冲区,由硬件实现软缓冲:在内存中开辟一个空间,用作缓冲区管理单缓冲双缓冲循环缓冲(多缓冲)缓冲池:多个缓冲区连接起来统一管理,常采用多缓冲管理3(1)单缓冲(SingleBuffer)单缓冲是操作系统提供的最简单的一种缓冲形式。在设备和CPU之间设置一个缓冲器,由输入和输出设备共用。例如,CPU要从磁盘上读一块数据进行计算,先从磁盘把一块数据读入到缓冲区中,然后由OS将缓冲区的数据传送到用户区,最后由CPU对这一块数据进行计算。可见第一步和最后一步是可以并行执行的,这样就提高了CPU和外设的利用率。但是对缓冲区中数据的输入和提取是串行工作的。(如下图所示)处理时间=MAX(C,T)+M。通常,M远小于T或C缓冲区用户区输入T传送MI/O设备操作系统用户进程计算C4(2)双缓冲(DoubleBuffer)双缓冲(缓冲对换)工作方式基本方法是在设备输入时,先将数据输入到缓冲区A,装满后便转向缓冲区B。此时OS可以从缓冲区A中提取数据传送到用户区,最后由CPU对数据进行计算。(如下图所示)系统处理一块数据的处理时间可粗略地认为:MAX(C,T)。若C<T,可使块设备连续输入;若C>T,可使CPU不必等待设备输入。缓冲区A用户区缓冲区B输入T传送MI/O设备操作系统用户进程计算C5解决外设之间并行工作的最简单的办法是设置双缓冲。在双缓冲方案中,具体的做法是为输入或输出操作设置两个缓冲区buffer1和buffer2。双缓冲方式和单缓冲方式相比,虽然双缓冲方式能进一步提高CPU和外设的并行程度,并能使输入设备和输出设备并行工作,但是在实际系统中很少采用这一方式,这是因为在计算机系统中的外设很多,又有大量的输入和输出,同时双缓冲很难匹配设备和CPU的处理速度。因此现代计算机系统中一般使用循环缓冲或缓冲池结构。6(3)循环缓冲(多缓冲(CircularBuffer))多缓冲可以实现对缓冲区中数据的输入和提取,与CPU的计算,三者并行工作。所以多缓冲进一步加快了I/O的速度,提高了设备的利用率。当对缓冲区中数据的输入和提取的速度基本相匹配时,采用双缓冲可使两者并行工作,获得较好的效果。但是如果两者的速度相差甚远时,双缓冲的效果就不够理想了。如果增加缓冲区的个数,情况就会有所改善。我们可以将多个缓冲区组织成循环队列的形式(如下图所示)。……缓冲区1用户区缓冲区2缓冲区N输入T传送MI/O设备操作系统用户进程7环形缓冲技术是在主存中分配一组大小相等的存储区作为缓冲区,并将这些缓冲区链接起来,每个缓冲区中有一个指向下一个缓冲的指针,最后一个缓冲区的指针指向第一个缓冲区,这样n个缓冲区就成了一个环形。此外,系统中有个缓冲区链首指针指向第一个缓冲区。8RGGGRG165423NextiNextgRGGGRC165423NextiNextgcurrentR:空缓冲区;G:装满数据的缓冲区;C:正在使用的缓冲区;10一组缓冲仅适用于某个特定的I/O进程和计算进程,当系统配置较多的设备时,使用专用缓冲区就要消耗大量的内存空间,且其利用率不高。为了提高缓冲区的利用率,目前广泛使用公用缓冲池,池中的缓冲区可供多个进程共享。对于同时用于输入/输出的公用缓冲池,至少含有三种类型的缓冲区:空缓冲区、装满输入数据的缓冲区和装满输出数据的缓冲区。为了管理上的方便,可将相同类型的缓冲区链成一个队列,于是就形成三个队列:空缓冲区队列、输入缓冲区队列和输出缓冲区队列。空缓冲区队列(emq):由空缓冲区所链成的队列。输入缓冲区队列(inq):由装满输入数据的缓冲区所链成的队列.输出缓冲区队列(outq):由装满输出数据的缓冲区所链成的队列。(4)缓冲池(BufferPool)11另外还应具有四种工作缓冲区:⑴用于收容输入数据的工作缓冲区(hin);⑵用于提取输入数据的工作缓冲区(sin);⑶用于收容输出数据的工作缓冲区(hout);⑷用于提取输出数据的工作缓冲区(sout)。缓冲区工作在收容输入、提取输入、收容输出和提取输出四种工作方式下(如下图所示)。hinsoutsinhout用户程序收容输入提取输入提取输出收容输出缓冲池12设备的分配在多道程序环境下,设备必须由系统分配。每当进程向系统提出I/O请求时,设备分配程序按照一定的策略,把其所需的设备及其有关资源(如缓冲区、控制器和通道)分配给该进程。在分配设备时还必须考虑系统的安全性,避免发生死锁现象。分配原则:根据设备特性、用户要求和系统配置情况决定的。总原则是:既要充分发挥设备的使用效率,又要避免由于不合理的分配方法造成进程死锁,还要做到设备的无关性。131、静态分配当一个作业(或进程)运行前,根据作业要求的设备,系统如果能满足,则将其要求的设备全部分配给它,然后开始运行,运行完成释放其占用的所有设备。这种分配方式的优点是系统绝不会出现死锁,缺点是设备利用率太低。2、动态分配这种分配方法是在作业(或进程)运行的过程中,需要使用设备时,就向系统申请,系统根据某种分配原则进行分配。这种方法的优点是设备的利用率高,缺点是系统有出现死锁的可能。设备的分配141.设备分配中数据结构数据结构有:设备控制表(DCT)、控制器控制表(COCT)、通道控制表(CHCT)、系统设备表(SDT)。设备的分配设备类型type设备标识符:deviceid设备状态:等待/不等待忙/闲指向控制器表的指针重复执行次数或时间设备队列的队首指针DCT1DCT2DCTn设备控制表集合15(c)系统设备表SDT控制器标识符:controllerid控制器状态:忙/闲与控制器连接的通道表指针控制器队列的队首指针控制器队列的队尾指针通道标识符:channelid通道状态:忙/闲与通道连接的控制器表首址通道队列的队首指针通道队列的队尾指针(a)控制器表COCT(b)通道表CHCT表目1…表目i…设备类设备标识符DCT驱动程序入口17设备分配的数据结构图表目1……表目i……设备类型设备标识符进程标识符DCT表指针驱动程序入口地址表目1……表目i……设备类型设备标识符设备状态(等待/不等待,忙/闲)COCT表指针重复执行次数或时间设备队列的队首指针设备队列的队尾指针表目1……表目i……控制器标识符控制器状态(忙/闲)CHCT表指针控制器队列的队首指针控制器队列的队尾指针表目1……表目i……通道标识符通道状态(忙/闲)通道队列的队首指针通道队列的队尾指针DCT设备控制表SDT系统设备表DCT集合SDT集合COCT控制器控制表CHCT通道控制表CHCT集合COCT集合221.根据设备的固有属性而采取的策略独占性独占性是指将一个设备分配给某进程后,便一直由它独占,直至该进程完成或释放该设备为止,系统才能将该设备分配给其它进程使用。这种分配方式是对独占设备采用的分配策略。它不仅往往造成设备利用率低,而且还会引起系统死锁。针对独占设备,系统一般采用静态分配方式。即在一个作业执行前,将它所需要使用的这类设备分配给它,当作业结束撤离时,才将分配给它的独占设备收回。设备分配时应考虑的因素23共享性共享性是指将共享设备(磁盘)同时分配给多个进程使用。但是这些进程访问设备的先后次序需进行合理的调度。对共享设备的分配一般采用动态分配这一方式。虚拟设备是指通过高速的共享设备,把一台慢速的以独占方式工作的物理设备改造成若干台虚拟的同类逻辑设备.需要引入SPOOLing技术。虚拟设备属于逻辑设备。242.设备分配算法(与进程的调度算法相似)先来先服务:当多个进程同时向某设备提出I/O请求时,该算法就根据对该设备提出请求的先后次序将这些进程排列成一个设备请求队列,设备分配程序把设备首先分配给队首进程。优先级高者优先:对优先权高的进程所提出的I/O请求赋予高优先权,在形成设备队列时,将优先级高的进程排在设备队列前面,先得到分配。而对于优先权相同的I/O请求,则按先来先服务原则排队分配。设备的分配253.设备分配中的安全性安全分配方式每当进程发出一个I/O请求后,便进入阻塞状态,直到其I/O操作完成时才被唤醒。当它停止运行时不保持任何设备资源,打破了产生死锁一个必要条件——“请求和保持”,所以这种分配方式是安全的。但是这种分配算法使得CPU与I/O设备串行工作,设备的利用率比较低。设备的分配26不安全分配方式进程发出一个I/O请求后仍可以继续运行,需要时还可以发第二个I/O请求、第三个I/O请求。只有当进程所请求的设备已被另一个进程占用时,进程才进入阻塞状态。这种分配方式是不安全,因为它可能具备“请求和保持”条件,从而可能造成系统死锁。当一个进程P1发出第一个I/O请求,占有了资源1后,再继续向前推进时,又要申请资源2;此时,进程P2却占有了资源2,在继续向前推进时,又要申请资源1,从而造成系统死锁。所以,在设备分配程序中应该增加安全性检查的功能。设备的分配27设备的相对号和绝对号计算机系统中配置了各种不同类型的外围设备,每一类型外围设备可以有若干台。为了对设备进行管理,系统为每一台设备确定一个编号,用于区分和识别设备,称为绝对号。在多道程序设计系统中,用户无法知道当前计算机系统中设备的使用情况,因此,一般用户不直接使用设备的绝对号,直接向系统说明所要使用的设备类型。由系统根据该类设备的分配情况决定使用哪一台设备。为了避免使用时产生混乱,用户可以在程序中对自己要求使用的若干台同类型设备给出编号,称为设备的相对号。用户总是用“设备类、相对号”向系统提出作用设备的要求,而系统为用户分配一个绝对号设备供用户使用。28为了提高OS的可适应性和可扩展性,目前几乎所有的OS都实现了设备的独立性(也称为设备无关性)。其基本思想是:用户程序不直接使用物理设备名(或设备的物理地址),而只能使用逻辑设备名;而系统在实际执行时,将逻辑设备名转换为某个具体的物理设备名,实施I/O操作。设备独立性(DeviceIndependence)29设备独立性带来以下两方面的好处:设备分配时的灵活性:当进程以逻辑设备名请求某类设备时,如果一台设备已经分配给其它进程或正在检修,此时系统可以将其它几台相同的空闲设备中的任一台分配给该进程,只有当此类设备全部被分配完时,进程才会被阻塞。设备分配适应性强,易于实现I/O重定向:所谓重定向是指用于I/O操作的设备可以更换,而不必改变应用程序。设备的分配31Spooling技术(掌握)1.什么是SPOOLing为了缓和CPU的高速性与I/O设备低速性间的矛盾而引入了脱机输入、脱机输出技术。该技术是利用专门的外围控制机,将低速I/O设备上的数据传送到高速磁盘上;或者相反。事实上,当系统中引入了多道程序技术后,完全可以利用其中的一道程序,来模拟脱机输入时的外围控制机功能,把低速I/O设备上的数据传送到高速磁盘上;再用另一道程序来模拟脱机输出时外围控制机的功能,把数据从磁盘传送到低速输出设备上。这样,便可在主机的直接控制下,实现脱机输入、输出功能。此时的外围操作与CPU对数据的处理同时进行,我们把这种在联机情况下实现的同时外围操作称为SPOOLing(SimultaneausPeriphernalOperatingOn-Line),或称为假脱机操作。32假脱机系统的组成模拟磁盘模拟外围控制机模拟磁盘33假脱机系统的特点(1)提高了I/O速度。从对低速I