使用 java.util.Comparator处理SSTF
算法
这是我目前所拥有的:
private int nextHeadPosition;
public SSTF(int currentHeadPosition) {
nextHeadPosition = currentHeadPosition;
}
@Override
public int compare(DiskRequest r1, DiskRequest r2) {
if (nextHeadPosition - r1.getTrackNumber() < nextHeadPosition - r2.getTrackNumber()) {
nextHeadPosition = r1.getTrackNumber();
return -1;
} else if (nextHeadPosition - r1.getTrackNumber() > nextHeadPosition - r2.getTrackNumber()) {
nextHeadPosition = r2.getTrackNumber();
return 1;
} else {
return 0;
}
}
初始头部位置为 50,它正在生成以下订单:
[100, 99, 50, 45, 44, 1]
我试图产生的输出:
[50, 45, 44, 1, 99, 100]
这可能不适用于比较器
编辑
SSTF
对于具有磁道编号的请求队列,要服务的第一个请求将是最接近磁头当前位置的磁道。每个后续请求都将按距最后一个请求位置的最小距离排序。
因此对于具有磁道[100, 99, 50, 45, 44, 1]
且当前磁头位置为 50 的队列,第一个请求将是 50。下一个将是最接近 50 的磁道,在本例中为 45。泡沫冲洗重复。