操作系统IO管理磁盘调度相关

磁盘结构

![[Pasted image 20241208133550.png]]

![[Pasted image 20241208133607.png]]

![[Pasted image 20241208133616.png]]

![[Pasted image 20241208133626.png]]

可用(柱面号、盘面号、扇区号)来定位任意一个磁盘块
文件数据存放在外存中的几号块,这个块号就可以转换成(柱面号,盘面号,扇区号)的地址形式
可根据该地址读取一个“块”

  1. 根据“柱面号”移动磁臂,让磁头指向指定柱面
  2. 激活指定盘面对应的磁头;
  3. 磁盘旋转的过程中,指定的扇区会从磁头下面划过,这样就完成了对指定扇区的读/写
2021

6.假设一个磁盘组有100个柱面(编号为0~99),每个柱面有16个磁道(又称盘面,编号为0~15),每个盘面有8个扇区(编号为0~7)。
现采用位示图方法管理磁盘空间,令磁盘块号按柱面顺序和盘面顺序编排。
请回答下列问题:

  1. 若采用32位的字构造位示图,共需要多少个字?
  2. 请计算:柱面号为 5,盘面号为2,扇区号为2的数据块对应的块号及其在位示图中的位置(字号和位号)

记:每个柱面上的磁道数×每个磁道上的扇区数=每个柱面上磁盘块数

  1. 已知块号,则磁盘驱动用的三地址:
    柱面号 = 块号 每个柱面上磁盘块数 柱面号 = \frac{块号}{每个柱面上磁盘块数} 柱面号=每个柱面上磁盘块数块号
    磁头号 = 块号 % 每个柱面上磁盘块数 每个磁道上的扇区数 磁头号 = \frac{块号\%每个柱面上磁盘块数}{每个磁道上的扇区数} 磁头号=每个磁道上的扇区数块号%每个柱面上磁盘块数
    扇区号 = ( 块号 % 每个柱面上磁盘块数 ) % 每个磁道上的扇区数 扇区号=(块号\%每个柱面上磁盘块数)\%每个磁道上的扇区数 扇区号=(块号%每个柱面上磁盘块数)%每个磁道上的扇区数
  2. 已知磁盘块物理地址,则磁盘块号:
    块号 = 柱面号 × ( 每个柱面上磁盘块数 ) + 磁头号 × 每个磁道上的扇区数 + 扇区号 块号 = 柱面号 \times(每个柱面上磁盘块数) + 磁头号\times每个磁道上的扇区数 + 扇区号 块号=柱面号×(每个柱面上磁盘块数)+磁头号×每个磁道上的扇区数+扇区号

b m a x = 100 × 16 × 8 = 12800 b_{max}=100 \times 16 \times 8=12800 bmax=100×16×8=12800
b m a x + 32 − 1 32 = 400 \frac{b_{max}+32-1}{32}=400 32bmax+321=400
2.
b = 5 × 16 × 8 + 2 × 8 + 2 = 658 b = 5 \times 16 \times 8 + 2 \times 8 + 2 = 658 b=5×16×8+2×8+2=658
658 32 = 20 \frac{658}{32}=20 32658=20
658 % 32 = 18 658\%32=18 658%32=18

2016

2.假设一个磁盘组有100个柱面,编号为0-99,每个柱面有32个磁道,编号为 0-31,每个盘面有16个扇区,编号为0-15,现采用位示图方法管理磁盘空间,令磁盘块号按柱面顺序和盘面顺序编排,请回答下列问题

  1. 若采用32位的字组成位示图,共需要多少个字?
  2. 第40字的第18位对应于哪个柱面,哪个读写磁头和哪个扇区?

100 × 32 × 16 / 32 = 1600 100 \times 32 \times 16 / 32=1600 100×32×16/32=1600
2.
i=40,j=18
b = 40 × 32 + 18 = 1298 b=40 \times 32+18=1298 b=40×32+18=1298
i = b 32 × 16 = 2 i = \frac{b}{32 \times 16 }=2 i=32×16b=2
j = b % ( 32 × 16 ) 16 = 17 j = \frac{b \% (32 \times 16)}{16}=17 j=16b%(32×16)=17
k = b % ( 32 × 16 ) % 16 = 2 k = b \% (32 \times 16)\%16=2 k=b%(32×16)%16=2

磁盘调度算法

![[Pasted image 20241208143709.png]]

