第六章 输入输出系统【操作系统】

前言

以下内容源自计算机操作系统(第四版)
关于操作系统,
CSDN有很多的优秀博客。
在这里,
本文摘取其他博客内容,
并附上相关链接,
如有侵权,
联系删除,
仅供学习交流使用

请您阅读文章声明,默认同意该声明

推荐

计算机操作系统(第四版)之输入输出系统要点梳理

第六章 输入输出系统

6.1 I/O系统的功能、模型和接口

6.1.1 I/O系统的基本功能

6.1.2 I/O软件的层次结构和模型

1. I/O软件的层次结构
通常把 I/O 软件组织成四个层次:
1)用户层 I/O 软件。实现与用户交互的接口,用户可直接调用该层所提供的、与 I/O 操作有关的库函数对设备进行操作。
2)设备独立性软件。用于实现用户程序与设备驱动器的统一接口、设备命名、设备的保护以及设备的分配与释放等,同时为设备管理和数据传送提供必要的存储空间。
3)设备驱动程序。与硬件直接相关,用于具体实现系统对设备发出的操作指令,驱动 I/O 设备工作的驱动程序。
4)中断处理程序。CPU 先保护被中断进程的 CPU 环境,再转入相应的的中断处理程序进行处理,处理完毕后 CPU 再恢复被中断进程的现场,返回到被中断的进程。
在这里插入图片描述
2. I/O系统中各模块之间的层次视图
在这里插入图片描述

6.1.3 I/O系统接口

6.2 I/O设备和设备控制器

I/O设备一般是由执行I/O操作的机械部分和执行控制I/O的电子部件组成。通常将这两部分分开,执行I/O操作的机械部分就是一般的I/O设备,而执行控制I/O的电子部件则称为设备控制器或适配器,也常称为控制卡、接口卡或网卡。

6.2.1 I/O设备

1.I/O设备的类型
按传输速率: 低速(<KB/s),中速,高速(>100KB/s)
按信息交换单位分类
块设备: 读写的基本单位是数据块, 如磁盘
字符设备:读写的基本单位是字符, 如键盘
按共享属性分类
独占设备、共享设备、虚拟设备
2.设备与控制器之间的接口
在这里插入图片描述

6.2.2 设备控制器

在这里插入图片描述
1. 设备控制器的基本功能

地址识别: 识别I/O端口地址, 使I/O操作与设备对应。
接收和识别命令指挥设备执行
接收CPU通过I/O总线发来的命令和参数, 存储在控制器中相应的控制寄存器中, 并对它进行译码识别, 转换成适当的电信号, 通过控制器与设备的接口向设备发送, 指挥设备执行特定的操作。
接收和记录设备的状态
接收从设备发来的电信号, 进行转换和解释, 变为设备的状态信息, 将此结果记录在控制器的状态寄存器上, 供CPU了解。
数据交换、数据缓冲、差错控制
实现CPU↔控制器↔设备的数据交换, 从而实现了CPU到设备的数据传递和设备到CPU的数据传递。

2. 设备控制器的组成

在这里插入图片描述

6.2.3 内存映像I/O

6.2.4 I/O通道

1.通道设备的引入

为了建立独立的I/O操作
I/O传送独立、I/O组织管理独立
把CPU从繁杂的I/O任务中解脱出来
CPU只需向通道发出一条I/O指令。
减轻单总线的负担, 增加I/O通道
I/O通道的特点
I/O通道是一种特殊的处理机
具有执行I/O指令的能力
通过执行通道程序来控制I/O操作
指令类型单一, 没有自己的内存

2. 通道类型
字节多路通道
含有许多非分配型子通道(几十到几百), 每个子通道连结一台低速或中速字节设备, 子通道按时间片轮转方式共享主通道, 只要扫描一轮的速率足够快, 便不会丢失信息。
在这里插入图片描述

数组选择通道
可连结多台高速块设备, 但由于只含有一个分配型子通道, 当某台设备占用了该通道, 便由它独占, 直到用完释放为止, 显然它的利用率低。

数组多路通道
将以上两种结合, 它含有多个非分配型子通道, 有很高的传输速率, 又有满意的通道利用率。

3. 解决瓶颈问题
通道往往成为I/O的瓶颈如图:

在这里插入图片描述
改单通路为多通路解决瓶颈问题

在这里插入图片描述

6.3 中断机构和中断处理程序

6.3.1 中断简介

中断在操作系统中有着特殊重要的地位,它是多道程序得以实现的基础,没有中断,就不可能实现多道程序,因为进程之间的切换是通过中断来完成的。另一方面,中断也是设备管理的基础,为了提高处理机的利用率和实现CPU与I/O设备并行执行,也必需有中断的支持。

1. 中断和陷入
1)中断,是指CPU对I/O设备发来的中断信号的响应。由外部设备引起,故又称为外中断。
2)陷入,是由CPU内部事件引起的中断,如程序出错等等,故又称为内中断。
中断和陷入的主要区别是信号的来源,即是来自 CPU 外部,还是 CPU 内部。
2. 中断向量表和中断优先级
1)中断向量表。
通常是为每种设备配以相应的中断处理程序,并把该程序的入口地址放在中断向量表中的一个表项,并为每一个设备的中断请求规定一个中断号,它直接对应于中断向量表的一个表项。当 I/O 设备发来中断请求信号时,由中断控制器确定该请求的中断号,并去查找中断向量表取得设备中断处理程序的入口地址,这样便可转入中断处理程序执行。
2)中断优先级。多个中断信号同时到达时,根据优先级分别先后处理。
3. 对多中断源的处理方式
1)屏蔽(禁止)中断。
类似于关中断,当处理机正在处理一个中断时,将屏蔽掉所有的中断,让它们等待。直到处理机处理完本次中断后,再去检查是否有中断发生。
2)嵌套中断。
CPU 优先响应最高优先级的中断请求。高优先级的中断请求可以抢占正在运行的低优先级中断的处理机。

6.3.2 中断处理程序

中断处理程序是I/O系统中最低的一层,它是整个I/O系统的基础。中断机构的处理过程:

(1)CPU测定是否有未响应的中断信号。程序每当执行完当前指令后,处理机都要测试是否有未响应的中断信号。
(2)保护被中断进程的CPU环境。
(3)转入相应的设备处理程序。由处理机对各个中断源进行测试,以确定引起本次中断的 I/O 设备,并向提供中断信号的设备发送确认信号。在该设备收到确认信号后,就立即取消它所发出的中断请求信号。然后,将相应的设备中断处理程序的入口地址装入到程序计数器中。这样,当处理机运行时,便可自动地转向中断处理机程序。
(4)中断处理。
(5)恢复CPU现场并退出中断。
在这里插入图片描述

6.4 设备驱动程序

设备处理程序通常又称为设备驱动程序,它是I/O系统的高层与设备控制器之间的通信程序,其主要任务是接收上层软件发来的抽象I/O要求,如read或write命令,再把它转换为具体要求后,发送给设备控制器,启动设备去执行;反之,它也将由设备控制器发来的信号传送给上层软件。由于驱动程序与硬件密切相关,故通常应为每一类设备配置一种驱动程序。

6.4.1 设备驱动程序概述

1. 设备驱动程序的功能
(1) 将接受到的抽象(逻辑)要求转化为具体(物理)要求。
(2) 检查用户I/O请求的合法性, 设置设备的工作方式。
(3) 发出I/O命令
(4) 及时响应由控制器或通道发来的中断请求
(5) 对有通道系统, 能根据I/O请求, 自动地构造通道程序

2.设备驱动程序的特点

3. 设备处理方式

6.4.2 设备驱动程序的处理过程

在多道程序系统中,驱动程序一旦发出 I/O 命令,启动了一个 I/O 操作后,驱动程序便把控制返回给 I/O 系统,把自己阻塞起来,直到中断到来时再被唤醒。具体的 I/O 操作是在设备控制器的控制下进行的,因此,在设备忙于传送数据时,处理机又可以去干其它的事情,实现了处理机与 I/O 设备的并行操作。

