zoukankan      html  css  js  c++  java
  • 设备管理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.原理

    预输入,缓输出,井管理

     

  • 相关阅读:
    leetcode44:wildcard
    Python实现决策树
    PCA实现
    js触摸事件
    js中的getBoundingClientRect()函数
    Java中timer的schedule()和schedualAtFixedRate()函数的区别
    nodejs中的exports和module.exports
    为什么MySQL数据库要用B+树存储索引
    浅谈微服务中的熔断,限流,降级
    缓存击穿、缓存穿透和缓存雪崩
  • 原文地址:https://www.cnblogs.com/giaogiaogiao/p/12743213.html
Copyright © 2011-2022 走看看