操作系统磁盘调度算法ava
更新时间:2023-04-15 17:59:01 阅读量: 实用文档 文档下载
实验六磁盘调度算法
1、实验目的
通过这次实验,加深对磁盘调度算法的理解,进一步掌握先来先服务FCFS、最短寻道时间优先SSTF、SCAN和循环SCAN算法的实现方法。
2、试验内容
问题描述:
设计程序模拟先来先服务FCFS、最短寻道时间优先SSTF、SCAN 和循环SCAN算法的工作过程。假设有n个磁道号所组成的磁道访问序列,给定开始磁道号m和磁头移动的方向(正向或者反向),分别利用不同的磁盘调度算法访问磁道序列,给出每一次访问的磁头移动距离,计算每种算法的平均寻道长度。
3、程序要求:
1)利用先来先服务FCFS、最短寻道时间优先SSTF、SCAN和循环SCAN算法模拟磁道访问过程。
2)模拟四种算法的磁道访问过程,给出每个磁道访问的磁头移动距离。
3)输入:磁道个数n和磁道访问序列,开始磁道号m和磁头移动方向(对SCAN 和循环SCAN算法有效),算法选择1-FCFS,2-SSTF,3-SCAN,4-循环SCAN。
4)输出:每种算法的平均寻道长度。
4、需求分析
(1) 输入的形式和输入值的范围
算法选择
要访问的磁道数
磁道
当前磁道号
输入当前移动臂的移动的方向(第三个算法)
(2) 输出的形式
每种算法的平均寻道长度
(3)测试用例
先来先服务FCFS
最短寻道时间优先
SCAN算法
CSCAN
5、调试分析
通过对这次操作系统实验,使我懂得了操作系统磁盘调度的四种算法:先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)和循环扫描算法(CSCAN)。加深了我对这门课程的理解。锻炼了自己在考虑全局也不是细节的能力。通过这次实验,再一次熟悉并深入掌握了程序设计语言和算法设计。
6、测试结果
(1)使用FCFS算法
输入
输出
(2)使用SSTF算法
输入
输出
(3)使用SCAN算法(向增长方向)
输入
输出
(4)使用SCAN算法(向减少方向)
输入
输出
(5)使用CSCAN算法
输入
输出
7、附录(java)
package experiment;
public class F_Disc_Dispatch {
private static int maxsize = 100;
// 要访问的磁道数
private static int count;
// 磁道
private static int cidao[] = new int[maxsize];
// 当前磁道号
private static int now;
// 总寻道长度
private static int sum = 0;
// 平均寻道长度
private static double AverageDistance;
// 当前移动臂的移动的方向 (1 (true)表示向外,0(false)表示向内)
private static boolean direction;
// 算法选择
// 1-使用FCFS算法
// 2-使用SSTF算法
// 3-使用SCAN算法
// 4-使用CSCAN算法
private static int option = 0;
// for循环用到变量
private static int i;
private static int j;
private static int k;
private static Scanner stdin;
public static void main(String[] args) throws FileNotFoundException { // 输入数据
input();
// int a;
switch (option) {
case 1: // 使用FCFS算法
FCFS();
break;
case 2: // 使用SSTF算法
SSTF();
break;
case 3: // 使用SCAN算法
SCAN();
break;
case 4: // 使用CSCAN算法
CSCAN();
break;
}
}
// 输入数据
public static void input() throws FileNotFoundException {
BufferedInputStream in = new BufferedInputStream(new FileInputStream( "./file/06"));
System.setIn(in);
stdin = new Scanner(System.in);
// 算法选择
// 1-使用FCFS算法
// 2-使用SSTF算法
// 3-使用SCAN算法
// 4-使用CSCAN算法
option = stdin.nextInt();
// 要访问的磁道数
count = stdin.nextInt();
// 磁道
for (i = 0; i < count; i++) {
cidao[i] = stdin.nextInt();
}
// 当前磁道号
now = stdin.nextInt();
if (option == 3) {
// 输入当前移动臂的移动的方向 (1 表示向外,0表示向内) :
try {
int g = stdin.nextInt();
if (g == 1) {
direction = true;
} else {
direction = false;
}
} catch (Exception e) {
// TODO: handle exception
return;
}
}
stdin.close();
}
/********************* 先来先服务调度算法 **************************/
public static void FCFS() {
sum += Math.abs(cidao[0] - now);
for (i = 0; i < count; i++) // 输出磁盘扫描序列
{
}
for (i = 0, j = 1; j < count; i++, j++) // 求平均寻道长度
{
sum += Math.abs(cidao[j] - cidao[i]);
AverageDistance = (float) (sum) / (float) (count);
}
}
/********************** 最短寻道时间优先调度算法 ********************/
public static void SSTF() {
k = 1;
int l, r;
bubble(); // 调用冒泡排序算法排序
if (cidao[count - 1] <= now) // 若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务
{
for (i = count - 1; i >= 0; i--) {
}
sum = now - cidao[0];
}
if (cidao[0] >= now) // 若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务{
for (i = 0; i < count; i++) {
}
sum = cidao[count - 1] - now;
}
if (now > cidao[0] && now < cidao[count - 1]) // 若当前磁道号大于请求序列中最小者且小于最大者
{
while (cidao[k] < now) // 确定当前磁道在已排的序列中的位置,后面的算法都用到了,可以直接复制后少量修改,节省时间。
{
k++;
}
l = k - 1;
r = k;
while ((l >= 0) && (r < count)) // 当前磁道在请求序列范围内
{
if ((now - cidao[l]) <= (cidao[r] - now)) // 选择与当前磁道最近的请求给予服务
{
sum += now - cidao[l];
now = cidao[l];
l = l - 1;
} else {
sum += cidao[r] - now;
now = cidao[r];
r = r + 1;
}
}
if (l == -1) // 磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道
{
for (j = r; j < count; j++) {
}
sum += cidao[count - 1] - cidao[0];
} else // 磁头移动到序列的最大号,返回内侧扫描仍未扫描的磁道
{
for (j = l; j >= 0; j--) {
}
sum += cidao[count - 1] - cidao[0];
}
}
AverageDistance = (float) (sum) / (float) (count);
}
/***************************** 扫描调度算法 *******************************/
public static void SCAN() // 先要给出当前磁道号和移动臂的移动方向
{
k = 1;
int l, r;
bubble(); // 调用冒泡排序算法排序
if (cidao[count - 1] <= now) // 若当前磁道号大于请求序列中最大者,则直接由外向内依次给予各请求服务,此情况同最短寻道优先
{
for (i = count - 1; i >= 0; i--) {
}
sum = now - cidao[0];
}
if (cidao[0] >= now) // 若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先
{
for (i = 0; i < count; i++)
sum = cidao[count - 1] - now;
}
if (now > cidao[0] && now < cidao[count - 1]) // 若当前磁道号大于请求序列中最小者且小于最大者
{
while (cidao[k] < now) {
k++;
}
l = k - 1;
r = k;
if (direction == false) // 选择移动臂方向向内,则先向内扫描
{
for (j = l; j >= 0; j--) {
}
for (j = r; j < count; j++) // 磁头移动到最小号,则改变方向向外扫描未扫描的磁道
{
}
sum = now - 2 * cidao[0] + cidao[count - 1];
} else // 选择移动臂方向向外,则先向外扫描
{
for (j = r; j < count; j++) {
}
for (j = l; j >= 0; j--) // 磁头移动到最大号,则改变方向向内扫描未扫描的磁道
{
}
sum = -now - cidao[0] + 2 * cidao[count - 1];
}
}
AverageDistance = (float) (sum) / (float) (count);
}
/************************ 循环扫描调度算法 *****************************/
public static void CSCAN() {
k = 1;
int l, r;
bubble(); // 调用冒泡排序算法排序
if (cidao[count - 1] <= now) // 若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务
{
for (i = 0; i < count; i++) {
}
sum = now - 2 * cidao[0] + cidao[count - 1];
}
if (cidao[0] >= now) // 若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先
{
for (i = 0; i < count; i++)
sum = cidao[count - 1] - now;
}
if (now > cidao[0] && now < cidao[count - 1]) // 若当前磁道号大于请求序列中最小者且小于最大者
{
while (cidao[k] < now) // 单向反复地从内向外扫描
{
k++;
}
l = k - 1;
r = k;
for (j = r; j < count; j++) {
}
for (j = 0; j < r; j++) // 当扫描完最大号磁道,磁头直接移动到最小号磁道,再向外扫描未扫描的磁道
{
}
sum = 2 * cidao[count - 1] + cidao[l] - now - 2 * cidao[0];
}
AverageDistance = (float) (sum) / (float) (count);
}
/********************* 冒泡排序算法 **************************/
public static void bubble() {
int temp;
for (int i = 0; i < count; i++) { // 使用冒泡法按从小到大顺序排列
for (int j = i + 1; j < count; j++) {
if (cidao[i] > cidao[j]) {
temp = cidao[i];
cidao[i] = cidao[j];
cidao[j] = temp;
}
}
}
for (i = 0; i < count; i++) // 输出排序结果
{
}
}
}
正在阅读:
操作系统磁盘调度算法ava04-15
(已校对)低压电工04-25
绿丝带是什么意思02-09
读《格列夫游记》有感之小人国02-16
丑小鸭与我300字作文03-31
四川统计数据采集处理平台统计数据审核评估流程管理办法试行10-28
2015年吉林省药学专业知识一二考试题库06-06
高低压电工地方题库多选题 -10-21
选煤厂事故案例汇编201609-27
集合的含义及其表示02-12
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 调度
- 磁盘
- 算法
- 操作系统
- ava
- 上海市崇明县马桥中学2022学年八年级政治上学期期中试题(无答案)
- 最新版劳动合同标准范本
- 部编版四年级上册语文最新版知识归纳
- 社区居委会民情日记走访记录三篇
- 最新版气辅工艺流程
- 零售药店员工培训标准操作程序
- 期货交易所代理协议书文本(示范协议)
- 手动液压搬运车安全操作规范(标准版)
- 《建筑工程定额与预算》—土石方工程—定额说明及工程量计算规则
- (完整版)混凝土结构设计原理习题集之六(钢筋混凝土受扭构件承载
- 2015年高考物理试题分类汇编20个模块专题汇总(解析)
- 济南西车辆段驻港列检所丙班QC小组2004-2005年度QC课题
- 三年级下册乘法除法两步计算解决问
- 银行春天行动工作总结通用版
- (完整版)中考英语阅读理解简答题的答题技巧
- 自贡市第十四中学校校本研修3年规划实施方案
- 广西壮族自治区义务教育学籍卡
- 沸水促进的N-Boc保护基脱除反应和联萘酚骨架的手性磷酸的合成及
- FEHSP-4.4.6-04 New Project EHS Management 新项目EHS管理程序
- 职称英语备考综合类阅读判断练习题题