进程调度实验报告Word下载.docx
- 文档编号:21139246
- 上传时间:2023-01-27
- 格式:DOCX
- 页数:12
- 大小:112.08KB
进程调度实验报告Word下载.docx
《进程调度实验报告Word下载.docx》由会员分享,可在线阅读,更多相关《进程调度实验报告Word下载.docx(12页珍藏版)》请在冰豆网上搜索。
实验内容:
#include<
stdio.h>
malloc.h>
windows.h>
#defineTRUE1
#defineFALSE0
typedefstructPCB_type
{
charname;
//进程名
intstate;
//进程状态
//2——表示“执行”状态
//1——表示“就绪”状态
//0——表示“阻塞”状态
intCPU_time;
//运行需要的CPU时间(需要运行的时间片个数)
}PCBcontrol;
typedefstructQueueNode//定义结点
PCBcontrolPCB;
structQueueNode*next;
}LinkQueueNode;
typedefstructQueue//定义队列
LinkQueueNode*head;
LinkQueueNode*tail;
}LinkQueue;
voidfuzhi(PCBcontrol*PCB1,PCBcontrol*PCB2);
LinkQueuerq,bq,runq;
intdeleteState=0;
intready=2;
intblocked=3;
intcounter=5;
intcreateQueue(LinkQueue*Q)//队列初始化
/*将Q初始化为一个空的链队列*/
Q->
head=(LinkQueueNode*)malloc(sizeof(LinkQueueNode));
if(Q->
head!
=NULL)
{
Q->
tail=Q->
head;
head->
next=NULL;
return(TRUE);
}
elsereturn(FALSE);
}
intenterQueue(LinkQueue*Q,LinkQueueNodex)//入队列操作算法
/*将数据元素x插入到队列中*/
LinkQueueNode*NewNode;
NewNode=(LinkQueueNode*)malloc(sizeof(LinkQueueNode));
if(NewNode!
fuzhi(&
NewNode->
PCB,&
x.PCB);
NewNode->
tail->
next=NewNode;
tail=NewNode;
elsereturn(FALSE);
LinkQueueNode*deleteQ(LinkQueue*Q)
head==Q->
tail)
deleteState=0;
else{
NewNode=Q->
next;
next=NewNode->
tail==NewNode)
tail=Q->
deleteState=1;
returnNewNode;
voiddisplay(LinkQueueQ)
LinkQueueNode*Newhead=Q.head->
while(Newhead!
=Q.tail->
next)
printf("
**************\n"
);
该进程的名称为:
%c\n"
Newhead->
PCB.name);
该进程的状态为:
%d\n"
PCB.state);
进程运行所需的CPU时间为:
PCB.CPU_time);
Newhead=Newhead->
voidcreateOS()
inti;
PCBcontrol*pcbnode;
NewNode=(LinkQueueNode*)malloc(sizeof(LinkQueueNode));
pcbnode=(PCBcontrol*)malloc(sizeof(PCBcontrol));
printf("
就绪队列\n"
for(i=1;
i<
=ready;
i++)
第%d条队列\n"
i);
请输入进程名:
"
scanf("
%c"
&
pcbnode->
name);
fflush(stdin);
\n"
请输入进程运行需要的时间:
%d"
CPU_time);
请输入状态:
0阻塞、1就绪、2运行\n"
state);
fuzhi(&
PCB,pcbnode);
enterQueue(&
rq,*NewNode);
阻塞队列\n"
i=1;
for(;
=blocked;
请输入进程名称:
scanf("
fflush(stdin);
请输入进程阻塞的时间:
enterQueue(&
bq,*NewNode);
display(rq);
display(bq);
intGetStateQueue(LinkQueueQ)
intretval;
if(Q.head==Q.tail)
retval=0;
//得到空队列
else
retval=1;
returnretval;
voiddispath()
intcounte=0;
LinkQueueNode*deleteNode;
//PCBcontrol*a;
intflag1,flag2;
createOS();
while(TRUE)
Sleep(1000);
if(GetStateQueue(rq)||GetStateQueue(bq))
{
if(GetStateQueue(rq))
deleteNode=deleteQ(&
rq);
flag1=enterQueue(&
runq,*deleteNode);
if(flag1)printf("
-----★进程%c调度成功,状态由就绪变成运行!
★\n"
deleteNode->
deleteNode->
PCB.state=2;
printf("
----进程状态变为:
PCB.CPU_time--;
if(deleteNode->
PCB.CPU_time>
0)
{
PCB.state=1;
flag1=enterQueue(&
rq,*deleteNode);
if(flag1)
-----★进程%c调度成功,状态由运行变成就绪!
---进程状态变为:
}else
free(deleteNode);
}
counte++;
if(counte==counter)
{
if(GetStateQueue(bq))
{
deleteNode=deleteQ(&
bq);
flag2=enterQueue(&
if(flag2)
printf("
-----★进程%c调度成功,状态由阻塞变成就绪!
deleteNode->
PCB.state=1;
--进程状态变为:
counte=0;
}
}else
return;
voidInitQ()
intrevalrq=createQueue(&
intrevalbq=createQueue(&
intrevalrunq=createQueue(&
runq);
if(revalrq&
&
revalbq&
revalrunq)
所有队列初始化成功!
程序发生错误\n两秒退出!
Sleep(2000);
exit(0);
//自动退出
voidfuzhi(PCBcontrol*PCB1,PCBcontrol*PCB2)
PCB1->
name=PCB2->
name;
state=PCB2->
state;
CPU_time=PCB2->
CPU_time;
voidmain()
InitQ();
Sleep(1000);
system("
cls"
dispath();
原始数据纪录:
输入数据:
a,6,1;
b,4,1;
3,0;
d,6,0;
e,2,0
输出数据:
实验总结:
通过不懈的努力和在同学的帮助下,我终于完成了这次的进程调度实验,其中学到了很多新东西,根据输入数据和输出数据对比发现结果和预测结果吻合
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 进程 调度 实验 报告