• 输入输出管理:设备独立性软件


    1.设备独立性软件

    下图来自王道考研操作系统
    I/O软件层次结构

    下图来自程序员cxuan
    I/O软件层次结构

    1.0 设备独立性

    设备独立性的概念
    是指用户在程序中使用的设备与实际使用的设备无关,即在用户程序中仅使用逻辑设备名。也称为设备无关性。–摘自:设备管理 | I/O软件

    下图来自设备管理 | I/O软件

    1.1 设备分配与回收

    设备分配时应考虑的因素
    1.设备固有属性:独占式设备,共享设备,虚拟设备
    独占设备:一个时段只能分配给一个进程(如打印机)
    共享设备:可同时分配给多个进程使用(如磁盘)各进程宏观上同时共享使用设备,微观上交替使用
    虚拟设备:用SPOOLING技术将独占设备改造为虚拟共享设备,可同时分配给多个进程使用
    2.设备分配算法:先来先服务、优先级高者优先、短任务优先等等
    3.设备分配中的安全性:安全与否在于为进程分配完设备后,该进程是否被阻塞
    安全分配方式:为进程分配一个设备后就将进程阻塞,本次I/O完成后才将进程唤醒
    一个时段内每个进程只能使用一个设备
    优点:破坏了请求和保持条件,不会死锁
    缺点:对于一个进程来说,CPU和I/O设备只能串行工作
    不安全分配方式:进程发出I/O请求后,系统为其分配I/O设备,进程不被阻塞可以继续执行,之后还
    可以发出新的I/O请求。只有某个I/O请求得不到满足时才将进程阻塞
    一个进程可以同时使用多个设备
    优点:进程的计算任务和I/O任务可以并行处理,使进程迅速推进
    缺点:有可能发生死锁(死锁避免、死锁的检查和解除)

    1.1.1 静态分配与动态分配

    静态分配:进程运行前系统为其分配所需全部资源,运行结束后归还资源(破坏了请求和保持条件,不会发生死锁)
    动态分配:进程运行过程中动态申请设备资源

    1.1.2 设备分配管理中的数据结构

    下图改编自王道考研操作系统
    通道、控制器、设备之间的关系及其对应数据结构

    下图来自王道考研操作系统
    通道控制表(CHCT)一个通道一张CHCT,OS根据该表对通道进行操作和管理

    下图来自王道考研操作系统
    控制器控制表(COCT)一个控制器一张COCT,OS根据该表对控制器进行操作和管理

    下图来自王道考研操作系统
    设备控制表(DCT)一个设备一张DCT,用于记录设备情况

    下图来自王道考研操作系统
    系统控制表(SDT)记录系统中全部设备

    1.1.3 设备分配的步骤

    物理设备名->SDT->DCT->COCT>CHCT

    注意:只有设备、控制器、通道三者都分配成功时,本次设备分配才算成功,之后便可启动I/O设备进行数据传送
    下图改编自王道考研操作系统

    上述设备分配中的缺点:
    1.用户编程时必须使用“物理设备名”
    2.若换了一个物理设备,则程序无法运行
    3.若进程请求的物理设备正在忙碌,则即使系统中还有同类型的设备,进程也必须阻塞等待

    1.1.4 设备分配步骤的改进方法

    改进方法:建立逻辑设备名与物理设备名的映射机制,用户编程时只需提供逻辑设备名

    逻辑设备名->LUT->物理设备名->SDT->DCT->COCT>CHCT
    下图改编自王道考研操作系统

    1.2 缓冲区管理

    缓冲区是一个存储区域,可以由专门的硬件寄存器组成(如快表TLB),也可利用内存作为缓冲区

    缓冲区作用:

    1. 缓和CPU与I/O设备之间速度不匹配的矛盾
    2. 减少对CPU的中断频率,放宽对CPU中断响应时间的限制
    3. 解决数据粒度不匹配问题(如进程每次输出一块数据,I/O设备每次读取一个字符)
    4. 提高CPU与I/O设备之间的并行性

    下图来自王道考研操作系统

    缓冲区特点
    当数据流向为 CPU -> 缓冲区 -> I/O 时缓冲区的特点如下面两图
    当数据流向为 CPU <- 缓冲区 <- I/O 时缓冲区的特点也一样


    1.2.1 单缓冲

    下图改编自王道考研操作系统
    输入时间 (T) > 处理时间 (C) 的情况

    采用单缓冲策略处理一块数据平均耗时 Max ( C , T ) + M \text{Max}(C,T)+M Max(C,T)+M

    下图改编自王道考研操作系统
    输入时间 (T) < 处理时间 (C) 的情况

    下图来自王道考研操作系统

    采用单缓冲策略处理一块数据平均耗时 Max ( C , T ) + M \text{Max}(C,T)+M Max(C,T)+M

    1.2.2 双缓冲

    下图改编自王道考研操作系统
    输入时间 (T) > 处理时间 (C) + 传送时间 (M)的情况

    采用双缓冲策略处理一块数据平均耗时 Max ( T , C + M ) \text{Max}(T,C+M) Max(T,C+M)

    下图改编自王道考研操作系统
    输入时间 (T) < 处理时间 (C) + 传送时间 (M)的情况

    采用双缓冲策略处理一块数据平均耗时 Max ( T , C + M ) \text{Max}(T,C+M) Max(T,C+M)

    下图改编自王道考研操作系统
    输入时间 (2T) < 处理时间 (C) + 传送时间 (2M)的情况

    采用双缓冲策略处理一块数据平均耗时 Max ( T , C + M ) \text{Max}(T,C+M) Max(T,C+M)

    1.2.3 循环缓冲

    下图来自王道考研操作系统

    1.2.4 缓冲池

    缓冲池由系统中共用的缓冲区组成
    缓冲区按使用状况挂到不同队列上:空缓冲队列、装满输入数据的队列(输入队列)、装满输出数据的缓冲队列(输出队列)
    根据一个缓冲区在实际运算中扮演的功能不同,设置了四种工作缓冲区:
    1.用于收容输入数据的工作缓冲区(hin)
    2.用于提取输入数据的工作缓冲区(sin)
    3.用于收容输出数据的工作缓冲区(hout)
    4.用于提取输出数据的工作缓冲区(sout)

    下图来自王道考研操作系统
    情况一:输入进程请求输出数据
    从空缓冲队列中取出一块缓冲区作为hin,冲满数据后将该缓冲区挂到输入队列队尾


    下图来自王道考研操作系统
    情况二:计算进程想取得一块输入数据
    从输入队列对头取得一块冲满数据的缓冲区作为sin,此缓冲区中数据被进程提取完后变为空缓冲区,将其挂到空缓冲队列队尾


    下图来自王道考研操作系统
    情况三:计算进程想要将准备好的数据冲入缓冲区
    从空缓冲队列中取得一块缓冲区作为hout,进程将输出数据冲满此缓冲区后,挂到输出队列队尾,以备I/O设备读取


    情况四:输出进程请求输出数据
    从输出队列中取得一块冲满数据的缓冲区作为sout,该缓冲区中数据被取走后,缓冲区变为空缓冲区,将其挂到空缓冲队列

  • 相关阅读:
    小程序设计基本微信小程序的校园生活助手系统
    【知识总结】金九银十offer拿到手软的前端面试题——Javascript篇(一)
    8+NAM+分型+单细胞生信思路
    cdn加速华为云obs桶文件配置过程(详细)
    MYSQL数据库-表的约束
    ASCII码与字符对照表(附转换代码)
    OpenGL:开放图形库
    知识图谱-KGE-模型:概述
    【刷题心得】双指针法|HashSet<T>
    人工智能导论网课笔记与实战
  • 原文地址:https://blog.csdn.net/weixin_48524215/article/details/126393697