好文档 - 专业文书写作范文服务资料分享网站

操作系统移动臂调度算法的实现

天下 分享 时间: 加入收藏 我要投稿 点赞

操作系统移动臂调度算

法的实现

文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]

南京工程学院

上机实验报告

课 程 名 称: 操作系统 实验项目名称: 移动臂调度算法的实现 学生班级: 学生学号: 学生姓名: 指导教师: 实 验 时 间: 实 验 地 点: 信息楼专业机房 实验成绩评定:

2016-2017-1学期

一、实验目的及内容

掌握操作系统的设备管理功能,熟悉移动臂调度算法,设计恰当的数据结构和算法,模拟实现移动臂调度算法。要求至少模拟实现一种磁盘移臂调度算法。

二、实验相关知识简介

磁盘移臂调度的目标就是要使磁盘访问的总时间中的寻找时间最小。因此,磁盘移臂调度要尽量减少磁盘移动臂移动的距离。磁盘移臂调度算法很多,常用的也有好几种,一个好的磁盘调度算法,不仅要使磁盘寻找时间最小,同时,还要避免移动臂频繁地改变移动方向,因为频繁的改向不仅使时间增加,还容易损耗机械部件。

常用的磁盘移臂调度算法有:先来先服务、最短寻找时间优先、单向扫描、双向扫描调度算法等。 三、解决问题思路及关键程序代码分析 (一) 最短寻找时间优先调度算法简介

最短寻找时间调度算法总是使寻找时间最短的请求最先得到服务,跟请求者的请求时间先后顺序无关。这种算法具有比先来先服务更好的性能。但是该算法可能会出现请求者被“饿死”的情况,当靠近磁头的请求源源不断地到来,这会使早来的但离磁头较远的请求长时间得不到服务。

该算法的优点是可以得到较短的平均响应时间,有较好的吞吐量。该算法的缺点是缺乏公平性,对中间磁道的访问比较“照顾”,对两端磁道访问比较“疏远”,相应时间的变化幅度较大。该算法与先来先服务算法一样,都会导致移动臂频繁改向。 (二) 算法模拟

1. 对算法设计进行说明

该算法的实现中,主要是选择调度处理的磁道是与当前磁头所在磁道距离最近的磁道,以使每次的寻道时间最短。当选择了某个离当前磁头所在磁道最近的磁道,下一轮的当前磁道便改成了上一轮的最近磁道,并且把这个最近的磁道从请求序列取消,直到请求序列中不再有请求的磁道。

2. 关键代码分析

import .*; import .*; public class {

private static int maxsize = 100;

private static int Disc[] = new int[maxsize]; //请求序列 private static int count;//要访问的磁道数 private static int disc; //当前磁道号

private static int perTime;//移过每个柱面需要时间 private static int Distance=0;//总寻道长度 private static int FindTime;//查找时间

private static double AvgDistance;//平均寻道长度

public Suanfa(int disc,int count,int perTime,int Disc[]) { }

public void input() {

\请输入当前磁道号:\); Scanner s1=new Scanner; disc=();

\请输入要访问的磁道数:\); Scanner s2=new Scanner; count=();

\请输入移过每个柱面需要的时间:\); Scanner s3=new Scanner; perTime=();

\请输入磁盘请求序列(以空格隔开):\); =disc; =count; =perTime;

for(int i=0;i<;i++)

Disc[i]=Disc[i];

}

Scanner s4=new Scanner; for(int i=0;i

Disc[i]=();

public void Delete(int arr[],int n) { }

public void running() {

int j=0,count1=count; int min; int discc=disc;

int Discc[]=new int[count]; while(j

int num=0;

min=(Disc[0]>=discc)(Disc[0]-discc):(discc-Disc[0]);

for(int i=n;i<;i++)

arr[i]=arr[i+1];

for(int i=0;i

if(((Disc[i]>=discc)&&(Disc[i]- }

}

Discc[j++]=Disc[num]; Distance+=min; discc=Disc[num]; Delete(Disc,num); count1--; }

AvgDistance=(double)Distance/count; FindTime=perTime*Distance; \服务序列:\+disc+\); for(int i=0;i

\);

\总寻道长度:\+Distance); \平均寻道长度:\+AvgDistance); \寻道时间:\+FindTime+\);

{ }

min=(Disc[i]>=discc)(Disc[i]-discc):(discc- num=i;

discc

Disc[i]);

操作系统移动臂调度算法的实现

操作系统移动臂调度算法的实现文档编制序号:[KKIDT-LLE0828-LLETD298-POI08]南京工程学院上机实验报告课
推荐度:
点击下载文档文档为doc格式
322uc6avuq2i4cx3q5al1oirv327wf00pia
领取福利

微信扫码领取福利

微信扫码分享