资源简介
实验内容:
进程调度模拟程序:假设有10个进程需要在CPU上执行,分别用:
先进先出调度算法;
基于优先数的调度算法;
最短执行时间调度算法
确定这10个进程在CPU上的执行过程。要求每次进程调度时在屏幕上显示:
当前执行进程;
就绪队列;
等待队列
实验目的:
1)掌握处理机调度及其实现;
2)掌握进程状态及其状态转换;
3)掌握进程控制块PCB及其作用。
实验要求:
1) 创建10个进程的PCB,每个PCB包括:进程名、进程状态、优先级(1~10)、需要在处理机上执行的时间(ms)、队列指针等;
2) 初始化10个PCB(产生随机数0或1,分别表示进程处于就绪态或等待态);
3) 根据调度算法选择一个就绪进程在CPU上执行;
4) 在进程执行过程中,产生随机数0或1,该随机数为1时,将等待队列中的第一个PCB加入就绪队列的对尾;
5) 在进程执行过程中,产生一个随机数,表示执行进程能在处理机上执行的时间,如果随机时间大于总需要的时间,则执行完成。如果小于,则从总时间中减去执行时间。
6) 如果执行进程没有执行完成。则产生随机数0或1,当该随机数为0时,将执行进程加入就绪队列对尾;否则,将执行进程加入等待队列对尾;
7) 一直到就绪队列为空,程序执行结束。
代码片段和文件信息
#include
#define OK 1
#define ERROR 0
#include
#include
using namespace std;
struct PCB//进程控制块的结构定义
{
int name;//用数字对数据块标号 1-10
int state;//其状态为0或1 其中0表示 等待状态 1表示就绪状态
int prior;//优先级 随机数1-10
int time; //执行进程所需时间 随机产生
};
//////////////////////////////////////////////////队列的链式存储结构
typedef struct QNode//定义结点
{
PCB data;
struct QNode *next;
} QNode *QueuePtr;
typedef struct
{
QueuePtr front; //队头指针
QueuePtr rear; //队尾指针
}linkQueue;
/////////////////////////////////////////////////以下是处理链队的基本函数
int InitQueue (linkQueue &Q)//初始化队列
{
Q.front=Q.rear=new QNode;
Q.front->next=NULL;
return OK;
}
int EnQueue(linkQueue &QPCB e)//将一个结点插入到队列当中
{
QueuePtr p=new QNode;
if(!p)
exit(0);
p->data=e;
p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return OK;
}
int PrintQueue(linkQueue &Q)//打印整个队列
{
QueuePtr p=new QNode;
if(Q.front==Q.rear)
return ERROR;
p=Q.front->next;
do
{
cout<<“ “<data.name<<“ “<data.state<<“ “<data.prior<<“ “<data.time< p=p->next;
}while(p!=NULL);
cout< delete p;
return OK;
}
int DeQueue (linkQueue &QPCB &e)//删除一个结点
{
QueuePtr p=new QNode;
if(Q.front==Q.rear) return ERROR;
p=Q.front->next;
e=p->data;
Q.front->next=p->next;
if(Q.rear==p) Q.rear=Q.front;
delete p;
return OK;
}
int GetHead (linkQueue &QPCB &e)//读取对列头元素
{
e=Q.front->next->data;
return OK;
}
int QueueEmpty (linkQueue Q)//判断队列是否为空,为空则返回0
{
if(Q.front==Q.rear)
return 0;
else
return 1;
}
void fifo(linkQueue &waitlinkQueue &oklinkQueue &run)//先进先出调度算法,wait为等待对列,ok为就绪队列run为运行队列
{
srand((unsigned)time(NULL));//让随机数不重复
PCB temp1;
int t;
while(QueueEmpty(wait)==1||QueueEmpty(ok)==1)//当等待或者就绪队列其中一个不为空时执行
{
int cpu=rand()%50+1;
///////////////////////////////////////////////就绪队列放一个元素到运行队列中
if(1==QueueEmpty(ok))//ok队列非空
{
DeQueue (oktemp1);//就绪队列中出一个元素
if(temp1.time<=cpu)
{
temp1.state=2; //2表示运行状态
EnQueue(runtemp1);//就绪队列头进入运行队列
cout< cout<<“当前执行进程为:“< cout<<“执行完成!!!!\n该进程所需时间为“< }
else
{
cout<<“当前执行进程为:“< cout<<“执行一部分,该进程所需时间为“< temp1.time=temp1.time-cpu;
int j=rand()%2;
if(j==1)
{
EnQueue(oktemp1);
}
else
{
EnQueue(waittemp1);
}
}
}
else
{
cout<<“就绪队列为空“< }
//////////////////////////////////////////////////////////产生一个随机数0或者1,1的话等待队列的第一个进程插入到就绪队列
if(1==QueueEmpty(wait))//等待队列非空
{
int j=rand()%2;
if(j==1)
{
DeQueue (waittemp1);
temp1.state = 1;
EnQueue(oktemp1);
}
}
////////////////////////////////////////////////////////////输
- 上一篇:控制台五子棋程序c语言
- 下一篇:VC++简单多人聊天室源码
相关资源
- VC6.0进程调度算法实现,作业调度 有
- 进程调度设计与实现
- 操作系统实验 进程调度 高响应比优先
- 进程调度模拟算法C++实现
- 操作系统课程设计:进程/作业调度
- 操作系统 进程调度 多级队列反馈
- 操作系统概念:进程调度算法FCFS、
- 操作系统进程调度先来先服务、短进
- 操作系统 短进程调度算法 c语言文档
- 进程调度模拟实验
- 操作系统 C++ 页面置换算法含实验报告
- 进程调度 时间片轮转调度算法源代码
- 单处理器系统的进程调度+操作系统(
- 进程管理和调度的算法实现
- 用C#和C++实现的进程调度算法程序操作
- 操作系统进程调度算法——短作业优
- 非抢占式短作业优先进程调度C语言
- 设计一个有 N个进程调度程序设计
- 进程调度的设计与实现图形界面实现
- C++ 先进先出算法FIFO
- 进程调度的设计与实现代码C++
- 按优先数调度算法实现处理器调度的
- 进程调度的设计与实现图形界面c++
- 使用动态优先权的进程调度算法的模
- 操作系统实验-计算机进程管理和进程
- 操作系统课程设计之进程调度源代码
- 使用动态优先权的进程调度算法的模
- 进程调度时间片轮转+优先级进程调度
- 生产者与消费者 进程调度模拟c++
- 操作系统进程调度C++代码实现
评论
共有 条评论