OS复习——设备管理

OS复习——设备管理

1. I/O设备分类

没有找到确切的网络设备的定义,欢迎读者提供相关资料!

  • 字符设备:在I/O传输过程中以字符为单位存储、传输信息的设备,如键盘、打印机等。传输速率低、不可寻址。

  • 块设备:在I/O传输过程中以数据块为单位存储、运输信息的设备,如硬盘、U盘等。传输速率较高、可寻址(随机读写),每个块都有自己的地址,还可以在设备的任意位置读写一定长度的数据。

  • 网络设备

2. I/O端口地址

​ 接口电路中每个寄存器都具有唯一的地址,所有I/O端口地址形成I/O端口的地址空间,受OS保护。I/O指令形式与I/O地址是相互关联的,主要有以下形式:

  • 内存映像编址(内存映像I/O模式):控制器的内存/寄存器作为物理内存空间的一部分
  • I/O独立编址(I/O专用指令):Intel体系架构in/out指令

3. I/O控制技术

3.1 程序控制

​ 程序控制I/O,也称轮询或查询方式I/O,它由CPU代表进程向I/O模块发出指令, 然后进入忙等状态, 直到操作完成之后进程才能够继续执行。

工作过程:

  1. 应用程序提出了一个读数据的请求;

  2. 设备驱动程序检查设备的状态;

  3. 如果状态正常,就给设备发出相应的控制命令;

    1. 不断地去测试这个设备是否完成了这次执行过程,实际上就是一个轮询;
    2. 设备控制器完成操作,把数据送给应用程序;
    3. 应用程序继续进行相应的处理。

在这里插入图片描述

3.2 中断驱动

​ 中断驱动,当I/O操作结束后由设备控制器主动地来通知设备驱动程序说这次结束, 而不是设备驱动程序不断地去轮询看看设备的状态。

工作过程:

  1. 用户程序提出I/O请求;
  2. 设备驱动程序检查设备的状态;
  3. 如果设备已经准备好,那么就向设备发出控制命令;
  4. 将状态记录在设备状态表中,CPU继续其他工作;
  5. 设备完成工作后向CPU发中断信号,转入中断处理程序;
  6. 中断处理程序发现这是一个正常地完成了控制命令的信号后,把结构提交给设备管理程序;
  7. 设备管理程序会从设备状态表里查询是哪一个请求的完成;
  8. 把相应的数据送到应用程序;
  9. 通知应用程序可以据需执行。

在这里插入图片描述

3.3 直接内存访问(DMA)

工作过程:

  1. 由程序设置DMA控制器中的若干寄存器值(如内存始址,传送字节数),然后发起I/O操作;
  2. DMA控制器完成内存与外设的成批数据交换;
  3. 在操作完成时由DMA控制器向CPU发出中断。

DMA控制器中的寄存器:

  • 命令/状态寄存器(CR):用于接收从CPU发送来的I/O命令,或有关控制信息,或设备的状态。
  • 内存地址寄存器(MAR):在输入时,它存放把数据从设备传送到内存的起始目标地址;在输出时,它存放由内存到设备的内存源地址。
  • 数据寄存器(DR):用于暂存从设备到内存,或从内存到设备的数据。
  • 数据计数器(DC):存放本次CPU要读或写的字(节)数。

在这里插入图片描述

优点:

  • CPU只需干预I/O操作的开始和结束,而后续成批的数据读写则无需CPU控制,适于高速设备。

缺点:

  • 数据传送的方向、存放数据的内存地址及传送数据的长度等都由CPU控制,占用了CPU时间。
  • 每个设备占用一个DMA控制器,当设备增加时,需要增加新的DMA控制器。

3.4 通道技术(Channel)

​ I/O通道是专门负责输入输出的处理器,独立于CPU,有自己的指令体系。可执行由通常指令组成的通道程序,因此可以进行较为复杂的I/O控制。通道程序通常由操作系统所构造,放在内存里。

​ 优点:执行一个通道程序可以完成几组I/O操作,与DMA相比,减少了CPU干预。

​ 缺点:费用较高。

4. I/O软件的组成与分层设计

