CSCAN调度算法求平均寻道长度java实现
时间: 2023-11-09 17:06:48 浏览: 96
好的,C-SCAN调度算法是一种磁盘调度算法,其特点是将磁头移动到磁盘的一端,然后按照一个方向顺序地访问所有的磁道,直到达到磁盘的另一端。在达到另一端后,磁头会迅速返回到起始点,并重复上述访问过程。因此,C-SCAN调度算法的访问顺序是一个循环扫描。
下面是Java实现C-SCAN调度算法的平均寻道长度的代码:
```java
import java.util.Arrays;
public class CSCAN {
public static void CSCAN(int[] queue, int start, int end, int head) {
int[] q = new int[queue.length + 2];
System.arraycopy(queue, 0, q, 1, queue.length);
q[0] = start;
q[q.length - 1] = end;
Arrays.sort(q);
int index = 0;
for (int i = 0; i < q.length; i++) {
if (q[i] == head) {
index = i;
break;
}
}
int[] left = Arrays.copyOfRange(q, 0, index + 1);
int[] right = Arrays.copyOfRange(q, index + 1, q.length);
int[] newQ = new int[q.length];
int count = 0;
for (int i = right.length - 1; i >= 0; i--) {
newQ[count++] = right[i];
}
for (int i = 0; i < left.length; i++) {
newQ[count++] = left[i];
}
int sum = 0;
for (int i = 0; i < newQ.length - 1; i++) {
sum += Math.abs(newQ[i] - newQ[i + 1]);
}
double avg = (double) sum / (double) (newQ.length - 2);
System.out.println("C-SCAN平均寻道长度:" + avg);
}
public static void main(String[] args) {
int[] queue = { 86, 1470, 913, 1774, 948, 1509, 1022, 1750, 130 };
CSCAN(queue, 0, 199, 50);
}
}
```
注意,这里参数`start`和`end`表示磁盘的起始和结束位置,`head`表示磁头的起始位置。`queue`则是需要访问的磁道序列。在实现中,我们将磁道序列首尾都添加了起始和结束位置,并将其排序,然后找到磁头的位置,并将序列分为左右两个部分,分别从右往左和从左往右访问,最后计算平均寻道长度并输出。
阅读全文