第五章-IO管理

XCurry Lv3

I/O设备的电子部件:CPU无法直接控制I/O设备的机械部件,因此I/O设备还要有一个电子部件座位CPU和I/O设备机械部件的“中介”,用于实现CPU对设备的控制。
I/O控制器的功能:

  • 接受和识别CPU发出的命令:I/O控制器中会有相应的控制寄存器,来存放命令和参数
  • 向CPU报告设备的状态:会有响应的状态寄存器,用于记录I/O设备的当前状态
  • 数据交换:设置响应的数据寄存器
  • 地址识别:需要给各个寄存器设置一个特定的“地址”
  • 一个I/O控制器可能会对应多个设备
  • 数据存储器、控制寄存器、状态机村可能有多个(内存映像I/O、寄存器独立编址)
    • 内存映射I/O:控制器中的寄存器与内存统一编制,可以采用堆内存进行操作的指令来对控制器进行操作
    • 寄存器独立编制:控制器中的寄存器独立编址,需要设置专门的指令来操作控制器

I/O控制方式

程序直接控制方式

cpu会向I/O模块进行轮询检查,判断所对应的I/O模块的状态,从而进行相关操作。
CPU干预很频繁,I/O操作开始之前、完成后需要CPU介入,并且在等待I/O完成的过程中CPU需要不断地轮询检查。
每次读写一个字,每个字的读写都需要CPU帮助

  • 优点:实现简单
  • 缺点:CPU和I/O设备只能串行工作,CPU需要移植轮询检查,长期处于“忙等”状态,CPU利用率低。

中断驱动方式

引入中断机制。由于I/O设备速度很慢,因此在CPU发出读/写命令后,可将等待I/O的进程阻塞,先切换到别的进程执行。当I/O完成后,控制器回想CPU发出一个中断信号,CPU检测到中断信号后,会保存当前进程的运行环境信息,转去执行中断处理程序该中断。处理终端过程中,CPU从I/O控制器读一个字的数据传送到CPU寄存器,再写入主存。接着,CPU恢复等待I/O的进程的运行环境,然后继续执行。

  1. CPU会在每个指令周期的末尾检查中断
  2. 中断处理过程中需要保存、恢复进程的运行环境,这个过程是需要一定时间开销的。如果中断发生的频率过高,会降低系统性能。
    每次读/写一个字
  • 优点:CPU和I/O设备并行工作,CPU利用率得到明显提升
  • 缺点:频繁的中断处理会消耗较多的CPU时间

DMA方式

直接存储器存取。主要用于块设备的I/O控制。数据的传送单位是“块”,多个块必须是连续存放,仅在传送一个或多个数据块的开始和结束时才需要CPU干预。
DMA控制器(==本身就是I/O设备==):

  • DR(数据寄存器):暂存从设备到内存,或从内存到设备的数据
  • MAR(内存地址寄存器):在输入时,MAR表示数据应放到内存中的什么位置;输出时MAR表示要输出的数据放在内存中的什么位置
  • DC(数据计数器):表示剩余要读/写的字节数
  • CR(命令状态寄存器):用于存放CPU发来的I/O命令,或设备的状态信息
    优点:数据传输效率增加,CPU利用率高。
    缺点:读取离散的块需要执行多条I/O指令,进行多次中断处理才能完成。

通道控制方式

通道可以识别并执行一系列通道指令。
与CPu相比,通道可以执行的指令很单一,并且通道程序是放在主机内存中,也就是说通道与CPU共享内存。

  • 优点:实现复杂,需要专门的通道硬件支持
  • 缺点:CPU、通道、I/O设备可并行工作,资源利用率高

I/O软件层次

  • 用户层软件:实现了与用户交互的接口,用户可直接使用该层提供的、与I/O操作相关的库函数对设备进行操作(SPOOLING技术)
  • 设备独立性软件:用户层软件将用户请求翻译成格式化的I/O请求,并通过“系统调用”请求操作系统内核的服务
  • 设备驱动程序:向上层提供统一的调用接口;设备的保护;差错处理;设备的分配与回收;数据缓冲区管理;建立逻辑设备名到物理设备名的映射关系:根据设备类型选择调用相应的驱动程序(逻辑设备表LUT)
  • 中断处理程序:根据中断信号类型找到中断处理程序并执行

