- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
操作系统课程设计实验报告
姓名学号年级专业班级实验题目 进程调度算法实现实验目的用高级语言编程和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。
进程调度时进程管理的主要内容之一,通过设计,编制,调试一个简单的进程调度模拟系统,对进程调度,进程运行状态变换加深理解和掌握,模拟计算机操作系统的进程调度,建立进程控制块PCB,要包含有关进程的描述信息,控制信息以及资源信息,模拟系统根据PCB感知进程的存在和通过PCB中包含的各项变化。掌握进程所处的状态以达到控制进程活动的目的。要实现进程的状态及其转换,进程的创建于撤销,进程的阻塞与唤醒,用P,V原语操作实现进程互斥。实验内容和步骤实现进程相关数据结构的创建和查看功能。实现多种进程调度算法:先来先服务算法,时间片流转法,多极反馈轮转法等。实现对执行进程的阻塞,对待进程唤醒等功能。实现相关队列在进程调度中的动态变化过程。
简化的代码如下
#includeiostream
#incluedequeue//调用STL中的优先队列
using namespace std;
//定义一个PCB进程类
class PCB
{
public:
char name[10];//进程的名字
int runtime;//该进程的运行时间
int priority;//进程的优先级
char state;//该进程的状态
PCB *next;//指向下个进程的指针
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 //仿函数确定优先准则
{
return (p1.priorityp2.priority);
}
};
PCB *pcb=new PCB[number];//一个PCB的数组用来保存就绪进程
PCB *p1=new PCB[number];//一个PCB的数组用来保存已经结束的进程
coutendl;
PCB p;//一个PCB型的变量,用来保存队首元素
int i;
for(i=0;i=number-1;i++)//建立进程信息
cout”请输入pcb[“i”]的信息!”endl;
cout“以(name,runtime,state(初始化R),priority)”格式输入!endl;
cinpcb[i].name;
cinpcb[i].runtime;
cinpcb[i].state;
cinpcb[i].priority;
coutendl;
}
typedef priority_queuePCB,vectorPCB,PCBSortCriterionpQueue;//PCBSortCriterion为
//优先级准则的优先队列
pQueue q;//优先队列pQueue的一个对象,对这个队列进行主操作
Temp;//优先队列平pQueue的一个对象,是q的一个拷贝对象,作为实现打印输出的一个中//间变量
For(int j=0;j=number-1;j++)//将进程入队建立优先队列
{
q.push(pcb[j]);
}
//数次进程控制块的初始化状态信息
cout”进程控制块的初始化状态信息为:”endl;
temp=q;
while(!Temp.empty())
{
p=temp.top();
p.print();
Temp.pop();
}
coutendl;
int n=0;//进程执行的次数
m=0;//完成进程的个数
while(!Q.empty())//对进程进行调度
{
cout”第”++n”次运行”;
p=q.top();
coutq.top().name”!”endl;
p.runtime-=1;
p.priorty-=1;
q.pop();
if(p.runtime!=0)//表明该进程还未执行完,继续入队进程操作
{
q.pust(p);
}
else{//表明该进程已执行完,设置其状态为Z,并将其保存到p1中
p.state=’Z’;
p1[m++]=p;
}
cout”运行
您可能关注的文档
最近下载
- 汉语口语速成入门篇上 第九课 你家有几口人?教案资料.ppt VIP
- DZ∕T 0291-2015 饰面石材矿产地质勘查规范.pdf
- 太阳能路灯工程施工组织方案的编制与应用指南.docx VIP
- 教育行业在线教学平台建设与运营管理方案.doc VIP
- 2025年国家开放大学电大《公共部门人力资源管理》机考3套真题题库及.docx VIP
- (2024版)小学一年级道德与法治下册第一课《有个新目标》教学设计部编版.pdf VIP
- 中华护理学会专科护士通科题库 .pdf VIP
- 2025天津市华淼给排水研究设计院有限公司对外招聘7人笔试历年参考题库附带答案详解.docx
- 老年社会工作服务项目策划书.docx VIP
- 圆钢方钢管受压承载力计算表.xls VIP
文档评论(0)