操作系统:磁盘调度实验之扫描和循环扫描调度算法(含源码和文档)

2023-11-18

目录

第一章 实验相关概述 

1. 扫描算法 

2. 循环扫描算法 

第二章 实验的目的及要求 

1. 目的 

2. 要求 

第三章 实验的实现思路及步骤 

1. 扫描算法 

2. 循环扫描算法 

第四章 实验结果分析 

1.优缺点及区别 

2.实现代码及截图 

第五章 实验心得 

参考文献 

致谢 

  • 实验相关概述
  1. 扫描算法

扫描算法又称为电梯算法,其原理与电梯运行情况相似,即运行方向上的请求优先,若就是访问方向向上,则先依次访问较大的磁道号至顶,再向下访问较小的磁道号;若就是访问方向向下,则先依次访问较小得磁道号至底,再向上访问较大的磁道号。

  1. 循环扫描算法

循环扫描算法又称为单向电梯算法,若就是访问方向向上,则向上依次访问完较大的磁道号后,返回最低端,依次向上访问较小的磁道号;若就是访问方向向下,则向下依次访问完较小的磁道号后,返回最顶端,依次向下访问较大的磁道号.

  • 实验的目的及要求
  1. 目的

通过实验使学生掌握磁盘上数据的组织方式,以及让学生了解并掌握扫描算法及循环扫描算法的相关特性,及区别。

  1. 要求

实验结束后要求每位同学都应该掌握磁盘上数据的组织方式,以及扫描算法和循环扫描算法的基本原理。

  • 实验的实现思路及步骤
  1. 扫描算法

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].清华大学出版社.

致谢

首先非常感谢学校能开设这个实验,为我日后从事计算机方面的工作有所助益,奠定了基础。

其次,我要特别感谢熊婷老师对我的悉心指导,在实验期间老师帮助我理清实验思路,指导操作方法。老师渊博的知识、严谨的作风、诲人不倦的态度和学术上精益求精的精神让我受益终生。这期间凝结了老师很多的心血,在此我表示由衷的感谢。没有他的帮助,我将无法顺利完成这次实验。

再次,学校在这方面也给我们提供了很大的支持和帮助,学校领导比较重视,给我们安排了较多的上机次数和足够的计算机,让我们有尽可能多的时间上机;并为我们开通了网线,方便我们上网查找信息;另外提供了专门的教室方便我们上机调试;对于学校和老师为我的实验所提供的极大帮助和关心,在此我致以衷心的感谢!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

