OS-输入输出系统

Posted amzz

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了OS-输入输出系统相关的知识,希望对你有一定的参考价值。

第六章 输入输出系统

6.1 I/O系统的功能,模型,和接口

基本功能

  • 隐藏物理设备的细节
  • 与设备的无关性
  • 提高处理机和I/O设备的利用率
  • 对I/O设备进行控制
  • 确保对设备的正确共享
  • 错误处理

层次结构

技术图片

技术图片

I/O系统接口

  • 块设备接口
    • 块设备
    • 隐藏了磁盘的二维结构
    • 将抽象命令映射为低层操作
  • 流设备接口
    • 字符设备
    • get和put操作
    • in-control指令
  • 网络通信接口

6.2 I/O设备和设备控制器

I/O设备

  • 类型
    • 按使用特性分类
      • 存储设备,I/O设备
    • 按传输速率分类
      • 高速,中速,低速
  • 设备与控制器的接口

技术图片

设备控制器

  • 基本功能
    • 接收和识别命令
    • 数据交换
    • 标识和报告设备状态
    • 地址识别
    • 数据缓冲区
    • 差错控制
  • 组成
    • 设备控制器和处理机的接口
    • 设备控制器和设备的接口
    • I/O逻辑

技术图片

内存映像I/O

对I/O设备的控制可用以下两种方法

  • 利用特定的I/O指令
    • cpu-reg:CPU的某个寄存器
    • dev-no:控制器地址
    • dev-reg:指定控制器中的寄存器
    • 缺点:访问内存和访问设备用两种不同指令
  • 内存映像I/O
    • 优点:统一了对内存和对控制器的访问方法

技术图片

I/O通道

  • 目的:建立独立的I/O操作,使原来由CPU处理的I/O任务转由通道承担

  • I/O通道是特殊的处理机,指令类型单一,没有自己的内存,与CPU共享内存

  • 通道类型

    • 字节多路通道

      • 每个子通道完成一个字节的交换后把主通道让给下个子通道

      技术图片

    • 数组选择通道

    • 数组多路通道

  • 瓶颈问题

    • 价格昂贵导致通道数量少,通道不足导致瓶颈问题

      • 如想要启动设备4,需要通道1和控制器2,但如果通道1被占用则无法启动

      技术图片

    • 解决办法:增加设备到主机的通路而不增加通道

      技术图片

6.3 中断机构和中断处理程序

中断

  • 中断分类
    • 中断
      • 中断是指CPU对I/O设备发来的中断信号的一种响应
      • CPU暂停正在执行的程序,保留CPU环境后,自动转去执行I/O设备的中断处理程序
      • 执行完再回到断点,继续执行程序
    • 陷入
      • 由CPU内部事件所引起的中断,这类中断称为内中断或陷入
      • 如运算上下溢,程序出错,电源故障
  • 中断向量表
    • 每种设备配相应中断处理程序,并把该程序入口地址放在中断向量表的一个表项中
    • 为每个设备的中断请求规定一个中断号,对应中断向量表中的表项
  • 中断优先级
  • 对多中断源的处理方式
    • 屏蔽中断
      • 处理机在处理中断时,屏蔽所有其他中断,让它们等待
    • 嵌套中断
      • 优先响应最高优先级的中断请求
      • 高优先级的中断请求可以抢占正在运行的低优先级中断的处理机

中断处理程序

处理过程

  • 测定是否由未响应的中断信号

  • 保护被中断进程的CPU环境

    技术图片

  • 转入相应的设备处理程序

  • 中断处理

  • 恢复CPU现场并退出中断

技术图片

6.4 设备驱动程序

概述

主要任务:接收上层软件发来的抽象I/O要求,转为具体要求发送给设备控制器,启动设备区执行,反之将设备控制器发来的信号传送给上层软件

功能

  • 接收由与设备无关的软件发来的命令和参数,并将命令中的抽象要求转换为与设备相关的低层操作序列
  • 检查用户I/O请求的合法性,了解I/O设备的工作状态,传递参数和设置设备工作方式
  • 发出I/O命令
  • 及时响应由设备控制器发来的中断请求

设备处理方式

  • 为每一类设备设置一个进程,专门用于执行这类设备的I/O操作
  • 在整个系统中设置一个I/O进程,辅助执行系统中各类设备的I/O操作
  • 只为设备设置相应的设备驱动程序

处理过程

  1. 将抽象要求转换为具体要求

  2. 对服务请求进行校验

  3. 检查设备状态

    技术图片

  4. 传递必要参数

  5. 启动I/O设备

对I/O设备的控制方式

