肇庆学院
计算机科学与技术
麦小筠
计算机科学系
课 程 设 计 报 告
课程名称
操作系统课程设计
设计题目 进程调度模拟程序——优先数调度算法
专
班
学
姓
业
级
号
名
指导教师
计算机科学与技术
06 科技
200624151101
麦小筠
张会章
2009 年 5 月 20 日
1
肇庆学院
计算机科学与技术
麦小筠
目 录
一、 实验题目 -----------------------------------------------------------------------------------3
二、 实验要求 -----------------------------------------------------------------------------------3
三、 实验目的 -----------------------------------------------------------------------------------3
四、 实验内容 -----------------------------------------------------------------------------------3
五、 实验选题 -----------------------------------------------------------------------------------4
六、 实验设备 -----------------------------------------------------------------------------------4
七、 实验前知识准备 --------------------------------------------------------------------------4
7.1 进程 ---------------------------------------------------------------------------------------4
7.2 进程三种基本状态 -------------------------------------------------------------------- 4
7.3 进程调度 ---------------------------------------------------------------------------------5
7.4 时间片轮转算法 ----------------------------------------------------------------------- 5
7.5 优先数调度算法 ----------------------------------------------------------------------- 5
7.6 先来先服务调度算法 ----------------------------------------------------------------- 6
7.7PCB --------------------------------------------------------------------------------------- 6
八、 程序主要部分详细分析 -----------------------------------------------------------------7
8.1 算法的中心思想 ----------------------------------------------------------------------- 7
8.2 进程控制块的创建 -------------------------------------------------------------------- 7
8.3 选择函数 choose() --------------------------------------------------------------------- 8
8.4 增加函数 Add() -----------------------------------------------------------------------10
8.5 排序函数 MaoPao() ------------------------------------------------------------------11
8.6 打印函数 print() ----------------------------------------------------------------------13
8.7 进程调度函数 Work() ---------------------------------------------------------------14
8.8 主函数 ---------------------------------------------------------------------------------- 16
九.实验感想 -----------------------------------------------------------------------------------18
十.实验结果与分析 ---------------------------------------------------------------------------- 19
十一.程序清单 ---------------------------------------------------------------------------------- 22
十二.参考文献 --------------------------------------------------------------------------------26
2
肇庆学院
计算机科学与技术
麦小筠
一、实验题目
进程调度模拟程序
二、实验要求
1.掌握进程管理中主要数据结构的设计。
2.熟悉进程调度算法、进程控制机构、同步机构、通讯机构的实施。
三、实验目的
1.加深对进程、进程控制块及进程队列等概念的理解。
2.了解优先数和时间片轮转调度算法的具体实施办法,加深对进程管理
各部分内容的理解。
四、实验内容
可按实际情况选择以下列出的 1 个题目:
1.设计一个采用优先数调度算法的模拟进程调度程序。
2.设计一个采用时间片轮转调度算法的模拟进程调度程序。
3.进程调度模拟程序的设计(包括至少 2 种调度算法)。
要求如下:
(1)设计进程控制块 PCB 表结构,分别适用于优先权调度算法和时间
片轮转调度算法。
PCB 结构包括以下信息:进程名、进程优先数(或轮转时间片),进程
所占用的 CPU 时间,进程的状态,当前队列指针等。根据调度算法的不同,PCB
结构的内容可以作适当的增删。
(2)建立进程就绪队列。对两种不同算法编制入链子程序。
(3)设计的程序中能显示或打印进程控制块的动态变化过程。
3
肇庆学院
计算机科学与技术
麦小筠
五、实验选题
根据实验要求,本人此次选题为“设计一个采用优先数调度算法的模拟
进程调度程序”
六、实验设备
运行环境:Windows XP
开发平台:Visual C++ 6.0
七、实验前知识准备
7.1 进程
进程是进程实体的运行过程,是可并发执行的程序在一个数据集合上的
运行过程。
程序段,数据段,进程控制块构成了一个进程实体。
7.2 进程三种基本状态
○1 等待态:等待某个事件的完成;
○2 就绪态:等待系统分配处理器以便运行;
○3 运行态:占有处理器正在运行。
运行态→等待态 往往是由于等待外设,等待主存等资源分配或等待人工干
预而引起的。
等待态→就绪态 则是等待的条件已满足,只需分配到处理器后就能运行。
运行态→就绪态 不是由于自身原因,而是由外界原因使运行状态的进程让
出处理器,这时候就变成就绪态。例如时间片用完,或有更高优先级的进程来抢
占处理器等。
就绪态→运行态 系统按某种策略选中就绪队列中的一个进程占用处理器,
此时就变成了运行态
4
肇庆学院
计算机科学与技术
麦小筠
新进程
接纳
中断
结束
完成
就 绪
运行
I/O 完成或
事件发生
等 待
I/O 请求或等待谋事
图 7-1 进程基本状态图
7.3 进程调度
无论是在批处理系统还是分时系统中,用户进程数一般都多于处理
机数、这将导致它们互相争夺处理机。另外,系统进程也同样需要使用
处理机。这就要求进程调度程序按一定的策略,动态地把处理机分配给
处于就绪队列中的某一个进程,以使之执行。
7.4 时间片轮转算法
RR (rotate run)算法即时间片轮转调度算法。这种方法是一种剥夺
式的调度算法, 主要用于进程调度。系统将所有就绪进程按先来先服务
的原则排成一个队列,每次调度时把 CPU 分配给队首进程,并让它执行
一个时间片。当执行的时间片用完时,由一个计时器发出时钟中断,调
度程序便据此信号来停止该进程的执行,然后该处理机分配给就绪队列
中新的队首进程,同时也保证它执行一个时间片。这就可保证就绪队列
中的所有进程在一定的时间内均能获得一个时间片的处理机执行时间。
7.5 优先数调度算法
为了照顾到紧迫型作业在进入系统便能获得优先处理,引入了最高
优先权调度算法,它常被用于批处理系统中作为作业调度算法,以及作
为多种操作系统中的进程调度算法,也可以用于实时系统中。当将该算
法用于作业调度时,系统将从后备队列中选择若干个优先权最高的作业
调入系统中,用于进程调度时,是把处理机分配给就绪队列中选择若干
个优先权最高的进程。
该算法有两种类型:
5
肇庆学院
计算机科学与技术
麦小筠
○1 非抢占式优先权算法
在这种方式下,系统一旦把处理机分配给就绪队列中优先权最高
的进程后,该进程便一直执行下去,直到完成;或因某事件使该进
程放弃处理机时,系统将处理机分配给另一优先权高的进程。
○2 抢占式优先权调度算法
系统同样将处理机分配给优先权最高的进程,一旦出现另一个优
先权更高的进程时,进程调度程序就停止原最高优先权进程的执行,
而将处理机分配给新出现的优先权更高的进程。
该算法中,优先权同样有两种类型:
○1 静态优先权
其优先权在创建进程时就确定,且规定它在整个进程的运行期间
保持不变。
○2 动态优先权
在创建进程所赋予的优先权可以随进程的推进而改变,以便更好
地调度性能。
7.6 先来先服务调度算法
按照作业到达系统或进程进入就绪对列的先后次序来选择。对于进
程调度来说,一旦一个进程占有了处理器,它就一直运行下去,直到该进程
完成其工作或者因等待事件而不能继续运行时才释放出处理器。
7.7PCB
进程控制块,是进程实体的一部分,记录了操作系统所需,用于描
述进程情况以及控制进程运行所需要的全部信息。
6
肇庆学院
计算机科学与技术
麦小筠
八、程序主要部分详细分析
8.1 算法的中心思想
根据选题,本次设计主要是设计一个动态优先权调度算法,属于抢占式。
定义结构体 PCB 描述进程的进程控制块,定义数组 PCB pcb[N]存放进程,
首先,规定每次轮转的时间片,进程调度程序调用 choose()函数选择所要进行
的操作;由排列函数 MaoPao()先对进程进行先来先服务算法排列,再按优先
数算法排列;使用调度函数 work()对在列进程进行优先数算法调度,调度优
先级最高进程分配给 CPU 使之运行一个时间片,使排序完最优先运行的进
程存放在 pcb[0]中。
另外
○1 增加进程,调用 Add()函数,将输入的进程存放在数组 pcb[N]中
○2 打印进程,调用 print()函数,在该函数中首先调用 sort()函数对进程按优先级
和先来先服务排序,然后显示输出排序后的进程
进程 调度模 拟程序 void
main()
选择函数
Choose()
进程增加函
数 Add()
排序函数
MaoPao()
进 程 调 度 函
数 Work()
打 印 函 数
print()
图 8-1 程序模块
8.2 进程控制块的创建
typedef struct process
{
char job[10];
int youxian;
Time Reach;
//定义进程名称
//定义优先数
//进程到达时间
7
肇庆学院
计算机科学与技术
麦小筠
Time Need;
Time Used;
char state;
}PCB;
int n;
PCB pcb[N];
int LimitTime;
小
8.3 选择函数 choose()
//进程需要运行时间
//进程已经花费的时间
//定义进程状态
//进程控制块
//标示进程的总数
//每次 CPU 运行的时间片大
在程序开始前定义系统所要进行的操作进程,可以选择添加函数,打
印进程,结束任务,主要代码:
char Choose()
{
char choice;
printf("--------------------------------------------------------------------------------");
printf("\n 添加进程,请按 A|a");
printf("\n 打印进程信息,请按 P|p");
printf("\n 结束任务, 请按 O|o");
printf("\n 请选择:");
do{
choice=getchar();
}
while(choice!='A'&&choice!='P'&&choice!='O'&&choice!='a'&&choice!='p'&&choi
ce!='o');
////使不分大小写,方便用户输入
return choice;
}
8