操作系统精髓与设计原理学习笔记九:IO管理和磁盘调度

输入/输出可能是操作系统设计中最困难的部分。这是因为存在许多不同的设备和它们的应用,因此很难有一个通用、一致的解决方案。

缓冲功能是操作系统提供的一种基本IO服务,它可以提升整体性能。


一、IO设备,IO功能的组织

1 执行IO的三种技术:

1)程序控制IO:处理器代表一个进程给IO模块发送一个IO指令;该进程进入忙等待,直到操作完成才可以继续执行

2)中断驱动IO:处理器代表进程向IO模块发出一个IO命令。有两种可能性:如果来自进程的IO指令是非阻塞的,那么处理器继续执行发出IO命令的进程的后续指令。如果IO指令是阻塞的,那么处理器执行的吓一跳指令则来自操作系统,它将当期的进程设置为阻塞态,并且调度其他进程。

3)直接存储器访问(DMA):一个DMA模块控制内存和IO模块之间的数据交换。为传送一块数据,处理器给DMA模块发请求,并且只有当整个数据库传送结束后,它才被中断。

越来越多的IO功能可以再没有中央处理器参与的情况下执行。中央处理器逐步从IO任务中解脱出来,从而提高了性能。

2 直接存储器访问:

DMA单元能够模拟处理器,而且实际上能够像处理器一样获得系统总线的控制权。

DMA技术工作流程如下:当处理器想读或写一块数据时,它通过向DMA模块发送信息来给DMA模块发送一条指令。然后处理器继续执行其他工作,测试它已经把这个IO操作委托给DMA模块。DMA模块直接从存储器中或往存储器中传送整块数据,一次传送一个字,并且数据不再需要通过处理器。传送结束后,DMA模块给处理器发送一个中断信号。因此,只有在传送开始和结束时才会用到处理器。

DMA模块与处理器、内存所共享的系统总线,仅仅用于DMA模块同内存交换数据以及同处理器交换控制信号。


二、操作系统设计问题

在设计IO机制时,有两个重要的目标:效率通用性。效率是重要的,这是因为IO操作通常是计算机系统的瓶颈。与内存和处理器相比,大多数IO设备速度都是非常低的。解决这个问题的一种方法是多道程序设计,多道程序设计允许在一个进程执行的同时其他一些进程在等待IO操作。

另一个重要目标是通用性,这意味着从两个方面都需要统一,一个是处理器看待IO设备的方式,另一个是操作系统管理IO设备和IO操作的方式。目前所能做的就是用一种层次化、模块化的方法设计IO功能。使得用户进程和操作系统高层可以通过诸如读、写、打开、关闭、枷锁和解锁等一些通用的函数来操作IO设备。

分层的原理是,操作系统的功能可以根据其复杂性、特征时间尺度和抽象层次来分开。按照这个方法,可以讲操作系统组织分成一系列层次。每一层都执行操作系统所需要的功能的一个相关自己,它以来于更低一层所执行的更原始的功能,从而可以隐藏这些功能的细节。同时,它又给高一层提供服务。

用户进程-》逻辑IO-》设备IO-》调度和控制

用户进程-》目录管理-》文件系统-》物理组织-》设备IO-》调度和控制

1)逻辑IO:逻辑IO模块把设备当做一个逻辑资源来处理,它并不关心实际控制设备的细节。

2)设备IO:请求的操作和数据(缓冲的数据、记录等)被转换成适当的IO指令序列、通道命令和控制器命令。可以利用缓冲技术来提高利用率。

3)调度和控制:IO操作的排队、调度实际上发生在这一层。因此,在这一层处理中断,收集并报告IO状态。这一层与IO模块和设备硬件真正发生交互的软件层。


三、IO缓冲

*如果一个进程发出一个IO命令并被挂起等待结果,然后在开始IO操作之前被换出,那么该进程被阻塞,其等待IO事件的发生;此时,IO操作也被阻塞,它等待该进程被换入。

