块设备是能随机存取装置固定大小的数据表设备。如硬盘;字符设备(如串口和键盘)它是按照字符流进入有序进行。不同之处在于是否足够的随机存取数据——这时候,你可以随心所欲地从一个位置跳到访问设备和位置。复杂多,实际上内核在块设备上下了大工夫——块I/O层。
基础概念
- 块设备中最小的可寻址单元是扇区。
- 文件系统的最小寻址单元是块。
- 所谓的缓冲区是块在内存中的表示。
- 对于一个缓冲区(块),内核须要知道它的控制信息。这时须要一个结构进行描写叙述——缓冲区头。
该排序算法类似于电梯调度——电梯不能任意地从一层跳到还有一层,它应该向一个方向移动。当抵达了同一方向上的最后一层后,再掉头向还有一个方向移动。所以I/O调度程序称作电梯调度。
另外出了排序,合并也是一种降低磁盘寻址时间的方法。合并是将两个或多个请求结合成一个新请求,这样将多次请求的开销压缩成一次请求的开销,更重要的是,请求合并后仅仅须要传递给磁盘一条寻址命令。就能够訪问到请求合并前必须要多次寻址才干訪问完的磁盘区域,总之降低了磁盘寻址次数。
排序。降低寻址时间。而合并,降低寻址次数,二者共同作为I/O调度程序的准则。
- 假设队列中已存在一个对相邻磁盘扇区操作的请求。那么新请求将和这个已经存在的请求合并成一个请求。
- 假设队列中存在一个驻留时间过长的请求,那么新请求将被插入到队列尾部,以防止其它旧的请求饥饿发生。
- 假设队列中以扇区方向为序存在合适的插入位置。那么新的请求将被插入到该位置,保证队列中的请求是以被訪问磁盘物理位置为序进行排列的。
- 假设队列中不存在合适的请求插入位置。请求将被插入到队列尾部。
在最后期限I/O调度中。每一个请求都有一个超时时间,默认情况下。读请求的超时时间是500ms。写请求的是5s,最后期限I/O调度请求类似于Linus电梯,也以磁盘物理位置为次序维护请求队列,这个队列称为排序队列。当一个新请求递交给排序队列时,最后期限I/O调度程序在执行合并和插入请求时类似于Linus电梯,可是最后期限I/O同一时候也会以请求类型为根据将它们插入到额外队列中。
读请求按次序被插入到特定的读FIFO队列中,写请求按次序插入到特定的写FIFO队列中,尽管普通队列以磁盘扇区为序进行排列。可是这些队列是以FIFO(以时间为序)组织的,结果新队列总是被增加到队列尾部,对于普通操作来说。最后期限I/O将请求从排序队列头部取下。再推入到派发队列,由派发队列将请求提交给磁盘驱动。从而保证了最小化的请求寻址。
而最后期限I/O的超时体如今读写FIFO队列头的请求超时时。调度程序便会提取请求进行服务。这样不用操心有请求不能得到服务的不公平现象。
这样的预測依靠一系列的启示和统计工作。
版权声明:本文博主原创文章。博客,未经同意不得转载。