• 大小: 19KB
    文件类型: .zip
    金币: 1
    下载: 0 次
    发布日期: 2021-05-13
  • 语言: Java
  • 标签: 移动臂  

资源简介

移动臂调度算法,先来先服务算法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\Mainframe.class
     目录           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\Mainframe.java

评论

共有 条评论

相关资源