操作系统(15)-----I/O设备管理(万字总结~)(4)

简介: 操作系统(15)-----I/O设备管理(万字总结~)

操作系统(15)-----I/O设备管理(万字总结~)(3):https://developer.aliyun.com/article/1511394

总结:采用单缓冲策略,处理一块数据平均耗时 Max(C, T)+M

 

双缓冲:

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


双缓冲题目中,假设初始状态为:工作区空,其中一个缓冲区满,另一个缓冲区空


① 假设T>C+M


在0时刻,可以将缓冲区的数据传送到工作区中,接下来CPU就可以处理工作区中的数据

与此同时块设备可以向缓冲区2中输入数据,由于T>C+M,系统不能把缓冲区2的数据传送到工作区

中,只有等T时间点过后,缓冲区2才能被冲满

经过T时间后,起始就回到了假设的初始状态,所以处理一块数据的平均用时=T

假设T

起始时,缓冲区2为空,设备可以向缓冲区2冲入数据,同时缓冲区1是冲满数据的,所以可以将缓冲区1的数据输入到工作区中,工作区满后,CPU就可以处理数据了



CPU处理完数据后,缓冲区2其实已经冲满了数据,接下来可以紧接着把缓冲区2的数据也传送到工作区中,接着CPU继续处理工作区中的数据


注:M(1)表示“将缓冲区1中的数据传送到工作区”;M(2)表示“将缓冲区2中的数据传送到工作区


在缓冲区2中的数据传送到工作区的同时,设备可以将数据传送到缓冲区1中



假设2T<2M+C,则I/O设备将缓冲区1冲满时,缓冲区2的数据尚未取空,因此I/O设备暂时不能冲入数据,只有缓冲区2被取空,设备才能往缓冲区2写入数据


所以可以观察到,若采用双缓冲区,并且T


但是我们可以发现,处理完一块数据都要耗时C+M,每处理一个数据块平均耗时C+M


总之,T

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

使用单/双缓冲在通信时的区别:

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

如图所示,两台设备配置单缓冲区,A机要发送的数据要先放入A机缓冲区中,等缓冲区满时将数据发出

B机的缓冲区用于接受数据,B机的将缓冲区中的数据全部取走后,才能向A机发送数据

所以,若两个相互通信的机器只设置单缓冲区,在任一时刻只能实现数据的单向传输。


为了实现双向传输,可以给两台机器配置双缓冲区:


一个缓冲区用来暂存即将发送的数据,一个缓冲区用来暂存接收的数据



所以,若两个相互通信的机器设置双缓冲区,则同一时刻可以实现双向的数据传输。

循环缓冲:

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

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


系统会用两个指针对缓冲区进行管理:


1.in 指针,指向下一个可以冲入数据的空缓冲区,若in指针指向的缓冲区被冲满,那么in会指向下一个空的缓冲区


2.out 指针,指向下一个可以取出数据的满缓冲区,若out指针指向的满缓冲区被取走数据,那么out指针会指向下一个满缓冲区

缓冲池:

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

另外,根据一个缓冲区在实际运算中扮演的功能不同,又设置了四种工作缓冲区:用于收容输入数据的工作缓冲区(hin)、用于提取输入数据的工作缓冲区(sin)、用于收容输出数据的工作缓冲区(hout)、用于提取输出数据的工作缓冲区(sout)

①当输入进程请求输入数据时,系统从空缓冲队列中取出一块作为收容输入数据的工作缓冲区

(hin)。当这块缓冲区被冲满数据后,将被挂到输入队列队尾


②当计算进程想要取得一块输入数据时,操作系统会从输入队列中取得一块冲满输入数据的缓冲区作为"提取输入数据的工作缓冲区(sin)"。缓冲区读空后挂到空缓冲区队列


③当计算进程想要将准备好的数据冲入缓冲区时,操作系统会从空缓冲队列中取出一块作为“收容输出数据的工作缓冲区(hout)"。数据冲满后将缓冲区挂到输出队列队尾


④输出进程请求输出数据,系统会从输出队列中取得一块冲满输出数据的缓冲区作为"提取输出数据的工作缓冲区(sout)"。缓冲区读空后挂到空缓冲区队列

虽然用户层软件不属于I/O核心子系统,但也做补充:

2.用户层软件中实现
(1)假脱机技术

先来讲讲脱机技术:

在手工操作阶段,主机直接从I/O设备获得数据,由于设备速度慢,主机速度很快。人机速度矛盾明显,主机要浪费很多时间来等待设备。

所以在批处理阶段引入了脱机输入/输出技术(用磁带完成):


引入脱机技术后,程序员可以先通过纸带机将数据输入到磁带中,而磁带的速度比纸带机快很多,而这个输入过程,是由外围控制机实现的。在外围控制机的控制下,慢速输入设备的数据先被输入到更快速的磁带上。之后主机可以从快速的磁带上读入数据,从而缓解了速度矛盾。

数据输出时同理,主机会把数据输出到磁带中,再由外围控制机,将数据输出打印到慢速的磁带机上。

所谓"脱机"就是脱离主机控制进行输入输出操作,在批处理技术中,是由外围控制机来控制输入输出的。


