资源简介
移动臂调度算法,先来先服务算法FCFS,最短寻道时间优先调度算法SSTF,扫描调度算法SCAN,循环扫描调度算法CSCAN
代码片段和文件信息
package edu.swj;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
public class Algorithm extends JPanel {
LogPane log;
public Algorithm() {
log = LogPane.getLog();
}
/* 冒泡排序算法 */
int[] bubble(int cidao[] int m) {
int i j;
int temp;
for (i = 0; i < m; i++)// 使用冒泡法从小到大顺序排列
for (j = i + 1; j < m; j++) {
if (cidao[i] > cidao[j]) {
temp = cidao[i];
cidao[i] = cidao[j];
cidao[j] = temp;
}
}
return cidao;
}
/* 先来先服务算法 */
//顺序访问
public void FCFS(int cidao[] int now) throws InterruptedException { // 磁道号数组,个数为M
int sum = 0;// 总寻道长度
int i j;
int count = 0;
int len = 0;
float ave;// 平均寻道长度
sum += Math.abs(cidao[0] - now); //计算长度
count = count + 1;
String buffer = ““;
for (i = 0; i < cidao.length; i++) {// 输出磁盘扫描序列
if (cidao[i] > 0) {
len++;
buffer += cidao[i] + “ “;
System.out.println(“当前磁道:“ + cidao[i]);
Thread.sleep(500);
}
}
log.addLog(“磁盘扫描序列为: “ + buffer.toString());
for (i = 0 j = 1; j < len; i++ j++) {
sum += Math.abs(cidao[j] - cidao[i]);
count++;
}
ave = sum / len;
log.addLog(“总道数:“ + sum);
log.addLog(“平均寻道长度:“ + ave);
}
/* 最短寻道时间优先调度算法 */
//优先访问距当前磁头最近的磁道
public void SSTF(int cidao[] int now) throws InterruptedException {
int len = 0;
int i sum = 0;
int a count = 0;
float ave;
//获取磁道个数
for (i = 0; i < cidao.length; i++) {
if (cidao[i] > 0) {
len++;
}
}
cidao = bubble(cidao len); // 调用冒泡排序算法排序
String s = ““;
for (int z = 0; z < len; z++) {
s += cidao[z] + “ “;
}
log.addLog(“磁道序列从小到大排序为:“ + s);
if (cidao[len - 1] <= now) // 若当前磁道号大于请求序列中最大者则直接由外向内依次给予各请求服务
{
String buffer = ““;
for (i = len - 1; i >= 0; i--) {
buffer += cidao[i] + “ “;
System.out.println(“当前磁道:“ + cidao[i]);
Thread.sleep(500);
}
log.addLog(“磁盘扫描序列为: “ + buffer.toString());
sum = now - cidao[0];
count = len;
}
if (cidao[0] >= now) { // 若当前磁道号小于请求序列中最小者则直接由内向外依次给予各请求服务;
String buffer = ““;
for (i = 0; i < len; i++) {
buffer += cidao[i] + “ “;
System.out.println(“当前磁道:“ + cidao[i]);
Thread.sleep(500);
}
log.addLog(“磁盘扫描序列为: “ + buffer.toString());
sum = cidao[len - 1] - now;
count = len;
}
//若当前磁道号大于当前请求序列中最小者并且小于最大者
if (now > cidao[0] && now < cidao[len - 1]) {
StringBuffer buffer = new StringBuffer(““);
int k = 1;
//确定当前磁道在已排的序列中的位置
while (cidao[k] < now) {
k++;
}
int lr;
l = k - 1;
r = k;
//当前磁道在请求序列范围内
while ((l >= 0) && (r < len)) {
if (now - cidao[l] <= (cidao[r] - now)) {// 选择与当前磁道最近的请求给予服务
buffer.append(cidao[l] + “ “);
System.out.println(“当前磁道:“ + cidao[l]);
Thread.sleep(500);
sum += now - cidao[l];
now = cidao[l];
l = l - 1;
} else {
buffer.append(cidao[r] + “ “);
System.out.println(“当前磁道:“ + cidao[r]);
Threa
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
目录 0 2017-12-29 23:34 移动臂调度算法\
文件 301 2017-12-29 23:34 移动臂调度算法\.classpath
文件 397 2017-12-29 23:34 移动臂调度算法\.project
目录 0 2017-12-29 23:34 移动臂调度算法\.settings\
文件 598 2017-12-29 23:34 移动臂调度算法\.settings\org.eclipse.jdt.core.prefs
目录 0 2017-12-29 23:35 移动臂调度算法\bin\
目录 0 2017-12-29 23:35 移动臂调度算法\bin\edu\
目录 0 2017-12-30 17:47 移动臂调度算法\bin\edu\swj\
文件 7739 2018-01-02 10:53 移动臂调度算法\bin\edu\swj\Algorithm.class
文件 5456 2017-12-30 23:39 移动臂调度算法\bin\edu\swj\ChoosePane.class
文件 1754 2018-01-02 11:44 移动臂调度算法\bin\edu\swj\LogPane.class
文件 5159 2017-12-30 20:16 移动臂调度算法\bin\edu\swj\Mainfr
目录 0 2017-12-29 23:35 移动臂调度算法\src\
目录 0 2017-12-29 23:35 移动臂调度算法\src\edu\
目录 0 2017-12-30 17:47 移动臂调度算法\src\edu\swj\
文件 11017 2018-01-02 10:53 移动臂调度算法\src\edu\swj\Algorithm.java
文件 6726 2017-12-30 23:39 移动臂调度算法\src\edu\swj\ChoosePane.java
文件 1163 2018-01-02 11:44 移动臂调度算法\src\edu\swj\LogPane.java
文件 4108 2017-12-30 20:16 移动臂调度算法\src\edu\swj\Mainfr
评论
共有 条评论