2022年操作系统实验一模拟进程状态转换 .pdf
《2022年操作系统实验一模拟进程状态转换 .pdf》由会员分享,可在线阅读,更多相关《2022年操作系统实验一模拟进程状态转换 .pdf(14页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、实验一模拟进程状态转换及其PCB 的变化一、实验目的:自行编制模拟程序,通过形象化的状态显示,使学生理解进程的概念、进程之间的状态转换及其所带来的PCB内容、组织的变化,理解进程与其 PCB间的一一对应关系。二、实验内容及要求:1 、设计并实现一个模拟进程状态转换及其相应PCB内容、组织结构变化的程序。2 、 独立编写、调试程序。进程的数目、进程的状态模型 三状态、五状态、七状态或其它以及PCB的组织形式可自行选择。3 、合理设计与进程PCB相对应的数据结构。 PCB的内容要涵盖进程的基本信息、控制信息、资源需求及现场信息。4 、设计出可视性较好的界面, 应能反映出进程状态的变化引起的对应 P
2、CB内容、组织结构的变化。5 、代码书写要标准,要适当地加入注释。6 、鼓励在实验中加入新的观点或想法,并加以实现。7 、认真进行预习,完成预习报告。8 、实验完成后,要认真总结,完成实验报告。三、实现 : 数据结构struct PCB 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 1 页,共 14 页char name; int priority; int needtime; bool operator b.priority; ; 五状态进程模型最高优先数优先调度算法流程图精选学习资料 - - - - - - - - - 名师归纳总结 - -
3、- - - - -第 2 页,共 14 页四、运行结果:精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 3 页,共 14 页图 1 创建 2 个进程,因为这时cpu 空闲所以内核调度,b 优先级高先执行图 2 超时,因为这时cpu 空闲所以内核调度,b 优先级还是比a 高所以先执行精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 4 页,共 14 页图 3 2 个进程均被阻塞,其中一旦进程被阻塞就会引发调度图 4 唤醒 1 个进程,从阻塞队列取队首放到就绪队列队尾,由于这时cpu 空闲所以内核调度五、源代
4、码:#include #include 精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 5 页,共 14 页using namespace std; int Ready_len=0; int Blocked_len=0; int CPU_state=0; struct PCB char name; int priority; int needtime; bool operator b.priority; ; PCB Ready100; PCB Blocked100; PCB Cpu; bool dispatch(); bool creat(int
5、NUM)/ 创建一个新的进程while(NUM-) printf( 输入进程名 (一个字符 )、所需时间 (一个整数 )、优先级精选学习资料 - - - - - - - - - 名师归纳总结 - - - - - - -第 6 页,共 14 页(一个整数 ): n); scanf(%s%d%d,&(ReadyReady_len.name),&(ReadyReady_len.needtime),&(ReadyReady_len.priority);getchar(); Ready_len+; if(CPU_state=0)/ 如果 CPU空闲,则调度dispatch(); bool dispatc
6、h() if(CPU_state=0) if(Ready_len!=0) sort(Ready,Ready+Ready_len); Cpu.name=Ready0.name;Cpu.needtime=Ready0.needtime;Cpu.priority=Ready0.priority; if(Ready_len!=1)/ 就绪队列剔除队首元素for(int indx=1;indxReady_len;indx+) Readyindx-1.name=Readyindx.name;Readyindx-1.needtime=Readyindx.needtime;Readyindx-精选学习资料 -
7、 - - - - - - - - 名师归纳总结 - - - - - - -第 7 页,共 14 页1.priority=Readyindx.priority; Ready_len-; CPU_state=1; printf(*%c 进程送往 CPU执行n,Cpu.name); Cpu.needtime-; Cpu.priority-; else printf(* 就绪队列为空,无法调度n); return false; else printf(*CPU 忙,无法调度 n); bool time_out() if(CPU_state=1) if(Cpu.needtime=0) printf(*%
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年操作系统实验一模拟进程状态转换 2022 操作系统 实验 模拟 进程 状态 转换
限制150内