为了减少对文件的访问时间,应采用一种最佳的磁盘调度算法,以使各进程对磁盘的平均访问时间最小。由于在访问磁盘的时间中主要是寻道时间,因此,磁盘调度的目标是使磁盘的平均寻道时间最少。目前常用的磁盘调度算法有先来先服务、最短寻道时间优先及扫描等算法。

  1. 先来先服务FCFS
    磁头当前位置
  2. 最短寻找时间优先SSTF
  3. 扫描算法SCAN(电梯调度算法)
    磁头移动方向往返迁回
  4. 循环扫描C-SCAN
    单向循环
  5. LOOK
    往返迁回不触碰边缘
  6. C-LOOK
    单向循环不触碰边缘
    ![[Pasted image 20241208145503.png]]
先来先服务FCFS

根据进程请求访问磁盘的先后顺序进行调度。
假设磁头的初始位置是100号磁道,有多个进程先后陆续地请求访问55、58、39、18、90、160、 150、38、184号磁道
按照FCFS的规则,按照请求到达的顺序,磁头需要依次移动到55、58、39、18、90、160、150、 38、184号磁道
![[Pasted image 20241208143959.png]]

磁头总共移动了45+3+19+21+72+70+10+112+146=498个磁道响应一个请求平均需要移动498/9=55.3个磁道(平均寻找长度)

  1. 优点:
    公平;如果请求访问的磁道比较集中的话,算法性能还算过的去
  2. 缺点:
    如果有大量进程竞争使用磁盘,请求访问的磁道很分散,则FCFS在性能上很差,寻道时间长。
最短寻道时间优先SSTF

SSTF算法会优先处理的磁道是与当前磁头最近的磁道。可以保证每次的寻道时间最短,但是并不能
保证总的寻道时间最短。(其实就是贪心算法的思想,只是选择眼前最优,但是总体未必最优)假设磁头的初始位置是100号磁道,有多个进程先后陆续地请求访问55、58、39、18、90、160、 150、38、184号磁道
![[Pasted image 20241208144205.png]]

磁头总共移动了(100-18)+(184-18)=248个磁道
响应一个请求平均需要移动248/9=27.5个磁道(平均寻找长度)

  1. 优点:
    性能较好,平均寻道时间短
  2. 缺点:
    可能产生“饥饿”现象
    Eg:本例中,如果在处理18号磁道的访问请求时又来了一个38号磁道的访问请求,处理38号磁道的访问请求时又来了一个18号磁道的访问请求。如果有源源不断的18号、38号磁道的访问请求到来的话,150、160、184号磁道的访问请求就永远得不到满足,从而产生“饥饿”现象。
扫描算法SCAN电梯调度算法

SSTF算法会产生饥饿的原因在于:磁头有可能在一个小区域内来回来去地移动。
为了防止这个问题,可以规定,只有磁头移动到最外侧磁道的时候才能往内移动,移动到最内侧磁道的时候才能往外移动。这就是扫描算法(SCAN)的思想。由于磁头移动的方式很像电梯,因此也叫电梯算法。
假设某磁盘的磁道为0~200号,磁头的初始位置是100号磁道,且此时磁头正在往磁道号增大的方向移动,有多个进程先后陆续地请求访问55、58、39、18、90、160、150、38、184号磁道
![[Pasted image 20241208144750.png]]

磁头总共移动了(200-100)+(200-18)=282个磁道
响应一个请求平均需要移动282/9=31.3个磁道(平均寻找长度)

  1. 优点:
    性能较好,平均寻道时间较短,不会产生饥饿现象
  2. 缺点:
    1. 只有到达最边上的磁道时才能改变磁头移动方向,事实上,处理了184号磁道的访问请求之后就不需要再往右移动磁头了
    2. SCAN算法对于各个位置磁道的响应频率不平均(如:假设此时磁头正在往右移动,且刚处理过 90号磁道,那么下次处理90号磁道的请求就需要等磁头移动很长一段距离;而响应了184号磁道的请求之后,很快又可以再次响应184号磁道的请求了)
LOOK调度算法解决SCAN缺点1

扫描算法(SCAN)中,只有到达最边上的磁道时才能改变磁头移动方向,事实上,处理了184号磁道的访问请求之后就不需要再往右移动磁头了。LOOK调度算法就是为了解决这个问题,如果在磁头移动方向上已经没有别的请求,就可以立即改变磁头移动方向。(边移动边观察,因此叫LOOK)
假设某磁盘的磁道为0~200号,磁头的初始位置是100号磁道,且此时磁头正在往磁道号增大的方向移动,有多个进程先后陆续地请求访问55、58、39、18、90、160、150、38、184号磁道
![[Pasted image 20241208145006.png]]

