操作系统:第五章 磁盘管理 – I/O控制,缓冲区管理

操作系统:第五章 磁盘管理 – I/O控制,缓冲区管理目录第五章磁盘管理-I/O控制,缓冲区管理I/O设备按使用特性分类按传输速率分类按信息交换的单位分类I/O控制器为什么有I/O控制器?I/O控制器在哪里?主要功能组成两种寄存器编址方式I/O控制方式程序解控制方式中断驱动方式DMA方式DMA控制器通道控制方式I/O控制方式总结I/O软件层次结构I/O核心子系统SPOOLing技术(假脱机技术)设备的分配与回收设备分配管理中的数据结构优化后的设备分配步骤缓冲区管理单缓冲策略双缓

本文已收录至 Github(MD-Notes),若博客中有图片打不开,可以来我的 Github 仓库https://github.com/HanquanHq/MD-Notes,涵盖了互联网大厂面试必问的知识点,讲解透彻,长期更新中,欢迎一起学习探讨。
面试必会系列专栏https://blog.csdn.net/sinat_42483341/category_10300357.html
操作系统系列专栏https://blog.csdn.net/sinat_42483341/category_10519484.html


第五章 磁盘管理 – I/O控制,缓冲区管理


I/O 设备

UNIX系统将外部设备抽象为一种特殊的文件,用户可以使用与文件操作相同的方式对外部设备进行操作。

按使用特性分类

人机交互类外部设备、存储设备、网络通信设备

按传输速率分类

低速设备、中速设备、高速设备

按信息交换的单位分类

块设备(传输快,可寻址)、字符设备(传输慢,不可寻址,常采用中断驱动方式)

I/O 控制器

为什么有 I/O 控制器?

想要把 printf(“hello, world”) 这样的用户I/O请求,转换为对设备的控制命令,并完成设备I/O任务,需要I/O软件与I/O硬件之间的协调工作。

为达到模块化、通用性的设计目标,通常将I/O设备(又称外围设备、控制设备)中的 机械部件电子部件 分开处理。CPU无法直接控制 I/O设备机械部件,因此 I/O 设备还要有一个 电子部件 作为 CPU 和 I/O 设备机械部件之间的“中介”,用于实现CPU对设备的控制。这个 电子部件 就是 I/O控制器,又称设备控制器。CPU可控制I/O控制器,又由I/O控制器来控制设备的机械部件。

操作系统与控制器交互,而非与设备交互,外设通过电缆与设备控制器(I/O接口)进行数据、状态和控制信息的传送。

I/O 控制器在哪里?

在这里插入图片描述

I/O控制器(I/O接口)在 扩展卡 或者 南桥芯片 内,通过I/O总线、北桥芯片连接CPU

I/O硬件建立了外设与主机之间的“通路”:主机 — 北桥 — I/O总线 — 南桥(设备控制器) — 电缆 — 外设

主要功能
  • 接收和识别 CPU 发出的命令(要有控制寄存器)
  • 向 CPU 报告设备的状态(要有状态寄存器)
  • 数据交换(要有数据寄存器,暂存输入 / 输出的数据)
  • 地址识别(由 I/O 逻辑实现)
组成
  • CPU 与控制器之间的接口(实现控制器与 CPU 之间的通信)
  • I/O 逻辑(负责识别 CPU 发出的命令,并向设备发出命令)
  • 控制器与设备之间的接口(实现控制器与设备之间的通信)
两种寄存器编址方式
  • 内存映射 I/O
    • 控制器中的寄存器与内存统一编址
    • 可以采用对内存进行操作的指令来对控制器进行操作
  • 寄存器独立编址
    • 控制器中的寄存器独立编址
    • 需要设置专门的指令来操作控制器

I/O 控制方式

程序解控制方式

优点:实现简单。在读/写指令之后,加上实现循环检查的一系列指令即可(因此才称为“程序直接控制方式”)

​ 缺点:CPU和I/O设备只能串行工作,CPU需要一直轮询检查,长期处于“忙等”状态,CPU利用率低。

在这里插入图片描述

中断驱动方式