技术图片

  • 使用轮询的可编程I/O方式
    • 启动输入设备输入数据时,要同时把昨天寄存器中的忙/闲标志busy置为1
    • 然后不断地循环测试busy(轮询)
      • busy=1时,表示输入及尚未输完一个字(符),继续测试
      • busy=0时,表示输入机已将输入数据送人控制器的数据寄存器中,于是处理机将数据寄存器中的数据取出,送入内存指定单元中,完成了一个字(符)的I/O
    • 再去启动读下一个数据
  • 使用中断的可编程I/O方式
  • 直接存储器访问方式
    • 上面两种方式都是以字(节)为单位进行I/O,用于块设备极其低效
    • 按存储器访问方式的引入
      • 该方式数据传输的基本单位是数据块,即在CPU与I/O设备之间,每次至少传送一个数据块
      • 所传送数据从设备之间送入内存
      • 仅在传送一个或多个数据块的开始和结束时才需要CPU干预
    • DMA控制器的组成
      • 主机,DMA控制器的接口,DMA控制器与块设备的接口,I/O控制逻辑
      • 技术图片
      • 命令/状态寄存器CR,内存地址寄存器MAR,数据寄存器DR,数据计数器DC
      • 技术图片
  • I/O通道控制方式
    • DMA方式的发展,把对一个数据块的读或些为单位的干预,减少为对一组数据块的读或写及相关控制和管理为单位的干预
    • 实现CPU,通道,I/O设备三者的并行操作
    • 通道程序
      • 通道是通过执行通道程序并于设备控制器共同实现对I/O设备的控制的
      • 通道程序是由一系列通道指令所构成的,指令包含以下信息
        • 操作码
        • 内存地址
        • 计数
        • 通道程序结束位P
          • P=1表示本条指令是通道程序最后一条指令
        • 记录结束标志R
          • R=0表示本指令和下条指令所处理的数据同属于一个记录
          • R=1表示这是处理某记录的最后一条指令

6.5 与设备无关的I/O软件

为了实现设备独立性,必须在设备驱动程序之上再设置一层软件,称为与设备无关的I/O软件

基本概念

  • 以物理设备名使用设备
    • 早期OS中,程序使用I/O设备时,用的设备的物理名称,导致如果所请求的物理设备已被分配其他进程,尽管由其他相同设备空闲可用,但物理名不同,所有不能分配给程序
  • 引入逻辑设备名
    • 应用程序可用申请分配不同物理名,但逻辑设备名(类型名)相同的设备
    • 用于I/O操作的设备可更换(即重定向),而不必改变应用程序
  • 逻辑设备名称到物理设备名称的转换
    • 配置逻辑设备表进行转换

与设备无关的I/O软件

  • 设备驱动程序的统一接口
  • 缓冲管理
  • 差错控制
    • 暂时性错误
    • 持久性错误
  • 对独立设备的分破坏回收
  • 独立于设备的逻辑数据块

设备分配

  • 设备分配中的数据结构

    技术图片

    技术图片

  • 考虑因素

    • 设备固有属性

      不同设备分配策略不同

      • 独占设备
      • 共享设备
      • 虚拟设备
    • 设备分配算法

      • 先来先服务
      • 优先级高者优先
    • 设备分配中的安全性

      • 安全分配方式
        • 一旦进程以获得某设备后便阻塞,直到I/O操作完成才被唤醒
      • 不安全分配方式
  • 独占设备的分配程序

    • 基本的设备分配程序

    • 依次进行分配设备,控制器,通道

逻辑设备表(Logical Unit Table,LUT)

  1. 整个系统设置一张LUT,用于单用户系统
  2. 每个用户设置一张LUT

技术图片

6.6 用户层的I/O软件

假脱机系统SPOOLing

假脱机技术

  • 为了缓和CPU的高速性和I/O设备低速性之间的矛盾,引入了脱机输入,输出技术。
  • 用一道程序模拟脱机输入时外围控制机的功能,把低速I/O设备上的数据传送到高速磁盘上
  • 再用另一道程序模拟脱机输出时外围控制机的功能,把数据从磁盘传送到低速输出设备上
  • 实质是将独占设备转化为共享设备的技术。
  • 这种联机情况下实现的同时外围操作技术称为SPOOLing技术,或称为假脱机技术

SPOOLing组成

技术图片

技术图片

  • 输入井和输出井:在磁盘上开辟出来的,用于模拟脱机输入,输出时的磁盘
  • 输入缓冲区和输出缓冲区:在内存中开辟出来的,用于缓和CPU和磁盘之间速度不匹配的矛盾
  • 输入进程和输出进程,用于模拟脱机输入/输出时的外围控制机
  • 井管理程序:用于控制作用和磁盘井之间信息的交换

特点

  • 提高了I/O速度
  • 将独占设备改造为共享设备
  • 实现了虚拟设备功能

假脱机打印机系统

  • 每当用户进程发出打印输出请求时
    • 在磁盘缓冲区中为之申请一个空闲盘块,将要打印的数据送入其中暂存
    • 为用户进程申请一张空白用户请求打印表,并把打印要求填入,将表挂在假脱机文件队列上
  • 真正打印输出由假脱机打印进程负责
    • 从假脱机文件队列队首取出一张用户请求打印表,将数据由输出井传送到内存缓冲区,再交付打印机打印

技术图片

守护进程

  • 允许使用打印机的唯一进程
  • 若有打印请求,唤醒,否则睡眠
  • 还有很多其他的守护进程,如网络守护进程

6.7 缓冲区管理

缓冲的引入原因

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

缓冲区分类

