二进程同步算法模拟

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验二进程同步算法模拟

一、实验目的

1、模拟设计一种进程调度过程:FCFS、短作业优先、高响应比优

先(任选其一)。

2、算法代码实现,模拟数据演示,模拟结果验证。

二、实验学时

4课时

三、实验环境与平台

Windows 2000, C/C++程序开发集成环境(开发语言可自选)

四、实验内容及要求

1、实验内容:(1)自定义PCB的数据结构;(2)针对资源分配

中出现的问题,选择适合的算法,实现资源的合理分配。

2、实验要求:(1)完成规定的实验内容;(2)在实验之前,利

用课外时间浏览帮助文件的相关主题内容;(3)实验时保存程序代码;(4)写出实验报告.(实验目的、实验时间、实验设备和实验环境平台、完成的实验内容、实验结果和结论)。

五、完成的实验内容

下例是用C语言编写,用TC2.0调试结果

六、实现代码如下:

#include "stdio.h"

#define getjcb(type) (type*)malloc(sizeof(type))

#define NULL 0

int n=0,time=0;float eti,ewi;

struct jcb{ char name[10]; /* 作业名 */

char state; /* 作业状态 */

int ts; /* 提交时间 */

float super; /* 优先权 */

int tb; /* 开始运行时间 */

int tc; /* 完成时间 */

float ti; /* 周转时间 */

float wi; /* 带权周转时间 */

int ntime; /* 作业所需运行时间 */ char resource[10]; /* 所需资源 */

struct jcb *link; /* 结构体指针 */

} *p,*q,*head=NULL;

typedef struct jcb JCB;

inital(){

int i;

printf("\nInput jcb num\n");

scanf("%d",&n);

printf("Input\nname\tts\tntime\tresource\n");

for(i=0;i

{p=getjcb(JCB);

scanf("%s\t%d\t%d\t%s",&p->name,&p->ts,&p->ntime,&p->resou rce);

p->state='W';

p->link=NULL;

if(head==NULL) head=q=p;

else{ q->link=p; q=p; }

}

}

fileinput(){

FILE *fp;

int i;

if((fp=fopen("os2.txt","r"))==NULL) printf(" open error!") ; fscanf(fp,"%d\n",&n);

for(i=0;i

fscanf(fp,"%s%d%d%s",&p->name,&p->ts,&p->ntime,&p->resource );

p->state='W';

p->link=NULL;

if(head==NULL) head=q=p;

else{

q->link=p;

q=p;

}

} fclose(fp);}

void print(JCB *pr,int m){

JCB *p;

printf("\ntime=%d",time);

if(m==3){

printf("\nname\tstate\tts\tntime\tsuper\tsource\ttb\ttc\tti

\twi\n");

printf("%s\t%c\t%d\t%d\t%4.2f\t%s\t%d\t%d\t%4.2f\t%4.2f\n",

pr->name,pr->state,pr->ts,pr->ntime,pr->super,pr->resource,

pr->tb,pr->tc,pr->ti,pr->wi);

} else {

printf("\nname\tstate\tts\tntime\tsource\ttb\ttc\tti\twi\n"

); printf("%s\t%c\t%d\t%d\t%s\t%d\t%d\t%4.2f\t%4.2f\n", pr->name,pr->state,pr->ts,pr->ntime,pr->resource,pr->tb,pr-

>tc,pr->ti,pr->wi); }

p=head;

do{ if(p->state=='W')

if(m==3){

printf("%s\t%c\t%d\t%d\t%4.2f\t%s\n",

p->name,p->state,p->ts,p->ntime,p->super,p->resource);

}

else{

printf("%s\t%c\t%d\t%d\t%s\n",

p->name,p->state,p->ts,p->ntime,p->resource);

}

相关文档
最新文档