赞
踩
(一) 实验目的
进程是操作系统中最基本、最重要的概念,进程调度又是操作系统的核心模块。本实验要求学生独立地用C 或 C++语言编写一个简单的进程管理程序,其主要部分是进程调度。调度算法可由学生自行选择,如基于动态优先级的调度算法或多级反馈队列调度算法。
通过本实验可加深学生对进程各种状态的转化和各种调度算法的理解,提高系统程序设计能力。
(二) 实验题目
以链式结构组成空闲 PCB 栈,以双向链式结构组成进程的就绪队列和睡眠队列,模拟 UNIX 的进程管理程序,实现以下操作(可用键盘命令或由产生的随机数决定操作和参数)。
1.创建一个新进程:如 pid=newp(pri,size,time),申请空闲PCB 和所需内存,填写 PCB
的各项初始数据,将该 PCB 送入就绪队列。
2.调度和执行:自己设计优先调度算法,在就绪队列中选择一个优先级最高的进程,使其运行若干个单位时间。要求在运行期间进程的p_cpu、p_pri 和 p_time 要变化,并在适当的时机重新调度。
3.进程睡眠:进程运行时可调用自编的睡眠函数,主动进入睡眠状态,并转调度程序。也可由操作使进程强迫挂起,睡眠适当时间。进程睡眠时要在PCB 中记录睡眠原因和优先数。
4.进程的唤醒:根据睡眠原因,将相应的进程从睡眠队列中调出,转入就绪队列。如该进程优先级比现运行进程优先级高,转调度程序。
5.进程的终止:如一个进程运行完作业所需的时间,或者用操作杀死该进程,该进程就终止,释放所占用的内存和 PCB 资源,转调度程序。
(三) 主要数据结构
每一个进程用一个进程控制块 PCB 表示,参考的 proc 结构定义如下:
struct proc { |
|
|
char |
p_pid; |
进程标识数 |
char |
p_pstat; |
进程状态 |
caddr_t p_addr; |
进程图象在内存中首址 |
|
int |
p_size; |
进程图象的长度 |
char |
p_pri; |
进程优先数 |
char |
p_cpu; |
进程当前运行的时间 |
int |
p_time; |
作业运行的(剩余)总时间 |
char |
p_wchan; |
进程睡眠原因 |
structproc *p_next, *p_prior; 进程 proc 的双向链指针
}
系统中有一个全局变量 curproc 指向现运行进程,还要定义几个队列的首指针。
(四)实验过程
1. 实验进程调度算法:
(1)动态优先权:当前运行进程用完时间片后,其优先权减去一个常数。
(
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。