I/O核心子系统

知识总览

重点需理解和掌握的功能是:I/O调度,设备保护,假脱机技术(SPOOLing技术),设备分配与回收,缓冲区管理(即缓冲与高速缓存)
在这里插入图片描述

这些功能要在那个层次实现?

在这里插入图片描述
注:假脱机技术(SPOOLing技术)需要请求“磁盘设备”的设备独立性软件的服务,因此一般来说假脱机技术是在用户层软件实现的。但是408大纲又将假脱机技术归纳为 “I/O核心子系统”的功能,因此考试时还是以大纲为准。

I/O调度

I/O调度:用某种算法确定一个好的顺序来处理各个I/O请求。

如:磁盘调度(先来先服务算法、最短寻道优先算法、SCAN算法、C-SCAN算法、LOOK算法、C-LOOK算法)。当多个磁盘I/O请求到来时,用某种调度算法确定满足I/O请求的顺序。

同理,打印机等设备也可以用先来先服务算法、优先级算法、短作业优先等算法来确定I/O调度顺序。

设备保护

操作系统需要实现文件保护功能,不同的用户对各个文件有不同的访问权限(如:只读、读和写等)。

在 UNIX系统中,设备被看作是一种特殊的文件,每个设备也会有对应的FCB。当用户请求访问某个设备时,系统根据FCB中记录的信息来判断该用户 是否有相应的访问权限,以此实现“设备保护”的功能。(参考“文件保护”小节)。

假脱机技术(SPOOLing技术)

知识总览

在这里插入图片描述

什么是脱机技术

批处理阶段引入了脱机输入/输出技术(用磁带完成):
在这里插入图片描述

假脱机技术--输入井和输出井

假脱机技术 ”,又称“SPOOLing技术”是用软件的方式模拟脱机技术。SPOOLing系统的组成如下:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
要实现SPOOLing技术,必须要有多道程序技术的支持。系统会建立“输入进程”和“输出进程”。
在这里插入图片描述
注意:输入缓冲区和输出缓冲区是在内存中的缓冲区。

共享打印机原理分析

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

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

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

(1)在磁盘输出井中位进程申请一个空闲缓冲区(也就是说,这个缓冲区是在磁盘上的),并将要打印的数据送入其中;
(2)为用户进程申请一张空白的打印请求表,并将用户的打印请求填入表中(其实就是用来说明用户的打印数据存放位置等信息的),再将该表挂到假脱机文件队列上。

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

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

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

知识点回顾

在这里插入图片描述

设备的分配与回收

知识总览

在这里插入图片描述

设备分配时应考虑的因素

在这里插入图片描述
设备的固有属性可分为三种:独占设备、共享设备、虚拟设备。
独占设备--一个时段只能分配给一个进程(如打印机)
共享设备--可同时分配给多个进程使用(如磁盘),各进程往往是宏观上同时共享使用设备,而微观上交替使用。
虚拟设备--采用SPOOLing技术将独占设备改造成虚拟的共享设备,可同时分配给多个进程使用(如采用SPOOLing技术实现的共享打印机)

设备的分配算法:先来先服务、优先级高者优先 、短任务优先...

从进程运行的安全性上考虑,设备分配有两种方式:

安全分配方式:为进程分配一个设备后就将进程阻塞,本次I/O完成后才将进程唤醒。(eg:考虑进程请求打印机打印输出的例子)
在这里插入图片描述

不安全分配方式:进程发出I/O请求后,系统为其分配I/O设备,进程可继续执行,之后还可以发出新的I/O请求。只有某个I/O请求得不到满足时才将进程阻塞。
在这里插入图片描述

静态分配和动态分配

静态分配:进程运行前为其分配全部所需资源,运行结束后 归还资源(破坏了“请求和保持”条件,不会发生死锁)。

动态分配:进程运行过程中动态申请设备资源。

设备分配管理中的数据结构

“设备、控制器、通道”之间的关系:
在这里插入图片描述
一个通道可控制多个设备控制器,每个设备控制器可控制多个设备。

设备控制表(DCT):系统为每个设备配置一张DCT,用于记录设备情况
在这里插入图片描述
“进程管理”章节中曾经提到过“系统会根据阻塞原因不同,将进程PCB挂到不同的阻塞队列中”

控制器控制表(COXT):每个设备控制器都会对应一张COCT。操作系统根据COCT的信息对控制器进行操作和管理。
在这里插入图片描述
通道控制表(CHCT):每个通道都会对应一张CHCT。操作系统根据CHCT的信息对通道进行操作和管理。
在这里插入图片描述
系统设备表(SDT):记录了系统中全部设备的情况,每个设备对应一个表目。
在这里插入图片描述

设备分配的步骤

在这里插入图片描述
注:只有设备、控制器、通道三者都分配成功时,这次设备分配才算成功,之后便可启动I/O设备进行数据传送。

设备分配步骤的改进

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
逻辑设备表的设置问题:
整个系统只有一张LUT:各用户所用的逻辑设备名不允许重复,适用于单用户操作系统。
每个用户一张LUT:不同用户的逻辑设备名可重复,适用于多用户操作系统。

知识总览

在这里插入图片描述

缓冲区管理

知识总览

在这里插入图片描述

什么是缓冲区?有什么作用?

缓冲区是一个存储区域,可以由专门的硬件寄存器组成,也可利用内存作为缓冲区。
使用硬件作为缓冲区成本较高容量也较小,一般仅用在对速度要求非常高的场合(如存储器管理中所用的联想寄存器,由于对页表大访问频率极高,因此使用速度很快的联想寄存器来存放页表项的副本)。

一般情况下,更多的是利用内存作为缓冲区,“设备独立性软件”的缓冲区管理就是要组织管理好这些缓冲区。
在这里插入图片描述

缓冲区有什么作用?

在这里插入图片描述

单缓冲

假设某用户进程请求某种块设备读入若干块的数据。若采用单缓冲的策略,操作系统会在主存中为其分配一个缓冲区(若题目中没有特别说明,一个缓冲区大小就是一块)。
注:当缓冲区数据非空时,不能往缓冲区冲入数据,只能从缓冲区把数据传出;当缓冲区为空时,可以往缓冲区冲入数据,但必须把缓冲区充满以后,才能从缓冲区把数据传出。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
结论:采用单缓冲策略,处理一块数据平均耗时Max(C,T)+M

双缓冲

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

双缓冲题目中,假设初始状态为:工作区空,其中一个缓冲区满,另一个缓冲区空
在这里插入图片描述
在这里插入图片描述
结论:采用双缓冲策略,处理一个数据块的平均耗时为Max(T,C+M)

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

在这里插入图片描述
在这里插入图片描述

循环缓冲区

将多个大小相等的缓冲区链接成一个循环 队列
在这里插入图片描述

缓冲池

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

知识点回顾

在这里插入图片描述


Less interests,more interest.