实验二 优先级调度算法

上传人:cn****1 文档编号:503190335 上传时间:2022-12-24 格式:DOCX 页数:7 大小:113.21KB
返回 下载 相关 举报
实验二 优先级调度算法_第1页
第1页 / 共7页
实验二 优先级调度算法_第2页
第2页 / 共7页
实验二 优先级调度算法_第3页
第3页 / 共7页
实验二 优先级调度算法_第4页
第4页 / 共7页
实验二 优先级调度算法_第5页
第5页 / 共7页
点击查看更多>>
资源描述

《实验二 优先级调度算法》由会员分享,可在线阅读,更多相关《实验二 优先级调度算法(7页珍藏版)》请在金锄头文库上搜索。

1、实验二 优先级调度算法实验报告实验目的 本实验模拟在单处理机情况下的处理机调度,帮助学生了解处理机调度的工作。实验内容 设计一个按优先数调度算法实现处理机调度的程序。实验步骤(1) 假定系统有五个进程,每一个进程用一个进程控制块 PCB 来代表。进程控制块的 格式为:进程名 指针 要求运行时间 优先数 状态其中: 进程名作为进程的标识,假设五个进程的进程名分别为 P1,P2,P3,P4,P5。 指针按优先数的大小把五个进程连成队列,用指针指出下一个进程的进程控制块的首地 址,最后一个进程中的指针为“ NULL”。要求运行时间假设进程需要运行的单位时间 优先数赋予进程的优先数,调度时总是选取优先

2、数最大的进程先执行。 状态可假设只有两种状态,“就绪”状态和“结束”状态。五个进程的初始状态都为“就 绪”,用“R”表示,当一个进程运行结束后,它的状态为“结束”,用“E”表示。(2) 在每次运行你所设计的处理机调度程序之前,为每个进程任意确定它的“优先数”和 “要求运行的时间”。(3) 为了调度方便,把五个进程按给定的优先数从小到大连成队列。用一个单元指出队首 进程,用指针指出队列的连接情况例(4) 处理机调度总是选队首进程运行。采用动态改变优先数的办法,进程每运行一次优先 数1,要求运行时间1。(5) 进程运行一次后,若要求运行时间! =0,则再将它加入队列(按优先数大小插入,且 置队首标

3、志);若要求运行时间=0,则把它的状态改成“结束” (E),且退出队列。(6) 若“就绪”状态的队列不为空,则重复上面(4)和 (5)的步骤,直到所有进程都成为“结束”状态。(7) 在所设计的程序中应有显示或打印语句,能显示或打印每次被选中进程程名以及运行 一次后进程队列的变化。的进(8) 为五个进程任意确定一组“优先数”和“要求运行时间”,启动所设计的处理机调度程 序,显示或打印逐次被选中进程的进程名以及进程控制块的动态变化过程。号邸ICTOfiM Mihi抽曲RE简*. C益它诒 E B h 中费-4泅叩si - EiltL. l芋剑曲:垃甘=醴冷迥0昨册丘 *I刊師M eofftl Ni

4、hi谓i州田El刘圧.白3B,剛5略 中牛 15 :坯二 阳曲1“|1融妣” wxd#. 细glfi K 审母 迎目-h3t4e怙库用湖帚 :JlUMMf 1C :!MCllJE=*fc :rtilifa h:1 raferw:- *I rudtXI mJL.x 1P 1154 0|r qi 中 481N-Mhi MM 啪ARElEi 由31戊锤空亠! 幻殆葩 BNI ll中 14411- 间d- p T - 巻僉-一 毘事菩一 退禽+:.主要程序结构(附注释)#include iostream#include string#include stdio.h#include stdlib.h#i

5、nclude time.h#include #define random(x) (rand()%x)using namespace std;class processprivate:class PCB/节点类public:string name;int runTime;int priority;char status;PCB * next;PCB()PCB(string n, PCB* p=NULL, int run=0, int pri=0, char sta=E)name=n;next=p; runTime=run;priority二pri;status=sta;void run()cou

6、 tname正在运行n;runTime=runTimel;priority=priority1;if(runTime = 0) status = E;bool isEnd()if (status = E)coutname is endendl;return true;elsereturn false;PCB * head;/头结点public:process()/*PCB * KI = new PCB(P1,NULL,2,1,R);PCB * K5 = new PCB(P5,K1,4,2,R);PCB * K4 = new PCB(P4,K5,4,2,R);PCB * K3 = new PCB

7、(P3,K4,1,3,R);PCB * K2 = new PCB(P2,K3,3,5,R);head = new PCB();head-next = K2;*/const int size = 5;int i=0;string name;stringstream strStream;head = new PCB();PCB * Ksize;srand( int)ti me(NULL);K0 = new PCB (Pl, NULL, random(10)+l, random(10)+l, R);head-next = K0; for(i=l;isize;i+)strStreami+l; name

8、=s trSt ream.s tr(); name=P+name;strSt ream.s tr();Ki = new PCB(name,head-next, random(10)+l,random(10)+l,R);pri nt();head-next = Ki;sor t();process()PCB *ptr;while(head)ptr = head;head = head-next;delete ptr;head = NULL;void run()/运行优先级调度算法PCB *ptr = head-next;pri nt();sys tem(pause);while(p tr)pt

9、r-run();pri nt();ptr-isEnd();sor t();ptr = head-next;coutnnnnnnn;cout运行完毕! endl;void sor t()/重新排序if (head-nex t = NULL)return;PCB *ptr,*target;ptr=target=headnext;if(target-status= E)headnext=targetnext;target-next=NULL;return;int flag = 0;while(ptr-next)if(target-priority ptr-next-priority)ptr=ptr-

10、next;flag = 1;else if (ptr-next=NULL)/最后一个节点的判断flag = 2;elsebreak;if(flag=1)head-next=target-next;target-next=ptr-next;ptr-next=target;if(flag=2)head-next=target-next;target-next=NULL;ptr-next=target;void print() /打印当前状态PCB *ptr = head-next;cou t二= =nameendlrunTimeendl优先数:priori tyendl状态:statusendlendl;ptr = ptr-next;cou t二= 二=endl;;int main()process p;p.run();sys tem(pause);return 0;实验中遇到的问题C+中的类型转换问题 随机数问题Sort()函数的多种情况考虑指针异常解决方法上网查资料 用编译器逐行运行观察指针动态 与同学讨论

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号