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




Device Management… 💻

上一篇文章地址链接【操作系统⑫】——存储管理(下)【分段存储管理 虚拟存储管理 段页式存储管理方案 页面置换算法 OPT FIFO LRU】.
下一篇文章地址链接【操作系统学习笔记⑭】——设备管理(下) [ 设备分配、虚拟设备——SPOOLing ].

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


一、导语

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



二、设备管理的基础知识点

设备管理:指操作系统对计算机系统中除 CPU 和内存以外的设备的管理。

设备管理的主要任务:完成用户提出的输入输出请求,提高输入输出的速率,以及改善输入输出设备的利用率。

● 设备不但种类繁多,而且它们的特性和操作方式相差很大,因此,设备管理是操作系统资源管理中最为复杂、最多样化,且与硬件密切相关的部分


2.1 设备的分类

  • 按传输速率分类
    低速设备:指每秒传输 几B~几百B 的一类设备。这类设备中典型的如键盘、鼠标器、语音的输入和输出等设备。
    中速设备:指每秒传输 几千B~数十千B 的一类设备。这类设备中典型的如行式打印机、激光打印机等设备。
    高速设备:指每秒数传输 几百KB~数十MB 的设备。这类设备中典型的如磁带机、磁盘机、光盘机等。

  • 按信息交换的单位分类
    块设备:用于存储信息。由于信息的存取是以数据块为单位,故称块设备,它属于有结构设备。块设备的基本特征是可寻址,可随机地读/写任意一块;块设备的另一特征是其输入/输出采用DMA方式。典型的块设备是磁盘。
    字符设备:用于数据传输的基本单位是字符,它属于无结构设备。其基本特征是不可寻址。此外,字符设备在I/O时常采用中断驱动方式。字符设备的种类较多,如交互式终端、打印机等。

  • 按资源分配分类
    独占设备:指在一段时间内只允许一个用户(进程)使用的设备。独占设备的分配可能会引起进程死锁。
    共享设备:指在一段时间内允许多个进程同时访问的设备。典型的共享设备是磁盘。
    虚拟设备:指通过某种技术将一台独占设备变换为能供若干个用户共享的设备,从而提高设备的利用率。


2.2 设备管理的功能

① 提高系统的利用率的关键之一是实现设备的并行性

② 为了提高设备的利用率,在进行设备分配时系统通常采用动态分配方式。对于独占设备往往采用虚拟技术将其改造为共享设备。

③ 设备的速率相对 CPU 而言要慢得多。为了平滑两者之间的差异,在设备管理中采用多种缓冲技术

④ 设备管理还要方便用户的使用



三、I/O 控制方式 ⭐️

● “I/O 控制方式” 即是 “输入/输出控制方式”。控制设备和内存之间的数据传送是设备管理中最为重要的任务之一。

  • 选择和衡量数据传输控制方式的原则有
    ① 数据传输速度足够高,既能满足用户的要求,又不会丢失数据。
    ② 系统开销小,需要的处理控制程序少。
    ③ 充分发挥主机和设备的功能,提高两者并行的程度。

常见的 I/O 控制方式有:程序直接查询控制方式、中断方式、DMA方式和通道方式。

I/O 控制方式发展的宗旨和目标是 ——> 尽可能减少主机对外设的干预,即尽可能把主机从繁杂的 I/O 控制中解脱出来,以便有更多时间进行其他处理。


3.1 程序直接查询控制方式

  • 该控制方式的运行机制
    ① 用户进程直接控制主机和外围设备之间的数据传输。
    ② 用户进程与外围设备读取数据时,主机向设备控制器发出读指令后进入测试等待状态。
    ③ 在等待时间内,主机重复查询外设的准备状态直至外设准备就绪。
    ④ 外设就绪后,数据才能开始传送,主机从设备控制器读取一个字,再向内存写一个字。
    ⑤ 如果传送还未结束,再次向设备控制器发出读指令,直到全部数据传输完成再返回现行程序执行。
    ⑥ 用户进程向外设写数据与读数据基本类似。
    在这里插入图片描述