优点:与“程序直接控制方式”相比,在“中断驱动方式”中,I/O控制器会通过中断信号主动报告I/O已完成,CPU不再需要不停地轮询。CPU和I/O设备可并行工作,CPU利用率得到明显提升。

缺点:每个字在I/O设备与内存之间的传输,都需要经过CPU。而频繁的中断处理会消耗较多的CPU时间。

在这里插入图片描述

DMA 方式

DMA 控制器

DR(Data Register,数据寄存器):暂存从设备到内存,或从内存到设备的数据。
MAR(Memory Address Register,内存地址寄存器):在输入时,MAR表示数据应放到内存中的什么位置;输出时MAR表示要输出的数据放在内存中的什么位置。
DC(Data Counter,数据计数器):表示剩余要读/写的字节数。
CR(Command Register,命令/状态寄存器):用于存放CPU发来的I/O命令,或设备的状态信息。

在这里插入图片描述

优点:数据传输以“块”为单位,CPU介入频率进一步降低。数据的传输不再需要先经过CPU再写入内存,数据传输效率进一步增加。CPU和I/O设备的并行性得到提升。

缺点:CPU每发出一条I/O指令,只能读/写一个或多个连续的数据块。如果要读/写多个离散存储的数据块,或者要将数据分别写到不同的内存区域时,CPU要分别发出多条I/O指令,进行多次中断处理才能完成。

在这里插入图片描述

通道控制方式

通道:一种 硬件,可以理解为是“弱鸡版的CPU”。通道可以识别并执行一系列 通道指令

在这里插入图片描述

缺点:实现复杂,需要专门的通道硬件支持

优点:CPU、通道、I/O设备可并行工作,资源利用率很高。

在这里插入图片描述

I/O 控制方式总结

在这里插入图片描述

I/O 软件层次结构

  • 用户通过调用 用户层软件 提供的 库函数 发出的I/O请求

  • 用户层软件通过 系统调用 请求 设备独立性软件层 的服务

  • 设备独立性软件层根据LUT调用设备对应的 驱动程序

  • 驱动程序向 I/O控制器 发出具体命令

  • 等待I/O完成的进程应该被阻塞,因此需要进程切换,而进程切换必然需要 中断处理

在这里插入图片描述

I/O 核心子系统

I/O核心子系统要实现的功能,其实就是上述中间三层要实现的功能,包括:I/O调度、设备保护、假脱机技术(SPOOLing技术)、设备分配与回收、缓冲区管理(即缓冲与高速缓存)

SPOOLing 技术(假脱机技术)

在早期的手工操作计算机中,所谓脱机,即脱离主机的控制,由外围控制机(磁带机)进行输入 / 输出操作

现在的假脱机技术,是用软件的方式模拟脱机技术。SPOOLing系统的组成如下:

在这里插入图片描述

打印机是种“独占式设备”,SPOOLing技术可以把一台物理设备虚拟成逻辑上的多台设备,可将独占式设备改造成共享设备。

设备的分配与回收

设备分配时应考虑的因素:设备的固有属性、设备的分配算法、设备分配中的安全性

设备的固有属性可分为三种:独占设备、共享设备、虚拟设备。

  • 独占设备——一个时段只能分配给一个进程(如打印机)
  • 共享设备——可同时分配给多个进程使用(如磁盘),进程往往宏观上共享使用设备,微观上交替使用。
  • 虚拟设备——采用SPOOLing技术将独占设备改造成虚拟的共享设备,可同时分配给多个进程使用(如采用SPOOLing技术实现的共享打印机)

设备的分配算法:

  • 先来先服务
  • 优先级高者优先
  • 短任务优先

设备分配中的安全性:

  • 安全分配方式:为进程分配一个设备后就将进程阻塞,本次I/O完成后才将进程唤醒。破坏了死锁发生的“请求和保持”条件,不会导致死锁。
  • 不安全分配方式:进程发出I/O请求后,系统为其分配I/O设备,进程可继续执行,之后还可以发出新的I/O请求。直到只有某个I/O请求得不到满足时,才将进程阻塞。有可能发生死锁,可以使用银行家算法避免。
设备分配管理中的数据结构

