操作系统课程设计徐阳 3091110042.docx

上传人:b****7 文档编号:10893279 上传时间:2023-02-23 格式:DOCX 页数:27 大小:189.68KB
下载 相关 举报
操作系统课程设计徐阳 3091110042.docx_第1页
第1页 / 共27页
操作系统课程设计徐阳 3091110042.docx_第2页
第2页 / 共27页
操作系统课程设计徐阳 3091110042.docx_第3页
第3页 / 共27页
操作系统课程设计徐阳 3091110042.docx_第4页
第4页 / 共27页
操作系统课程设计徐阳 3091110042.docx_第5页
第5页 / 共27页
点击查看更多>>
下载资源
资源描述

操作系统课程设计徐阳 3091110042.docx

《操作系统课程设计徐阳 3091110042.docx》由会员分享,可在线阅读,更多相关《操作系统课程设计徐阳 3091110042.docx(27页珍藏版)》请在冰豆网上搜索。

操作系统课程设计徐阳 3091110042.docx

操作系统课程设计徐阳3091110042

 

江苏大学

操作系统课程设计报告

磁盘调度模拟

J计算机0902班

徐阳

3091110042

1目录

1.需求分析2

2.数据结构的设计2

2.1函数介绍2

3.程序概要设计内容2

3.1磁盘调度2

3.1.1先来先服务(FCFS)2

3.1.2最短时间优先算法3

3.1.3扫描(SCAN)调度算法3

3.1.4循环扫描(CSCAN)算法3

4.程序详细设计及流程图4

4.1系统流程图4

4.2先来先服务(FCFS)4

4.3最短寻道时间优先(SSTF)5

4.4扫描算法(SCAN)5

4.5循环扫描(CSCAN)算法7

5.功能模块描述及使用说明8

5.1先来先服务调度(FCFS)8

5.2最短寻道时间优先调度(SSTF)8

5.3扫描调度算法(SCAN)9

5.4循环扫描算法(CSCAN)10

6.心得体会及结束语11

7.参考文献11

附源代码12

 

1.需求分析

操作系统的任务之一就是有效的使用硬件。

对于磁盘驱动器,满足这一要求意味着要有较快的访问速度和较宽的磁盘带宽。

访问时间包括两个主要部分:

寻道时间,旋转延迟。

磁盘带宽是所传递的总的字节数除以从服务请求开始到最后传递结束时的总时间。

可以通过使用好的访问顺序来调度磁盘I/O请求,提高访问速度和宽度。

本程序模拟四种磁盘调度算法:

先来先服务调度(FCFS),最短寻道时间优先调度(SSTF),扫描调度算法(SCAN),循环扫描算法(CSCAN)。

并通过比较,了解各种算法的优缺点。

2.数据结构的设计

2.1函数介绍

Hand:

当前磁道号;

DiscLine[10]:

随机生成的磁道号;

voidSetDI(intDiscL[])生成随机磁道号算法;

voidCopyL(intSour[],intDist[],intx)数组Sour复制到数组Dist,复制到x个数(四)详细设计;

voidDelInq(intSour[],intx,inty)数组Sour把x位置的数删除,x后的数组元素向前挪一位.

voidPaiXu()寻道长度由低到高排序

voidFCFS(intHan,intDiscL[])先来先服务算法(FCFS)

voidSSTF(intHan,intDiscL[])最短寻道时间优先算法(SSTF)

intSCAN(intHan,intDiscL[],intx,inty)扫描算法(SCAN)

voidCSCAN(intHan,intDiscL[])循环扫描算法(CSCAN)

3.程序概要设计内容

3.1磁盘调度

在多道程序设计的计算机系统中,各个进程可能会不断提出不同的对磁盘进行读/写操作的请求。

由于有时候这些进程的发送请求的速度比磁盘响应的还要快,因此我们有必要为每个磁盘设备建立一个等待队列。

3.1.1先来先服务(FCFS)

即先来的请求先被响应。

FCFS策略看起来似乎是相当"公平"的,但是当请求的频率过高的时候FCFS策略的响应时间就会大大延长。

