资源简介
两道批处理系统的两级调度,自己做的简单的课设内容,可以运行
代码片段和文件信息
#include “stdio.h“
#include
#include
#define getpch(type) (type*)malloc(sizeof(type))
#define NULL0
struct time //定义时间结构体
{
int hour; //时
int min; //分
};
struct time systime; //定义系统时间
int nstate=0; //定义一个变量记录内存内作业数
struct pcb /* 定义进程控制块PCB */
{
char name[10]; //进程名
char state; //状态 state为“N“为就绪,“W“为后备,“S“为还处于输入井状态“F“为完成
int super; //优先数
int ntime; //需要运行时间
int rtime; //运行时间
struct time ctime; //提交时间
struct time stime; //开始时间
struct time ftime; //完成时间
int ttime; //周转时间
float dtime; //带权周转时间
struct pcb* link;
}*ready=NULL*one=NULL*p*q=NULL;
typedef struct pcb PCB;
int numnum2;
int time_cmp(struct time astruct time b) //时间比较 ab返回1;
{
if(a.hour else if(a.hour==b.hour&&a.min else if(a.hour==b.hour&&a.min==b.min) return 0;
return 1;
}
int time_j(struct time cstruct time d) //计算时间的差
{ int s;
s=c.hour*60+c.min-d.hour*60-d.min;//把小时*60化为分钟之后再相减
return s;
}
void sort() /* 建立对进程先来先服务排列函数*/
{
PCB *first *second;
int insert=0;
if((ready==NULL)||time_cmp(p->ctimeready->ctime)==-1) /*提交时间最小者插入队首*/
{
p->link=ready;
ready=p;
}
else /* 进程比较提交时间插入适当的位置中*/
{
first=ready;
second=first->link;
while(second!=NULL)
{
if(time_cmp(p->ctimesecond->ctime)==-1) /*若插入进程比当前进程提交时间小*/
{ /*插入到当前进程前面*/
p->link=second;
first->link=p;
second=NULL;
insert=1;
}
else /* 插入进程提交时间最大则插入到队尾*/
{
first=first->link;
second=second->link;
}
}
if(insert==0) first->link=p;
}
}
void input() /* 建立进程控制块函数*/
{
int i;
printf(“\n 请输入进程数:“);
scanf(“%d“&num);
num2=num;
if(num>0)
for(i=1;i<=num;i++)
{
printf(“\n 进程No.%d:\n“i);
p=getpch(PCB);
printf(“\n 输入进程名:“);
scanf(“%s“p->name);
p->ctime.hour=0p->ctime.min=0;
printf(“\n 输入提交时间(时:分):“);
scanf(“%d:%d“&p->ctime.hour&p->ctime.min);
printf(“\n 输入进程需要运行时间:“);
scanf(“%d“&p->ntime);
printf(“\n 输入进程优先数:“);
scanf(“%d“&p->super);
printf(“\n“);
p->state=‘S‘;
p->rtime=0;
p->stime.hour=0p->stime.min=0;
p->link=0;
sort(); /* 调用sort函数*/
}
else
{ printf(“\n 输入错误!请重新输入\n“);
input();
}
}
//建立完成顺序的链表
void change1()
{ if(one==NULL) {one=p;q=one;}
else
{ q->link=p;
q=p;
}
p=q->link;
q->link=NULL;
q->ftime.hour=systime.hour;
q->ftime.min=systime.min;
nstate--;
num2--;
q->state=‘F‘;
}
void change2()
{ if(one==NULL) {one=p->link;q=one;}
else
{ q->link=p->link;
q=p->link;
}
p->link=q->link;
q->link=NULL;
q->ftime.hour=systime.hour;
q->ftime.min=systime.min;
nstate--;
num2--;
q->state=‘F‘;
}
//选中优先数小的作业,记录开始时间,已运行时间
void run()
{
printf(“---选中作业
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 486400 2014-01-09 18:49 两道批处理系统的两级调度\两道批处理系统的两级调度.ncb
文件 973 2014-01-07 19:06 两道批处理系统的两级调度\两道批处理系统的两级调度.sln
..A..H. 13824 2014-01-09 18:49 两道批处理系统的两级调度\两道批处理系统的两级调度.suo
文件 45056 2014-01-09 18:34 两道批处理系统的两级调度\debug\两道批处理系统的两级调度.exe
文件 319180 2014-01-09 18:34 两道批处理系统的两级调度\debug\两道批处理系统的两级调度.ilk
文件 322560 2014-01-09 18:34 两道批处理系统的两级调度\debug\两道批处理系统的两级调度.pdb
文件 7203 2014-01-09 18:49 两道批处理系统的两级调度\两道批处理系统的两级调度\两道批处理系统的两级调度.cpp
文件 4022 2014-01-09 04:00 两道批处理系统的两级调度\两道批处理系统的两级调度\两道批处理系统的两级调度.vcproj
文件 1407 2014-01-09 18:49 两道批处理系统的两级调度\两道批处理系统的两级调度\两道批处理系统的两级调度.vcproj.CFENG.Administrator.user
文件 13996 2014-01-09 18:34 两道批处理系统的两级调度\两道批处理系统的两级调度\Debug\BuildLog.htm
文件 63 2014-01-09 18:34 两道批处理系统的两级调度\两道批处理系统的两级调度\Debug\mt.dep
文件 44032 2014-01-09 18:34 两道批处理系统的两级调度\两道批处理系统的两级调度\Debug\vc80.idb
文件 53248 2014-01-09 18:34 两道批处理系统的两级调度\两道批处理系统的两级调度\Debug\vc80.pdb
文件 406 2014-01-09 18:34 两道批处理系统的两级调度\两道批处理系统的两级调度\Debug\两道批处理系统的两级调度.exe.em
文件 472 2014-01-09 18:34 两道批处理系统的两级调度\两道批处理系统的两级调度\Debug\两道批处理系统的两级调度.exe.em
文件 388 2014-01-09 18:34 两道批处理系统的两级调度\两道批处理系统的两级调度\Debug\两道批处理系统的两级调度.exe.intermediate.manifest
文件 26521 2014-01-09 18:34 两道批处理系统的两级调度\两道批处理系统的两级调度\Debug\两道批处理系统的两级调度.obj
目录 0 2014-01-09 19:21 两道批处理系统的两级调度\两道批处理系统的两级调度\Debug
目录 0 2014-01-09 19:21 两道批处理系统的两级调度\debug
目录 0 2014-01-09 19:21 两道批处理系统的两级调度\两道批处理系统的两级调度
目录 0 2014-01-09 19:21 两道批处理系统的两级调度
----------- --------- ---------- ----- ----
1339751 21
评论
共有 条评论