(1) 将抽象的要求转化为具体的要求
(2) 检查I/O请求的合法性、 读出并检查设备的状态
(3) 传送必要的参数、设置工作方式
(4) 向控制器发送控制命令启动I/O设备, 将自己阻塞
(5) 完成I/O后, CPU响应中断唤醒相应的设备驱动进程
16. 磁盘存取时间

6.4.3 对I/O设备的控制方式

1. 使用轮询的可编程I/O方式
处理机对 I/O 设备的控制采取轮询的可编程I/O方式,即在处理机向控制器发出一条 I/O 指令启动输入设备输入数据时,要同时把状态寄存器中的忙/闲标志 busy 置为 1,然后便不断地循环测试 busy。当 busy=1 时,表示输入机尚未输完一个字(符),处理机应继续对该标志进行测试,直至 busy=0,表明输入机已将输入数据送入控制器的数据寄存器中。于是处理机将数据寄存器中的数据取出,送入内存指定单元中,这样便完成了一个字(符)的 I/O。接着再去启动读下一个数据,并置 busy=1。
2. 使用中断的可编程I/O方式
采用中断的可编程I/O方式,即当某进程要启动某个 I/O 设备工作时,便由 CPU 向相应的设备控制器发出一条 I/O 命令,然后立即返回继续执行原来的任务。设备控制器于是按照该命令的要求去控制指定 I/O 设备。此时,CPU 与 I/O 设备并行操作。一旦数据进入数据寄存器,控制器便通过控制线向 CPU 发送一中断信号,由 CPU 检查输入过程中是否出错,若无错,便向控制器发送取走数据的信号,然后再通过控制器及数据线将数据写入内存指定单元中。
适用于低速流设备,如键盘,鼠标。
3. 直接存储器(DMA)访问方式
中断驱动 I/O 比程序 I/O 方式更有效,但须注意,它仍是以字(节)为单位进行 I/O 的,每当完成一个字(节)的 I/O 时,控制器便要向 CPU 请求一次中断。换言之,采用中断驱动 I/O 方式时的 CPU 是以字(节)为单位进行干预的。
从而引入直接存储器访问方式,其特点如下:
1)数据传输的基本单位是数据块,即在 CPU 与 I/O 设备之间,每次传送至少一个数据块;
2)所传送的数据是从设备直接送入内存的,或者相反;
3)仅在传送一个或多个数据块的开始和结束时,才需 CPU 干预,整块数据的传送是在控制器的控制下完成的。
4. I/O通道控制方式
I/O 通道方式是 DMA 方式的发展,它可进一步减少 CPU 的干预,即把对一个数据块的读(或写)为单位的干预减少为对一组数据块的读(或写)及有关的控制和管理为单位的干预。同时,又可实现 CPU、通道和 I/O 设备三者的并行操作。而通道能与 I/O 设备并行是因为 I/O 通道实际上是一种特殊的处理机,它具有执行 I/O 指令的能力,并通过执行通道 I/O 程序来控制 I/O 操作。增设 I/O 通道的主要目的是为了建立独立的 I/O 操作,或者说是使一些原来由 CPU 处理的 I/O 任务转由通道来承担。

6.5 与设备无关的I/O软件

为了方便用户和提高OS的可适应性与可扩展性,在现代OS的I/O系统中,都无一例外地增加了与设备无关的I/O软件,以实现设备独立性,也称为设备无关性。其基本含义是:应用程序中所用的设备,不局限于使用某个具体的物理设备。这是在设备驱动程序之上设置的一层软件,称为与设备无关的I/O软件,或设备独立性软件。

6.5.1 与设备无关(Device Independence)软件的基本概念

1. 以物理设备名使用设备

2. 引入了逻辑设备名

3. 逻辑设备名到物理设备名的转换

6.5.2 与设备无关的软件

1. 设备驱动程序的统一接口
2. 缓冲管理
3. 差错控制
4. 对独立设备的分配与回收
5. 独立于设备的逻辑数据块

