一、实验内容
模拟电梯调度算法,实现对磁盘的调度。
二、实验目的
磁盘是一种高速、大量旋转型、可直接存取的存储设备。它作为计算机系统的辅助存储器,负担着繁重的输入输出任务,在多道程序设计系统中,往往同时会有若干个要求访问磁盘的输入输出请示等待处理。系统可采用一种策略,尽可能按最佳次序执行要求访问磁盘的诸输入输出请求,这就叫磁盘调度,使用的算法称磁盘调度算法。磁盘调度能降低为若干个输入输出请求服务所须的总时间,从而提高系统效率。本实验要求学生模拟设计一个磁盘调度程序,观察磁盘调度程序的动态运行过程。
三、实验原理
模拟电梯调度算法,对磁盘调度。
磁盘是要供多个进程共享的存储设备,但一个磁盘每个时刻只能为一个进程服务。
当有进程在访问某个磁盘时,其他想访问该磁盘的进程必须等待,直到磁盘一次工作结束。
当有多个进程提出输入输出请求处于等待状态,可用电梯调度算法从若干个等待访问者中选择一个进程,让它访问磁盘。当存取臂仅需移到一个方向最远的所请求的柱面后,如果没有访问请求了,存取臂就改变方向。
假设磁盘有200个磁道,用C语言随机函数随机生成一个磁道请求序列(不少于15个)放入模拟的磁盘请求队列中,假定当前磁头在100号磁道上,并向磁道号增加的方向上移动。请给出按电梯调度算法进行磁盘调度时满足请求的次序,并计算出它们的平均寻道长度。
代码如下:

package CODE.磁盘调度;//电梯调度算法import sun.misc.Request;import java.util.Random;
import java.util.Scanner;
import java.util.Set;
import java.util.TreeSet;//进程访问磁盘的磁道号
class Requst
{private int Number;  //访问的磁道号public Requst(int number) {Number = number;}public int getNumber() {return Number;}
}class DiaoDu
{private Requst[] requests; //磁道请求数private int start;  //起始磁道号private int end;    //终止磁道号private int num;    //磁道请求数private int curCidao=100;  //当前磁头在100磁道public DiaoDu(int start, int end, int num) {this.start = start;this.end = end;this.num = num;}//设置请求的磁道号public void setRandomRequests(){requests=new Requst[num];Set<Integer> reqSet=new TreeSet<>(); //Set不存放重复数据,TreeSet是有序存储int n=num;//先将随机磁道号放在TreeSet中int randomReq=0;while((n--)>0){Random random=new Random();randomReq=random.nextInt(end-start)+start;//注意:因为访问的磁道号是随机生成,但是磁道号不能重复,所以需要加此循环while(reqSet.contains(randomReq)){randomReq=random.nextInt(end-start)+start;}reqSet.add(randomReq);  //生成start-end之间的随机整数System.out.println(randomReq);}int i=0;//初始化每一个磁道请求for(int tmp:reqSet){requests[i]=new Requst(tmp);i++;}}//电梯调度算法// 假定当前磁头在100号磁道上,// 并向磁道号增加的方向上移动。请给出按电梯调度算法进行磁盘调度时满足请求的次序,// 并计算出它们的平均寻道长度//返回平均寻道长度public float realSCAN(){float sum=0;TreeSet<Integer> bigNum=new TreeSet<>();  //存放高于当前磁道号的磁道号TreeSet<Integer> smallNum=new TreeSet<>();  //存放低于当前磁道号的磁道号for(int i=0;i<num;i++){//存放高于当前磁道号的磁道号if(i<num&&requests[i].getNumber()>=curCidao){bigNum.add(requests[i].getNumber());}//存放低于当前磁道号的磁道号else{smallNum.add(requests[i].getNumber());}}System.out.println("被访问的下一个磁道号  移动距离(磁道数)");//将要访问的磁道在当前位置内未距离最近者,也就是bigNum的下一个数字for(int tmp:bigNum){System.out.println("     "+tmp+"             "+(tmp-curCidao));sum=sum+(tmp-curCidao);curCidao=tmp;}//自里向外地访问,直至再无更外的磁道需要访问,才将磁臂换向为子外向里,所以需要将smallNum逆序for(int tmp:smallNum.descendingSet()){System.out.println("      "+tmp+"           "+(curCidao-tmp));sum=sum+(curCidao-tmp);curCidao=tmp;}return sum/num;}
}
public class SCAN {private static Scanner scanner =new Scanner(System.in);public static void main(String[] args) {System.out.print("请输入起始磁道号:");int start=scanner.nextInt();System.out.print("请输入终止磁道号:");int end=scanner.nextInt();System.out.println("请输入磁盘请求序列数(当前磁头在100)");int num=scanner.nextInt();DiaoDu diaoDu=new DiaoDu(start,end,num);diaoDu.setRandomRequests();float avglen=diaoDu.realSCAN();System.out.println("平均寻道长度:"+avglen);}
}

测试:

请输入起始磁道号:1
请输入终止磁道号:200
请输入磁盘请求序列数(当前磁头在100)
16
60
133
147
59
89
148
156
180
95
105
57
111
42
62
179
183
被访问的下一个磁道号  移动距离(磁道数)105             5111             6133             22147             14148             1156             8179             23180             1183             395           8889           662           2760           259           157           242           15
平均寻道长度:14.0

