ImageVerifierCode 换一换
格式:DOCX , 页数:15 ,大小:64.68KB ,
资源ID:8364710      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/8364710.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统 磁盘调度算法 java版.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统 磁盘调度算法 java版.docx

1、操作系统 磁盘调度算法 java版实验六 磁盘调度算法1、 实验目的通过这次实验,加深对磁盘调度算法的理解,进一步掌握先来先 服务FCFS、最短寻道时间优先SSTF、SCAN和循环SCAN算法 的实现方法。2、 试验内容问题描述:设计程序模拟先来先服务FCFS、最短寻道时间优先SSTF、SCAN 和循环SCAN算法的工作过程。假设有n个磁道号所组成的磁道 访问序列,给定开始磁道号m和磁头移动的方向(正向或者反向), 分别利用不同的磁盘调度算法访问磁道序列,给出每一次访问的 磁头移动距离,计算每种算法的平均寻道长度。3、 程序要求:1)利用先来先服务FCFS、最短寻道时间优先SSTF、SCAN和

2、循环SCAN算法模拟磁道访问过程。2)模拟四种算法的磁道访问过程,给出每个磁道访问的磁头移动距离。3)输入:磁道个数n和磁道访问序列,开始磁道号m和磁头移动方向(对SCAN和循环SCAN算法有效),算法选择1-FCFS,2-SSTF,3-SCAN,4-循环SCAN。4)输出:每种算法的平均寻道长度。4、 需求分析(1) 输入的形式和输入值的范围算法选择要访问的磁道数磁道当前磁道号输入当前移动臂的移动的方向(第三个算法)(2) 输出的形式每种算法的平均寻道长度(3)测试用例先来先服务FCFS最短寻道时间优先SCAN算法 CSCAN5、 调试分析通过对这次操作系统实验,使我懂得了操作系统磁盘调度的

3、四种算法:先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、扫描算法(SCAN)和循环扫描算法(CSCAN)。加深了我对这门课程的理解。锻炼了自己在考虑全局也不是细节的能力。通过这次实验,再一次熟悉并深入掌握了程序设计语言和算法设计。6、 测试结果(1)使用FCFS算法输入输出(2)使用SSTF算法输入输出(3)使用SCAN算法(向增长方向)输入输出(4)使用SCAN算法(向减少方向)输入输出(5)使用CSCAN算法输入输出7、附录(java)package experiment;import java.io.BufferedInputStream;import java.io.F

4、ileInputStream;import java.io.FileNotFoundException;import java.util.Scanner;public class F_Disc_Dispatch private static int maxsize = 100; / 要访问的磁道数 private static int count; / 磁道 private static int cidao = new intmaxsize; / 当前磁道号 private static int now; / 总寻道长度 private static int sum = 0; / 平均寻道长度

5、 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

6、 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() throw

7、s 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 coun

8、t; i+) cidaoi = 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 System.out.println(direction没有正确输入); return; stdin.close();

9、 /* 先来先服务调度算法 */ public static void FCFS() sum += Math.abs(cidao0 - now); System.out.print(磁盘扫描序列为:); for (i = 0; i count; i+) / 输出磁盘扫描序列 System.out.print(cidaoi + ); for (i = 0, j = 1; j count; i+, j+) / 求平均寻道长度 sum += Math.abs(cidaoj - cidaoi); AverageDistance = (float) (sum) / (float) (count); Sy

10、stem.out.println(); System.out.println(平均寻道长度: + AverageDistance); /* 最短寻道时间优先调度算法 */ public static void SSTF() k = 1; int l, r; bubble(); / 调用冒泡排序算法排序 if (cidaocount - 1 = 0; i-) System.out.print(cidaoi + ); sum = now - cidao0; if (cidao0 = now) / 若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务 System.out.print(

11、磁盘扫描序列为:); for (i = 0; i cidao0 & now cidaocount - 1) / 若当前磁道号大于请求序列中最小者且小于最大者 System.out.print(磁盘扫描序列为:); while (cidaok = 0) & (r count) / 当前磁道在请求序列范围内 if (now - cidaol) = (cidaor - now) / 选择与当前磁道最近的请求给予服务 System.out.print(cidaol + ); sum += now - cidaol; now = cidaol; l = l - 1; else System.out.pr