磁头总共移动了(184-100)+(184-18)=250个磁道
响应一个请求平均需要移动250/9=27.5个磁道(平均寻找长度)

  1. 优点:
    比起SCAN算法来,不需要每次都移动到最外侧或最内侧才改变磁头方向,使寻道时间进一步缩短
C-SCAN调度算法解决SCAN缺点2

SCAN算法对于各个位置磁道的响应频率不平均,而C-SCAN算法就是为了解决这个问题。规定只有磁头朝某个特定方向移动时才处理磁道访问请求,而返回时直接快速移动至起始端而不处理任何请求。
假设某磁盘的磁道为0~200号,磁头的初始位置是100号磁道,且此时磁头正在往磁道号增大的方向移动,有多个进程先后陆续地请求访问55、58、39、18、90、160、150、38、184号磁道
![[Pasted image 20241208145145.png]]

磁头总共移动了(200-100)+(200-0)+(90-0)=390个磁道
响应一个请求平均需要移动390/9=43.3个磁道(平均寻找长度)

  1. 优点:
    比起SCAN来,对于各个位置磁道的响应频率很平均。
  2. 缺点:
    只有到达最边上的磁道时才能改变磁头移动方向,事实上,处理了184号磁道的访问请求之后就不需要再往右移动磁头了;并且,磁头返回时其实只需要返回到18号磁道即可,不需要返回到最边缘的磁道。另外,比起SCAN算法来,平均寻道时间更长。
C-LOOK调度算法解决C-SCAN算法缺点

C-SCAN算法的主要缺点是只有到达最边上的磁道时才能改变磁头移动方向,并且磁头返回时不一定需要返回到最边缘的磁道上。C-LOOK算法就是为了解决这个问题。如果磁头移动的方向上已经没有磁道访问请求了,就可以立即让磁头返回,并且磁头只需要返回到有磁道访问请求的位置即可。
假设某磁盘的磁道为0~200号,磁头的初始位置是100号磁道,且此时磁头正在往磁道号增大的方向移动,有多个进程先后陆续地请求访问55、58、39、18、90、160、150、38、184号磁道
![[Pasted image 20241208145421.png]]

磁头总共移动了(184-100)+(184-18)+(90-18)=322个磁道
响应一个请求平均需要移动322/9=35.8个磁道(平均寻找长度)

  1. 优点:
    比起C-SCAN算法来,不需要每次都移动到最外侧或最内侧才改变磁头方向,使寻道时间进一步缩短

简答题

缓冲区

7.简述缓冲机制如何解决CPU和I/O之间的速度不匹配问题。
如果要输入数据,缓冲区满了怎么办。如果要输出数据,缓冲区为空怎么办。简述缓冲机制还有什么作用方式,并举例


  1. 缓冲机制就是开辟一块存储区域(缓冲区)。一般来说,缓冲区是内存空间的一部分,在内存中预留了一定的存储空间,用来暂时保存输入和输出等I/O操作的一些数据。以磁盘为例,CPU读取磁盘中的数据时先将磁盘的内容读入到内存,也就是缓冲区,然后CPU对缓冲区进行读取,进而操作数据;CPU对缓冲区的操作时间远远小于对磁盘的操作时间,大大的加快了数据交换速度。
  2. 缓冲区满了后,不允许再输入数据,需要由相应的设备或进程把缓冲区的数据全部读出,才能继续输入数据。同理,如果缓冲区为空,则无法输出数据,需要设备或写入进程向缓冲区写入数据,才能输出数据。
  3. 缓冲机制的作用方式有:单缓冲区,双缓冲区,环形缓冲区,缓冲池。
I/O系统

5.请将V/0子系统的层次结构填写完整,并填写对应事件发生在哪个层次
![[Pasted image 20241208150004.png]]

  1. 分配设备
  2. 保存CPU环境
  3. 用户操作设备
  4. 实现操作指令

  1. 用户层I/O接口
  2. 设备独立性软件
  3. 设备驱动程序
  4. 中断处理程序
    (1)设备独立性软件
    (2)中断处理程序
    (3)用户层1/0软件
    (4)设备驱动程序
DMA

4.简述DMA方式的操作流程


