设备管理2

6.3 设备分配

.数据结构

1.SDT  系统设备表

这是系统范围的数据结构,记录了系统中全部设备的情况,每个设备占一个表目,其中包括的有设备类型、设备标识符、设备控制表及设备驱动程序的入口等项。

 

  1. DCT  设备控制表

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

(1) 设备队列队首指针,凡因请求本设备而未得到满足的进程,应将其PCB按照一定 的策略排成一个设备请求队列,其队首指针指向队首PCB;

(2) /闲标志,用于表示当前设备的状态是忙或闲:

(3) 与设备连接的控制器表指针,该指针指向该设备所连接的控制器的控制表:

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

 

  1. COCT  控制器控制表

系统为每一个控制器都设置了用于记录控制器情况的控制器控制表。

 

  1. CHCT  通道控制表

每个通道都有一张通道控制表

 

二. 分配算法

独占设备的分配程序

我们通过一个例子来介绍设备分配过程。当某进程提出I/O请求后|系统的设备分配 程序可按下述步骤进行设备分配:

(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。这样,系统首先从SDT中找出第一个该类设备 的DCT。若该设备忙,又査找第二个该类设备的DCT,仅当所有该类设备都忙时,才把进 程挂在该类设备的等待队列上。而只要有一个该类设备可用,系统便进一步计算分配该设 备的安全性。如安全,便可把设备分配给它。

6.4 缓冲区管理

一、引入缓冲区

1)缓和CPU和I/O设备间速度不匹配的矛盾;

2)减少对CPU的中断频率,放宽对CPU中断响应时间的限制;

3)解决数据粒度不匹配的问题;

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

二、单缓冲区和双缓冲区

1.单缓冲区

 

 

2.双缓冲区

 

 

 

三、循环缓冲(环形缓冲区)

  1. 组成

(1)多个缓冲区。每个缓冲区大小相同,输入的缓冲区可以分成三种类型:用于装输入数据的空缓冲区R、已装满数据的缓冲区G和计算进程正在使用的现行工作缓冲区C

(2)多个指针。可设置三个指针:用于计算进程下一个可用缓冲区G的指针Nextg、指示输入进程下次可用的空缓冲区R的指针Nexti和用于指示计算进程正在使用的缓冲区C的指针Current。

 

  1. 使用

计算进程和输入进程可利用下述两个过程来使用形环缓冲区。

(1) Getbuf过程。当计算进程要使用缓冲区中的数据时,可调用Getbuf过程。该过程 将由指针Nextg所指示的缓冲区提供给进程使用,相应地,须把它改为现行工作缓冲区, 并令Current指针指向该缓冲区的第一个单元,同时将Nextg移向下一个G缓冲区。类似 地,每当输入进程要使用空缓冲区来装入数据时,也调用Getbuf过程,由该过程将指针 Nexti所指示的缓冲区提供给输入进程使用,同时将Nexti指针移向个 R缓冲区。

(2) Releasebuf过程。当计算进程把C缓冲区中的数据提取完毕时,便调用Releasebuf过程,将缓冲区C释放。此时,把该缓冲区由当前(现行)工作缓冲区C改为空缓冲区R。 类似地,当输入进程把缓冲区装满时,也应调用Releasebuf过程,将该缓冲区释放,并改为G缓冲区。

  1. 同步问题

使用输入循环缓冲,可使输入进程和计算进程并行执行。相应地,指针Nexti和指针 Nextg将不断地沿着顺时针方向移动,这样就可能出现下述两种情况:

(1) Nexti指针追赶上Nextg指针。这意味着输入进程输入数据的速度大于计算进程处 理数据的速度,已把全部可用的空缓冲区装满,再无缓冲区可用。此时,输入进程应阻塞, 直到计算进程把某个缓冲区中的数据全部提取完,使之成为空缓冲区R,并调用Releasebuf 过程将它释放时,才将输入进程唤醒。这种情况被称为系统受计算限制。

