资源简介
进程调度模拟程序:假设有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)//调用优先数最大的
相关资源
- 先进先出库存管理excel表格.rar
- 论文研究-基于优化Gabor滤波器和GMRF的
- 帐龄分析表(先进先出法核销数据)
- 西北农林科技大学操作系统实验一-
- 论文研究-基于优化支持向量机的人脸
- Nachos进程调度 算法修改
- 操作系统 进程调度
- NachOS 进程调度算法修改
- NachOS线程调度_基于优先级和Round Rob
- 采用时间片轮转算法的进程调度程序
- 综合使用作业调度和进程调度模拟作
- 操作系统实验 7种进程调度算法的实现
- 操作系统进程调度算法实验报告
- 页面置换算法FIFO:先进先出 NUR: 最近
- 大连理工大学操作系统上机进程调度
- 进程调度的设计与实现
- 实现单处理机下的进程调度程序
- 时间片轮转调度算法
- 操作系统 进程调度时间片轮转银行家
- 动态优先数高者进程调度算法
- 基于优先级的调度模型
- 北京化工大学操作系统上机源码八个
- 进程调度 优先权和轮转法
- 进程管理大作业源码电梯调度算法操
- 操作系统实验-模拟进程调度
- 优先数调度算法实现处理器调度
- 时间片轮转算法的进程调度程序
- 操作系统基于动态优先权的进程调度
- 进程调度 时间片轮转与优先级 作业调
- 进程调度算法包括先来先服务调度算
评论
共有 条评论