模拟实现进程调度算法Word下载.doc
- 文档编号:13094996
- 上传时间:2022-10-04
- 格式:DOC
- 页数:10
- 大小:161.50KB
模拟实现进程调度算法Word下载.doc
《模拟实现进程调度算法Word下载.doc》由会员分享,可在线阅读,更多相关《模拟实现进程调度算法Word下载.doc(10页珍藏版)》请在冰豆网上搜索。
采用冒泡法编写程序,实现短进程优先调度的算法)。
d、进程调度程序模拟程序只对PCB进行相应的调度模拟操作,不需要实际程序。
四、实验内容及实验步骤
1、实验内容
a、设计进程控制块PCB表结构,模拟实现进程调度算法:
FIFO,静态优先级调度,时间片轮转调度,短进程优先调度算法,多级反馈队列调度。
(实现其中之一个以上)。
b、编写一个进程调度程序模拟程序。
模拟程序只对PCB进行相应的调度模拟操作,不需要实际程序。
c、由用户输入(可通过文件输入)进程名、进程状态、进程运行时间和进程优先级等数据。
2、实验步骤
1)打开microsoftvasualC++6.0“开始”菜单—所有程序—单击“microsoftvasualC++6.0”,进入创建页面。
2)单击标题栏“文件”选择“新建”进入界面如下:
选择‘工程,win32consoleapplication’编辑工程名称‘chengkun1’存储在E盘,创建‘创建新工作区’确定。
3)创建文件:
单击标题栏“文件”选择“新建”进入界面类似于上面的界面。
4)在建好的文件中加入附件中的源程序,并进行编译。
五实验原始记录及结果分析
六参考代码
#include<
stdio.h>
#include<
string.h>
iostream.h>
constintMAXPCB=100;
//定义最大进程数//定义进程控制块PCB结构体类型
typedefstructPCB_Node{
charsName[20];
//进程名
intiStatus;
//进程状态(1就绪2等待3运行)当前程序中暂时全部默认为就绪处理
intiRunTime;
//进程运行时间(纳秒)
intiPriority;
//进程优先级(0级最高)
intiFinished;
//进程是否执行完成标志(1:
已完成;
0:
末完成)
intiWaitTime;
//进程等待时间(纳秒)
}PCB;
PCBpcbs[MAXPCB];
//PCB数组队列
intiPCBNum;
//实际进程数
charsFileName[20];
//进程流文件名
voidInitPCB() //PCB初始化函数
{inti;
for(i=0;
i<
MAXPCB;
i++)
{strcpy(pcbs[i].sName,"
"
);
pcbs[i].iStatus=-1;
pcbs[i].iRunTime=-1;
pcbs[i].iPriority=-1;
pcbs[i].iFinished=0;
pcbs[i].iWaitTime=0;
}//for(i=0;
iPCBNum=0;
}//voidInitPCB()
intReadPCBFile() //读进程流文件数据,存入PCB数组队列pcbs,并输出
{ FILE*fp;
inti;
cout<
<
请输入进程流(文本)文件名(注意:
包括后缀名):
"
;
cin>
>
sFileName;
if((fp=fopen(sFileName,"
r"
))==NULL)
{cout<
错误:
进程流文件"
sFileName<
打不开,请检查文件名和路径!
!
endl;
}
else{while(!
feof(fp))
{ fscanf(fp,"
%s%d%d%d"
pcbs[iPCBNum].sName,&
pcbs[iPCBNum].iStatus,&
pcbs[iPCBNum].iRunTime,&
pcbs[iPCBNum].iPriority);
iPCBNum++;
} //while(!
feof(fp))//输出所读入的进程数据
cout<
endl<
从文件"
读入的进程数据:
cout<
进程名进程状态运行时间优先级"
for(i=0;
iPCBNum;
{cout<
"
pcbs[i].sName<
"
pcbs[i].iStatus<
pcbs[i].iRunTime<
"
pcbs[i].iPriority<
进程总数:
iPCBNum<
return
(1);
} //if((fp=fopen(sFileName,"
return(0);
}//intReadPCBFile()
voidReSetPCB()
//重置PCB完成标志、等待时间,以供另一个调度算法使用,并输出所读入的进程数据
{ inti;
//输出所读入的进程数据
---------------------------------------------------------------"
for(i=0;
{pcbs[i].iFinished=0;
}
}//voidReSetPCB()
voidFIFO()//先进先出调度算法
{inti,j;
intiSum;
//总等待时间//输出先进先出调度算法执行流
先进先出调度算法执行流:
序号进程名运行时间等待时间"
iSum=0;
{cout<
i+1<
pcbs[i].iWaitTime<
iSum+=pcbs[i].iWaitTime;
//累加总等待时间
for(j=i+1;
j<
j++)
{ pcbs[j].iWaitTime+=pcbs[i].iRunTime;
} }
总调度次数:
总等待时间:
iSum<
printf("
平均等待时间%.2f\n"
(float)iSum/(float)iPCBNum);
}//voidFIFO()
voidPriority() //优先级调度算法
{inti,j;
intiCurMin;
//当前最低优先级PCB在数组pcbs中的下标
intiPassedTime=0;
//已经过的时间
intiSum;
//总等待时间
intiQueue[MAXPCB];
//用于存放排序后进程数组下标的数组队列
intiCurPriority=1000;
//当前最低优先级
for(i=0;
i++)//按优先级递增排序PCB,将排序后下标的存放在iQueue队列中。
(选择排序)
{ iCurPriority=1000;
for(j=0;
{ if((pcbs[j].iFinished==0)&
&
(pcbs[j].iPriority<
iCurPriority))
{ iCurMin=j;
iCurPriority=pcbs[j].iPriority;
}}//for(j=0;
iQueue[i]=iCurMin;
pcbs[iCurMin].iFinished=1;
pcbs[iCurMin].iWaitTime+=iPassedTime;
iPassedTime+=pcbs[iCurMin].iRunTime;
} //for(i=0;
i++)
//输出优先级调度执行流
优先级调度执行流:
序号进程名优先级运行时间等待时间"
{cout<
"
pcbs[iQueue[i]].sName<
pcbs[iQueue[i]].iPriority<
pcbs[iQueue[i]].iRunTime<
pcbs[iQueue[i]].iWaitTime<
iSum+=pcbs[iQueue[i]].iWaitTime;
//累加总等待时间 }
}//voidPriority()
voidRR() //时间片轮转调度算法
{ inti;
intiNotEnded=
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 模拟 实现 进程 调度 算法