操作系统进程调度课程设计报告
设计时间: 2012-1-1至2012-1-08
姓名: 学号:
组员:
专业年级:
一.设计目的:
通过课程设计, 加深对操作系统各资源管理模块的理解,掌握操作系统的基本原理及功能, 具有初步分析实际操作系统、设计、构造和开发现代操作系统的基本能力。
二.设计内容:
2.题目:进程调度算法的设计
设计要求:
①设计进程控制块PCB表结构,分别适用于优先数调度算法和循环轮转调度算法。
②建立进程就绪队列。对两种不同算法编制入链子程序。
③编制两种进程调度算法:1)优先数调度;2)循环轮转调度
开发环境:VC++6.0
设计技术参数:
①本程序用两种算法对五个进程进行调度,每个进程可有三个状态,并假设初始状态为就绪状态。
②为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的优先数或轮转时间数以及进程需运行的时间片数的初始值均由用户给定。
③在优先数算法中,优先数的值为50与运行时间的差值,即P_TIME-process-needtime。进程每执行一次,优先数减3,CPU时间片数加1,进程还需要的时间片数减1。在轮转算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了2个单位),这时,CPU时间片数加2,进程还需要的时间片数减2,并排列到就绪队列的尾上。
④对于遇到优先数一致的情况,采用FIFO策略解决。
三.设计过程
个人负责实现的功能:
/函数功能:优先级法调度将进程插入到就绪队列算法
void FirstInsert(PCB *q)
{
PCB *p,*s,*r; /*p,*r用来控制就绪队列滚动,S指向插入的队列*/
int b; /*b作为插入控制标志的*/
s=q;
p=READY;
r=p;
b=1;
if(s-PRIO=READY-PRIO)
{
s-next=READY;
READY=s;
}
else
{
while((p!=NULL)b)
{
if(p-PRIO=s-PRIO)
{
r=p;
p=p-next;
}
else
{
b=0;
}
}
s-next=p;
r-next=s;
}
}
//函数功能:时间片轮转算法调度将进程插入到就绪队列算法
void SecondInsert(PCB *q)
{
tail-next=q;
tail=q;
q-next=NULL;
}
设计思路
首先设计分成两个主要部分:
1、优先级法调度将进程插入到就绪队列算法:
*p,*r用来控制就绪队列滚动,*S指向插入的队列,再比较p和s的进程的优先度大小,如果大于等于则直接加到首部。否则和第二个再比较,p指向下一个进程,r指向p的上一个进程,如果p==NULL,则将新进程插到队尾。否则s的next指向p,r的next指向s。
2时间片轮转算法调度将进程插入到就绪队列算法:
直接将要插进的进程插进就绪队尾即可,也就是将尾部的进程的next指向新插进队列。tail指向新插进程的地址。
算法和流程图
Main函数流程图:
P R
优先数算法流程图:
Y
N
Y
N
N
Y
循环轮转调度算法流程图:
Y
N
Y
N
N
Y
Y
N
四.
原创力文档

文档评论(0)