6.5.3 设备分配

1. 设备分配中的数据结构
通过在系统配置:①设备控制表 DCT;②控制器控制表 COCT;③通道控制表 CHCT;④系统设备表 SDT;实现都独占设备的分配。

同时,在系统中需要配置一张逻辑设备表 LUT,用于将逻辑设备名映射为物理设备名。
2. 设备分配时应考虑的因素
3. 独占设备的分配程序

6.5.4 逻辑设备名到物理设备名映射的实现

1. 逻辑设备表 LUT(Logicla Unit Table)
(1) 逻辑设备表(LUT)
逻辑设备名 物理设备名 驱动程序入口地址
/dev/tty 3 1024
/dev/print 5 2048
(2) 逻辑设备表的设置
整个系统只设一张LUT不允许有相同的逻辑设备名, 用在单用户系统中。
每个用户设一张LUT, 用户登录建立进程时,建立一张LUT并将该表放入该进程的PCB中,用在多用户系统中。
2.逻辑设备表的设备问题

6.6 用户层的I/O软件

一般而言,大部分的 I/O 软件都在操作系统内部,但仍有一小部分在用户层,包括系统调用、与用户程序链接在一起的库函数,以及完全运行于内核之外的假脱机系统等。

6.6.1 系统调用和库函数

1. 系统调用
2. 库函数

6.6.2 假脱机(Spooling)系统

如果说可以通过多道程序技术将一台物理CPU 虚拟为多台逻辑 CPU,从而允许多个用户共享一台主机,那么,通过 SPOOLing 技术便可将一台物理 I/O 设备虚拟为多台逻辑 I/O 设备,同样允许多个用户共享一台物理 I/O设备。

1. 假脱机技术
脱机输入、脱机输出技术。该技术是利用专门的外围控制机,先将低速I/O设备上的数据传送到高速磁盘上,或者相反。
事实上,当系统中引入了多道程序技术后,完全可以利用其中的一道程序,来模拟脱机输入时的外围控制机功能,把低速 I/O 设备上的数据传送到高速磁盘上;再用另一道程序来模拟脱机输出时外围控制机的功能,把数据从磁盘传送到低速输出设备上。这样,便可在主机的直接控制下,实现脱机输入、输出功能。此时的外围操作与 CPU 对数据的处理同时进行,我们把这种在联机情况下实现的同时外围操作称为 SPOOLing,或称为假脱机操作。
2. SPOOLing 系统的组成
1)输入井和输出井。这是在磁盘上开辟的两个存储空间。输入井是模拟脱机输入时的磁盘设备;输出井是模拟脱机输出时的磁盘。
2)输入缓冲区和输出缓冲区。为了缓和 CPU 和磁盘之间速度不匹配的矛盾,在内存中要开辟两个缓冲区:输入缓冲区和输出缓冲区。输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井。输出缓冲区用于暂存从输出井送来的数据,以后再传送给输出设备。
3)输入进程和输出进程。输入进程也称为预输入进程,用于模拟脱机输入时的外围控制机。输出进程也称为预输出进程,用于模拟脱机输出时的外围控制机。
4)井管理程序。用于控制作业与磁盘井之间信息的交换。当作业执行过程中向某台设备发出启动输入或输出操作请求时,由操作系统调用井管理程序,由其控制从输入井读取信息或将信息输出至输出井。
在这里插入图片描述

3. SPOOLing系统的特点
1)提高了I/O的速度。
2)将独占设备改造为共享设备。
3)实现了虚拟设备功能。
4. 假脱机打印机系统
打印机是经常要用到的输出设备,属于独占设备。利用 SPOOLing 技术,可将之改造为一台可供多个用户共享的设备,从而提高设备的利用率。主要有以下三部分:
1)磁盘缓冲区。用于暂存用户程序的输出数据。
2)打印缓冲区。缓和 CPU 和磁盘之间速度不匹配的矛盾,设置在内存中,暂存从磁盘缓冲区送来的数据。
3)假脱机管理进程和假脱机打印进程。由假脱机管理进程为每个要求打印的用户数据建立一个假脱机文件,并把它放入假脱机文件队列中,由假脱机打印进程依次对队列中的文件进行打印。
在这里插入图片描述

