用c语言实现动态优先权调度,基于动态优先权的进程调度算法的模拟实现

本文介绍了利用C语言模拟实现动态优先权的进程调度算法的方法,并给出相应的核心代码程序。在设计中,充分考虑了进程在执行过程中可能发生的多种情况,更好的体现了进程的就绪态、执行态、阻塞态三者之间的关系以及相互的转换。程序的运行过程清晰的体现了动态优先权的调度算法的执行过程,有利于加深对算法的理解和掌握。

科技信息○本刊重稿○SCIENCE&TECHNOLOGYINFORMATION2008年第25期

基于动态优先权的进程调度算法的模拟实现

马宏琳

(河南工业大学

【摘

阎磊郑州

河南450001)

要】本文介绍了利用C语言模拟实现动态优先权的进程调度算法的方法,并给出相应的核心代码程序。在设计中,充分考虑了进程

在执行过程中可能发生的多种情况,更好的体现了进程的就绪态、执行态、阻塞态三者之间的关系以及相互的转换。程序的运行过程清晰的体现了动态优先权的调度算法的执行过程,有利于加深对算法的理解和掌握。

关键词】动态优先权;进程调度;模拟【

SimulationandImplementationBasedonDynamicPrioritySchedulingAlgorithms

Ma-HongLinYanLei

(HenanUniversityofTechnology

HenanZhengzhou450001)

【Abstract】ThethesisdescribesthemethedofsimulationandimplementationbasedondynamicpriorityschedulingalgorithmsbyC-language,andgivesthekenalprograms.Inthedesign,givingmayoccurinavarietyofconditionsfortheprocessimplementation,whichisbetterreflectedtherelationshipbetweenreadystate,implementationstate,andblockingstate,andtheirmutualconversions.Proceduresfortheoperationoftheprocessclearlyreflectsdynamicpriorityschedulingalgorithms,whichcandeepeningtheunderstandingandgraspofthealgorithm.

【Keywords】dynamicpriorityscheduling;proessscheduling;simulation

在多道程序环境下,进程的数目往往多于处理机数目。这就要求系统能按照某种算法,动态的把处理机分配给就绪队列中的进程,使之执行。因此,处理机调度是操作系统设计的中心问题之一。进程调度问题的核心就是采用什么样的算法把处理机分配给进程。进程调度算法也是在任何操作系统中必须配置的一级调度。好的进程调度算法将有效的提高系统中各种资源利用率,减少处理机的空闲时间,避免部分作业长期得不到处理机响应等情况的发生。

间STARTBLOCK进入阻塞队列尾。

②就绪队列中仍有进程存在,则按优先权原则选择进程执行。否

则CPU处于等待状态。

③根据进程被阻塞的时间BLOCKTIME,考虑阻塞队列中的进程是否移入就绪队列中,或者仍然在阻塞队列中等待下一个时间片。

3.程序设计过程

(1)设计PCB结构体structprocess{intid;intpy;intct;intat;intsb;intbt;intst;};

(2)设计两个数组ready_q、block_q表示就绪队列和阻塞队列。根据各进程的初始条件初始化就绪队列。利用ready_q[0]表示就绪队列中进程总数,block_q[0]表示阻塞队列中进程总数。代码如下:

for(i=1;i<=n;i++)

{P[i].st=1;ready_q[i]=i;}ready_q[0]=n;

(3)设计核心调度过程

利用do-while循环进行进程调度的模拟。用timeslice变量记录各进程执行的时间片。循环的结束条件为:当就绪队列和阻塞队列全为空。循环体内的核心算法如下:

①执行进程的选取。

max_pt变量记录优先级最高进程的优先权,ready_q数组记录就绪队列的顺序,priority变量记录优先级最高进程的ID。从就绪队列中选出优先权最大的进程作为当前时间片的执行进程,并使ready_q数组排序。代码如下:

for(i=1,max_pt=-1;i<=ready_q[0];i++)if(P[ready_q[i]].py>max_pt){max_pt=P[ready_q[i]].py;j=i;

priority=ready_q[i];}

for(i=j;i

ready_q[0]--;

②按算法规定的原则操作各进程。实质是按原则改变数组各值。即:执行进程的优先数减3、ct加1、

/*priority*/

/*cputime*//*alltime*//*startblock*/

/*blocktime*/

/*state:1ready;-1block;0finish*/

1.动态优先权调度算法介绍

动态优先权调度算法,以就绪队列中各个进程的优先权作为进程调度的依据。各个进程的优先权在创建进程时所赋予,随着进程的推进或其等待时间的增加而改变。进程的优先权利用某一范围内的整数来表示。有的系统数值越小优先权越高,如Unix系统,有的系统则反之。采用该算法时,每次总是在就绪队列中选择一个优先权最高的进程进行调度,并将处理机分配给该进程。动态优先权调度算法又分为抢占式和非抢占式两种。本文采用C语言对非抢占式动态优先权调度算法进行了设计和实现。

2.算法的设计思路

(1)在算法的设计中各项原则。

首先规定优先数改变的原则:

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

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

其次,算法的数据结构及操作采用数组方式,将输入的N个进程的PCB信息保存到一个数组中。用PCB数组的插入和删除动态地模拟进程调度过程。

(2)系统初始条件。

系统中设有5个进程,每个进程产生时间,优先级各不相同。利用进程控制块PCB来

描述各个进程。进程控制块PCB包括以下字段:●进程标识数ID;

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

●进程已占用的CPU时间CPUTIME;

●进程还需占用的CPU时间ALLTIME。当进程运行完毕时,ALLTIME变为0;

●进程的阻塞时间STARTBLOCK,

表示当进程再运行

STARTBLOCK个时间片后,进程将进入阻塞状态;

●进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME个时间片后,进程将转换成就绪状态;

阻塞态、完成态;●进程状态STATE,包括三种状态,就绪态、CPU处理进程是从就绪队列中选择当前各进程中优先权最大的

进程开始的。由于采用的是非抢占式调度算法,则当前进程执行完一个时间片之后有以下几种情况:

①当前进程结束则退出系统,否则排到就绪队列尾或根据阻塞时

5

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
(1)用C语言实现对N个进程采用动态优先权优先算法进程调度。 (2)每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段: •••• 进程标识数 ID。 •••• 进程优先数 PRIORITY,并规定优先数越大的进程,其优先权越高。 •••• 进程已占用的CPU时间CPUTIME。 •••• 进程还需占用的CPU时间ALLTIME。当进程运行完毕时,ALLTIME变为0。•••• 进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间片后,将进入阻塞状态。 •••• 进程被阻塞的时间BLOCKTIME,表示已足赛的进程再等待BLOCKTIME个时间片后,将转换成就绪状态。 •••• 进程状态START。 •••• 队列指针NEXT,用来将PCB排成队列。 (3)优先数改变的原则: •••进程在就绪队列中呆一个时间片,优先数加1。 •••进程每运行一个时间片,优先数减3。 (4)假设在调度前,系统中有5个进程,它们的初始状态如下: ID 0 1 2 3 4 PRIORITY 9 38 30 29 0 CPUTIME 0 0 0 0 0 ALLTIME 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 PROG:i READY-QUEUE:->id1->id2 BLOCK-QUEUE:->id3->id4 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = ID 0 1 2 3 4 PRIORITY P0 P1 P2 P3 P4 CUPTIME C0 C1 C2 C3 C4 ALLTIME A0 A1 A2 A3 A4 STARTBLOCK T0 T1 T2 T3 T4 BLOCKTIME B0 B1 B2 B3 B4 STATE S0 S1 S2 S3 S4

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值