操作系统实验报告_第1页
操作系统实验报告_第2页
操作系统实验报告_第3页
操作系统实验报告_第4页
操作系统实验报告_第5页
已阅读5页,还剩6页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、操作系统课程设计实验报告姓名学号年级专业班级实验题目 进程调度算法实现实验目的用高级语言编程和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。进程调度时进程管理的主要内容之一,通过设计,编制,调试一个简单的进程调度模拟系统,对进程调度,进程运行状态变换加深理解和掌握,模拟计算机操作系统的进程调度,建立进程控制块PCB,要包含有关进程的描述信息,控制信息以及资源信息,模拟系统根据PCB感知进程的存在和通过PCB中包含的各项变化。掌握进程所处的状态以达到控制进程活动的目的。要实现进程的状态及其转换,进程的创建于撤销,进程的阻塞与唤醒,用P,V原语操作实现进程互斥。实验内容和步骤实现进

2、程相关数据结构的创建和查看功能。实现多种进程调度算法:先来先服务算法,时间片流转法,多极反馈轮转法等。实现对执行进程的阻塞,对待进程唤醒等功能。实现相关队列在进程调度中的动态变化过程。简化的代码如下#include<iostream>#incluede<queue>/调用STL中的优先队列using namespace std;/定义一个PCB进程类class PCB public: char name10;/进程的名字 int runtime;/该进程的运行时间 int priority;/进程的优先级 char state;/该进程的状态 PCB *next;/指向

3、下个进程的指针 void print()const/输出进程的信息 cout<<”(name=”<<name<<”,runtime=”<<runtime<<”,state=”<<state <<”,priority=”<<priority<<”)”<<endl; ; class PCBSortCriterion/优先队列的优先准则类 public: bool operator()(const PCB &p1,const PCB &p2)const /仿函数确定

4、优先准则 return (p1.priority<p2.priority); ; PCB *pcb=new PCBnumber;/一个PCB的数组用来保存就绪进程 PCB *p1=new PCBnumber;/一个PCB的数组用来保存已经结束的进程 cout<<endl; PCB p;/一个PCB型的变量,用来保存队首元素 int i; for(i=0;i<=number-1;i+)/建立进程信息 cout<<”请输入pcb“<<i<<”的信息!”<<endl; cout<<“以(name,runtime,st

5、ate(初始化R),priority)”格式输入!<<endl;cin>>;cin>>pcbi.runtime;cin>>pcbi.state;cin>>pcbi.priority;cout<<endl;typedef priority_queue<PCB,vector<PCB>,PCBSortCriterion>pQueue;/PCBSortCriterion为/优先级准则的优先队列pQueue q;/优先队列pQueue的一个对象,对这个队列进行主操作Temp;/优先队列平pQ

6、ueue的一个对象,是q的一个拷贝对象,作为实现打印输出的一个中/间变量For(int j=0;j<=number-1;j+)/将进程入队建立优先队列 q.push(pcbj);/数次进程控制块的初始化状态信息cout<<”进程控制块的初始化状态信息为:”<<endl;temp=q;while(!Temp.empty()p=temp.top();p.print();Temp.pop();cout<<endl;int n=0;/进程执行的次数m=0;/完成进程的个数while(!Q.empty()/对进程进行调度cout<<”第”<&l

7、t;+n<<”次运行”;p=q.top();cout<<q.top().name<<”!”<<endl;p.runtime-=1;p.priorty-=1;q.pop();if(p.runtime!=0)/表明该进程还未执行完,继续入队进程操作q.pust(p);else/表明该进程已执行完,设置其状态为Z,并将其保存到p1中p.state=Z;p1m+=p;cout<<”运行后的状态为:”<<endl;/打印出运行后的进程状态temp=q;/拷贝输出队列while(!Temp.empty()p=temp.top();p.

8、print();temp.pop();if(m>0)/输出完成的进程信息for(i=0;i<=m-1;i+)p1i.print();cout<<endl;cout<<endl;system(“pause”);return 0;int main()cout<<setw(40)<<”进程模拟调度设计”<<endl<<endl;cout<<”提示:输入1选择先来先服务算法,输入2选择优先调度算法,输入3选择轮转法,输入4退出程序”<<endl<<endl;cout<<”

9、 1,先来先服务n 2.优先级发n 3.时间片轮转法n 4.多级反馈轮转法n 5.动态优先级法n 6.退出”<<endl<<endl;int choice;int go=1;while(go)cout<<”亲输入你的选择:”;cin>>choice;switch(choice)/调用先来先服务算法求解case1:FCFS();break;/调用优先级法求解case2:PRIO();break;/调用时间片轮转法求解case3:LZF();break;/调用多级反馈轮转法求解case4:DJFKIZ();break;case5:DTYXJF();b

10、reak;case6:cout<<”退出”<<endl;go=0;break;/返回首页default:cout<<”选择有误,请重新输入选择!”<<endl;break;system(pasue);return 0以下是运行结果:初始化界面:先来先服务法:静态优先级发:时间片轮转法:动态优先级发:多级反馈轮转法:分析与体会1. 通过这次实验使得我对进城调度几种算法的思想以及实现原理有了进一步的认识和掌握。再设计多级反馈轮转法的算法以及实现代码时遇到了代码不会写,算法理解不够透彻的问题,而导致这个问题上纠结了很久,最后还是查阅资料解决了。2. 这次实验使用的编程语言是cc+。由于在以前学习cc+的时候掌握的不是很好喝很多知识点都忘记了以至于在实验的很多地

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论