【操作系统 · I/O】I/O管理 概述

1. I/O设备

计算机中参与I/O的外设可分为三类:

  • 人可读 :适用于计算机用户间的交互(打印机、终端)
  • 机器可读 :适用于与电子设备的通信(磁盘驱动器、USB密钥、传感器、执行器)
  • 通信 :适用于远程设备通信(数字线路驱动器、调制解调器)

各类别设备间有很大的差别,包括:

  • 数据传输速率 :不同设备数据传输速率可能会相差几个数量级

  • 应用 :设备用途对操作系统及其支撑设施中的软件、策略都有影响

    (磁盘:① 存储文件:文件管理应用;② 虚存页面备份:虚存相关应用)

  • 控制的复杂性 :打印机仅需要一个相对简单的控制接口,而磁盘的控制接口要复杂得多。

  • 传送单位 :数据可按字节流/字符流的形式传送(终端I/O),也可按更大的块传(磁盘I/O)

  • 数据表示 :不同设备使用不同的编码方式,这些差别包括字符编码、奇偶校验约定

  • 错误条件 :随着设备不同,错误的性质、报告错误的方式、错误造成的后果、有效的响应范围都各不相同

2. I/O功能功能组织

执行I/O的三种技术:

  • 程序控制I/O :处理器代表一个进程给I/O模块发送一个I/O命令;该进程进入忙等待,直至操作完成才能继续执行

  • 中断驱动I/O :处理器代表一个进程给I/O模块发送一个I/O命令;

    有两种可能性:

    • 若I/O指令 非阻塞 :处理器继续执行该进程的后续指令
    • 若I/O指令 阻塞 :处理器一条来自操作系统的指令,由其将该进程置为阻塞态 并调度其他进程
  • 直接存储器访问(DMA) :一个DMA模块控制内存、I/O模块之间的数据交换。为传送一块数据,处理器给DMA模块发送请求,只有在整个数据块传送结束后,它才被中断。

    • 设备与主存间交换数据:准备一个数据,向CPU发DMA请求,取得总线控制权。CPU只需要配置好DMA的目标地址,源数据地址,数据长度,配置启动寄存器DMA就可以自动工作了。进行数据传送时,修改字数计数器内且检查其值是否为0,不为0则继续传送,若已为0 则向CPU发中断请求。
    • DMA与CPU并行工作
无中断使用中断
通过处理器实现I/O和内存间的传送程序控制I/O中断驱动I/O
I/O与内存直接传送直接存储器访问(DMA)

2.1 I/O功能的发展

I/O 功能发展 6个阶段:

  1. 处理器 直接访问 外围设备。
  2. 增加 控制器 / I/O模块,采用非中断程序控制I/O。
  3. 应用 控制器 / I/O模块,采用中断程序控制I/O。
  4. I/O模块通过 DMA 直接控制 存储器。仅在传送开始、结束时使用到中央处理器。
  5. DMA + I/O 通道(I/O channel) : I/O模块单独配备处理器(包含为 I/O 服务的指令集)。中央处理器仅需指定I/O,无需干涉操作。执行完成后,中央处理器被中断。
  6. DMA + I/O 处理器(I/O processor) :I/O模块单独配备处理器 + 局部存储器,相当于迷你计算机。这样可将中央处理器参与部分降到最低。

2.2 直接存储器访问(Direct Memory Access, DMA)

DMA单元能够模拟处理器,并可获得系统总线控制权。

这样能利用系统总线、存储器进行双向数据传送。

DMA框图

DMA 工作流程:

  1. 处理器向DMA模块发送信息想要读/写一块数据
  2. 通过 读写控制线 在 处理器、DMA 间 传输 请求 读操作/写操作 信号
  3. 通过 数据线 传输 相关 I/O设备地址
  4. 通过 数据线 传输 从处理器中 读/写 的 起始地址,并保存在 DMA模块的 地址寄存器
  5. 通过 数据线 传输 读/写的字数,并保存在 DMA模块的 数据计数寄存器