FCFS策略为我们建立起一个随机访问机制的模型,但是假如用这个策略反复响应从里到外的请求,那么将会消耗大量的时间。

为了尽量降低寻道时间,看来我们需要对等待着的请求进行适当的排序,而不是简单的使用FCFS策略。

这个过程就叫做磁盘调度管理。

有时候fcfs也被看作是最简单的磁盘调度算法。

3.1.2最短时间优先算法

要求访问的磁道,与当前磁头所在的磁道距离最近,以使每次的寻道时间最短。

3.1.3扫描(SCAN)调度算法

该算法不仅考虑到欲访问的磁道与当前磁道间的距离,更优先考虑的是磁头当前的移动方向。

例如,当磁头正在自里向外移动时,SCAN算法所考虑的下一个访问对象,应是其欲访问的磁道,既在当前磁道之外,又是距离最近的。

这样自里向外的访问,直至再无更外的磁道需要访问时,才将磁道换向自外向里移动。

这时,同样也是每次选择这样的进程来调度,也就是要访问的当前位置内距离最近者,这样,磁头又逐步地从外向里移动,直至再无更里面的磁道要访问,从而避免了出现“饥饿”现像。

3.1.4循环扫描(CSCAN)算法

当磁头刚从里向外移动而越过了某一磁道时,恰好又有一进程请求访问此磁道,这时,该里程就必须等待,为了减少这种延迟,CSCAN算法规定磁头单向移动,而本实验过程中我们所设计的是磁头从里向外移动,而从外向里移动时只须改方向而已,本实验未实现。

但本实验已完全能演示循环扫描的全过程。

 

4.程序详细设计及流程图

4.1系统流程图:

4.2先来先服务(FCFS):

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

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

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

但此算法由于未对寻道进行优化,致使平均寻道时间可能较长。

先来先服务算法(FCFS)流程图:

4.3最短寻道时间优先(SSTF):

该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,但这种调度算法却不能保证平均寻道时间最短。

最短寻道时间优先流程图:

4.4扫描算法(SCAN):

SCAN算法不仅考虑到欲访问的磁道与当前磁道的距离,更优先考虑的是磁头的当前移动方向。

例如,当磁头正在自里向外移动时,SCAN算法所选择的下一个访问对象应是其欲访问的磁道既在当前磁道之外,又是距离最近的。

这样自里向外地访问,直到再无更外的磁道需要访问才将磁臂换向,自外向里移动。

这时,同样也是每次选择这样的进程来调度,即其要访问的磁道,在当前磁道之内,从而避免了饥饿现象的出现。

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

扫描算法(scan)流程图

4.5循环扫描(CSCAN)算法:

处理该进程的请求,致使该进程的请求被严重地推迟。

为了减少这种延迟,CSCAN算法规定磁头单向移动。

例如,只自里向外移动,当磁头移到最外的被访问磁道时,磁头立即返回到最里的欲访磁道,即将最小磁道号紧接着最大磁道号构成循环,进行扫描。

循环扫描算法(cscan)流程图:

设计思路

程序主要分成三部分:

主程序,寻道子程序,图形界面子程序。

主程序包括实现总的选择界面,提醒用户输入一组磁道数,调用图形子程序。

寻道子程序包括4个分支FCFSSSTFSCANC-SCAN实现四种寻道并输出图形子程序包括画图程序同心圆代表磁道,控制循环和延迟实现寻道展示。

5.1实现及效果

磁盘调度目录

输入数据

5.1

Fcfs(先来先服务)算法

5.2

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

5.3

SCAN(扫描调度算法)5.4

C-scan(循环扫描算法)算法

6.心得体会及结束语

转眼间,一个礼拜的操作系统课程设计就结束了。

在这一个礼拜之中,我学到了很多很多,也加深了对本课程理论知识的理解,更知道了学习一门课程,不是只是通过一次考试就最为最后的标准的。

参加了系统的实践之后,才知道差距是如此之大,而这也是个艰难的过程,经历了一开始的不懂,到后来的懵懵懂懂,再到后来能逐渐和书本联系起来,当中的问题,暴露了课堂上不认真的很多弊病。

