操作系统实验-先来先服务的调度算法和短作业优先Word格式文档下载.docx
- 文档编号:13064850
- 上传时间:2022-10-04
- 格式:DOCX
- 页数:10
- 大小:206.50KB
操作系统实验-先来先服务的调度算法和短作业优先Word格式文档下载.docx
《操作系统实验-先来先服务的调度算法和短作业优先Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《操作系统实验-先来先服务的调度算法和短作业优先Word格式文档下载.docx(10页珍藏版)》请在冰豆网上搜索。
【实验内容】
问题分析
输入:
进程的名称、到达时间、服务时间
输出:
进程的完成时间、周转时间、带权周转时间
其中对于任意进程有:
周转时间=完成时间-到达时间
带权周转时间=周转时间/服务时间
因此,两个算法的关键是求完成时间
l数据结构及函数说明
使用的数据结构是数组,进程的名称、到达时间、服务时间、进程的完成时间、周转时间、带权周转时间分别对应于一个数组,这些数组长度相等.
structfcfs
//定义进程的结构体
{
charname[10];
//进程名
floatarrivetime;
//到达时间
floatservicetime;
//服务时间
floatstarttime;
//开始时间
floatfinishtime;
//完成时间
floatzztime;
//周转时间
floatdqzztime;
//带权周转时间
};
fcfsa[100];
//结构体数组
函数说明
voidFinput(fcfs*p,intN);
//输入函数,初始化
voidFsort(fcfs*p,intN);
//按到达时间排序,先到达排在前面
voidFsort2(fcfs*p,intN);
//按进程大小排序,先到达排在前面
voidF_method(fcfs*p,intN)//先来先服务算法
voidF_method2(fcfs*p,intN)//短作业优先程序
voidSJF(fcfs*p,intN);
//短作业优先
voidFCFS(fcfs*p,intN);
//先来先服务
voidSJF(fcfs*p,intN)//短作业优先
voidFPrint(fcfs*p,intN)//输出函数
求完成时间算法
1)FCFS算法流程图
2)SJF算法流程图
l程序
#include<
stdio.h>
floatarrivetime=0,servicetime=0,starttime=0,finishtime=0,zztime=0,dqzztime=0;
//定义先来先服务算法进程的最大数量
voidFinput(fcfs*p,intN)//输入函数
inti;
printf("
输入进程的名称、到达时间、服务时间:
(例如:
x0100)\n"
);
for(i=0;
i<
=N-1;
i++)
{
printf("
输入第%d进程的名称、到达时间、服务时间:
\n"
i+1);
scanf("
%s%f%f"
&
p[i].name,&
p[i].arrivetime,&
p[i].servicetime);
}
}
//输出函数
voidFPrint(fcfs*p,intN)//输出函数
intk;
\n执行顺序:
%s"
p[0].name);
for(k=1;
k<
N;
k++)
-%s"
p[k].name);
\n进程名\t到达时间\t服务时间\t开始时间\t结束时间\t周转时间\t带权周转时间\n\n"
for(k=0;
%s\t%-.2f\t\t%-.2f\t\t%-.2f\t\t%-.2f\t\t%-.2f\t\t%-.2f\t\t\n\n"
p[k].name,p[k].arrivetime,p[k].servicetime,p[k].starttime,p[k].finishtime,p[k].zztime,p[k].dqzztime);
voidFsort(fcfs*p,intN)//按到达时间排序,先到达排在前面
for(inti=0;
for(intj=0;
j<
=i;
j++)
if(p[i].arrivetime<
p[j].arrivetime)//进行排序,如果先到达就排在前面
{
fcfstemp;
temp=p[i];
p[i]=p[j];
p[j]=temp;
}
}//运行结果
voidF_method(fcfs*p,intN)
if(k==0)
{
p[k].starttime=p[k].arrivetime;
//如果是第一个进程,开始时间等于到达时间
p[k].finishtime=p[k].arrivetime+p[k].servicetime;
//结束时间等于到达时间加上服务时间
}
else
p[k].starttime=p[k-1].finishtime;
//开始时间=上一个一个进程的完成时间
p[k].finishtime=p[k].starttime+p[k].servicetime;
//结束时间=开始时间加上+现在进程的服务时间
k++)//求每个进程的信息
p[k].zztime=p[k].finishtime-p[k].arrivetime;
//周转时间=完成时间-到达时间
p[k].dqzztime=p[k].zztime/p[k].servicetime;
//带权周转时间=周转时间/服务时间
voidF_method2(fcfs*p,intN)//短作业优先核心程序
intnum;
intarrive=65535;
//寻找最早到达的进程
intmin_serive=65535;
//寻找最小服务时间进程
fcfsb[100];
//新建一个,进行排序
intstate[100];
//设置100个标志位
for(i=0;
state[i]=0;
if(p[i].arrivetime<
arrive)
{arrive=p[i].arrivetime;
num=i;
b[0]=p[num];
state[num]=1;
b[0].finishtime=b[0].arrivetime+b[0].servicetime;
intj=0;
for(intk=1;
{min_serive=65535;
for(i=0;
{if(state[i]==1||p[i].arrivetime>
b[j].finishtime)//如果遇到已排序或者未到达的进程跳过
continue;
elseif(p[i].servicetime<
min_serive)
min_serive=p[i].servicetime;
num=i;
state[num]=1;
//找到合适的进程并赋值到B
b[++j]=p[num];
b[j].starttime=b[j-1].finishtime;
b[j].finishtime=b[j-1].finishtime+b[j].servicetime;
for(j=0;
j++)//求每个进程的信息
b[j].zztime=b[j].finishtime-b[j].arrivetime;
b[j].dqzztime=b[j].zztime/b[j].servicetime;
//
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 先来先 服务 调度 算法 作业 优先
![提示](https://static.bdocx.com/images/bang_tan.gif)