把用户进程称为生产者,产生输出;系统为消费者,提取数据输出。如果生产者已经生产,消费者还未准备好结束,则生产者必须暂停等待,若设置了缓冲区,则无需等待就绪,数据可以先输出到缓冲区

单缓冲区

  • 磁盘把数据输入到缓冲区时间T,OS把缓冲区数据传送到用户区时间M,CPU对数据出来时间C,T和C可并行
  • 技术图片
  • 若用户进程已有第二行数据输出时,第一行数据尚未提取完毕,则进程应被阻塞

双缓冲区

  • 若缓冲区数据仍未被取走,生产者还是得等待,所以引入了双缓冲取机制,又称为缓冲对换
  • 技术图片
  • 双缓冲区还能让两台机器连接时双向数据传输
  • 技术图片

环形缓冲区

组成
  • 多个缓冲区
    • 装输入数据的空缓冲区R
    • 已装满数据的缓冲区G
    • 计算进程正在使用的现行工作缓冲区C
  • 多个指针
    • 指示计算进程下个可用缓冲区G的指针Nextg,
    • 计算进程正在使用的缓冲区C的指针Current
    • 指示输入进程下次可用的空缓冲区指针Nexti
使用
  • Getbuf过程
  • Releasebuf过程
进程间的同步问题

使用输入循环缓冲,可让输入进程和计算进程并行执行,相应的指针Nexti和Nextg不断沿着顺时针方向移动,可能出现

  • Nexti指针追赶上Nextg指针
    • 意味着输入进程输入数据速度大于计算进程处理数据速度,已把全部可用空缓冲区装满,此时输入进程应该被阻塞
  • Nextg指针追赶上Nexti指针
    • 意味着输入进程输入数据速度小于计算进程处理数据速度,全部装有输入数据的缓冲区都被抽空,此时计算进程应该被阻塞

缓冲池Buffer Pool

缓冲池与缓冲区的区别在于:缓冲区仅仅是一组内存块的链表,缓存池是包含一个管理的数据结构及一组操作函数的管理机制,用于管理多个缓冲区

组成
  • 空白缓冲队列emq
  • 输入队列inq
  • 输出队列outq

还有四种工作缓冲区:收容输入数据/输出数据的工作缓冲区,用于提前输入/输出数据的工作缓冲区

工作方式

为使进程都能互斥的访问缓冲池队列,为每个队列设置了一个互斥信号量MS(type),为了进程都能同步的使用缓冲区,又为每个缓冲队列设置了一个资源信号量RS(type)

void Getbuf(unsigned type)
{
	Wait(RS(type));
	Wait(MS(type));
	B(number)=Takebuf(type);
	Signal(MS(type));
}

void Putbuf(type,number)
{
	Wait(MS(type));
	Addbuf(type,number);
	Signal(MS(type));
	Signal(RS(type));
}

技术图片

6.8 磁盘存储器的性能和调度

磁盘性能简述

技术图片

磁盘类型

  • 软盘和硬盘
  • 单片盘和多片盘
  • 固定头磁盘和移动头磁盘
    • 固定:每条磁道都有读写磁头
    • 移动:每个盘面仅有一个磁头,为访问盘面上的所有磁道,磁头必须移动进行寻道,本节主要针对该磁盘

磁盘访问时间

  • 寻道时间Ts:磁头移动道指定磁道所经历时间
    • 启动时间s,移动n条磁道,每条m时间
    • Ts=m x n+s
  • 旋转延迟时间Tr
  • 传输时间Tt

磁盘调度算法

以下图例子进程请求访问磁盘先后次序按FCFS为准!

先来先服务FCFS

  • 按进程请求访问磁盘的先后次序进行调度

最短寻道时间优先SSTF

  • 要求访问的磁道与当前磁头所在磁道距离最近,使每次寻道时间最短

技术图片

基于扫描的磁盘调度算法

  • 扫描SCAN算法/电梯算法

    • 基于优先级的调度算法
    • 不仅考虑与当前磁道的距离,更优先考虑磁头当前的移动方式
  • 循环扫描CSCAN算法

    • 将最小磁道号紧接最大磁道号构成循环,进行循环扫描

    技术图片

  • NStepSCAN和FSCAN调度算法

    • NStepSCAN
      • 将磁盘请求队列分成若干个长度为N的子队列,按FCFS算法依次处理,每处理一个队列时又是按SCAN算法,避免出现粘着现象
      • 粘着现象即是磁臂停留在某处不动的情况
    • FSCAN
      • 将磁盘请求队列分成两个子队列
        • 由当前所有请求磁盘I/O的进程形成的
        • 在扫描期间新出现的所有请求磁盘I/O的进程放入等待处理的请求队列

以上是关于OS-输入输出系统的主要内容,如果未能解决你的问题,请参考以下文章

C#程序员经常用到的10个实用代码片段

片段(Java) | 机试题+算法思路+考点+代码解析 2023

java缓冲字符字节输入输出流:java.io.BufferedReaderjava.io.BufferedWriterjava.io.BufferedInputStreamjava.io.(代码片段

C#程序员经常用到的10个实用代码片段 - 操作系统

java代码在片段活动中不起作用

Android:向活动添加片段