【操作系统学习笔记⑭】

您所在的位置:网站首页 eba设备管理系统 【操作系统学习笔记⑭】

【操作系统学习笔记⑭】

2023-07-18 09:28| 来源: 网络整理| 查看: 265

文章目录 一、导语二、设备分配2.1 设备分配中的数据结构2.1.1 设备控制表(DCT)2.1.2 系统设备表(SDT)2.1.3 控制器控制表(COCT)2.1.4 通道控制表(CHCT)2.1.5 以上各种数据结构之间的关系 2.2 设备分配的过程 ⭐️2.3 设备分配应考虑的因素2.4 设备的独立性 ⭐️⭐️ 三、虚拟设备 —— 只作了解3.1 SPOOLing 系统的组成3.2 SPOOLing 系统的工作原理3.3 SPOOLing 系统的应用3.4 SPOOLing 系统的特点(考试如有问答题,写黑体的即可) 四、参考附录:

Device Management… 💻

上一篇文章地址链接:【操作系统学习笔记⑬】——设备管理(上) [直接查询、中断方式、DMA方式、缓冲技术、驱动调度技术与算法]. 下一篇文章地址链接: 【操作系统学习笔记 ⑮ 完结篇】——文件管理 [ 文件系统 + 索引文件的详细样例 ].

期末考试总复习——地址链接:《操作系统期末总复习——绝地求生版》.

一、导语

● 本文脉络:   ① 首先介绍常用的设备和 CPU 之间的数据传送控制的四种方式:程序查询方式、中断方式、DMA方式、通道方式。(上一篇文章已讲)   ② 为了匹配设备和 CPU 之间的处理速度,介绍了三种常用的缓冲技术:单缓冲、双缓冲和循环缓冲。(上一篇文章已讲)   ③ 然后介绍了磁盘这种特殊设备的结构及其调度算法。(上一篇文章已讲)   ④ 接着介绍设备分配的过程,以及分配时所用到的数据结构和其他需考虑的因素。   ⑤ 最后介绍了虚拟设备及其实现技术。

二、设备分配

为什么要学设备分配? ● 在多道程序环境下,系统中的设备供所有进程共享。为了防止进程对系统资源的无序竞争,则设备必须由系统统一分配。【就相对于,在一个银行,有3个ATM机(即 “设备” ),然后进来了不同类型的人,有些是来取钱的、有些是放钱的、有些是扛着枪提钱的,ATM机对于他们来说是共享的,但银行经理、助理和保安(即 “系统” )需要设定一套规则来管理,避免无序争抢对ATM的使用权】

● 每当进程向系统提出请求时,设备分配程序就会按照一定的策略,将设备分配给请求的进程。

● 在系统中,为了保证在 CPU 与设备之间能进行有效的通信,还应分配相应的 “设备控制器” 和 “通道” 来协助相关工作。(后面将对其进行学习)

2.1 设备分配中的数据结构

● 在进行设备分配时,通常都需要借助于一些表格。(假如说我们是卖房子的,当别人来买时,那我们就要给他们一些表格填:《家庭购房申请表》、《购房承诺书》、《…限价商品住房申请备案通知单…》等等)。我们需要在表格中记录相应设备(房子)或设备控制器状态(房子的水电气等的情况),以及对设备或对设备控制器进行控制所需的信息(对设备而言,就像对房子的管控所需要什么嘛?不就是水电气。而对设备控制器的管控需要什么嘛?不就是对水电气的管控需要什么嘛?需要更上层一些的东西,比如总设备箱)。接下来我们将对其一一进行学习。【例子举得可能不是很恰当…意会即可】

2.1.1 设备控制表(DCT)

● 系统为每一个 I/O 设备都配置了一张用于记录本设备情况的设备控制表,其内容包括:(左图是集合,右图是其中一个小方格的展开)

在这里插入图片描述

