设备分配与回收、缓冲区管理

设备分配与回收

  1. 是什么:设备分配的任务是按照一定的策略,为提出I/O请求的进程分配合适的设备,确保CPU与I/O设备之间能正常通信,还应分配相应的控制器和通道。
  2. 设备分配管理中的数据结构
    • 设备控制表DCT:每个设备对应一张DCT,用于记录设备情况
      • 关键字段有:类型、标识符、状态、指向COCT的指针、重复执行次数或时间(当重复执行多次io后仍不成功会认为此次io失败)、等待队列指针(由进程PCB组成队列)
    • 控制器控制表COCT:每个控制器对应一张COCT,操作系统根据COCT的信息对控制器进行操作和管理
      • 关键字段有:控制器标识符、状态、指向CHCT的指针、等待队列指针
    • 通道控制表CHCT:每个控制器对应一张CHCT。操作系统根据CHCT的信息对通道进行操作和管理
      • 关键字段有:通道标识符、状态、指向COCT的指针、等待队列指针
    • 系统设备表SDT:记录整个系统中所有设备的情况,每个设备对应一个表目
      • 关键字段有:设备类型、设备标识符(即物理设备名)、DCT、驱动程序入口
  3. 设备分配的步骤
    • 根据进程请求的物理设备名查找SDT
    • 根据SDT找到DCT
      • 若设备忙碌则将进程PCB挂到设备等待队列中
      • 若设备不忙碌则将设备分配给进程
    • 根据DCT找到COCT
      • 若控制器忙碌则将进程PCB挂到控制器等待队列中
      • 不忙碌则将控制器分配给进程
    • 根据COCT找到CHCT
      • 若通道忙碌则将进程PCB挂到通道等待队列中
      • 不忙碌则将通道分配给进程
    • 只有设备、控制器、通道三者都分配成功,这次设备分配才算成功。之后便可启动I/O设备进行数据传送

设备分配步骤的改进

  • 改成根据进程请求的逻辑设备名(即设备类型)查找SDT。
  • 增加一个逻辑设备表LUT:用户根据逻辑设备名查找SDT时若找到指定类型的、且空闲的设备,就将其分配给该进程。操作系统在LUT中新增一个表项
    • 逻辑设备表LUT建立了逻辑设备名与物理设备名之间的映射关系。如上所示,用户进程第一次使用设备时是用逻辑设备名向操作系统发出请求,然后操作系统查SDT找到空闲设备分配并在LUT中新增表项。若之后用户进程再通过相同的逻辑设备名请求使用该设备,操作系统通过LUT表即可知道该进程要使用哪个物理设备,也能知道该设备的驱动程序入口地址
    • LUT和DMT(Device Mapping Table设备映射表)是一个东西。DMT是Windows下的,LUT是Unix下的,都是建立逻辑设备名到物理设备名的映射关系(以便之后根据设备类型选择调用相应的驱动程序)。属于设备独立性软件要干的事情
  1. 设备分配中应考虑的因素
    • 设备的固有属性:
      • 独占性
      • 共享性
      • 虚拟性
      • 原则是既要充分发挥设备的使用效率,尽可能地让设备忙碌,又要避免由于不合理的分配方法造成进程死锁
    • 设备的分配算法
      • 先来新服务
      • 高优先级优先
    • 设备分配中的安全性
      • 安全分配方式:进程只要发出一个I/O请求就立即阻塞,直到I/O完成才被唤醒。即一个进程在同一时间段内只能使用一个设备,发出I/O请求后就不能再请求任何资源。破坏了死锁产生的“请求和保持”条件,不会发生死锁。但对于同一个进程,CPU和I/O设备串行工作,进程推进的效率不高
      • 不安全分配方式:进程可以同时发出多个I/O请求,直到某个I/O设备不可用才阻塞。这种方式下一个进程可同时操作多个设备,使得进程快速推进。但分配不安全,可能造成死锁(可用银行家算法来避免死锁)
    • 设备独立性:将用户程序与具体物理设备隔离开来,即用户面对的是逻辑设备,而分配程序将逻辑设备转换为物理设备后,再根据要求的物理设备号进行分配
      • 使得系统增减或变更设备时不必修改源程序,便于处理I/O设备故障,提高系统可靠性,并使设备的分配更加灵活,提高设备的利用率

缓冲区管理

  1. 有缓冲区和无缓冲区的对比:
    • 没有缓冲区的情况(输入):磁盘每准备好一个字的数据(放在其设备控制器的数据寄存器中),就给操作系统发一个中断信号,操作系统的中断处理程序会把磁盘控制器里这个字复制到用户区(即用户进程可以访问的一个空间)。整个1KB都复制完之后,操作系统唤醒用户进程,P就可以使用这1KB的数据
      设备分配与回收、缓冲区管理_第1张图片
    • 有缓冲区的情况(输入):由于缓冲区是操作系统内核(I/O的设备无关性软件)实现的,因此缓冲区是设置在内存的内核空间中的。这种情况下是先让磁盘逐字地将数据输入到缓冲区中,缓冲区充满后操作系统会将其一口气复制到用户空间。逐字输入的过程(3)就可以交给DMA控制器,这样的话就减少了中断发生的频率(等缓冲区充满后才发一个中断,让操作系统内核将缓冲区的数据全部复制到用户空间)
      设备分配与回收、缓冲区管理_第2张图片
  2. 缓冲区的作用
    • 缓和CPU与I/O设备之间速度不匹配的矛盾:CPU可以把要输出的数据快速放入缓冲区,之后就可以做别的事。慢速的I/O设备可以慢慢从缓冲区取走数据
    • 减少对CPU的中断频率,放宽对CPU中断响应时间的限制
    • 解决数据粒度不匹配问题:如输出进程每次可以生成一块数据,但I/O设备每次只能输出一个字符
    • 提高CPU与I/O设备之间的并行性
  3. 单缓冲:用户进程请求某种块设备读入若干块数据,操作系统在主存中为其分配一个缓冲区。用户进程的内存空间中,会分出一片工作区来接受输入/输出数据,一般默认工作区大小与缓冲区大小相同
    设备分配与回收、缓冲区管理_第3张图片
    设备分配与回收、缓冲区管理_第4张图片
  4. 双缓冲:若用户进程请求某种块设备读入若干块数据,操作系统会在主存为其分配两个缓冲
    设备分配与回收、缓冲区管理_第5张图片
    设备分配与回收、缓冲区管理_第6张图片
    设备分配与回收、缓冲区管理_第7张图片
    请添加图片描述
  5. 循环缓冲
  6. 缓冲池
    • 三个队列:空缓冲队列、输入队列、输出队列
    • 四种工作缓冲区:
      • 用于收容输入数据的工作缓冲区
      • 用于提取输入数据的工作缓冲区
      • 用于收容输出数据的工作缓冲区
      • 用于提取输出数据的工作缓冲区

你可能感兴趣的:(操作系统,操作系统)