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