输入/输出管理

一.I/O复习
对比之前计组的总结:https://www.cnblogs.com/gaodiyuanjin/p/19259843
这里不过多阐述 简单复习
首先是I/O设备的分类
按信息交换:
- 块设备:按数据块为单位 传输速率高 可寻址
- 字符设备:传输速率低 不可寻址
按传输速率: - 低速设备
- 中速设备
- 高速设备
按使用特性: - 人机交互设备
- 存储设备
- 网络通信设备
按共享属性: - 独占设备:同一时刻只能由一个进程占用的设备 如打印机
- 共享设备:同一时间段内允许多个进程同时访问设备 如磁盘
- 虚拟设备:通过SPOOLing技术独占设备变成共享设备 一个物理设备变成多个逻辑设备
上述重新复习到并发和并行的区别 同一时刻和同一时间段

I/O接口
关于I/O接口可以理解成外设插的那个口
CPU和设备控制器接口的三线
I/O接口分类
I/O端口:设备控制器可被CPU直接访问的寄存器

I/O的控制方式 之前总结已足够详细 这里简单阐述
1.程序查询方式
CPU执行程序实现 CPU和I/O设备只能串行工作
2.中断驱动方式
允许I/O设备主动打断CPU的运行并请求服务 解放CPU
3.DMA方式
I/O设备和内存之间直接开辟数据交换通路(并行工作)
以上三种I/O方式都会导致用户进程进入阻塞态
二.I/O软件层次结构
接下来一大堆只需要搞懂一张图即可

核心:每层都利用下层提供的服务
(类比计网层次结构)
用户层软件
实现和用户交互接口 可直接调用用户层提供的库函数
需要我们搞懂SPOOLing
SPOOLing(假脱机技术)
目的:提高独占设备的利用率
核心:将独占设备变成共享设备 空间换时间(输入井和输出井)
缓和CPU高速性和I/O设备低速性之间的矛盾
先用一个例子来引入
如打印机独占设备 多个进程访问使用它 SPOOLing使它们都得到了设备
实际上是得到了虚拟设备(外存区)
接下来是一堆概念 更重要的SPOOLing系统组成 工作方式
输入设备输入数据暂存到内存输入缓冲区再存放到磁盘的输入井
输出数据从内存传送到输出井 等输出设备空闲 需要数据时 将磁盘的输出井数据经输出缓冲区送到输出设备
- 井管理程序:控制作业和磁盘之间的信息交换
- 输入井和输出井:收容I/O设备输入和输出的数据
- 输入缓冲区和输出缓冲区:暂存数据
- 输入进程和输出进程:模拟外围控制机
- 预输入程序和预输出程序
设备独立性软件(设备无关性)
实现用户程序和设备驱动器的统一接口 设备命名 保护 及设备分配和回收等
应用程序所用设备不局限于某个具体的物理设备(和实际使用设备无关)
关于这个我们只需要搞懂其功能 也是上面图上写的
映射
系统只能识别物理设备名 所有使用LUT来映射
记住就一点 在系统调用打开I/O设备的时候使用的设备标识是逻辑名
缓冲
OS中使用磁盘高速缓存技术来提高磁盘I/O速度
它是不同与cache 磁盘高速缓存逻辑上属于磁盘 物理上是驻留在内存中的盘块
内存中两种形式:
- 缓存区(内存开辟空间)
- 缓冲池(未利用内存空间)
接下来需要搞懂缓冲区
目的:缓和速度匹配问题 提高并行性
实现:使用硬件缓冲器(成本高)和内存缓冲区
利用内存空间作为缓冲区也分几种技术 前两种需要会理解和计算
单缓冲
关于计算题我们统一几个东西

我们来分析工作计算
并不难理解 注意这里的时间求的都是单缓冲区处理每块数据的平均时间
双缓冲
它可以实现双向数据传输

循环缓冲
缓冲池
设备分配和回收
根据用户的I/O请求分配所需的设备
通过数据结构看设备分配
DCT(设备控制表):设备的各个属性
COCT(控制器控制表):每个设备控制器对应一张COCT 根据这个信息对控制器进行操作和管理
CHCT(通道控制表):每个通道对应一张CHCT 根据这个信息对通道进行操作和管理
SDT(系统设备表):整个系统只有一张SDT 记录连接到系统所有物理设备情况
分配步骤流程
设备分配算法:
- FCFS算法
- 最高优先级优先算法
关于设备分配的安全性指设备分配中防止发生进程死锁
设备驱动程序
和硬件直接相关 负责实现系统对设备的操作
上层和设备控制器之间的通信程序
向设备寄存器写/读命令
给每类设备配置一个设备驱动程序
其过程图
按照定义 给每类设备分配一个驱动程序 两类两个
中断处理程序
CPU响应中断后 根据中断类型号找到相应的中断处理程序进行处理 处理完后 返回到被中断的进程 这个前面已总结足够详细
硬件
这个没啥好说的 就是执行I/O操作的
我们总结下I/O操作
用键盘输入为例
综上 I/O软件层次结构的工作流程

