操作系统实验报告进程调度算法.docx
文本预览下载声明
HUNAN UNIVERSITY
进程调度算法
题 目 进程调度算法
学生姓名
学生学号
专业班级
完成日期 2013.12.06
一、实验题目
实现短进程优先调度算法(SPF)
实现时间片轮转调度算法(RR)
二、实验目的
通过对进程调度算法的设计,深入理解进程调度的原理。
进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。
进程调度分配处理机,是控制协调进程对CPU的竞争,即按一定的调度算法从就绪队列中选中一个进程,把CPU的使用权交给被选中的进程。
三、实验内容
1. 先来先服务(FCFS)调度算法
原理:每次调度是从就绪队列中,选择一个最先进入就绪队列的进程,把处理器分配给该进程,使之得到执行。该进程一旦占有了处理器,它就一直运行下去,直到该进程完成或因发生事件而阻塞,才退出处理器。
将用户作业和就绪进程按提交顺序或变为就绪状态的先后排成队列,并按照先来先服务的方式进行调度处理,是一种最普遍和最简单的方法。它优先考虑在系统中等待时间最长的作业,而不管要求运行时间的长短。
按照就绪进程进入就绪队列的先后次序进行调度,简单易实现,利于长进程,CPU繁忙型作业,不利于短进程,排队时间相对过长。
2. 时间片轮转调度算法RR
原理:时间片轮转法主要用于进程调度。采用此算法的系统,其程序就绪队列往往按进程到达的时间来排序。进程调度按一定时间片(q)轮番运行各个进程.
进程按到达时间在就绪队列中排队,调度程序每次把CPU分配给就绪队列首进程使用一个时间片,运行完一个时间片释放CPU,排到就绪队列末尾参加下一轮调度,CPU分配给就绪队列的首进程。
固定时间片轮转法:
1 所有就绪进程按 FCFS 规则排队。
2 处理机总是分配给就绪队列的队首进程。
3 如果运行的进程用完时间片,则系统就把该进程送回就绪队列的队尾,重新排队。
4 因等待某事件而阻塞的进程送到阻塞队列。
5 系统把被唤醒的进程送到就绪队列的队尾。
可变时间片轮转法:
1 进程状态的转换方法同固定时间片轮转法。
2 响应时间固定,时间片的长短依据进程数量的多少由 T=N×(q+t)给出的关系调整。
3 根据进程优先级的高低进一步调整时间片,优先级越高的进程,分配的时间片越长。
3. 算法类型:
4. 模拟程序可由两部分组成,先来先服务(FCFS)调度算法,时间片轮转。流程图如下图所示:
四 打印的源程序及附上的注释
#includeiostream
using namespace std;
#define P_NUM 3
//cpu4种状态 就绪 运行 等待 完成
enum state{
ready,
waiting,
block,
finish
};
//PCB 进程控制块 包括名称、优先级、占用CPU时间、需要时间
struct pcb{
char name[4];
int priority;
int cputime;
int needtime;
int count;
int round;
state process;
pcb * next;//构建优先级队列
};
//建立一个优先权的队列
pcb * get_process(){
pcb *q=NULL;;
pcb *t=NULL;;
pcb *p=NULL;
int i=0;
coutinput name and timeendl;
while (iP_NUM){
q=(struct pcb *)malloc(sizeof(pcb));
cinq-name;
cinq-needtime;
q-cputime=0;
q-priority=P_NUM-i;
q-process=ready;
q-next=NULL;
if (i==0){
p=q;
t=q;
}
else{
t-next=q;
t=q;
}
i++;
} //while
return p;
}
//输出当前队列各个进程各种状态
void display(pcb *p){
coutname cputime needtime priority stateendl;
while
显示全部