对上图的说明
  ① 程序查询方式中,一旦主机启动外设,便不断查询外设的准备情况,终止了原程序的执行,浪费了宝贵的主机时间。(比如说,就好像 VS2019 运行时出现一个 Bug,弹窗出现,而之后我们在 VS 上点啥也没反应,只有点红框里面的内容。这就相当于 “VS2019的进程” 一直在查询我们 “鼠标(外设)的输入”)
  ② 另一方面,外设准备就绪后,主机参与数据的传送工作,此时主机也不能执行原程序。可见这种方式中,主机和外设串行工作,使主机不能充分发挥效率。

在这里插入图片描述

● 如果想更详细地了解查询时方式的内部运行机制,可以参考链接: 【计算机原理与接口技术(UNIX)⑮】——输入/输出系统【查询方式、中断控制方式、DMA 、8237A】的第 2.2 节。


3.2 中断方式

● 中断方式是程序查询式的改进。

  • 中断方式的运行机制
    ① 在主机启动外设后,不必查询外设是否已经就绪,而是继续执行自己的现行程序。(此时主机和外设处于 “并行工作” 状态)
    ② 外设准备完毕后,它会将数据传送至设备控制器的寄存器,然后向主机发出中断请求
    ③ 主机接到中断请求后,会从设备控制器中将数据读入内存的指定单元。

在这里插入图片描述

  • 对上图的说明
    ① 图的右上角,虚线部分就代表 “CPU 对设备控制器发出读指令后,就去处理其他事件,不会像查询方式那样干等着”
    ② 含有 “中断” 的那根虚线,是外设发出的中断请求。只有该中断请求发出时,设备控制器的状态才会转变为 “就绪状态”,接着 CPU 才会执行 “就绪” 两个字下面的流程图。
    ③ 很显然,中断机制引入后,外围设备就有了反映其状态的能力。

● 中断方式在一定程度上提高了主机和外设的并行程度,提高计算机系统资源的利用率。


3.3 DMA 方式

DMA 方式引入的原因:中断方式消除了程序直接查询方式的 “忙查询”,提高了主机的利用率。但是中断方式中数据传输都是以字节为单位进行的。如果采用中断方式,想传输一个1KB的数据块时,系统需要中断1024次,显然这样很花费主机的时间。

● 如果外设能直接与内存交换数据而不占用主机,那么,主机资源的利用率还可提高。这就出现了直接内存存取(Direct Memory Access,DMA)方式

● 在 DMA 方式中,内存和外设之间有一条数据通路,在内存和外设之间成块传送数据过程中,由 “DMA 控制器” 取代主机来控制数据传输,直接执行到数传输完成。

DMA 方式的特点
  ① 数据传输的基本单位是数据块,即在主机与外设之间传送一个数据块。
  ② 传送的数据直接从外设到内存,或者相反。
  ③ 仅在传送一个数据块或多个数据块的开始和结束时,才需要主机的干预。


“DMA 控制器” 由三个部分组成:“主机与 DMA 的接口”、“DMA 控制器与设备的接口” 和 “I/O 逻辑”。 它的组成结构图如下所示:
在这里插入图片描述

为实现 CPU 与控制器之间成块的进行数据传输,必须在 DMA 控制器中设置如下4类寄存器
  ① 命令/状态寄存器(CR):用于接收从 CPU 发出来的 I/O 命令或有关控制信息,或设备的状态。
  ② 内存地址寄存器(MAR):在输入时,存放把数据从设备传送到内存的起始目标地址;在输出时,存放由内存到设备的内存源地址
  ③ 数据寄存器(DR):用于暂存从设备到内存,或从内存到设备的数据。
  ④ 数据计数器(DC):存放本次 CPU 要读写的字节数。


DMA 的工作过程:以 CPU 从磁盘读取数据为例,介绍 DMA 方式的工作过程,如下图所示。

