东北大学软件学院 操作系统实验二 实验报告
操作系统实验二
实验报告
姓 名 李旦兰 学 号
20083308
班 级 软件0802 指 导 教 师
那俊
实 验 名 称
处理机调度(按优先权调度)
开 设 学 期 2010 – 2011第一学期
评 定 成 绩
评定人签 字
评 定 日 期
东北大学软件学院
2010年10月19日
1
东北大学软件学院 操作系统实验二 实验报告
一.实验目的
1.加深对处理机调度的作用和工作原理的理解。
2.进一步认识并发执行的实质。
二.实验内容以及要求
设计一个按优先权调度算法实现处理器调度的程序。进程调度是处理机管理
的核心内容。本实验要求用编写和调试一个简单的进程调度程序。通过本实验可
以加深理解有关进程控制块、进程队列的概念,并体会和了解优先数和时间片轮
转调度算法的具体实施办法。
三.实验环境
操作系统:Windows 7
开发语言:VC++
开发工具:Microsoft Visual C++ 2008 Express Edition
四.设计思想
1.实验原理:
(1)假设系统有5个进程,每个进程用一个进程控制块PCB来代表,由用户决
定需要调度的进程数目,每个进程可有三个状态(Ready,Working,Finish),
并假设初始状态为就绪状态。程序中的运行时间的初值均由用户给定。
(2)本程序根据实验要求定义一个队列,然后定义两个对象,一个用来保存就
绪的进程,一个用来保存结束的进程,由于这个调度需要考虑进程的优先级数,
所以可以用一个优先队列来保存就绪进程,每次对队首元素进行操作。再设一个
队首指针指向第一个到达进程的首地址;
(3)执行处理机调度时,开始选择队首的第一个进程运行。另外,再设一个当
前运行进程的指针,指向当前正在运行的进程;
(4)进程运行一次后,运行时间减一,输出当前运行进程的名字,且以后的调
度则将当前指针依次下移一个位置,指向下一个进程,即调整当前运行指针指向
该进程的链接指针所指进程,以指示应运行的进程。同时还应判断该进程的剩余
时间是否为零。若不为零,则等待下一轮的运行,并将时间减一;若该进程的剩
余运行时间为零,则将该进程的状态置为完成状态E,并退出循环队列;
(5)若就绪队列不空,则重复上述的(4)步骤直到所有进程都运行完为止。
(6)在所设计的调度程序中,应包含显示或打印语句。显示或打印每次选中的
进程的名称及运行一次后队列的变化情况。
2.设计思路:
(1) 设计进程控制块PCB表结构,适用于优先权调度算法。
PCB结构通常包括以 下 信息:进 程 名( n ame), 进 程 运行 时 间
(runtime),优先级( priority),状态( state),指针( next)
等。
(2) 建立进程就绪队列。
(3) 编制进程调度算法。
2
东北大学软件学院 操作系统实验二 实验报告
3.实现的难点:
虽然可以直接调用STL中的优先队列,无需自己写优先队列的实现类,大大
简化了编程的工作量,然而如何确定优先队列的优先准则是个难点。由于队列中
的元素是一个自定义类的对象PCB,需对对象中的priority数据成员进行优先排
序,不能直接简单的调用,通过查阅STL中的相关资料发现,要实现这个功能需
自 己 编 写优 先 准 则 函 数 , 我 们 可 以 写 一 个 包 含 排 序准 则 的 仿 函 数 的 类
PCBSortCriterion来实现。
五.实验系统结构
1.实验算法流程图
Y
N
N
Y
2. 所用数据结构:
优先队列,优先的排序准则为各进程的优先级。
优先队列的实现方法:直接调用STL中的标准模版库#include<queue>的
优先队列priority_queue;
3. 符号说明:
寻找优先级最高节点
3
是 否 最 高
优先级
继续寻找节点
优先数减 1
运行时间减 1
运行时间
是否为
0
删除节点
按优先级重新排序