模拟磁盘调度算法的调度过程.doc_第1页
模拟磁盘调度算法的调度过程.doc_第2页
模拟磁盘调度算法的调度过程.doc_第3页
模拟磁盘调度算法的调度过程.doc_第4页
模拟磁盘调度算法的调度过程.doc_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

目录1. 系统描叙2 1.1设计目的2 1.2要求实现的功能2 1.3实现的环境及语言22. 分析与设计3 2.1设计思想3 2.2功能模块部分3 2.3关键代码4 2.4测试数据及结果53系统测试5 3.1进入界面5 3.2先来先服务法6 3.3最短寻道时间优先法6 3.4电梯算法74. 心得体会75.参考文献86.附录(源文件)81.系统描叙1.1设计目的磁盘是高速、大容量、旋转型、可直接存取的存储设备。它作为计算机系统的辅助存储器,担负着繁重的输入输出工作,在现代计算机系统中往往同时会有若干个要求访问磁盘的输入输出要求。系统可采用一种策略,尽可能按最佳次序执行访问磁盘的请求。由于磁盘访问时间主要受寻道时间T的影响,为此需要采用合适的寻道算法,以降低寻道时间。通过这次设计可以加深我饿每年对磁盘调度算法的进一步认识,加强实践动手能力和程序开发能力的培养,提高分析问题解决问题的能力,培养代码编写能力,以巩固和加深磁盘调度的概念。操作系统是一门工程性很强的课程,它不仅要求学生掌握操作系统的工作原理和理论知识,也要求学生的实际动手能力,以加深对所学习内容的理解,使学生熟练地掌握计算机的操作方法,使用各种软件工具,加强对课程内容的理解。这次课程设计,就是通过模拟磁臂调度来加深对操作系统中磁臂调度概念的理解。1.2要求实现的功能我们要编程序模拟磁盘调度的过程,采用指定算法,模拟并输出存取臂的移动顺序,并计算存取臂移动的磁道总数。设计要求: 根据输入当前磁头的位置,磁头移动方向,柱面数等数据,编程序实现下述磁盘调度算法,并求出每种算法的平均寻道长度;要求设计主界面可以灵活选择某算法,且以下算法都要实现 1、先来先服务算法(FCFS) 2、最短寻道时间优先算法(SSTF) 3、电梯算法(SCAN)1.3实现的环境及语言 1. 集成环境:Visual Studio 20102.语言:C#2.分析与设计2.1设计思想1.先来先服务(FCFS)的设计思想 即先来的请求先被响应。FCFS策略看起来似乎是相当公平的,但是当请求的频率过高的时候FCFS策略的响应时间就会大大延长。FCFS策略为我们建立起一个随机访问机制的模型,但是假如用这个策略反复响应从里到外的请求,那么将会消耗大量的时间。为了尽量降低寻道时间,看来我们需要对等待着的请求进行适当的排序,而不是简单的使用FCFS策略。这个过程就叫做磁盘调度管理。有时候fcfs也被看作是最简单的磁盘调度算法。2.最短寻道时间优先调度(SSTF)的设计思想 最短时间优先算法选择这样的进程。要求访问的磁道,与当前磁头所在的磁道距离最近,以使每次的寻道时间最短。 3.电梯算法(SCAN)的设计思想 该算法不仅考虑到欲访问 的磁道与当前磁道间的距离,更优先考虑的是磁头当前的移动方向。例如,当磁头正在自里向外移动时,SCAN算法所考虑的下一个访问对象,应是其欲访问的磁道,既在当前磁道之外,又是距离最近的。这样自里向外的访问,直至再无更外的磁道需要访问时,才将磁道换向自外向里移动。这时,同样也是每次选择这样的进程来调度,也就是要访问的当前位置内距离最近者,这样,磁头又逐步地从外向里移动,直至再无更里面的磁道要访问,从而避免了出现“饥饿”现像。2.2功能模块部分本次课程设计为设计模拟磁盘移臂调度过程,要求采用先来先服务法和最短寻道时间优先算法,电梯算法。本程序包括两大模块:1 用户输入部分2 处理数据并输出结果部分其中在处理数据中又分为采用先来先服务法、最短寻道时间优先算法及电梯算法,电梯算法又分为从左向右和从右向左。如下图1,即为本次课程设计的功能模块图。2.3关键代码current = int.Parse(textBox1.Text.Trim();direction = Convert.ToInt32(cmb_direction.SelectedIndex);cylinder = int.Parse(tb_cylinder.Text.Trim();string nums = tb_visitors.Text.Trim().Split( );visitors = new intnums.Length;access = new intnums.Length;movement = new intnums.Length;algorithm = cmb_algorithm.SelectedIndex;tb_access.Text = straccess;tb_movement.Text = strmovement;tb_total.Text = inttotal.ToString();2.4测试数据及结果2.4.1算法:先来先服务法当前位置:50磁头移动方向:无柱面数:100磁道访问序列:3 5 6 88 66 2 55 99 442.4.2算法:最短寻道时间优先法当前位置:50 磁头移动方向:无柱面数:100磁道访问序列:55 66 88 99 44 6 5 3 22.4.3算法:电梯算法当前位置:50 磁头移动方向:从左向右柱面数:100磁道访问序列:55 66 88 99 44 6 5 3 23系统测试3.1进入界面3.2先来先服务法3.3最短寻道时间优先法3.4电梯算法4.心得体会这次程序设计我们总共花了2个星期的时间,从确定题目到具体设计,再优化运行,撰写报告,可以说总算完成了这个设计。这次课程设计的题目是模拟磁盘调度算法的执行过程,具体进入程序后,我们设计了先来先服务,最短寻道时间优先法,电梯算法等调度方法进行磁盘调度。本次设计我们所用的编程语言是c#,用Microsoft Visual Studio 2010实现程序的运行。在这次程序设计中,我们除了参考网上资料,还参考了以前的一些有关操作系统和c#的书籍,这对我们在设计过程中遇到的问题很有帮助。但事实上,最后还是有点小问题没被解决,但通过同学之间的互相交流,我们最终把问题给解决了,特别要感谢同学的细心帮助。所以,虽然这次程序设计只有两周,但还是让我们忙了一阵子。完成这次程序设计后,我只能感慨:平时的课程一定的学好,不然,关键时候就得掉链子了!5. 参考文献(1) 齐立波 黄俊伟, c#入门经典(第六版),2012,清华大学出版社(2) 张尧学 史美林,计算机操作系统教程,2009,清华大学出版社(3) 庞丽萍,操作系统原理(第三版) ,2010,华中理工大学出版社6. 附录(源文件)using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Linq;using System.Text;using System.Windows.Forms;namespace WindowsFormsApplication2 public partial class Form1 : Form public Form1() InitializeComponent(); private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) private void button1_Click(object sender, EventArgs e) int current = 0; int direction = 0; int cylinder = 0; int visitors = null; int access = null; int movement = null; int algorithm = 0; try current = int.Parse(textBox1.Text.Trim(); direction = Convert.ToInt32(cmb_direction.SelectedIndex); cylinder = int.Parse(tb_cylinder.Text.Trim(); string nums = tb_visitors.Text.Trim().Split( ); visitors = new intnums.Length; access = new intnums.Length; movement = new intnums.Length; for (int i = 0; i cylinder) MessageBox.Show(磁道数不能大于柱面数!, 出错信息, MessageBoxButtons.OK, MessageBoxIcon.Information); return; algorithm = cmb_algorithm.SelectedIndex; catch / MessageBox.Show(输入不能为空,请输入完整!, 出错信息, MessageBoxButtons.OK, MessageBoxIcon.Information); / return; if (current cylinder) MessageBox.Show(当前磁头位置不能大于柱面数!, 出错信息, MessageBoxButtons.OK, MessageBoxIcon.Information); return; if (algorithm = 0) /先来先服务法 access = visitors; movement0 = Math.Abs(access0 - current); for (int i = 1; i movement.Length; i+) movementi = Math.Abs(accessi - accessi - 1); else if (algorithm = 1) /最短寻道时间优先法 for (int i = 0; i visitors.Length; i+) int temp = cylinder; int record = 0; for (int j = 0; j visitors.Length; j+) if (Math.Abs(visitorsj - current) temp) & (visitorsj != -1) temp = Math.Abs(visitorsj - current); record = j; current = visitorsrecord; accessi = visitorsrecord; movementi = temp; visitorsrecord = -1; else /电梯算法 Array.Sort(visitors); if (direction = 1) /从左到右 int temp = cylinder; int record = 0; for (int i = 0; i 0) & (visitorsi - current temp) & (visitorsi != -1) temp = visitorsi - current; record = i; for (int j = record; j -1; j-) /向左访问 accessvisitors.Length - j - 1 = visitorsj; for (int j = 0; j access.Length; j+) /更新移动的磁道数 movementj = Math.Abs(accessj - current); current = accessj; else if (direction = 2) int temp = cylinder; int record = 0; for (int i = 0; i 0) & (visitorsi - current -1; j-) /向左访问 accessrecord - 1 - j = visitorsj; for (int j = record; j visitors.Length; j+) /向右访问 accessj = visitorsj; for (int j = 0; j access.Length; j+) /更新移动的磁道数 movementj = Math.Abs(accessj - current); current = accessj; else MessageBox.Show(请选择磁头移动方向!, 出错信息, MessageBoxButtons.OK, MessageBoxIcon.Information); return; /输出结果 string straccess = ; string strmovement = ; in

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论