资源简介

自己写的代码和实验报告,模拟了在批处理系统中的作业调度。适于操作系统初学者理解操作系统中的作业调度原理。(希望朋友们先根据要求自己实现代码,然后再参考我的代码。)

资源截图

代码片段和文件信息

#include 
#include 

#define n 10         //后备队列中JCB的最大数量

//作业控制块
typedef struct 
{
char name[4];     //作业名
int length;       //作业长度
int printer;      //打印机数量
int tape;         //磁带机数量
int runtime;      //运行时间
int waittime;   //等待时间
int next;   //指针
} JCB;

//后备队列(对结构)
JCB jobTable[n];   //作业表
int jobCount;   //作业表中当前作业数量
int head;            //作业表头指针

//初始化函数
void Init()
{
head=-1;
jobCount=0;
}

//入队函数
void PushQueue(JCB job)
{
if(jobCount>=n)
{
printf(“队列已满,不能加入\n“);
return;
}

if(head==-1)
head=0;

jobTable[jobCount].length=job.length;
strcpy(jobTable[jobCount].namejob.name);
jobTable[jobCount].printer=job.printer;
jobTable[jobCount].runtime=job.runtime;
jobTable[jobCount].tape=job.tape;
jobTable[jobCount].waittime=job.waittime;

jobTable[jobCount-1].next=jobCount;
jobTable[jobCount].next=-1;

jobCount++;
}

//出队函数
void PopQueue(int num)
{
if(jobCount==0)
{
printf(“空队不能出队“);
return;
}
if(num>=jobCount)
{
printf(“队列中不存在该元素“);
return;
}
if(jobCount==1)
{
head=-1;
jobTable[0].next=-1;
jobCount=0;
}
else
{
jobTable[num-1].next=jobTable[num].next;
jobTable[num].next=-1;
jobCount--;
}
}

//系统资源
int memory=65536;     //主存大小64MB,65536KB
int tape=4;           //磁带机数量
int printer=2;        //打印机数量
 
//作业调度函数
void Schedule()
{
int currJobmaxJob;
double currJobRatiomaxJobRatio;

while(head!=-1)
{
currJob=maxJob=head;
currJobRatio=maxJobRatio=0;

//找出响应比最大的作业
while(1)
{
//找出满足资源的作业
if(jobTable[currJob].length<=memory && jobTable[currJob].printer<=printer && jobTable[currJob].tape<=tape)     
{
currJobRatio=(double)jobTable[currJob].waittime/jobTable[currJob].runtime;     //计算响应比
if(currJobRatio>maxJobRatio)
{
maxJobRatio=currJobRatio;
maxJob=currJob;
}
}
if(jobTable[currJob].next==-1)
break;
else
currJob=jobTable[currJob].next;
}

//输出响应比最大的作业、分配资源
if(maxJobRatio!=0)
{
memory-=jobTable[maxJob].length;
tape-=jobTable[maxJob].tape;
printer-=jobTable[maxJob].printer;
printf(“选中作业的作业名为:%s\n“jobTable[maxJob].name);

PopQueue(maxJob);
}
}

}

void main()
{
//用于作业的临时变量
char tmp_name[4];
int tmp_length;
int tmp_printer;
int tmp_tape;
int tmp_runtime;
int tmp_waittime;

int tmp_count;     //记录输入作业数量
JCB tmp_job;       //临时作业变量

printf(“请输入作业相关信息,以作业名为Q为输入结束。\n\n按任意键进入输入模式:“);
getchar();

Init();

while(1)
{

tmp_count=1;
if(tmp_count>n)
{
printf(“达到最大作业数,输入结束。“);
break;
}
//输入作业名、作业大小、磁带机数、打印机数、估计执行时间、等待时间
printf(“作业名:“);
scanf(“%s“tmp_name);
if(strcmp(tmp_name“Q“)==0||strcmp(tmp_name“q“)==0)
break;
printf(“作业大小:“);
scanf(“%d“&tmp_length);
printf(“磁带机数:“);
scanf(“%d“&tmp_printer);
printf(“打印机数:“);
scanf(“%d“&tmp_tape);
printf(“估计运行时间:“);
scanf(“%d“&tmp

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       3690  2009-11-30 17:23  批处理系统的作业调度\JobSchedule.c

     文件      42496  2009-12-04 22:26  批处理系统的作业调度\实验报告.doc

     文件     133632  2009-12-04 22:28  批处理系统的作业调度\实验要求.doc

     目录          0  2009-12-04 22:28  批处理系统的作业调度

----------- ---------  ---------- -----  ----

               179818                    4


评论

共有 条评论