用C语言完成进程调度.docx
- 文档编号:6759783
- 上传时间:2023-01-10
- 格式:DOCX
- 页数:8
- 大小:39.58KB
用C语言完成进程调度.docx
《用C语言完成进程调度.docx》由会员分享,可在线阅读,更多相关《用C语言完成进程调度.docx(8页珍藏版)》请在冰豆网上搜索。
用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时,程序执行的部分截图如下:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语言 完成 进程 调度
![提示](https://static.bdocx.com/images/bang_tan.gif)