磁盘调度算法的模拟实现.docx

上传人:b****6 文档编号:8309599 上传时间:2023-01-30 格式:DOCX 页数:10 大小:51.11KB
下载 相关 举报
磁盘调度算法的模拟实现.docx_第1页
第1页 / 共10页
磁盘调度算法的模拟实现.docx_第2页
第2页 / 共10页
磁盘调度算法的模拟实现.docx_第3页
第3页 / 共10页
磁盘调度算法的模拟实现.docx_第4页
第4页 / 共10页
磁盘调度算法的模拟实现.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

磁盘调度算法的模拟实现.docx

《磁盘调度算法的模拟实现.docx》由会员分享,可在线阅读,更多相关《磁盘调度算法的模拟实现.docx(10页珍藏版)》请在冰豆网上搜索。

磁盘调度算法的模拟实现.docx

磁盘调度算法的模拟实现

 

磁盘调度算法的模拟实现

 

学院

专业

学号

学生姓名

指导教师姓名

 

 

2014年3月19日

 

2.3具体内容.......................................3

一、课设简介

1.1课程设计题目

磁盘调度算法的模拟实现1

1.2程序设计目的

操作系统课程设计是计算机专业重要的教学环节,它为学生提供了一个既动手又动脑,将课本上的理论知识和实际有机的结合起来,独立分析和解决实际问题的机会。

1)进一步巩固和复习操作系统的基础知识。

2)培养学生结构化程序、模块化程序设计的方法和能力。

3)提高学生调试程序的技巧和软件设计的能力。

4)提高学生分析问题、解决问题以及综合利用C语言进行程序设计的能力。

1.3设计要求

1)磁头初始磁道号,序列长度,磁道号序列等数据可从键盘输入,也可从文件读入。

2)最好能实现磁道号序列中磁道号的动态增加。

3)磁道访问序列以链表的形式存储

4)给出各磁盘调度算法的调度顺序和平均寻道长度

二、设计内容

2.1功能实现

设计并实现一个本别利用下列磁盘调度算法进行磁盘调度的模拟程序。

1)先来先服务算法FCFS

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

2.2流程图

2.3具体内容

1)先来先服务算法FCFS

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

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

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

此算法由于未对寻道进行优化,在对磁盘的访问请求比较多的情况下,此算法将降低设备服务的吞吐量,致使平均寻道时间可能较长,但各进程得到服务的响应时间的变化幅度较小。

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

该算法选择这样的进程,其要求访问的磁道与当前磁头所在的磁道距离最近,以使每次的寻道时间最短,该算法可以得到比较好的吞吐量,但却不能保证平均寻道时间最短。

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

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

三、测试数据

3.1先来先服务算法

输入磁道序列:

555839189016015038184

当前磁道号:

100

3.2最短寻道时间优先算法

(1)当前磁道号大于磁道序列中的最大的磁道号时

输入磁道序列:

555839189016015038184

当前磁道号:

100

3.3测试结果

四、源代码

#include

#include

#include

usingnamespacestd;

typedefstructnode

{

intdata;

structnode*next;

}Node,*Linklist;

voidmain()

