操作系统(6)--IO管理和磁盘调度学习笔记

IO缓冲:在输入请求发出之前就开始执行输入传送,并且在输出请求发出一段时间之后才开始执行输出传送,这项技术成为缓冲;

执行IO的设备对象是:

1、块设备,可以随机访问,例如硬盘、闪存等;

2、流设备,必须顺序访问,例如串口和键盘;

块设备中最小的可寻址单位是扇区,一般为2的整数倍,最常见的是512。一般的扇区指设备最小寻址单元,块指文件系统最小寻址单元。下图是二者的关系,块包含一个或多个扇区,但大小不能超过一个页面,所以一个页可以容纳一个或多个内存中的块。

操作系统(6)--IO管理和磁盘调度学习笔记_第1张图片

缓冲区头:

每一个缓冲区都有一个描述符(struct buffer_head),包含了内核操作需要的所有信息,它的作用是描述磁盘块和物理内存间的映射关系。但在linux 2.6版本以后,多数IO操作都利用页高速缓存和页回写直接操作页面或地址空间,不再使用缓冲区头了。此后linux引入bio结构体代表IO操作,内核通过这两种结构体,保证每种结构所含的信息量尽量少。


页高速缓存:它指的是吧磁盘的数据缓存到物理内存中,把磁盘的访问变为对物理内存的访问。linux的写缓存策略是回写,写数据是写入内存,同时标记页面为“脏”,加入“脏列表”,然后由回写进程写会磁盘,最后清理脏标识。

flush线程会在空闲内存低于一个阈值、或脏页驻留时间过长,或用户主动调用sync(), fsync()时,将脏页回写。flush线程为多线程,一般于设备对应。


执行IO的三种技术

  1. 可编程IO:处理器代表一个进程给IO模块发送IO命令,该进程进入忙等待,直到操作完成才可以继续执行;
  2. 中断驱动IO:处理器代表进程给IO模块发送IO命令,有两种可能性:如果来自进程IO指令是非阻塞的,那么处理器继续执行发出后续指令,如果IO指令是阻塞的,那么处理器执行得下一条指令则来自操作系统,她将当前的进程设置为阻塞状态并且调度其他进程;
  3. 直接存储器访问(DMA):一个DMA模块控制内存和IO模块之间的数据交换,为传送一块数据,处理器给DMA模块发送请求,并且只有当整个数块传送借宿后,它才被中断;
IO调度:
为了优化寻址操作,内核会将请求合并排序,用以提高整体性能;调度策略有最终期限、预测、完全公正、空操作四种策略,最终降低了读响应时间,也降低了吞吐量。预计策略为linux缺省IO策略,除超大工作符合的服务(例如数据挖掘)效果不错;完全公平策略适用于多媒体环境;空操作适用于完全块设备,例如闪存卡;



DMA:

操作系统(6)--IO管理和磁盘调度学习笔记_第2张图片

DMA技术工作流程如下,当处理器想读或者写一块数据时,它通过DMA模块发送一下消息来给DMA模块发出一条命令:

  1. 是否请求读操作或写操作,通过在处理器和DMA模块之间使用读写控制线发送;
  2. 相关的IO设备地址,通过数据线传送;
  3. 从存储器中读或者往存储器中写的起始地址,在数据线上传送,并有DMA模块保存在其地址寄存器中;
  4. 读或写的字数,也是通过数据线传送,并有DMA模块保存在其数据计数寄存器中;
  5. 备注:DMA和IO模块之间的数据交互是脱离系统总线完成的;

系统总线:系统总线上传送的信息包括数据信息、地址信息、控制信息,因此,系统总线包含有三种不同功能的总线,即数据总线DB(Data Bus)、地址总线AB(Address Bus)和控制总线CB(Control Bus)

磁盘调度:

寻道时间(seek time): 磁头定位到磁道所需要的时间;

旋转延迟(rotational delay):磁头到达扇区开始位置的时间;

存取时间:寻道时间+旋转延迟;

目前正常机器的寻道时间小于10ms(其实也很慢啦)

磁盘调度算法:

操作系统(6)--IO管理和磁盘调度学习笔记_第3张图片

操作系统(6)--IO管理和磁盘调度学习笔记_第4张图片

  • SSTF:选择使磁头臂从当前位置开始移动最少的磁盘IO请求;
  • SCAN: 要求磁头臂仅沿一个方向移动,并在雨中满足所有未完成的氢气,知道它到达这个方向上的最后一个磁道,或者在这个方向上没有别的请求位置,偏向于最靠里或最靠外的磁道作业,并且偏爱最近的作业(重复地请求一个磁盘容易影响高密度多面磁盘);
  • C-SCAN:把扫描限定在一个方向上;
  • N-Step-Scan:把自盘请求队列分为长度为N的自队列,每一次用SCAN处理一个自队列;
  • FSCAN:使用两个子队列,一个处理请求,一个接受请求,两个队列轮流扫描;

磁盘高速缓存:
  • 目的:通过局部性原理,减小平均存储器存取时间;
  • 常用算法:LRU(置换在高速缓存中未被访问时间最长的快)和LFU(置换集合中被访问次数最少的块);


你可能感兴趣的:(操作系统(6)--IO管理和磁盘调度学习笔记)