4.1 I/O相关软件的层次关系

在这里插入图片描述

分层设计思想

  • 把I/O软件组织成多个层次;
  • 每一层都执行OS所需的功能的一个子集,它依赖于更低一层所执行的更原始的功能,从而隐藏这些功能的细节;同时又给高一层提供服务;
  • 较低层更多的考虑硬件的特性,并向较高层软件提供接口;
  • 较高层不依赖于硬件,并向用户提供一个友好的、清晰的、简单的、功能更强的接口。

4.2 设备独立性

  • 为了实现设备独立性而引入了逻辑设备物理设备这两个概念,在应用程序中,使用逻辑设备名称来请求使用某类设备,而系统在实际执行时,还必须使用物理设备名称系统需具有将逻辑设备名称转换为某物理设备名称的功能,这非常类似于存储器管理所介绍的逻辑地址和物理地址的概念,在应用程序中使用的是逻辑地址,系统在分配和使用内存时,必须使用物理地址。
  • 设备独立性的优点
    • 设备分配时的灵活性,当进程以物理名称来请求使用指定设备时,如果该设备已经分配给其他进程或正在检修,而此时尽管还有几台其他的相同设备正在空闲,该进程仍然阻塞。但若进程能够以逻辑设备名称来请求某类设备时,系统可立即将该类设备中的任一台分配给进程,仅当所有此类设备全部分配完毕时,进程才会阻塞。
    • 易于实现I/O重定向,用于I/O操作的设备可以更换,而不必改变应用程序。例如,我们在调试一个应用程序时,可将程序的所有输出送往屏幕显示;而在程序调试完后,如需正式将程序的运行结果打印出来,此时便须将I/O重定向的数据结构——逻辑设备表中的显示终端改为打印机,而不必修改应用程序。
  • 逻辑设备名到物理设备名的映射
    • 逻辑设备表(LUT):系统必须设置一张逻辑设备表,用于将应用程序中所使用的逻辑设备名映射为物理设备名。该表的每个表目中包含了三项,逻辑设备名、物理设备名、设备驱动程序的入口地址。通过逻辑设备名,系统可以查找LUT,便可找到物理设备和驱动程序。
    • LUT的设置可以采用两种方式:
      • 整个系统中设置一张LUT(由于系统中所有进程的设备分配情况都记录在同一张LUT中,因而不允许在LUT中具有相同的逻辑设备名,这就要求所有用户都不能使用相同的逻辑设备名,多用户下难以做到,单用户很好实现)。
      • 为每个用户设置一张LUT(每当用户登录时,便为该用户建立一个进程,同时建立一张LUT,并将该表放入进程的PCB中)。

4.3 设备驱动程序

  • 设备密切相关的代码放在设备驱动程序中,每个设备驱动程序处理一种设备类型。设备驱动程序的任务是接受来自与设备无关的上层软件的抽象请求,并执行这个请求。每一个控制器都设有一个或多个设备寄存器,用来存放向设备发送的命令和参数。设备驱动程序负责释放这些命令,并监督它们正确执行
  • 设备驱动程序的组成
    • 自动配置和初始化子程序:检测所要驱动的硬件设备是否存在、是否正常。如果该设备正常,则对该设备及其相关的设备驱动程序需要的软件状态进行初始化。在初始化时被调用一次。
    • I/O操作子程序:调用该子程序是系统调用的结果。执行该部分程序时,系统仍认为是和调用进程属同一个进程,只是由用户态变成核心态。
    • 中断服务子程序:系统来接收硬件中断,再由系统调用中断服务子程序。因为设备驱动程序一般支持同一类型的若干设备,所以一般在系统调用中断服务子程序的时候,都带有一个或多个参数,以唯一标识请求服务的设备。
  • 驱动程序的接口
    • 驱动程序初始化函数:向操作系统登记该驱动程序的接口函数,该初始化函数在系统启动时安装入内核执行。
    • 驱动程序卸载程序申请设备函数释放设备函数
    • I/O操作函数:对独占设备,包含启动I/O的命令;对共享设备,将I/O请求挂入请求队列。
    • 中断处理函数:I/O完成做善后处理,一般是唤醒等待刚完成I/O求的阻塞进程,时期能进一步做后续工作;如果存在I/O请求队列,则启动下一个I/O请求。

