没有合适的资源?快使用搜索试试~ 我知道了~
进程调度算法模拟演示.pdf
1.该资源内容由用户上传,如若侵权请联系客服进行举报
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
版权申诉
0 下载量 149 浏览量
2022-11-12
14:16:42
上传
评论
收藏 493KB PDF 举报
温馨提示
试读
20页
。。。
资源推荐
资源详情
资源评论
进程调度算法模拟演示
一、设计目的
进程管理是操作系统中的重要功能,用来创建进程、撤消进程、
实现进程状态转换,它提供了在可运行的进程之间复用CPU 的方法。
在进程管理中,进程调度是核心,因为在采用多道程序设计的系统中,
往往有若干个进程同时处于就绪状态,当就绪进程个数大于处理器数
目时,就必须依照某种策略决定哪些进程优先占用处理器。
本实验模拟在单处理器情况下的进程调度,目的是加深对进程调
度工作的理解,掌握不同调度算法的优缺点。
二、设计内容
设计一个按先来先服务,算法时间片轮转法,优先数调度算法实
现处理器调度的程序。
三、开发环境
windows 环境,VC6.0 平台。
四、分析设计
1、实验原理
进程是程序在处理机上的执行过程。进程存在的标识是进程控制
块(PCB),所谓系统创建一个进程,就是由系统为某个程序设置一
个 PCB,用于对该进程进行控制和管理。进程任务完成,由系统收回
其 PCB,该进程便消亡。每个进程可有三个状态:运行状态、就绪状
态和完成状态。因此设计三个链队列,finish 为完成队列的头指针,
ready 为就绪队列的头指针,tail 为循环轮转法中的就绪队列的尾指
- 1 -
针。因为每一时刻,CPU 只能运行一个进程,所以运行队列只有一
个 run 指针指向当前运行的进程。考虑到处理的方便,将它们设为全
局变量。
(1)优先调度算法
优先调度算法要为每一个进程设一个优先数,它总是把处理机给
就绪队列中具有最高优先权的进程。常用的算法有静态优先权法和动
态优先权法。本程序采用了动态优先权法,使进程的优先权随时间而
改变。初始的进程优先数取决于进程运行所需的时间,时间大,则优
先数低,所以采取了将进程优先数定位一个较大的数(50)减去进程
运行所需要的时间,随着进程的运行优先数进行调整,每次运行时都
是从就绪队列中选取优先数最大的进程运行,所以将就绪队列按照优
先数的大小从高到低排序,这样,每次取对头进程即可。
(2)时间片轮转算法
时间片轮转算法是将所有进程按先来先服务的规则排成一个队
列,把 CPU 分配给就绪队列的对首进程,并规定它执行一定时间,
称此时间间隔为时间片。当时间片完时,剥夺该进程的执行,将它送
至就绪队列的末尾,并把处理机分配给就绪队列的新队首进程,同样
也让它执行一个时间片。这样,就绪队列中的所有进程均可获得一个
时间片的处理机运行,知道所有进程全部执行完毕。
(3)先来先服务算法
先来先服务调度算法是按照进程进入就绪队列的先后顺序调度
并分配处理机执行。先来先服务算法是一种不可抢占的算法,先进入
- 2 -
就绪队列的进程,先被处理机运行,一旦一个进程占有了处理机,它
就一直运行下去,直到该进程完成工作或者因为等待某种事件而不能
继续运行时才释放处理机。
2、程序结构
(1)进程控制块结构
typedef struct node
{
char name[10]; /*进程标识符*/
int prio; /*进程优先数*/
int round; /*进程时间轮转时间片*/
int cputime; /*进程占用 CPU 时间*/
int needtime; /*进程到完成还要的时间*/
int arrivetime; /*进程到达时间*/
int starttime; /*进程开始时间*/
int finishtime; /*进程完成时间*/
int servicetime; /*进程服务时间*/
float turnaroundtime; /*进程周转时间*/
float weightedturnaroundtime; /*进程带权周转时间*/
int count; /*计数器*/
char state; /*进程的状态*/
struct node *next; /*链指针*/
}PCB;
- 3 -
2.main()主函数
首先确定选用的调度算法,用 switch()选择语句来实现,然后输
入进程数目,根据选用的调度算法调用相应的函数创建进程和执行调
度算法。
3.create1()、create2()和 create3()创建进程函数
创建进程函数的功能既创建进程控制块(PCB),并将此PCB 链
入就绪队列中。
create1()是按照优先数调度算法创建进程,用户输入进程标识符
na 以及进程所需的时间 time,因为是用链表,所以申请空间存放进程
PCB 信息,进程的初始状态设定为“W”(就绪状态),优先数为 50-time
(也可以是其他数),目的是所需时间短的优先数高。将每个进程的
PCB 调用函数 insert1()按照优先数大小从高到低排到就绪队列中。
create2()是按照时间片轮转调度算法创建进程,用户输入进程标
识符 na 以及进程所需的时间time,申请空间存放进程 PCB 的信息,
进程的初始状态设为“W”(就绪状态),时间片数设为2,统计运行
所用的时间片的计数器变量count 初值为 0,调用函数 insret2()将每个
进程 PCB 按照输入的先后顺序插入到就绪队列的末尾。就绪队列创
建好后,将队列中的第一个PCB 变为运行态“R”,将 run 指针指向
它,ready 指针后移,作为就绪队列的新头指针,然后调用算法,注
意每一时刻只能有一个进程处于运行态。
create3()是按照先来先服务调度算法创建进程,用户输入进程的
名字、到达时间 arrivetime以及进程所需的时间 servicetime,申请空
- 4 -
剩余19页未读,继续阅读
资源评论
คิดถึง643
- 粉丝: 3921
- 资源: 1万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功