时间片轮转算法和优先级调度算法

上传人:工**** 文档编号:511613597 上传时间:2023-03-24 格式:DOCX 页数:25 大小:26.53KB
返回 下载 相关 举报
时间片轮转算法和优先级调度算法_第1页
第1页 / 共25页
时间片轮转算法和优先级调度算法_第2页
第2页 / 共25页
时间片轮转算法和优先级调度算法_第3页
第3页 / 共25页
时间片轮转算法和优先级调度算法_第4页
第4页 / 共25页
时间片轮转算法和优先级调度算法_第5页
第5页 / 共25页
点击查看更多>>
资源描述

《时间片轮转算法和优先级调度算法》由会员分享,可在线阅读,更多相关《时间片轮转算法和优先级调度算法(25页珍藏版)》请在金锄头文库上搜索。

1、时间片轮转算法和优先级调度 算法-C语言模拟实现-收藏时间片轮转算法和优先级调度算法 C 语言模拟实现收藏一、目的和要求 进程调度是处理机管理的核心内容。本实验要求用高级语言编写模拟进程调度 程序 以便加深理解有关进程控制快、进程队列等概念,并体会和了解优先数算法和时间片 轮转算法的具体实施办法。、实验内容设计进程控制块 PCB 的结构,通常应包括如下 信 息:进程名、进程优先数(或轮转时间片数)、进程已占用的 CPU 时间、进程到完 成还需要的时间、进程的状态、当前队列指针等。2.编写两种调度算法程序:优先数调度算法程序循环轮转调度算法程序3.按要求输出结果。二、提示和说明分别用两种调度算法

2、对伍个进程进行调度。每个进程可有三种状态;执行状态(RUN)、就绪状态(READY,包括等待状态)和完成状态(FINISH ),并假定初 始状态为就绪状态。(一)进程控制块结构如下:NAME 进程标示符PRIO/ROUND 进程优先数/进程每次轮转的时间片数(设为常数2)CPUTIME 进程累计占用 CPU 的时间片数NEEDTIME 进程到完成还需要的时间片数STATE进程状态NEXT 链指针注:2.各进程的优先数或轮转时间片数, 以及进程运行时间片数的初值,均由用户 在 程序运行时给定。(二) 进程的就绪态和等待态均为链表结构,共 有四个指针如下:RUN 当前运行进程指针READY 就需队

3、列头指针TAIL 就需队列尾指针FINISH 完成队列头指针(三) 程序说明1. 在优先数算法中,进程优先数的初值设为:50-NEEDTIME每执行一次,优先数减 1,CPU 时间片数加 1,进程还需要的时间片数减 1。 在轮转法 中,采用固定时间片单位(两个时间片为一个单位),进程每轮转一次,CPU时间 片数加2,进程还需要的时间片数减2,并退出CPU,排到就绪队列尾,等待下一次调 度。2. 程序的模块结构提示如下:整个程序可由主程序和如下 7 个过程组成:(1)INSERT1 在优先数算法中,将尚未完成的PCB按优先数顺序插入到就 绪队列中;(2)INSERT2 在轮转法中,将执行了一个时

4、间片单位(为2),但尚未完成 的进程的PCB,插到就绪队列的队尾;(3)FIRSTIN 调度就绪队列的第一个进程投入运行;(4)PRINT 显示每执行一次后所有进程的状态及有关信息。(5)CREATE 创建新进程,并将它的PCB插入就绪队列;(6)PRISCH 按优先数算法调度进程;(7)ROUNDSCH 按时间片轮转法调度进程。主程序定义 PCB 结构和其他有关变量。(四) 运行和显示 程序开始运行后,首先提示:请用户选择算法,输入进程名和相应的 NEEDTI ME 值。每次显示结果均为如下 5 个字段:n ame cputime n eedtime priority state注:1在st

5、ate字段中,R代表执行态,W代表就绪(等待)态,F代表完 成态。2.应先显示,R态的,再显示W态的,再显示F态的。3在W态中,以优先数高低或轮转顺序排队;在F态中,以完成先后顺序 排队。view pla in copy to clipboardpri nt?2. 操作系统实验之时间片轮转算法和优先级 调度算法3. By Visual C+ 6.04. * /#in clude #in clude #i nclude typedef struct node char name20; /* 进程的名字 *int prio; /* 进程的优先级*/int round; /* 分配 CPU 的时间片

