======第五章设备管理======(3)

简介: 5.4 I/O 软件5.4.1 I/O 软件的设计目标和原则  1) 与具体设备无关

======第五章设备管理======(2)https://developer.aliyun.com/article/1415857

5.4

/O 软件

5.4.1 I/O 软件的设计目标和原则

  1) 与具体设备无关

对于 I/O 系统中许多种类不同的设备,作为程序员,只需要知道如何使用这些资源来完 成所需要的操作,而无需了解设备的有关具体实现细节。

 为了提高 OS 的可移植性和易适应性,I/O 软件应负责屏蔽设备的具体细节,向高层软件提供抽象的逻辑设备,并完成逻辑设备与具体物理设备的映射。

 对于操作系统本身而言,应允许在不需要将整个操作系统进行重新编译的情况下,增添新的设备驱动程序,以方便新的 I/O 设备的安装。如在 Windows 中,系统可以为新 I/O 设备自动安装和寻找驱动程序,从而实现即插即用。

 2) 统一命名

 要实现上述的设备无关性,其中一项重要的工作就是如何给 I/O 设备命名。不同的操作 系统有不同的命名规则,一般而言,是在系统中对各类设备采取预先设计的、统一的逻辑 名称进行命名,所有软件都以逻辑名称访问设备。这种统一命名与具体设备无关,换言之, 同一个逻辑设备的名称,在不同的情况下可能对应于不同的物理设备。

 3) 对错误的处理

 对于错误的处理,应该尽可能在接近硬件的层面处理,在低层软件能够解决的错误就不让高层软件感知,只有低层软件解决不了的错误才通知高层软件解决。许多情况下,错误恢复可以在低层得到解决,而高层软件 不需要知道。

 4) 缓冲技术

 由于 CPU 与设备之间的速度差异,无论是块设备还是字符设备,都需要使用缓冲技术。 对于不同类型的设备,其缓冲区(块)的大小是不一样的,块设备的缓冲是以数据块为单位的, 而字符设备的缓冲则以字节为单位。就是同类型的设备,其缓冲区(块)的大小也是存在差异 的,如不同的磁盘,其扇区的大小有可能不同。因此,I/O 软件应能屏蔽这种差异,向高层 软件提供统一大小的数据块或字符单元,使得高层软件能够只与逻辑块大小一致的抽象设 备进行交互。

 5) 设备的分配和释放

 对于系统中的共享设备,如磁盘等,可以同时为多个用户服务。对于这样的设备,应 该允许多个进程同时对其提出 I/O 请求。但对于独占设备,对其分配和释放的不当,将引起混乱,甚至死锁。对于独占设备 和共享设备带来的许多问题,I/O 软件必须能够同时进行妥善的解决。

 6) I/O 控制方式

 针对具有不同传输速率的设备,综合系统效率和系统代价等因素,合理选择 I/O 控制方 式,如像打印机等低速设备应采用中断驱动方式,而对磁盘等高速设备则采用 DMA 控制方 式等,以提高系统的利用率。为方便用户,I/O 软件也应屏蔽这种差异,向高层软件提供统 一的操作接口。


 综上所述,I/O 软件涉及的面非常宽,往下与硬件有着密切的关系,往上又与用户直接 交互,它与进程管理、存储器、文件管理等都存在着一定的联系,即它们都可能需要 I/O 软 件来实现 I/O 操作。为使十分复杂的 I/O 软件能具有清晰的结构,更好的可移植性和易适应 性,目前在 I/O 软件中已普遍采用了层次式结构,将系统中的设备操作和管理软件分为若干个层次,每一层都利用其下层提供的服务,完成输入、输出功能中的某些子功能,并屏蔽 这些功能实现的细节,向高层提供服务。 在层次式结构的 I/O 软件中,只要层次间的接口不变,对每个层次中的软件进行的修改 都不会引起其下层或高层代码的变更,仅最低层才会涉及到硬件的具体特性。通常把 I/O 软 件组织成四个层次,如图 5-16 所示(图中的箭头表示 I/O 的控制流)。各层次及其功能如下 所述:

 (1) 用户层软件:实现与用户交互的接口,用户可直接调用在用户层提供的、与 I/O 操 作有关的库函数,对设备进行操作。

 (2) 设备独立性软件:负责实现与设备驱动器的统一接口、设备命名、设备的保护以及 设备的分配与释放等,同时为设备管理和数据传送提供必要的存储空间。

 (3) 设备驱动程序:与硬件直接相关,负责具体实现系统对设备发出的操作指令, 驱动I/O设备工作的驱动程序。

 (4) 中断处理程序:用于保存被中断进程的 CPU 环境,转入相应的中断处理程序进行 处理,处理完后再恢复被中断进程的现场后返回到被中断进程。