◆ 对上图的说明:   ① 设备类型:反映设备的特性。(例如是终端设备、块设备或字符设备等)   ② 设备标识符:用来标识该设备。(例如是008、626等)   ③ 设备状态:当设备自身正处于使用状态时,应将设备忙标志置 “1”,若与该设备相连接的控制器或通道正忙,此时则应将等待标志置 “1”。   ④ 指向控制器表的指针:指向该设备所连接的控制器的控制表(即 2.1.3 的 COCT)。在多条通路情况下,一个设备将与多个设备控制器相连。此时,在 DCT 中还应设置多个控制表指针。   ⑤ 重复执行次数或时间:这是由系统规定的、设备在工作中发生错误时,应重复执行的次数(或时间)。在重复执行时若能恢复正常传送,则仍认为传送成功。否则,认为本次传送失败。   ⑥ 设备队列的队首指针:凡因请求本设备而未得到满足的进程,其 PCB 都被按照一定的策略排成一个队列,称为设备队列。

2.1.2 系统设备表(SDT)

● 整个系统中有一张系统设备表,它记录已被连接到系统中的所有物理设备的情况,并为每个物理设备设一表目项,如下图所示:**(左图是集合,右图是其中一个小方格的展开)

在这里插入图片描述

◆ 对上图的说明:   ① 设备类型:反映设备的特性。(例如是终端设备、块设备或字符设备等)   ② 设备标识符。(例如是008、626等)   ② DCT 指针:该指针指向有关设备的设备控制表。(即 2.1.1 那种表)   ③ 驱动程序入口:正在使用该设备的进程标识。(例如:PCB为1001的进程、PCB为1058的进程)

● 补充说明:SDT 的主要意义在于反映系统中设备资源的状态,即系统中有多少设备,有多少是空闲的,而又有多少已分配给了哪些进程。

2.1.3 控制器控制表(COCT)

● 系统为每一个控制器都配置了一张记录本控制器情况的控制器控制表。(这个就是 2.1.1 图中的那个 “控制器表”)【我感觉下图中的第三行是错的,应该是 “指向控制器连接的通道控制表的指针”】

在这里插入图片描述

2.1.4 通道控制表(CHCT)

● 每个通道都有一张通道控制表。该表只有在通道控制方式的系统中存在。CHCT 包括通道标识符、通道忙/闲标识、等待获得该通道的进程等待队列的队首指针与队尾指针等。 在这里插入图片描述

2.1.5 以上各种数据结构之间的关系

● 它们之间的关系如下图所示: 在这里插入图片描述

● 感觉还是很难理解的,毕竟没有什么实物展现。(但目前只要把下面的 “2.2 设备分配的过程” 理解动就可以了。)

● 【建议先看完 2.2,再来看这个】举个样例:某个进程来到上图所在的这个系统,并恰好想要申请设备 A,且 B 不忙,但 D 在忙,其余空闲。请写出其分配过程?

答:首先 I/O 设备分配程序会检查设备 A 的 DCT,从中找到与此设备相连的 COCT,发现控制器 “B、C” 和 A 相连。此时控制器 B 不忙,则从控制器 B 的 COCT 中找出与此控制器相连的通道 D 和 E。但因为 D 正忙,而通道 E 空闲,便可构成一条 I/O 通路:通道 E → 控制器 B → 设备 A。

2.2 设备分配的过程 ⭐️

① 分配设备过程:根据与进程 n 提出的逻辑设备名称对应的物理设备名称查找系统设备表(SDT),从中找到该设备的 设备控制表(DCT)。然后,根据 设备控制表(DCT) 中的状态信息判断该设备是否正忙。若忙,便将请求 I/O 的进程的 PCB 插在设备队列上等待;否则,由系统计算本次设备分配的安全性。如果分配不会引起死锁,便将该设备分配给请求进程;否则,仍将该 PCB 插入设备等待队列。