在这里插入图片描述
对上图的说明
  ① CPU 要从磁盘读数据时,便向磁盘发一条指令。该命令被传送到 CR 中。同时,将本次数据存放在内存中的起始地址送给 MAR ,将要读取数据的字节数传送给 DC,还要将磁盘中的源地址送给 DMA 中的 I/O 逻辑。
  ② 启动 DMA控制器 进行数据传送,CPU 可以处理其他任务。此后,整个传输过程中均由 DMA 进行控制。每传送一个字, DC 计数器减1,直至 DC计数器 为0,整个传输过程结束。


3.4 通道方式

通道:独立于 CPU 的专门实现输入输出工作的处理机,故又称 “输入输出处理器”。

通道的功能:支持控制设备和内存之间进行数据传送,能把 CPU 从琐碎的输入输出操作中解放出来。此外,外围设备和 CPU 能实现并行操作;通道和通道之间能实现并行操作;各通道上的外围设备也能实现并行操作,以达到提高整个系统效率这一根本目的。

通道与一般处理机的区别
  ① 通道指令单一。通道硬件比较简单,其所能执行的 指令主要是与输入输出操作有关的指令。
  ② 通道没有自己的内存。通道所执行的通道程序是放在计算机内存中的,也就是说通道与 CPU 共享系统的内存。

通道的分类:【按信息交换方式而分】
  ① 字节多路通道
  ② 数组选择通道
  ③ 数组多路通道


四、缓冲技术

为什么要采用缓冲技术?
● 为了改善 CPU 与外设之间速度不匹配的矛盾,减少 I/O 对 CPU 的中断次数,提高 CPU 和 I/O 设备的并行性,在操作系统中普遍采用了缓冲技术。

缓冲技术的基本思想是:当一个进程输出数据时,先向系统申请一块内存作为输出缓冲区;然后,将输出数据高速输出到缓冲区;不断把数据填到缓冲区,直到缓冲区被装满为止;此后,进程可以继续它的计算,同时,系统将缓冲区内容写到 I/O 设备上。当一个进程执行读操作输入数据时,过程与此类似。

常见的缓冲区技术有:单缓冲、双缓冲、多缓冲(循环缓冲、缓冲池等)。接下来将依次讲解。


4.1 单缓冲

单缓冲:只在设备和 CPU 之间设置一个缓冲器。

单缓冲机制:对于块设备而言,假定从磁盘把一块数据输入到缓冲的时间为 T,操作系统将该缓冲区中的数据传送到用户区的时间为 M,CPU 对这一块数据计算的时间为 C。如果不采用缓冲,数据直接从磁盘到用户区,每块数据的处理时间为 T+C。若采用单缓冲,每块数据的处理时间为 m a x ( C , T ) + M max(C, T)+M max(C,T)+M。通常来说 M 要远远小于 C 或者 T,因此采用缓冲技术,输入的效率提高了很多。

在这里插入图片描述


4.2 双缓冲

单缓冲:在设备和 CPU 之间设置两个缓冲器。

双缓冲机制:为加快输入输出速度和提高设备利用率,引入了双缓冲。首先将数据送入缓冲区 1,装满后使转向缓冲区 2。此时操作系统可从缓冲区 1 中移出数据送至用户进程区,由 CPU 对数据进行计算。两个缓冲区交替使用,可以使得 CPU 和 I/O 设备、设备和设备的并行性进一步提高。在双缓冲时,系统处理一块数据的时间可粗略地认为是 m a x ( C , T ) max(C,T) max(C,T)

在这里插入图片描述
补充说明:如果 C < T,则可使块设备连续输入(因为计算机的处理速度快,处理完一个缓冲区时,另一个缓冲区却还在由 I/O 输入。这就不会造成 “缓冲覆盖问题”)。如果 C > T,则可使 CPU 一直处于工作状态(即连续处理状态)。


4.3 循环缓冲

