版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统原理上机实践报告PAGEPAGE9西华大学计算机系上机实践报告一.实验目的1、掌握进程的各种基本状态和状态之间的转换;2、掌握进程调度的过程;3、用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。二.实验内容与设计思想上机实践内容:编写并调试一个模拟的进程调度程序,采用“最高优先数优先”调度算法对五个进程进行调度。“最高优先数优先”调度算法的基本思想是把CPU分配给就绪队列中优先数最高的进程。静态优先数是在创建进程时确定的,并在整个进程运行期间不再改变。动态优先数是指进程的优先数在创建进程时可以给定一个初始值,并且可以按一定原则修改优先数。例如:在进程获得一次CPU后就将其优先数减少1。或者,进程等待的时间超过某一时限时增加其优先数的值,等等。设计思想:PCB的信息可以存放在结构或类中,如定义structPCB{/*定义进程控制块PCB*/ charname[10]; charstate; intsuper; intntime; intrtime; structpcb*link;};2、数据结构采用链式列队。frontrearABCDfrontrearABCD∧···开始结束开始结束图1最高优先数进程调度模拟程序流程图三.使用环境windows8,vs2012四.核心代码及调试过程Run函数模拟运行进程优先级降1运行时间+1voidrun(PCB*work){//运行进程 work->super--; work->state='r'; work->rtime++;}如果队列不空则开始访问进程,显示正在运行的进程信息,显示就绪队列信息while(front!=NULL) { //取出队列队首 PCB*work=front; front=front->next; work->next=NULL; //进入CPU运行 run(work); // // //显示队列级运行状态 cout<<"\n运行中的进程\n"; cout<<"进程名字状态优先级需要时间运行时间\n"; cout<<work->name<<"\t"; cout<<work->state<<"\t"; cout<<work->super<<"\t"; cout<<work->ntime<<"\t"; cout<<work->rtime<<"\n"; cout<<"\n就绪队列信息\n"; show(); // // system("pause"); //运行未结束从新进入就绪队列 if(work->ntime>work->rtime){ work->state='w'; sort(work); } else {//运行结束销毁进程 cout<<"\n进程"<<work->name<<"运行结束\n\n"; deletework; }图1模拟运行情况五.总结进程调度算法的难点在于怎样组织进程表,进程的数据结构中究竟要包含哪些数据,采用怎样的调度算法。在本次试验中采用了最高优先级是调度算法,因为是单线程的所以很难模拟IO的中断,所以只是模拟检查进程的优先级,并且不能动态的改变。只能在进程运行中,每一次运行都降低进程的优先级。六.附录完整代码:#include<iostream>usingnamespacestd;structPCB{ charname[10]; //进程名 charstate; //进程状态w等待状态r运行状态 intsuper; //进程优先级 intntime; //进程需要运行时间 intrtime; //进程已经运行的时间 structPCB*next=NULL;}*front;voidsort(PCB*p){//插入排序 if(front==NULL) front=p; elseif(p->super>front->super){ p->next=front; front=p; } else{ PCB*work=front; while(work->next!=NULL) { if(p->super>work->next->super){ p->next=work->next; work->next=p; break; } work=work->next; } if(work->next==NULL) work->next=p; }}PCB*create(){//创建1个PCB PCB*p=newPCB; cout<<"请依次输入进程名称优先级运行时间:\n"; cin>>p->name; cin>>p->super; cin>>p->ntime; p->rtime=0; p->state='w'; p->next=NULL; returnp;}voidrun(PCB*work){//运行进程 work->super--; work->state='r'; work->rtime++;}voidshow(){//显示就绪队列信息 PCB*work=front; cout<<"进程名字状态优先级需要时间运行时间\n"; while(work!=NULL) { cout<<work->name<<"\t"; cout<<work->state<<"\t"; cout<<work->super<<"\t"; cout<<work->ntime<<"\t"; cout<<work->rtime<<"\n"; work=work->next; }}voidcpu(){//模拟CPU工作 //创建5个PCB并按优先级加入就绪队列 cout<<"创建5个进程\n"; for(inti=0;i<5;i++){ cout<<"进程"<<i+1<<endl; PCB*p=create(); sort(p); } while(front!=NULL) { //取出队列队首 PCB*work=front; front=front->next; work->next=NULL; //进入CPU运行 run(work); // // //显示队列级运行状态 cout<<"\n运行中的进程\n"; cout<<"进程名字状态优先级需要时间运行时间\n"; cout<<work->name<<"\t"; cout<<work->state<<"\t"; cout<<work->super<<"\t"; cout<<work->ntime<<"\t"; cout<<work->rtime<<"\n"; cout<<"\n就绪队列信息\n"; show(); // // system("pause"); //运行未结束从新进入就绪队列 if(work->ntime>work->rtime){
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中医骨科护理的护理原则
- 2026届北京市北京师范大附属实验中学中考物理模拟试题含解析
- 中年病人心理护理的社会适应问题
- 巴彦县2025届三年级数学第二学期期末预测试题含答案
- 【基于微信小程序的作业管理系统的设计与实现13000字(论文)】
- 危重病症护理循证实践
- 北师大版数学七年级下册第六单元变量之间的关系单元检测培优卷
- 危重症护理创新方法分享
- 副高级护理教学:理论与实训结合
- 山西省朔州市怀仁市城镇第七小学校2025年数学三年级第二学期期中监测试题(含答案)
- 5.中国的农业(2026-2027高中二年级·中国区域地理专题复习讲义)
- 电力系统运行与调度操作规范指南
- (2025版)AHA心肺复苏与心血管急救指南解读课件
- 2025年山东日照市初二地理生物会考真题试卷(含答案)
- 2026年安徽省合肥市高三二模英语试题(含答案和音频)
- 2026年贵州省毕节市初二地理生物会考真题试卷+解析及答案
- 2026年四川省历年信息技术学业水平题库试题【必考】附答案详解
- 2026年大学成本与管理会计期末测试卷附完整答案详解(名师系列)
- 神经外科中枢神经系统感染诊治中国专家共识(2021 版)
- 2025陕煤电力略阳有限公司高校毕业生招聘10人笔试历年典型考点题库附带答案详解
- 2026年宗教教职人员管理知识试题
评论
0/150
提交评论