可变时间片轮转+先来先服务实验报告 .doc
《可变时间片轮转+先来先服务实验报告 .doc》由会员分享,可在线阅读,更多相关《可变时间片轮转+先来先服务实验报告 .doc(10页珍藏版)》请在沃文网上搜索。
1、目的要求:用高级语言编写一个程序,先用可变时间片轮转法将输入的任意个进程进行调度,再用先来先服务法对它们进行作业调度,以加深对进程调度和作业调度算法的理解。数据结构设计:进程属性结构:struct PCBNodeint PID;/进程ID int priority;/优先数 int TrTime;/总运行时间 int RTime;/剩余运行时间 int ATime;/从开始到全部进入就绪队列所需的时间 int STime;/开始运行时间 int FTime;/完成运行时间 int tTime;/周转时间 float WtTime;/带权周转时间;队列属性结构:struct QNode/进程队列
2、 int ID; struct QNode* next;/队列中下一个进程指针;队列头结构:struct LQQNode* head;/队列首部;进程输入类:void input(PCBNode* PT,int PN);进程初始化类:void InitialQueue(LQ& Q,PCBNode* PT,int PN);时间片轮转类void RoundRobin(LQ& Q,int piece,int& tTimeSum,int& WtTimeSum,PCBNode* PT);时间片分配类:bool Deal(LQ& Q,QNode* q,QNode* p,int piece,int& CTi
3、me,PCBNode* PT);先来先服务类:void FCFS(LQ& Q,int& tTimeSum,int& WtTimeSum,PCBNode* PT);实验环境:C+语言程序设计平台算法流程设计:开始在input文件中输入各个进程的从开始到全部进入就绪队列所需时间、剩余运行时间、优先数,一行一进程输入进程数和时间片大小初始化就绪队列,将文件中进程投入运行等待队列为空为队列首进程分配时间片进程在时间片内做完计算周转时间和带权周转时间将该进程退出队列,计算周转时间和带权周转时间将文件中的作业(进程)投入队列运行并确定其开始和完成时间运行队首作业,计算周转时间和带权周转时间,退出队列计算时
4、间片轮转调度的平均周转时间和带权周转时间并打印将其后一作业移至队首计算先来先服务的平均周转时间和带权周转时间并打印结束YNYN下一进程到来将该进程移至队末,将其后一进程移至队首YN将其后一进程移至队首其后有进程YN等待队列为空其后有作业YYNN运行事例演示:input文本中输入: 运行结果: 在input文本中所输入的三列数据分别为:各进程的从开始到全部进入就绪队列所需的时间、剩余运行时间、优先数,而真正在轮转与服务中起到作用的只有前两者。上述程序0到4的编号是按每行进程的输入顺序分配的,在时间片轮转调度中,其执行顺序起初也按编号的从小到大排序,但当它们由于一次使用完时间片后为完成其所有工作量
5、而需再次被调用时,其运行顺序就与input文本中第一列数据相关了,例如进程2和3,由于进程3全部进入队列的时间为11,而当进程2第一次运行后所过去的时间只有9(执行了三次大小为3的时间片),于是接下来仍运行一次进程2,之后才轮到进程3(此时过去时间为12),接着就是剩余进程轮转运行直到结束。其后就是先来先服务,按进程编号由小到大运行,各个进程所占的时刻数就是它们input文本中第二列的数据,也就是运行时间。源程序:#include#include#include#includeusing namespace std;struct PCBNodeint PID;/进程ID int priorit
6、y;/优先数 int TrTime;/总运行时间 int RTime;/剩余运行时间 int ATime;/从开始到全部进入就绪队列所需的时间 int STime;/开始运行时间 int FTime;/完成运行时间 int tTime;/周转时间 float WtTime;/带权周转时间;struct QNode/进程队列 int ID; struct QNode* next;/队列中下一个进程指针;struct LQQNode* head;/队列首部;void input(PCBNode* PT,int PN);void InitialQueue(LQ& Q,PCBNode* PT,int
7、PN);void RoundRobin(LQ& Q,int piece,int& tTimeSum,int& WtTimeSum,PCBNode* PT);bool Deal(LQ& Q,QNode* q,QNode* p,int piece,int& CTime,PCBNode* PT);void FCFS(LQ& Q,int& tTimeSum,int& WtTimeSum,PCBNode* PT);int main()LQ Q;/就绪队列 Q.head=NULL; int PN;/进程数 int piece;/时间片大小 int tTimeSum=0;/周转时间 int WtTimeSu
8、m=0;/带权周转时间 PCBNode* PT=new PCBNodePN;/进程表 coutPN;/输入在input文件中所输入的进程的个数(每行一个进程) coutpiece;/输入所需时间片的大小 input(PT,PN);/调用input.txt文件中进程数据 InitialQueue(Q,PT,PN);/初始化就绪队列 RoundRobin(Q,piece,tTimeSum,WtTimeSum,PT);/可变时间片轮转进程调度,调用Deal(),piece为时间片大小 cout可变时间片轮的平均周转时间为:tTimeSum/PNendl; cout可变时间片轮的平均带权周转时间为:W
- 1.请仔细阅读文档,确保文档完整性,对于不预览、不比对内容而直接下载带来的问题本站不予受理。
- 2.下载的文档,不会出现我们的网址水印。
- 3、该文档所得收入(下载+内容+预览)归上传者、原创作者;如果您是本文档原作者,请点此认领!既往收益都归您。
下载文档到电脑,查找使用更方便
10 积分
下载 | 加入VIP,下载更划算! |
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 可变时间片轮转+先来先服务实验报告 可变 时间 轮转 先来先 服务 实验 报告