操作系统:磁盘调度实验之扫描和循环扫描调度算法(含源码和文档) 的相关文章

  • Java:扩展类并实现具有相同方法的接口

    可能无法完成以下操作 我收到编译错误 继承的方法 A doSomthing int 无法隐藏 B 中的公共抽象方法 public class A int doSomthing int x return x public interface
  • 有没有创建 Cron 表达式的 Java 代码? [关闭]

    Closed 这个问题需要多问focused help closed questions 目前不接受答案 我需要一个 Java 代码来根据用户输入创建一个 cron 表达式 用户输入是时间 频率和执行次数 只需从评论中添加 自己创建 即可
  • TreeMap 删除所有大于某个键的键

    在项目中 我需要删除键值大于某个键的所有对象 键类型为Date 如果重要的话 据我所知TreeMapJava中实现的是红黑树 它是一种二叉搜索树 所以我应该得到O n 删除子树时 但除了制作尾部视图并一一删除之外 我找不到任何方法可以做到这
  • 与 Eclipse 中的 Java Content Assist 交互

    作为我的插件项目的一部分 我正在考虑与 Eclipse 在 Java 文件上显示的内容辅助列表进行交互 我正在尝试根据一些外部数据对列表进行重新排序 我看过一些有关创建新内容辅助的教程 但没有看到有关更改现有内容辅助的教程 这可能吗 如果是
  • Thymeleaf 3 Spring 5 映射加载字符串而不是 HTML

    我正在尝试将 Spring 5 和 Thymeleaf 3 一起配置 我正在 Eclipse 上工作 我使用 全新安装 构建并使用 springboot run 运行应用程序 我已经设置了一个控制器和几个模板 但 Thymeleaf 似乎找
  • 如何调试“com.android.okhttp”

    在android kitkat中 URLConnection的实现已经被OkHttp取代 如何调试呢 OkHttp 位于此目录中 external okhttp android main java com squareup okhttp 当
  • Android中如何使用JNI获取设备ID?

    我想从 c 获取 IMEIJNI 我使用下面的代码 但是遇到了未能获取的错误cls 它总是返回NULL 我检查了环境和上下文 它们都没有问题 为什么我不能得到Context班级 我在网上搜索了一下 有人说我们应该使用java lang Ob
  • Jframe 内有 2 个 Jdialogs 的 setModal 问题

    当我设置第一个选项时 我遇到了问题JDialog模态 第二个非模态 这是我正在尝试实现的功能 单击 测试对话框 按钮 一个JDialog有名字自定义对话框 主要的将会打开 如果单击 是 选项自定义对话框主 其他JDialog named 自
  • java inputstream 打印控制台内容

    sock new Socket www google com 80 out new BufferedOutputStream sock getOutputStream in new BufferedInputStream sock getI
  • Android 无法解析日期异常

    当尝试解析发送到我的 Android 客户端的日期字符串时 我得到一个无法解析的日期 这是例外 java text ParseException 无法解析的日期 2018 09 18T00 00 00Z 位于 偏移量 19 在 java t
  • 如何在字段值无效的情况下更改 Struts2 验证错误消息?

    我在 Web 表单上使用 Struts2 验证 如果字段假设为整数或日期 则
  • 将人类日期(当地时间 GMT)转​​换为日期

    我正在服务器上工作 服务器正在向我发送 GMT 本地日期的日期 例如Fri Jun 22 09 29 29 NPT 2018在字符串格式上 我将其转换为日期 如下所示 SimpleDateFormat simpleDateFormat ne
  • JDBC 时间戳和日期 GMT 问题

    我有一个 JDBC 日期列 如果我使用 getDate 则会得到 date 仅部分2009 年 10 月 2 日但如果我使用 getTimestamp 我会得到完整的 date 2009 年 10 月 2 日 13 56 78 890 这正
  • 不可变的最终变量应该始终是静态的吗? [复制]

    这个问题在这里已经有答案了 在java中 如果一个变量是不可变的并且是final的 那么它应该是一个静态类变量吗 我问这个问题是因为每次类的实例使用它时创建一个新对象似乎很浪费 因为无论如何它总是相同的 Example 每次调用方法时都会创
  • Spring @Cacheable 和 @Async 注解

    我需要缓存一些异步计算的结果 具体来说 为了克服这个问题 我尝试使用 Spring 4 3 缓存和异步计算功能 作为示例 我们采用以下代码 Service class AsyncService Async Cacheable users C
  • 列表过滤器内的 Java 8 lambda 列表

    示例 JSON id 1 products id 333 status Active id 222 status Inactive id 111 status Active id 2 products id 6 status Active
  • Java/Python 中的快速 IPC/Socket 通信

    我的应用程序中需要两个进程 Java 和 Python 进行通信 我注意到套接字通信占用了 93 的运行时间 为什么通讯这么慢 我应该寻找套接字通信的替代方案还是可以使其更快 更新 我发现了一个简单的修复方法 由于某些未知原因 缓冲输出流似
  • MiniDFSCluster UnsatisfiedLinkError org.apache.hadoop.io.nativeio.NativeIO$Windows.access0

    做时 new MiniDFSCluster Builder config build 我得到这个异常 java lang UnsatisfiedLinkError org apache hadoop io nativeio NativeIO
  • Java 11 - 将 Spring @PostConstruct 替换为 afterPropertiesSet 或使用 initMethod

    我正在使用 spring 应用程序 有时会使用 PostConstruct用于代码和测试中的设置 看来注释将被排除在外Java 11 https www baeldung com spring postconstruct predestro
  • 由 Servlet 容器提供服务的 WebSocket

    上周我研究了 WebSockets 并对如何使用 Java Servlet API 实现服务器端进行了一些思考 我没有花费太多时间 但在使用 Tomcat 进行一些测试时遇到了以下问题 如果不修补容器或至少对 HttpServletResp

