操作系统课程设计实验报告
姓名
学号
年级
专业
班级
实验题目
进程调度算法实现
实验目的
用高级语言编程和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解。
进程调度时进程管理的主要内容之一,通过设计,编制,调试一个简单的进程调度模拟系统,对进程调度,进程运行状态变换加深理解和掌握,模拟计算机操作系统的进程调度,建立进程控制块PCB,要包含有关进程的描述信息,控制信息以及资源信息,模拟系统根据PCB感知进程的存在和通过PCB中包含的各项变化。掌握进程所处的状态以达到控制进程活动的目的。要实现进程的状态及其转换,进程的创建于撤销,进程的阻塞与唤醒,用P,V原语操作实现进程互斥。
实验内容和步骤
实现进程相关数据结构的创建和查看功能。实现多种进程调度算法:先来先服务算法,时间片流转法,多极反馈轮转法等。实现对执行进程的阻塞,对待进程唤醒等功能。实现相关队列在进程调度中的动态变化过程。
简化的代码如下
#include<iostream>
#incluede<queue>//调用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 (<);
}
};
PCB *pcb=new PCB[number];//一个PCB的数组用来保存就绪进程
PCB *p1=new PCB[number];//一个PCB的数组用来保存已经结束的进程
cout<<endl;
PCB p;//一个PCB型的变量,用来保存队首元素
int i;
for(i=0;i<=number-1;i++)//建立进程信息
cout<<”请输入pcb[“<<i<<”]的信息!”<<endl;
cout<<“以(name,runtime,state(初始化R),priority)”格式输入!<<endl;
cin>>pcb[i].name;
cin>>pcb[i].runtime;
cin>>pcb[i].state;
cin>>pcb[i].priority;
cout<<endl;
}
typedef priority_queue<PCB,vector<PCB>,PCBSortCriterion>pQueue;//PCBSortCriterion为
//优先级准则的优先队列
pQueue q;//优先队列pQueue的一个对象,对这个队列进行主操作
Temp;//优先队列平pQueue的一个对象,是q的一个拷贝对象,作为实现打印输出的一个中//间变量
For(int j=0;j<=number-1;j++)//将进程入队建立优先队列
{
(pcb[j]);
}
//数次进程控制块的初始化状态信息
cout<<”进程控制块的初始化状态信息为:”<<endl;
temp=q;
while(!())
{
p=();
();
();
}
cout<<endl;
int n=0;//进程执行的次数
m=0;//完成进程的个数
while(!())//对进程进行调度
{
cout<<”第”<<++n<<”次运行”;
p=();
cout<<().name<<”!”<<endl;
-=1;
-=1;
();
if(!=0)//表明该进程还未执行完,继续入队进程操作
{
(p);
}
else{//表明该进程已执行完,设置其状态为Z,并将其保存到p
操作系统实验报告 来自淘豆网m.daumloan.com转载请标明出处.