{

voidCreate_Linklist(Node*);

voidfcfs();//声明先来先服务函数FCFS

voidsstf();//声明最短寻道时间优先函数SSTF

voidprint(Node*);//输出链表函数

ints;//s是选择哪个算法

printf("**************磁盘调度算法***************\n");

 

printf("\t***1,先来先服务算法FCFS\n");

printf("\t***2,最短寻道时间优先算法SSTF\n");

printf("\t***0,退出\n");

printf("\t***请选择:

");

scanf("%d",&s);

while(s!

=0)

{

switch(s)

{

case1:

printf("\t\t********你选择了:

先来先服务算法FCFS\n");

fcfs();

break;

case2:

printf("\t\t******你选择了:

最短寻道时间优先算法SSTF\n");

sstf();

break;

}

printf("\t\t*******退出请选0,继续请选1,2,\n");

scanf("%d",&s);

}

}

/******************************************************************/

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

{

voidCreate_Linklist(Node*);

voidprint(Node*);

intLength_Linklist(Node*);

Node*l,*head;//*m,*n;*/

floatnum=0;//num为平均寻道长度

intc,f;

head=(Node*)malloc(sizeof(Node));

head->next=NULL;

printf("**************新建一个单链表,以0作为结束标志:

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

Create_Linklist(head);

c=Length_Linklist(head);

printf("\t\t******从几号磁道开始:

********");

scanf("%d",&f);//f为磁道号

print(head);

printf("\t***链表长度为:

%d\n",c);

l=head->next;

for(inti=0;i

{

num+=abs(l->data-f);

f=l->data;

l=l->next;

}

num=num/c;

printf("\t\t*****先来先服务的寻道顺序是:

\n");

print(head);

printf("\t\t******平均寻道长度:

%f\n",num);

}

/*****************************************************************/

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

{

voidCreate_Linklist(Node*);

voidprint(Node*);

intLength_Linklist(Node*);

Node*p,*q,*r,*s,*l,*m,*head;

intc,f;

head=(Node*)malloc(sizeof(Node));

head->next=NULL;

printf("**************新建一个单链表,以0作为结束标志:

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

Create_Linklist(head);

c=Length_Linklist(head);

printf("\t\t******从几号磁道开始:

********");

scanf("%d",&f);//f为磁道号

print(head);

printf("\t***链表长度为:

%d\n",c);

l=(Node*)malloc(sizeof(Node));

l->next=NULL;

m=l;

q=head;

p=head->next;

s=head;

r=head->next;

floatnum=0;

for(inti=0;i

{

intmin=abs(f-r->data);

for(intj=0;j

{

p=p->next;

q=q->next;

if(abs(f-p->data)

{

min=abs(f-p->data);

r=p;

s=q;

}

}

num+=abs(f-r->data);

f=r->data;

s->next=r->next;

r->next=NULL;

m->next=r;

m=r;

q=head;

p=head->next;

s=head;

r=head->next;

}

num=num/c;

printf("\t\t******最短寻道时间优先顺序是:

\n");

print(l);

printf("\t\t*********平均寻道长度:

%f\n",num);

}

/*********************************************************/

voidprint(Node*head)//输出链表

{

Node*p;

p=head->next;

cout<<"单链表显示:

";

if(p==NULL)

{

printf("单链表为空:

\n");

}

elseif(p->next==NULL)

{printf("%d\t",p->data);

printf("\n");

}

else

{

while(p->next!

=NULL)

{

printf("%d\t",p->data);

p=p->next;

}

printf("%d\t",p->data);

printf("\n");

}

}

/*********************************************************/

voidCreate_Linklist(Node*head)//创建链表

{

Node*p,*q;

inti;

scanf("%d",&i);

q=head;

while(i!

=0)

{

p=(Node*)malloc(sizeof(Node));

p->next=NULL;

p->data=i;

q->next=p;

q=p;

cin>>i;

}

/*c++;*/

}

/**************************************************/

intLength_Linklist(Node*head)//计算链表长

{

intl;

Node*p;

p=head->next;

l=1;

while(p->next)

{

p=p->next;

l++;

}

returnl;

}

五、总结

通过此次课程设计,我对操作系统的基础知识了解得更透彻了,同时对磁盘调度的四种算法——先来先服务算法(FCFS)、最短寻道时间优先算法(SSTF)、有了更深刻的理解和掌握,使我能够为磁盘调度选择适当的算法,提高CPU工作效率。

设计过程中遇到的困难在老师和同学的帮助下顺利解决并通过了验收,我深刻认识到算法的逻辑性对程序的重要影响,算法的准确度对程序运行结果的重要影响,这对我以后在操作系统的学习中有极大帮助。

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

当前位置:首页 > 表格模板 > 合同协议

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

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