输入/输出管理

image

一.I/O复习

对比之前计组的总结:https://www.cnblogs.com/gaodiyuanjin/p/19259843
这里不过多阐述 简单复习

首先是I/O设备的分类

按信息交换:

  • 块设备:按数据块为单位 传输速率高 可寻址
  • 字符设备:传输速率低 不可寻址
    按传输速率:
  • 低速设备
  • 中速设备
  • 高速设备
    按使用特性:
  • 人机交互设备
  • 存储设备
  • 网络通信设备
    按共享属性:
  • 独占设备:同一时刻只能由一个进程占用的设备 如打印机
  • 共享设备:同一时间段内允许多个进程同时访问设备 如磁盘
  • 虚拟设备:通过SPOOLing技术独占设备变成共享设备 一个物理设备变成多个逻辑设备

上述重新复习到并发和并行的区别 同一时刻和同一时间段
image

I/O接口
image

关于I/O接口可以理解成外设插的那个口

CPU和设备控制器接口的三线
image

I/O接口分类
image

I/O端口:设备控制器可被CPU直接访问的寄存器
image

image

I/O的控制方式 之前总结已足够详细 这里简单阐述

1.程序查询方式
image

CPU执行程序实现 CPU和I/O设备只能串行工作

2.中断驱动方式
允许I/O设备主动打断CPU的运行并请求服务 解放CPU

3.DMA方式
I/O设备和内存之间直接开辟数据交换通路(并行工作)
image

以上三种I/O方式都会导致用户进程进入阻塞态


二.I/O软件层次结构

接下来一大堆只需要搞懂一张图即可
image

核心:每层都利用下层提供的服务
(类比计网层次结构)

用户层软件

实现和用户交互接口 可直接调用用户层提供的库函数
需要我们搞懂SPOOLing

SPOOLing(假脱机技术)
目的:提高独占设备的利用率
核心:将独占设备变成共享设备 空间换时间(输入井和输出井)
缓和CPU高速性和I/O设备低速性之间的矛盾

先用一个例子来引入

image
如打印机独占设备 多个进程访问使用它 SPOOLing使它们都得到了设备
实际上是得到了虚拟设备(外存区)

接下来是一堆概念 更重要的SPOOLing系统组成 工作方式

image
输入设备输入数据暂存到内存输入缓冲区再存放到磁盘的输入井
输出数据从内存传送到输出井 等输出设备空闲 需要数据时 将磁盘的输出井数据经输出缓冲区送到输出设备

  • 井管理程序:控制作业和磁盘之间的信息交换
  • 输入井和输出井:收容I/O设备输入和输出的数据
  • 输入缓冲区和输出缓冲区:暂存数据
  • 输入进程和输出进程:模拟外围控制机
  • 预输入程序和预输出程序
设备独立性软件(设备无关性)
实现用户程序和设备驱动器的统一接口 设备命名 保护 及设备分配和回收等
应用程序所用设备不局限于某个具体的物理设备(和实际使用设备无关)

关于这个我们只需要搞懂其功能 也是上面图上写的

映射
image
系统只能识别物理设备名 所有使用LUT来映射
记住就一点 在系统调用打开I/O设备的时候使用的设备标识是逻辑名

缓冲
OS中使用磁盘高速缓存技术来提高磁盘I/O速度
它是不同与cache 磁盘高速缓存逻辑上属于磁盘 物理上是驻留在内存中的盘块
内存中两种形式:

  • 缓存区(内存开辟空间)
  • 缓冲池(未利用内存空间)

接下来需要搞懂缓冲区
目的:缓和速度匹配问题 提高并行性
实现:使用硬件缓冲器(成本高)和内存缓冲区

利用内存空间作为缓冲区也分几种技术 前两种需要会理解和计算

单缓冲
image

关于计算题我们统一几个东西
image

我们来分析工作计算

image
并不难理解 注意这里的时间求的都是单缓冲区处理每块数据的平均时间

image

image

双缓冲
image
image

它可以实现双向数据传输
image

image

循环缓冲
image

缓冲池
image

设备分配和回收
根据用户的I/O请求分配所需的设备
通过数据结构看设备分配

image
DCT(设备控制表):设备的各个属性
COCT(控制器控制表):每个设备控制器对应一张COCT 根据这个信息对控制器进行操作和管理
CHCT(通道控制表):每个通道对应一张CHCT 根据这个信息对通道进行操作和管理
SDT(系统设备表):整个系统只有一张SDT 记录连接到系统所有物理设备情况

分配步骤流程
image

设备分配算法:

  • FCFS算法
  • 最高优先级优先算法

关于设备分配的安全性指设备分配中防止发生进程死锁

设备驱动程序

和硬件直接相关 负责实现系统对设备的操作

上层和设备控制器之间的通信程序
向设备寄存器写/读命令
给每类设备配置一个设备驱动程序

其过程图
image

image
按照定义 给每类设备分配一个驱动程序 两类两个