20210714181343792.png

 例如,当一个用户进程试图从文件中读一个数据块时,需要通过系统调用以取得操作 系统的服务来完成,设备独立性软件接收到请求后,首先在高速缓存中查找相应的页面, 如果没有,则调用设备驱动程序向硬件发出一个请求,并由驱动程序负责从磁盘读取目标 数据块。当磁盘操作完成后,由硬件产生一个中断,并转入中断处理程序,检查中断原因, 提取设备状态,转入相应的设备驱动程序,唤醒用户进程以及结束此次 I/O 请求,继续用户 进程的运行。


 实际上,在不同的操作系统中,这种层次的划分并不是固定的,主要是随系统具体情 况的不同,而在层次的划分以及各层的功能和接口上存在一定的差异。下面我们将从低到 高地对每个层次进行讨论。

5.4.2 中断处理程序

唤醒被阻塞的驱动(程序)进程

 当中断处理程序开始执行时,首先去唤醒处于阻塞状态的驱动(程序)进程。如果是采用 了信号量机制,则可通过执行 signal 操作,将处于阻塞状态的驱动(程序)进程唤醒;在采用 信号机制时,将发送一信号给阻塞进程。


保护被中断进程的 CPU 环境


 通常由硬件自动将处理机状态字 PSW 和程序计数器(PC)中的内容,保存在中断保留区 (栈)中,然后把被中断进程的 CPU 现场信息(即包括所有的 CPU 寄存器,如通用寄存器、段 寄存器等内容)都压入中断栈中,因为在中断处理时可能会用到这些寄存器。图 5-17 给出了 一个简单的保护中断现场的示意图。该程序是指令在 N 位置时被中断的,程序计数器中的 内容为 N+1,所有寄存器的内容都被保留在栈中。

20210714182258638.png

转入相应的设备处理程序

 由处理机对各个中断源进行测试,以确定引起本次中断的 I/O 设备,并发送一应答信号给发出中断请求的进程,使之消除该中断请求信号,然后将相应的设备中断处理程序的入 口地址装入到程序计数器中,使处理机转向中断处理程序。


中断处理

 对于不同的设备,有不同的中断处理程序。该程序首先从设备控制器中读出设备状态, 以判别本次中断是正常完成中断,还是异常结束中断。若是前者,中断程序便进行结束处 理;若还有命令,可再向控制器发送新的命令,进行新一轮的数据传送。若是异常结束中断,则根据发生异常的原因做相应的处理。


恢复被中断进程的现场


 当中断处理完成以后,便可将保存在中断栈中的被中断进程的现场信息取出,并装入 到相应的寄存器中,其中包括该程序下一次要执行的指令的地址 N+1、处理机状态字 PSW, 以及各通用寄存器和段寄存器的内容。这样,当处理机再执行本程序时,便从 N+1 处开始, 最终返回到被中断的程序。

 I/O 操作完成后,驱动程序必须检查本次 I/O 操作中是否发生了错误,并向上层软件报 告,最终向调用者报告本次 I/O 的执行情况。除了上述的第 4 步外,其它各步骤对所有 I/O 设备都是相同的,因而对于某种操作系统,例如 UNIX 系统,是把这些共同的部分集中 起来,形成中断总控程序。每当要进行中断处理时,都要首先进入中断总控程序。而对于 第 4 步,则对不同设备须采用不同的设备中断处理程序继续执行。图 5-18 示出了中断处 理流程。

20210714182635564.png

5.4.3 设备驱动程序