输入输出应用接口

  • 字符设备接口:get/put
  • 块设备接口:read/write、seek(寻址)
  • 网络设备接口:socket、bind、connect、read/write
    阻塞I/O:应用程序发出I/O系统调用,进程需转为阻塞态等待
    非阻塞I/O:应用程序发出I/O系统调用,系统调用可迅速返回,进程无需阻塞等待
    设备驱动程序接口会被统一规定好

I/O核心子系统

SPOOLING系统

引入脱机技术后,缓解了CPU与慢速I/O设备的速度矛盾。另一方面,即使CPU在忙碌,也可以提前将数据输入到磁带;即使慢速的输出设备正在忙碌,也可以将数据输出到磁带。
SPOOLING技术需要多道批道程序支持

设备的分配

设备的固有属性:独占设备、共享设备、虚拟设备
从进程运行的安全性上考虑:

  • 安全分配方式:为进程分配一个设备后就将进程阻塞,本溪I/O完成后才将进程唤醒
  • 不安全分配方式:进程发出I/O请求后,系统为其分配I/O设备,进程可继续执行,之后还可以发出新的I/O请求。只有某个I/O请求得不到满足时才将进程阻塞(==死锁避免==)
    根据进程的分配过程:
  • 静态分配:进程运行前为其分配全部所需资源,运行结束后归还资源(破坏了“请求和保持”条件,不会发生死锁)
  • 动态分配:进程运行过程中动态申请设备资源
    设备控制表(DCT)、控制器控制表(COCT)、通道控制表(CHCT)、系统设备表(记录系统全部设备情况)
    设备分配步骤:
  1. 根据进程请求的物理设备名查找系统设备表(物理设备名是进程请求分配设备时提供的参数)
  2. 根据系统设备表找到设备控制表,若设备忙碌则将进程PCB挂到设备等待队列中,不忙碌则将设备分配给进程。
  3. 根据设备控制表找到控制器控制表,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙陆泽将控制器分配给进程
  4. 根据控制器控制表找到通道控制表,若通道忙碌则将进程PCb挂到通道等待队列中,不忙碌则将通道分配给进程
    缺点:
  • 底层细节对用户不透明,不方便编程
  • 换物理设备则程序无法运行
  • 若进程请求的物理设备正在忙碌,则机试系统中还有同类型的设备,进程也必须阻塞等待
    改进方法:建立逻辑设备名与物理设备名的映射机制,用户编程时只需提供逻辑设备名

缓冲区

缓冲区是一个存储区域,可以有专门的硬件寄存器组成,也可利用内存作为缓冲区。
使用硬件作为缓冲区的成本较高,容量也较小,一般金庸在队速度要求非常高的场合。
缓冲区的作用:

  • 缓和CPU与I/O设备之间速度不匹配的矛盾
  • 减少对CPU的中断频率,放宽对CPU中断响应时间的限制
  • 解决数据粒度不匹配的问题
  • 提高CPU与I/O设备之间的并行性

单缓冲

操作系统在主存中为一个进程分配一个缓冲区。当缓冲区数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时,可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出。

双缓冲

处理一个数据块的平均耗时为MAX(T,C+M)

循环缓冲区

将多个大小相等的缓冲区链接成一个循环队列

缓冲池

缓冲池由系统中共用的缓冲区组成。这些缓冲区按使用状况可以分为:空缓冲队列、装满输入数据的缓冲队列、装满输出数据的缓冲队列

磁盘调度算法

寻找时间(寻道时间):在读/写数据前,将磁头移动到制定此岛所花的时间
延迟时间:通过旋转磁盘,使磁头定位到目标扇区所需要的时间
传输时间:从磁盘读出或向磁盘写入数据所经历的时间。
先进先出算法、最短寻找时间优先(容易产生饥饿现象)、扫描算法(SCAN)、LOOK调度算法(边移动边观察)、循环扫描算法(C-Scan,磁头返回时直接快速移动至起始端而不处理任何请求)、C-LOOK算法
减少延迟时间的方法:

  • 交替编号:让逻辑上相邻的扇区在物理上有一定的间隔,可以实读取连续的逻辑扇区所需要的延迟时间更小
  • 错位命名

磁盘管理

一个扇区通常可划分为头、数据区域、尾。
完整的自举程序放在磁盘的启动块(引导块),启动块位于磁盘的固定位置。

  • 标题: 第五章-IO管理
  • 作者: XCurry
  • 创建于 : 2024-09-13 21:15:00
  • 更新于 : 2024-09-17 13:33:49
  • 链接: https://github.com/XYXMichael/2024/09/13/操作系统/第五章-IO管理/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论