每当用户进程发出打印输出请求时,由假脱机管理进程完成两项工作:①在磁盘缓冲区中为之申请一个空闲盘块,并将要打印的数据送入其中暂存;②为用户进程申请一张空闲的用户请求打印表,并将用户的打印要求填入其中,再将该表挂到假脱机文件队列上。
真正的打印输出是假脱机打印进程负责的,当打印机空闲时,该进程首先从假脱机文件队列的队首摘取一张请求打印表,然后根据表中的要求将要打印的数据由输出井传送到内存缓冲区,再交付打印机进行打印。
5. 守护进程
除了假脱机打印机系统可以实现打印机共享,也可以为打印机建立一个守护进程。由守护进程执行一部分原来假脱机管理进程实现的功能。另一部分由请求进程自己完成,每个要求打印的进程先生成一份要求打印的文件,然后放入假脱机文件队列中。守护进程是按照目录中的文件依次来完成诸进程对该设备的请求的。

6.7 缓冲区管理

在现代操作系统中,几乎所有的I/O设备在与处理机交换数据时都用了缓冲区。
单缓冲区、双缓冲区、环形缓冲区、缓冲池。

6.7.1 缓冲的引入

6.7.2 单缓冲区和双缓冲区

1. 单缓冲区
块设备输入时, 输入到缓冲区的时间为T, OS将数据从缓冲区传到用户区的时间为M, CPU处理这块数据的时间为C; 显然T和C是可以并行的。
在这里插入图片描述

2. 双缓冲区
为了加快I/O速度提高设备利用率,又引入了双缓冲机制(缓冲对换 Buffer Swapping); 如果C<T, 块设备可连续输入。
在这里插入图片描述

6.7.3 环形缓冲区

1. 环形缓冲区的组成

I/O进程和计算进程对缓冲区的使用相当于生产者消费者问题, 当两者之间速度基本相匹配时,双缓冲能获得较好的效果, 但两者之间速度变化很大相差很远时效果不理想; 可将多个缓冲组成循环形式。以输入为例, 空缓冲区为R, 已装满数据的缓冲区为G, 正在使用的工作缓冲区为C, 使用时要考虑进程的同步:

2. 环形缓冲区的使用
在这里插入图片描述

3. 进程之间的同步问题
当计算进程要用缓冲区的数据时调用Getbuf(Nextg)过程, 将Nextg指示的缓冲区提供给计算进程使用, 并令Current 指针指向它的第一单元, Nextg 移向下一个G。

当输入进程要空缓冲区输入数据时调Getbuf(Nexti)过程,将Nexti指示的缓冲区供给输入进程, Nexti下移。

6.7.4 缓冲池(Buffer Pool)

1. 缓冲池的组成
空缓冲链队列emp:由空缓冲区组成
输入缓冲链队列inq:由装满输入数据的缓冲区组成
输出缓冲链队列out:由装满输出数据的缓冲区组成
4种工作缓冲区
收容输入、提取输入、收容输出、提取输出。
从某队列上取下来操作完后再挂到另一队列上
2. Getbuf过程和Putbuf过程
缓冲池中的队列是临界资源要考虑互斥与同步

Procedure Getbuf(q,buf);    从q队列头摘下缓冲区buf
   begin
       Wait(RS(q));               信号量RS(q)是队列q的长度
       Wait(MS(q));           MS(q)是对q操作的互斥信号量
       buf:=Takbuf(q);
       Signal(MS(q));
   end
Procedure Putbuf(q,buf);         buf加到q队列的队尾
   begin
       Wait(MS(q));
       Addbuf(q,buf);
       Signal(MS(q))
       Signal(RS(q));
   end

3. 缓冲区的工作方式