设备驱动程序的功能

 (1) 接收由设备独立性软件发来的命令和参数,并将命令中的抽象要求转换为具体要 求,例如,将磁盘块号转换为磁盘的盘面、磁道号及扇区号。

 (2) 检查用户 I/O 请求的合法性,了解 I/O 设备的状态,传递有关参数,设置设备的工作方式。

 (3) 发出 I/O 命令。如果设备空闲,便立即启动 I/O 设备去完成指定的 I/O 操作;如果 设备处于忙碌状态,则将请求者的请求块挂在设备队列上等待。

 (4) 及时响应由控制器或通道发来的中断请求,并根据其中断类型调用相应的中断处理 程序进行处理。

 (5) 对于设置有通道的计算机系统,驱动程序还应能够根据用户的 I/O 请求,自动地构 成通道程序。


设备处理方式

 (1) 为每一类设备设置一个进程,专门用于执行这类设备的 I/O 操作。比如,为所有的 交互式终端设置一个交互式终端进程;又如,为同一类型的打印机设置一个打印进程。

 (2) 在整个系统中设置一个 I/O 进程,专门用于执行系统中所有各类设备的 I/O 操作。 也可以设置一个输入进程和一个输出进程, 分别处理系统中所有各类设备的输入或输出 操作。

 (3) 不设置专门的设备处理进程,而只为各类设备设置相应的设备处理程序(模块),供 用户进程或系统进程调用。


设备驱动程序的特点

 (1) 驱动程序主要是指在请求 I/O 的进程与设备控制器之间的一个通信和转换程序。它 将进程的 I/O 请求经过转换后,传送给控制器;又把控制器中所记录的设备状态和 I/O 操作 完成情况及时地反映给请求 I/O 的进程。

 (2) 驱动程序与设备控制器和 I/O 设备的硬件特性紧密相关,因而对不同类型的设备应 配置不同的驱动程序。例如,可以为相同的多个终端设置一个终端驱动程序,但有时即使 是同一类型的设备,由于其生产厂家不同,它们也可能并不完全兼容,此时也须为它们配 置不同的驱动程序。

 (3) 驱动程序与 I/O 设备所采用的 I/O 控制方式紧密相关。常用的 I/O 控制方式是中断 驱动和 DMA 方式,这两种方式的驱动程序明显不同,因为后者应按数组方式启动设备及进 行中断处理。

 (4) 由于驱动程序与硬件紧密相关,因而其中的一部分必须用汇编语言书写。目前有很 多驱动程序的基本部分,已经固化在 ROM 中。

 (5) 驱动程序应允许可重入。一个正在运行的驱动程序常会在一次调用完成前被再次调用。例如,网络驱动程序正在处理一个到来的数据包时,另一个数据包可能到达。

 (6) 驱动程序不允许系统调用。但是为了满足其与内核其它部分的交互,可以允许对某 些内核过程的调用,如通过调用内核过程来分配和释放内存页面作为缓冲区,以及调用其 它过程来管理 MMU 定时器、DMA 控制器、中断控制器等。


设备驱动程序的处理程序

 1) 将抽象要求转换为具体要求

通常在每个设备控制器中都含有若干个寄存器,分别用于暂存命令、数据和参数等。 由于用户及上层软件对设备控制器的具体情况毫无了解,因而只能向它发出抽象的要求(命 令),但这些命令无法传送给设备控制器。因此,就需要将这些抽象要求转换为具体要求。 例如,将抽象要求中的盘块号转换为磁盘的盘面、 磁道号及扇区。这一转换工作只能由驱 动程序来完成,因为在 OS 中只有驱动程序才同时了解抽象要求和设备控制器中的寄存器情 况;也只有它才知道命令、 数据和参数应分别送往哪个寄存器。

 2) 检查 I/O 请求的合法性

 对于任何输入设备,都是只能完成一组特定的功能,若该设备不支持这次的 I/O 请求, 则认为这次 I/O 请求非法。例如,用户试图请求从打印机输入数据,显然系统应予以拒绝。 此外,还有些设备如磁盘和终端,它们虽然都是既可读又可写的,但若在打开这些设备时 规定的是读,则用户的写请求必然被拒绝。

 3) 读出和检查设备的状态

 在启动某个设备进行 I/O 操作时,其前提条件应是该设备正处于空闲状态。因此在启动 设备之前,要从设备控制器的状态寄存器中,读出设备的状态。例如,为了向某设备写入 数据,此前应先检查该设备是否处于接收就绪状态,仅当它处于接收就绪状态时,才能启 动其设备控制器,否则只能等待。

 4) 传送必要的参数

 对于许多设备,特别是块设备,除必须向其控制器发出启动命令外,还需传送必要的 参数。例如在启动磁盘进行读/写之前,应先将本次要传送的字节数和数据应到达的主存始 址,送入控制器的相应寄存器中。

 5) 工作方式的设置

 有些设备可具有多种工作方式,典型情况是利用 RS-232 接口进行异步通信。在启动该 接口之前,应先按通信规程设定参数:波特率、奇偶校验方式、停止位数目及数据字节长 度等。

 6) 启动 I/O 设备

 在完成上述各项准备工作之后,驱动程序可以向控制器中的命令寄存器传送相应的控 制命令。对于字符设备,若发出的是写命令,驱动程序将把一个数据传送给控制器;若发 出的是读命令,则驱动程序等待接收数据,并通过从控制器中的状态寄存器读入状态字的 方法,来确定数据是否到达。

 驱动程序发出 I/O 命令后,基本的 I/O 操作是在设备控制器的控制下进行的。通常,I/O 操作所要完成的工作较多,需要一定的时间,如读/写一个盘块中的数据,此时驱动(程序) 进程把自己阻塞起来,直到中断到来时才将它唤醒。

