动态优先权的进程调度算法模拟

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

动态优先权的进程调度算法模拟

华北科技学院计算机系综合性实验

实验报告

课程名称计算机操作系统实验学期 2010 至 2011 学年第 2 学期学生所在系部基础部年级 2008级专业班级信息与计算科学学生姓名范玉文学号200809014212 任课教师杜杏菁实验成绩

计算机系制

华北科技学院计算机系综合性实验报告

《操作系统》课程综合性实验报告

开课实验室:第六实验室 2011年 6 月 15日

进程调度算法程序设计实验题目

一、实验目的

通过对进程调度算法的模拟,进一步理解进程的基本概念,加深对进程运行状态和进程调度过程、调度算法的理解。

二、设备与环境

1. 硬件设备:PC机一台

2. 软件环境:安装Windows操作系统或者Linux操作系统,并安装相关的程序开发环境,如C \C++\Java 等编程语言环境。

三、实验内容

(1)用C语言(或其它语言,如Java)实现对N个进程采用某种进程调度算法(如动态优先权调度)的调度。

(2)每个用来标识进程的进程控制块PCB可用结构来描述,包括以下字段: , 进程标识数ID。

, 进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高。

, 进程已占用CPU时间CPUTIME。

, 进程还需占用的CPU时间ALLTIME。当进程运行完毕时,ALLTIME变为0。 , 进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间片后,进程将进入

阻塞状态。

, 进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME个时间片后,将转

换成就绪状态。

, 进程状态STATE。

, 队列指针NEXT,用来将PCB排成队列。

(3)优先数改变的原则:

, 进程在就绪队列中呆一个时间片,优先数增加1。

, 进程每运行一个时间片,优先数减3。

(4)为了清楚地观察每个进程的调度过程,程序应将每个时间片内的进程的情

况显示出来,包括正在运行的进程,处于就绪队列中的进程和处于阻塞队列中的进程。

(5)分析程序运行的结果,谈一下自己的认识。

第 1 页

华北科技学院计算机系综合性实验报告

四、实验结果及分析

1.实验设计说明

2.实验代码

#include

#define N 5

void init();

void print();

int getRunning();

void sort();

int run(int time);

enum STATE{Ready,Run,Block,RunOut};

struct PROCESS

{

int ID;

int Priority;

int Cputime;

int Alltime;

int Startblock;

int Blocktime;

enum STATE State;

}Process[N];

int READY[N];//存储就绪队列 int BLOCK[N];//存储阻塞队列 int RUNOUT[N][2];//存储运行完的进程和相应的时间片数

int main()

{

int Time=0;

init();

printf("Time:%d\n",Time);

sort();

print();

while(1)

{

Time++;

getchar();//要从键盘上得到一个字符才继续运行,以此实现键盘控制逐步进行

的目的

printf("Time:%d\n",Time);

if(run(Time))

break;

}

return 0;

}

void init()//无问题了

第 2 页

华北科技学院计算机系综合性实验报告 {

int i;

for(i=0;i

{

READY[i]=-1;//是-1,便于后面排序用且后面如果大于0则表示有进程,如果小于0则表示没有了

BLOCK[i]=-1;

RUNOUT[i][0]=-1;//表示第几个进程

RUNOUT[i][1]=-1;//表示第几个时间片完成

Process[i].ID=i;

Process[i].Cputime=0;

Process[i].State=Ready;

Process[i].Startblock=-1;//再运行这么长时间就进入阻塞,如果是0则马上进入

阻塞

Process[i].Blocktime=0;//初始化为0

}

Process[0].Priority=9;Process[0].Alltime=3;

Process[0].Startblock=2;//运行两个时间片就阻塞

Process[0].Blocktime=3;//阻塞3个时间片就就绪

Process[1].Priority=38;Process[1].Alltime=3;//默认无限制

Process[2].Priority=30;Process[2].Alltime=6;

Process[3].Priority=29;Process[3].Alltime=3;

Process[4].Priority=0;Process[4].Alltime=4; }

void print()//用于输出当前状态

{

int i;

if(getRunning()>=0)

printf("\tRUNNING PROG: %d\n",getRunning());

printf("\tREADY_QUEUE:");

for(i=0;i

{

相关文档
最新文档