CFQ 算法使用基于发出请求的进程的 I/O 优先级的有序队列集。这意味着有一个优先级进程队列,比如说,1,另一个优先级 2,等等。
我知道该算法从每个队列中获取第一个请求,对它们进行排序(以避免不必要的头部移动)并将它们放入调度队列以进行处理。但是由于一个请求可以有很多块要读取(不一定是连续的),这种排序怎么可能呢?我的意思是,如果我有:
Request1 = [1,2,345,6,423]
和
Request2 = [3,4,2344,664]
作为 [a,b,c] 块 a、b 和 c 的列表,如何将请求 1 和 2 放入调度队列?如您所见,它们有一个非空的交叉点(例如,第 6 块在第 3 块和第 4 块之后)
我不明白的另一件事是,由于一个请求可以有多个要读取的块,所以在其中进行了什么样的调度?FCFS?还是它订购积木?
例如,假设我们有一个包含以下要读取的块列表的请求:
[1,23,5,76,3]
算法将如何处理这个问题?
通过 FCFS:
[1,23,5,76,3]
或通过对块进行排序:
[1,3,4,23,76]
也许我不理解算法,找不到足够的文档。如果有人有更详细解释的论文链接,请参考我。