5.4.4 设备独立性软件

设备独立性的概念

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

 1) 设备分配时的灵活性

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

 2) 易于实现 I/O 重定向

 所谓 I/O 重定向,是指用于 I/O 操作的设备可以更换(即重定向),而不必改变应用程序。


设备独立性软件

 驱动程序是一个与硬件(或设备)紧密相关的软件。为了实现设备独立性,必须再在驱动 程序之上设置一层软件,称为设备独立性软件。至于设备独立性软件和设备驱动程序之间 的界限,根据不同的操作系统和设备有所差异,主要取决于操作系统、设备独立性和设备 驱动程序的运行效率等多方面因素的权衡,因为对于一些本应由设备独立性软件实现的功 能,可能由于效率等诸多因素,实际上设计在设备驱动程序中。总的来说,设备独立性软 件的主要功能可分为以下两个方面:

 (1) 执行所有设备的公有操作。这些公有操作包括:

   ① 对独立设备的分配与回收;

   ② 将逻辑设备名映射为物理设备名,进一步可以找到相应物理设备的驱动程序;

   ③ 对设备进行保护,禁止用户直接访问设备;

   ④ 缓冲管理,即对字符设备和块设备的缓冲区进行有效的管理,以提高I/O的效率;

   ⑤ 差错控制,由于在I/O操作中的绝大多数错误都与设备无关,故主要由设备驱动程序 处理,而设备独立性软件只处理那些设备驱动程序无法处理的错误;

   ⑥ 提供独立于设备的逻辑块,不同类型的设备信息交换单位是不同的,读取和传输 速率也各不相同,如字符型设备以单个字符为单位,块设备是以一个数据块为单位,即使 同一类型的设备,其信息交换单位大小也是有差异的,如不同磁盘由于扇区大小的不同, 可能造成数据块大小的不一致,因此设备独立性软件应负责隐藏这些差异,对逻辑设备使 用并向高层软件提供大小统一的逻辑数据块。

 (2) 向用户层(或文件层)软件提供统一接口。无论何种设备,它们向用户所提供的接口 应该是相同的。例如,对各种设备的读操作,在应用程序中都使用 read;而对各种设备的 写操作,也都使用 write。


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

 1) 逻辑设备表

 为了实现设备的独立性,系统必须设置一张逻辑设备表(LUT,Logical Unit Table),用 于将应用程序中所使用的逻辑设备名映射为物理设备名。在该表的每个表目中包含了三项: 逻辑设备名、物理设备名和设备驱动程序的入口地址,如图 5-19(a)所示。当进程用逻辑设 备名请求分配 I/O 设备时,系统为它分配相应的物理设备,并在 LUT 上建立一个表目,填 上应用程序中使用的逻辑设备名和系统分配的物理设备名,以及该设备驱动程序的入口地 址。当以后进程再利用该逻辑设备名请求 I/O 操作时,系统通过查找 LUT,便可找到物理设备和驱动程序。

