您的当前位置:首页正文

批处理系统的作业调度模拟

来源:一二三四网


目 录

一、需求分析………………………(1)

二、概括设计………………………

三、详细编码………………………

四、系统调试………………………

五、总结……………………………

2) 3) 8) 9) ((((

一、需求分析

1、课程设计目的

(1)加深对作业概念的理解;

(2)深入了解批处理系统如何组织作业、管理作业和调度作业; 2、课程设计预备知识

(1)作业控制块的概念和结构; (2)作业的创建; (3)作业的调度算法; (4)c语言的相关知识 3、课程设计内容要求

(1)编写程序完成批处理系统中的作业块的建立、初始化和调度; (2)要求采用响应比高优先的作业调度算法、短作业优先算法;

(1)

二、概括设计

1、首先确定作业控制块的内容;

2、要求建立两个算法(调度)的子函数,并输出已分配作业的作业名; 3、要求在主函数中创建JCB内容,并输出已创建的作业信息; 4、要求设计菜单:可供用户进行选择,分别执行不同的调度; 5、尽量使用C语言中的window函数来实现;

(2)

三、详细编码

源代码:

#include \"stdlib.h\" typedef struct jcb {

char name[4]; int length; int printer; int tape; int runtime; int waittime; struct jcb *next; }JCB; JCB *head; int tape,printer; long memory; shedule( ) { float w,k; JCB *p,*q,*s,*t; do { p=head; s=NULL; q=NULL;

3)(

k=0;

while(p!=NULL) {

if(p->length<=memory&&p->tape<=tape&&p->printer<=printer) {

w=(float)(p->waittime)/p->runtime; if(q==NULL||w>k) { k=w; q=p; t=s; } } s=p; p=p->next; }

if(q!=NULL) {

if(t==NULL) head=head->next; else

t->next=q->next;

memory=memory-q->length; tape=tape-q->tape; printer=printer-q->printer; printf(\"Selects:%s\\n\

4)

(}

}while(q!=NULL); } inital() { int w,k; JCB *p,*q,*s,*t; do { p=head; s=NULL; q=NULL; k=0;

while(p!=NULL) {

if(p->length<=memory&&p->tape<=tape&&p->printer<=printer) {

w=1/(p->runtime); if(q==NULL||w>k) { k=w; q=p; t=s; } } s=p; p=p->next; }

(5)

if(q!=NULL) {

if(t==NULL) head=head->next; else

t->next=q->next;

memory=memory-q->length; tape=tape-q->tape; printer=printer-q->printer; printf(\"Selects:%s\\n\}

}while(q!=NULL); } main( ) { int i; int x ,n; char name[4];

int size,tcount,pcount,wtime,rtime; JCB *p; memory=65536; tape=4; printer=2; head=NULL;

printf(\"\\n please inputs the quantity of JCB...\\n\"); scanf(\"%d\

printf(\"---------------------------------------------------------------\\n\"); (6)

for(i=0;iprintf(\"|name | length | tape | printer | waittime | runtime|\\n\");

scanf(\"%s\%d\%d\%d\%d\%d\me);

p=(JCB*)malloc(sizeof(JCB)); strcpy(p->name,name); p->length=size; p->printer=pcount; p->tape=tcount; p->runtime=rtime; p->waittime=wtime; p->next=head; head=p;}

printf(\"---------------------------------------------------------------\\n\" \"[1]_The response compares first the algorithm\\n\" \"[2]_Short work first algorithm\\n\"

\"---------------------------------------------------------------\\n\" \"please chose [1]or[2]...\\n\"); scanf(\"%d\switch (x){ case 1:shedule();

printf(\"---------------------------------------------------------------\\n\"); break; case 2:inital();

printf(\"---------------------------------------------------------------\\n\"); break;

default:printf(\"\\n error..please try again!\\n\");main();}} (7)

四、系统调试

第一次执行程序:

------------------------------------------------------------------------------------------------------ 输入作业名、作业大小、所需磁带机数、打印机数、等待时间、运行时间 S1 400 2 1 1 4 S2 256 2 1 3 1 运行结果:

采用高相应比算法调度的结果:为S2 采用高相应比算法调度的结果:为S1 Please press any key to continue…

------------------------------------------------------------------------------------------------------- 第二次执行程序:

------------------------------------------------------------------------------------------------------- 输入作业名、作业大小、所需磁带机数、打印机数、等待时间、运行时间 S1 226 1 1 3 5 S2 600 3 1 3 3 运行结果:

采用短作业优先调度算法的执行结果:S2 采用短作业优先调度算法的执行结果:S1 Please press any key to continue… ---------

(8)

五、总结

课程设计终于结束了,我们的程序也通过了,这次的课程设计给我们很大的收获,使我们对操作系统的基本知识有了进一步的提高,并在实践中对各种概念有了进一步的深化,开始的时候总觉得很简单的课程设计,因为程序的编写确实不是很难的,所以在开始的时候都没有认真做,一直到要交需求分析的时候才发现老师的要求蛮高的,因为写了三遍的需求分析才通过,虽然只用了一个下午,但明白了一个道理,简单的应付是不容易完成的。

(9)

因篇幅问题不能全部显示,请点此查看更多更全内容

Top