⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 zuoyetiaodu2.cpp

📁 广东工业大学操作系统课程设计(全) 广东工业大学操作系统课程设计(全 )
💻 CPP
字号:
#include<iostream>
#include<stdio.h>
#define getb(type) (type *)malloc(sizeof(type))
#define NULL 0
typedef struct  JCB{//定义作业控制块JCB
	char name[10];//作业名
	int stime;//开始运行时刻
	int rtime;//需要运行时间,即提供服务的时间
	char state;//作业状态
	JCB *next;//链指针
}JCB;
JCB *ready=NULL,*p;
int T;//时间量
int ttime;//总周转时间
float trtime;//总的带权周转时间
void sort()//构造链表存放作业
{JCB *fir,*sec;
 if(ready==NULL){ready=p;}
else{
	fir=ready->next;
	if(fir==NULL){sec=ready;} 
	else{
	  while(fir!=NULL){
		    sec=fir;fir=fir->next;
	}	}
	sec->next=p;
}}
void init()//输入作业参数
{int i,num;
 printf("输入作业数:");
 scanf("%d",&num);//输入作业数
 for(i=0;i<num;i++){printf("输入第%d个作业的信息:\n",i+1);
	 p=getb(JCB);
	 printf("作业名:");
	 scanf("%s",p->name);
	 printf("开始运行时刻:");
	 scanf("%d",&p->stime);
  	 printf("需要运行时间:");
	 scanf("%d",&p->rtime);
	 p->state='w';//每个作业的初始状态总是等待W
	 p->next=NULL;
	 sort();
 }
T=0;//时间量
ttime=0;//总周转时间
trtime=0;//总的带权周转时间
getchar();//接收字符
}
int length()//链表长
{int i=0;
 JCB *q;
 q=ready;
 while(q!=NULL){i++;q=q->next;}
 return i;
}
void destroy(int end)//完成作业
{	int i=end;
	float W;
	printf("\n作业完成时间:%d",i);
	printf("\n周转时间:%d",i-(p->stime));
	W=(float)(i-(p->stime))/(float)(p->rtime);//带权周转时间=周转时间/提供服务的时间
	printf("\n带权周转时间:%2.2f",W);
}
void run()//运行作业
{	int start,end;
	start=T;//初始值为0
	end=(p->rtime)+start;//作业完成时间=运行时间+开始运行时刻
	ttime+=end-p->stime;//总周转时间=完成时间-开始运行时刻
	trtime+=(float)(end-(p->stime))/(float)(p->rtime);//总的带权周转时间
	T+=p->rtime;
	destroy(end);
}
void main()//主函数
{	int len,count;
	count=0;
	printf("\t\tcopyright:林庆达 计算机03(7)班");
	printf("\n\t  ******作业调度算法:先来先服务(FCFS)******\n");
	init();//初始化数据
	len=length();//就绪作业的长度
    printf("\npress any key to continue ...");
	getchar();
	while((len!=0)&&(ready!=NULL)){//若就绪队列不为空
		count++;
		p=ready;
		printf("\n正在执行的作业是: %s.",p->name);
		ready=ready->next;
		p->next=NULL;
		p->state='r';
		run();
		printf("\npress any key to continue ...");
		getchar();
	}
	printf("\n所有作业全部完成运行!\n");
	printf("平均周转时间为:%3.2f\n",(float)ttime/(float)count);//总周转时间/作业数
	printf("平均带权周转时间为:%3.2f\n",trtime/(float)count);//总的带权周转时间/作业数
	getchar();
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -