论文部分内容阅读
在操作系统的I/O体系结构中,块I/O层是独立运行于文件系统以及磁盘存储设备之间的一个模块。该模块中的I/O调度算法通过对接收到的I/O请求执行合并以及排序操作能达到降低磁盘处理I/O时间的效果。然而,传统的I/O调度算法尤其是算法中的合并操作,在面对大量并发I/O请求访问磁盘块的情况时,会导致一定的时间开销进而影响系统性能。因此,如何在块I/O层中利用I/O调度算法对请求进行合理高效的重组成为目前磁盘优化的研究热点之一。本文针对上述特征以及存在问题,开展了基于块I/O层的I/O调度算法的研究,研究工作主要包含以下三个方面。首先,研究了块I/O层中I/O请求的分布情况。考虑到起始块号相近的I/O请求在物理地址上连续的可能性更大,且更有可能与同一个应用程序相关联,本文提出了一种基于自适应分区的I/O调度机制。该机制尝试将队列中的I/O请求按照起始块号进行分区,块号相似的请求将会被尽可能地分在同一个区间。分区完成以后再在每个分区内对I/O请求执行合并以及排序操作。与传统调度算法不同,本文新提出的机制所采用的分而治之的思想可以显著地降低因为预处理I/O请求而导致的时间开销。其次,在基于自适应分区的I/O调度机制的基础上,提出了一种合并判断策略。考虑到现有的完全合并操作可能会产生不少数据量过大的I/O请求,进而影响到I/O请求的平均响应时间,本文提出了一种全新的合并判断策略。该策略会评估当前I/O请求是否应该与其他连续I/O请求合并,如果符合约束条件则执行合并操作,如果不符合约束条件则不进行合并。与传统I/O调度算法中常用的合并机制相比,该策略可以有效地避免过大I/O请求的出现,保证了I/O请求间响应的公平性。然后,为了更合理地组织I/O请求,本文提出了一种基于优先级的I/O请求排序机制。该机制通过综合考虑请求的大小以及磁头移动距离这两个因素对I/O响应时间的影响,为每个I/O请求都设置了相应的优先级。在该机制中,所有的I/O请求都需要按照优先级进行排序并被调度。最后,为了验证所提出的优化方案的有效性,本文在Disksim模拟器上对新提出的改进方案进行了仿真实验。实验结果表明,新提出的改进方案不仅可以降低I/O完成时间,还有效地权衡了平均I/O响应时间和总体I/O完成时间,在一定程度上实现了对系统性能的改善。