此后,处理器已提交委托,继续执行其他操作,DMA则执行以下步骤:

  1. 直接 从/向 存储器 整块 传送数据,此时数据无需通过处理器
  2. 传输完成,DMA模块向处理器发送中断信号

此外,通过集成 DMA 和 I/O 功能,可大大降低所需总线周期数量:

可选DMA配置

3. 操作系统设计

3.1 设计目标

设计I/O机制,两个重要目标:

  • 效率(efficiency)

  • 通用性(generality)

3.2 I/O 功能逻辑结构

下面给出三个最重要的逻辑结构的基本原则:

I/O组织模型

解释说明:

  • 逻辑 I/O

    • 抽象:逻辑资源

    • 处理方式:(进程)打开、关闭、读、写

  • 设备 I/O

    • 抽象:操作、数据
    • 处理方式:I/O指令序列、通道命令、控制器指令 + 缓冲(提高利用率)
  • 调度 & 控制

    • 用途:I/O 操作 排队、调度,并处理中断、收集+报告状态

目录管理(文件组织)、文件系统(用户操作 + 权限)、物理组织(物理存储) 属于文件系统部分。

4. I/O缓冲

未采用缓冲可能会出现的问题:

  1. 程序挂起,等待I/O,传送期间,被传送的内存块将被锁死
  2. 单进程死锁
    • 进程发出I/O指令、被挂起后,换出内存,进程阻塞
    • I/O事件发生,I/O操作阻塞,等待进程换入内存

两类I/O设备:

  • 面向块的I/O设备(block - oriented) :拥有大小固定的块结构(eg. 磁盘、存储卡 等)
  • 面向流的I/O设备(stream - oriented) :以字节流的方式 I/O 数据,没有块结构(eg. 终端、打印机、鼠标 等)

I/O缓冲方案(输入)

4.1 单缓冲

单缓冲:当用户进程发出I/O请求时,操作系统为该操作分配一个位于内存中的系统部分的缓冲区。

预读

  • 面向块 I/O设备:输入传送的数据被放到系统缓冲区,当传送完成时,进程把该块移到用户空间,并立即请求另一块
  • 面向流 I/O设备:
    • 一次传送一行:行缓冲(哑终端、行式打印机)
    • 一次传送一字节:生产者/消费者模型

相比于无系统缓冲的情况,这种方法通常会提高系统速度,用户进程可在下一数据块读取的同时,处理已读入的数据块(面向块 I/O设备)


假设T是输入一个数据块所需时间,C是两次输入请求间所需的计算时间:

无缓冲区
执 行 时 间 = T + C 执行时间 = T+C =T+C
假设M是将数据从系统缓冲区复制到用户内存所需时间:

有缓冲区
执 行 时 间 = m a x [ C , T ] + M 执行时间 = max[C,T] + M =max[C,T]+M

4.2 双缓冲

双缓冲(double buffering)/ 缓冲交换(buffer swapping):在一个进程向一个缓冲区传送(读取)数据时,操作系统正在操作(填充 / 清空)另一个缓冲区。

双缓冲

  • 面向块 I/O设备:双缓冲确保进程无需等待I/O,效率提升、复杂度增加
  • 面向流 I/O设备:生产者/消费者模型

4.3 循环缓冲

循环缓冲:面对大量I/O操作时,扩充双缓冲弥补需求不足,这组缓冲区被视为循环缓冲区,缓冲区为组内一个缓冲单元。

※ 缓冲的作用

  • 平滑I/O需求的峰值
  • 存在多种I/O活动、多种进程活动时,用以提高操作系统效率、单个进程性能

缓冲也有被填满的情况,进程平均需求 > I/O设备服务能力时,缓冲区再多无法保证 I/O设备、进程 并驾齐驱。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值