12、int(cidaor + ); sum += cidaor - now; now = cidaor; r = r + 1; if (l = -1) / 磁头移动到序列的最小号,返回外侧扫描仍未扫描的磁道 for (j = r; j = 0; j-) System.out.print(cidaoj + ); sum += cidaocount - 1 - cidao0; AverageDistance = (float) (sum) / (float) (count); System.out.println(); System.out.println(平均寻道长度: + AverageDista

13、nce); /* 扫描调度算法 */ public static void SCAN() / 先要给出当前磁道号和移动臂的移动方向 k = 1; int l, r; bubble(); / 调用冒泡排序算法排序 if (cidaocount - 1 = 0; i-) System.out.print(cidaoi + ); sum = now - cidao0; if (cidao0 = now) / 若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先 System.out.print(磁盘扫描序列为:); for (i = 0; i cidao0 & n

14、ow cidaocount - 1) / 若当前磁道号大于请求序列中最小者且小于最大者 while (cidaok = 0; j-) System.out.print(cidaoj + ); / 输出向内扫描的序列 for (j = r; j count; j+) / 磁头移动到最小号,则改变方向向外扫描未扫描的磁道 System.out.print(cidaoj + ); / 输出向外扫描的序列 sum = now - 2 * cidao0 + cidaocount - 1; else / 选择移动臂方向向外,则先向外扫描 System.out.print(磁盘扫描序列为:); for (j

15、 = r; j = 0; j-) / 磁头移动到最大号,则改变方向向内扫描未扫描的磁道 System.out.print(cidaoj + ); sum = -now - cidao0 + 2 * cidaocount - 1; AverageDistance = (float) (sum) / (float) (count); System.out.println(); System.out.println(平均寻道长度: + AverageDistance); /* 循环扫描调度算法 */ public static void CSCAN() k = 1; int l, r; bubble

16、(); / 调用冒泡排序算法排序 if (cidaocount - 1 = now) / 若当前磁道号大于请求序列中最大者,则直接将移动臂移动到最小号磁道依次向外给予各请求服务 System.out.print(磁盘扫描序列为:); for (i = 0; i = now) / 若当前磁道号小于请求序列中最小者,则直接由内向外依次给予各请求服务,此情况同最短寻道优先 System.out.print(磁盘扫描序列为:); for (i = 0; i cidao0 & now cidaocount - 1) / 若当前磁道号大于请求序列中最小者且小于最大者 System.out.print(磁盘

17、扫描序列为:); while (cidaok now) / 单向反复地从内向外扫描 k+; l = k - 1; r = k; for (j = r; j count; j+) System.out.print(cidaoj + ); / 输出从当前磁道向外扫描的序列 for (j = 0; j r; j+) / 当扫描完最大号磁道,磁头直接移动到最小号磁道,再向外扫描未扫描的磁道 System.out.print(cidaoj + ); sum = 2 * cidaocount - 1 + cidaol - now - 2 * cidao0; AverageDistance = (float

18、) (sum) / (float) (count); System.out.println(); System.out.print(平均寻道长度: + AverageDistance); /* 冒泡排序算法 */ public static void bubble() int temp; for (int i = 0; i count; i+) / 使用冒泡法按从小到大顺序排列 for (int j = i + 1; j cidaoj) temp = cidaoi; cidaoi = cidaoj; cidaoj = temp; System.out.println(排序后的磁盘序列为:); for (i = 0; i count; i+) / 输出排序结果 System.out.print(cidaoi + ); System.out.println();

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1