5. 缓冲技术

5.1 使用缓冲技术的原因

  • 匹配CPU与外设的不同处理速度
  • 减少对CPU的中断次数
  • 提高CPU和I/O设备之间的并行性
  • 提高外设利用率

5.2 单缓冲

​ 每当用户进程发出一个I/O请求时,操作系统便在主存中为之分配一个缓冲区,T、M,C的定义见下图。由于T和C是可以并行的,当T>C时,系统对每一块数据的处理时间为M+T,反之,为M+C,系统对每一块数据的处理时间为Max(C,T) + M

在这里插入图片描述

5.3 双缓冲

​ 两个缓冲区,CPU和外设都可以连续处理而无需等待对方。要求CPU和外设的速度相近。在双缓冲时,系统处理一块数据的时间可以粗略地认为是Max(C+M,T),如果C<T,可使块设备连续输入,如果C>T,则可使CPU不必等待设备输入。

​ 其中关于粗略,通常CPU计算时间C和I/O时间T应该远大于内存拷贝的时间M,所以在强调双缓冲的作用时,可主要比较C和T,直接用这两个量的关系说明CPU和外设的互相等待情况。

在这里插入图片描述

5.4 环形缓冲

​ 若CPU和外设的处理速度差较大,双缓冲效果不够理想,因此引入了多缓冲机制,可将多个缓冲组织成循环缓冲形式。对于用作输入的循环缓冲,通常是提供给输入进程或计算进程使用,输入进程不断向空缓冲去输入数据,而计算进程则从中提取数据进行计算。

​ 循环缓冲区的组成如下:

​ 多个缓冲区,在循环缓冲区中包括多个缓冲区,每个缓冲区的大小相同,作为输入的多缓冲区可分为三种类型,用于装输入数据的空缓冲区R、已装满数据的缓冲区G以及计算进程正在使用的工作缓冲区C

​ 多个指针,作为输入的缓冲区可设置三个指针,用于指示计算进程下一个可用缓冲区G的指针Nextg指示输入进程下次可用的空缓冲区R的指针Nexti、以及用于指示计算进程正在使用的缓冲区C的指针Current

在这里插入图片描述

5.5 缓冲池

​ 上述的缓冲区仅适用于某特定的I/O进程和计算进程,因而它们属于专用缓冲。当系统较大时,将会有许多这样的循环缓冲,这样会消耗大量的内存空间,而且利用率不高,为了提高缓冲区的利用率,引入缓冲池,在池中设置了多个可供若干个进程共享的缓冲区。对于既可以用于输出的公用缓冲区,其中至少包含有以下三种类型的缓冲区:空(闲)缓冲区、装满输入数据的缓冲区和装满输出数据的缓冲区。

​ 为了管理方便,将相同类型的缓冲区链成一个队列,形成了:空缓冲队列emq,输入队列inq,输出队列outq。

在这里插入图片描述

​ 缓冲区可以工作在收容输入、提取输入、收容输出、提取输出四种工作方式下。

在这里插入图片描述

  • 收容输入:在输入进程需要输入数据时,便调用Getbuf(emp)过程,从空缓冲队列的队首取出一个空缓冲区,把它作为收容输入工作缓冲hin,然后,把数据输入其中,装满后再调用Putbuf(inq, hin)过程,将该缓冲区挂在输入队列上。
  • 提取输入:当计算进程需要输入数据时,调用Getbuf(inq)过程,从输入队列队首取出一个缓冲区,作为提取输入工作缓冲区sin,计算进程从中提取数据,计算进程用完该数据后,再调用Putbuf(emq, sin)过程,将该缓冲区挂到空缓冲队列emq上。
  • 收容输出:当计算进程需要输出时,调用Getbuf(emq)过程从空缓冲区队列emq的队首取出一
    个空缓冲区,作为收容输出工作缓冲区hout,当其中装满输出数据后,又调用Putbuf(outq, hout)过程,将该缓冲区挂在outq末尾。
  • 提取输出:由输出进程调用Getbuf(outq)过程,从输出队列队首取出一个装满输出数据的缓冲区,作为提取输出工作缓冲区sout,在数据提取完后,再调用Putbuf(emq, sout)过程,将该缓冲区挂在空缓冲队列末尾。