三.磁盘和固态硬盘
对于这章同样可参考计组总结外存:https://www.cnblogs.com/gaodiyuanjin/p/19136306
这章重要的是调度算法计算题目
磁盘:表面涂有磁性物质的物理盘片
扇区是磁盘可寻址的最小单位
磁盘地址表示:柱面号·盘面号·扇区号
柱面号 盘面号 扇区号三者关系
后面计算需要分清
用几道题来强化
这下彻底搞清了:
柱面有好多个盘面(实际上是磁道)
然后一个盘面有好多个磁道
磁道又有好多个扇区
关于磁盘管理只要理解用磁盘安装OS的过程即可
- 1.磁盘初始化
新磁盘是一个空白盘 需要进行低级格式化(物理格式化)即将其分成扇区 以便磁盘控制器可以进行读/写操作 - 2.分区
第一步磁盘分区(C盘D盘这样的)
第二步高级格式化(逻辑格式化)即将初始文件系统数据结构存储到磁盘上(包括分配和未分配空间 和空的根目录)
为了方便文件系统介绍过 将其按簇来存储 可高效管理磁盘 - 3.引导块
计算机启动时运行一个初始化程序(自举程序)
MBR(主引导记录) 引导ROM中的代码找引导代码 指导从哪个分区引导系统 - 4.坏块
磁盘移动部件容错能力错 容易导致一个或多个扇区损坏
对坏块的处理实质是用某种机制使系统不去使用坏块
磁盘调度算法
核心:当多个请求同时达到 OS要决定先为哪个请求服务
就是磁盘调度算法要解决的问题
首先看一下磁盘的存取时间计算
磁盘调度主要目标是减少寻道时间
扇区数据处理时间对旋转延迟影响大
现在来分析几种调度算法:
- FCFS算法
- SSTF算法
- SCAN算法
- C-SCAN算法
- LOOK算法
- C-LOOK算法
FCFS算法(先来先服务)
根据先后顺序进行调度 最简单的调度算法
具有公平性:访问某个磁道不影响对其他磁道的访问请求
少量访问性能较好 大量访问接近于随即调度
假设 磁盘请求队列顺序 55 58 39 18 90 160 150 38 磁头初始位置是磁道100 磁道长200
磁头移动的磁道就是比如 100到55 移动了100-55=45
这个最简单按顺序来一个一个弄就行
上述后续都是这样分析
SSTF算法(最短寻道时间优先)
顾名思义跟之前优先级调度类似
每次选择调度的是离当前磁头最近的磁道 使每次寻道时间最短
但是并不能保证平均寻道时间最小 会产生饥饿现象(磁道在一个小范围内来回移动)
我们直接拿题来分析
SCAN算法(扫描)(电梯调度)
就一点核心:磁头需要移动到最外侧/最内侧才向另一面移动 类似电梯
依旧用题来分析
我们多给个条件 磁道长200
向增加的方向移动 需要干到最外侧(即使队列没有这个) 然后再向内 没有访问0 所以干不到最里面
C-SCAN算法(循环扫描)
就是会去处理那些最外/里的磁道
向减小的方向移动 就干到最内侧 然乎直接去最外侧 注意队列里无首尾 也会去访问
LOOK和C-LOOK调度
就是SCAN和C-SCAN算法的改进
即磁头只需要移动到最远端的一个请求即可 不用干到端点
那之前的SCAN为例子
C-LOOK也一样
通过让逻辑上相邻的块在物理上保持一定的间隔 可减少延迟时间
传输时间是磁盘本身性质所决定的
提高磁盘I/O速度方法:
- 采用磁盘高速缓存
- 调整磁盘请求顺序
- 提前读
- 延迟写
- 优化物理块的分布
- 虚拟盘
- 采用磁盘阵列RAID
固态硬盘一种基于闪存技术的存储器(和U盘类似) 容量更大存取性能更好
擦除块慢 随机写慢 随机访问速度比机械硬盘快
关于磨损均衡:
- 动态磨损均衡:写数据时 优先选择擦除次数少的新闪存块
- 静态磨损均衡:更先进 SSD会监测自动进行数据分配 让老的闪存块承担以读为主的存储任务 让新的闪存块腾出空间 承担更多以写为主的存储任务
补充道题
ok了 OS大结局结束杀青 正好放假期 计网见!







































浙公网安备 33010602011771号