实验二 带优先级的时间片轮换的进程调度算法的实现

上传人:mg****85 文档编号:53721071 上传时间:2018-09-04 格式:PPT 页数:19 大小:671KB
返回 下载 相关 举报
实验二 带优先级的时间片轮换的进程调度算法的实现_第1页
第1页 / 共19页
实验二 带优先级的时间片轮换的进程调度算法的实现_第2页
第2页 / 共19页
实验二 带优先级的时间片轮换的进程调度算法的实现_第3页
第3页 / 共19页
实验二 带优先级的时间片轮换的进程调度算法的实现_第4页
第4页 / 共19页
实验二 带优先级的时间片轮换的进程调度算法的实现_第5页
第5页 / 共19页
点击查看更多>>
资源描述

《实验二 带优先级的时间片轮换的进程调度算法的实现》由会员分享,可在线阅读,更多相关《实验二 带优先级的时间片轮换的进程调度算法的实现(19页珍藏版)》请在金锄头文库上搜索。

1、带优先级的时间片轮换的进程调度算法的实现,一、实验目的 (1)掌握进程状态转换过程 (2)掌握时间片轮转的进程调度算法; (3)掌握带优先级的进程调度算法,二、实验内容 (1)自定义PCB的数据结构; (2)使用带优先级的时间片轮转法调度进程,每运行一个时间片,优先级减半。 (3)命令集 A)create 随机创建进程,进程的优先级与所需要的时间片随机决定; B)round 执行1次时间片轮转操作,其方法为运行高优先级队列的第1个,再降低其优先级,插入到相应的队列中。 C)ps 查看当前进程状态 D)sleep 命令将进程挂起 E)awake 命令唤醒1个被挂起的进程 F)kill 命令杀死进

2、程 G)quit命令退出 (4)选用面向对象的编程方法。,三、实验原理或算法本实验结合了进程状态转换、优先级调度、时间片轮转调度三方面的内容,根据进程状态转换图,设置SLEEP命令,将1个进程挂起,AWAKE命令唤醒1个被挂起的进程(从阻塞状态到就绪状态)。 1) 优先级优先级体现了进程的重要程度或紧迫程度,在大多数现代操作系统中,都采用了优先级调度策略。优先级从小到大(如 0-127) 优先级最高,127 最低。在本实验中按数值大小决定优先级,数值大的优先级高。 2) 基于时间片调度将所有的就绪进程按照先来先服务的原则,排成一个队列,每次调度时,将 cpu 分配给队首进程,并令其执行一个时间

3、片。当时间片用完时,由一个计时器发出时钟中断请求,调度程序把此进程终止,把该进程放到队尾。在该实验中,时间片以 100ms 为单位(实际的要小得多)。在调度过程中,需要通过时间函数检测进程的执行时间,当该进程执行时间时间片大小时,进行调度。,3) 高优先级调度优先级高的进程优先得到 cpu,等该进程执行完毕后,另外的进程才能执行。 4) 基于时间片的高优先级调度在调度算法中,只有处于就绪状态的进程才能被调度,调度算法结合了优先级调度和时间片轮转调度算法,约定:从最高优先级队列取第1个就绪状态的进程进行调度,时间片到后降低其优先级(降低一半),然后插入到低优先级队列的尾部,每次调度后,显示进程的

4、状态。,四、数据结构及符号说明 struct pcb /PCB int ident;/标识符int state;/状态 0-就绪,1运行,2堵塞int pior;/优先级,MAXPIOR为最高优先级*/int life;/生命期*/struct pcb *next;/*指针*/ void init()/ int create()/ void ps()/ void awake(int x)/ void kill(int x)/ void process()/对输入命令的处理 void routine()/执行一次调度运行,将最高优先级队列的进程运行1个时间片,并降低其优先级,六、实验源程序 #i

5、nclude #include #include #define getpch(type) (type*)malloc(sizeof(type) struct pcb /* 定义进程控制块PCB */ char name10; char state; int super; int needtime; int runtime; struct pcb* link; *ready=NULL,*p; typedef struct pcb PCB; int ident;/标识符int state;/状态 0-就绪,1运行,2堵塞int pior;/优先级,MAXPIOR为最高优先级*/int life;

6、/生命期*/struct pcb *next;/*指针*/, int create() int i=0,pior=0;struct pcb *p,*q,*s;while (idlisti!=0,void sleep(int x) int i=0,test=0;struct pcb *p=NULL,*q=NULL;while(test=0,p=arraypior;/建立同优先级队列(链表)if (p=NULL)arraypior=s;else while(p!=NULL)q=p;p=p-next;q-next=s;printf(“success create process id=%d, cur

7、rent process state disp below:n“,s-ident);ps();/printf(“end displayn“);return 1; void ps() int i=0;struct pcb *p;for (i=0;iident,p-state,p-pior,p-life);p=p-next; ,if (i=MAXPIOR) printf(“Invaild process number.“);elseif (p-state=2)printf(“the process %d has blocked,cannot sleep again!“,p-ident);elsep

8、-state=2;ps(); void awake(int x) int i=0,test=0;struct pcb *p=NULL,*q=NULL;while(test=0 while(p!=NULL)if (p-ident=x) ,test=1;killtest=1;break;else q=p;p=p-next;if (test=0) i+;/*找到X所在指针*/if (i=MAXPIOR) printf(“Invaild process number.“);elseif (p-state=0)printf(“the process %d is ready state,cannot aw

9、ake again!“,p-ident);elsep-state=0;ps(); void kill(int x) int i=0,test=0;struct pcb *p=NULL,*q=NULL;while(test=0 ,if (i!=MAXPIOR else,q-next=p-next;idlistx=0;life=life-(p-life);free(p); void process()/对输入命令的处理 int i=0,ii=0;for (i=0;i=0 /进程处于就绪状态if(r-life-QUANTUM0),r-life=r-life-QUANTUM; /时间减少QUANTUM

10、life=life-QUANTUM;elselife=life-r-life;r-life=0;if (r-life=0)/进程运行完成,KILL它printf(“the process %d is successful run,and release it!n“,r-ident);kill(r-ident); else if (pr=r) /将r结点从原队列中删除arrayi+1=r-next;elsepr-next=r-next;t=r-pior; /将r进程加入到相应低优先级队列中的最后pp=arrayt;qq=NULL;while (pp!=NULL),qq=pp;pp=pp-next

11、;if(qq=NULL) /插入到队尾arrayt=r;elseqq-next=r; r-next=NULL; printf(“after.n“); ps();printf(“n 1 quantum successful run!n“); /* void main() init();printf(“Welcome to the Process Scheduling system. This program simulate the Round-Robin with piror Scheduling alogrithm. n“);printf(“c:“);scanf(“%s“,str);process();while (strcmp(str,“quit“)!=0)printf(“nc:“);scanf(“%s“,str);process();,谢谢观赏,

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 科普知识

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号