文档介绍:1
课程设计说明书
设计名称: 进程调度算法设计
题 目: 进程调度算法设计
先数调度算法
对每个进程确定一个优先数,该算法总是让优先数最高的进程先使用处理器。对具有相同优先数的进程,再来采用先来先服务的次序分配处理器。系统常与任务的紧迫性和系统效率等因素确定进程的优先数。进程的优先数可以固定的,也可随进程执行过程动态变化。一个高优先数进程占用处理器后,系统处理该进程时有两种算法,一是“非抢占式”,另一种是“可抢占式”。前者是次进程占用处理器后一直运行到结束,除非本身主动让出处理器;后者则是严格保证在任何时刻总是让优先数最高的进程在处理器上运行。
循环轮转调度算法
循环轮转调度算法的具体原理是:每个进程被分配一个时间片,即该进程允许运行的时间。就绪的进程都存放在一个就绪链表中,队首的进程将获得时间片。如果在时间片结束时进程还在运行,则CPU将剥夺并分配给下一个进程。调度程序所要做的就是维护一张就绪进程列表,当进程用完它的时间片后,它被移到队列的末尾。
6
四.设计步骤
任务分析
(1)PCB结构通常包括以下信息:进程名,进程优先数,轮转时间片,进程已占用的CPU时间,进程还需要的CPU时间,进程的状态,当前队列指针等。可根据实验的不同,PCB结构的内容可以作适当的增删
(2)本程序用两种算法对五个进程进行调度,每个进程可有三个状态:就绪、执行、完成。并假设初始状态为就绪状态。
(3)为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的优先数或轮转时间数以及进程需运行的时间片数的初始值均由用户给定。
(4)在优先数算法中,优先数可以先取值为一个常数减去进程所需要的时间片数目,进程每执行一次,优先数减3,CPU时间片数加1,进程还需要的时间片数减1。在轮转算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了2个单位),这时,CPU时间片数加2,进程还需要的时间片数减2,并排列到就绪队列的尾上。
(5)对于遇到优先数一致的情况,采用FIFO策略解决。
概要设计
,每个进程可有三个状态,并假设初始状态为就绪状态。
,程序中的某进程运行时间以时间片为单位计算。各进程的优先数或轮转时间数以及进程需运行的时间片数的初始值均由用户给定。
,优先数的值为50与运行时间的差值,即P_TIME-process->needtime。进程每执行一次,优先数减3,CPU时间片数加1,进程还需要的时间片数减1。在轮转算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了2个单位),这时,CPU时间片数加2,进程还需要的时间片数减2,并排列到就绪队列的尾上。
,采用FIFO策略解决。
详细设计
pcb() 定义pcb块
display() 显示结果信息函数
process_finish(pcb *q) 进程完成标示
display_round() 显示循环轮转调度算法运行结果
() 优先数调度算法
cpu_round()处理器的工作状态
7
流程图
开始
生成并按生成次序排列进程控制块链
链首进程投入运行
时间片到,进程时间片减1,优先级减3
撤销该进程
运行进程退出,取
链首进程投入运行
时间片为0?
优先级大于队列中优先级最高的进程?
进程队列为空?
结束
源程序
源程序如下:
#include<>
#include <>
8
#include<>
#include<>
#include<>
#include<>
#define P_NUM 5
#define P_TIME 50
enum state
{
ready,
execute,
block,
finish
};
struct pcb
{
char name[4];
int priority;
int cputime;
int needtime;
int count;
int