操作系统实验报告(4)

2019-08-01 23:24

山东科技大学学生课程设计

1.2.3 详细设计

1.主函数模块

首先调用list( )函数,再调用runsjf()函数。

2.进程创建和排序模块

创建进程时,首先用malloc( )先申请内存,建一个空的后备队列,然后输入进程的相关信息,通过对比进程的arrivetime排成一个队列。 3.寻找进程模块

在实现查找短进程功能时,用getcount()函数获得当前已经到达且未完成的进程,再利用循环将每一个进程的runtime与当前的最短运行时间mintime进行比较,如果runtime小于mintime,则将该进程的runtime赋给mintime,并将指针指向下一个进程,直到找到运行时间最短的进程。 4.运行及输出模块

调用runsjf()程序进行运行,当运行时,把进程的开始时间begintime置为当前时间time,完成时间finishtime为开始时间begintime加上运行时间runtime,周转时间turntime为finishtime减arrivetime,带权周转时间wturntime为turntime/runtime。

- 13 -

山东科技大学学生课程设计

开始 输入进程信息 将进程排成队列 调用sjf()函数 runtime< mintime 是 否 mintime=runtime 指针指向下个进程 否 下一个进程是否为空 是 调用runsjf()运行进程 输出运行后信息 是 是否还有进程 否 - 14 - 结束 图2:SJF流程图

山东科技大学学生课程设计

程序源代码

#include #include

int cmp(const void *_a,const void *_b) {

float *a=(float *)_a; float *b=(float *)_b; return *a>*b; }

int main() {

float ST[5]; //服务时间. float AT[5]; //到达时间. float FT[5]={0}; //完成时间. float WT[5]={0}; //周转时间. float AWT[5]={0}; //带权周转时间. float temp[4]={0}; //临时变量. int sq[5]; //存入优先序列的序号. int p[5]={0}; int i=0,k,st,j;

printf(\输入到达时间: \ for(i=0;i<5;i++)

printf(\输入服务时间: \ for(i=0;i<5;i++)

scanf(\scanf(\

- 15 -

山东科技大学学生课程设计

sq[0]=0; p[0]=-1;

FT[0]=AT[0]+ST[0]; k=1;

while(k<5) {

j=0;

for(i=1;i<5;i++)

if(p[i]==0&&FT[sq[k-1]]>=AT[i])

temp[j++]=ST[i];

if(j==0) { } else {

qsort(temp,j,sizeof(float),cmp); for(i=0;i

for(st=1;st<5;st++)

if(p[st]==0&&temp[i]==ST[st])

- 16 -

for(i=1;i<5;i++)

if(p[i]==0) { }

sq[k++]=i;

FT[i]=AT[i]+ST[i]; p[i]=-1; i=5;

山东科技大学学生课程设计

}

for(i=0;i<5;i++) { }

printf(\完成时间输出: \ for(i=0;i<5;i++)

printf(\ printf(\

printf(\周转时间输出: \ for(i=0;i<5;i++)

printf(\ printf(\

printf(\带权周转输出: \ for(i=0;i<5;i++)

printf(\ printf(\ return 0; }1.2.4

}

{ }

FT[st]=FT[sq[k-1]]+ST[st]; sq[k++]=st; p[st]=-1; st=5;

WT[i]=FT[i]-AT[i]; AWT[i]=WT[i]/ST[i];

运行结果

- 17 -


操作系统实验报告(4).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:DNF大转移NPK补丁翻译

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: