基于Linux进程调度模拟程序
河南中医学院
《linux操作系统》课程设计源码
题目:基于Linux的进程调度模拟程序
所在院系: 信息技术学院
专业年级: 2011级 计算机科学与技术
完成学生: 2011180062 孟XX
指导教师: 阮 XX
完成日期: 2011 年 06 月 22日
目 录
1.最高优先算法源码3
2.先来先服务源码8
1. 最高优先算法源码:
#include
#include
#include
#define getpch(type) (type*)malloc(sizeof(type))
#define nll 0 //定义nll的值为0
struct pcb { /* 定义进程控制块PCB */
char name[10]; //进程的名字
char state; //进程的状态
int super; //进程的优先级
int ntime; //进程需要运行时间
int rtime; //进程已用CPU时间
struct pcb* link;
}*ready=nll,*p;
typedef struct pcb PCB;
char sort() /* 建立对进程进行优先级排列函数*/
{
PCB *first, *second;
int insert=0;
if((ready==nll)||((p->super)>(ready->super)))
/*优先级最大者,插入队首*/
{
p->link=ready;
ready=p;
}
else /* 进程比较优先级,插入适当的位置中*/
{
first=ready;
second=first->link;
while(second!=nll)
{
if((p->super)>(second->super)) /*若插入进程比当前进程优先数大,*/
{ /*插入到当前进程前面*/
p->link=second;
first->link=p;
second=nll;
insert=1;
}
else /* 插入进程优先数最低,则插入到队尾*/
{
first=first->link;
second=second->link;
}
}
if(insert==0) first->link=p;
}
}
char input() /* 建立进程控制块函数*/
{
int i,num;
//clrscr(); /*清屏*/
printf ("\n 请输入被调度的进程数目:"); //其中\n表示换行
scanf ("%d",&num);
for(i=0;i
{
printf ("\n 进程号No.%d:\n",i);
p=getpch(PCB);
printf ("\n 输入进程名:");
scanf ("%s",p->name);
printf ("\n 输入进程优先数:");
scanf ("%d",&p->super);
printf ("\n 输入进程运行时间:");
scanf ("%d",&p->ntime);
printf ("\n");
p->rtime=0;
p->state='w';
p->link=nll;
sort(); /* 调用sort函数*/
}
}
int space()
{
int l=0; PCB* pr=ready;
while(pr!=nll)
{
l++;
pr=pr->link;
}
return(l);
}
char disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/
{
printf ("\n qname \t state \t super \t ndtime \t runtime \n");
printf ("|%s\t",pr-> name);
printf ("|%c\t",pr-> state);
printf ("|%d\t",pr-> super);
printf ("|%d\t",pr-> ntime);
printf ("|%d\t",pr-> rtime);
printf ("\n");
}
char check() /* 建立进程查看函数 */
{
PCB* pr;
printf ("\n **** 当前正在运行的进程是:%s