为了避免死锁,在发出IO请求之前,参与IO操作的用户存储空间必须被立即锁定在内存中,即使这个IO操作正在排队,并且在一段时间内不会被执行。同样的考虑,如果一个数据块从用户进程序区域被直接传送到一个IO模块,那么在传送过程中,该进程被锁定,并且不会被换出。

为了避免这些开销和低效操作,有时为了方便起见,在输入请求发出前就开始执行输入传送,并且在输出请求发出一段时间之后才开始执行输出传送,这项技术称为缓冲。

 两类IO设备:面向块的IO设备和面向流的IO设备。面向块的设备将信息保存在块中,块的大小通常是固定的,传送过程中一次传送一块。通常可以通过块号访问数据。磁盘和USB智能卡都是面向块的设备。面向流的设备以字节流的方式输入输出数据,没有块结构。终端、打印机、通信端口、鼠标等属于面向流的设备。

1 单缓冲

当用户进程发出IO请求时,操作系统给该操作分配一个位于内存中系统部分的缓冲区。

对于面向块的设备,输入传送的数据被放到系统缓冲区中。当传送完成时,进程把该块移到用户空间,并立即请求另一块。这称为预读或预先输入。这样做的原因是期望这块数据最终会被使用。

类似的考虑也可以用于面向块的输出。当准备将数据发送到一台设备时,首先把这些数据从用户空间复制到系统缓冲区,其最终是从系统缓冲区中被写出的。发请求的进程现在可以自由地继续执行,或者在必要的时候换出。

对于面向流的IO,单缓冲方案能以每次传送一行的方式或者每次传送一个字节的方式使用。对于每次传送一行的IO,可以用缓冲区保存单独一行数据。在输入期间用户进程被挂起,等待整行的到达。对于输出,用户进程可以把一行输出放置在缓冲区中,然后继续执行。它不需要挂起,除非在第一次输出操作的缓冲区内容清空之前,又需要发送第二行输出。

2 双缓冲

作为对单缓冲方案的改进,可以给操作分配两个系统缓冲区。在一个进程往一个缓冲区中传送数据(从这个缓冲区中取数据)的同时,操作系统正在清空(或者填充)另一个缓冲区,这种技术称为双缓冲或交换缓冲。

3 循环缓冲

4 缓冲的作用

缓冲室用来平滑IO需求的峰值的一种技术,但是当进程的瓶颈需求大于IO设备的服务能力时,缓冲再多也不能让IO设备与这个进程一直并驾齐驱。即使有多个缓冲区,所有的缓冲区终将会被填满,进程在处理完每一大块数据后不得不等待。

但是,在多道程序设计环境中,当存在多种IO活动和多种进程活动时,缓冲是提供操作系统效率和当进程性能的一种方法。


四、磁盘调度

处理器速度和内存速度的提高远远超过了磁盘访问速度的提高,处理器和内存的速度提高了两个数量级,而磁盘访问速度只提高了一个数量级。其结果是当前磁盘的速度比内存至少慢了4个数量级。

1 磁盘的性能参数

为了读或写,磁头必须定位于指定的磁道和该磁道中指定的扇区的开始处。

磁头定位到磁道所需要的时间称为寻道时间。磁头到达扇区开始位置的时间称为旋转延迟存取时间=寻道时间+旋转延迟。

一旦磁头定位完成,磁头就通过下面旋转的扇区,开始执行读操作或写操作,这正是操作的数据传送部分。传输所需要的时间是传输时间

除了存取时间和传输时间外,一次磁盘IO操作通常还会有一些排队延迟。当进程发出一个IO请求时,它首先必须在一个队列中等待该设备可用。在合适的时候,该设备被分配给这个进程。如果该设备与其他磁盘驱动器共享一个IO通道或一组IO通道,还可能需要额外的等待时间,直到通道可用。

2 磁盘调度策略

1)先进先出

2)优先级

3)最短服务时间优先

4)SCAN


五、RAID

