进程调度算法设计(短进程优先算法SPF)
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
电子科技大学
实验报告
学生姓名:满博学号:2823103017 指导教师:罗惠琼
一、实验室名称:软件实验室A2412
二、实验项目名称:进程调度算法的设计(短进程优先调度SPF)
三、实验原理:
在多道程序系统中,一个作业被提交后必须经过处理机调度后,方能获得处理机执行。对调度的处理又都可采用不同的调度方式和调度算法。调度算法是指:根据系统的资源分配策略所规定的资源分配算法。
短进程优先调度算法是指对短进程优先调度的算法,它是从后备队列中选择一个或者若干个进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再重新调度。
四、实验目的:
通过实现SPF算法深入了解进程调度机制,加深理解。
五、实验内容:
1. 编写SPF算法:
●进程通过定义一个进程控制块的数据结构(PCB)来表示;
●每个进程需要赋予进程ID、进程到达时间、进程需要运行的总时间的属性;
2. 调试无误后运行;
3. 输入需要请求调入的页号;
4. 查看执行结果,根据执行结果判断实验是否成功;
六、实验器材(设备、元器件):
1.基本环境要求
①宽敞整洁专用实验室
②必备的基本实验工具
2.最低设备要求
①计算机CPU不小于800MHZ;
②计算机内存不小于128M;
3.软硬件要求
①实验平台Visual c++ 6.0
七、实验步骤:
代码如下:
#include
#define n 5
#define num 5
#define max 65535
typedef struct pro
{
int PRO_ID;
int arrive_time;
int sum_time;
int flag;
}Pro;
//整数排序
int bubble(int temp[])
{
int i,j,tem=0;
for(i=1;i { int lastX=1; for(j=0;j { if(temp[j]>temp[j+1]) { tem=temp[j]; temp[j]=temp[j+1]; temp[j+1]=tem; lastX=0; } } if(lastX==1) break; } return temp[0]; } //进程排序 Pro bubble(Pro p[]) { int i,j; Pro temp={0}; Pro s[num]; for(i=0;i s[i]=p[i]; } for(i=1;i { int lastX=1; for(j=0;j { if(s[j].sum_time>s[j+1].sum_time) { temp=s[j]; s[j]=s[j+1]; s[j+1]=temp; lastX=0; } } if(lastX==1) break; } return s[0]; } void SPF(int p) { if(n>0) { int i,j,k,l,tc=0; Pro seq[n]; Pro temp_seq[n]; printf("短进程优先调度算法SPF\n"); printf("请依次输入5个进程的进程号、到达时间和执行时间\n"); printf("成员变量用逗号隔开;进程间用回车隔开\n"); for(i=0;i scanf("%d,%d,%d",&seq[i].PRO_ID,&seq[i].arrive_time,&seq[i].sum_time); } printf("调度顺序是:\n"); //初始化tc int temp[num]; for(i=0;i { temp[i]=seq[i].arrive_time; } tc=bubble(temp);//tc是断点啊 //flag 表示对应i的pro的队列情况 //-1表示未进入过队列,0表示在队列中,1表示被清除了for(i=0;i seq[i].flag=-1; } for(i=0;i for(j=0;j if(seq[j].flag!=1&&seq[j].arrive_time<=tc){ seq[j].flag=0; } } for(j=0;j temp_seq[j]=seq[j]; if(seq[j].flag!=0){ temp_seq[j].sum_time=max; } } l=bubble(temp_seq).PRO_ID; for(j=0;j if(l==seq[j].PRO_ID){ k=j; } } tc=tc+bubble(temp_seq).sum_time; seq[k].flag=1; printf("%d",l);