(2) Nextg指针追赶上Nexti指针。这意味着输入数据的速度低于计算进程处理数据的 速度,使全部装有输入数据的缓冲区都被抽空,再无装有数据的缓冲区供计算进程提取数 据。这时,计算进程只能阻塞,直至输入进程又装满某个缓冲区,并调用Releasebuf过程 将它释放时,才去唤醒计算进程。这种情况被称为系统受I/O限制。

四、缓冲池

为了管理上的方便,一般将缓冲池中具有相同类型的缓冲区 链接成一个队列,于是可形成以下三个队列:

(1) 空白缓冲队列emq。这是由空缓冲区所链成的队列。其队首指针F(emq)和队尾指 针L(emq)分别指向该队列的首缓冲区和尾缓冲区。

(2) 输入队列inq。这是由装满输入数据的缓冲区所链成的队列。其队首指针F(inq)和 队尾指针L(inq)分别指向输入队列的队首和队尾缓冲区。

(3) 输出队列oiuq。这是由装满输出数据的缓冲区所链成的队列。其队首指针F(mnq) 和队尾指针L(cnuq)分别指向该队列的首、尾缓冲区。

除了上述三个队列外,还应具有四种工作缓冲区:用于收容输入数据的工作缓冲区、 用于提取输入数据的工作缓冲区、用于收容输出数据的工作缓冲区,以及用于提取输出数 据的工作缓冲区。

 

5.5 I/0软件结构

用户

应用程序

设备独立(无关)性

设备驱动程序

中断处理程序

设备

 

一、中断处理程序

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

中断可以嵌套,不可以递归。

二、驱动程序

用于具体实现系统对设备发出的操作指令,驱动I/O设备工作的驱动程序。

抽象-->具体

通信  主机与控制

三、设备独立性

  1. 定义:应用程序独立于具体的物理设备
  2. 实现

系统中必须设置一张逻辑设备表LUT,其每个表目屮包含了逻辑设备名称、物理设备名称 和设备驱动程序入口地址三项。当应用程序用逻辑设备名称请求分配 I/O设备时,系统为 它分配相应的物理设备,并在LUT中建立一个表目。以后进程利用该逻辑设备名称请求 I/O操作时,便吋从LUT中得到物理设备名称和驱动程序入口地址。

3.易于实现设备重定向,灵活

四、虚拟设备和spooling技术

  1. 假脱机(spooling技术)

在联机情况下实现同时外围操作的技术。

         2.组成

(1) 输入井和输出井。这是在磁盘上开辟出来的两个存储区域。输入井模拟脱机输入 时的磁盘,用于收容I/O设备输入的数据。输出井模拟脱机输出时的磁盘,用于收容用户 程序的输出数据。输入/输出井中的数据一般以文件的形式组织管理,我们把这些文件称为 井文件。一个文件仅存放某一个进程的输入(或者输出)数据,所有进程的数据输入(或输出) 文件链接成为一个输入(或输出)队列。

(2) 输入缓冲区和输出缓冲区。这是在内存中幵辟的两个缓冲区,用于缓和CPU和磁 盘之间速度不匹配的矛盾。输入缓冲区用于暂存由输入设备传送的数据,之后再传送到输 入井。输出缓冲区用于暂存从输出井传送的数据,之后再传送到输出设备。

(3) 输入进程和输出进程。输入进程也称为预输入进程,用于模拟脱机输入时的外闱 控制机,将用户要求的数据从输入设备传送到输入缓冲区,再存放到输入井。当CPU需要 输入设备时,直接从输入井读入内存。输出进程也称为缓输出进程,用于模拟脱机输出时 的外围控制机,把用户要求输入的数据从内存传送并存放到输出井,待输出设备空闲时, 再将输出井中的数据经过输出缓冲区输出至输出设备上。

(4) 井管理程序。用于控制作业与磁盘井之间信息的交换。当作业执行过程中向某台 设备发出启动输入或输出操作请求时,由操作系统调用井管理程序,由其控制从输入井读 取信息或将信息输出至输出井

 

    3.特点

(1)提高了I/O的速度

(2)将独占设备改造为共享设备

(3)实现了虚拟设备功能

   4.原理

预输入,缓输出,井管理

 

原文地址:https://www.cnblogs.com/giaogiaogiao/p/12743213.html