计算机操作系统之IO管理

一、前言

  学习了存储器管理后,继续学习设备管理,设备管理的主要功能有缓冲区管理、设备分配、设备处理、虚拟设备及实现设备独立性等,由于I/O设备不仅种类繁多,而且他们的特性和操作方式往往相差甚大,使得设备管理称为操作系统中最繁杂且与硬件最紧密的部分,下面开始正式的学习。

二、I/O系统

  2.1 I/O设备

  I/O设备类型繁多,在OS观点看,设备使用特性、数据传输速率、数据的传输单位、设备共享属性等都是重要的性能指标。可以按照不同角度对他们进行分类

  ① 按设备的使用特性分类,可把设备分为两类,第一类是存储设备,也称为外存活后备存储器、辅助存储器,是计算机系统用于存储信息的主要设备,该设备速度慢,容量大,价格便宜。第二类是输入/输出设备,可分为输入设备、输出设备和交互式设备,如键盘,鼠标,扫描仪,打印机,显示器等。

  ② 按传输速率分类,可将I/O设备分为三类,第一类是低速设备,其传输速率仅为每秒钟几个字节至几百个字节的设备,如键盘、鼠标等。第二类是中速设备,其传输速率为每秒数千个字节至十万个字节的设备,如行式打印机、激光打印机等。第三类是高速设备,其传输速率在数百个千字节至千兆字节的设备,如磁带机、磁盘机、光盘机等。

  ③ 按信息交换的单位分类,可把I/O设备分为两类,第一类为块设备,这类设备用于存储信息,信息以数据块为单位,如磁盘,每个盘块512B~4KB,传输速率较高,通常每秒钟几兆位,另一特征是可寻址,即对它可随机地读/写任一块,磁盘设备的I/O常采用DMA方式。第二类是字符设备,用于数据的输入和输出,其基本单位是字符,属于无结构类型,如打印机等,其传输速率较低,通常为几个字节至数千个字节,另一特征是不可寻址,即输入/出时不能指定数据的输入源地址及输出的目标地址,此外,常采用中断驱动方式。

  ④ 按设备的共享属性分类,可以分为三类,独占设备,在一段时间内只允许一个用户(进程)访问的设备,即临界资源。共享设备,在一段时间内允许多个进程同时访问的设备,当然,每一时刻仍然只允许一个进程访问,如磁盘(可寻址和可随机访问)。虚拟设备,通过虚拟技术将一台设备变换为若干台逻辑设备,供若干个用户(进程)同时使用。

  通常,设备并不是直接与CPU进行通信,而是与设备控制器通信,因此,在I/O设备中应该含有与设备控制器之间的接口,在该接口有三种类型的信 ,各对应一条信 线。

  ① 数据信 线,用于在设备控制器之间传送数据信 ,对于输入设备而言,由外界输入的信 经转换器转换后所形成的数据,通常先送入缓冲器中,当数量达到一定的比特(字符)数后,再从缓冲器通过一组信 线传送给设备控制器。对输出设备而言,则先将从设备控制器经过数据信 线传送来的一批数据先暂存于缓冲器中,经转换器做适当转换后,再逐个字符地输出。

  ② 控制信 线,作为由设备控制器向I/O设备发送控制信 时的通路,该信 规定了设备将要执行的操作,如读操作(指由设备向控制器传送数据)或写操作(由控制器接受数据),或执行磁头移动等操作。

  ③ 状态信 线,用于传送设备当前状态的信 ,设备的当前状态有正在读(或写);设备已读(写)完成,并准备好新的数据传送。

  2.2 I/O通道

  虽然在CPU与I/O设备之间增加了设备控制器后,可以大大减少CPU对I/O的干预,但是当主机所配置的外设很多时,CPU的负担仍然很重,因此,在CPU和设备控制器之间又增设了通道。其主要目的是为了建立独立的I/O操作,不仅使数据的传送能独立于CPU,而且也希望有关对I/O操作的组织、管理及其结束处理尽量独立,以保证CPU有更多的时间去进行数据处理。在设置了通道后,CPU只需要向通道发送一条I/O指令,通道在收到该指令后,便从内存中取出本次要执行的通道程序,然后执行该通道程序,仅当通道完成了规定的I/O任务后,才向CPU发中断信 。I/O通道是一种特殊的处理机,具有执行I/O指令的能力,并通过执行通道(I/O)程序来控制I/O操作,但I/O通道与一般的处理机不同,因为其指令类型单一同时没有自己的内存,与CPU共享主内存。

  通道用于控制外围设备(包括字符设备和块设备),由于外围设备的类型较多,传输速率相差甚大,因为使通道具有多种类型,根据信息交换方式的不同,将通道分为以下三种。

  ① 字节多路通道,这是一种按照字节交叉方式工作的通道,通常都含有许多非分配型子通道,其数量可以几十到数百个,每个子通道连接一台I/O设备,并控制该设备的I/O操作,这些子通道按照时间片轮转方式共享主通道

  3.1 程序I/O方式

  在早起计算机系统中,由于无中断机构,处理机对I/O设备的控制采取程序I/O方式,或称为忙-等待方式,即在处理机向控制器发出一条I/O指令启动输入设备输入数据时,要同时把状态寄存器中的忙/闲标志busy设置为1,然后便不断地循环测试busy,只有当其为0时,表示输入已经送入控制器的数据寄存器中,于是处理机将数据寄存器中的数据取出,送入内存指定单元中,这样便完成了一个字(符)的I/O。

  在程序I/O方式中,由于CPU的高速性和I/O设备的低速性,致使CPU的绝大部分时间都处于等待I/O设备完成数据I/O的循环测试中,造成对CPU的极大浪费。

  3.2 中断驱动I/O控制方式

  当某进程要启动某个I/O设备工作时,便由CPU向相应的设备控制器发出一条I/O命令,然后立即返回继续执行原来的任务,设备控制器于是按照该命令的要求去控制指定I/O设备,此时,CPU与I/O设备并行操作。一旦数据进入数据寄存器,控制器便通过控制线向CPU发送一个中断信 ,由CPU检查输入过程中是否出错,若无错,便由控制器发送取走数据的信 ,再通过控制器及数据线将数据写入内存指定单元中。

  在I/O设备输入每个数据的过程中,由于无需CPU干预,因而可使CPU与I/O设备并行工作,仅当完成一个数据输入时,才需CPU花费极短的时间去做一些中断处理。

  3.3 直接存储器访问(DMA)I/O控制方式

  虽然中断驱动I/O比程序I/O方式更有效,但是,它仍是以字(节)为单位进行I/O的,每当完成一个字(节)的I/O时,控制器便要向CPU请求一次中断,换言之,采用中断驱动I/O方式时的CPU是以字(节)为单位进行干预的,将这种方式用于块设备的I/O是非常低效的,例如,为了从磁盘读取1KB的数据块,需要中断CPU1K次,为了进一步减少CPU对I/O的干预而引入了直接存储器访问方式,该方式的特点如下

  ① 数据传输的基本单位是数据块,即在CPU与I/O设备之间,每次传送至少一个数据块。

  ② 所传送的数据是从设备直接送入内存的,或者相反。

  ③ 仅在传送一个或多个数据块的开始和结束时,需要CPU干预,整块数据的传送是在控制器的控制下完成的。

  DMA控制器由三部分组成,主机与DMA控制器的接口;DMA控制器与块设备的接口;I/O控制逻辑。

  下图展示了三种不同方式的流程。