20210714184311791.png

 2) LUT 的设置问题 LUT 的设置可采取两种方式:第一种方式是在整个系统中只设置一张 LUT。由于系统 中所有进程的设备分配情况都记录在同一张 LUT 中,因而不允许在 LUT 中具有相同的逻辑 设备名,这就要求所有用户都不使用相同的逻辑设备名。在多用户环境下这通常是难以做 到的,因而这种方式主要用于单用户系统中。第二种方式是为每个用户设置一张 LUT。每 当用户登录时,便为该用户建立一个进程,同时也为之建立一张 LUT,并将该表放入进程 的 PCB 中。由于通常在多用户系统中,都配置了系统设备表,故此时的逻辑设备表可以采 用图 5-19(b)中的格式。

5.4.5 用户层的 I/O 软件

 用户层软件必须通过一组系统调用来取得操作系统服务。在现代的高级语言以及 C 语 言中,通常提供了与各系统调用一一对应的库函数,用户程序通过调用对应的库函数使用 系统调用。这些库函数与调用程序连接在一起,包含在运行时装入在内存的二进制程序中, 如 C 语言中的库函数 write 等,显然这些库函数的集合也是 I/O 系统的组成部分。但在许多 现代操作系统中,系统调用本身已经采用 C 语言编写,并以函数形式提供,所以在使用 C 语言编写的用户程序中,可以直接使用这些系统调用。

5.5 设备分配

5.5.1 设备分配中的数据机构

  1. 设备控制表(DCT)

  系统为每一个设备都配置了一张设备控制表,用于记录本设备的情况,如图 5-20 所示。

20210714184601137.png

设备控制表中,除了有用于指示设备类型的字段 type 和设备标识字段 deviceid 外,还 应含有下列字段:

 (1) 设备队列队首指针。凡因请求本设备而未得到满足的进程,其 PCB 都应按照一定 的策略排成一个队列, 称该队列为设备请求队列或简称设备队列。其队首指针指向队首 PCB。在有的系统中还设置了队尾指针。

 (2) 设备状态。当设备自身正处于使用状态时,应将设备的忙/闲标志置“1”。若与该 设备相连接的控制器或通道正忙,也不能启动该设备,此时则应将设备的等待标志置“1”。

 (3) 与设备连接的控制器表指针。该指针指向该设备所连接的控制器的控制表。在设备 到主机之间具有多条通路的情况下,一个设备将与多个控制器相连接。此时,在 DCT 中还 应设置多个控制器表指针。

 (4) 重复执行次数。由于外部设备在传送数据时,较易发生数据传送错误,因而在许多 系统中,如果发生传送错误,并不立即认为传送失败,而是令它重新传送,并由系统规定 设备在工作中发生错误时应重复执行的次数。在重复执行时,若能恢复正常传送,则仍认 为传送成功。仅当屡次失败,致使重复执行次数达到规定值而传送仍不成功时,才认为传 送失败。


控制器控制表、通道控制表和系统设备表

 (1) 控制器控制表(COCT)。系统为每一个控制器都设置了一张用于记录本控制器情况 的控制器控制表,如图 5-21(a)所示。

 (2) 通道控制表(CHCT)。每个通道都配有一张通道控制表,如图 5-21(b)所示。

20210714184719906.png  (3) 系统设备表(SDT)。这是系统范围的数据结构,其中记录了系统中全部设备的情况。 每个设备占一个表目,其中包括有设备类型、设备标识符、设备控制表及设备驱动程序的 入口等项,如图 5-21©所示。

5.5.2 设备分配时应考虑的因素

为了使系统有条不紊地工作,系统在分配设备时,应考虑这样几个因素: ① 设备的固 有属性;② 设备分配算法;③ 设备分配时的安全性;④ 设备独立性。本小节介绍前三个 问题,下一小节专门介绍设备独立性问题。


设备的固有属性

 在分配设备时,首先应考虑与设备分配有关的设备属性。设备的固有属性可分成三种:

   第一种是独占性,是指这种设备在一段时间内只允许一个进程独占,此即第二章所说的“临 界资源”;

   第二种是共享性,指这种设备允许多个进程同时共享;

   第三种是可虚拟设备,指设备本身虽是独占设备,但经过某种技术处理,可以把它改造成虚拟设备。对上述的独占、共享、可虚拟三种设备应采取不同的分配策略。


 (1) 独占设备。对于独占设备,应采用独享分配策略,即将一个设备分配给某进程后, 便由该进程独占,直至该进程完成或释放该设备,然后,系统才能再将该设备分配给其他 进程使用。这种分配策略的缺点是,设备得不到充分利用,而且还可能引起死锁。

 (2) 共享设备。对于共享设备,可同时分配给多个进程使用,此时须注意对这些进程访 问该设备的先后次序进行合理的调度。

 (3) 可虚拟设备。由于可虚拟设备是指一台物理设备在采用虚拟技术后,可变成多台逻辑上的所谓虚拟设备,因而说,一台可虚拟设备是可共享的设备,可以将它同时分配给多 个进程使用,并对这些访问该(物理)设备的先后次序进行控制。