引入脱机技术后,缓解了CPU与慢速I/O设备的速度矛盾。另一方面,即使CPU在忙碌,也可以提前将数据输入到磁带;即使慢速的输出设备正在忙碌,也可以提前将数据输出到磁带。


现在讲假脱机技术:


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

系统会在磁盘上开辟出两个存储区域----"输入井"和"输出井"

系统会在磁盘上开辟出两个存储区域----"输入井"和"输出井"

“输入井”模拟脱机输入时的磁带,用于收容I/O设备输入的数据

"输出井"模拟脱机输出时的磁带,用于收容用户进程输出的数据

外围控制机由一个输入进程与一个输出进程来实现:

输入进程:“输入进程”模拟脱机输入时的外围控制机

输出进程:“输出进程”模拟脱机输出时的外围控制机

当有数据需要从设备输入计算机时,“输入进程”实际是用软件模拟外围控制机,"输入进程"会把要输入的数据放到磁盘的"输入井"中。而"输出进程"就是从磁盘的"输出井"中取出数据到,输出到设备上。

内存中也会开辟"输入缓冲区"和"输出缓冲区":

输入缓冲区:在输入进程的控制下,“输入缓冲区”用于暂存从输入设备输入的数据,之后再转存到输入井中。

输出缓冲区:在输出进程的控制下,“输出缓冲区”用于暂存从输出井送来的数据,之后再传送到输出设备上。

共享打印机的原理:独占式打印机--->共享式打印机


独占式设备----只允许各个进程串行使用的设备。一段时间内只能满足一个进程的请求。


共享设备----允许多个进程“同时”使用的设备(宏观上同时使用,微观上可能是交替使用)。可以同时满足多个进程的使用请求。

打印机是一种"独占式设备",若进程1正在使用打印机,则进程2 请求使用打印机时必然阻塞等待。可以用SPOOLing技术改造成"共享设备"。


当多个用户进程提出输出打印的请求时,系统会答应它们的请求,但是并不是真正把打印机分配给他们,而是由假脱机管理进程为每个进程做两件事:


(1)在磁盘输出井中为进程申请一个空闲缓冲区(也就是说,这个缓冲区是在磁盘上的),并将要打印的数据送入其中。

(2)为用户进程申请一张空白的打印请求表,并将用户的打印请求填入表中(其实就是用来说明用户的打印数据存放位置等信息的,通俗来说就是打印任务的说明书),再将该表挂到假脱机文件队列上。

当打印机空闲时,输出进程会从文件队列的队头取出一张打印请求表,并根据表中的要求将要打印的数据从输出井传送到输出缓冲区,再输出到打印机进行打印。用这种方式可依次处理完全部的打印任务。

在采用SPOOLing技术后,虽然系统中只有一个台打印机,但每个进程提出打印请求时,系统都会为在输出井中为其分配一个存储区(相当于分配了一个逻辑设备),使每个用户进程都觉得自己在独占一台打印机,从而实现对打印机的共享。


SPOOLing 技术可以把一台物理设备虚拟成逻辑上的多台设备,可将独占式设备改造成共

享设备。



目录
相关文章
|
7月前
|
存储 Unix 人机交互
操作系统(15)-----I/O设备管理(万字总结~)(1)
操作系统(15)-----I/O设备管理(万字总结~)
107 2
|
7月前
|
存储 网络协议 程序员
操作系统(15)-----I/O设备管理(万字总结~)(2)
操作系统(15)-----I/O设备管理(万字总结~)(2)
100 1
|
7月前
|
存储 缓存 算法
操作系统(15)-----I/O设备管理(万字总结~)(3)
操作系统(15)-----I/O设备管理(万字总结~)(3)
134 0
【操作系统】—I/O设备的基本概念和分类
【操作系统】—I/O设备的基本概念和分类
|
程序员 虚拟化
操作系统如何进行设备管理
操作系统如何进行设备管理
328 1
操作系统如何进行设备管理
|
存储 网络协议 Linux
计算机操作系统学习笔记(12)——I/O 多路复⽤:select/poll/epoll
计算机操作系统学习笔记(12)——I/O 多路复⽤:select/poll/epoll
111 0
操作系统--I/O管理知识整理(供自己复习所用
I/O一直比较薄弱,都分不清在干啥,又听了一遍课,默写一下脑子里留下的东西,原来不是分不清,是听完课,脑子里就留下来30%…… I/O子系统层次结构
120 0
|
消息中间件 存储 分布式计算
大数据开发基础的操作系统的I/O原理
操作系统的I/O原理是大数据开发中必须掌握的一项基础知识。本篇文章将为大家介绍I/O原理的基本概念、工作原理以及应用场景。
103 0
|
1月前
|
安全 Linux 数据安全/隐私保护
Vanilla OS:下一代安全 Linux 发行版
【10月更文挑战第30天】
59 0
Vanilla OS:下一代安全 Linux 发行版
|
1月前
|
NoSQL Linux PHP
如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤
本文介绍了如何在不同操作系统上安装 Redis 服务器,包括 Linux 和 Windows 的具体步骤。接着,对比了两种常用的 PHP Redis 客户端扩展:PhpRedis 和 Predis,详细说明了它们的安装方法及优缺点。最后,提供了使用 PhpRedis 和 Predis 在 PHP 中连接 Redis 服务器及进行字符串、列表、集合和哈希等数据类型的基本操作示例。
64 4