四、缓冲管理

  在设备管理中,为了缓和CPU与I/O设备速度不匹配的矛盾,提高CPU与I/O设备的并行性,在I/O设备与处理机交换数据时都用到了缓冲区。

  ① 缓和CPU和I/O设备间速度不匹配的矛盾。

  ② 减少对CPU的中断频率,放宽对CPU中断响应时间的限制。

  ③ 提高CPU和I/O设备之间的并行性。

  4.1 单缓冲

  每当用户进程发出一个I/O请求时,操作系统便在主存中为之分配一个缓冲区,假定从磁盘把一块数据输入到缓冲区的时间为T,操作系统将该缓冲区中的数据传送到用户区的时间为M,而CPU对这一块数据处理(计算)的时间为C,由于T和C是可以并行的,当T>C时,系统对每一块数据的处理时间为M+T,反之,为M+C,系统对每一块数据的处理时间为Max(C,T) + M

  4.3 循环缓冲

  当输入与输出或生产者与消费者的速度基本相匹配时,采用双缓冲能获得较好的效果,可使生产者和消费者基本上能并行操作,但若两者速度相差甚远,双缓冲的效果则不够理想,因此,引入了多缓冲机制,可将多个缓冲组织成循环缓冲形式。对于用作输入的循环缓冲,通常是提供给输入进程或计算进程使用,输入进程不断向空缓冲去输入数据,而计算进程则从中提取数据进行计算。

  循环缓冲区的组成如下

  ① 多个缓冲区,在循环缓冲区中包括多个缓冲区,每个缓冲区的大小相同,作为输入的多缓冲区可分为三种类型,用于装输入数据的空缓冲区R、已装满数据的缓冲区G以及计算进程正在使用的先行工作缓冲区C

  ② 多个指针,作为输入的缓冲区可设置三个指针,用于指示计算进程下一个可用缓冲区G的指针Nextg、指示输入进程下次可用的空缓冲区R的指针Nexti、以及用于指示计算进程正在使用的缓冲区C的指针Current。

  ① 收容输入,在输入进程需要输入数据时,便调用Getbuf(emp)过程,从空缓冲队列的队首取出一个空缓冲区,把它作为收容输入工作缓冲hin,然后,把数据输入其中,装满后再调用Putbuf(inq,hin)过程,将该缓冲区挂在输入队列上。

  ② 提取输入,当计算进程需要输入数据时,调用Getbuf(inq)过程,从输入队列队首取出一个缓冲区,作为提取输入工作缓冲区sin,计算进程从中提取数据,计算进程用完该数据后,再调用Putbuf(emq,sin)过程,将该缓冲区挂到空缓冲队列emq上。

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

  ④ 提取输出,由输出进程调用Getbuf(outq)过程,从输出队列队首取出一个装满输出数据的缓冲区,作为提取输出工作缓冲区sout,在数据提取完后,再调用Putbuf(emq,sout)过程,将该缓冲区挂在空缓冲队列末尾。

