操作系统的实验一模拟进程状态转换

操作系统的实验一模拟进程状态转换

ID:36730647

大小:649.45 KB

页数:16页

时间:2019-05-14

操作系统的实验一模拟进程状态转换_第1页
操作系统的实验一模拟进程状态转换_第2页
操作系统的实验一模拟进程状态转换_第3页
操作系统的实验一模拟进程状态转换_第4页
操作系统的实验一模拟进程状态转换_第5页
资源描述:

《操作系统的实验一模拟进程状态转换》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、实用标准文案实验一模拟进程状态转换及其PCB的变化一、实验目的:自行编制模拟程序,通过形象化的状态显示,使学生理解进程的概念、进程之间的状态转换及其所带来的PCB内容、组织的变化,理解进程与其PCB间的一一对应关系。二、实验内容及要求:(1)、设计并实现一个模拟进程状态转换及其相应PCB内容、组织结构变化的程序。(2)、独立编写、调试程序。进程的数目、进程的状态模型(三状态、五状态、七状态或其它)以及PCB的组织形式可自行选择。(3)、合理设计与进程PCB相对应的数据结构。PCB的内容要涵盖进程的基本信息、控制

2、信息、资源需求及现场信息。(4)、设计出可视性较好的界面,应能反映出进程状态的变化引起的对应PCB内容、组织结构的变化。(5)、代码书写要规范,要适当地加入注释。(6)、鼓励在实验中加入新的观点或想法,并加以实现。(7)、认真进行预习,完成预习报告。(8)、实验完成后,要认真总结,完成实验报告。精彩文档实用标准文案三、实现:数据结构structPCB{charname;intpriority;intneedtime;booloperator<(constPCB&b)const{returnpriority>b.

3、priority;}};五状态进程模型最高优先数优先调度算法流程图精彩文档实用标准文案四、运行结果:精彩文档实用标准文案图1创建2个进程,因为这时cpu空闲所以内核调度,b优先级高先执行图2超时,因为这时cpu空闲所以内核调度,b优先级还是比a高所以先执行精彩文档实用标准文案图32个进程均被阻塞,其中一旦进程被阻塞就会引发调度图4唤醒1个进程,从阻塞队列取队首放到就绪队列队尾,由于这时cpu空闲所以内核调度五、源代码:精彩文档实用标准文案#include#includeus

4、ingnamespacestd;intReady_len=0;intBlocked_len=0;intCPU_state=0;structPCB{charname;intpriority;intneedtime;booloperator<(constPCB&b)const{returnpriority>b.priority;}};PCBReady[100];PCBBlocked[100];PCBCpu;精彩文档实用标准文案booldispatch();boolcreat(intNUM){//创建一个新的进程wh

5、ile(NUM--){printf("输入进程名(一个字符)、所需时间(一个整数)、优先级(一个整数):");scanf("%s%d%d",&(Ready[Ready_len].name),&(Ready[Ready_len].needtime),&(Ready[Ready_len].priority));getchar();Ready_len++;}if(CPU_state==0)//如果CPU空闲,则调度dispatch();}booldispatch(){if(CPU_state==0){精彩文档实用

6、标准文案if(Ready_len!=0){sort(Ready,Ready+Ready_len);Cpu.name=Ready[0].name;Cpu.needtime=Ready[0].needtime;Cpu.priority=Ready[0].priority;if(Ready_len!=1)//就绪队列剔除队首元素for(intindx=1;indx

7、Ready[indx].needtime;Ready[indx-1].priority=Ready[indx].priority;}Ready_len--;CPU_state=1;printf("***%c进程送往CPU执行",Cpu.name);Cpu.needtime--;Cpu.priority--;}else{printf("***就绪队列为空,无法调度");精彩文档实用标准文案returnfalse;}}else{printf("***CPU忙,无法调度");}}booltime_out(

8、){if(CPU_state==1){if(Cpu.needtime==0)printf("***%c时间片用完,并且执行完毕,被释放",Cpu.name);else{Ready[Ready_len].name=Cpu.name;Ready[Ready_len].needtime=Cpu.needtime;Ready[Ready_len].priority=Cpu.priority

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。