为什么要用循环缓冲?
● 当输入与输出的速度基本相匹配时,双缓冲能获得较好的效果,使输入与输出基本上能并行操作。若两者的速度相差甚远,双缓冲的作用则不够理想,不过可以增加缓冲区数量,从而改善这些问题。因此,又引入了多缓冲机制。并将多缓冲组织成循环缓冲形式。

循环缓冲的组成
  ① 多个缓冲区:在循环缓冲中包含了多个缓冲区,每个缓冲区的大小相同。缓冲区可分为三种类型:空缓冲区 R(我猜是 Release 的缩写);已装满数据的缓冲区 G(把它理解成:比C多一点,所以装满了);计算进程正在使用的缓冲区 C(我猜是 Current 的缩写)。

  ② 多个指针:对用于输入的多缓冲,可设置这样三个指针。Nextg指向计算进程下一个可用的缓冲区G;Nexti指向输入进程下次可用的空缓冲区 R;Current指示计算进程正在使用的缓冲区C。


它的工作示意图如下
在这里插入图片描述

循环缓冲的工作细节
  ① GetBuffer()过程:对于计算进程而言,调用GetBuffer过程,通过Nextg获得要进行计算的缓冲区,相应地将该缓冲区改为 C,将Current指向该缓冲区,Nextg指向下一个 G 缓冲区。对于输入进程而言,调用GetBuffer()过程,通过Nexti获取可用的缓冲区,相应地将该缓冲区改为 C,将Current指向该缓冲区,Nexti指向下一个 R 缓冲区。
  ② ReleaseBuffer()过程:当计算进程完毕后,当前的缓冲区空出来了,调用ReleaseBuffer()过程,将 C 改为 R 。若是输入进程完毕,也调用ReleaseBuffer()过程,将该缓冲区从 C 改为 G。

指针NextiNextg不断顺时针运行,可能会出现以下两种情况
  ① Nexti指针追上Nextg指针。意味着输入进程输入数据的速度大于计算进程处理数据的速度,已把全部可用的空缓冲装满,再无缓冲区可用。此时,输入进程应该阻塞,直到有计算进程计算完毕,将某个缓冲区释放,输入进程才被唤醒。
  ② Nextg指针追上Nexti指针。意味着计算进程处理数据的速度大于输入进程输入数据的速度,已把所有输入数据的缓冲区处理完毕,再无有数据的缓冲区供计算进程使用。此时,计算进程应该阻塞,直到有输入进程输入数据,将某个缓冲区释放,计算进程才被唤醒。




4.4 缓冲池

为什么要用缓冲池呢?
● 循环缓冲仅适用于某特定的 I/O 进程和计算进程,因此它们属于专用缓冲。当系统较大时,将会有许多这样的循环缓冲,这不仅要消耗大量的内存空间,而且其利用率也不高。为了提高缓冲区的利用率,目前广泛流行公用的缓冲池机制。缓冲池中的缓冲区可供多个进程共享。

缓冲池的组成
  ① 空闲缓冲区队列emq:由空闲缓冲区所连成的队列。其队首指针F(emq)和队尾指针L(emq)分别指向该队列的首尾缓冲区。
  ② 输入队列inq:这是由装满输入数据的缓冲区所连成的队列。其队首指针F(inq)和队尾指针L(inq)分别指向该队列的首、尾缓冲区。
  ③ 输出队列outq:这是由装满输出数据的缓冲区所连成的队列。其队首指针F(outq)和队尾指针L(outq)分别指向该队列的首、尾缓冲区。
  ④ 除了上述三个队列外,还应具有4种工作缓冲区。
    [1] 用于收容输入数据的工作缓冲区hin
    [2] 用于提取输入数据的工作缓冲区sin
    [3] 用于收容输出数据的工作缓冲区hout
    [4] 用于提取输出数据的工作缓冲区sout

