操作系统概论作业第三章Word文档格式.docx

上传人:b****6 文档编号:18999116 上传时间:2023-01-02 格式:DOCX 页数:14 大小:17.53KB
下载 相关 举报
操作系统概论作业第三章Word文档格式.docx_第1页
第1页 / 共14页
操作系统概论作业第三章Word文档格式.docx_第2页
第2页 / 共14页
操作系统概论作业第三章Word文档格式.docx_第3页
第3页 / 共14页
操作系统概论作业第三章Word文档格式.docx_第4页
第4页 / 共14页
操作系统概论作业第三章Word文档格式.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

操作系统概论作业第三章Word文档格式.docx

《操作系统概论作业第三章Word文档格式.docx》由会员分享,可在线阅读,更多相关《操作系统概论作业第三章Word文档格式.docx(14页珍藏版)》请在冰豆网上搜索。

操作系统概论作业第三章Word文档格式.docx

//输入寻找的范围磁道数i

intJage;

floatAver=0;

intmain()

{

inti;

intDiscLine[10];

//声明准备要生成的随机磁道号的数组

intHand;

//磁道数

intCon=1;

intn;

while(Con==1)

Jage=0;

printf("

\n请输入初始的磁道数(0<

n<

65536):

"

);

scanf("

%d"

&

Hand);

\n+输入寻找的范围:

Limit);

if(Limit>

65536){

超出范围!

else{

printf("

 

*********************************************\n"

****************磁盘调度算法******************\n"

 * 

1.先来先服务算法(FCFS) 

*\n"

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

3.扫描算法(SCAN) 

4.循环扫描算法(CSCAN) 

*********************************************\n"

scanf("

n);

if(n==0)exit(0);

\n"

switch(n)

case1:

SetDI(DiscLine);

//随机生成磁道数

FCFS(Hand,DiscLine);

break;

case2:

SSTF(Hand,DiscLine);

case3:

SCAN(Hand,DiscLine,0,9);

case4:

CSCAN(Hand,DiscLine);

//循环扫描算法(CSCAN) 

case5:

PaiXu();

//寻道长度由低到高排序

\n\n+寻道长度由低到高排序:

for(i=0;

i<

5;

i++)

%4d"

Best[i][0]);

}

}

\n\n+是否继续(按0结束,按1继续)?

%5d"

Con);

//数组Sour复制到数组Dist,复制到x个数

voidCopyL(intSour[],intDist[],intx)

for(i=0;

=x;

Dist[i]=Sour[i];

//打印输出数组Pri

voidPrint(intPri[],intx)

Pri[i]);

//随机生成磁道数

voidSetDI(intDiscL[])

=9;

{

DiscL[i]=rand()%Limit;

//随机生成10个磁道号

+需要寻找的磁道号:

Print(DiscL,9);

//输出随机生成的磁道号

//数组Sour把x位置的数删除,并把y前面的数向前移动,y后的数保持不变(即会出现2个y) 

voidDelInq(intSour[],intx,inty)

for(i=x;

y;

Sour[i]=Sour[i+1];

x++;

//先来先服务算法(FCFS)

voidFCFS(intHan,intDiscL[])

intRLine[10];

//将随机生成的磁道数数组Discl[]复制给数组RLine[]

inti,k,All,Temp;

//Temp是计算移动的磁道距离的临时变量

All=0;

//统计全部的磁道数变量

k=9;

//限定10个的磁道数

CopyL(DiscL,RLine,9);

//复制磁道号到临时数组RLine

\n+按照FCFS算法磁道的访问顺序为:

All=Han-RLine[0];

Temp=RLine[0]-RLine[1];

//求出移动磁道数,前一个磁道数减去后一个磁道数得出临时的移动距离

if(Temp<

0) 

Temp=(-Temp);

//移动磁道数为负数时,算出相反数作为移动磁道数

RLine[0]);

All=Temp+All;

//求全部磁道数的总和 

DelInq(RLine,0,k);

//每个磁道数向前移动一位

k--;

Best[Jage][1]=All;

//Best[][1]存放移动磁道数 

Best[Jage][0]=1;

//Best[][0]存放算法的序号为:

Jage++;

//排序的序号加1

Aver=((float)All)/10;

//求平均寻道次数 

\n+移动磁道数:

<

%5d>

"

All);

\n+平均寻道长度:

*%0.2f*"

Aver);

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

voidSSTF(intHan,intDiscL[])

