资源简介
进程调度模拟程序:假设有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
相关资源
- 西北农林科技大学操作系统实验一-
- Nachos进程调度 算法修改
- 操作系统 进程调度
- NachOS 进程调度算法修改
- 采用时间片轮转算法的进程调度程序
- 综合使用作业调度和进程调度模拟作
- 操作系统实验 7种进程调度算法的实现
- 操作系统进程调度算法实验报告
- 大连理工大学操作系统上机进程调度
- 进程调度的设计与实现
- 实现单处理机下的进程调度程序
- 时间片轮转调度算法
- 操作系统 进程调度时间片轮转银行家
- 动态优先数高者进程调度算法
- 北京化工大学操作系统上机源码八个
- 进程调度 优先权和轮转法
- 进程管理大作业源码电梯调度算法操
- 操作系统实验-模拟进程调度
- 优先数调度算法实现处理器调度
- 时间片轮转算法的进程调度程序
- 操作系统基于动态优先权的进程调度
- 进程调度 时间片轮转与优先级 作业调
- 进程调度算法包括先来先服务调度算
- 多级反馈队列进程调度Swing实现源代码
- 模拟进程调度代码解释文档.pdf
- 操作系统课程设计进程调度 存储管理
- 进程调度模拟设计--先来先服务、强占
- 进程调度算法和银行家算法
- 操作系统实验,进程调度,作业调度
- 操作系统进程调度算法 先来先服务
评论
共有 条评论