6.1 I/0系统的基本功能和层次结构
1.I /O系统的基本功能
为了满足系统和用户的要求,IO系统应具有下述几方面基本功能:
(1)隐藏物理设备的细节。I/0设备不仅种类繁多,而且它们的特性和操作方式往往也存在很大差异,为了方便用户使用I/O设备,I/O系统必须对I/O设备进行适当的抽象,以隐藏掉物理设备的实现细节,而统- – 向用户提供少量的、抽象的读/写命令。
(2)与设备的无关性。允许应用程序通过抽象的逻辑设备名来请求使用某类设备,使得应用程序独立于具体使用的物理设备,从而有效地提高OS的可移植性和易适应性。
(3)提高处理机和/0设备的利用率。应尽量减少处理机对/O设备的干预,提高处理机和I/O设备并行操作的程度,以提高它们的利用率。
(4)对I/O设备进行控制。通过设备驱动程序启动I0设备进行数据传输,并能对数据传输方式进行有效的控制。
(5)确保对设备的正确共享。对不同类型的设备应采用不同的分配方式,以保证多个进程能共享设备进行正确的I/O操作。
(6)错误处理。相对于系统的其他部分,I/O 设备运行时更容易出现错误,而且这些错误很多是与设备紧密相关的,因此对于这类错误,应该尽可能在接近硬件的层面上处理,只有低层软件解决不了的错误才需向上层报告,请求上层软件解决。2. I/O系统的层次结构
I/O系统的最底层是执行I/O操作的硬件,其上面是对这些硬件进行控制和管理的I/O软件。为使十分复杂的I/0软件能具有清晰的结构、更好的可移植性和易适应性,通常,将I/O软件从高到低分成以下几个层次:
(1)用户层IO软件,实现与用户交互的接口,用户可直接调用该层所提供的与I/O操作有关的库函数,对设备进行操作。
(2)设备独立性软件,用于实现用户程序与设备驱动器的统-接口、设备命名、设备的保护以及设备的分配与释放等,同时为设备管理和数据传送提供必要的存储空间。
(3)设备驱动程序,与硬件直接相关,用于具体实现系统对设备发出操作指令以驱动I/O设备进行数据传输等工作。
(4)中断处理程序,用于在设备完成I/0操作后,根据I/O操作的具体完成情况,进行IO操作的结束处理。
6.2 I/O硬件
1. /O设备
1/O设备的类型繁多,可按不同的分类标准将它们分成不同的类型。
(1)按信息交换的单位分类。按信息交换的单位,可将设备分为块设备和字符设备两类。块设备(如磁盘、磁带)的信息存取以数据块为单位,其传送速率较高,对块设备的访问可以寻址;字符设备(如终端、打印机)的信息存取以字符为单位,其传送速率较低,对字符设备不能寻址。
(2)按使用特性分类。按使用特性可将设备分为存储设备和I/0 设备两类。存储设备主要用来存储信息,虽然它们的存取速度不如内存快,但容量却比内存大得多,价格也便宜。IO设备主要用来接收外部信息或将计算机处理后的信息送向计算机外部。
(3) 按传输速率分类。按传输速率的高低,可将设备分为低速设备、中速设备和高速设备三类。低速设备(如键盘、鼠标)的传输速率仅为每秒钟几个字节至数百个字节:中速设备(如行式打印机、激光打印机)的传输速率一般为每秒钟数千个字节至数万个字节:高速设备(如磁盘机、光盘机)的传输速率可达每秒钟数万个字节至数十兆字节。2.设备控制器
设备控制器是CPU与I/0设备之间的硬件接口,它接收从CPU发来的命令,并去控.制一个或多个设备。在微型机和小型机中,它通常是-块可以插入主板扩展槽的印刷电路板,也叫接口卡。
设备控制器中设有一组寄存器,CPU通过向其中的控制寄存器写命令字来执行I/O操作,如果某个命令带有参数,则还需将这些参数写到控制器的相应寄存器中。接收到命令后,设备控制器将按命令的要求独立地去控制指定的设备进行输入/输出,CPU可转去执行其他工作。输入/输出的完成情况与设备的状态信息均由控制器存放在自己的状态寄存器中,当控制器完成与设备之间的数据交换后,它将产生一个中断。CPU可通过读控制器中的寄存器来了解操作的结果和设备的状态。由于I/O设备的速率较低,而CPU和内存的速率却很高,故在控制器中还须设置:-些数据缓冲寄存器,在输出时它们用来暂存由主机传来的数据,然后才以I/O设备所具有的速率,将缓冲器中的数据传送给I0设备;在输入时用来暂存从IO设备传来的数据,待接收到一批数据后,再将缓冲器中的数据高速地传给主机。3. I/O 寄存器的访问方式
CPU可通过两种方式来读写设备控制器内的寄存器。第-一种方式是给每个控制寄存器分配一个I/O端口号,并通过专门的I/O指令(如IN REG, PORT指令和OUT PORT, REG指令)来读写控制器的寄存器。第二种方式被称作内存映射I/O, 此时,I/O 寄存器是内存地址空间的一部分,即为每个控制寄存器分配–个唯一的内存地址,而且该地址不会被分配给内存单元,这样便可以采用与访问内存同样的方式来访问I/O寄存器。
4. I/0通道
在许多大、中型计算机系统中,I/O 的管理工作交给了一个专门的部件,即I/O通道。I/O通道是一个独立于主机CPU的、专门用来管理IO的特殊处理机,它有自己的指令系统,其中的指令被称作通道指令。通道指令的类型比较单- -,主要局限于与I/O操作相关的指令。通道所执行的程序被称作通道程序,由于通道不带内存,故通道程序被存放在主机的内存中。通道有自己的总线控制部分,可以控制设备与内存直接进行数据交换。
有了通道之后,CPU仅需发出一条I/O指令给通道,说明要执行的I/O操作和要访问的1IO设备,便可进行其他工作。通道接到指令后,就启动相应的通道程序来执行I/O操作,整个I/O的过程,包括I/O操作的组织和管理、数据的传送将完全由通道控制,并在全部操作完成后向主机CPU发送中断信号。这样便进一步减少 了CPU对I/O的干预,使其有更多的时间去进行数据处理。5.中断
中断是指CPU在执行一个程序时,对系统中发生的某个事件作出的一种反应: CPU暂停正在执行的程序,保留现场后自动转去处理相应的事件,处理完该事件后,到适当的时候返回断点,继续完成被打断的程序。中断在操作系统中有着重要的地位,它是多道程序得以实现的基础。
根据引起中断的事件的不同类型,可将中断分为外部中断(简称中断)和陷入(又叫异常)两种,前者是由CPU以外的外部事件引起的,如I/O设备引起的I/O中断:后者是CPU执行指令过程中检测到的一-些内部事件引起的,如非法指令、地址越界等引起的中断。每一种中断或陷入都有一个与之相联系的中断号,并有一个与之相联系的中断处理程序,CPU通过执行相应的中断处理程序来完成对应事件的处理。为了处理上的方便,每种中断或陷入的中断处理程序按中断号的顺序存放在一- 张中断向量表或中断描述符表中。在中断响应时,系统会根据中断号去查找中断向量表或中断描述符表,从中获得相应的中断处理程序的入口地址,这样便可以转入中断处理程序执行。
6.3 中断处理程序和设备驱动程序
1. l/O中断处理程序
I/O设备完成I/O操作后,设备控制器便向CPU发送一一个 I/O中断信号。CPU响应中断时,将保存被中断进程的CPU现场,然后分析中断原因并通过中断向量表转去执行相应的I/O中断处理程序。IO中断处理程序的工作过程如下:
(1)检查本次I/O操作的完成情况。中断处理程序通过读设备控制器的状态寄存器来检查本次I/O操作的完成情况。
(2)进行I0结束或错误处理。若本次操作成功,则进行结束处理。譬如,本次操作是字符设备的读操作,即中断来自某个进行输入的字符设备,那说明该设备已经读入了一个字符(字)的数据,并已将该数据放入数据寄存器中。此时中断处理程序应将该数据传送给CPU,再将它存入缓冲区中,并修改相应的缓冲区指针,使其指向下一个内存单元。否则,根据发生异常的原因做相应的处理,在某些情况下,还需要按重试次数调用设备驱动程序重新传送数据。I/O 执行的最终结果,也将由中断处理程序向上层软件汇报。
(3)唤醒被IO操作阻塞的进程。IO中断处理程序还必须唤醒等待本次IO完成的相应进程,以使它能继续向前推进。
(4)启动下一个请求。若请求IO的队列中还有其他I/O请求等待处理,则调用设备驱动程序进行新一轮的数据传送。
(5)中断返回。执行中断返回指令进行中断返回。2.设备驱动程序
设备驱动程序是I0进程与设备控制器之间的通信程序,它接收来自上层软件的、抽象的I/O命令,再把它转换成具体要求后,发送给设备控制器,从而启动设备进行数据传送。设备驱动程序的处理过程如下:
(1)将抽象要求转换成具体要求。操作系统对用户屏蔽了有关物理设备的具体细节,并提供给用户一个-致的I/O接口,因此,用户进程或上层软件发出的I/O请求通常只是一些抽象的命令,驱动程序必须将这些命令按设备控制器所要求的格式转换成具体的命令,如将read命令中的盘块号按地址寄存器的格式转换成盘面、磁道及扇区号。
(2)检查I/O请求的合法性。每种设备都只能完成一组特 定的功能,设备驱动程序必须检查用户提出的IO请求,若相应设备不支持这次I/0请求,则认为这次I/O请求非法。对某些设备,如磁盘上的文件操作,若它们的打开方式是读,则认为用户的写请求是非法的,因此必然被拒绝。
(3)读出和检查设备的状态。在启动设备之前,驱动程序要从设备控制:器的状态寄存器中读出设备的状态,仅当它处于就绪状态时,才能启动其设备控制器,否则只能将相应的I/O请求插入请求I/0的队列。
(4)传送必要的参数。对带有参数的I/O命令,驱动程序必须将这些参数,如读盘时的磁盘地址、内存地址、本次要传送的字节数等,传送到设备控制器的相应寄存器中。对于字符设备,若发出的是写命令,驱动程序还必须把输出数据写入控制器的数据寄存器。有些设备可具有多种工作方式,典型的情况是利用RS-232接口进行异步通信,在启动该接口之前,应先按通信规程设定下述参数:波特率、奇偶校验方式、停止位数及数据字节长度等。
(5) 启动I/O 设备。在完成上述各项准备工作后,驱动程序可以向控制器的命令寄存器传送相应的命令,启动I/O设备开始I/O操作。
驱动程序发出I/O命令后,基本的I/O操作是在设备控制器的控制下进行的。通常I/O操作所要完成的工作需要一-定 的时间,因此,执行驱动程序的进程便把自己阻塞起来,直到I/O中断到来时才被唤醒。3. l/O 控制方式
(1)轮询方式。早期的计算机系统中,处理机对I/O设备的控制采用轮询的可编程I/O方式,即在处理机向控制器发出一条1/O指令,启动输入设备输入数据时,要同时把状态寄存器中的忙/闲标志busy置为1,然后便不断地循环测试busy标志(称为轮询),直至输入设备将输入数据送入设备控制器的数据寄存器并将busy位清0后,CPU才能将数据寄存器中的数据取走,送入内存指定单元,接着再将busy位置1,启动设备输入下一个数据。数据输出的过程也与上述情况类似。在轮询方式中,CPU的绝大部分时间都处于等待I/O设备完成数据I/O 的循环测试中,因此,会造成对CPU的极大浪费。
(2)中断方式。现代计算机系统中,由于引入了中断机构,处理机对I/O 设备的控制广泛采用中断的可编程IO方式。当用户进程要启动某个IO设备进行输入时,由CPU向相应的设备控制器发出一条IO命令,然后阻塞用户进程并将CPU调度给其他就绪进程;当相应的I/0设备完成输入工作时,设备控制器将向CPU发送一个I/0中断信号;CPU响应中断,由I/O中断处理程序进行差错检查,将数据缓冲寄存器中的数据传送到内存指定的单元中,并唤醒被阻塞的用户进程。由于在中断方式中,CPU可以与设备并行地工作,因此,中断方式成百倍地提高了CPU的利用率。
(3)直接存储器访问(DMA)方式。在DMA方式中,当进程要求设备输入数据时,CPU将IO命令发送到DMA控制器的命令寄存器中,并把准备存放输入数据的内存始址以及要传送的字节数分别送入DMA控制器的内存地址寄存器和数据计数器中,然后启动DMA控制器进行数据传送;等待输入数据的用户进程被阻塞,CPU被调度给其他就绪进程。同时,在DMA控制器的控制下,输入设备将不断地挪用CPU的存储器周期,把输入数据通过DMA控制器的数据寄存器传送到指定的内存位置;当所要求的字节数全部传送完毕后,DMA控制器将向CPU发出一个I/O中断信号; CPU响应中断,由中断处理程序进行善后处理,并唤醒被阻塞的用户进程。在DMA方式中,仅在传送–个数据块的开始和结束时,才需要CPU干预,整块数据的传送是在DMA控制器的控制下直接完成的,因此,与以字(节)为单位进行IO的中断方式相比,它又极大地提高了CPU的利用率。
(4) I/O 通道控制方式。在I/O通道方式中,当用户进程发出I/O请求时,CPU只需向I/O通道发一条I/O指令,以给出其所要执行的通道程序的始址和要访问的I/O设备;用户进程阻塞以等待I/O完成,而通道则通过执行通道程序控制设备控制器,从而控制设备完成指定的I/0任务,然后向CPU发I/O中断信号; CPU响应中断,进行善后处理并唤醒被阻塞的用户进程。I/O通道方式把以一个数据块的读(或写)为单位的干预,减少为以一组数据块的读(或写)为单位的干预,同时,又实现了CPU、通道和I/O设备三者的并行操作,从而更有效地提高了整个系统的资源利用率。
6.4 与设备无关的I/O设备
1.设备无关性的基本概念
设备无关性,也叫设备独立性,是指应用程序与具体使用的物理设备无关。引入设备无关性,可增加设备分配的灵活性,提高设备的利用率,并且使得I/O重定向更易于实现。为了 实现设备无关性,而引入了逻辑设备和物理设备两个概念。在应用程序中,使用逻辑设备名称来请求使用某类设备,而系统在实际执行时,还是必须使用物理设备。因此,系统中必须设置一张逻辑设备表LUT,其每个表目中包含了逻辑设备名称、物理设备名称和设备驱动程序入口地址三项。当应用程序用逻辑设备名称请求分配I/O设备时,系统为它分配相应的物理设备,并在LUT中建立一个表目。以后进程利用该逻辑设备名称请求I/O操作时,便可从LUT中得到物理设备名称和驱动程序入口地址。
2.设备独立性软件
为每个设备配置的设备驱动程序,是与硬件紧密相关的软件。为了实现设备独立性,必须在设备驱动程序之上设置一-层软件, 称为与设备无关的I/O软件,或设备独立性软件。设备独立性软件首先是执行所有设备的公用操作,包括:缓冲管理、差错控制、对独立设备的分配和回收、提供独立于设备的逻辑数据块、逻辑设备到物理设备的映射、设备的保护等;其次是向用户层软件提供一一个设备驱动程序的统一的接口。
3.设备分配
1)设备分配中的数据结构
在进行设备分配时,必须在系统中配置相应的数据结构。
如图6.1(a)所示,每个设备有一-张设备控制表DCT,用来记录相应设备的各种属性,具体包括:设备的类型、设备的标识符、设备的状态、设备等待队列指针、与设备连接的控制器的COCT指针、重复执行次数等。其中,设备的状态中有用来指示设备是否正在使用的“忙闲”标志,以及设备是否因相连的控制器或通道正在忙而无法启动的“等待/不等待”标志;设备等待队列指针指向等待使用该设备的所有进程的PCB所组成的队列;重复次数则规定了设备在工作中发生错误而未能成功传送数据时,可以重新传送的次数。系统还为每个控制器设置了一 张用于记录控制器情况的控制器控制表COCT,为每个通道设置了一张用于记录通道情况的通道控制表CHCT,分别如图6. l(b)和(Cc)所示。
(2)最短寻道时间优先(SSTF)调度算法。SSTF算法选择这样的请求,其要求访问的磁道与当前磁头所在的磁道距离最近。通常,SSTF 比FCFS有更好的寻道性能,但每次的寻道时间最短并不能保证平均寻道时间最短,而且,在当前磁道附近不断有新的I/O请求到来时,还可能使要求访问较远磁道的进程产生饥饿现象。
(3)扫描(SCAN)调度算法。SCAN 算法,也叫电梯调度算法,它选中的是当前磁头移动方向上、距离当前磁头所在的磁道最近的磁道上的请求。SCAN算法既能获得较好的寻道性能,又能防止“饥饿”现象,故被广泛用于大、中、小型机器和网络中。
(4)循环扫描(CSCAN)调度算法。在SCAN算法中,当磁头刚从里向外(或刚从外向里)移动而越过了某一磁道时,恰好又有一-进程请求访 问此磁道,那它必须等待磁头到达磁盘的另一端,反向回来后,才能得到处理。为了减少这种延迟,CSCAN算法规定只在磁头移动的某一个方向上处理磁盘请求,因此,当沿该方向访问到最远的一个请求后,磁臂立即返回到磁盘的另一-端,并再次开始扫描。
(5) N-step-SCAN算法。当进程对某一磁道有较高的访问频率时,利用SSTF、SCAN及CSCAN算法,都可能出现磁臂停留在该磁道上不动的情况,这种现象被称为“磁臂粘着”。为了避免磁臂粘着,又引入了N-step-SCAN算法,它将磁盘请求队列按请求到达的时间先后顺序分成若千个长度为N的子队列,并采用FCFS算法依次处理这些子队列,而对每个子队列,则又是按SCAN算法进行处理。
(6) FSCAN调度算法。FSCAN算法实质上是N-step-SCAN算法的简化,它只把磁盘请求队列分成两个子队列。一个是由当前所有请求磁盘I/O的进程形成的队列,由磁盘调度按SCAN算法进行处理。在扫描期间到达的所有请求磁盘I/O的进程,被放入另一个等待处理的请求队列。这样,所有的新请求都将被推迟到下一次扫描时处理。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/81606.html