磁盘调度算法三个java
发布时间:2024-10-23
发布时间:2024-10-23
java磁盘调度算法 FCFS SCAN SSTF
public class exp {
public static void main(String[] args) {
int n = 6; // 用来统计需求量
double sum = 0; // 为FCFS算法准备的 用来计算总的寻到长度
double temp = 0;
int position = 100; // 用来存放磁头的出事位置
SSTF sstf = new SSTF();
SCAN scan = new SCAN();
int a[] = {100,24,37,58,81,95,150};//寻道序列
a[0]=position;
sum = 0;
System.out.println("磁头初始位置为100!磁头向磁道号增加方向寻道!"); System.out.println("初始化磁道序列:");
for(int i=1;i<=6;i++)
System.out.print(a[i]+" ");
System.out.println();
System.out.println("FCFS算法序列:");
for (int i = 1; i <= n; i++) {
System.out.print(a[i] + " ");
temp = a[i] - a[i - 1];
if (temp >= 0)
;
else if (temp < 0) {
temp = -temp;
}
sum = sum + temp;
}
System.out.println();
System.out.println("寻道长度为" + sum);
System.out.println("平均寻道长度为" + sum / n);
int b[] = {100,24,37,58,81,95,150};
sstf.Calculate(b, n, 100);
int c[] = {100,24,37,58,81,95,150};
scan.Check(c, n, 100);
}
}
class SCAN {//电梯算法
public int m=1; //用来存放磁头的初始位置
public boolean Run=true;
public int sum=0;
public void Check(int a[],int n,int position){
int temp;
java磁盘调度算法 FCFS SCAN SSTF
for (int i = n; i > 0; i--) // 冒泡排序
{
for (int j = 0; j < i; j++) {
if (a[j] > a[j + 1]) // 按顺序依次比较大小
{
temp = a[j]; // 把大的数字往前面放
a[j] = a[j + 1];
a[j + 1] = temp;
}
}
}
while (Run) {//此循环用来寻找磁头的初始位置被排到了什么位置 for (int i = 0; i <= n; i++) {
if (a[i] == position) {
m = i;
Run = false;
}
}
}
System.out.println("SCAN算法序列:");
for(int i=m+1;i<=n;i++){//磁头向大号移动
sum=sum+a[i]-a[i-1];
System.out.print(a[i]+" ");
}
sum=sum+200-a[n];
sum=sum+200-a[m-1];
for(int i=m-1;i>=0;i--){
if(i!=0){
sum=sum+a[i]-a[i-1];
}
System.out.print(a[i]+" ");
}
System.out.println();
System.out.println("寻道长度为"+sum);
System.out.println("平均寻道长度为"+sum/n);
}
}
class SSTF {// 最短寻道时间优先算法
public int m=1; // 用来判断排序后 磁头所在的初始位置的下标 public int b[];
java磁盘调度算法 FCFS SCAN SSTF
} boolean flag=true; public double SUM=0; public int mleft, mright; public SSTF(){ b=new int[20]; } public void Calculate(int a[], int n, int position) {// 两个形参分别表示磁盘请求序列 int temp,p,q; System.out.println("SSTF序列为:"); while(flag){ for (int i = n; i > 0; i--) // 冒泡排序 { for (int j = m; j < i; j++) { p=a[j]-a[0];q=a[j + 1]-a[0]; if(a[j]-a[0]<0)p=-p; if(a[j+1]-a[0]<0)q=-q; if (p>q) // 按顺序依次比较大小 { temp = a[j]; a[j] = a[j + 1]; a[j + 1] = temp; } } } System.out.print(a[m]+" "); a[0]=a[m]; m=m+1; if(m==7)break; p=a[0]-a[m]; if(a[0]-a[m]<0)p=-p; SUM=SUM+p; } System.out.println(); System.out.println("寻道长度为"+SUM); System.out.println("平均寻道长度为"+SUM/n); }
下一篇:古典密码附截图和C++代码