设备分配算法

 (1) 先来先服务。当有多个进程对同一设备提出 I/O 请求时,该算法是根据诸进程对某 设备提出请求的先后次序,将这些进程排成一个设备请求队列,设备分配程序总是把设备 首先分配给队首进程。

 (2) 优先级高者优先。在进程调度中的这种策略,是优先权高的进程优先获得处理机。 如果对这种高优先权进程所提出的 I/O 请求也赋予高优先权,显然有助于这种进程尽快完 成。在利用该算法形成设备队列时,将优先权高的进程排在设备队列前面,而对于优先级 相同的 I/O 请求,则按先来先服务原则排队。


设备分配中的安全性

 1) 安全分配方式

 在这种分配方式中,每当进程发出 I/O 请求后,便进入阻塞状态,直到其 I/O 操作完成 时才被唤醒。在采用这种分配策略时,一旦进程已经获得某种设备(资源)后便阻塞,使该进 程不可能再请求任何资源,而在它运行时又不保持任何资源。因此,这种分配方式已经摒 弃了造成死锁的四个必要条件之一的“请求和保持”条件,从而使设备分配是安全的。其 缺点是进程进展缓慢,即 CPU 与 I/O 设备是串行工作的。

 2) 不安全分配方式

 在这种分配方式中,进程在发出 I/O 请求后仍继续运行,需要时又发出第二个 I/O 请求、 第三个 I/O 请求等。仅当进程所请求的设备已被另一进程占用时,请求进程才进入阻塞状态。 这种分配方式的优点是,一个进程可同时操作多个设备,使进程推进迅速。其缺点是分配 不安全,因为它可能具备“请求和保持”条件,从而可能造成死锁。因此,在设备分配程 序中,还应再增加一个功能,以用于对本次的设备分配是否会发生死锁进行安全性计算, 仅当计算结果说明分配是安全的情况下才进行设备分配。

5.5.3 独占设备分配程序

 1) 分配设备

 首先根据 I/O 请求中的物理设备名,查找系统设备表(SDT),从中找出该设备的 DCT, 再根据 DCT 中的设备状态字段,可知该设备是否正忙。若忙,便将请求 I/O 进程的 PCB 挂在设备队列上;否则,便按照一定的算法来计算本次设备分配的安全性。如果不会导 致系统进入不安全状态, 便将设备分配给请求进程;否则, 仍将其 PCB 插入设备等待 队列。

 2) 分配控制器

 在系统把设备分配给请求 I/O 的进程后,再到其 DCT 中找出与该设备连接的控制器的 COCT,从 COCT 的状态字段中可知该控制器是否忙碌。若忙,便将请求 I/O 进程的 PCB 挂在该控制器的等待队列上;否则,便将该控制器分配给进程。

 3) 分配通道

 在该 COCT 中又可找到与该控制器连接的通道的 CHCT,再根据 CHCT 内的状态信息, 可知该通道是否忙碌。若忙,便将请求 I/O 的进程挂在该通道的等待队列上;否则,将该通 道分配给进程。只有在设备、 控制器和通道三者都分配成功时,这次的设备分配才算成功。 然后,便可启动该 I/O 设备进行数据传送。


设备分配程序的改进

