进程调度实验报告
- 格式:doc
- 大小:485.00 KB
- 文档页数:7
南华大学
计算机科学与技术学院
实 验 报 告
( 2010 ~2011 学年度 第 二 学期 )
课程名称 计算机操作系统
实验名称 模拟UNIX的进程管理程序
姓名 肖喜武 学号 20094350225
专业 软件工程 班级 本09软件02班
地点 8-212 教师 曹 军
日期2011-06-20
一、实验内容
以链式结构组成空闲PCB 栈,以双向链式结构组成进程的就绪队列和睡眠队
列,模拟 UNIX 的进程管理程序。
二、实验目的
进程是操作系统中最基本、最重要的概念,进程调度又是操作系统的核心模块。本实验
要求学生独立地用C或 C++语言编写一个简单的进程管理程序,其主要部分是进程调度。
调度算法可由学生自行选择,如基于动态优先级的调度算法或多级反馈队列调度算法。通过
本实验可加深学生对进程各种状态的转化和各种调度算法的理解,提高系统程序设计能力。
三、实验题目
本实验题目为:模拟UNIX 的进程管理程序。
(1)设计思路
1.创建一个新进程:如pid=newp(pri,size,time),申请空闲PCB 和所需内存,
填写PCB 的各项初始数据,将该PCB 送入就绪队列。
2.调度和执行:设计优先调度算法,在就绪队列中选择一个优先级最高的
进程,使其运行若干个单位时间。在运行期间修改进程的 p_cpu、p_pri 和
p_time,并在适当的时机重新调度。
3.进程睡眠:进程运行时调用自编的睡眠函数,主动进入睡眠状态,并转
调度程序。 也可由操作使进程强迫挂起,睡眠适当时间。进程睡眠时在
PCB 中记录睡眠原因和优先数。
4.进程的唤醒:根据睡眠原因,将相应的进程从睡眠队列中调出,转入就
绪队列。如该进程优先级比现运行进程优先级高,转调度程序。
5. 进程的终止:一个进程运行完作业所需的时间,或者用操作杀死该进程,
该进程就终止,释放所占用的内存和PCB 资源,转调度程序。
(2)非抢占式优先调度算法
模拟UNIX 的进程管理程序采用的是非抢占式优先权算法,具体算法如下:
当系统把处理机分配给就绪队列中优先权最高的进程后,该进程便一直执
行下去,直至完成;或因发生某事件使该进程放弃处理剂时,系统才可将处理
机重新分配给另一优先权最高的进程。
(3)数据结构
每一个进程用一个进程控制块PCB 表示,PCB结构定义如下:
struct PCB
{
char pname; //进程名称
char pstate; //进程状态
char priority; //进程优先级
int runtime; // 进程当前运行的时间
int totaltime; 作业运行的(剩余)总时间
char reason; //进程睡眠原因
struct proc *p_next, *p_prior; //进程PCB的双向链指针
}
PCB* readyPCB,*obstructPCB;//定义就绪和阻塞队列
此外系统中还有一个全局变量curPCB 指向正在运行的进程。
(4)系统总体框图
四、源程序
五、程序运行时初值和运行结果
(1)程序运行时初值
(2)程序运行结果
六、实验总结
通过本次实验加深了对非抢占式优先调度算法的理解,进一步熟悉了进程就
绪、执行、阻塞状态的转换关系,也巩固了C++程序语言设计的基础;实验中的
不足之处是,对阻塞队列的处理存在部分瑕疵。