五、I/O软件

  5.1 设备独立性软件

  应用程序独立于具体使用的物理设备,为了实现设备独立性而引入了逻辑设备和物理设备这两个概念,在应用程序中,使用逻辑设备名称来请求使用某类设备,而系统在实际执行时,还必须使用物理设备名称。因此,系统需具有将逻辑设备名称转换为某物理设备名称的功能,这非常类似于存储器管理所介绍的逻辑地址和物理地址的概念,在应用程序中使用的是逻辑地址,系统在分配和使用内存时,必须使用物理地址。在实现了设备独立性功能后,可带来以下好处。

  ① 设备分配时的灵活性,当应用程序(进程)以物理名称来请求使用指定的某台设备时,如果该设备已经分配给其他进程或正在检修,而此时尽管还有几台其他的相同设备正在空闲,该进程仍然阻塞,但若进程能够以逻辑设备名称来请求某类设备时,系统可立即将该类设备中的任一台分配给进程,仅当所有此类设备全部分配完毕时,进程才会阻塞。

  ② 易于实现I/O重定向,用于I/O操作的设备可以更换,而不必改变应用程序。  

  5.2 逻辑设备名到物理设备名映射的实现

  ① 逻辑设备表,为了实现设备的独立性,系统必须设置一张逻辑设备表LUT(Logical Unit Table),用于将应用程序中所使用的逻辑设备名映射为物理设备名,该表的每个表目中包含了三项,逻辑设备名物理设备名设备驱动程序的入口地址

