文章目录
I/O缓冲
通过缓存是提高效率的很重要的一种手段,缓冲是牺牲空间换取时间的一种思想
引入
一、没有缓冲时
假设从磁盘读入数据,每次读一块(512字节),没有缓冲时:
- 对磁盘单元发送一个I/O命令,并等待数据完成,进程可以忙等(低效),也可以被暂停等待中断
- 程序被阻塞,需要等待较慢的I/O
- 这种I/O操作干扰了操作系统的交换决策:进程不能全部换出,读入数据的区域需要驻留内存
二、缓冲引入
1. 缓冲
-
在输入请求发出前开始输入传送
-
在输出请求发出后一段时间后才开始执行输出传送
2. 两种I/O设备
- 面向块的设备:
- 信息保存在块中,块的大小固定
- 一次传送一个块
- 通过块号访问数据
- 代表设备:磁盘、USB卡
- 面向流的设备:
- 以字节流的方式输入/输出数据
- 没有块的结构
- 代表设备:终端、打印机、通信端口、鼠标及其他大多数非辅存设备
三、无缓冲
无缓冲时,操作系统直接在需要时访问设备
单缓冲
操作系统在内存中给I/O请求分配一个缓冲区
一、面向块设备的单缓冲
-
采用预读/预先输入
-
期望输入的数据块最终会被使用
-
输入的数据被放到系统缓冲区中
-
传送完成时,进程将数据块移到用户空间,并立即请求下一块
也就是:上一个Move之后,马上可以开始传输下一个数据到缓存了
但是!move的话,例如M2要开始,得先看T2和C1运行结束了没有
-
-
相对于没有系统缓冲的情况,预读方式可以提高数据获取速度
- 可以在读取下一块数据时,处理已经读入的数据
-
不足
- 使操作系统的逻辑变得更复杂
- 操作系统需要记录给每个进程分配的系统缓冲情况区
- 交换逻辑也受到影响
- 使操作系统的逻辑变得更复杂
二、面向流设备的单缓冲
- 每次传送一行
- 适用于滚动模式的终端(哑终端)
- 用户每次输入一行,以回车键结束输出时,也是每次输出一行,如行式打印机
- 每次传送一个字节
- 适用于表格式的终端
- 用户每次击键很重要
- 其他外围设备如传感器、控制器等
双缓冲
-
使用两个缓冲
-
进程向一个缓冲区中传送(或取出)数据时,操作系统正在清空(或填充)另一个缓冲区
-
也称为缓冲交换
理解:
单缓冲,因为只有一个缓冲区,所以T入缓冲后还有把缓冲区里的数据Move走
但是双缓冲,可以不用管
循环缓冲
-
使用两个或多个缓冲区 构成循环缓冲
-
当希望I/O操作跟上进程执行速度时,使用循环缓冲
缓冲的作用
- 缓解I/O设备速度与CPU速度不匹配的矛盾
- 当进程的需求大于I/O设备的服务能力时,进程推进与I/O设备的操作将不能并驾齐驱
- 进程每处理完一块数据后得停下等待
- 在多道程序环境中,当存在多种I/O活动和多种进程活动时,缓冲可以提高操作系统效率,提高单个进程的性能
Spooling技术(磁盘中的缓冲)
一、概述
SPOOLing技术(磁盘中的缓冲)
- 在磁盘中建立I/O缓冲区,缓和CPU的高速性与I/O设备低速性间的矛盾
- 在联机(即CPU控制)情况下实现的同时外围操作称为SPOOLing (Simultaneous Peripheral Operating On Line),或称为假脱机操作
- “在联机(即CPU控制)情况下实现的同时外围操作”:即CPU可以继续处理其他任务,同时进行I/O操作
- 通过SPOOLing技术便可将一台独占物理I/O设备虚拟为多台逻辑I/O设备,从而允许多个用户共享一台物理I/O设备
二、组成
因为有输入输出两个进程,这说明该技术必须要有多道程序技术的支持
三、应用
以打印机为例,说明SPOOLing系统是如何实现虚拟设备的
-
打印机:
-
独占设备
- 只允许各个进程串行使用的设备
而共享设备:允许多个进程“同时”使用的设备。
这里注意:宏观上是同时使用,微观上可能是交替使用
-
利用SPOOLing技术,将其改造为共享设备,从而提高设备的利用率
-
四、特点
- 提高I/O速度
- 对低速I/O设备进行的操作,演变为对输入/输出井中数据的存取
- 将独占设备改造为共享设备
- 实际上并没为任何进程分配设备,而只是在输入井或输出井中为进程分配一个存储区和建立一张I/O请求表
- 实现了虚拟设备功能
- 系统实现了将独占设备变换为若干台对应的逻辑设备的功能
- 虚拟设备:通过虚拟技术将一台独占物理设备变换为若干台逻辑设备,供若干个用户(进程)同时使用