收容输入的工作方式:当输入进程需要输入数据时
调用Getbuf(emp,hin)过程, 从emp队列首摘下空缓
冲区作为收容输入工作缓冲区hin
(2) 把数据输入到工作缓冲区hin
(3) 调用Putbuf(inq,hin),将hin挂到inq队列尾

提取输入工作方式:当计算进程需要提取输入数据时
(1) 调用Getbuf(inq, sin)过程,从inq队列头摘下缓冲区
作为提取输入工作缓冲区sin
(2) 计算进程从工作缓冲区sin中提取数据
(3) 调用Putbuf(emp,sin), 将sin挂在emp队列尾

在这里插入图片描述

6.8 磁盘存储器的性能和调度

改善磁盘系统的性能:
1)选择好的磁盘调度算法,以减少磁盘的寻道时间。
2)提高磁盘 I/O 速度,以提高对文件的访问速度。
3)采取冗余技术,提高磁盘系统的可靠性,建立高度可靠的文件系统。

6.8.1 磁盘性能简述

1. 数据的组织和格式
磁盘设备可包括一个或多个物理盘片,每个磁盘片分一个或两个存储面(Surface),每个盘面上有若干个磁道(Track),磁道之间留有必要的间隙(Gap)。为使处理简单起见,在每条磁道上可存储相同数目的二进制位。 这样,磁盘密度即每英寸中所存储的位数,显然是内层磁道的密度较外层磁道的密度高。每条磁道又被逻辑上划分成若干个扇区(sectors),软盘大约为 8~32 个扇区,硬盘则可多达数百个,图中显示了一个磁道分成 8 个扇区。一个扇区称为一个盘块(或数据块),常常叫做磁盘扇区。各扇区之间保留一定的间隙。
在这里插入图片描述

磁盘上存储的物理记录块数目是由扇区数、磁道数以及磁盘面数所决定的。
为了在磁盘上存储数据,必须先将磁盘低级格式化。下图示出了一种温盘(温切斯特盘)中一条磁道格式化的情况。
在这里插入图片描述

其中每条磁道含有 30 个固定大小的扇区,每个扇区容量为 600 个字节,其中 512 个字节存放数据,其余的用于存放控制信息。
每个扇区包括两个字段:
1)标识符字段(ID Field),其中一个字节的 SYNCH 具有特定的位图像,作为该字段的定界符,利用磁道号(Track)、 磁头号(Head #)及扇区号(Sector #)三者来标识一个扇区;CRC 字段用于段校验。
2)数据字段(Data Field),其中可存放 512 个字节的数据。
值得强调的是,在磁盘一个盘面的不同磁道(Track)、每个磁道的不同扇区(Sector),以及每个扇区的不同字段(Filed)之间,为了简化和方便磁头的辨识,都设置了一个到若干个字节不同长度的间距(Gap,也称间隙)。
磁盘格式化完成后,一般要对磁盘分区。
但是,在真正可以使用磁盘前,还需要对磁盘进行一次高级格式化,即设置一个引导块、空闲存储管理、根目录和一个空文件系统,同时在分区表中标记该分区所使用的文件系统。
2. 磁盘的类型
对磁盘,可以从不同的角度进行分类。最常见的有:将磁盘分成硬盘和软盘、单片盘和多片盘、固定头磁盘和活动头(移动头)磁盘等。
1)固定头磁盘。在每条磁道上都有一读/写磁头,所有的磁头都被装在一刚性磁臂中。这种结构的磁盘主要用于大容量磁盘上。
2)移动头磁盘。每一个盘面仅配有一个磁头,也被装入磁臂中。为能访问该盘面上的所有磁道,该磁头必须能移动以进行寻道。广泛应用于中小型磁盘设备中,在微型机上配置的温盘和软盘都采用移动磁头结构。
3. 磁盘访问时间
1)寻道时间 Ts,这是指把磁臂(磁头)移动到指定磁道上所经历的时间。
2)旋转延迟时间 Tr,这是指定扇区移动到磁头下面所经历的时间。
3)传输时间 Tt,这是指把数据从磁盘读出或向磁盘写入数据所经历的时间。

