资源简介
进程调度模拟程序:假设有10个进程需要在CPU上执行,分别用:
先进先出调度算法;
基于优先数的调度算法;
最短执行时间调度算法
确定这10个进程在CPU上的执行过程。要求每次进程调度时在屏幕上显示:
当前执行进程;
就绪队列;
等待队列
代码片段和文件信息
#include
#include
#include
#include
struct PCB //定义一个进程结点数据域
{
int name; //进程名
int run_time; //运行时间
int level; //优先数
char state; //运行状态
struct PCB *next; //指向下一个结点的指针
struct PCB *pre; //指向前一个节点的指针
};
struct PCB *PcbPoint[10];//申明指针
struct PCB *ReadyHead *ReadyTail *WaitHead *WaitTail;
int classNum;
void displayProcess() //用于输出当前链表中各结点的状态
{
struct PCB *temp;
temp = ReadyHead;
while (temp != 0 )
{
printf(“ Ready p %d“ temp->name);
temp = temp->next; //实现往后移
}
temp = WaitHead;
printf(“ \n“);
while (temp != 0 )
{
printf(“ Wait p %d“ temp->name);
temp = temp->next; //实现往后移
}
printf(“ \n“);
}
struct PCB * shedule()//根据优先级调度
{
struct PCB *retValue;
struct PCB *temp;
retValue = ReadyHead;
temp = ReadyHead;
while (temp != 0)
{
if (temp->level > retValue->level)
{
retValue=temp;
}
temp=temp->next;
}
if ((retValue == ReadyHead) && (retValue==ReadyTail))
{
ReadyTail->next=ReadyHead->next=ReadyTail->pre=ReadyHead->pre = NULL;
return 0;
}
if (retValue == ReadyTail && (retValue != ReadyHead))
{
ReadyTail = retValue->pre;//调整队列尾部
ReadyTail->next = NULL;
}
else if (retValue == ReadyHead && (retValue != ReadyTail) )
{
ReadyHead= retValue->next;
ReadyHead->pre = NULL;
}
else
{
retValue->pre->next=retValue->next;
retValue->next->pre=retValue->pre;
}
return retValue;
}
int carryOut (struct PCB *p)
{
int temp;
if (NULL == p)
return 0;
printf(“ \n“);
printf(“ Runing process %d“ p->name);
printf(“ run time %d“ p->run_time);
printf(“ level %d\n“ p->level);
temp = rand()%2;
if (temp == 1) //该随机数为时,将等待队列中的第一个PCB加入就绪队列的对尾;
{
if (ReadyTail !=NULL && (WaitHead != NULL))
{
ReadyTail->next=WaitHead;
if (WaitHead != NULL)
WaitHead->pre = ReadyTail;
ReadyTail=WaitHead;
}
if (WaitHead != NULL)
WaitHead=WaitHead->next;
if (ReadyTail !=NULL)
ReadyTail->next=NULL;
};
temp = rand()%20 +1;//表示执行进程已经执行的时间;约为50毫秒
if (temp < p->run_time) //没有执行完
{
p->run_time=p->run_time - temp;
temp = rand()%2;
if (0 ==temp ) // 加到就绪队列队尾
{
ReadyTail->next=p;
p->pre =ReadyTail;
ReadyTail=p;
}
else // 加到等待队列队尾
{
WaitTail->next=p;
WaitTail=p;
};
}
else//已经执行完了
printf(“ process %d is run over\n“ p->name);
if (0==temp)
ReadyTail->next=NULL;
else
WaitTail->next=NULL;
displayProcess();
return 1;
};
void creat() //创建一个函数,用于返回一个链表
{
int i = 1;
for (i = 0; i< 10; i++)
{
PcbPoint[i] = (struct PCB *)malloc(sizeof(struct PCB)); //给PcbPoint指针分配内存
PcbPoint[i]->name= i;
P
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4183 2012-11-23 17:15 lab1.c
----------- --------- ---------- ----- ----
4183 1
- 上一篇:扰动观测器
- 下一篇:红米3S基带.qcn
相关资源
- 操作系统实验_多级反馈队列调度算法
- ProcessScheduling.zip
- 使用动态优先权和时间片轮转的进程
- 操作系统进程调度模拟
- 实现进程调度算法---动态优先级
- 进程调度模拟设计—时间片轮转、非
- 进程调度模拟设计——先来先服务、
- CFS调度算法 详细解析
- 多级反馈进程调度算法 实验报告 及程
- 操作系统实验一 先来先服务FCFS和短
- 动态优先权的进程调度算法
- 操作系统进程调度算法
- 计算机操作系统—— 进程调度模拟实
- 操作系统实验报告-进程调度算法模拟
- 作业调度算法进程调度算法四种常见
- 可视化进程调度过程的模拟仿真
- 5种进程调度算法的模拟实现实验报告
- 模拟进程调度------进程的FCFS、动态优
- 操作系统试验(三个,磁盘调度 进程
- 进程调度算法模拟先来先服务短进程
- 操作系统进程调度实验报告
- 操作系统算法实现银行家算法 进程调
- 进程调度时间片轮转银行家算法作业
- 时间片轮转RR进程调度算法
- 进程调度算法的模拟实现
- 进程调度 时间片轮转法 操作系统实验
评论
共有 条评论