进程调度算法设计(短进程优先算法SPF)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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);

相关文档
最新文档