6.8.2 早期的磁盘调度算法

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

1. 先来先服务 FCFS
根据进程请求访问磁盘的先后次序进行调度。
优点:简单, 公平;
缺点:效率低, 相临两次请求可能会造成最内到最外的柱面寻道, 使磁头反复移动, 增加了平均寻道时间
设磁盘访问序列: 80, 55, 58, 39, 18, 90,160,150, 38,184
在这里插入图片描述

2. 最短寻道时间优先
该算法选择这样的进程:其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短。但这种算法不能保证平均寻道时间最短。

优点:磁盘的平均寻道时间最小
缺点:进程"饥饿"现象, 有时会造成与当前磁道距离远的访问请求长期等待得不到服务(不公平)
在这里插入图片描述

6.8.3 基于扫描的磁盘调度算法

1. 扫描(SCAN)算法
SSTF算法可能导致优先级低(即不断出现的新进程所要访问的磁道与当前磁头的位置时钟较劲,使原本较远的进程一直得不到满足)的进程发生“饥饿”现象。
扫描算法不仅考虑到欲访问的磁道与当前磁道间的距离,更优先考虑的是磁头当前的移动方向。例如,当磁头正在自里向外移动时,SCAN 算法所考虑的下一个访问对象,应是其欲访问的磁道既在当前磁道之外,又是距离最近的。这样自里向外地访问,直至再无更外的磁道需要访问时,才将磁臂换向为自外向里移动。这时,同样也是每次选择这样的进程来调度,即要访问的磁道在当前位置内且距离最近者。
由于在这种算法中磁头移动的规律颇似电梯的运行,因而又常称之为电梯调度算法。

在这里插入图片描述

2. 循环扫描(CSCAN)算法
循环扫描算法是对扫描算法的改进。如果对磁道的访问请求是均匀分布的,当磁头到达磁盘的一端,并反向运动时落在磁头之后的访问请求相对较少。这是由于这些磁道刚被处理,而磁盘另一端的请求密度相当高,且这些访问请求等待的时间较长,为了解决这种情况,循环扫描算法规定磁头单向移动。例如,只自里向外移动,当磁头移到最外的被访问磁道时,磁头立即返回到最里的欲访磁道,即将最小磁道号紧接着最大磁道号构成循环,进行扫描。

在这里插入图片描述

3. NStepSCAN 和 FSCAN 调度算法
1)NStepSCAN算法。
在 SSTF、 SCAN 及 CSCAN 几种调度算法中,都可能会出现磁臂停留在某处不动的情况。例如,有一个或几个进程对某一磁道有较高的访问频率,即这个(些)进程反复请求对某一磁道的 I/O 操作,从而垄断了整个磁盘设备。我们把这一现象称为“磁臂粘着”。
NStepSCAN 算法是将磁盘请求队列分成若干个长度为 N 的子队列,磁盘调度将按 FCFS 算法依次处理这些子队列。而每处理一个队列时又是按 SCAN 算法,对一个队列处理完后,再处理其他队列。当正在处理某子队列时,如果又出现新的磁盘 I/O 请求,便将新请求进程放入其他队列,这样就可避免出现粘着现象。当 N 值取得很大时,会使 N 步扫描法的性能接近于 SCAN 算法的性能;当 N=1 时,N 步 SCAN 算法便蜕化为 FCFS 算法。
2)FSCAN 算法。
FSCAN 算法实质上是 N 步 SCAN 算法的简化,即 FSCAN 只将磁盘请求队列分成两个子队列。一个是由当前所有请求磁盘 I/O 的进程形成的队列,由磁盘调度按 SCAN 算法进行处理。在扫描期间,将新出现的所有请求磁盘 I/O 的进程,放入另一个等待处理的请求队列。这样,所有的新请求都将被推迟到下一次扫描时处理。

最后

请您阅读文章声明,默认同意该声明
打赏通道
请添加图片描述

  • 2
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

日星月云

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

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

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

打赏作者

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

抵扣说明:

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

余额充值