② 分配设备控制器过程:当系统把该设备分配给提出 I/O 请求的进程后,从 设备控制表(DCT) 中的 控制器指针,可得知与此设备连接的 控制器控制表(COCT),通过检查该表中的状态信息可知该设备控制器是否忙碌。若忙,便将请求 I/O 的进程的 PCB 挂在设备控制器队列上;否则,将设备控制器分配给进程。

③ 分配通道的过程:如果设备控制器也空闲,则把设备控制器分配给它。之后,再通过 控制器控制表(COCT) 中的通道表指针,检查与该控制器连接的 通道控制表(CHCT),再根据该表中的状态信息可知通道是否忙碌。若忙,便将请求 I/O 的进程的 PCB 插在通道队列上;否则,将通道分配给进程。一旦设备、设备控制器和通道都分配成功,便可启动 I/O 设备进行数据传送。

2.3 设备分配应考虑的因素

● 在系统中,请求设备服务的进程一般都多于设备。这就会出现 “进程争夺设备资源” 的问题。

● 为了使系统有条不紊地工作,系统在进行设备分配时,应考虑以下因素:设备的固有属性、设备分配算法、设备分配中的安全性。

① 设备的固有属性:【在分配设备时,首先应考虑与设备分配有关的设备属性】   [1] 独占设备:指定设备在一段时间内,只允许一个进程独占。   [2] 共享设备:指允许多个进程同时共享的设备。   [3] 虚拟设备:可虚拟设备指的是一台物理设备在采用虚拟技术后,可变成多台逻辑上所谓的虚拟设备。

② 设备的分配算法:   [1] 先来先服务:根据进程对某设备提出请求的先后次序,将这些进程排成一个设备请求队列,总是把设备首先分配给队首进程。   [2] 优先级高者优先:优先权高的进程优先获得处理机。如果对这种高优先权进程所提出的 I/O 请求也赋予高优先权,显然有助于这种进程尽快完成。在利用该算法形成设备队列时。将优先级高的进程排在设备队列前面,对于优先级相同的 I/O 请求,则按先来先服务原则排队。

③ 设备分配的安全性:   [1] 安全分配方式:每当进程发出 I/O 请求后,该进程便进入阻塞态,直到 I/O 操作完成才被唤醒。该分配方式摒弃了 “请求和保持” 条件(造成死锁的4个必要条件之一),因而分配是安全的。缺点是进程推进慢,CPU 与 I/O 设备是串行工作的。   [2] 不安全分配方式:每当进程发出 I/O 请求后,该进程仍继续运行,因此,一个进程可同时操作多个设备(并行工作),从而使进程推进迅速,缺点是分配不安全,因为它可能具备 “请求和保持” 条件,造成死锁。因此,在设备分配程序中,仅当检测的结果是安全的,才进行分配。

2.4 设备的独立性 ⭐️⭐️

● 设备独立性的概念:(其基本含义是)用户进程独立于具体使用的物理设备。意思说,进程只需用逻辑设备名称请求使用某类设备就可以了,当系统中有多台该类设备时,系统可将其中任一台分配给请求进程,而无需仅局限于某一台设备。【可以这样理解,在1955年,还没有电子设备的时候,小明得病了住院,他躺在病床上。当他需要护理时,他就不用叫每个护士胸前的 “独一番号”(或者名字),而直接喊 “护士” 就可以了,医院的领导就会直接分配一个 空闲的护士 过来帮小明。】

● 设备独立性有以下的好处:   ① 设备分配时的灵活性:进程以物理设备名来请求使用指定的某台设备时,若该设备已经分配给其他进程,即使其他相同设备空闲,该进程仍阻塞。若能以逻辑设备名来请求某类设备,系统可将该类设备中的任一台分配给进程,设备全部分配完毕时,进程才会阻塞。   ② 易于实现 I/O 重定向:是指用于 I/O 操作的设备可以更换,而不必改变应用程序。

● 设备独立性软件:为了实现设备的独立性,必须再在驱动程序之上加一层软件,称之为设备独立性软件。

