实验二 201320180421.柳建斌 doc

更新时间:2023-12-25 11:51:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

实验二

课程设计题目:短作业优先JSF

学生姓名:柳建斌 专 业:软件工程 班 级:1321804 学 号:201320180421 指导教师:吴建东

2015年 6月 12日

一、实验目的

模拟单处理器系统的进程调度,采用短作业优先的进程调度算法作为进程设计算法,以加深对进程的概念及进程调度算法的理解.

二要求:

1. 认真阅读并理解下述程序,说明短作业优先调度算法中计算各进程的完成时间、周转时间、带权周转时间思路。

2. 上面程序没有考虑某进程的运行时间最短,但它还没有到达的情况,请改写程序,将这种情况考虑进去,使程序正确。如进程信息如下: struct PCB pcb[N]= {{\进程名 A B C D E 到达时间 0 1 2 15 4 运行时间 4 3 5 2 4 完成时间 4 7 16 18 11 周转时间 4 6 14 3 7

3. 上面程序没有求每个进程的带权周转时间、平均周转时间,平均带权周转时间,能否加上,结果输出的格式按类似P90表4-2 输出。

三、实验内容

完成时间:等于到达时间加上运行时间,

pcb[index].finish_time=pcb[index].arrive_time+pcb[index].run_time;

周转时间:等于运行时间, pcb[index]. turnover_time =pcb[index].run_time; 带权周转时间:

pcb[short_index].turnover_time=pcb[short_index].finish_time-pcb[short_index].arrive_time;

四、代码

//代码已经更改,能实现短作业优先的功能

#include #include #include #include #define N 5 struct PCB {

char name[8]; //进程名称 int arrive_time; //到达时间 int run_time; //运行时间 int turnover_time; //周转时间 int finish_time; //完成时间

bool arrive; //在一个进程的执行过程中是否有其他进程到达 bool finished; //是否执行完 };

int main() {

struct PCB pcb[N];

int i,j,k,short_index,short_index2;

int needtime; //作为与run_time比较参数 int totaltime=0;

int total=0; //判断一个进程在执行过程中是否有其他进程到达的参数

//下面是输入进程

for ( i=0;i

printf(\请输入进程名、到达时间、要运行时间:\ scanf(\

scanf(\ scanf(\ pcb[i].arrive=false; pcb[i].finished=false; }

//本程序设定先运行第一个进程 pcb[0].arrive=true;

short_index=0; //该变量存放已经到达进程中 运行时间最少 的进程数组的下标

total=pcb[0].arrive_time;

//将被选中的进程执行,在执行过程中如果有其他进程到达,则将其arrive设为true

for(i=0;i

{

for(j=0;j

total++; for(k=0;k

if(total==pcb[k].arrive_time) pcb[k].arrive=true;

printf(\进程%s运行了%d秒\\n\ }

if(short_index==0)

pcb[short_index].finish_time=pcb[short_index].run_time; else {

if

(pcb[short_index].arrive_time<=pcb[short_index2].finish_time)

pcb[short_index].finish_time=pcb[short_index2].finish_time+pcb[short_index].run_time; else

pcb[short_index].finish_time=pcb[short_index].finish_time+pcb[short_index].run_time;

}

pcb[short_index].turnover_time=pcb[short_index].finish_time-pcb[short_index].arrive_time;

printf(\进程%s共花费了%d秒运行完毕\\n\ pcb[short_index].finished=true;

//选择其他已经到达,还没有运行完,运行时间最少的进程,将其数组下标放入short_index变量中 needtime=1000;

short_index2=short_index; for(j=0;j

if(pcb[j].arrive==true && pcb[j].finished==false && pcb[j].run_time

needtime=pcb[j].run_time; short_index=j; }

}

printf(\进程名、到达时间、运行时间、完成时间、周转时间\\n\ //下面是显示输入的进程 for( i=0;i

{ totaltime=totaltime+pcb[i].run_time; printf(\

printf(\ printf(\ printf(\ printf(\ }

return 0; }

五、结果

六、总结:

一个功能一个功能实现,有耐性,终会感觉到成功的喜悦。

本文来源:https://www.bwwdw.com/article/y6yx.html

Top