操作系统(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 技术可以把一台物理设备虚拟成逻辑上的多台设备,可将独占式设备改造成共

享设备。



目录
相关文章
|
27天前
|
存储 网络协议 程序员
操作系统(15)-----I/O设备管理(万字总结~)(2)
操作系统(15)-----I/O设备管理(万字总结~)(2)
33 1
|
27天前
|
存储 Unix 人机交互
操作系统(15)-----I/O设备管理(万字总结~)(1)
操作系统(15)-----I/O设备管理(万字总结~)
37 2
|
27天前
|
存储 缓存 算法
操作系统(15)-----I/O设备管理(万字总结~)(3)
操作系统(15)-----I/O设备管理(万字总结~)(3)
20 0
|
6月前
【操作系统】—I/O设备的基本概念和分类
【操作系统】—I/O设备的基本概念和分类
|
10月前
|
存储 网络协议 Linux
计算机操作系统学习笔记(12)——I/O 多路复⽤:select/poll/epoll
计算机操作系统学习笔记(12)——I/O 多路复⽤:select/poll/epoll
85 0
|
11月前
|
程序员 虚拟化
操作系统如何进行设备管理
操作系统如何进行设备管理
211 1
操作系统如何进行设备管理
操作系统--I/O管理知识整理(供自己复习所用
I/O一直比较薄弱,都分不清在干啥,又听了一遍课,默写一下脑子里留下的东西,原来不是分不清,是听完课,脑子里就留下来30%…… I/O子系统层次结构
|
消息中间件 存储 分布式计算
大数据开发基础的操作系统的I/O原理
操作系统的I/O原理是大数据开发中必须掌握的一项基础知识。本篇文章将为大家介绍I/O原理的基本概念、工作原理以及应用场景。
72 0
|
8天前
|
存储 Linux 数据处理
探索Linux操作系统的内核与文件系统
本文深入探讨了Linux操作系统的核心组件,包括其独特的内核结构和灵活的文件系统。文章首先概述了Linux内核的主要功能和架构,接着详细分析了文件系统的工作原理以及它如何支持数据存储和检索。通过比较不同的文件系统类型,本文旨在为读者提供一个关于如何根据特定需求选择合适文件系统的参考框架。
|
13天前
|
安全 算法 网络协议
探索Linux操作系统的内核管理
【5月更文挑战第31天】本文将深入探讨Linux操作系统的内核管理机制,包括其设计原则、主要组件以及它们如何协同工作以提供高效的系统性能。通过分析Linux内核的关键特性和功能,我们将揭示这一开源操作系统如何在各种计算环境中保持其稳定性和灵活性。