辅存性能的提高速度远远低于处理器和内存性能的提高速度,这种不匹配使得磁盘存储系统可能成为提高整个计算机系统性能的主要关注点。

如果使用一个组件对性能的影响有限,那么可以通过并行使用多个组件来获得额外的性能提高。在磁盘存储器的情况下,这就导致了独立并行运行的磁盘阵列的开发。通过多个磁盘,多个独立的IO请求可以并行的进行处理,只要他们所需要的数据驻留在不同的磁盘中。

在使用多个磁盘时,有很多种方法可以用于组织数据,并且可以通过增加冗余度来提高可靠性。关于磁盘数据库设计已经形成了一个标准方案,称为独立磁盘冗余阵列(RAID)

RAID是一组物理磁盘驱动器,操作系统把它视为一个单个的逻辑驱动器;

数据分布在物理驱动器阵列中,这种设计称为条带化;

使用冗余的磁盘容量保存奇偶校验信息,从而保证当一个磁盘失效时,数据具有恢复性。

RAID策略用多个小容量驱动器代替大容量磁盘驱动器,并且以这样的一种方式分布数据,使得能同时从多个驱动器访问数据,因而提高了IO的性能,并能够更容易地增加容量。

四种常用的RAID:RAID0,RAID1,RAID5,RAID6

1)RAID0:对于RAID0,用户数据和系统数据分布在阵列的所有磁盘中,当两个不同的IO请求为两款不同的数据挂起时,很有可能被请求的块在不同的磁盘上,吟哦这两个请求可以并行发出,从而减少了IO排队的等待时间。

2)RAID1:通过临时复制所有数据来实现冗余。缺点是要两倍于所支持的逻辑磁盘空间。

3)RAID5:把奇偶校验条带分布在所有的磁盘中。


六、磁盘高速缓存

高速缓冲存储器通常指一个比内存小且比内存块的存储器,这个存储器位于内存和处理器之间。这种高速缓冲存储器通过利用局部性原理,可以减小平均存储器存取时间。

同样的原理可以用于磁盘存储器。特别地,一个磁盘高速缓存是内存中为磁盘扇区设置的一个缓冲区,它包含有磁盘中某些扇区的副本。当出现一个请求某一特定扇区的IO请求时,首先进行检测,以确定该扇区是否在磁盘高速缓存中。如果在,则该请求可以通过这个高速缓存来满足;如果不在则把被请求的扇区从磁盘读到磁盘高速缓存中。

由于访问的局部性现象的存在,当一块数据被取入道速缓存以满足一个IO请求时,很有可能将来还会访问到这一块数据。

1 设计考虑因素

1)当一个IO请求从磁盘高速缓存中得到满足时,磁盘高速缓存中的数据必须传送到发送请求的进程。

2)置换策略:当一个新扇区被读入磁盘高速缓存时,必须置换出来一个已存在的块。最近最少使用算法,最不常使用页面置换算法。

2 性能考虑因素

高速缓存的性能问题可以简化成是否可以达到某个给定的命中率。命中率主要是关于磁盘高速缓存大小的函数。


七、小结

计算机系统和外部世界的接口时它的IO体系结构。IO体系结构的设计目标是提供一种系统化的方法来控制与外部事件的交互,并且给操作系统提供有效地管理IO所需要的信息。

IO功能通常划分成很多层,比较低的层处理与物理功能相关的细节,比较高的层以一种逻辑和通用的方式处理IO。其结果是硬件参数的变化不需要影响大多数IO软件。

IO的一个重要方面是使用缓冲区。缓冲区由IO实用程序控制,而不是由应用程序进程控制。缓冲可以平滑计算机系统内部速度和IO设备速度之间的差异。

磁盘IO对整个系统性能产生重要影响。为了提高磁盘IO的性能,实用最广泛的两种方法是磁盘调度和磁盘高速缓存

磁盘高速缓存是一个缓冲区,通常保存在内存中,充当磁盘块在磁盘存储器和其余内存之间的高速缓存。




  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值