6. SPOOLing技术

​ 利用假脱机技术(SPOOLing),也称为虚拟设备技术可把独享设备变成具有共享特征的虚拟设备,从而提高设备利用率。在多道程序系统中,专门利用一道程序(SPOOLing程序)来完成对设备的I/O操作。

SPOOLing程序和外设进行数据交换,SPOOLing程序预先从外设读取数据并加以缓冲,在以后需要的时候输入到应用程序;SPOOLing程序接受应用程序的输出数据并加以缓冲,在以后适当的时候输出到外设。

应用程序进行I/O操作时,只是和SPOOLing程序交换数据,可以称为“虚拟I/O”。应用程序实际上是从SPOOLing程序的缓冲池中读出数据或把数据送入缓冲池,而不是跟实际的外设进行I/O操作。

​ SPOOLing系统由三部分组成:

输入井和输出井,这是在磁盘上开辟的两个大存储空间。输入井是模拟脱机输入时的磁盘设备,用于暂存I/O设备输入的数据,输出井是模拟脱机输出时的磁盘,用于暂存用户程序和输出数据。

输入缓冲区和输出缓冲区,缓和CPU与磁盘之间速度不匹配,在内存中开辟的两个缓冲区,输入缓冲区用于暂存由输入设备送来的数据,以后再传送到输入井,输出缓冲区用于暂存从输出井送来的数据,以后再传送给输出设备。

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

在这里插入图片描述

​ SPOOLing技术的特点

高速虚拟I/O操作:应用程序的虚拟I/O比实际I/O速度提高,缩短应用程序的执行时间(尽快完成计算,并释放占用的计算机资源)。另一方面,程序的虚拟I/O操作时间和实际I/O操作时间分离开来。

实现对独享设备的共享:由SPOOLing程序提供虚拟设备,可以对独享设备依次共享使用。

7. 磁盘存储管理

7.1 磁盘的工作原理

  • 基本概念:
    • 扇区:扇片被分成许多扇形的区域。
    • 磁道:盘点上以盘片中心为圆心,不同半径的同心圆。
    • 柱面:磁盘中,不同盘片相同半径的磁道所组成的圆柱。
    • 每个磁盘有两个面,每个面都有一个磁头。

在这里插入图片描述

  • 磁盘的组织
    • 读一个扇区需要“柱面/磁头/扇区”三个参数;
    • 现代磁盘驱动器可以看做一个一维的逻辑块的数组,逻辑块是最小的传输单位;
    • 一维逻辑块数组按顺序映射到磁盘的扇区。
      • 扇区0是最外面柱面的第一个磁道第一个扇区;
      • 该映射是先按磁道内扇区顺序,再按柱面内磁道顺序,再按从外到内的柱面顺序来排序的。
    • 绝大多数磁盘都有一些缺陷扇区,因此映射必须用磁盘上的其他空闲扇区来替代这些缺陷扇区。对于磁盘,每个磁道的扇区数并不是常量。

7.2 磁盘访问时间

  • 寻道时间Ts:这是把磁臂(磁头)从当前位置移动到指定磁道上所经历的时间。该时间是启动磁盘的时间s磁头移动n条磁道所花费的时间之和。Ts=m*n+s。式中,m是一常量,它与磁盘驱动器的速度有关。
  • 旋转延迟时间Tr:这是指定扇区移动到磁头下面所经历的时间。对于硬盘,典型的旋转数据为3600r/min,每转需时16.7ms,平均旋转延迟时间Tr为8.3ms。对于软盘,其旋转速度为300或600r/min,这样,平均Tr为50~150ms。Tr=1/(2r),r为转速
  • 传输时间Tt:这是指把数据从磁盘读出,或向磁盘写入数据所经历的时间,Tt的大小与每次所读/写的字节数b旋转速度r(以秒计),以及磁道上的字节数N有关。Tt=b/(rN)
  • Ta=Ts+1/(2r)+b/(rN),访问时间=寻道时间+旋转延迟时间+传输时间
  • 在访问时间中,寻道时间旋转延迟时间占据了访问时间的大头,且基本上都与所读/写数据的多少无关。可见,适当地集中数据(不要太零散)传输,将有利于提高传输效率。

