进程调度-时间片轮转算法

 

进程调度

 

一、实验目的

用高级语言编写和调试一个进程调度程序,以加深对进程的概念及继承调度算法的理解。

 

二、实验内容和要求

设计一个有N个进程并发的进程调度程序,采用时间片轮转算法。

Ø         每一个进程用一个进程控制块PCB表示。PCB包含信息有:进程名name,进程号id,进程状态state,进程所需运行时间need_time,进程运行时间run_time

Ø         进程所需的运行时间人为指定。进程运行时间以时间片为单位进行计算。(程序中以按任意键表示运行一次CPU时间片)

Ø         每个进程的状态有就绪W,运行R,和完成F(撤销进程)。

Ø         就绪的进程获得CPU后只能运行一个时间片,运行完运行时间run_time+1

Ø         如果运行一个时间片后,进程的run_time等于need_time(即已经达到所需运行时间),则撤销该进程并提示,如果还未达到,则将其放到队尾,进入就绪状态等待下一次时间片分配。每一次调度程序都打印一次运行情况,包括:运行的进程,就绪队列的进程,已经所有进程的PCB(不包括已经撤销的进程)。

 

三、 实验主要仪器设备和材料

硬件环境:Window XP

软件环境:Microsoft Visual C++ 2010 Express

 

四、  实验原理及方

1、实验原理

本进程调度算法采用时间片轮转算法,具体是:每个进程被分配一个时间片,即该进程允许运行的时间。就绪的进程都存放在一个就绪链表中,队首的进程将获得时间片。如果在时间片结束时进程还在运行,则CPU将剥夺并分配给下一个进程。调度程序所要做的就是维护一张就绪进程列表,当进程用完它的时间片后,它被移到队列的末尾。

 

2、设计方案

程序设计三个主要模块来进行模拟进程的调度。

一是main()函数,用来按步操作模拟CPU分配执行每一个时间片,并循环判断程序是否结束。

二是newPCB()函数,用来接收用户输入的进程信息(进程数目,PCB变量值)来创建一个就绪进程链表。

三是showPCB()函数,用来执行一次调度算法的操作(这里的算法采用时间片轮转调度算法),并刷新显示出来这次操作的结果(覆盖之前的操作结果显示)。

程序执行流程将是通过main函数调用newPCB()创建就绪进程链表,创建模拟CPU分配执行时间片循环,每一次循环调用一次showPCB()执行一次调度算法并显示结果,从而达到模拟CPU进程调度的效果。

 

3、相关数据结构的说明。

     就绪队列中的进程采用链表的数据结构,方便进行进程调度。如图所示:

 

4、程序流程图

5、程序中源程序和可执行程序

    void main(); /*主函数,用来进行调度操作*/

    void newPCB(); /*建立PCB块并将他们组成一个队列*/

    void pushPCB();

  • 5
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值