仔细研究上述基本的设备分配程序后可以发现:

 ① 进程是以物理设备名来提出 I/O 请 求的;

 ② 采用的是单通路的 I/O 系统结构,容易产生“瓶颈”现象。


 为此,应从以下两方 面对基本的设备分配程序加以改进,以使独占设备的分配程序具有更强的灵活性,并提高分配的成功率。


 1) 增加设备的独立性

 为了获得设备的独立性,进程应使用逻辑设备名请求 I/O。这样,系统首先从 SDT 中 找出第一个该类设备的 DCT。若该设备忙,又查找第二个该类设备的 DCT,仅当所有该类 设备都忙时,才把进程挂在该类设备的等待队列上;而只要有一个该类设备可用,系统便 进一步计算分配该设备的安全性。

 2) 考虑多通路情况

 为了防止在 I/O 系统中出现“瓶颈”现象,通常都采用多通路的 I/O 系统结构。此时对 控制器和通道的分配同样要经过几次反复,即若设备(控制器)所连接的第一个控制器(通道) 忙时,应查看其所连接的第二个控制器(通道),仅当所有的控制器(通道)都忙时,此次的控 制器(通道)分配才算失败,才把进程挂在控制器(通道)的等待队列上。而只要有一个控制器 (通道)可用,系统便可将它分配给进程。

======第五章设备管理======(4)https://developer.aliyun.com/article/1415860?spm=a2c6h.13148508.setting.26.16254f0exsfwiz

目录
相关文章
|
3月前
|
监控 前端开发 JavaScript
Qt Quick调试之道:跟踪、输出与打印信息的全面攻略
Qt Quick调试之道:跟踪、输出与打印信息的全面攻略
192 0
|
3月前
|
存储 数据安全/隐私保护 Windows
======第六章文件管理======(2)
6.5.2 直接文件和哈希文件 直接文件
63 0
蓝牙核心规范(V5.3)-深入详解之SCO和eSCO的异同
蓝牙核心规范(V5.3)-深入详解之SCO和eSCO的异同
1980 0
蓝牙核心规范(V5.3)-深入详解之SCO和eSCO的异同
|
3月前
|
安全 Linux
嵌入式Linux系统关闭串口调试信息的输出
嵌入式Linux系统关闭串口调试信息的输出
141 1
|
3月前
|
存储 缓存 算法
======第五章设备管理======(4)
5.5.4 SPOOLing 技术 什么是 SPOOLing
45 0
|
3月前
|
存储 传感器 数据处理
======第五章设备管理======(1)
  计算机系统的一个重要组成部分是 I/O 系统。在该系统中包括有用于实现信息输入、输出和存储功能的设备和相应的设备控制器,在有的大、中型机中,还有 I/O 通道或 I/O 处理机。设备管理的对象主要是 I/O 设备,还可能要涉及到设备控制器和 I/O 通道。而设备管理的基本任务是完成用户提出的 I/O 请求,提高 I/O 速率以及提高 I/O 设备的利用率。设备管 理的主要功能有: 缓冲区管理、设备分配、设备处理、虚拟设备及实现设备独立性等。由于 I/O 设备不仅种类繁多,而且它们的特性和操作方式往往相差甚大,这就使得设备管理成为操作系统中最繁杂且与硬件最紧密相关的部分。
61 0
|
3月前
|
开发框架 .NET 数据处理
======第五章设备管理======(2)
5.2.4 I/O 通道控制方式 I/O 通道控制方式的引入
62 0
|
3月前
|
存储 算法 Unix
======第六章文件管理======(4)
6.5 文件存储空间的管理 6.5.1 空闲表法和空闲链表法 空闲表法   
66 0
|
3月前
|
存储 Unix Linux
======第六章文件管理======(3)
6.3.4 索引分配 单级索引分配 链接分配方式虽然解决了连续分配方式所存在的问题,但又出现了下述另外两个问题:
59 0
|
3月前
|
存储 人工智能 算法
======第六章文件管理======(1)
 在现代计算机系统中,要用到大量的程序和数据,因内存容量有限,且不能长期保存, 故而平时总是把它们以文件的形式存放在外存中,需要时再随时将它们调入内存。如果由用户直接管理外存上的文件,不仅要求用户熟悉外存特性,了解各种文件的属性,以及它 们在外存上的位置,而且在多用户环境下,还必须能保持数据的安全性和一致性。显然, 这是用户所不能胜任、也不愿意承担的工作。于是,取而代之的便是在操作系统中又增加 了文件管理功能,即构成一个文件系统,负责管理在外存上的文件,并把对文件的存取、 共享和保护等手段提供给用户。这不仅方便了用户,保证了文件的安全性,还可有效地提 高系统资源的利用率。 6.1 文件和文件
49 0