六、设备分配

  6.1 设备分配中的数据结构

  在进行设备分配时,通常都需要借助于一些表格的帮助,在表格中记录了相应设备或控制器的状态及对设备或控制器进行控制所需的信息,在进行设备分配时所需要的数据结构有设备控制表控制器控制表通道控制表系统设备表等。

  ① 设备控制表(DCT),系统为每个设备都配置了一张设备控制表,用于记录本设备的情况。

  6.2 SPOOLing技术

  通过SPOOLing技术可将一台物理I/O设备虚拟为多台逻辑I/O设备,允许多个用户共享一台物理I/O设备

  为了缓和CPU的高速性和I/O设备的低速性间的矛盾而引入的脱机输入、脱机输出技术,该技术是利用专门的外围控制机,将低速I/O设备上的数据传送到高速磁盘上,或者相反。事实上,当系统中引入了多道程序技术后,可以利用其中的一道程序,来模拟脱机输入时的外围控制机的功能,把低速I/O设备上的数据传送到高速磁盘上,再利用另一道程序来模拟脱机输出时外围控制机的功能,把数据从磁盘上传送到低速输出设备上,这样,便可在主机的直接控制下,实现脱机输入、输出的功能。此时的外围操作与CPU对数据的处理同时进行,我们把这种在联机情况下实现的同时外围操作称为SPOOLing,或称为假脱机操作。

  SPOOLing技术是对脱机输入、输出系统的恶魔你,相应地,SPOOLing系统必须建立在具有多道程序功能的操作系统上,而且还应有高速随机外存的支持,这通常采用磁盘存储技术。

  SPOOLing系统由一下三部分组成。

  ① 输入井和输出井,这是在磁盘上开辟的两个大存储空间。输入井是模拟脱机输入时的磁盘设备,用于暂存I/O设备输入的数据,输出井是模拟脱机输出时的磁盘,用于暂存用户程序和输出数据。

  ② 输入缓冲区和输出缓冲区,缓和CPU与磁盘之间速度不匹配,在内存中开辟的两个缓冲区,输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井,输出缓冲区用于暂存从输出井送来的数据,以后再传送给输出设备。

  ③ 输入进程SPi和输出进程SPo,利用两个进程来模拟脱机I/O时的外围控制机,其中,进程SPi模拟脱机输入时的外围控制机,将用户要求的数据从输入机通过输入缓冲区再送到输入井,当CPU需要输入数据时,直接从输入井读入内存;进程SPo模拟脱机输出时的外围控制机,把用户要求输出的数据先从内存送到输出井,待输出设备空闲时,再将输出井中的数据经过输出缓冲区送到输出设备上。

  ② 最短寻道时间优先(SSTF,Shortest Seek Time First)要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短。但这种算法不能保证平均寻道时间最短

  ④ 循环扫描(CSCAN)算法,SCAN算法既能够获得较好的寻道性能,又能防止饥饿现象,但是,当磁头刚从里向外移动而越过了某个磁道时,恰好又有一进程请求访问此磁道,这时,该进程必须等待,待磁头继续从里向外,然后再从外向里扫描完所有要访问的磁道后,才处理该进程的请求,致使该进程的请求被大大地推迟。为了减少这种延迟,CSCAN算法规定磁头单向移动,例如,致使自里向外移动,当磁头移到最外的磁道访问后,磁头立即返回最里的欲访问的磁道,即将最小的磁道 紧接着最大的磁道 构成循环,进行循环扫描

计算机操作系统之IO管理

  ⑤ NStepSCAN算法,在SSTF、SCAN、CSCAN几种调度算法中,都可能会出现磁臂停留在某处不动的情况,例如,有一个或几个进程对某个磁道具有较高的访问频率,即这些进程反复请求对某一磁道的I/O操作,从而垄断了整个磁盘设备,这一现象称为磁臂粘着。NStepSCAN算法将磁盘请求队列分成若干个长度为N的子队列,磁盘调度将按FCFS算法一次处理这些子队列,当正在处理某子队列时,如果又出现了新的磁盘请求,便将新的请求进程放入其他队列,这样就避免了出现粘着现象。当N很大时,会使N步扫描算法性能接近于SCAN算法,当N=1时,退化为FCFS算法。

  ⑥ FSCAN算法,其是NStepSCAN的简化,即FSCAN只将磁盘请求队列分成两个子队列,一个是由当前所有请求磁盘I/O的进程所形成的队列,由磁盘调度按SCAN算法进行处理,在扫描期间,将新出现的请求磁盘I/O的进程放入另一个等待处理的请求队列。这样,所有的新请求都被推迟到下一次扫描时处理。

  7.2 磁盘高速缓存

  利用内存中的存储空间来暂存从磁盘上读出的一系列盘块中的信息,这里的高速缓存是一组在逻辑上属于磁盘,物理上是驻留在内存中的盘块,高速缓存在内存中可以分成两种形式,第一种是在内存中开辟一个单独的存储空间来作为磁盘高速缓存,其大小是固定的,不会受到应用程序的影响。第二种是把所有未利用的内存空间变为一个缓冲池,供请求分页系统和磁盘I/O时(作为磁盘高速缓存)共享。此时的高速缓存大小不再固定。

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2017年1月2日
下一篇 2017年1月2日

相关推荐