DMA方式的工作过程是:
CPU读写数据时,它给I/O控制器发出一条命令,启动DMA控制器,然后继续其他工作。
之后CPU就把控制操作委托给DMA控制器,由该控制器负责处理。
DMA控制器直接与存储器交互,传送整个数据块,每次传送一个字,这个过程不需要CPU参与。
当传送完成后,DMA控制器发送一个中断信号给处理器。因此只有在传送开始和结束时才需要CPU的参与。

设备管理

1.设备管理的目标是什么?设备管理包括哪些基本功能?


  1. 设备管理的目标:完成用户提出的V/O请求,为用户分配IV/O设备;提高CPU和I/O设备的利用率;提高I/O速度;以及方便用户使用I/O设备。基本功能:缓冲管理、设备分配和设备处理以及虚拟设备等。
  2. 向用户提供使用外部设备的方使、统一的接口,按照用户的要求和设备的类型,控制设备工作,完或用户的输入输出请求。方使是指用户能独立于具体设备的复杂物理特性而方便地使用设备;统一是指对不同设备尽量能统一操作方式。方便和统一要求对用户屏蔽实现具体设备I/O操作的细节,呈现给用户的是一种性能理想化的、操作简便的逻辑设备。系统的这种性能亦称为设备的独立性(设备无关性)
  3. 充分利用中断技术、通道技术和缓冲技术,提高CPU与设备、设备与设备间的并行工作能力,充分利用设备资源,提外部设备的使用效率。
  4. 设备管理就是要保证在多道程序环境下,当多个讲程竞争使用设备时,按照一定的宽略分配和管理设备,以使系统能有条不亲地工作
缓冲区

5.试解释为什么单缓冲情况下,系统对每一块数据的处理时间为Max(C,T),而双缓冲时为Max(C,T)?请绘出示意图。其中C为cpu对该块数据处理的时间,M 为操作系统将该缓冲区中的数据传送到用户的时间,T为从磁盘把一块数据输入到缓冲区的时间


在块设备输入时,假定从磁盘把一块数据输入到缓冲区的时间为T;操作系统将缓冲区数据传送给用户区的时间为M;而CPU对这一块数据进行计算得时间为C。
在单缓冲情况下,由于设备的输入操作和CPU的处理操作可以并行,所以系统对每一整块数据的处理时间为max(C,T)+M。
在双缓冲情况下,在设备输入时,先将数据送入第一缓冲区,装满后便转向第二缓冲区。此时操作系统可以从第一缓冲区移出数据,并送入用户进程。接着由CPU对数据进行计算。在双缓冲区中,不仅设备的输入操作和CPU的处理操作可以并行,设备的输入操作和数据的传送操作也可以并行,因此耗时大约为 max(C+M,T)。考虑到M是内存中数据块的“搬家”耗时,非常短暂可以省略,因此近似地认为是:max(C,T)。

SPOOLing

用SPOOLING技术共享打印机时,对所有提出请求的用户进程,系统接受他们的请求时,并不真正立即把打印机分配给它们,而是给他们两件事:

  1. 由输出进程在输出井中为他申请一个空闲缓冲区,并将要打印的数据送入其中
  2. 输出进程给用户进程申请一张空白的打印请求表,把用户的打印请求填入表里,再将该表挂到打印队列上。
    至此用户进程觉得它的打印进程已经完成,而不必等待满速的打印过程完成,当打印机空闲时,输出进程从打印表中取出一个打印请求表,将打印数据传进进程的输出井的内存缓冲区,再有打印机输出打印依次处理打印表中的缓冲数据,直到为空,系统将每个打印请求进程在输出井中分配一个存储区使得每个用户进程在逻辑上独占一个打印机,从而实现打印机共享。

IO控制方式

程序直接控制方式
  1. 完成一次读/写操作的流程(见右图,Keyword:轮询)
    ![[Pasted image 20241208203835.png]]

  2. CPU干预的频率
    很频繁,I/O操作开始之前、完成之后需要CPU介入,并且在等待I/O完成的过程中CPU需要不断地轮询检查

  3. 数据传送的单位
    每次读/写一个字

  4. 数据的流向
    读操作(数据输入):I/O设备→CPU→内存
    写操作(数据输出):内存→CPU→I/O设备
    每个字的读/写都需要CPU的帮助

  5. 主要缺点和主要优点
    优点:实现简单。在读/写指令之后,加上实现循环检查的一系列指令即可(因此才称为“程序直接控制方式”)
    缺点:CPU和I/O设备只能串行工作,CPU需要一直轮询检查,长期处于“忙等”状态,CPU利用率低。

