操作系统:磁盘调度实验之扫描和循环扫描调度算法(含源码和文档)
目录
第一章 实验相关概述
1. 扫描算法
2. 循环扫描算法
第二章 实验的目的及要求
1. 目的
2. 要求
第三章 实验的实现思路及步骤
1. 扫描算法
2. 循环扫描算法
第四章 实验结果分析
1.优缺点及区别
2.实现代码及截图
第五章 实验心得
参考文献
致谢
- 实验相关概述
- 扫描算法
扫描算法又称为电梯算法,其原理与电梯运行情况相似,即运行方向上的请求优先,若就是访问方向向上,则先依次访问较大的磁道号至顶,再向下访问较小的磁道号;若就是访问方向向下,则先依次访问较小得磁道号至底,再向上访问较大的磁道号。
- 循环扫描算法
循环扫描算法又称为单向电梯算法,若就是访问方向向上,则向上依次访问完较大的磁道号后,返回最低端,依次向上访问较小的磁道号;若就是访问方向向下,则向下依次访问完较小的磁道号后,返回最顶端,依次向下访问较大的磁道号.
- 实验的目的及要求
- 目的
通过实验使学生掌握磁盘上数据的组织方式,以及让学生了解并掌握扫描算法及循环扫描算法的相关特性,及区别。
- 要求
实验结束后要求每位同学都应该掌握磁盘上数据的组织方式,以及扫描算法和循环扫描算法的基本原理。
- 实验的实现思路及步骤
- 扫描算法
2.循环扫描算法
- 实验结果分析
1.优缺点及区别
扫描算法不仅考虑到欲访问的磁道与当前磁道的距离,而且优先考虑磁头的当前移动方向。例如,当磁头正在自里向外移动时,扫描算法所选择的下一个访问对象应是磁头移动方向向外且距离最近的。这样自里向外地访问,直到再无更外的磁道需要被访问才会将磁臂的移动方向变为自外向里移动。磁臂改变方向后,同样选择这样的进程来调度,即其要访问的磁道在当前磁道之内,从而避免了饥饿现象。由于这种算法中磁头移动的规律颇似电梯的运行,故称为电梯调度算法。此算法基本上克服了最短寻道时间优先算法的服务集中于中间磁道和响应时间变化比较大的缺点,而具有最短寻道时间优先算法的优点,即吞吐量较大,平均响应时间较小。但由于是摆动式的扫描方法,两侧磁道被访问的频率仍低于中间磁道。
循环扫描算法是对扫描算法的改进。如果对磁道的访问请求时均匀分布的,当磁头到达磁盘的一端并反向运动时,落在磁头之后的访问请求相对较少。这是由于这些磁道刚被处理,而磁盘另一端的请求密度相当高,且这些访问请求等待的时间长。为了解决这种情况,循环扫描算法规定磁头单向移动。例如,只自里向外移动,当磁头移到最外的被访问磁道时,头立即返回到最里的欲访问磁道,即将最小磁道号紧接着最大磁道号构成循环,进行扫描。
2.实现代码及截图
public class CAN {
public static void main(String[] args) {
Scanner scan = new Scanner(System.in);
while(true) {
System.out.println("请输入您的选择:1.扫描算法 2.循环扫描算法");
int n = scan.nextInt();
switch(n) {
case 1:
SCAN s1 = new SCAN();
s1.input();
s1.search();
s1.show();
break;
case 2:
CSCAN s2 = new CSCAN();
s2.input();
s2.search();
s2.show();
}
}
}
}
class SCAN
{
Scanner scan = new Scanner(System.in);
int[] req;
int num;
int[] move;
int[] visit;
void input()
{
System.out.print("请输入进程数:");
num = scan.nextInt();
req = new int[num];
move = new int[num];
visit = new int[num];
for (int i = 0; i < num; i++)
{
System.out.print("进程" + (i + 1) + "访问的磁道号:");
req[i] = scan.nextInt();
}
System.out.println();
}
void search()
{
System.out.print("请输入开始的磁道号:");
int start = scan.nextInt();
System.out.println("\n从" + start + "号磁道开始,向磁道号增加方向移动\n");
bubbleSort(req);
int firstIndex = -1;
for (int i = 0; i < num; i++)
{
if (start > req[i])
continue;
firstIndex = i;
break;
}
if (firstIndex != -1)
{
int index = firstIndex;
for (int i = 0; i < num - index; i++)
{
visit[i] = req[firstIndex];
move[i] = req[firstIndex] - start;
start = visit[i];
firstIndex++;
}
for(int i = index - 1, pos = num - index; i >= 0; i--, pos++)
{
visit[pos] = req[i];
move[pos] = start - req[i];
start = visit[pos];
}
}
else
{
for(int i = 0; i < num; i++)
{
visit[i] = req[i];
move[i] = Math.abs(req[i] - start);
start = visit[i];
}
}
}
void bubbleSort(int arr[])
{
for (int i = 0; i < arr.length - 1; i++)
{
for (int j = 0; j < arr.length - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
void show()
{
System.out.println("被访问的\t\t移动距离\n下一个磁道号\t(磁道数)\n");
for (int i = 0; i < num; i++)
{
System.out.println(visit[i] + "\t\t" + move[i]);
}
double sum = 0;
for (int i : move)
{
sum += i;
}
System.out.println("平均寻道长度:" + sum / num);
}
SCAN()
{
System.out.println("----------扫描算法----------");
}
}
class CSCAN
{
Scanner scan = new Scanner(System.in);
int[] req;
int num;
int[] move;
int[] visit;
void input()
{
System.out.print("请输入进程数:");
num = scan.nextInt();
req = new int[num];
move = new int[num];
visit = new int[num];
for (int i = 0; i < num; i++)
{
System.out.print("进程" + (i + 1) + "访问的磁道号:");
req[i] = scan.nextInt();
}
System.out.println();
}
void search()
{
System.out.print("请输入开始的磁道号:");
int start = scan.nextInt();
System.out.println("\n从" + start + "号磁道开始,向磁道号增加方向移动\n");
bubbleSort(req);
int firstIndex = -1;
for (int i = 0; i < num; i++)
{
if (start > req[i])
continue;
firstIndex = i;
break;
}
if (firstIndex != -1)
{
int index = firstIndex;
for (int i = 0; i < num - index; i++)
{
visit[i] = req[firstIndex];
move[i] = req[firstIndex] - start;
start = visit[i];
firstIndex++;
}
for (int i = 0, pos = num - index; i < index; i++, pos++)
{
visit[pos] = req[i];
move[pos] = Math.abs(req[i] - start);
start = visit[pos];
}
} else
{
for (int i = 0; i < num; i++)
{
visit[i] = req[i];
move[i] = Math.abs(req[i] - start);
start = visit[i];
}
}
}
void bubbleSort(int arr[])
{
for (int i = 0; i < arr.length - 1; i++)
{
for (int j = 0; j < arr.length - 1 - i; j++)
{
if (arr[j] > arr[j + 1])
{
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
}
void show()
{
System.out.println("被访问的\t\t移动距离\n下一个磁道号\t(磁道数)\n");
for (int i = 0; i < num; i++)
{
System.out.println(visit[i] + "\t\t" + move[i]);
}
double sum = 0;
for (int i : move)
{
sum += i;
}
System.out.println("平均寻道长度:" + sum / num);
}
CSCAN()
{
System.out.println("--------循环扫描算法--------");
}
}
- 实验心得
经过这段时间的辅导讨论,我们组的磁盘调度实验之扫描和循环调度算法的实验结束了,最终的实验结果也满足了实验的要求,我现在也能够很好区别扫描算法和循环扫描算法,并了解它们的优缺点。
通过此次实验,我不仅深度了解了扫描算法和循环扫描算法,也使我更加扎实的掌握了有关Java方面的知识,在此次实验过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍地检查终于找出了原因所在,也暴露出了前期我在这一方面知识欠缺和经验不足。实践出真知,通过亲自动手实验,使我们掌握的知识不再是纸上谈兵。过而能改,善莫大焉。在实验中,我们不断发现错误,不断改正,不断领悟,不断获取。最终的实验检测环节,本身就是在践行“过而能改,善莫大焉”的知行观。这次实验终于顺利完成了,在实验中遇到了很多问题,最后在老师的指导下,终于游逆而解。在今后社会的发展和学习实践过程中,一定要不懈努力,不能遇到困难就想要退宿,一定要不厌其烦的发现问题所在,然后一一进行解决,只有这样,才能成功的做成想做的事,才能在今后的道路上披荆斩棘,而不是知难而退,那样永远不可能获得成功,收获喜悦,也永远不可能得到社会及其他人对你的认可。
回顾起此次实验,至今我仍感慨颇多,从理论到实践,在这段日子里,可以说是苦多于甜,但是学到了很多很多东西,不仅巩固了以前的知识,还学到了很多书本上没有学到的知识。通过此次实验使我懂得了理论和实际结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识和实际相结合,从理论中得出结论,才能真正为社会服务,从而提高自己的实际动手能力和独立思考的能力。实验过程中,也对团队精神进行了考察,让我们在合作中更加默契,在成功之后一起体会喜悦的心情。果然是团结就是力量,只有相互之间默契融洽的配合才能换来最终完美的结果。
参考文献
[1]汤子瀛 ,哲凤屏.《计算机操作系统》[M].西安电子科技大学出版社.
[2]王清,李光明.《计算机操作系统》[M].冶金工业出版社.
[3]孙钟秀等.《操作系统教程》[M].高等教育出版社.
[4]曾明.《Linux操作系统应用教程》[M].陕西科学技术出版社.
[5]张丽芬,刘利雄.《操作系统实验教程》[M].清华大学出版社.
[6]孟静.《操作系统教程——原理和实例分析》[M].高等教育出版社.
[7]周长林.《计算机操作系统教程》[M].高等教育出版社.
[8]张尧学.《计算机操作系统教程》[M].清华大学出版社.
[9]任满杰.《操作系统原理实用教程》[M].电子工业出版社.
[10]张坤.《操作系统实验教程》[M].清华大学出版社.
致谢
首先非常感谢学校能开设这个实验,为我日后从事计算机方面的工作有所助益,奠定了基础。
其次,我要特别感谢熊婷老师对我的悉心指导,在实验期间老师帮助我理清实验思路,指导操作方法。老师渊博的知识、严谨的作风、诲人不倦的态度和学术上精益求精的精神让我受益终生。这期间凝结了老师很多的心血,在此我表示由衷的感谢。没有他的帮助,我将无法顺利完成这次实验。
再次,学校在这方面也给我们提供了很大的支持和帮助,学校领导比较重视,给我们安排了较多的上机次数和足够的计算机,让我们有尽可能多的时间上机;并为我们开通了网线,方便我们上网查找信息;另外提供了专门的教室方便我们上机调试;对于学校和老师为我的实验所提供的极大帮助和关心,在此我致以衷心的感谢!
操作系统:磁盘调度实验之扫描和循环扫描调度算法(含源码和文档)相关推荐
- 实验一基于 的词法分析实验_[源码和文档分享]基于JAVA实现的基于DFA的词法分析程序...
1 实验目的 根据自己确定的正规表达式,编写.调试一个词法分析程序,对语句进行词法分析,从而更好理解词法分析原理. 2 内容描述 此程序用java编写.程序读取一个文本文件,并对其中的内容进行词法分析 ...
- android电梯程序设计,[源码和文档分享]基于Android实现的电梯调度模拟
一.使用说明 1.1 项目简介 某一楼有20层,操作者可以通过使用5部电梯从起始楼层来到达指定的楼层.本项目通过实现电梯调度,来模拟实现操作系统的调度过程,并且学习Android环境下使用Java的多 ...
- [源码和文档分享]基于Java语言的电梯调度模拟程序
一 需求分析 某一栋楼有20层,有5部互联的电梯.基于线程的思想,编写一个电梯调度程序.这五部电梯项目联结,即当一个电梯按钮按下去时,其它电梯相应按钮同时点亮,表示也按下去了. 二 程序设计 本项目采 ...
- 操作系统磁盘调度_磁盘调度| 操作系统
操作系统磁盘调度 磁盘调度 (Disk Scheduling) One of the major duties of the operating is that, to use the hardwar ...
- 基于web的实验教学管理系统java ssm教学视频平台源码和论文
研究背景 近几年来,随着地方高等院校办学规模的不断扩大,为了适用社会发展需要,地方高校将应用 型人才培养作为学校的人才培养目标.为了适应学校应用型人才培养目标,各专业尤其是理工科专 业人才培养方案中加 ...
- 操作系统----磁盘调度(电梯调度算法)
一.实验内容 模拟电梯调度算法,实现对磁盘的调度. 二.实验目的 磁盘是一种高速.大量旋转型.可直接存取的存储设备.它作为计算机系统的辅助存储器,负担着繁重的输入输出任务,在多道程序设计系统中,往往同 ...
- 汇编实验 用表格形式显示字符(附源码详细注释和相关注意的知识)
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/qq_40774175/article/ ...
- Silverlight实用窍门系列:29.Silverlight碰撞测试、检测自定义控件碰撞,雷达扫描图之扫描雷达点状态【附带源码实例】...
雷达扫描图中当雷达指针转动扫描到某一个点上的时候,判断这个点的CPU值是否已经超过60的警戒位置如果超过将此点设置为红色. 在Silverlight中我们的雷达指针是一直在做圆运动的,我们要随时检测雷 ...
- C++使用linked list(链表)实现circular queue(循环队列)(附完整源码)
使用linked lis实现circular queue node结构体定义 使用linked list(链表)实现circular queue(循环队列)算法的完整源码(定义,实现,main函数测试 ...
- Silverlight实用窍门系列:28.Silverlight制作随机分布雷达扫描点,模拟雷达扫描图之被扫描设备【附带源码实例】...
实际项目中,我们模拟一个监控多台电脑的雷达扫描图效果.我们假设发现了很多台设备,这些设备具有CPU使用率这个属性,在雷达扫描的时候,如果CPU的值高于90则报警为红色. 本节实例建立在上一节的基础之上 ...
最新文章
- 微信小程序之上传附件
- [翻译]使用HtmlAgilityPack更好的HTML分析和验证
- linux mmu的实现的讲解_Linux中的物理内存管理 [一]
- oracle别名用双引号,Oracle别名大小写 -----解决方案
- APP技巧:一次性给手机充电到100%最佳?大部分人都做错了
- IS-IS数据包--包头结构
- 二维码批量生成下载工具
- 学python有前途吗-三十岁了,从零开始学python还有前途吗?
- matlab图像分割算法源码
- 从日志中截取某个时间段的日志分析
- node.js以及读取写入文件
- Java实现新浪微博第三方登录
- jee6 学习笔记 5 - Struggling with JSF2 binding GET params
- VMWare下载安装以及创建虚拟机教程
- FME基础入门学习(四)
- SQL SERVER 2008 R2的累计补丁下载地址
- ISP PIPLINE(零) 知识综述预热
- 计算机网络,看这篇就够了
- UE4中的GameMode、GameState、GameInstance
- GHOST使用教程图解
热门文章
- linux fastboot 工具,fastboot工具(FastbootCommander)
- input file 文件转base64
- 开源免费录屏软件整理
- sourceTree中git工作流使用
- 解决域用户安装软件权限问题
- [python]SM4算法实现
- 基于python的图书管理系统设计与实现论文_基于JAVA的图书馆管理系统设计[毕业论文_].doc...
- 单个数码管循环显示1-9
- idea 项目启动报错:Missing artifact com.oracle:ojdbc7:jar:12.1.0.1的处理方式
- 基于Android的海康威视的二次开发