资源简介
进程调度模拟程序:假设有10个进程需要在CPU上执行,分别用:先进先出调度算法、基于优先数的调度算法、最短执行时间调度算法确定这10个进程在CPU上的执行过程。要求每次进程调度时在屏幕上显示:当前执行进程、就绪队列、等待队列。
实现了三种方法,纯自己开发,使用链表实现,无bug。
代码片段和文件信息
# include
# include
# include
# define N 10
# define num_name 10
/*
输入:
Wechat BaoFeng Baidu Sougou Google Taobao WPS QQ Baiduyun 360
或输入:
0 1 2 3 4 5 6 7 8 9
*/
typedef struct PCB//创建进程PCB块
{
char name[num_name];//名称
int stage; //状态
int priority; //优先级
int time; //运行时间
}PCB;
typedef struct Node//创建队列结点
{
PCB data;
struct Node * next;
}QNode;
typedef struct Queue
{
QNode * front;//队列头结点
QNode * rear;//队列尾结点
}linkQueue;
int InitQueue(linkQueue * q)//链表初始化
{
q->front=q->rear= (QNode *)malloc(sizeof(QNode));
if(!q->front)
exit(0);
q->rear->next=NULL;
return 1;
}
void Pop(linkQueue * q)//队头元素出队
{
if(q->front->next==NULL) exit(0);
QNode * p;
p = q->front->next;
q->front->next = q->front->next->next;
}
void Pop_Item(linkQueue * q QNode * t)//特定元素出队
{
if(q->front->next==NULL) exit(0);
QNode * p *f;
f = q->front;
for(p=q->front->next;p!=NULL;p=p->next)
{
if(!strcmp(t->data.name p->data.name))
{
f->next=f->next->next;
return;
}
f=f->next;
}
}
int Print(linkQueue * q1 linkQueue * q2 QNode * q)//输出队列
{
printf(“当前执行进程是:\n“);
//printf(“%s “ q->data.name);
printf(“{ 名称:%8s 状态:%2d 优先数:%2d 时间:%3d} \n“ q->data.nameq->data.stage q->data.priority q->data.time);
putchar(‘\n‘);
QNode * p;
printf(“就绪队列是:\n“);
p = q1->front->next;
while(p != NULL)
{
if(strcmp(p->data.name q->data.name))
printf(“{ 名称:%8s 状态:%2d 优先数:%2d 时间:%3d} \n“ p->data.namep->data.stage p->data.priority p->data.time);
p = p->next;
}
putchar(‘\n‘);
printf(“等待队列是:\n“);
p = q2->front->next;
while(p != NULL)
{
//printf(“%s “ p->data.name);
printf(“{ 名称:%8s 状态:%2d 优先数:%2d 时间:%3d} \n“ p->data.namep->data.stage p->data.priority p->data.time);
p = p->next;
}
putchar(‘\n‘);
putchar(‘\n‘);
}
void EnQueue(linkQueue * q PCB * a)//元素入队
{
//printf(“%s “a->name);
QNode * p;
p = (QNode *)malloc(sizeof(QNode));
strcpy(p->data.namea->name);
p->data.stage = a->stage;
p->data.priority = a->priority;
p->data.time = a->time;
p->next = NULL;
if(q->front==NULL)//首结点为空,放入头结点后
{
q->front = p;
q->rear = q->front;
}
else//头结点不为空,放入尾结点后
{
q->rear->next = p;
q->rear = q->rear->next;
}
//printf(“%s %d“ q.rear->data.name q.rear->data.stage);
}
PCB FIFO(linkQueue * q_ready)//先进先出调度算法
{
PCB p;
p = q_ready->front->next->data;
return p;
}
PCB Priority(linkQueue * q_ready)//基于优先数的调度算法
{
QNode * p *t;
t = q_ready->front->next;
for(p=q_ready->front->next;p!=NULL;p=p->next)
{
if(p->data.priority > t->data.priority)//调用优先数最大的
相关资源
- 实现进程调度算法---动态优先级
- 进程调度模拟设计—时间片轮转、非
- 进程调度模拟设计——先来先服务、
- CFS调度算法 详细解析
- 多级反馈进程调度算法 实验报告 及程
- 先进先出FIFO页面置换算法
- 欧姆龙-堆栈,出栈,先进先出,后进
- 操作系统实验一 先来先服务FCFS和短
- 动态优先权的进程调度算法
- 操作系统进程调度算法
- 计算机操作系统—— 进程调度模拟实
- 操作系统实验报告-进程调度算法模拟
- 作业调度算法进程调度算法四种常见
- 可视化进程调度过程的模拟仿真
- 5种进程调度算法的模拟实现实验报告
- 先进先出84位FIFO存储器设计课设及源
- 模拟进程调度------进程的FCFS、动态优
- 操作系统试验(三个,磁盘调度 进程
- 进程调度算法模拟先来先服务短进程
- 操作系统进程调度实验报告
- 操作系统 基于优先数的时间片轮转调
- 操作系统算法实现银行家算法 进程调
- 进程调度时间片轮转银行家算法作业
- 时间片轮转RR进程调度算法
- 进程调度算法的模拟实现
- 进程调度 时间片轮转法 操作系统实验
评论
共有 条评论