昆明理工大学信息工程与自动化学院学生实验报告
( 2012 —2013 学年 第 二 学期 )
课程名称:操作系统 开课实验室:信自楼445 2011 年 4 月 18 日 年级、专业、班 学号 姓名 实验项目名称 教师评 教师签名: 进程管理 指导教师 舒国锋 成绩 语 年 月 日 一、实验要求:
对一个非抢占式多道批处理系统采用以下算法的任意两种,实现进程调度,并计算进程的开始执行时间,周转时间,带权周转时间,平均周转时间,平均带权周转时间
1.先来先服务算法 2.短进程优先算法 3.高响应比优先算法 二、实验目的
通过编写进程管理的算法,要求学生掌握整个进程管理的各个环节,进程的数据结构描述,进程的各种状态之间的转换,以及进程的调度算法。以加深对进程的概念及进程调度算法的理解,并且提高链表的应用能力,达到提高编程能力的目的。
三、实验原理及基本技术路线图(方框原理图)
用C语言或C++语言开发。需要定义PCB的数据结构,用链表的形式管理进程,采用多级反馈队列调度的算法模拟进程的控制。要求有创建、撤销、调度、阻塞、唤醒进程等功能。
输入开始进程数n 创建n个PCB并加入ready-queue中 ready-queue是否为-1- Y N Running<=id Running<=逐个将redy_pc中的PCB
N 阻塞Running
Y Y Running=idle
N 将Running从ready_queue中删除,再将running加入block_queueb 更新新进程就绪队列进程优先数,优先数加1
N 是否创建新PCB
Y
创建新进程并加入到ready_queue中
随机 对block_queue中的进程PCB询问是否要唤醒? Y 处理完了吗
N N 是否要唤醒
Y 将其从 blick_queuek 队列是中删除,再将其加入 ready_queuek
输入开始进程数n 创建n个PCB并加入ready-queue中 ready-queue是否为 N
Running<=逐个将redy_pc中的PCB
-2- Y Running<=id N 阻塞Running
Y Y Running=idle
N 将Running从ready_queue中删除,再将running加入block_queueb N 是否创建新PCB
Y
创建新进程并加入到ready_queue中
随机 对block_queue中的进程PCB询问是否要唤醒 ? Y 处理完了吗
N N 是否要唤醒
Y 将其从blick_queuek队列是中删除,再将其加入ready_queuek Y
四、所用仪器、材料(设备名称、型号、规格等)。 计算机一台
五、实验方法、步骤 源代码:
#include \#include \#include \#define NULL 0 #define false 0 #define true 1 bool _state=0;
-3-
struct PCB { };
void init();/*产生idle进程,输入用户进程数目,调用insert()*/ void print(PCB *pcb);/*输出进程属性信息*/
void print_init(PCB *pcb);/*输出所有PCB的初始值*/ void insert();/*生成进程属性信息,插入进程就绪队列*/
void Run_priority(PCB *pcb);/*运行进程,随机阻塞进程、产生新进程,插入就绪队列,唤醒阻塞进程*/
void block(PCB *pcb);/*调用destroy()将进程插入阻塞队列*/ void wakeup();/*唤醒进程,插入就绪队列*/ void proc_priority();/*优先权调度算法模拟*/ //void Run_loop(PCB *pcb);
void proc_loop();/*轮转法调度算法模拟*/ void update(PCB *pcb);/*更新进程信息*/
void pushback_queue(PCB *queue,PCB *item);/*将item插入到队列的尾部*/
void insert_queue(PCB *queue,PCB *item);/*将item插入到队列中,使得插入后,队列中按照优先级从高到低有序*/
void sort_queue(PCB *&queue);/*对queue中的结点进行排序,按照优先级从大到小*/ PCB *ready_queue,*block_queue,*idleprocess;/*就绪队列,阻塞队列及闲逛进程指针变量*/ int main(int argc, char* argv[]) {
int ID; int priority; int CPUtime; int ALLtime; int State; PCB* next;
int i=0; while(1) {
cout<<\
-4-
相关推荐: