5.I/O设备的概念和分类
什么是I/O设备:
- I/O:就是输入输出(input/output)
- I/O设备就是可以将数据输入到计算机,或者可以接受计算机输出数据的外部设备,数据计算机中的硬件部件
按使用特性分类:
①人机交互类设备
②存储设备
③网络通信设备
按传输速率分类:
①低速设备
②中速设备
③高速设备
按信息交换的单位分类:
块设备–传输熟虑较高,可寻址,即可对它随机的读/写任一块
字符设备–传输速率较慢,不可寻址,在输入/输出的时候常用中断安驱动方式
小结:
5.2I/O设备
I/O设备由机械部分与电子部分组成
机械部分:
主要用来执行具体的I/O操作
电子部分(I/O控制器,设备控制器):
电子部分通常是一块插入主板扩充槽的印刷电路板
-
CPU无法直接控制I/O设备的机械部件,因此I/O设备还要有一个电子部件作为CPU和I/O设备机械部件之间的“中介”,用于实现CPU对设备的控制
-
这个电子部件就是I/O控制器,又称设备控制器,CPU可控制I/O控制器,又由I/O控制器来控制设备的部件
功能:
①接受和识别CPU发出的命令
- 如CPU发来的read/write命令,I/O控制器中会有相应的控制寄存器,来存放命令和参数
②向CPU报告设备的状态:
- I/O控制器中会有相应的状态寄存器,用于记录I/O设备是的当前状态,如:1表示空闲,0表示忙碌
③数据交换
- I/O控制器中会设置相应的数据寄存器,输出时,数据寄存器用于暂存CPU发来的数据,之后再由控制器传送到设备。输入时,数据寄存器用于暂存设备发来的数据,之后CPU从数据据寄存器中拿走数据
④地址识别:
- 类似于内存的地址,为了区分设备控制器中的各个寄存器,也需要给各个寄存器设置一个特定的“地址”,I/O控制器通过CPU提供的地址,来判断CPU要读/写的时哪一个寄存器
I/O控制器的组成:
①CPU与控制器的接口
②I/O逻辑
③控制器与设备的接口
需要注意的小细节:
- 一个I/O控制器可能会对应多个设备
- 数据寄存器,控制寄存器,状态寄存器有多个(如:每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要由对应的地址,才能方便CPU操作。有的计算器会让这些寄存器占用内存地址的一部分,称为内存映像I/O;另一些则采用I/O专用地址,即寄存器独立编址
内存映像与寄存器独立编址:
小结:
5.3I/O控制方式
I/O控制方式,分为程序直接控制方式,中断驱动方式,DMA方式以及通道控制方式。
1)程序直接控制方式
学习这程序直接控制方式需要注意的点:
①完成一次读/写操作得流程
②CPU干预的频率:
很频繁,I/O操作开始之前,完成之后需要CPU介入·,并在等待I/O完成的过程中CPU需要不断地轮询检查
③数据传送的单元:
每次读/写单位为一个字
④数据的流向:
读数据(数据输入):I/O设备>CPU>内存
写操作(数据输出):内存>CPU>I/O设备
注:每次读写都会需要CPU地帮助
⑤主要优点和缺点:
优点:实现简单。在读/写指令之后,加上实现循环检查地一系列指令即可(因此称为“程序直接控制方式”)
缺点:CPU和I/O设备只能串行地工作,CPU需要一直轮询检查,长期处于忙等地状态,CPU利用率低
2)中断驱动方式:
引入中断机制。由于I/O设备速度很慢,因此在CPU发出读/写命令后,可将等待I/O的进程阻塞,先切换到别的进程执行。当I/O完成后,控制器会向CPU发出一个中断信号,CPU检测到中断信号后,会保存当前进程的运行环境信息,转去执行中断处理程序处理该终端。处理中断的进程中,CPU从I/O控制器读一个字的数据传送到CPU处理器。再写入主存。接着,CPU恢复等待I/O的进程(或其他进程)的运行环境,然后继续执行
注:
- CPU会在每个指令周期的末尾检查中断
- 中断处理过程中需要保存,恢复进程的运行环境,这个过程是需要移动时间开销的,如果中断发生的频率太高,也会降低系统性能
学习这中断驱动方式需要注意的点:
①完成一次读/写操作得流程:
②CPU干预的频率:
- 每次I/O操作开始之前,完成之后需要CPU介入
- 等待I/O完成的过程中CPU可以切换到别的进程执行
③数据传送的单元:
每次读/写一个字
④数据的流向:
-
读数据(数据输入):I/O设备>CPU>内存
-
写操作(数据输出):内存>CPU>I/O设备
⑤主要优点和缺点:
优点:
与程序直接控制方式相比,在中断驱动方式中,I/O控制器会通过中断信号主动的报告I/O已完成,CPU不再需要不停的轮询。CPU和I/O设备可并行工作,CPU利用率得到明显得提升
缺点:
每个字在I/O设备与内存之间的传输,都需要经过CPU。而频繁的中断处理会消耗较多的CPU时间
3)DMA方式:
与中断驱动方式相比,DMA方式(直接存储存取,主要用于块设备I/O控制)有这样即可改进
- 数据的传送单位时块,而不是一个字,一个字的传送
- 数据的流向是从设备直接放入内存,或者·从内存直接到设备,不在需要CPU作为中转的地方
- 仅在传送一个或多个数据块的开始和结束时,才需要CPU干预
DMA控制器的构成:
不是从磁盘中一次性读到内存中的,而是一个字一个字的读到DR中,然后再一次性读到内存中
学习这DMA需要注意的点
①完成一次读/写操作得流程:
②COU干预的频率:
仅在其传送一个多个数据的开始和结束的时候,才需要干预
③数据传送的单元:
每次读/写一个或多个快(注意:每次读/写的只能是连续的块,且这些读入内存后在内存中的也是连续的)
④数据的流向(不在需要CPU):
- 读数据(数据输入):I/O设备>内存
- 写操作(数据输出):内存>I/O设备
⑤主要优点和缺点:
优点:
数据传输以块为单位,CPU介入频率进一步降低,数据的传输不再需要先经过CPU再写入内存,数据传输效率进一步增加,CPU和I/O设备的并行性增加
缺点:
CPU每发出一条I/O指令,只能读/写一个或多个连续的数据块(如果时离散存放的数据块,就需要发出多条指令)
4)通道控制方式:
一种硬件,可以理解为是“弱鸡版CPU”,通道可以识别为一系列的通道指令
- 与CPU相比,通道可以执行的指令很单一,并且通道程序是放在主机内存中的,也就是说通道与CPU共享内存
学习通道控制方式需要注意的点
①完成一次读/写操作得流程:
②CPU干预的频率:
极低,通道会根据CPU的指示执行相应的通道程序,只有完成一组数据块的读/写后才需要发出中断信息,请求CPU干预
③数据传送的单元:
每次读/写一组数据块
④数据的流向:
读数据(数据输入):I/O设备>内存
写操作(数据输出):内存>I/O设备
⑤主要优点和缺点:
优点:
CPU,通道,I/O设备可并行工作,资源利用率高
缺点:
实现复杂,需要专门的通道硬件支持
小结:
5.4I/O软件的层次结构
1)设备独立性软件:
又称设备无关性软件,与设备的硬件特性无关的功能几乎都在这一层实现
主要实现的功能
①向上层提供的统一的调用接口(read/write系统调用):
原理类似文件保护,设备被看作是一种文件,不同用户对各个文件的访问权限是不一样的,同理,对设备的访问权限也是不一样的
②差错保护:
设备独立性软件需要对一些设备的错误进行相应的处理
③设备的分配与回收:
④数据缓冲区管理:
可以通过缓冲技术屏蔽设备之间数据交换单元大小和传输速度的差异
⑤建立逻辑设备名到物理设备名的映射关系,根据设备类型选择调用相应的驱动程序:
- 用户或用户软件发出的I/O操作相关系统调用的系统调用收,需要指明此次要操作的I/O设备的逻辑名(去学校复印店打印的时候,需要选择打印机1,打印机2,这些都是逻辑名)
- 设备独立性软件需要通过“逻辑设备表”来确定逻辑设备名与物理设备名的映射,并找到该设备对应的设备驱动程序
- 操作系统可以采用两种方式管理逻辑设备表
a:第一种方式,整个系统只设置一张LUT,这就意味着所有用户不能使用相同的逻辑设备名,因此方法只适用于单用户操作系统
b:第二种方式,为每个用户设置一份LUT,各个用户使用的逻辑设备名可以重复,适用于多用户操作系统。系统会在用户登陆的时候为其建立一个用户管理进程,而LUT就存放在用户管理进程的PCB中
2)设备驱动程序:
- 主要负责对硬件设备的具体控制,将上层发出的一系列的命令(如read,write)转化为特定的设备能听得懂的一系列操作,包括设备设备寄存器,检查设备状态等
- 不同的I/O设备有不同的硬件特性,具体细节只有设备的厂家才知道,因此厂家需要根据设备的硬件特性设计并蹄冻相应的驱动程序
- 注:驱动程序是以一个独立的进程存在的
3)中断处理程序:
当I/O任务完成的时候,I/O控制器会发送一个中断信号,系统会会根据中断信号类型会找到相应的中断处理程序并执行。中断处理程序的处理流程如下
小结:
5.5I/O核心子系统
- I/O调度:用某种算法确定一个好的顺序来处理各个I/O请求
可以采用先来先服务,优先级算法,短作业优先等算法来确定I/O执行的顺序 - 设备保护:在UNIX系统中,设备会被看做是一种特殊的文件。设备也有相应FCB。当用户请求访问某个设备的时候,系统会根据FCB中记录的信息来判断用户是否有相应的访问权限。依此实现“设备保护”功能
5.6假脱机技术
1)什么是假脱机技术,脱机技术可以解决什么问题
脱机:脱离主机的控制进行的输入/输出操作
- 引入脱机技术后,缓解了CPU与慢速I/O设备之间的速度矛盾,另一方面,即使CPU再忙碌。也可以提前将数据输入到磁带,即使慢速的输出设备正在忙碌,也可提前将数据输出到磁带。
假脱机技术,又称SPOOLing技术,是用软件的方式模拟脱机技术。
2)假脱机技术的实现原理:
输入井和输出井:
输入进程和输出进程:
x
输入缓冲区与输出缓冲区:
3)共享打印机的原理分析:
打印机按照是否具有共享功能,分为独占式设备以及共享式设备
独占式设备:
- 只允许各个进程穿行使用的设备,一段时间内只能满足一个进程的需求
- 打印机是种独占式设备,但是可以用SPPOLing技术改造成共享设备
- 当多个用户进程提出输出打印的请求的时候,系统会答应它的请求,但是并不是真正的把打印机分配给他们,而是由假脱机管理进程为每个进程做两件事
a:在磁盘输出井中为进程申请了一个空闲缓冲区(也就是说,这个缓冲区是在磁盘上的),并将要打印的数据送入其中
b:为用户进程申请一个空白的打印申请表,并将用户的打印请求填入表中(其实就是用来说明用户的打印数据存放位置等信息),再将该表挂到假脱机文件队列上
c:当打印机空闲的时候,输出进程会从文件队列的队头取出一张打印请求表,并根据表中的要求将要打印的数据从输出井传送到缓冲区。在输出到打印机进行打印。用这种方式可依此处理完全的打印任务
d:虽然系统中只有一台打印机,但每个进程提出打印请求时,系统都会为在输出井中为其分配一个存储区(相当于分配了一个逻辑设备)。使每个用户几次呢很难过都觉得自己在独占以太打印机,从而实现对打印机的共享
e:SPOOLing技术可以把一台物理设备虚拟成逻辑上的多台设备。可将独占式设备改造成共享式设备
共享设备:
允许多个进程同时使用的设备(宏观上同时使用,微观上可能是交替使用),可以同时满足多个进程的使用请求
小结:
5.7设备的分配和回收
1)设备分配时应该考虑的因素:
①设备的固有属性:
-
独占属性:一个时间段内只能一个进程进行使用的设备
-
共享设备:一个时间段内可以多个进程进行使用的设备
-
虚拟设备:采用SPOOLing技术将独占设备改造成虚拟的共享设备,可同时分配给多个进程使用(如财通SPOOLing技术实现的共享打印机)
②设备分配算法:
- 先来先服务
- 短作业优先算法
- 优先级高者优先
③设备分配中的安全性(有两种方式):
第一种方式:安全分配方式–为进程分配一个设备后就将进程阻塞,本次I/O完成后才将进程唤醒。(考虑进程请求打印机打印输出的例子)
安全分配方式在一段时间内每个进程只能使用一个设备
优点:
- 破坏了请求和保持条件,不会死锁
- 对于一个进程来说,CPU和I/O设备只能串行的执行
第二种方式:不安全分配方式–进程发出I/O请求后,系统为其分配I/O设备,进程还可以继续执行。之后还可以发出新的I/O请求,只有某个请求得不到满足时才将进程阻塞
一个进程可以同时使用多个设备
优点:
进程的计算任务和I/O任务可以进行并行处理,使进程迅速推进
缺点:
有可能发生死锁(死锁避免,死锁的检测和解除)
2)静态分配与动态分配:
- 静态分配:进程运行前为其分配全部所需资源,运行结束后归还资源
–破坏了请求和保持的条件,不会发生死锁 - 动态分配:进程运行的过程中动态申请资源
3)设备分配管理中的数据结构:
一个通道可控制多个设备控制器,每个设备控制器可控制多个设备
设备控制表(DCT):系统会为每个设备配置一个DCT,用于记录设备情况
控制器控制表(COCT):每个设备控制器都会对应一个COCT。操作系统根据coct的信息对控制器进行操作和管理
通道控制表(CHCT):每个通道都会对应一个CHCT。操作系统会根据CHCT的信息对通道进行操作和管理
系统设备表(SDT):记录了系统中全部设备的情况,每个设备对应一个表目
4)设备分配的步骤
①根据进程请求的物理设备名查找SDT(注:物理设备名是基础进程请求分配设备时提供的参数)
②根据SDT找到DCT,若设备忙碌则将进程PCB挂到设备等待队列中。不忙碌的时候将设备分配给进程
③根据DCT找到COCT,如果控制器忙碌就将进程PCB挂到控制器等待队列中。不忙碌就将控制器分配给进程
④根据COCT找到CHCT,若通道忙碌就将进程PCB挂到通道等待队列中,不忙碌就将通道分配给进程
只要将设备,控制器,通道三者都分配成功的时候,这次设备分配才成功,之后便可启动I/O设备进行数据传输
④设备分配步骤的改进方法:
改进方法:
建立逻辑设备名与物理设备名之间的映射机制,用户编程的时候只需要提供逻辑设备名
①根据进程请求的逻辑设备名查找SDT(注:用户编程时提供的逻辑设备名其实就是设备类型)
②查找SDT,找到用户进程指定类型,并且空闲的设备。将其分配给该进程。操作系统在逻辑设备表中(LUT)中新增一个表项
③根据DCT找到COCT,如果控制器忙碌就将进程PCB挂到控制器等待队列中。不忙碌就将控制器分配给进程
④根据COCT找到CHCT,若通道忙碌就将基础讷航PCB挂到通道等待队列中,不忙碌就将通道分配给进程
逻辑设备表的设置问题:
- 整个系统只有一张LUT:各用户所用的逻辑设备名不允许重复,适用于单用户操作系统
- 每个用户一张LUT:不同用户的逻辑设备表名可重复,适用于多用户操作系统
小结:
5.8缓冲区管理
1)什么是缓冲区?有什么用:
概念:
- 缓冲区是一个 存储区域,可以由专门的硬件寄存器组成,也可利用内存作为缓存区。
- 使用硬件作为缓冲区的成本较高,容量也较小。,一般仅用于在对速度要求很高的场合(如存储器管理中所用的联想寄存器,由于对页表的访问频率较高,因此使用速度很快的联想寄存器来存放表项的副本)
- 一般情况下,更多的是利用内存作为缓冲区,“设备独立性软件"的缓冲区管理就是要组织管理好这些缓冲区
作用:
- 缓和CPU和I/O设备之间速度不匹配的矛盾
- 减少对CPU的中断频率,放宽对CPU中断相应时间的限制
- 解决数据粒度不匹配的问题
输出程序每次都可以生成一块数据,但I/O设备每次只能输出一个字符 - 提高CPU与I/O设备之间的并行性
2)单缓冲:
-
假设某用户进程请求某种块设备读入若干块的数据。若采用单缓冲的策略,操作系统会在主存中为其分配一个缓冲区(若题目中没有特别说明,一个缓冲区的大小就是一个·块)
-
当缓冲区数据非空时,不能往缓冲区冲入数据。只能冲缓区把数据传出。当缓冲区为空时,可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出
3)双缓冲:
假设某用户请求某种块设备读入若干块数据。若采用双缓冲的策略,操作系统会在主存中为其分配两个缓冲区(若题目中没有特别说明,一个缓冲区的大小就是一个块)
结论:采用双缓冲策略处理一个数据块的平均耗时为Max(T,C+M)
3)单,双缓冲区的区别:
4)循环缓冲:
将多个大小相等的缓冲区链接成一个循环队列
5)缓冲池:
缓冲池由系统中共用的缓冲区组成的,这些缓冲区按使用状况可分为:空缓冲队列,装满输入数据的缓冲队列(输入队列),装满输出数据的缓冲队列(输出队列)
①输入进程请求输入数据:
从空缓缓冲队列中取出一块作为收容输入数据的工作缓冲区(hin),充满数据后将缓冲区挂到输入队列的队尾
②计算进程想要取得一块输入数据:
从输入队列中取得一块充满输入数据的缓冲区作为“提取输入数据的工作缓冲区”,缓冲区读空后挂到空缓冲区队列
③计算进程想要将准备好的数据冲入缓冲区:
从空缓冲队列中取出一块“收容输出数据的工作缓冲区”。数据充满后将缓冲区挂到输出队列队尾
④输出进程请求输出数据:
从输出队列中取得一块充满输出数据的缓冲区作为“提取输出数据的工作缓冲区”。缓冲区读空后挂到空缓冲区中
小结:
版权声明:本文为CSDN博主「留白-mise」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44353042/article/details/122466731
5.I/O设备的概念和分类
什么是I/O设备:
- I/O:就是输入输出(input/output)
- I/O设备就是可以将数据输入到计算机,或者可以接受计算机输出数据的外部设备,数据计算机中的硬件部件
按使用特性分类:
①人机交互类设备
②存储设备
③网络通信设备
按传输速率分类:
①低速设备
②中速设备
③高速设备
按信息交换的单位分类:
块设备–传输熟虑较高,可寻址,即可对它随机的读/写任一块
字符设备–传输速率较慢,不可寻址,在输入/输出的时候常用中断安驱动方式
小结:
5.2I/O设备
I/O设备由机械部分与电子部分组成
机械部分:
主要用来执行具体的I/O操作
电子部分(I/O控制器,设备控制器):
电子部分通常是一块插入主板扩充槽的印刷电路板
-
CPU无法直接控制I/O设备的机械部件,因此I/O设备还要有一个电子部件作为CPU和I/O设备机械部件之间的“中介”,用于实现CPU对设备的控制
-
这个电子部件就是I/O控制器,又称设备控制器,CPU可控制I/O控制器,又由I/O控制器来控制设备的部件
功能:
①接受和识别CPU发出的命令
- 如CPU发来的read/write命令,I/O控制器中会有相应的控制寄存器,来存放命令和参数
②向CPU报告设备的状态:
- I/O控制器中会有相应的状态寄存器,用于记录I/O设备是的当前状态,如:1表示空闲,0表示忙碌
③数据交换
- I/O控制器中会设置相应的数据寄存器,输出时,数据寄存器用于暂存CPU发来的数据,之后再由控制器传送到设备。输入时,数据寄存器用于暂存设备发来的数据,之后CPU从数据据寄存器中拿走数据
④地址识别:
- 类似于内存的地址,为了区分设备控制器中的各个寄存器,也需要给各个寄存器设置一个特定的“地址”,I/O控制器通过CPU提供的地址,来判断CPU要读/写的时哪一个寄存器
I/O控制器的组成:
①CPU与控制器的接口
②I/O逻辑
③控制器与设备的接口
需要注意的小细节:
- 一个I/O控制器可能会对应多个设备
- 数据寄存器,控制寄存器,状态寄存器有多个(如:每个控制/状态寄存器对应一个具体的设备),且这些寄存器都要由对应的地址,才能方便CPU操作。有的计算器会让这些寄存器占用内存地址的一部分,称为内存映像I/O;另一些则采用I/O专用地址,即寄存器独立编址
内存映像与寄存器独立编址:
小结:
5.3I/O控制方式
I/O控制方式,分为程序直接控制方式,中断驱动方式,DMA方式以及通道控制方式。
1)程序直接控制方式
学习这程序直接控制方式需要注意的点:
①完成一次读/写操作得流程
②CPU干预的频率:
很频繁,I/O操作开始之前,完成之后需要CPU介入·,并在等待I/O完成的过程中CPU需要不断地轮询检查
③数据传送的单元:
每次读/写单位为一个字
④数据的流向:
读数据(数据输入):I/O设备>CPU>内存
写操作(数据输出):内存>CPU>I/O设备
注:每次读写都会需要CPU地帮助
⑤主要优点和缺点:
优点:实现简单。在读/写指令之后,加上实现循环检查地一系列指令即可(因此称为“程序直接控制方式”)
缺点:CPU和I/O设备只能串行地工作,CPU需要一直轮询检查,长期处于忙等地状态,CPU利用率低
2)中断驱动方式:
引入中断机制。由于I/O设备速度很慢,因此在CPU发出读/写命令后,可将等待I/O的进程阻塞,先切换到别的进程执行。当I/O完成后,控制器会向CPU发出一个中断信号,CPU检测到中断信号后,会保存当前进程的运行环境信息,转去执行中断处理程序处理该终端。处理中断的进程中,CPU从I/O控制器读一个字的数据传送到CPU处理器。再写入主存。接着,CPU恢复等待I/O的进程(或其他进程)的运行环境,然后继续执行
注:
- CPU会在每个指令周期的末尾检查中断
- 中断处理过程中需要保存,恢复进程的运行环境,这个过程是需要移动时间开销的,如果中断发生的频率太高,也会降低系统性能
学习这中断驱动方式需要注意的点:
①完成一次读/写操作得流程:
②CPU干预的频率:
- 每次I/O操作开始之前,完成之后需要CPU介入
- 等待I/O完成的过程中CPU可以切换到别的进程执行
③数据传送的单元:
每次读/写一个字
④数据的流向:
-
读数据(数据输入):I/O设备>CPU>内存
-
写操作(数据输出):内存>CPU>I/O设备
⑤主要优点和缺点:
优点:
与程序直接控制方式相比,在中断驱动方式中,I/O控制器会通过中断信号主动的报告I/O已完成,CPU不再需要不停的轮询。CPU和I/O设备可并行工作,CPU利用率得到明显得提升
缺点:
每个字在I/O设备与内存之间的传输,都需要经过CPU。而频繁的中断处理会消耗较多的CPU时间
3)DMA方式:
与中断驱动方式相比,DMA方式(直接存储存取,主要用于块设备I/O控制)有这样即可改进
- 数据的传送单位时块,而不是一个字,一个字的传送
- 数据的流向是从设备直接放入内存,或者·从内存直接到设备,不在需要CPU作为中转的地方
- 仅在传送一个或多个数据块的开始和结束时,才需要CPU干预
DMA控制器的构成:
不是从磁盘中一次性读到内存中的,而是一个字一个字的读到DR中,然后再一次性读到内存中
学习这DMA需要注意的点
①完成一次读/写操作得流程:
②COU干预的频率:
仅在其传送一个多个数据的开始和结束的时候,才需要干预
③数据传送的单元:
每次读/写一个或多个快(注意:每次读/写的只能是连续的块,且这些读入内存后在内存中的也是连续的)
④数据的流向(不在需要CPU):
- 读数据(数据输入):I/O设备>内存
- 写操作(数据输出):内存>I/O设备
⑤主要优点和缺点:
优点:
数据传输以块为单位,CPU介入频率进一步降低,数据的传输不再需要先经过CPU再写入内存,数据传输效率进一步增加,CPU和I/O设备的并行性增加
缺点:
CPU每发出一条I/O指令,只能读/写一个或多个连续的数据块(如果时离散存放的数据块,就需要发出多条指令)
4)通道控制方式:
一种硬件,可以理解为是“弱鸡版CPU”,通道可以识别为一系列的通道指令
- 与CPU相比,通道可以执行的指令很单一,并且通道程序是放在主机内存中的,也就是说通道与CPU共享内存
学习通道控制方式需要注意的点
①完成一次读/写操作得流程:
②CPU干预的频率:
极低,通道会根据CPU的指示执行相应的通道程序,只有完成一组数据块的读/写后才需要发出中断信息,请求CPU干预
③数据传送的单元:
每次读/写一组数据块
④数据的流向:
读数据(数据输入):I/O设备>内存
写操作(数据输出):内存>I/O设备
⑤主要优点和缺点:
优点:
CPU,通道,I/O设备可并行工作,资源利用率高
缺点:
实现复杂,需要专门的通道硬件支持
小结:
5.4I/O软件的层次结构
1)设备独立性软件:
又称设备无关性软件,与设备的硬件特性无关的功能几乎都在这一层实现
主要实现的功能
①向上层提供的统一的调用接口(read/write系统调用):
原理类似文件保护,设备被看作是一种文件,不同用户对各个文件的访问权限是不一样的,同理,对设备的访问权限也是不一样的
②差错保护:
设备独立性软件需要对一些设备的错误进行相应的处理
③设备的分配与回收:
④数据缓冲区管理:
可以通过缓冲技术屏蔽设备之间数据交换单元大小和传输速度的差异
⑤建立逻辑设备名到物理设备名的映射关系,根据设备类型选择调用相应的驱动程序:
- 用户或用户软件发出的I/O操作相关系统调用的系统调用收,需要指明此次要操作的I/O设备的逻辑名(去学校复印店打印的时候,需要选择打印机1,打印机2,这些都是逻辑名)
- 设备独立性软件需要通过“逻辑设备表”来确定逻辑设备名与物理设备名的映射,并找到该设备对应的设备驱动程序
- 操作系统可以采用两种方式管理逻辑设备表
a:第一种方式,整个系统只设置一张LUT,这就意味着所有用户不能使用相同的逻辑设备名,因此方法只适用于单用户操作系统
b:第二种方式,为每个用户设置一份LUT,各个用户使用的逻辑设备名可以重复,适用于多用户操作系统。系统会在用户登陆的时候为其建立一个用户管理进程,而LUT就存放在用户管理进程的PCB中
2)设备驱动程序:
- 主要负责对硬件设备的具体控制,将上层发出的一系列的命令(如read,write)转化为特定的设备能听得懂的一系列操作,包括设备设备寄存器,检查设备状态等
- 不同的I/O设备有不同的硬件特性,具体细节只有设备的厂家才知道,因此厂家需要根据设备的硬件特性设计并蹄冻相应的驱动程序
- 注:驱动程序是以一个独立的进程存在的
3)中断处理程序:
当I/O任务完成的时候,I/O控制器会发送一个中断信号,系统会会根据中断信号类型会找到相应的中断处理程序并执行。中断处理程序的处理流程如下
小结:
5.5I/O核心子系统
- I/O调度:用某种算法确定一个好的顺序来处理各个I/O请求
可以采用先来先服务,优先级算法,短作业优先等算法来确定I/O执行的顺序 - 设备保护:在UNIX系统中,设备会被看做是一种特殊的文件。设备也有相应FCB。当用户请求访问某个设备的时候,系统会根据FCB中记录的信息来判断用户是否有相应的访问权限。依此实现“设备保护”功能
5.6假脱机技术
1)什么是假脱机技术,脱机技术可以解决什么问题
脱机:脱离主机的控制进行的输入/输出操作
- 引入脱机技术后,缓解了CPU与慢速I/O设备之间的速度矛盾,另一方面,即使CPU再忙碌。也可以提前将数据输入到磁带,即使慢速的输出设备正在忙碌,也可提前将数据输出到磁带。
假脱机技术,又称SPOOLing技术,是用软件的方式模拟脱机技术。
2)假脱机技术的实现原理:
输入井和输出井:
输入进程和输出进程:
x
输入缓冲区与输出缓冲区:
3)共享打印机的原理分析:
打印机按照是否具有共享功能,分为独占式设备以及共享式设备
独占式设备:
- 只允许各个进程穿行使用的设备,一段时间内只能满足一个进程的需求
- 打印机是种独占式设备,但是可以用SPPOLing技术改造成共享设备
- 当多个用户进程提出输出打印的请求的时候,系统会答应它的请求,但是并不是真正的把打印机分配给他们,而是由假脱机管理进程为每个进程做两件事
a:在磁盘输出井中为进程申请了一个空闲缓冲区(也就是说,这个缓冲区是在磁盘上的),并将要打印的数据送入其中
b:为用户进程申请一个空白的打印申请表,并将用户的打印请求填入表中(其实就是用来说明用户的打印数据存放位置等信息),再将该表挂到假脱机文件队列上
c:当打印机空闲的时候,输出进程会从文件队列的队头取出一张打印请求表,并根据表中的要求将要打印的数据从输出井传送到缓冲区。在输出到打印机进行打印。用这种方式可依此处理完全的打印任务
d:虽然系统中只有一台打印机,但每个进程提出打印请求时,系统都会为在输出井中为其分配一个存储区(相当于分配了一个逻辑设备)。使每个用户几次呢很难过都觉得自己在独占以太打印机,从而实现对打印机的共享
e:SPOOLing技术可以把一台物理设备虚拟成逻辑上的多台设备。可将独占式设备改造成共享式设备
共享设备:
允许多个进程同时使用的设备(宏观上同时使用,微观上可能是交替使用),可以同时满足多个进程的使用请求
小结:
5.7设备的分配和回收
1)设备分配时应该考虑的因素:
①设备的固有属性:
-
独占属性:一个时间段内只能一个进程进行使用的设备
-
共享设备:一个时间段内可以多个进程进行使用的设备
-
虚拟设备:采用SPOOLing技术将独占设备改造成虚拟的共享设备,可同时分配给多个进程使用(如财通SPOOLing技术实现的共享打印机)
②设备分配算法:
- 先来先服务
- 短作业优先算法
- 优先级高者优先
③设备分配中的安全性(有两种方式):
第一种方式:安全分配方式–为进程分配一个设备后就将进程阻塞,本次I/O完成后才将进程唤醒。(考虑进程请求打印机打印输出的例子)
安全分配方式在一段时间内每个进程只能使用一个设备
优点:
- 破坏了请求和保持条件,不会死锁
- 对于一个进程来说,CPU和I/O设备只能串行的执行
第二种方式:不安全分配方式–进程发出I/O请求后,系统为其分配I/O设备,进程还可以继续执行。之后还可以发出新的I/O请求,只有某个请求得不到满足时才将进程阻塞
一个进程可以同时使用多个设备
优点:
进程的计算任务和I/O任务可以进行并行处理,使进程迅速推进
缺点:
有可能发生死锁(死锁避免,死锁的检测和解除)
2)静态分配与动态分配:
- 静态分配:进程运行前为其分配全部所需资源,运行结束后归还资源
–破坏了请求和保持的条件,不会发生死锁 - 动态分配:进程运行的过程中动态申请资源
3)设备分配管理中的数据结构:
一个通道可控制多个设备控制器,每个设备控制器可控制多个设备
设备控制表(DCT):系统会为每个设备配置一个DCT,用于记录设备情况
控制器控制表(COCT):每个设备控制器都会对应一个COCT。操作系统根据coct的信息对控制器进行操作和管理
通道控制表(CHCT):每个通道都会对应一个CHCT。操作系统会根据CHCT的信息对通道进行操作和管理
系统设备表(SDT):记录了系统中全部设备的情况,每个设备对应一个表目
4)设备分配的步骤
①根据进程请求的物理设备名查找SDT(注:物理设备名是基础进程请求分配设备时提供的参数)
②根据SDT找到DCT,若设备忙碌则将进程PCB挂到设备等待队列中。不忙碌的时候将设备分配给进程
③根据DCT找到COCT,如果控制器忙碌就将进程PCB挂到控制器等待队列中。不忙碌就将控制器分配给进程
④根据COCT找到CHCT,若通道忙碌就将进程PCB挂到通道等待队列中,不忙碌就将通道分配给进程
只要将设备,控制器,通道三者都分配成功的时候,这次设备分配才成功,之后便可启动I/O设备进行数据传输
④设备分配步骤的改进方法:
改进方法:
建立逻辑设备名与物理设备名之间的映射机制,用户编程的时候只需要提供逻辑设备名
①根据进程请求的逻辑设备名查找SDT(注:用户编程时提供的逻辑设备名其实就是设备类型)
②查找SDT,找到用户进程指定类型,并且空闲的设备。将其分配给该进程。操作系统在逻辑设备表中(LUT)中新增一个表项
③根据DCT找到COCT,如果控制器忙碌就将进程PCB挂到控制器等待队列中。不忙碌就将控制器分配给进程
④根据COCT找到CHCT,若通道忙碌就将基础讷航PCB挂到通道等待队列中,不忙碌就将通道分配给进程
逻辑设备表的设置问题:
- 整个系统只有一张LUT:各用户所用的逻辑设备名不允许重复,适用于单用户操作系统
- 每个用户一张LUT:不同用户的逻辑设备表名可重复,适用于多用户操作系统
小结:
5.8缓冲区管理
1)什么是缓冲区?有什么用:
概念:
- 缓冲区是一个 存储区域,可以由专门的硬件寄存器组成,也可利用内存作为缓存区。
- 使用硬件作为缓冲区的成本较高,容量也较小。,一般仅用于在对速度要求很高的场合(如存储器管理中所用的联想寄存器,由于对页表的访问频率较高,因此使用速度很快的联想寄存器来存放表项的副本)
- 一般情况下,更多的是利用内存作为缓冲区,“设备独立性软件"的缓冲区管理就是要组织管理好这些缓冲区
作用:
- 缓和CPU和I/O设备之间速度不匹配的矛盾
- 减少对CPU的中断频率,放宽对CPU中断相应时间的限制
- 解决数据粒度不匹配的问题
输出程序每次都可以生成一块数据,但I/O设备每次只能输出一个字符 - 提高CPU与I/O设备之间的并行性
2)单缓冲:
-
假设某用户进程请求某种块设备读入若干块的数据。若采用单缓冲的策略,操作系统会在主存中为其分配一个缓冲区(若题目中没有特别说明,一个缓冲区的大小就是一个·块)
-
当缓冲区数据非空时,不能往缓冲区冲入数据。只能冲缓区把数据传出。当缓冲区为空时,可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出
3)双缓冲:
假设某用户请求某种块设备读入若干块数据。若采用双缓冲的策略,操作系统会在主存中为其分配两个缓冲区(若题目中没有特别说明,一个缓冲区的大小就是一个块)
结论:采用双缓冲策略处理一个数据块的平均耗时为Max(T,C+M)
3)单,双缓冲区的区别:
4)循环缓冲:
将多个大小相等的缓冲区链接成一个循环队列
5)缓冲池:
缓冲池由系统中共用的缓冲区组成的,这些缓冲区按使用状况可分为:空缓冲队列,装满输入数据的缓冲队列(输入队列),装满输出数据的缓冲队列(输出队列)
①输入进程请求输入数据:
从空缓缓冲队列中取出一块作为收容输入数据的工作缓冲区(hin),充满数据后将缓冲区挂到输入队列的队尾
②计算进程想要取得一块输入数据:
从输入队列中取得一块充满输入数据的缓冲区作为“提取输入数据的工作缓冲区”,缓冲区读空后挂到空缓冲区队列
③计算进程想要将准备好的数据冲入缓冲区:
从空缓冲队列中取出一块“收容输出数据的工作缓冲区”。数据充满后将缓冲区挂到输出队列队尾
④输出进程请求输出数据:
从输出队列中取得一块充满输出数据的缓冲区作为“提取输出数据的工作缓冲区”。缓冲区读空后挂到空缓冲区中
小结:
版权声明:本文为CSDN博主「留白-mise」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_44353042/article/details/122466731
暂无评论