用C语言完成进程调度.docx

上传人:b****6 文档编号:6759783 上传时间:2023-01-10 格式:DOCX 页数:8 大小:39.58KB
下载 相关 举报
用C语言完成进程调度.docx_第1页
第1页 / 共8页
用C语言完成进程调度.docx_第2页
第2页 / 共8页
用C语言完成进程调度.docx_第3页
第3页 / 共8页
用C语言完成进程调度.docx_第4页
第4页 / 共8页
用C语言完成进程调度.docx_第5页
第5页 / 共8页
点击查看更多>>
下载资源
资源描述

用C语言完成进程调度.docx

《用C语言完成进程调度.docx》由会员分享,可在线阅读,更多相关《用C语言完成进程调度.docx(8页珍藏版)》请在冰豆网上搜索。

用C语言完成进程调度.docx

用C语言完成进程调度

计算机实验报告

 

课程名称:

操作系统

实验名称:

进程的轮转调度

学号:

学生姓名:

班级:

指导教师:

评分:

 

实验日期:

2011年3月20日

1、实验目的:

单处理器多道系统中,当有多个就绪进程时,须按照某种策略决定哪些进程优先占用处理机。

本实验模拟实现处理机调度,以加深了解处理机调度的工作。

2、实验要求

1、可随机输入若干进程,并按优先权排序;

2、重新排序,进行下轮调度;

3、每次调度后,显示各进程状态。

3、实验环境

在MicrosoftVisualC++6.0环境下调试

4、实验内容

采用进程轮转的调度算法,用C语言编写,编写并调试一个多进程并发执行的进程调度程序,实现处理机调度。

5、测试

测试的内容执行下面的源程序代码

6、实验心得体会

通过这次实验,了解了计算机处理作业的方式,为以后的学习奠定了基础。

 

 

程序源代码:

#include"stdio.h"

#include

#include

#definegetpch(type)(type*)malloc(sizeof(type))

#defineNULL0

structpcb/*定义进程控制块PCB*/

{

charname[10];

charstate;

intsuper;

intntime;

intrtime;

structpcb*link;

}*ready=NULL,*p;

typedefstructpcbPCB;

voidsort()/*建立对进程进行优先级排列函数*/

{

PCB*first,*second;

intinsert=0;

if((ready==NULL)||((p->super)>(ready->super)))/*优先级最大者,插入队首*/

{

p->link=ready;

ready=p;

}

else/*进程比较优先级,插入适当的位置中*/

{

first=ready;

second=first->link;

while(second!

=NULL)

{

if((p->super)>(second->super))/*若插入进程比当前进程优先数大,*/

{/*插入到当前进程前面*/

p->link=second;

first->link=p;

second=NULL;

insert=1;

}

else/*插入进程优先数最低,则插入到队尾*/

{

first=first->link;

second=second->link;

}

}

if(insert==0)first->link=p;

}

}

voidinput()/*建立进程控制块函数*/

{

inti,num;

system("cls");/*清屏*/

printf("\n你要轮转调度几个进程,请输入");

scanf("%d",&num);

for(i=1;i<=num;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=NULL;

sort();/*调用sort函数*/

}

}

intspace()

{

intl=0;

PCB*pr=ready;

while(pr!

=NULL)

{

l++;

pr=pr->link;

}

return(l);

}

voiddisp(PCB*pr)/*建立进程显示函数,用于显示当前进程*/

{

printf("\n");

printf("\n进程名\t状态\t优先权\t进程需要的时间\t执行次数\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");

}

voidcheck()/*建立进程查看函数*/

{

PCB*pr;

printf("\n****当前正在运行的进程是:

%s",p->name);/*显示当前运行进程*/

disp(p);

pr=ready;

printf("\n****当前就绪队列状态为:

\n");/*显示就绪队列状态*/

while(pr!

=NULL)

{

disp(pr);

pr=pr->link;

}

}

voiddestroy()/*建立进程撤消函数(进程运行结束,撤消进程)*/

{

printf("\n进程[%s]已完成.\n",p->name);

free(p);

}

voidrunning()/*建立进程就绪函数(进程运行时间到,置就绪状态*/

{

(p->rtime)++;

if(p->rtime==p->ntime)

destroy();/*调用destroy函数*/

else

{

(p->super)--;

p->state='w';

sort();/*调用sort函数*/

}

}

voidmain()/*主函数*/

{

intlen,h=0;

charch;

input();

len=space();

while((len!

=0)&&(ready!

=NULL))

{

ch=getchar();

h++;

printf("\nTheexecutenumber:

%d\n",h);

p=ready;

ready=p->link;

p->link=NULL;

p->state='R';

check();

running();

printf("\n按enter键继续......");

ch=getchar();

}

printf("\n\n进程已经完成.\n");

ch=getchar();

}

当输入的进程数为2时,程序执行的部分截图如下:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 总结汇报

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1