● 设备独立性软件的主要功能分为以下两个方面:   ① 执行所有设备的公有操作:     [1] 独占设备的分配与回收。     [2] 将逻辑设备名映射为物理设备名。     [3] 对设备进行保护,禁止用户直接访问设备。     [4] 缓冲管理,以提高 I/O 的效率。     [5] 差错控制。   ② 向用户层(或文件层)软件提供统一接口:无论何种设备,它们向用户提供的接口应该是相同的。(如:对各种设备的读操作,都使用read();对设备的写操作,都使用write()。)

● 逻辑设备到物理设备映射的实现:   ① 逻辑设备表:为了实现设备的独立性,系统必须能够将应用程序中所使用的逻辑设备名映射为物理设备名。需设置一张逻辑设备表 LUT(Logical Unit Table)。该表的每个表目中包含了三个表项:逻辑设备名、物理设备名和设备驱动程序的入口地址。

在这里插入图片描述

  ② LUT 的设置问题 —— 它的设置可采取两种方式:第一种设置方式是整个系统设置一张 LUT。不允许在 LUT 中具有相同的逻辑设备名,这就是要求所有用户不使用相同的逻辑设备名。第二种方式是为每个用户设置一张 LUT。每当用户登录时,便为该用户建立一个进程,同时也为之建立一张 LUT。(【注:下图的系统设备表即是 “2.1.2 系统设备表(SDT)”】

在这里插入图片描述

三、虚拟设备 —— 只作了解

为什么要讲虚拟设备? ● 还不是为了方便我们管理设备的 I/O 操作。

● 在前面,我们已经学习了 “脱机输入输出”(也就是脱离计算机的输入输出,即不受 CPU 控制。【关于“脱机” 的含义详见 【操作系统①】——操作系统的定义和功能、操作系统的四大特征【并发 共享 虚拟 异步】的 “功能 2:向上层提供(方便易用的)服务” 里面的 “脱机命令接口”】,此时系统可以利用专门的外围控制机将低俗 I/O 设备上的数据传送到高速磁盘上。

● 而现在,我们就想用 “虚拟设备” (也就是我们想让 CPU 来模拟 “脱机” 的功能):利用一道程序来模拟脱机输入时的外传控制机的功能,把低速 I/O 设备上的数据传送到高速磁盘上(同时再用另一道程序来模拟脱机输出时的外转控制机的功能)。这样即可在 CPU 的直接控制下实现脱机输入输出的功能。【具体原理详见后文】

● 我们通常把这种在联机情况下实现同时的外围控制称为 SPOOLing(外部设备联机并行操作,即Simultaneous Peripheral Operations On-Line 的缩写),或称为假脱机操作。

▼ 小编的总结:其实这些技术的本质思想并没有变,只是展现出来的形式不同罢了。它和上一篇文章的 “缓冲技术” 有异曲同工之妙。只不过前者是对 “内存” 下手,而这里是对从 “磁盘和设备” 下手。

3.1 SPOOLing 系统的组成

● SPOOLing 系统的组成示意图: 在这里插入图片描述 ◆ 对上图的说明:

  ① 输入井和输出井:输入井和输出是在磁盘上开辟的两个大缓冲区。输入井是模拟脱机输入时的磁盘,用于收容 I/O 设备输入的数据。输出井是模拟脱机输出时的磁盘,用于收容用户程序的输出数据。

  ② 输入缓冲区和输出缓冲区:在内存中要开辟两个缓冲区,其中输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井;输出缓冲区用于暂存从输出井送来的数据,以后再传送给输出设备。

  ③ 输入进程和输出进程:输入进程(SPi)模拟脱机输入时的外围控制机,将用户要求的数据从输入机通过输入缓冲区再送到输入井。当 CPU 需要输入数据时,直接从输入井读入内存。输出进程(SPo)模拟脱机输出时的外围控制机,把用户要求输出的数据先从内存送到输出井,待输出设备空闲时,再将输出井中的数据经过输出缓冲区送到输出设备上。

3.2 SPOOLing 系统的工作原理

● SPOOLing 系统的工作原理:   ① 操作系统启动后,激活 SPOOLing 输入进程。   ② 一旦有输入请求消息,SPOOLing 输入进程立即得到执行,把装在输入设备上的作业输入到硬盘的输入井中。   ③ SPOOLing 输出模块的工作原理与输入模块的工作原理相同,它把硬盘上输出井的数据送到慢速的输出设备上。

● 这就是说,作业调度程序不是从输入设备上装入作业,而是直接从输入井中把选中的作业装入内存,使主机等待作业输入的时间大为缩短。同样对作业的输出而言,写到输出井要比写到输出设备快得多。即使作业的 JCB 已注销,SPOOLing 输出进程仍可以把输出井中没有输出完的数据继续输出到设备上。

● 由此可见,引入 SPOOLing 技术,把一个共享的硬盘改造成若干台输入设备(对作业调度程序而言)和若干台输出设备(对各作业而言)。这样的设备称为虚拟设备,它们的物理实体是输入(出)井。这样改造后,保持了物理输入(出)设备繁忙地与 CPU 并行地工作,提高了整个系统的效率。

3.3 SPOOLing 系统的应用

● 打印机属于独享设备,但通过利用 SPOOLing 技术,可将它改造为一台可供多个用户共享的设备,从而提高了设备的利用率。在局域网下,当用户进程请求输出打印时,SPOOLing 系统同意为它打印输出,但并不真正把打印机分配给该用户进程,只做两件事:   ① 由输出进程在输出井中为之申请一空闲缓冲区,并将要打印的数据送入其中。   ② 输出进程再为用户进程申请一张空白的用户打印请求表,将用户的打印要求填入表中,再将该表挂到请求打印队列上。

● 打印机空闲时,输出进程将从请求打印队列的队首取出一张请求表,根据表中的要求将要打印的数据从输出井传送到内存缓冲区,再由打印机进行打印。打印完后,输出进程再查看请求打印队列中是否还有等待打印的请求表,若有,又取出第一张表,并根据其中的打印要求进行打印,如此下去,直至请求队列空为止。【大白话:比如在学校的打印店,很多电脑共用一个打印机。其中,打印机的显示屏上显示了所有计算机传给它的 “打印作业队列”。打印机就会依据这个队列进行打印(并且这些作业都缓冲到了 PC 的内存缓冲区,只是我们看不出来)。这就相当于每台 PC 机都把自己作业从“背包里” 放到了 “手上”,PC机走过来打印就很方便,就不用打开 “它们的书包” 花时间找作业】

3.4 SPOOLing 系统的特点(考试如有问答题,写黑体的即可)

① 提高了 I/O 速度:对数据进行的 I/O 操作,已从对低速 I/O 设备进行的 I/O 演变为对输入井或输出井中数据的存取,缓和了 CPU 与低速 I/O 设备之间速度不匹配的矛盾。

② 设备不被任何进程独占:因为在 SPOOLing 系统中,实际上并为任何进程分配设备,而只是在输入井或输出井中为进程分配一存储区和建立一 I/O 请求表。

③ 实现了虚拟设备功能:宏观上,虽然是多个进程在同时使用一台独占设备,但该设备只是逻辑上的设备。SPOOLing 系统实现了将独占设备变换为若干台对应逻辑设备的功能

四、参考附录:

[1] 《操作系统A》 上课用的慕课 链接: https://www.icourse163.org/course/NJUPT-1003219004?from=searchPage.

[2] 《操作系统教程》 上课用的教材

上一篇文章地址链接:【操作系统学习笔记⑬】——设备管理(上) [直接查询、中断方式、DMA方式、缓冲技术、驱动调度技术与算法].

下一篇文章地址链接: 【操作系统学习笔记 ⑮ 完结篇】——文件管理 [ 文件系统 + 索引文件的详细样例 ].

期末考试总复习——地址链接:《操作系统期末总复习——绝地求生版》.

⭐️ ⭐️



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3