中断处理程序

CPU响应中断后 根据中断类型号找到相应的中断处理程序进行处理 处理完后 返回到被中断的进程 这个前面已总结足够详细

硬件

这个没啥好说的 就是执行I/O操作的

我们总结下I/O操作

用键盘输入为例
image

综上 I/O软件层次结构的工作流程
image


三.磁盘和固态硬盘

对于这章同样可参考计组总结外存:https://www.cnblogs.com/gaodiyuanjin/p/19136306
这章重要的是调度算法计算题目

磁盘:表面涂有磁性物质的物理盘片
image

扇区是磁盘可寻址的最小单位
磁盘地址表示:柱面号·盘面号·扇区号

柱面号 盘面号 扇区号三者关系
image
后面计算需要分清

用几道题来强化

image

image

这下彻底搞清了:
柱面有好多个盘面(实际上是磁道)
然后一个盘面有好多个磁道
磁道又有好多个扇区

关于磁盘管理只要理解用磁盘安装OS的过程即可

  • 1.磁盘初始化
    新磁盘是一个空白盘 需要进行低级格式化(物理格式化)即将其分成扇区 以便磁盘控制器可以进行读/写操作
  • 2.分区
    第一步磁盘分区(C盘D盘这样的)
    第二步高级格式化(逻辑格式化)即将初始文件系统数据结构存储到磁盘上(包括分配和未分配空间 和空的根目录)
    为了方便文件系统介绍过 将其按簇来存储 可高效管理磁盘
  • 3.引导块
    计算机启动时运行一个初始化程序(自举程序)
    MBR(主引导记录) 引导ROM中的代码找引导代码 指导从哪个分区引导系统
  • 4.坏块
    磁盘移动部件容错能力错 容易导致一个或多个扇区损坏
    对坏块的处理实质是用某种机制使系统不去使用坏块
磁盘调度算法

核心:当多个请求同时达到 OS要决定先为哪个请求服务
就是磁盘调度算法要解决的问题

首先看一下磁盘的存取时间计算

image

磁盘调度主要目标是减少寻道时间
扇区数据处理时间对旋转延迟影响大

image

现在来分析几种调度算法:

  • FCFS算法
  • SSTF算法
  • SCAN算法
  • C-SCAN算法
  • LOOK算法
  • C-LOOK算法
FCFS算法(先来先服务)
根据先后顺序进行调度 最简单的调度算法
具有公平性:访问某个磁道不影响对其他磁道的访问请求
少量访问性能较好 大量访问接近于随即调度

假设 磁盘请求队列顺序 55 58 39 18 90 160 150 38 磁头初始位置是磁道100 磁道长200

image
磁头移动的磁道就是比如 100到55 移动了100-55=45
这个最简单按顺序来一个一个弄就行

上述后续都是这样分析

SSTF算法(最短寻道时间优先)
顾名思义跟之前优先级调度类似
每次选择调度的是离当前磁头最近的磁道 使每次寻道时间最短
但是并不能保证平均寻道时间最小 会产生饥饿现象(磁道在一个小范围内来回移动)

我们直接拿题来分析

image
image

SCAN算法(扫描)(电梯调度)
就一点核心:磁头需要移动到最外侧/最内侧才向另一面移动 类似电梯

依旧用题来分析

image
我们多给个条件 磁道长200
image
向增加的方向移动 需要干到最外侧(即使队列没有这个) 然后再向内 没有访问0 所以干不到最里面

C-SCAN算法(循环扫描)
就是会去处理那些最外/里的磁道

image
image
向减小的方向移动 就干到最内侧 然乎直接去最外侧 注意队列里无首尾 也会去访问

LOOK和C-LOOK调度
就是SCAN和C-SCAN算法的改进
即磁头只需要移动到最远端的一个请求即可 不用干到端点

那之前的SCAN为例子

image
C-LOOK也一样

通过让逻辑上相邻的块在物理上保持一定的间隔 可减少延迟时间
传输时间是磁盘本身性质所决定的
提高磁盘I/O速度方法:

  • 采用磁盘高速缓存
  • 调整磁盘请求顺序
  • 提前读
  • 延迟写
  • 优化物理块的分布
  • 虚拟盘
  • 采用磁盘阵列RAID
固态硬盘一种基于闪存技术的存储器(和U盘类似) 容量更大存取性能更好
擦除块慢 随机写慢 随机访问速度比机械硬盘快
关于磨损均衡:
- 动态磨损均衡:写数据时 优先选择擦除次数少的新闪存块
- 静态磨损均衡:更先进 SSD会监测自动进行数据分配 让老的闪存块承担以读为主的存储任务 让新的闪存块腾出空间 承担更多以写为主的存储任务

补充道题

image

ok了 OS大结局结束杀青 正好放假期 计网见!

posted on 2026-01-27 09:58  蒸饺  阅读(0)  评论(0)    收藏  举报