在设计过程中,同学们的帮助和老师的教导是无比宝贵的,遇到问题,一起讨论,还不能解决,老师会最后把关。

这样一层一层,逐渐养成了我们自主发现问题,解决问题的习惯。

还有就是在做一个课题时,善于寻找资源,利用资源也是很重要的一环,我们虽然摒弃绝对的“拿来主义”,但是事必躬亲也是同样不可取的,反而会无谓的加大工作量。

有些部分,已经形成一个模板,可以直接套用。

这在以后的学习工作过程中,同样具有借鉴意义。

最后,在实践的过程中,对这次的课题,和书本的知识有了更深的体会。

比如:

自己熟悉的计算机系统和程序设计语言模拟操作系统基本功能的设计方法及其实现过程

用完成各分项功能。

在算法的实现过程中,要求可决定变量应是动态可变的;同时模块应该有一个合理的输出结果。

具体可参照实验的程序模拟.各功能程序要求自行编写程序实现,不得调用现有操作系统提供的模块或功能函数。

磁盘调度程序模拟。

先来先服务调度算法.最短寻道时间优先调度,循环(SCAN)调度算法。

磁盘调度让有限的资源发挥更大的作用。

一个礼拜的课程设计很快就结束了,当中很紧张,也很充实,最后完成一份东西是也觉得一份欣喜。

它的完成,离不开同学一起的努力,更离不开老师的辛勤教导,不厌其烦的解答问题。

他是集体的结晶,共有的财富,而我得到的专业知识,学习方法和教训,则是个人的珍贵的财产。

虽然课程设计结束了,但是这门课的学习远未结束,专业的学习远未结束,他将陪伴我们一生。

对这次课程设计肤浅的心得,就是如此了,再次谢谢老师。

J计算机0902班

徐阳3091110042

7.参考文献

(1)汤小丹梁红兵哲凤屏汤子瀛编著.《计算机操作系统》(第三版).西安电子科技大学出版社.2007.

(2)谭浩强编著.《C程序设计》(第三版).清华大学出版社.2005

8附源代码

#include"graphics.h"

#include"stdio.h"

#include"math.h"

voidshow()

