作业内容:
进程的3个基本状态:执行、就绪、等待,其转换标识分别为1、2、3、4(如图)。编程模拟进程状态转换过程,要求:分别建立等待队列和就绪队列(单队列、结构不限),初始状态时,1个进程处于执行状态,7个进程在等待队列中,7个进程在就绪队列中。手工触发任意一种转换,显示转换发生后的执行进程和两个队列的进程。
程序流程图:
开始初始化等待和阻塞队列等待队列为空?是结束否等得队列首个进程进入运行队列显示所有队列信息是否阻塞?否运行进程消耗一个时间片运行进程是否结束否运行进程进入等待队列是是正在执行进程进入阻塞队列运行队列清空否阻塞队列首位所需条件是否满足是阻塞队列首个进程进入等待队列说明(1)上为运行结果,x (2)程序中使用队列数据结构,并以结构体process(进程)作为队列元素。 (3) 程序自动进行时间片分配,但每次运行一个进程前需要进行阻塞判断,手动输入。 #include int id; int rt; process(){} process(int a,int b) { id=a; rt=b; } }; queue void show(queue p1(1,2),p2(2,1),p3(3,1),p4(4,3),p5(5,2),p6(6,1),p7(7,2),p8(8,1),p9(9,1),p10(10,3),p11(11,2),p12(12,1),p13(13,3),p14(14,2),p15(15,1); ru.push(p1); re.push(p2); re.push(p3); re.push(p4); re.push(p5); re.push(p6); re.push(p7); re.push(p8); bl.push(p9); bl.push(p10); bl.push(p11); bl.push(p12); bl.push(p13); bl.push(p14); bl.push(p15); process x; char ch; int n; cout<<\"初始化中.\"; cout<<\".\"< show(re,ru,bl); } else if(ch=='n') { x.rt--; ru.front().rt=x.rt; if(x.rt!=0) { x=ru.front(); ru.pop(); re.push(x); } else ru.pop(); x=re.front(); re.pop(); ru.push(x); show(re,ru,bl); } else cout<<\"输入有误\"< void show(queue cout<<\"运行任务:\"; process y; if(ru.empty())cout<<\"空\"< cout< while(!re.empty()) { y=re.front(); re.pop(); cout< cout< while(!bl.empty()) { y=bl.front(); bl.pop(); cout< 因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- efsc.cn 版权所有 赣ICP备2024042792号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务