操作系统----磁盘调度(电梯调度算法)相关推荐

  1. 操作系统磁盘调度_磁盘调度| 操作系统

    操作系统磁盘调度 磁盘调度 (Disk Scheduling) One of the major duties of the operating is that, to use the hardwar ...

  2. 操作系统 磁盘调度---扫描(SCAN)算法 (电梯调度算法)(C++实现 操作系统实验)

    思路: 不仅考虑到欲访问的磁道与当前磁道间的距离,更优先考虑的是磁头当前的移动方向,当磁头正在自里向外移动时,SCAN算法所考虑的下一个访问对象应是该磁头自里向外方向上距离最近的那个,直至扫描完最外面 ...

  3. 操作系统实验:模拟电梯调度算法,实现对磁盘的驱动调度C++实现

            设计一个以电梯调度思想为主并考虑旋转优化的程序,对磁盘进行移臂和旋转调度,对磁盘进行移臂和旋转调度.         假定某个磁盘组共有 200 个柱面,由外向里顺序编号(0-199) ...

  4. 操作系统实验:驱动调度 模拟电梯调度算法 C语言实现

    一:实验内容 模拟电梯调度算法,对磁盘进行移臂和旋转调度. 二.实验题目 (1)."驱动调度"进程和"接收请求"进程能否占有处理器运行,取决于磁盘的结束中断信 ...

  5. 操作系统实验4—磁盘调度

    操作系统实验4-磁盘调度 文章目录 操作系统实验4-磁盘调度 实验描述 设计思路 上机代码 测试结果 心得体会 实验描述 实验内容: 编写一个磁盘调度程序,模拟操作系统对磁盘的调度. 实验目的: 本实 ...

  6. 操作系统之磁盘调度——SCAN实例讲解

    操作系统之进程调度--优先权法和轮转法(附上样例讲解) 操作系统之银行家算法-详解流程及案例数据 操作系统之多线程编程-读者优先/写者优先详解 操作系统之存储管理--FIFO算法和LRU算法 操作系统 ...

  7. 操作系统 --- 磁盘调度算法

    文章目录 1.先来先服务调度算法(FCFS) 2.最短寻找时间调度算法(SSTF) 3.电梯调度算法(SCAN) 4.循环扫描算法(CSCAN) 5.磁盘调度算法练习题 多道环境下,进程并发运行随机提 ...

  8. 磁盘调度算法(先来先服务、最短寻道优先以及电梯调度算法)

    操作系统实验导航 实验一:银行家算法 https://blog.csdn.net/weixin_46291251/article/details/115384510 实验二:多级队列调度和多级反馈队列 ...

  9. 操作系统作业调度算法c语言,操作系统课程设计报告电梯调度算法c语言实现.doc...

    操作系统课程设计报告电梯调度算法c语言实现 操作系统课程设计报告电梯调度算法c语言实现 :调度 算法 电梯 课程设计 操作系统 操作系统课程设计报告 模拟操作系统课程设计 写一个简单的操作系统 篇一: ...

最新文章

  1. 人工智能时代下的视觉合成
  2. java keygenerator_spring-cache -KeyGenerator自定义
  3. sql server 判断是否存在数据库,表,列,视图
  4. oracle数据库关联查询
  5. python的dropna 和notna的性能_python数据分析学习(7)数据清洗与准备(1)
  6. PCIe device tree range属性详解
  7. 浏览器是如何渲染网页的
  8. 【原创】2019.08.15 模拟赛 ※ [USACO19]Left Out / [USACO19]Cow Steeplechase II / bzoj 4972 小Q的方格纸
  9. GitHub 上受欢迎的 Android UI Library 整理
  10. JWT的数据格式详解
  11. LOJ 534 花团(线段树+dfs栈)
  12. 2022-7-8 Leetcode 904.水果成篮
  13. VPCS使用教程:模拟GNS3虚拟PC
  14. 集合{LinkedHashMap TreeMap HashSet LinkedHashSet TreeSet 快速失败机制 ConcurrentHashMap CAS 多线程协同扩容}(二)
  15. alibaba fastjson生成的嵌套json串带反斜杠
  16. GO-获取斗鱼弹幕消息
  17. gMIS吉密斯十年执念:Lower Costs较低成本Better Productivity较高效率
  18. MacOS Terminal 常用快捷键大全
  19. 油田选址问题matlab,油田选址问题完整解答(内附完整代码)
  20. 计算机在工作中的应用,计算机技术在设计工作中的应用

热门文章

  1. 星巴克和瑞幸背后,什么是中国人喝咖啡的「真相」?
  2. 考完了托福,总结一下9天复习参加托福的经验吧
  3. 圣斗士星矢的状态模式和观察者模式
  4. uglifyjs压缩js文件(指令压缩/ 批量压缩/ 编程方式压缩)
  5. DNS攻击类型及应对措施大盘点
  6. PhotoShop制作水滴魔幻特效(转)
  7. python控制windows 任务计划程序 获取具体单一任务
  8. 常见的几种HTTP状态码
  9. mysql停留的风_离别之后,我的梦里少了你的温柔,风没有带走,你也忘了停留...
  10. 你的开源软件自主可控吗?