用c语言实现动态优先权算法,实验3高(动态)优先权优先的进程调度算法模拟.docx...

实验 3 高(动态 )优先权优先的进程调度算法模拟

实验目的

通过动态优先权算法的模拟加深对进程概念和进程调度过程的理解。

实验环境

装有操作系统 Windows XP和开发工具 VC++6.0,内存在256M以上的微机; 或者:装有Linux(Fedora 7)操作系统和gcc编译器,内存在256M以上的微机。

实验内容

用C语言来实现对N个进程采用动态优先权优先算法的进程调度。

每个用来标识进程的进程控制块 PCB用结构来描述,包括以下字段:

进程标识数 ID; 进程优先数PRIORITY并规定优先数越大的进程,其优先权越高;

进程已占用的 CPU时间CPUTIME;

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

进程被阻塞的时间 BLOCKTIME表示已阻塞的进程再等待BLOCKTIME个时间

片后,进程将转换成就绪状态;

进程状态 STATE; (READY,RUNNING, BLOCK, FINISH) 队列指针NEXT,用来将PCB排成队列。

优先数改变的原则:

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

进程每运行一

个时间片,优先数减

,、.

3。

(4) 假设在调度前,系统中有

5 个进程,它们的初始状态如下:

ID

0

1

2

3

4

PRIORITY

9

38

30

29

0

CPUTIME

0

0

0

0

0

NEEDTIME

3

3

6

3

4

STARTBLOCK

2

-1

-1

-1

-1

BLOCKTIME

3

0

0

0

0

STATE

READY

READY

READY

READY

READY

(5) 为了清楚地观察进程的调度过程,程序应将每个时间片内的进程的情况显示出来, 参照的具体格式如下:

RUNNING PROCESS: $id0

READY QUEUE: $id1->$id2

BLOCK QUEUE: $id3->$id4

FINISH QUEUE: $id0->$id1->$id2->$id3->$id4

ID

PRIORITY

CPUTIME

NEEDTIME

STATE

STARTBLOCK

BLOCKTIME

0

XX

XX

XX

XX

XX

XX

1

XX

XX

XX

XX

XX

XX

2

XX

XX

XX

XX

XX

XX

3

XX

XX

XX

XX

XX

XX

4

XX

XX

XX

XX

XX

XX

实验要求

(1) 将源程序 (priority.c) 和程序运行结果写入实验报告。

(2) 将该算法执行过程与高响应比优先调度算法的执行过程进行比较。

#include

#include using namespace std;

int i;// 循环值

int j;// 还在阻塞或就绪队列中的进程数

int s;

int m; // 最大 priority 的 id struct pcb

{

int id;

int p; //priority

int cputime;

int alltime;

int startblock;

int blocktime;

int state; //0 表示 ready 1 表示 end -1 表示 block };

struct pcb pro[5]={

{0,9,0,3,2,3,0},

{1,38,0,3,-1,0,0},

{2,30,0,6,-1,0,0},

{3,29,0,3,-1,0,0},

{4,0,0,4,-1,0,0}

};

int changestate0()

{

if(pro[0].startblock==0) {

pro[0].state=-1; pro[0].startblock--; return 1;

if(pro[0].blocktime==0) pro[0].state=0;

return 1;

} if(pro[0].state==0&&pro[0].startblock!=-1) {

pro[0].startblock--;return 1;}

if(pro[0].state==-1&&pro[0].blocktime!=0) {

pro[0].blocktime--;return 1;

}

}

int state0()

{

changestate0();

s=pro[0].p;

if(pro[0].state==-1)

s=-100;

return s;

}

int maxp()// 求出最大 priority

{

state0();

int max=s;

m=pro[0].id;

for(i=0;i

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值