缓冲池中的两个基本操作
  ① Getbuf(type):用于从type所指定的队列的队首摘下一个缓冲区。
  ② Putbuf(type,number):用于将由参数number所指示的缓冲区挂在type队列上(放入队尾)。

需要注意的是:缓冲池是一个临界资源。在Getbuf()Putbuf()过程中必须遵循进程同步的原则。


缓冲池工作的基本方式有4种,其示意图如下

在这里插入图片描述
对上图的说明
  ① 收容输入工作方式:在输入进程需要输入数据时,调用Getbuf(emq)过程,从空缓冲区队列emq的队首摘下一个空缓冲区,把它作为收容输入工作缓冲区hin。然后,把数据输入其中,装满后再调用Putbuf(inq,hin)过程,将该缓冲区挂在输入队列inq的队尾。
  ② 提取输入工作方式:当计算进程需要输入数据时,调用Getbuf(inq)过程,从输入队列取一个缓冲区作为提取输入工作缓冲区sin,计算进程从中提取数据。计算进程用完该数据后,再调用Putbuf(emq,sin)过程,将该缓冲区挂到空缓冲队列emq上。
  ③ 收容输出工作方式:当计算进程需要输出时调用Getbuf(emq)过程,从空缓冲队列emq的队首取得一个空缓冲,作为收容输出工作缓冲区hout。当其中装满输出数据后,又调用Putbuf(outq,hout)过程,将该缓冲区挂在输出队列outq末尾。
  ④ 提取输出工作方式:在输出进程需要输出数据时,调用Getbuf(outq)过程,从输出队列的队首取一个装满输出数据的缓冲区,作为提取输出工作缓冲区sout。在数据提取完后,再调用Putbuf(emq,sout)过程,将它挂在空缓冲队列emq的末尾



五、驱动调度技术

为什么要学这个?
● 首先,驱动是什么?

设备驱动:指操作系统和输入输出设备间的粘合剂。
驱动负责将操作系统的请求传输,转化为特定物理设备控制器能够理解的命令。
—— 百度百科[设备驱动]

原因是:辅助存储器(例如,磁盘,一种大容量旋转型存储设备驱动)在繁重的输入输出负载下,同时会有若干个输入输出请求(就相当于: CPU 说,我要往哪里哪里存东西,又往哪里哪里取东西)来到并等待处理。这时系统需要采用一种合理的调度策略,使系统按最佳次序处理这些请求,这就是 “驱动调度”。

● 学习驱动调度技术之前,需了解磁盘的物理结构和读/写机制。


5.1 磁盘的物理结构(磁盘、盘片、盘面、磁道、扇区、柱面)

磁盘的书本定义:一种直接存取存储设备,又叫随机存取存储设备。它的每个物理块有确定的位置和唯一的地址,存取任何一个物理块所需的时间几乎不依赖于此信息的位置。

磁盘:磁盘由若干盘片组成。

盘片:每个盘片有两个盘面。

盘面:每个盘面都有一个读写磁头。如果有 N 个盘面,则有 2N 个盘面,对应 2N 个磁头,并按照 0、1、2、… 的顺序编号。

磁道:每个盘面都被划分成若干个同心圆磁道(图例是 14 个)。

扇区:对于每个同心圆磁道,都会被划分入若干个扇区。(图例是 8 个)。

在这里插入图片描述

说明:不同磁道上的扇区虽然半径不同,但是容量是相同的,一般的容量为 512字节。(这样做是为了方便计算机硬件处理。故内圈的容量单元密集一点,外圈容量单元稀疏一点)

柱面:半径相同的所有盘面上的磁道构成柱面。

在这里插入图片描述
磁盘容量 容 量 大 小 = 柱 面 数 × 磁 头 数 × 每 根 磁 道 的 扇 区 数 × 512 字 节 容量大小 = 柱面数 \times 磁头数 \times 每根磁道的扇区数 \times 512字节 =×××512(上图计算得 344064 字节 ≈ ≈ 0.34 MB)

