操作系统实验报告四模拟电梯调度算法,对磁盘进行移臂和旋转调度.doc

约7页DOC格式手机打开展开

操作系统实验报告四模拟电梯调度算法,对磁盘进行移臂和旋转调度,操作系统实验报告四全文7页708字图文并茂时间:2005.5.15实验题目:模拟电梯调度算法,对磁盘进行移臂和旋转调度年级:2002级 班级:计算机(5)班姓名:学号:任课教师:实验要求:模拟电梯调度算法,实现对磁盘的驱动调度, 磁盘是一种高速、大容量、旋转型、可直接存取的存储设备。它作为计算机系统的辅助存储器,担负着...
编号:10-32970大小:54.50K
分类: 论文>数学/物理论文

内容介绍

此文档由会员 黄药师 发布

操作系统实验报告四
全文7页708字 图文并茂 时间:2005.5.15
实验题目:模拟电梯调度算法,对磁盘进行移臂和旋转调度 年级:2002级 班级:计算机(5)班
姓名: 学号: 任课教师:
实验要求:
模拟电梯调度算法,实现对磁盘的驱动调度, 磁盘是一种高速、大容量、旋转型、可直接存取的存储设备。它作为计算机系统的辅助存储器,担负着繁重的输入输出任务、在多道程序设计系统中,往往同时会有若干个要求访问磁盘的输入输出请求等待处理。系统可采用一种策略,尽可能按最佳次序执行要求访问磁盘的诸输入输出请求。这就叫驱动调度,使用的算法称为驱动调度算法。驱动调度能降低为若干个输入输出请求服务所需的总时间,从而提高系统效率。本实验要求学生模拟设计一个驱动调度程序,观察驱动调度程序的动态运行过程。通过实验使学生理解和掌握驱动调度的职能。
解题思路(流程图):


























实验结果(部分源码):
#include
#include
#include
#define null 0
#define len sizeof(struct cidaohao)
struct cidaohao
{
struct cidaohao *pre;
int num;
struct cidaohao *next;
};
FCFS(array)
int array[50];
{int i,j,sum=0;
printf("nFCFS : ");
for(i=1;array[i]!=-1;i++)
{
printf(" %d ",array[i]);
}
i=0;
for(i=0,j=1;array[j]!=-1;i++,j++)
{
if(array[i]>array[j]) sum+=(array[i]-array[j]);
else sum+=(array[j]-array[i]);
}
return(sum);
}
SSTF(head,now)
struct cidaohao *head;
int now;
{struct cidaohao *p,*lp,*rp;
int sum=0,front,behind;
p=head;
printf("nSSTF :");
while(p->num!=now) p=p->next;/* */
lp=p->pre;
rp=p->next;
do
{
if(p->next!=null&&p->pre!=null)
{ front=p->num-lp->num;
behind=rp->num-p->num;
if(front>=behind)
{
sum+=behind;
p=rp;
printf(" %d ",p->num);
rp=p->next;
}
else
{
sum+=front;
p=lp;
printf(" %d ",p->num);
lp=p->pre;
}
}
else
{
if(p->next==null)
{ while(lp->num!=0)
{
sum+=p->num-lp->num;
p=lp;
printf(" %d ",p->num);
lp=p->pre;
}
return(sum);
}
if(p->pre==null)
{
while(rp->num!=0)
{
sum+=rp->num-p->num;
p=rp;
printf(" %d ",p->num);
rp=p->next;
}
return(sum);
}
}
}while(p->next!=null||p->pre!=null);
}
SCAN(head,n,m)
struct cidaohao *head;
int n,m;
{struct cidaohao *p,*pp;
int sum=0;
printf("nSCAN : ");
p=head;
while(p->num!=m) p=p->next;/* */
pp=p;
if(n {while(pp->next!=null)
{
sum+=pp->next->num-pp->num;
pp=pp->next;
printf(" %d ",pp->num);
}
sum+=pp->num-p->pre->num;
pp=p->pre;
if(pp->num==0) return(sum);
else
{while(pp->pre!=null)
{
printf(" %d ",pp->num);
sum+=pp->num-pp->pre->num;
pp=pp->pre;
}
printf(" %d ",pp->num);
return(sum);
}
}
else
{
while(pp->pre!=null)
{
sum+=pp->num-pp->pre->num;
pp=pp->pre;
printf(" %d ",pp->num);
}
sum+=p->next->num-pp->num;
pp=p->next;
if(pp->num==0) return(sum);
else
{while(pp->next!=null)
{
printf(" %d ",pp->num);
sum+=pp->next->num-pp->num;
pp=pp->next;
}
printf(" %d ",pp->num);
return(sum);
}
}
}
main()
{
FILE *fp;
char pt;
char str[10];
int cidao[100],i,j=1,count1=0,count2=0,count3=0,last,space=0;
struct cidaohao *p1,*p2,*new,*head;/* */
struct cidaohao *p,*lp,*rp;
for(i=0;i<50;i++) cidao[i]=-1;
i=0;
fp=fopen("cipan.txt","r+");/* */
if(fp==NULL)
{
printf("Cann't open this file ");
exit(0);
}
printf("nPlease input cidaohao now : ");
scanf("%d",&cidao[0]);
while((pt=fgetc(fp))!=EOF)/* */
{
if(pt>='0'&&pt<='9')
{
str[i]=pt;i++;
space=0;
}
else
{
if(pt==' '||pt=='n')
{if(space==1) break;
else
{str[i]='0';
cidao[j]=atoi(str);
if(pt=='n') break;
else
{
space=1;
j++;
i=0;
}
}
}
}
}/* */
if(pt==EOF) {str[i]='0';cidao[j]=atoi(str);}
fclose(fp);
i=0;
count1=FCFS(cidao);/* */
printf("nThe Total : %d n",count1);
p1=p2=head=(struct cidaohao* )malloc(len);/* */
p1->pre=null;
p1->num=cidao[0];
p1->next=null;
i=1;
while(cidao[i]!=-1)
{ if(cidao[i]num)/* */
{
p1=(struct cidaohao *)malloc(len);
p1->next=head;
p1->pre=null;
p1->num=cidao[i];
head->pre=p1;
head=p1;
}
else
{
while(p1->next!=null&&p1->num<=cidao[i])/* */
{ p2=p1;
p1=p1->next;
}
if (p1->num>cidao[i])/* */
{
new=(struct cidaohao*)malloc(len);
new->num=cidao[i];
new->next=p1;
new->pre=p2;
p1->pre=new;
p2->next=new;
}
else
{/* */
new=(struct cidaohao*)malloc(len);
new->num=cidao[i];
new->next=null;
new->pre=p1;
p1->next=new;
}
p1=head;/* */
}
i++;/* */
}
count2=SSTF(head,cidao[0]);
printf("nThe Total : %d ",count2);
printf("nnPleast input last cipanhao : ");
scanf("%d",&last);
count3=SCAN(head,last,cidao[0]);
printf("nThe Total : %d n",count3);
}