程序模拟磁盘调度设计实验4实验报告.docx

上传人:b****5 文档编号:7214003 上传时间:2023-05-11 格式:DOCX 页数:19 大小:150.47KB
下载 相关 举报
程序模拟磁盘调度设计实验4实验报告.docx_第1页
第1页 / 共19页
程序模拟磁盘调度设计实验4实验报告.docx_第2页
第2页 / 共19页
程序模拟磁盘调度设计实验4实验报告.docx_第3页
第3页 / 共19页
程序模拟磁盘调度设计实验4实验报告.docx_第4页
第4页 / 共19页
程序模拟磁盘调度设计实验4实验报告.docx_第5页
第5页 / 共19页
程序模拟磁盘调度设计实验4实验报告.docx_第6页
第6页 / 共19页
程序模拟磁盘调度设计实验4实验报告.docx_第7页
第7页 / 共19页
程序模拟磁盘调度设计实验4实验报告.docx_第8页
第8页 / 共19页
程序模拟磁盘调度设计实验4实验报告.docx_第9页
第9页 / 共19页
程序模拟磁盘调度设计实验4实验报告.docx_第10页
第10页 / 共19页
程序模拟磁盘调度设计实验4实验报告.docx_第11页
第11页 / 共19页
程序模拟磁盘调度设计实验4实验报告.docx_第12页
第12页 / 共19页
程序模拟磁盘调度设计实验4实验报告.docx_第13页
第13页 / 共19页
程序模拟磁盘调度设计实验4实验报告.docx_第14页
第14页 / 共19页
程序模拟磁盘调度设计实验4实验报告.docx_第15页
第15页 / 共19页
程序模拟磁盘调度设计实验4实验报告.docx_第16页
第16页 / 共19页
程序模拟磁盘调度设计实验4实验报告.docx_第17页
第17页 / 共19页
程序模拟磁盘调度设计实验4实验报告.docx_第18页
第18页 / 共19页
程序模拟磁盘调度设计实验4实验报告.docx_第19页
第19页 / 共19页
亲,该文档总共19页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

程序模拟磁盘调度设计实验4实验报告.docx

《程序模拟磁盘调度设计实验4实验报告.docx》由会员分享,可在线阅读,更多相关《程序模拟磁盘调度设计实验4实验报告.docx(19页珍藏版)》请在冰点文库上搜索。

程序模拟磁盘调度设计实验4实验报告.docx

程序模拟磁盘调度设计实验4实验报告

《操作系统》实验报告

年级、专业、班级

2010级信安一班

2010级信安二班

姓名

实验题目

程序模拟磁盘调度设计

实验时间

2013.5.21

实验地点

主教0416

实验成绩

实验性质

□验证性□设计性□综合性

教师评价:

□算法/实验过程正确;□源程序/实验内容提交□程序结构/实验步骤合理;

□实验结果正确;□语法、语义正确;□报告规范;

其他:

评价教师签名:

一、实验目的

设计程序实现FIFO、SSTF、SCAN和C-SCAN算法模拟磁盘调度。

二、实验项目内容

设计程序实现分析四种不同的磁盘调度算法,统计每种算法的磁道移动数。

程序功能:

1.设计程序实现FIFO、SSTF、SCAN以及C-SCAN四种不同的磁盘调度算法。

2.磁盘调度请求序列长度不少于100。

3•给出每种调度的服务序列。

4.统计每种调度的磁道移动数。

5.根据实验结果,对四种调度算法进行分析评价。

三、实验过程或算法(源程序)

程系统主界面可以灵活选择某种算法,算法包括:

先来先服务算法(FCFS)、

最短寻道时间优先算法(SSTF)、扫描算法(SCAN)、循环扫描算法(CSCAN)。

模块调用关系图:

1、先来先服务算法(FCFS

这是一种比较简单的磁盘调度算法。

它根据进程请求访问磁盘的先后次序进行调

度。

此算法的优点是公平、简单,且每个进程的请求都能依次得到处理,不会出现某

一进程的请求长期得不到满足的情况。

此算法由于未对寻道进行优化,在对磁盘的访

问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较

长,但各进程得到服务的响应时间的变化幅度较小。

2、最短寻道时间优先算法(SSTF)

该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以

使每次的寻道时间最短,该算法可以得到比较好的吞吐量,但却不能保证平均寻道时

间最短。

其缺点是对用户的服务请求的响应机会不是均等的,因而导致响应时间的变

化幅度很大。

在服务请求很多的情况下,对内外边缘磁道的请求将会无限期的被延迟,有些请求的响应时间将不可预期。

随机生咸磁适号-

输出^商序的薪道序

務动到最小f刘号,改冋外【内〉穆动扫

 

求平均寻道长度,

输出穆动的平均晞遣齣•

 

又是距离最近的。

自外向里移动。

在当前磁道之内,

这样自里向外地访问,直这时,同样也是每次选择从而避免了饥饿现象的出

3、扫描算法(SCAN

扫描算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头的当

前移动方向。

例如,当磁头正在自里向外移动时,扫描算法所选择的下一个访问对象应是其欲访问的磁道既在当前磁道之外,到再无更外的磁道需要访问才将磁臂换向,这样的进程来调度,即其要访问的磁道,

现。

由于这种算法中磁头移动的规律颇似电梯的运行,故又称为电梯调度算法。

此算

法基本上克服了最短寻道时间优先算法的服务集中于中间磁道和响应时间变化比较大的缺点,而具有最短寻道时间优先算法的优点即吞吐量较大,平均响应时间较小,但由于是摆动式的扫描方法,两侧磁道被访问的频率仍低于中间磁道。

亶法浚程圉:

"

使用冒泡法从小到夫排序•

输出排好序的磁道序列-

选择移动胃移动万问,幵始扫描+

肾狐岷小':

卞耳,改向外(内)陽动扫描末扫描的茁荷』

4、循环扫描算法(CSCAN

循环扫描算法是对扫描算法的改进。

如果对磁道的访问请求是均匀分布的,当磁

头到达磁盘的一端,并反向运动时落在磁头之后的访问请求相对较少。

这是由于这些

磁道刚被处理,而磁盘另一端的请求密度相当高,且这些访问请求等待的时间较长,为了解决这种情况,循环扫描算法规定磁头单向移动。

例如,只自里向外移动,当磁

头移到最外的被访问磁道时,磁头立即返回到最里的欲访磁道,即将最小磁道号紧接

着最大磁道号构成循环,进行扫描。

 

幵蛤•

 

規立榕动包单问反豆的从内WhF3i-

对拭主成

!

3擱到員总陌,宜搞

<_■

V

判所岂SikiiU0序列中加恆赵•

叮.审

注:

以上算法的实现程序见附录一源代码。

四、实验结果及分析和(或)源程序调试过程

1.主界面:

4-1.主界面

2.在“磁盘磁道数”、“被请求磁道数”、“当前磁道”输入框中输入相应内容,则随机生成并在“磁道请求序列”显示框中显示生成的请求序列:

图4-2生成序列

 

3.在组合框中选择相应的算法进行模拟,在“调度服务序列”显示框显示相应算法的调度序列及磁道号移动距离:

图4-3FIFO算法模拟结果

500生诙机序列

1QQ

250SSTF▼

平均日适也信

7

日适总低度733

蹴道请茨庠列:

图4-4SSTF算法模拟结果

图4-5SCAN算法模拟结果

图4-6C-SCAN算法模拟结果

演示结束。

 

五、心得体会:

通过本次实验,我对四种磁盘调度算法策略有了更深的了解,理解了操

作系统关于磁盘管理的一些方法,并通过编程实现了FIFO算法,SSTF

算法,SCAN算法,C-SCAN算法。

也进一步提高了我们的编程能力,从中学会了很多。

六、附录(程序源代码)

DiskScheduling.java

importjava.awt.BorderLayout;importjava.awt.GridLayout;

importjava.awt.event.ActionEvent;importjava.awt.event.ActionListener;importjava.awt.event.ltemEvent;importjava.awt.event.ltemListener;importjava.util.Random;

importjavax.swing.JButton;

importjavax.swing.JComboBox;importjavax.swing.JFrame;

importjavax.swing.JLabel;importjavax.swing.JOptionPane;

importjavax.swing.JPanel;importjavax.swing.JScrollPane;

importjavax.swing.JTextArea;importjavax.swing.JTextField;

public

classDiskScheduling

extendsJFrameimplementsActionListener{

newJTextField。

newJTextField()newJTextField()newJTextArea()newJTextArea()

JTextFieldjtext1

JTextFieldjtext2

JTextFieldjtext3

JTextAreajtext4

JTextAreajtext5

JTextAreatext1=newJTextArea();

JTextAreatext2=newJTextArea();

JLabel

lab1=

newJLabel(

"磁盘磁道数");

JLabel

lab2=

newJLabel(

"被请求磁道数”);

JLabel

lab3=

newJLabel(

"当前磁道”);

JLabel

lab4=

newJLabel(

"寻道总长度:

”);

JLabel

lab5=

newJLabel(

"平均寻道长度:

”);

JLabel

lab6=

newJLabel(

"磁道请求序列:

”);

JLabelIab7=newJLabel("调度服务序列:

");JPanelpanl=newJPanel();

JPanelpan2=newJPanel();

JPanelpan3=newJPanel();

JPanelpan4=newJPanel();

JPanelpan5=newJPanel();

JPanelpan6=newJPanel();

JButtonmake;privateString[]flag={"请选

择..

","FIFO","SSTF",”SCAN","C-SCAN"};

private

JComboBoxjcbo

private

int

num;

private

int

kai;

private

int

sum;

private

int

disknum;

private

int

mF0,n=0;

private

int

s[];

private

int

s1[];

private

int

c1[];

private

int

c2[];

//Drawdraw;

newJComboBox(flag);

 

publicDiskScheduling(){

make=newJButton("生成随机序列”);make.setSize(130,25);

make.setLocation(250,10);make.addActionListener(this);

lab1.setSize(100,25);

lab1.setLocation(20,10);

lab2.setSize(100,25);

lab2.setLocation(20,50);

lab3.setSize(100,25);

lab3.setLocation(20,90);

lab4.setSize(100,25);

lab4.setLocation(20,130);

lab5.setSize(100,25);

lab5.setLocation(160,130);

lab6.setSize(100,25);

lab6.setLocation(20,165);

pan2.setLayout(null);

jtext1.setSize(100,25);jtext1.setLocation(130,10);jtext1.setText("0");

jtext2.setSize(100,25);

jtext2.setLocation(130,50);

jtext2.setText("0");

jtext3.setSize(100,25);jtext3.setLocation(130,90);

jtext3.setText("0");

jtext4.setSize(50,25);

jtext4.setLocation(100,135);

jtext4.setEditable(false);

jtext4.setText("0");

jtext4.setOpaque(false);

jtext5.setSize(50,25);

jtext5.setLocation(265,135);

jtext5.setEditable(false);

jtext5.setText("0");

jtext5.setOpaque(false);

jcbo.setSize(130,25);

jcbo.setLocation(250,90);jcbo.setEnabled(false);

jcbo.addItemListener(newItemListener(){

@OverridepublicvoiditemStateChanged(ltemEvente){//TODOAuto-generatedmethodstub

if(jcbo.getSelectedIndex()==1){fifo();

}

elseif(jcbo.getSelectedIndex()==2){sstf();

}

elseif(jcbo.getSelectedIndex()==3){scan();

}

elseif(jcbo.getSelectedIndex()==4){cscan();

}}

});

pan2.add(

lab1);

pan2.add(

lab2);

pan2.add(

lab3);

pan2.add(

lab4);

pan2.add(

lab5);

pan2.add(

lab6);

pan2.add(

jtext1

);

pan2.add(

jtext2

);

pan2.add(

jtext3

);

pan2.add(

jtext4

);

pan2.add(

jtext5

);

pan2.add(

jcbo);

pan2.add(

make);

pan2.setSize(450,190);

pan2.setLocation(2,2);

textl.setLineWrap(true);

text1.setWrapStyleWord(true);

text1.setEditable(false);

JScrollPanescrollPane1=newJScrollPane(text1);

pan3.setLayout(newBorderLayout());

pan3.add(scrollPane1,BorderLayout.CENTER;

pan3.setSize(450,120);

pan3.setLocation(2,203);

text2.setLineWrap(true);

text2.setWrapStyleWord(true);

text2.setEditable(false);

JScrollPanescrollPane2=newJScrollPane(text2);

pan4.setLayout(newBorderLayout。

);

pan4.add(scrollPane2,BorderLayout.CENTER;

pan4.setSize(450,120);

pan4.setLocation(2,360);

lab7.setSize(100,25);

pan5.setLayout(null);

lab7.setLocation(20,10);

pan5.add(lab7);

pan5.setSize(450,35);

pan5.setLocation(2,324);

pan1.setLayout(null);

pan1.add(pan2);

pan1.add(pan3);pan1.add(pan5);

pan1.add(pan4);

setLayout(newGridLayout(1,2,5,5));

add(pan1,BorderLayout.CENTEFR;

}publicvoidcreat(){

m=0;n=0;

Randomrnd=kai=Integer.

newRandom();parseInt(jtext3

.getText());

num=Integer.parseInt(jtext2.getText());

disknum=Integer.parseInt(jtextl.getText());

if(kai

=0&&kai!

=0){

s=newint[num];si=newint[num];ci=newint[num];c2=newint[num];

for(intj=O;j

s[j]=rnd.nextlnt(disknum);

for(inti=0;i

if(s[j]==s[i]||s[j]>disknum)

j--;

}

Stringstext="";

for(inti=0;i

{stext+=s[i]+"";

}

paixu();

text1.setText(stext);

jcbo.setEnabled(true);

}

else{

JOptionPane.showMessageDialog(this,"输入不正确,请重新输入!

"+'\n'+"提示:

1.当前所在磁道数不能大于磁盘磁道数."+

'\n'+"2.磁盘磁道数和被请求磁道数都不能为0.",

"警告!

",JOptionPane.WARNING_MESSAGE

}

}

public

void

paixu(){

int

su=

kai;

int

t;

for

(int

i=0;i

if(su>s[i])c1[m++]=s[i];else

c2[n++]=s[i];

for(inti=0;i

for(inti=0;i{t=c2[i];

mi++)mj++)c1[j])c1[i]=c1[j];

n;i++)

n;j++)c2[j])c2[i]=c2[j];

c1[j]=t;}

c2[j]=t;}

publicvoidfifo(){

磁道号移动距离

Stringstext="被访问的下一个磁道

"+'\n';

intsu=kai;

sum=0;

for(inti=0;i

{if(su

else

si[i]=su-s[i];

su=s[i];sum+=s1[i];

}

jtext4.setText(String.valueOf(sum));sum=sum/num;

for(inti=0;i

{stext+=""+s[i]+"

"+s1[i]+"";

stext+='\n';

}

stext+="平均寻道长度:

"+sum+"";

jtext5.setText(String.valueOf(sum));

text2.setText(stext);

}

publicvoidsstf(){

Stringstext="被访问的下一个磁道磁道号移动距离

"+'\n';

intsu=kai;

ints2[]=sum=0;

new

int[100];

for(int

i=0;i<

mi++)

s2[i]=

c1[i];

for(int

i=0;i<

n;i++)

s2[i+m=

:

c2[i];

for(int

i=0;i<

num;i++)

{if(su

s1[i]=s2[i]-su;

else

s1[i]=su-s2[i];

su=s2[i];sum+=s1[i];

}

jtext4.setText(String.valueOf(sum));sum=sum/num;

for(inti=0;i

{stext+=""+s2[i]+"

"+s1[i]+"";

stext+='\n';

}

stext+="平均寻道长度:

"+sum+"";

jtext5.setText(String.valueOf(sum));text2.setText(stext);

}

publicvoidscan(){

Stringstext="被访问的下一个磁道磁道号移动距离

"+'\n';

int

su=

kai;

int

s2[]=

new

int[100];

sum=0;

for

(int

i=0;i<

n;i++)

s2[i]=

c2[i];

for

(int

i=0;i<

mi++)

s2[i+

n]=

:

c1[i];

for

(int

i=0;i<

num;i++)

{if(su

s1[i]=s2[i]-su;

else

s1[i]=su-s2[i];

su=s2[i];

sum+=s1[i];

}

jtext4.setText(String.valueOf(sum));

sum=sum/num;

for(inti=0;i

{stext+=""+s2[i]+"

"+s1[i]+"";

stext+='\n';

}

stext+="平均寻道长度:

"+sum+"";

jtext5.setText(String.valueOf(sum));

text2.setText(stext);

}

publicvoidcscan(){

Stringstext="被访问的下一个磁道磁道号移动距离

"+'\n';

intsu=kai;

intj=0;

ints2[]=newint[100];

sum=0;

for(inti=0;i

s2[i]=c2[i];

for(inti=m-1;i>=0;j++,i--)

s2[j+n]=c1[i];

for(inti=0;i

{if(su

s1[i]=s2[i]-su;

else

s1[i]=su-s2[i];

su=s2[i];

sum+=s1[i];

}

jtext4.setText(String.valueOf(sum));sum=sum/num;

for(inti=0;i

{stext+=""+s2[i]+"

"+s1[i]+"";

stext+='\n';

}

stext+="平均寻道长度:

"+sum+"";

jtext5.setText(String.valueOf(

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 人文社科 > 法律资料

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2