● 为了访问磁盘上的一个记录,必须给出3个参数:柱面号磁头号(即对应的盘面号)块号(即扇区)


5.2 磁盘的访问时间

总公式 磁 盘 的 访 问 时 间 = 寻 道 时 间 ( T s ) + 旋 转 延 迟 时 间 ( T τ ) + 传 输 时 间 ( T t ) 磁盘的访问时间 = 寻道时间(T_s) + 旋转延迟时间(T_τ)+ 传输时间(T_t) 访=Ts+Tτ+Tt

寻道时间( T s T_s Ts:是指把磁臂(磁头)移动到指定磁道上所经历的时间。该时间是启动磁臂的时间 s s s 与磁头移动 n n n 条磁道所花费的时间之和,即—— T s = m × n + s T_s=m×n +s Ts=m×n+s
◆ 补充说明:其中, m m m是一常数,与磁盘驱动器的速度有关,对一般磁盘, m m m = 0.2;对高速磁盘, m m m ≤ 0.1,磁臂的启动时间约为2ms。这样,对一般的硬盘,其寻道时间将随寻道距离的增加而增大,大体上是 5~30ms

旋转延迟时间( T τ T_τ Tτ:是指定扇区移动到磁头下面所经历的时间。
◆ 补充说明:对于硬盘,典型的旋转速度大多为5400r/min,每转需时11.1 ms,平均旋转延迟时间 T τ T_τ Tτ5.55ms;对于软盘,其旋转速度为300r/min600r/min,这样,平均 T τ T_τ Tτ50~100ms

传输时间( T t T_t Tt:是指把数据从磁盘读出或向磁盘写入数据所经历的时间。 T t T_t Tt 的大小与每次所读/写的字节数 b b b 和旋转速度有关,即 T τ = b r N T_τ = \frac{b}{rN} Tτ=rNb
◆ 补充说明:其中 r r r 为磁盘每秒钟的转数; N N N 为一条磁道上的字节数

举个栗子:当一次读/写的字节数相当于半条磁道上的字节数时, T t T_t Tt T τ T_τ Tτ 此时相同,因此,总的磁道访问时间 T a T_a Ta(Time all 的意思) 为: T a = T s + 1 2 r + b r N T_a=T_s + \frac{1}{2r} + \frac{b}{rN} Ta=Ts+2r1+rNb


5.3 磁盘调度 —— 4种算法⭐️⭐️⭐️

● 磁盘是可供多个进程共享的设备,当有多个进程都要求访问磁盘时,应采用一种最佳的调度算法,以使各进程对磁盘的平均访问时间最小

● 由于在磁盘访问的时间中,主要是寻道时间,因此,磁盘调度的目标,是使磁盘的平均寻道时间最少

目前常用的磁盘调度算法有:先来先服务、最短寻道时间优先、扫描算法等。


5.3.1 先来先服务算法(FCFS)

先来先服务(FCFS):根据进程请求访问磁盘的先后次序进行调度。此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某一进程的请求长期得不到满足的情况。但会致使平均寻道时间长。(它是最简单的磁盘调度算法)

举个栗子:磁盘收到系统的磁道访问号依次是:55、58、39、18、90、160、150、38、184,初始位置为 100 号磁道,请计算总寻道数和平均寻道长度?

解:
访问顺序如下图所示,总寻道长度 = 45 + 3 + 19 + 21 + 72 + 70 + 10 + 112 + 146 =498
平均寻道长度 = 498 ÷ 9 = 55.3(即用总寻道长度除以访问的磁道数)
在这里插入图片描述


5.3.2 最短寻道时间优先(SSTF)

最短寻道时间优先(SSTF):总是先执行查找时间最短的那个磁盘请求。从而,较 “先来先服务” 算法有较好的性能。但是本算法存在 “饥饿” 现象,随着源源不断靠近当前磁头位置读写请求的到来,使早来的但距离当前磁头位置远的读写请求服务被无限期推迟。

举个栗子【和下一个例子一样】:磁盘收到系统的磁道访问号依次是:55、58、39、18、90、160、150、38、184,初始位置为 100 号磁道,请计算总寻道数和平均寻道长度?

解:
访问顺序如下图所示,总寻道长度 = 10 + 32 + 3 + 16 + 1 + 20 + 132 + 10 + 24 = 248
平均寻道长度 = 248 ÷ 9 = 27.3(即用总寻道长度除以访问的磁道数)
在这里插入图片描述


5.3.3 扫描算法(SCAN)

扫描算法(SCAN):每次总是选择沿臂的移动方向最近的那个柱面。如果沿这个方向没有访问的请求时,就改变臂的移动方向,这非常类似于电梯的调度规则。扫描算法克服了 “饥饿” 这一缺点。扫描算法偏爱那些最接近里面或靠外的请求,对最近扫描跨过去的区域响应会较慢。

举个栗子【我也和下一个例子一样】:磁盘收到系统的磁道访问号依次是:55、58、39、18、90、160、150、38、184,初始位置为 100 号磁道,且一开始磁头的移动方向为:向磁道号增加的方向。请计算总寻道数和平均寻道长度?

解:
访问顺序如下图所示,它一开始先朝 150 号磁道走去,而不是先去 90 号磁道走去。因为题目要求。
总寻道长度 = 50 +10 + 24 + 94 + 32 + 3 + 16 +1 + 20 = 250
平均寻道长度 = 250 ÷ 9 = 27.8(即用总寻道长度除以访问的磁道数)
在这里插入图片描述


5.3.4 循环扫描算法(CSCAN)

循环扫描算法(CSCAN):移动臂总是从0号柱面至最大号柱面顺序扫描,然后,直接返回0号柱面重复进行,归途中不再服务,构成了一个循环,这就减少了处理新来请求的最大延迟。CSCAN算法规定磁头单向移动。

补充说明:根据在网上查的资料,好像是教材表述不太清楚。CSCAN算法准确理解应该是这样的:它总是按一个方向移动磁盘臂,(若一开始为增方向,那么),处理完编号最高的磁道后,移动到具有读写请求的编号最低的磁道,然后继续向上移动。

举个栗子【我和顶楼那个例子一样】:磁盘收到系统的磁道访问号依次是:55、58、39、18、90、160、150、38、184,初始位置为 100 号磁道,且一开始磁头的移动方向为:向磁道号增加的方向。请计算总寻道数和平均寻道长度?

解:
访问顺序如下图所示,它一开始先朝 150 号磁道走去,而不是先去 90 号磁道走去。因为题目要求。
然后当它扫完 180 时,直接返回 0 号了。这是算法的要求。
总寻道长度 = 50 +10 +24 + 166 + 20 + 1 + 16 + 3 + 32 = 322
平均寻道长度 = 322 ÷ 9 = 35.8(即用总寻道长度除以访问的磁道数)
在这里插入图片描述


5.3.5 分步扫描算法(N-Step-SCAN)+ FSCAN算法 —— 只作了解

分步扫描算法(N-Step-SCAN):将磁盘请求队列分成若干个长度为N的子队列,磁盘调度将按 FCFS 算法依次处理这些子队列。而每处理一个队列时又是按 SCAN 算法,对一个队列处理完后,再处理其他队列。 当正在处理某子队列时,如果又出现新的磁盘 I/O 请求,便将新请求进程放入其他队列,这样就可避免出现粘着现象。当N值取得很大时,会使N步扫描法的性能接近于 SCAN 算法的性能;当N = 1时,“N步SCAN算法” 便蜕化为 FCFS 算法。

FSCAN算法:即是 “N步SCAN算法” 的简化, 即 FSCAN 只将磁盘请求队列分成两个子队列。一个是由当前所有请求磁盘 I/O 的进程形成的队列,由磁盘调度按 SCAN 算法进行处理。在扫描期间,将新出现的所有请求磁盘 I/O 的进程, 放入另一个等待处理的请求队列。这样,所有的新请求都将被推迟到下一次扫描时处理。


5.4 提高磁盘 I/O 速度的一些方法 —— 只作了解

提前读:用户经常采用顺序方式访问文件的各个盘块上的数据。在读当前盘块时,已经能够知道下次要读出的盘块的地址。因此,可在读当前盘块的同时,提前把下一个盘块数据也读入磁盘缓冲区。这样一来,当下次要读盘块中的那些数据时,由于已经提前把它们读入了缓冲区,便可直接使用数据,而不必再启动磁盘 I/O,从而,减少了读数据的时间,也就相当于提高了磁盘 I/O 速度。

延迟写:在执行写操作时,磁盘缓冲区中的数据本来应该立即写回磁盘,但考虑到该缓冲区中的数据不久之后再次被输出进程或其他进程访问,因此,并不马上把缓冲区中数据写盘,而是把它挂在空闲缓冲区队列的末尾。随着空闲缓冲区的使用,存有输出数据的缓冲区也不停地向队列头移动,直至移动到空闲缓冲区队列之首。当再有进程申请缓冲区,且分到了该缓冲区时,才把其中的数据写到磁盘上。只要存有输出数据的缓冲区还在队列中,任何访问该数据的进程,可直接从中读出数据,不必再去访问磁盘。这样做,可以减少磁盘的 I/O 时间。

采用虚拟盘:虚拟盘是指用内存空间去仿真磁盘。该盘的设备驱动程序可以接受所有标准的磁盘操作,但这些操作的执行,不是在磁盘上而是在内存中。操作过程对用户是透明的(即用户并不会发现这与真正的磁盘操作有什么不同,而仅仅是更快一些)。虚拟盘是易失性存储器,一旦系统或电源发生故障,或重新启动系统时,原来保存在虚拟盘中的数据会丢失。因此,该盘常用于存放临时文件。



六、参考附录:

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

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

上一篇文章地址链接【操作系统⑫】——存储管理(下)【分段存储管理 虚拟存储管理 段页式存储管理方案 页面置换算法 OPT FIFO LRU】.

下一篇文章地址链接【操作系统学习笔记⑭】——设备管理(下) [ 设备分配、虚拟设备——SPOOLing ].

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


⭐️ ⭐️

  • 9
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
连续系统的时域分析是信号与系统学习中的重要部分。时域分析研究的是信号在时间域内的变化规律,常用的分析方法包括冲激响应法、单位阶跃响应法和相应方程法。 1. 冲激响应法 冲激响应法是一种基于系统输入信号的冲激函数的响应来分析系统时域特性的方法。具体来说,将系统输入信号表示为一个冲激序列的加权和,然后计算出系统对每个冲激的响应,得到系统的冲激响应函数。然后,通过线性时不变系统的特性,可以将任何输入信号都表示为冲激序列的加权和,从而得到系统对任何输入信号的响应。 2. 单位阶跃响应法 单位阶跃响应法是一种基于系统输入信号的单位阶跃函数的响应来分析系统时域特性的方法。具体来说,将系统输入信号表示为一个单位阶跃函数的加权和,然后计算出系统对每个单位阶跃函数的响应,得到系统的单位阶跃响应函数。然后,通过线性时不变系统的特性,可以将任何输入信号都表示为单位阶跃函数的加权和,从而得到系统对任何输入信号的响应。 3. 相应方程法 相应方程法是一种基于系统微分方程的解析解来分析系统时域特性的方法。具体来说,根据系统微分方程的特性,可以得到系统的传递函数,然后通过拉普拉斯变换将输入信号和传递函数变换到频域内,最终通过反变换得到系统的时域响应。 以上三种方法都是分析连续系统时域特性的重要方法,各自适用于不同的情况。掌握这些方法可以帮助我们更好地理解和分析连续系统的时域特性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一支王同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值