设备控制表(DCT):系统为每个设备配置一张DCT,用于记录设备情况。包含:

  • 设备类型:如,打印机/扫描仪/键盘
  • 设备标识符:即物理设备名,系统中的每个设备的物理设备名唯一
  • 设备状态:忙碌/空闲/故障…
  • 指向控制器表的指针:每个设备由一个控制器控制,该指针可找到相应控制器的信息
  • 重复执行次数或时间:当重复执行多次I/O操作后仍不成功,才认为此次I/O失败
  • 设备队列的队首指针:指向正在等待该设备的进程队列(由进程PCB组成队列)

控制器控制表(COCT):每个设备控制器都会对应一张COCT。操作系统根据COCT的信息对控制器进行操作和管理。

  • 控制器标识符:各个控制器的唯一ID
  • 控制器状态:忙碌/空闲/故障…
  • 指向通道表的指针:每个控制器由一个通道控制,该指针可找到相应通道的信息
  • 控制器队列的队首指针:指向正在等待该控制器的进程队列(由进程PCB组成队列)
  • 控制器队列的队尾指针:同上

通道控制表(CHCT):每个通道都会对应一张CHCT。操作系统根据CHCT的信息对通道进行操作和管理。

  • 通道标识符:各个通道的唯一ID
  • 通道状态:忙碌/空闲/故障…
  • 与通道连接的控制器表首址:可通过该指针找到该通道管理的所有控制器相关信息(COCT)
  • 通道队列的队首指针:指向正在等待该通道的进程队列(由进程PCB组成队列)
  • 通道队列的队尾指针:同上

系统设备表(SDT):记录了系统中全部设备的情况,每个设备对应一个表目。

在这里插入图片描述

优化后的设备分配步骤
  1. 根据进程请求的逻辑设备名查找SDT(注:用户编程时提供的逻辑设备名其实就是“设备类型”,例如打印机)

  2. 查找SDT,找到用户进程指定类型的、并且空闲的设备,将其分配给该进程。操作系统在逻辑设备表(LUT)中新增一个表项。

在这里插入图片描述

  1. 根据DCT找到COCT,若控制器忙碌则将进程PCB挂到控制器等待队列中,不忙碌则将控制器分配给进程。

  2. 根据COCT找到CHCT,若通道忙碌则将进程PCB挂到通道等待队列中,不忙碌则将通道分配给进程。

缓冲区管理

使用 硬件作为缓冲区 的成本较高,容量也较小,一般仅用在对速度要求非常高的场合(如存储器管理中用的联想寄存器,即 快表,由于对页表的访问频率极高,因此使用速度很快的联想寄存器来存放页表项的副本)

一般情况下,更多的是利用内存作为缓冲区,“设备独立性软件”的缓冲区管理就是要组织管理好这些缓冲区

在这里插入图片描述

单缓冲策略

当缓冲区数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时,可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出。

在这里插入图片描述

双缓冲策略

假设某用户进程请求某种块设备读入若干块的数据。若采用双缓冲的策略,操作系统会在主存中为其分配两个缓冲区(若题目中没有特别说明,一个缓冲区的大小就是一个块)

结论:采用双缓冲策略,处理一个数据块的平均耗时为Max (T, C+M)

两台机器之间通信时,可以配置缓冲区用于数据的发送和接受。

在这里插入图片描述

注:管道通信中的“管道”其实就是缓冲区。要实现数据的双向传输,必须设置两个管道

循环缓冲区

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

注:以下图示中,橙色表示已充满数据的缓冲区,绿色表示空缓冲区。

在这里插入图片描述

缓冲池

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

另外,根据一个缓冲区在实际运算中扮演的功能不同,又设置了四种工作缓冲区:

  • 用于收容输入数据的工作缓冲区(hin)

  • 用于提取输入数据的工作缓冲区(sin)

  • 用于收容输出数据的工作缓冲区(hout)

  • 用于提取输出数据的工作缓冲区(sout)

在这里插入图片描述

今天的文章操作系统:第五章 磁盘管理 – I/O控制,缓冲区管理分享到此就结束了,感谢您的阅读,如果确实帮到您,您可以动动手指转发给其他人。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/25180.html

(0)
编程小号编程小号

相关推荐

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注