工大在线
标题:
我们去年的操作系统课程设计//有代码说明
[打印本页]
作者:
lalala19
时间:
2007-5-28 22:35
标题:
我们去年的操作系统课程设计//有代码说明
现在基本上都开始期末课程设计了,会还好`不会头就大了,这是我们去年的操作系统课程设计,用C语言实现操作系统的进程的模拟调度,设计时间一周,这个我一天时间就写出来了,而且还是A,我们那班就只有两个A,拿出来分享一下~~希望有帮助~
题目如下
批处理系统的作业调度模拟
一、课程设计目的
1、加深对作业概念的了解;
2、深入了解批处理系统如何组织作业、管理作业和调度作业;
3、巩固相关的理论知识;
二、课程设计预备知识
1、作业控制块的概念和结构;
2、作业的创建;
3、作业的调度算法;
4、c语言的相关知识
三、课程设计内容要求
1、编写程序完成批处理系统中的作业块的建立、初始化和调度;
2、要求采用响应比高优先的作业调度算法、短作业优先算法;
四、具体要求
1、首先确定作业控制块的内容;
2、要求建立两个算法(调度)的子函数,并输出已分配作业的作业名;
3、要求在主函数中创建JCB内容,并输出已创建的作业信息;
4、要求设计菜单:可供用户进行选择,分别执行不同的调度;
5、尽量使用C语言中的window函数来实现;
源代码:
#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;
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",q->name);
}
}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;
}
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",q->name);
}
}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",&n);
printf("---------------------------------------------------------------\n");
for(i=0;i<n;i++){
printf("|name | length | tape | printer | waittime | runtime|\n");
scanf("%s\t%d\t%d\t%d\t%d\t%d",&name,&size,&tcount,&pcount,&wtime,&rtime);
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<HRN>\n"
"[2]_Short work first algorithm<SJF>\n"
"---------------------------------------------------------------\n"
"please chose [1]or[2]...\n");
scanf("%d",&x);
switch (x){
case 1:shedule();
printf("---------------------------------------------------------------\n");
break;
case 2:inital();
printf("---------------------------------------------------------------\n");
break;
default:printf("\n error..please try again!\n");main();
}
}
附件里有程序说明
作者:
lalala19
时间:
2007-5-28 22:46
这是运行结果:
第一次执行程序:
------------------------------------------------------------------------------------------------------
输入作业名、作业大小、所需磁带机数、打印机数、等待时间、运行时间
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…
-------------------------------------------------------------------------------------------------------
作者:
kaiven
时间:
2008-2-14 13:38
要教作业了 谢谢LZ
作者:
yleio
时间:
2008-6-23 02:26
标题:
谢谢你咯谢谢
谢谢里哦谢谢谢谢
作者:
西门吹水
时间:
2008-6-25 10:32
标题:
看看怎样
看看效果怎样,正在设计一个
作者:
saisai
时间:
2008-9-8 20:16
天啊。你会把那些小弟弟妹妹带坏的。。。
作者:
psxatu
时间:
2008-9-10 14:16
楼主写的好详细....谢谢
欢迎光临 工大在线 (http://ruolanmy.hk1.ifreeurl.com/)
Powered by Discuz! X2.5