資源簡介
使用Java實現操作系統中移動臂磁盤調度算法,包括先來先服務調度算法、最短尋找時間優先調度算法、電梯調度算法、單向掃描和雙向掃描調度算法,有簡單的圖形用戶界面

代碼片段和文件信息
import?javax.swing.*;
//對訪問序列進行處理?將結果顯示在logPane上
public?class?Arithmetic?extends?JPanel{
/**
?*?
?*/
private?static?final?long?serialVersionUID?=?1L;
LogPane?log;
Thread?thread;
int?sleeptime=200;
public?Arithmetic(){??
log=LogPane.getLog();
}???
//冒泡排序算法
//使用冒泡法從小到大順序排列
int?[]bubble(int?cidao[]int?m){
int?ij;
int?temp;
for(i=0;i for(j=i+1;j ???? if(cidao[i]>cidao[j]){
temp=cidao[i];????
cidao[i]=cidao[j];
cidao[j]=temp;???
}
}
return?cidao;
}
//先來先服務算法?FCFS
public?void?FCFS(int?cidao[]int?now)
{??
int?sum=0;//總尋道長度??
int?ij;
int?count=0;??
int?len=0;??
float?ave?=?0;//平均尋道長度???????????
sum+=Math.abs(cidao[0]-now);
count=count+1;
String?buffer=now+“?“;
len=cidao.length;
//輸出磁盤掃描序列
for(i=0;i ????????????if(cidao[i]>0){
????????????????buffer+=cidao[i]+“?“;
???? log.addLog(“第?“+(i+1)+“?次服務的柱面號“+cidao[i]);
????????????}???????????
}???????????????????
for(i=0j=1;j sum+=Math.abs(cidao[j]-cidao[i]);??????????????
count++;???
}
ave=?sum/len;
log.addLog(“磁盤掃描序列為:?“+buffer.toString());?????
log.addLog(“總尋道長度:“+sum);
log.addLog(“平均尋道長度:“+ave);?
}
//最短尋道時間優先調度算法?SSTF
public?void?SSTF(int?cidao[]?int?now)?{
int?k?=?1;?//?當前柱面在序列中的位置
int?L?R?len?=?0;//?L是比當前柱面小且最近的位置?R是比當前柱面大且最近的位置
int?i?j?sum?=?0;
float?ave;
len=cidao.length;
cidao?=?bubble(cidao?len);?//?調用冒泡排序算法排序
String?s?=?““;
for?(int?z?=?0;?z? s?+=?cidao[z]?+?“?“;
log.addLog(“磁道序列從小到大排序為:“?+?s);
//分三種情況對排序后的序列分析
//?若當前柱面號大于請求序列中最大者則直接由大向小依次給予各請求服務
if?(cidao[len?-?1]?<=?now)?{
String?buffer?=?now+“?“;
for?(i?=?len?-?1j=0;?i?>=?0;?i--j++)
{
buffer?+=?cidao[i]?+?“?“;
log.addLog(“第?“+(j+1)+“?次服務的柱面號“+cidao[i]);
}
log.addLog(“磁盤掃描序列為:?“?+?buffer.toString());
sum?=?now?-?cidao[0];
}
//?若當前柱面號小于請求序列中最小者則直接由小向大依次給予各請求服務
if?(cidao[0]?>=?now)?{
String?buffer?=?now+“?“;
for?(i?=?0;?i? {
buffer?+=?cidao[i]?+?“?“;
log.addLog(“第?“+(i+1)+“?次服務的柱面號“+cidao[i]);
}
log.addLog(“磁盤掃描序列為:?“?+?buffer.toString());
sum?=?cidao[len?-?1]?-?now;
}
//?若當前柱面號大于當前請求序列中最小者并且小于最大者
if?(now?>?cidao[0]?&&?now? StringBuffer?buffer?=?new?StringBuffer(now+“?“);
//?確定當前柱面在已排的序列中的位置
while?(cidao[k]? k++;
}
L?=?k?-?1;
R?=?k;
//?當前柱面在請求序列范圍內
i=0;
while?((L?>=?0)?&&?(R? //?選擇與當前柱面最近的請求給予服務
if?(now?-?cidao[L]?<=?(cidao[R]?-?now))?{
buffer.append(cidao[L]?+?“?“);
sum?+=?now?-?cidao[L];
now?=?cidao[L];
log.addLog(“第?“+(i+1)+“?次服務的柱面號“+now);
L--;
}?else?{
buffer.append(cidao[R]?+?“?“);
sum?+=?cidao[R]?-?now;
now?=?cidao[R];
log.addLog(“第?“+(i+1)+“?次服務的柱面號“+now);
R++;
}
i++;
}
//?磁頭移動到序列的最小
?屬性????????????大小?????日期????時間???名稱
-----------?---------??----------?-----??----
?????目錄???????????0??2019-01-03?10:36??Mobile?Arm\
?????文件?????????301??2018-12-29?08:46??Mobile?Arm\.classpath
?????文件?????????386??2018-12-29?08:46??Mobile?Arm\.project
?????目錄???????????0??2019-01-03?10:36??Mobile?Arm\.settings\
?????文件?????????598??2018-12-29?08:46??Mobile?Arm\.settings\org.eclipse.jdt.core.prefs
?????目錄???????????0??2019-01-03?10:36??Mobile?Arm\bin\
?????文件????????9545??2019-01-03?09:59??Mobile?Arm\bin\Arithmetic.class
?????文件????????5686??2019-01-03?09:55??Mobile?Arm\bin\ArithPane.class
?????文件????????5586??2019-01-03?09:59??Mobile?Arm\bin\DiskOperation.class
?????文件????????1666??2019-01-03?09:59??Mobile?Arm\bin\LogPane.class
?????目錄???????????0??2019-01-03?10:36??Mobile?Arm\src\
?????文件???????11320??2019-01-03?09:59??Mobile?Arm\src\Arithmetic.java
?????文件????????8328??2019-01-03?08:30??Mobile?Arm\src\ArithPane.java
?????文件????????3965??2019-01-03?09:59??Mobile?Arm\src\DiskOperation.java
?????文件?????????936??2019-01-03?09:59??Mobile?Arm\src\LogPane.java
- 上一篇:JAVA設計模式在JDK中的應用
- 下一篇:Java學生宿舍管理系統
評論
共有 條評論