6、*/执行时间 *进程执行所需要int cputime; /*CPU/int needtime; /*的时间*/char state; /*进程的状态,W就绪态,R执行态,F完成态*/int count; /*记录执行的次数*/ struct node *next; /*链表指针 */ PCB;PCB *ready=NULL,*r un=NULL,*f in ish=NULL; /* 定义三个队列,就绪队列,执行队列和完成队列*/int num;从就绪队列取得void GetFirst(); /*第一个节点*/void Output(); /* /输出队列信息*void In sertPrio(

7、PCB *in); /* 创建 优先级队列,规定优先数越小,优先级越高 */ void In sertTime(PCB *in); /*时间片队列*/void In sertFi ni sh(PCB *in); /*时间片队列*/void PrioCreate();/*优先级输入函数*/void TimeCreate();/*时间片输入函数*/void Priority(); /*按照优先级调度*/void Rou ndRu n();/*时间片轮转调度*/int main(void)char chose;prin tf(请输入要创建的进程数目:n);sca nf(%d,&n um);getch

8、ar();prin tf( 输入进程的调度方法 n);sea nf(%c,&chose);switch(chose)case P:case p:PrioCreate();Priority。;break;case R:case r:TimeCreate();Rou ndRu n();break;defaultbreak;Output();return 0;void GetFirst() /*取得第一个就绪队列节点*/run = ready;if(ready 匸 NULL)run -state = R:ready = ready -n ex t;run -next = NULL;void Outp

9、ut() /*输出队列信息*/PCB *p;p = ready;printf(”进程名t优先级t轮数tcpu时间t需要 时间t进程状态t计数器n ”);while(p!=NULL)t%dtt%ctt%dn,p- name,p-prio,p-r oun d,p-cputime,p -n eedtime,p-state,p-co un t);p = p-n ext;p = fin ish;while(p!=NULL)t%dtt%ctt%dn,p- name, p-prio,p-r oun d,p-cputime,p -n eedtime,p-state,p-co un t);p = p-n ext

10、;p = run;while(p!=NULL)t%dtt%ctt%dn,p- name, p-prio,p-r oun d,p-cputime,p-n eedtime,p-state,p-co unt);p = p-n ext;void In sertPrio(PCB *in) /*创建优先级队列,规定优先数越小,优先级越低 * / PCB *fst,* nxt;fst = nxt = ready;if(ready = NULL) /*如果队列为空,则为第一个元素*/in-n ext = ready;ready = in;else /*查到合适的位置进行插入*if(in -prio = fst

11、 -prio) /* 比第一个还要大,则插入到队头*/in-n ext = ready; ready = in;elsewhile(fst- n ext != NULL) /* 移动指针查找第一个别它小的元素的位置 进 行插入*/nxt = fst;fst = fst- n ex t; if(fst -n ext = NULL) /* 已 搜索到队尾,则其优先级数最小, 到 经 队尾即可*/in -n ext = fst -next; fst -n ext = in;else /*插入到队列中*/nxt = in;in -n ext = fst;将进void lnsertTime(PCB *i

12、n) /*程插入到就绪队列尾部*/PCB *fs t;fst = ready;if(ready = NULL)in-n ext = ready; ready =in;elsewhile(fst- next != NULL)fst = fst- n ex t;in -n ext = fst -next;fst -n ext = in;void InsertFinish(PCB *in) /* 进程插入到完成队列尾部*/PCB *fst;fst = fini sh;if( fin ish = NULL)in-n ext = fini sh;fin ish = in;elsewhile(fst- n

13、ext != NULL)fst = fst- n ex t;in -n ext = fst -next;fst -n ext = in;void PrioCreate() /* 优先级调度输入函数*/PCB *tmp;int i;pri ntf(“ 输入进程名字和进程所需时间:n);for(i = 0;i n ame);getchar(); /*吸收回车符号*/sea nf(%d,&(tmp- needtime);tmp -cputime = 0;tmp -state =W;tmp -prio = 50 - tmp-n eedtime; /* 设置其优先级,需要的时间越多 优先级越低*/tmp -round = 0;tmp -co unt = 0;In sertPrio(tmp); /* 按照优先 级从高到低,插入到就绪队列*/void TimeCreate() /* 时间片输入函 数*/PCB *tmp;int i;prin tf( 输入进程名字和进程时间片所需时间:n);for(i

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

当前位置:首页 > 学术论文 > 其它学术论文

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