随机推荐

  • 利用Python进行简单的图像识别(验证码)

    这是一个最简单的图像识别 将图片加载后直接利用Python的一个识别引擎进行识别 将图片中的数字通过 pytesseract image to string image 识别后将结果存入到本地的txt文件中 1 encoding utf 8
  • csol2服务器维护中 无法登陆游戏,csol2现在怎么登不上去?为什么?说服务...

    2016 07 08 00 48龚宁静 客户经理 CSOL金勋怎么抽的第一个建议 卡延迟 看过好多人分享经验说卡延迟出金的几率会很大 本人也有些体会 我家是10M的光纤 跟我开金少有关系 我想有很大关系 因为在活动期间 那屏刷的真叫一个快
  • Android开启和关闭护眼模式

    Android开启和关闭护眼模式 在现代社会中 我们经常长时间使用智能手机或平板电脑等电子设备 长时间盯着屏幕可能会对眼睛造成疲劳和不适 为了保护用户的眼睛健康 许多移动设备都提供了护眼模式 本文将介绍如何在Android设备上开启和关闭护
  • Element中的el-tree组件的懒加载和手动更新节点数据

  • 安装Windows10系统后,CPU 不再支持虚拟化解决方案

    小米的游戏本 之前是支持虚拟化的 安装过好几次虚拟机 最近重新安装了Windows10系统后 CPU不再支持虚拟化了 具体表现为安装VMWare失败 解决方案 小娜搜索并打开 启用或关闭Windows功能 把Hyper V的勾选去掉 因为它
  • Vue前端开发中的输入限制与输入规则探究

    前言 在Vue前端开发中 我们经常需要对用户的输入进行限制和规范 以确保数据的准确性和安全性 本文将介绍如何使用Vue的el input组件来实现输入限制和输入规则 并提供相应的代码示例 一 输入限制 最大长度限制 我们可以使用maxlen
  • 如何快速增加大量用户和用户组

    Windows平台下 假设建有Domain A和Domain B 两者已经建立了信任关系 可以采用在命令行中输入如下命令在各自的domain中增加用户或用户组 1 增加用户组FOR L i in 1 1 10 DO dsadd group
  • 神经网络与深度学习笔记——代价函数,规范化,过拟合

    神经网络与深度学习笔记系列一共有五个专题 分别是第一章使用神经网络识别手写数字 梯度下降算法是什么 主要介绍了神经网络的基础例如感知器激活函数等概念 最主要介绍了梯度下降算法 第二章反向传播算法如何工作 反向传播算法原理 主要介绍了反向传播
  • 数据结构--二叉树-堆(1)

    文章目录 树 概念 相关的基本概念 树的表示 二叉树 概念 特殊二叉树 性质 堆 二叉树的顺序结构 堆的概念 堆的实现 初始化 数组初始化为堆 向上调整 向下调整 插入 删除 打印 摧毁 判空 获取堆顶数据 验证 堆的应用 堆排序 TopK
  • 磁盘测试工具FIO

    磁盘测试工具FIO https www cnblogs com klb561 p 11939355 html 目前主流的第三方IO测试工具有fio iometer和Orion 这三种工具各有千秋 fio在Linux系统下使用比较方便 iom
  • 淘宝官方订单API接口,获取售出的商品订单列表(爬虫数据)

    淘宝 天猫获取售出的商品订单列表 API 返回值说明 seller order list 获取售出的商品订单列表 公共参数 名称 类型 必须 描述 key String 是 调用key 必须以GET方式拼接在URL中 获取Key和secre
  • 大学英语六级历年真题Word,PDF,和音频 下载

    1 链接 https pan baidu com s 11w bAM1JoHTt HjNfor70g 提取码 ro6w 复制这段内容后打开百度网盘手机App 操作更方便哦 1 1 1 1 1 下载方式 扫码联系获取 1学习人工智能可以扫码关
  • C++函数指针定义及用法

    什么是函数指针 如果在程序中定义了一个函数 那么在编译时系统就会为这个函数代码分配一段存储空间 这段存储空间的首地址称为这个函数的地址 而且函数名表示的就是这个地址 既然是地址我们就可以定义一个指针变量来存放 这个指针变量就叫作函数指针变量
  • Windows游戏加速外挂-变速齿轮 学习笔记-【第一篇】

    找到两篇文章 是比较流行的方法 接下来记录一下收获 第一篇文章 变速齿轮 研究手记 转自 http www newasp net tech 58262 html 注意 如果你看了本文 对我们这个软件有兴趣 请到我们的主页www vrbrot
  • 幂等性常用的解决方案

    幂等性常用的解决方案 在进行讲解方案之前 我想先说一下什么是幂等性 下面是我用自己的理解说的 不是专业的术语 对于同样的多次请求 只会对第一次请求进行处理 多次请求返回的结果是相同的 幂等性的专业术语如下 选自百度百科 幂等 idempot
  • 数据科学与大数据分析项目练习-3将Apriori算法应用于R中提供的“Groceries”数据集

    R语言Apriori算法 项目要求 Project Start 规则生成和可视化 我们需要安装arules and arulesViz包 项目要求 生成频繁项目集满足下面条件 The minimum support threshold as
  • 异常检测-pyod包的入门使用

    本文github地址 pyod包的入门使用 文章目录 0异常检测简介 1pyod包简介 1 1注意事项 1 2函数的通用使用方法 1 3模型保存 1 4三个函数组 1 5不同模型在基准数据上的表现 1 6多个基准检测器的结合 2异常值检测示
  • 15 个 Android 通用流行框架大全

    转自 http www androidchina net 4920 html rd sukey 3903d1d3b699c208f96a43a12fc2e7ae683c66523214d79bc81eec0c330d577be318928c
  • 2021-06-22

    Ubuntu16 04系统安装ROS时出现sudo rosdep init ERROR default sources list file already exists etc ros rosdep sources list d 20 de
  • 操作系统:磁盘调度实验之扫描和循环扫描调度算法(含源码和文档)

    目录 第一章 实验相关概述 1 扫描算法 2 循环扫描算法 第二章 实验的目的及要求 1 目的 2 要求 第三章 实验的实现思路及步骤 1 扫描算法 2 循环扫描算法 第四章 实验结果分析 1 优缺点及区别 2 实现代码及截图 第五章 实验