资源简介
操作系统--多级反馈队列进程的控制算法,是我自己精心编得,大家多给意见啊!!
代码片段和文件信息
#define MAXQSIZE 100 //最大队列长度
#define NULL 0
#define OK 1
#define OVERFLOW 0
#define STATUS int
#define ERROR 0
#include
#include
#include
using namespace std;
struct PCB
{
int name;//用数字对数据块标号
int prior;//优先级
int ntime;//运行需要时间
int rtime;//已经运行时间
int pstate;//进程所在队列号
};
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=(QueuePtr) malloc(sizeof(QNode));
if(!Q.front) exit(0);
Q.front->next=NULL;
return OK;
}
int PrintQueue(linkQueue &Q)//打印整个队列
{
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(Q.front==Q.rear) return ERROR;
p=Q.front->next;
cout<<“进程号: 进程优先级: 进程已经运行时间: 进程需要运行时间:“< while(p!=NULL)
{
cout<data.name<<“ “<data.prior<<“ “<data.rtime<<“ “<data.ntime< p=p->next;
}
cout< free(p);
return OK;
}
int EnQueue(linkQueue &QPCB e)
{//入队
QueuePtr p;
p=(QueuePtr)malloc(sizeof(QNode));
if(!p) exit(0);
p->data=e; p->next=NULL;
Q.rear->next=p;
Q.rear=p;
return OK;
}
int DeQueue (linkQueue &QPCB &e)
{//出队
QueuePtr p;
p=(QueuePtr)malloc(sizeof(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;
free(p);
return OK;
}
int FindQueue (linkQueue &Qint a)
{//查找进程号为a的进程,并删除
QueuePtr pq;
p=(QueuePtr)malloc(sizeof(QNode));
q=(QueuePtr)malloc(sizeof(QNode));
if(Q.front==Q.rear) return ERROR;
p=Q.front->next;
q=Q.front;
while(p)
{
if (p->data.name==a)
{
q->next=p->next;
free(p);
return 1;
}
else
{
q=p;
p=p->next;
}
}
return 0;
}
int QueueEmpty (linkQueue Q)
{//判断队列是否为空,为空则返回0
if(Q.front==Q.rear)
return 0;
else
return 1;
}
void running (linkQueue &ready1linkQueue &ready2linkQueue &ready3linkQueue &run)
{//继续运行程序
srand((unsigned)time(NULL));//让随机数不重复
PCB temp1temp2;
int timep1=1;//时间片1
int timep2=2;//时间片2
int timep3=3;//时间片3
if (QueueEmpty(run)==0)//如果运行队列无进程则从相应的就绪队列取
if (QueueEmpty(ready1)==1)//就绪队列1不空则取第一个
{
DeQueue (ready1temp1);
temp1.rtime++;
EnQueue(runtemp1);
}
else
if (QueueEmpty(ready2)==1)//就绪队列2不空则取第一个
{
DeQueue (ready2temp1);
temp1.rtime++;
EnQueue(runtemp1);
}
else
if (QueueEmpty(ready3)==1)//就绪队列3不空则取第一个
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 540753 2009-10-13 11:11 jckz\Debug\jckz.exe
文件 804056 2009-10-13 11:11 jckz\Debug\jckz.ilk
文件 264624 2009-10-13 11:11 jckz\Debug\jckz.obj
文件 2040484 2009-10-11 21:45 jckz\Debug\jckz.pch
文件 1131520 2009-10-13 11:11 jckz\Debug\jckz.pdb
文件 55013 2009-10-11 21:45 jckz\Debug\StdAfx.obj
文件 164864 2009-10-13 11:11 jckz\Debug\vc60.idb
文件 241664 2009-10-13 11:11 jckz\Debug\vc60.pdb
文件 9307 2009-10-13 11:11 jckz\jckz.cpp
文件 4217 2009-10-11 21:57 jckz\jckz.dsp
文件 533 2009-10-11 20:19 jckz\jckz.dsw
文件 50176 2009-10-13 11:13 jckz\jckz.ncb
文件 53760 2009-10-13 11:13 jckz\jckz.opt
文件 1089 2009-10-13 11:11 jckz\jckz.plg
文件 1197 2009-10-11 20:19 jckz\ReadMe.txt
文件 291 2009-10-11 20:19 jckz\StdAfx.cpp
文件 773 2009-10-11 20:19 jckz\StdAfx.h
目录 0 2009-10-11 21:48 jckz\Debug
目录 0 2009-10-11 21:57 jckz
----------- --------- ---------- ----- ----
5364321 19
- 上一篇:echarts地图下钻
- 下一篇:R软件单个率me
ta分析教程
评论
共有 条评论