操作系统处理机调度算法的实现c语言源代码处理机调度算法的实现
处理机调度算法的实现
1. 设定系统中有五个进程,每一个进程用一个进程控制块表示。
2. 输入每个进程的“优先数”和“要求运行时间”,
3. 为了调度方便,将五个进程按给定的优先数从大到小连成就绪队列。用一单元指出队列首进程,用指针指出队列的连接情况。
4. 处理机调度总是选队首进程运行。采用动态优先数算法,进程每运行一次优先数就减“1”,同时将运行时间减“1”。
5. 若要求运行时间为零,则将其状态置为“结束”,且退出队列。
6. 运行所设计程序,显示或打印逐次被选中进程的进程名以及进程控制...
处理机调度算法的实现
处理机调度算法的实现
1. 设定系统中有五个进程,每一个进程用一个进程控制块表示。
2. 输入每个进程的“优先数”和“要求运行时间”,
3. 为了调度方便,将五个进程按给定的优先数从大到小连成就绪队列。用一单元指出队列首进程,用指针指出队列的连接情况。
4. 处理机调度总是选队首进程运行。采用动态优先数算法,进程每运行一次优先数就减“1”,同时将运行时间减“1”。
5. 若要求运行时间为零,则将其状态置为“结束”,且退出队列。
6. 运行所
程序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程。
#include
#include
struct PCB {
char name[10];
int priority,time;
struct PCB *next;
}*k;
struct LinkQueue {
PCB * front;
PCB * rear;
};
//队列初始化
LinkQueue init(){
LinkQueue Q;
PCB * p;
p=(PCB *)malloc(sizeof(PCB));
if(p) {
Q.front=Q.rear=p;
Q.front->next=NULL;
return Q;
}else{
printf("队列初始化失败,程序运行终止! \n");
exit(0);
}
}
//插入新进程,使优先数从大到小排列
LinkQueue sort(LinkQueue Q,PCB *p) {
PCB * temp1;
PCB * temp2;
if(Q.rear==Q.front) {
Q.front->next=p;
Q.rear=p;
} else {
temp1=Q.front;
temp2=temp1->next;
while(temp2->priority>=p->priority && temp2->next!=NULL) {
temp1=temp2;
temp2=temp1->next;
}
if(temp2->next==NULL && temp2->priority>=p->priority) {
temp2->next=p;
Q.rear=p;
} else {
p->next=temp1->next;
temp1->next=p;
}
}
return Q;
}
LinkQueue input(LinkQueue Q) /* 建立进程控制块函数*/
{
int i;
for(i=1;i<=5;i++)
{
printf("\n 进程号No.%d:\n",i);
k=(PCB *)malloc(sizeof(PCB));
printf("\n 输入进程名:");
scanf("%s",k->name);
printf("\n 输入进程优先数:");
scanf("%d",&k->priority);
printf("\n 输入进程运行时间:");
scanf("%d",&k->time);
printf("\n");
k->next=NULL;
Q=sort(Q,k); /* 调用sort函数*/
}
return Q;
}
LinkQueue running(LinkQueue Q) /* 建立进程就绪函数(进程运行时间到,置就绪状态*/
{
if(k->time==0) {
printf("运行后进程 [%s] 已完成 状态为\"结束\".\n",k->name);
free(k);
}else
{
(k->priority)--;
(k->time)--;
printf("运行后优先数:%d 需要运行时间:%d\n",k->priority,k->time);
Q=sort(Q,k); /*调用sort函数*/
}
return Q;
}
void check(LinkQueue Q) /* 建立进程查看函数 */
{ PCB *pr;
pr=(PCB *)malloc(sizeof(PCB));
pr=Q.front->next;
printf("\n **** 输入的五个过程为:\n");
while(pr!=NULL) {
printf("\n 进程名:%s 状态:就绪 优先数:%d 需要运行时间:%d\n",pr->name,pr->priority,pr->time);
pr=pr->next;
}
}
void main()
{
int h=0;
LinkQueue P;
P=init();
P=input(P);
check(P);
while((P.front->next)!=NULL) {
h++;
k=P.front->next;
P.front->next=k->next;
k->next=NULL;
printf("\n 第%d次运行,被选中进程是:%s ",h,k->name);
P=running(P);
}
printf("\n\n 进程已经完成.\n");
}
第5页 共5页
本文档为【操作系统处理机调度算法的实现c语言源代码】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。