{

printf("\n\n\n\n\n\n\n************************welcometousethesystem!

***********************\n");

printf("1.enterthedata\n");

printf("2.fcfs\n");

printf("3.sstf\n");

printf("4.scan\n");

printf("5.c-scan\n");

printf("6.break\n");

printf("choosethenumbertostart...\n");

}

voidturn(int*t,intn)

{

inti,j,k;

for(i=0;i

for(j=i+1;j

{

if(t[i]>t[j])

{

k=t[i];

t[i]=t[j];

t[j]=k;

}

}

}

voidsstf(int*a,intf)

{

inti,t,m,n=0,j=0,k,b[10];

turn(a,10);

m=fabs(a[0]-f);

for(i=1;i<10;i++)

{

t=fabs(a[i]-f);

if(m>t)

{

m=t;

n=i;

}

}

if(a[n+1]-a[n]>a[n]-a[n-1])

j=1;

if(j==1)

{

if(n%2==0)

{

k=n/2;

for(i=0;i

{

t=a[i];

a[i]=a[n];

a[n]=t;

n--;

}

}

else

{

k=(n+1)/2;

for(i=0;i

{

t=a[i];

a[i]=a[n];

a[n]=t;

n--;

}

}

}

else

{

k=9-n;

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

{

b[i]=a[n];

n++;

}

n=9-k-1;

for(i=k+1;i<10;i++)

{

b[i]=*(a+n);

n--;

}

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

a[i]=b[i];

}

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

printf("%d",a[i]);

}

voidscan(int*a,intf)

{

inti,t,m,n=0,j=0,k,b[10];

turn(a,10);

m=fabs(a[0]-f);

for(i=1;i<10;i++)

{

t=fabs(a[i]-f);

if(m>t)

{

m=t;

n=i;

}

}

if(a[n]

j=1;

if(j==1)

{

if(n%2==0)

{

k=n/2;

for(i=0;i

{

t=a[i];

a[i]=a[n];

a[n]=t;

n--;

}

}

else

{

k=(n+1)/2;

for(i=0;i

{

t=a[i];

a[i]=a[n];

a[n]=t;

n--;

}

}

}

else

{

k=9-n;

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

{

b[i]=a[n];

n++;

}

n=9-k-1;

for(i=k+1;i<10;i++)

{

b[i]=a[n];

n--;

}

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

a[i]=b[i];

}

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

printf("%d",a[i]);

}

voidcscan(int*a,intf)

{

inti,t,m,n=0,n1=0,j=0,k,b[10];

turn(a,10);

m=fabs(a[0]-f);

for(i=1;i<10;i++)

{

t=fabs(a[i]-f);

if(m>t)

{

m=t;

n=i;

}

}

if(a[n]

j=1;

if(j==1)

{

if(n%2==0)

{

n1=n;

k=n/2;

for(i=0;i

{

t=a[i];

a[i]=a[n];

a[n]=t;

n--;

}

n=n1+1;

k=(9+n)/2;

for(i=9;i>k;i--)

{

t=a[i];

a[i]=a[n];

a[n]=t;

n++;

}

}

else

{

n=n1;

k=(n+1)/2;

for(i=0;i

{

t=a[i];

a[i]=a[n];

a[n]=t;

n--;

}

n=n1+1;

k=(9-n+1)/2;

for(i=9;i>k;i--)

{

t=a[i];

a[i]=a[n];

a[n]=t;

n--;

}

}

}

else

{

k=9-n;

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

{

b[i]=a[n];

n++;

}

n=0;

for(i=k+1;i<10;i++)

{

b[i]=a[n];

n++;

}

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

a[i]=b[i];

}

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

printf("%d",a[i]);

}

voidmycircle(intx,inty)

{

intk,i;

for(k=0;k<8;k++)

{

setcolor(k+8);

for(i=10;i<100;i+=10)

arc(x,y,k*45,(k+1)*45,i);

}

}

voidround(intx,inty,intradius,int*t,intf)

{

intk,i,m=1,m1,n=0;

m1=m;

bar(315,199,f+315,201);

getch();

while(m)

{

m=m1;

for(k=0;k<8;k++)

{

setcolor(k+8);

for(i=radius;i<100;i+=10)

arc(x,y,m*45,(m+1)*45,i);

m++;

}

bar(315,199,*(t+n)+315,201);

sleep

(1);

cleardevice();

n++;

m1++;

if(n-10==0)break;

if(m1-8==0)m1=0;

}

}

main()

{

intk,i,driver,mode,first=30;

inta[10];

chart;

driver=VGA;mode=VGAHI;

initgraph(&driver,&mode,"");

setbkcolor(0);

show();

t=getch();

while(t)

{

t=getch();

switch(t)

{

case('1'):

{

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

{

printf("input%dthdata:

",i+1);

scanf("%d",&a[i]);

}

printf("pressanykeytocontinue...");

getch();

cleardevice();

show();

break;

}

case('2'):

{

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

printf("%d",a[i]);

circle(315,200,1);

floodfill(315,200,15);

mycircle(315,200);

round(315,200,10,a,90);

printf("pressanykeytocontinue...");

getch();

cleardevice();

show();

break;

}

case('3'):

{

sstf(a,first);

circle(315,200,1);

floodfill(315,200,15);

mycircle(315,200);

round(315,200,10,a,90);

printf("pressanykeytocontinue...");

getch();

cleardevice();

show();

break;

}

case('4'):

{

scan(a,first);

circle(315,200,1);

floodfill(315,200,15);

mycircle(315,200);

round(315,200,10,a,90);

printf("pressanykeytocontinue...");

getch();

cleardevice();

show();

break;

}

case('5'):

{

cscan(a,first);

circle(315,200,1);

floodfill(315,200,15);

mycircle(315,200);

round(315,200,10,a,90);

printf("pressanykeytocontinue...");

getch();

cleardevice();

show();

break;

}

case('6'):

exit();

}

}

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

当前位置:首页 > 高等教育 > 历史学

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

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