中断驱动方式
  1. 完成一次读/写操作的流程(见右图,Keyword:中断)
    ![[Pasted image 20241208204158.png]]

  2. CPU干预的频率
    每次I/O操作开始之前、完成之后需要CPU介入。
    等待I/O完成的过程中CPU可以切换到别的进程执行。

  3. 数据传送的单位
    每次读/写一个字

  4. 数据的流向
    读操作(数据输入):I/O设备→CPU→内存
    写操作(数据输出):内存→CPU→I/O设备

  5. 主要缺点和主要优点
    优点:与“程序直接控制方式”相比,在“中断驱动方式”中,I/O控制器会通过中断信号主动报告I/O已完成,CPU不再需要不停地轮询。CPU和I/O设备可并行工作,CPU利用率得到明显提升。
    缺点:每个字在I/O设备与内存之间的传输,都需要经过CPU。而频繁的中断处理会消耗较多的CPU时间。

DMA方式
  1. 完成一次读/写操作的流程(见右图)
    ![[Pasted image 20241208204437.png]]

  2. CPU干预的频率
    仅在传送一个或多个数据块的开始和结束时,才需要CPU干预。

  3. 数据传送的单位
    每次读/写一个或多个块(注意:每次读写的只能是连续的多个块,且这些块读入内存后在内存中也必须是连续的)

  4. 数据的流向(不再需要经过CPU)
    读操作(数据输入):I/O设备→内存
    写操作(数据输出):内存→/O设备

  5. 主要缺点和主要优点
    优点:数据传输以“块”为单位,CPU介入频率进一步降低。数据的传输不再需要先经过CPU再写入内存,数据传输效率进一步增加。CPU和I/O设备的并行性得到提升。
    缺点:CPU每发出一条I/O指令,只能读/写一个或多个连续的数据块

Spooling

SPOOLING系统是对脱机输入输出工作的模拟,它必须有大容量的且可随机存取的存储器的支持。
主要思想:在联机的条件下,进行两个方向的操作,在数据输入时,将数据从输入设备传送到磁盘或磁带(块设备),然后把这些块设备与主机相连;反过来,在数据输出时,将输出数据传送到磁盘或磁带上,再从磁盘或磁带传送到输出设备。这样,可以将一台独占的物理设备虚拟为并行使用的多态逻辑设备,从而使该物理设备被多个进程共享。
![[Pasted image 20241208205030.png]]

缓冲区
  1. 用户编程时必须使用物理设备名,底层细节对用户不透明,不方便编程
  2. 若换了一个物理设备,则程序无法执行
  3. 若进程请求的物理设备正在忙碌,则即使系统中还有同类型的设备,进程也必须阻塞等待缓冲的引入
    引入缓冲区的原因有很多,可归结为以下几点:
  4. 缓和CPU与I/O设备间速度不匹配的矛盾
  5. 减少对CPU的中断频率,放宽对CPU中断响应时间的限制
  6. 解决数据粒度不匹配的问题
  7. 提高CPU和I/O设备之间的并行性。

单缓冲
过程:设备)——T——缓冲区——(M)——工作区——(C)——处理
处理一块数据平均耗时Max(C,T)+M
分析问题的初始状态:工作区满,缓冲区空

双缓冲

过程:设备)——T——缓冲区——(M)——工作区——(C)——处理
处理一块数据平均耗时Max(T, C+M)
分析问题的初始状态:工作区空,缓冲区满,另一个缓冲区空

双缓冲
根据单缓冲的特点,CPU在传送时间M内处于空闲状态,由此引入双缓冲。
I/O设备输入数据时先装填到缓冲区1,在缓冲区1填满后才开始装填缓冲区2,与此同时处理机可以从缓冲区1 中取出数据送入用户进程,当缓冲区1中的数据处理完后,若缓冲区2已填满,则处理机又丛缓冲区2中取出数据送入用户进程,而I/0设备又可以装填缓冲区1。
注意,必须等缓冲区2充满才能让处理机从缓冲区2取出数据。双缓冲机制提高了处理机和输入设备的并行程度。
为了研究双缓冲处理一块数据的用时,我们先规定一种初始状态:工作区是空的,其中一个缓冲区是满的,另外一个缓冲区是空的;我们不妨假设缓冲区2是空的,缓冲区是满的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值