7.3 磁盘调度算法

7.3.1 先来先服务

  • 算法思想:按访问请求到达的先后次序服务;
  • 优点:简单、公平;
  • 缺点:效率不高,相邻两次请求可能会造成最内到最外的柱面寻道,使磁头反复移动,增加了服务时间,对机械也不利。

7.3.2 最短寻道时间优先

  • 算法思想:优先选择距当前磁头最近的访问请求来进行服务,主要考虑寻道优先;
  • 优点:改善了磁盘平均服务时间;
  • 缺点:可能产生“饥饿”现象,造成某些访问请求长期等待等不到服务。

7.3.3 扫描(SCAN)算法

  • 算法思想:当有访问请求时,磁头按一个方向移动,在移动过程中对遇到的访问请求进行服务,直到磁头步进到最内(最外)侧磁道调转扫描方向;
  • 优点:克服了最短寻道优先的缺点,既考虑了距离,同时又考虑了方向;
  • 缺点:但是由于是摆动式的扫描方法,两侧磁道被访问的频率仍低于中间磁道。

7.3.4 循环扫描(C-SCAN)算法

  • 算法思想:
    • 按照所要访问的柱面位置的次序去选择访问者;
    • 移动臂到达最后一个柱面后,立即带动读写磁头快速返回到0号柱面;
    • 返回时不为任何的等待访问者服务;
    • 返回后可再次进行扫描。
  • 优点:消除了对两端磁道请求的不公平

7.4 提高I/O速度的主要途径

  • 选择性能好的磁盘
  • 并行化
  • 采用适当的调度算法
  • 设置磁盘高速缓冲区:利用内存中的存储空间,暂存从磁盘中读出的一系列盘块中的信息。
    • 磁盘高速缓存的形式:
      • 在内存中开辟一个单独的存储空间作为磁盘高速缓存,其大小是固定的;
      • 把所有未利用的内存空间变为一个缓冲池,供请求分页系统和磁盘I/O(作为磁盘高速缓存)共享
    • 数据交付:将磁盘高速缓存中的数据传送给请求者进程。有以下两种形式:
      • 直接支付:直接将高速缓存中的数据,传送到请求者进程的内存工作区中。
      • 指针交付:只将指向高速缓存中某区域的指针,交付给请求者进程。
    • 置换算法(LRU)
    • 周期性写回:周期性地把所有在高速缓存中已修改的盘块数据写回磁盘。
  • 优化数据布局
    • 优化物理块的分布:连续摆放,使磁头的移动距离最小,比如:安排一个文件的两块数据块在同一磁道,消除磁头在磁道间的移动。
    • 优化索引节点的分布:访问文件时,先访问索引节点,然后再去访问盘块;将磁盘上的所有磁道分成若干组,在每个组中都含有索引节点、盘块和空闲盘块表,使得索引节点盘块与存放文件的盘块间距离最小(如:Linux的磁盘文件逻辑结构)
  • 提前读:顺序访问时,常采用提前读入下一块到缓冲区中
  • 延迟写:将本应立即写回磁盘的数据挂到空闲缓冲区的队列的末尾。直到该数据块移到链头时才将其写回磁盘,再作为空闲区分配出去。
  • 虚拟盘:利用内存空间去仿真磁盘(RAM盘)。虚拟盘与磁盘高速缓存的主要区别在于:虚拟盘中的内容完全由用户控制,而高速磁盘缓冲区中的内容是由OS控制的。

7.5 RAID技术

以上部分内容引自课件和《操作系统使用教程(第三版)》,如有侵权,请及时联系我删除!

猜你喜欢

转载自blog.csdn.net/NickHan_cs/article/details/106556255