inti,j,k,h,All;

intTemp;

//Temp是计算移动的磁道距离的临时变量

//将随机生成的磁道数数组Discl[]复制给数组RLine[]

intMin;

\n+按照SSTF算法磁道的访问顺序为:

Min=64000;

for(j=0;

j<

=k;

j++)//内循环寻找与当前磁道号最短寻道的时间的磁道号 

if(RLine[j]>

Han) 

//如果第一个随机生成的磁道号大于当前的磁道号,执行下一句

Temp=RLine[j]-Han;

//求出临时的移动距离

else

Temp=Han-RLine[j];

Min) 

//如果每求出一次的移动距离小于Min,执行下一句

Min=Temp;

//Temp临时值赋予Min

h=j;

//把最近当前磁道号的数组下标赋予h

All=All+Min;

//统计一共移动的距离

RLine[h]);

Han=RLine[h];

DelInq(RLine,h,k);

//每个磁道数向前移动一位

Best[Jage][0]=2;

//Best[][0]存放算法的序号为:

2

//排序序号加1

Aver=((float)All)/10;

//扫描算法(SCAN)

intSCAN(intHan,intDiscL[],intx,inty)

intj,n,k,h,m,All;

intt=0;

//将随机生成的磁道数数组Discl[]复制给数组RLine[] 

intOrder;

Order=1;

k=y;

m=2;

//控制while语句的执行,即是一定要使当前磁道向内向外都要扫描到

\n+按照SCAN算法磁道的访问顺序为:

Min=64000;

for(j=x;

=y;

j++) 

//寻找与当前磁道号最短寻道的时间的磁道号

Min)

All=All+Min;

if(RLine[h]>

=Han){ 

//判断磁道的移动方向,即是由里向外还是由外向里

Order=0;

t=1;

Han=RLine[h];

DelInq(RLine,h,k);

k--;

while(m>

if(Order==1) 

//order是判断磁盘扫描的方向标签,order是1的话,磁道向内移动

for(j=x;

h=-1;

for(n=x;

n++) 

//判断离当前磁道最近的磁道号

if(RLine[n]<

=Han)

Temp=Han-RLine[n];

if(Temp<

//Temp临时值赋予Min

h=n;

//把最近当前磁道号的数组下标赋予h

if(h!

=-1)

//叠加移动距离

//最近的磁道号作为当前磁道

//当完成向内的移动,order赋予0,执行else语句,使磁道向外移动

m--;

//向内完成一次,m减一次,保证while循环执行两次

else 

//order是0的话,磁道向外移动

j++)

if(RLine[n]>

Temp=RLine[n]-Han;

Order=1;

NAll=NAll+All;

if((y-x)>

5)

Best[Jage][1]=All;

Best[Jage][0]=3;

3

Jage++;

Aver=((float)All)/10;

if(t==1)printf("

\n+磁道由内向外移动"

elseprintf("

\n+磁道由外向内移动"

return(Han);

//循环扫描算法(CSCAN)

voidCSCAN(intHan,intDiscL[])

intj,h,n,Temp,m,k,All,Last,i;

//将随机生成的磁道数数组Discl[]复制给数组RLine[] 

inttmp=0;

Last=Han;

\n+按照CSCAN算法磁道的访问顺序为:

while(k>

=0)

//从当前磁道号开始,由内向外搜索离当前磁道最近的磁道号

for(n=0;

n++)

//统计一共移动的距离

Last=RLine[h];

if(k>

{tmp=RLine[0];

k;

i++)//算出剩下磁道号的最小值

if(tmp>

RLine[i])tmp=RLine[i];

Han=tmp;

//把最小的磁道号赋给Han

Temp=Last-tmp;

//求出最大磁道号和最小磁道号的距离差

All=All+Temp;

Best[Jage][0]=4;

4

voidPaiXu()

inti,j,Temp;

4;

if(Best[j][1]>

Best[j+1][1]) 

//如果前一个算法的移动磁道距离大于后一个移动磁道数,执行下面语句

Temp=Best[j+1][1];

//从这起下三行执行冒泡法将移动距离大小排序,排完后则执行每个算法的排序

Best[j+1][1]=Best[j][1];

Best[j][1]=Temp;

Temp=Best[j+1][0];

//将每个算法的序号用冒泡法排序

Best[j+1][0]=Best[j][0];

Best[j][0]=Temp;

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

当前位置:首页 > 党团工作 > 入党转正申请

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

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