操作系统课程设计报告_进程调度算法

上传人:世*** 文档编号:170296521 上传时间:2021-03-01 格式:DOC 页数:16 大小:222KB
返回 下载 相关 举报
操作系统课程设计报告_进程调度算法_第1页
第1页 / 共16页
操作系统课程设计报告_进程调度算法_第2页
第2页 / 共16页
操作系统课程设计报告_进程调度算法_第3页
第3页 / 共16页
操作系统课程设计报告_进程调度算法_第4页
第4页 / 共16页
操作系统课程设计报告_进程调度算法_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《操作系统课程设计报告_进程调度算法》由会员分享,可在线阅读,更多相关《操作系统课程设计报告_进程调度算法(16页珍藏版)》请在金锄头文库上搜索。

1、1实验目的通过优先权法和轮转算法的模拟加深对进程概念和进程调度过程的理解,掌握进程状态之间的切换,同时掌握进程调度算法的实现方法和技巧。2实验内容1用C+语言来实现对n个进程采用优先权优先算法以及轮转算法的进程调度。2每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段:(1)进程标识ID,其中0为闲逛进程,用户进程的标识数为1,2,3。(2)进程优先级Priority,闲逛进程(idle)的优先级为0,用户进程的优先级大于0,且随机产生,标识数越大,优先级越高。(3)进程占用的CPU时间CPUtime,进程每运行一次,累计值等于4。(4)进程总共需要运行时间Alltime,利用随机函

2、数产生。(5)进程状态,0就绪态;1运行态;2阻塞态。(6)队列指针next,用来将多个进程控制块PCB链接为队列。3优先数改变的原则(1)进程在就绪队列中每呆一个时间片,优先数增加1。(2)进程每运行一个时间片,优先数减3。4在调度前,系统中拥有的进程数PCB_number由键盘输入,经初始化后,所有的进程控制块PCB链接成就绪队列。5为了清楚地观察诸进程的调度过程,程序应将每个时间片内的进程的情况显示出来, 3实验步骤n 进程调度的思想(1)当系统空闲(就绪队列为空)时,系统运行闲逛进程,否则运行其他进程,发生变迁1(就绪运行)。(2)在运行进程(包括闲逛进程)的过程中,可能发生变迁2(运

3、行阻塞),即将运行进程插入到阻塞队列(闲逛进程不能被阻塞),可能有其他新的进程创建PCB,还可能唤醒阻塞队列中的某些进程PCB,发生变迁3(阻塞就绪),即从阻塞队列中移出并插入就绪队列中。(3)时间片运行结束后,若进程累计占用CPU时间大于等于进程需要运行的时间,则进程执行结束,释放其PCB。若进程累计占用CPU时间小于进程需要运行时间,发生变迁4(运行就绪),即将当前运行的进程插入就绪队列中。n 程序流程图1 动态优先权的进程调度算法模拟流程创建n个PCB并加入ready_queue中输入开始进程个数n各进程按优先级从高到低排列Yready_queue为空?NRunning=逐个将ready

4、_pc中PCBRunning=idle阻塞running?NYYrunning=idle?N将running从 ready_queue中删除,再将running 加入block_queuebN是否创建新PCB?Y创建新进程并加入到ready_queue中对ready_queue中的进程PCB进行优先级排序随机对block_queue中的进程PCB询问是否要唤醒?Y处理完了吗?NN是否要唤醒?YNY将其从 block_queue队列中删除,再将其加入ready_queue队列中并进行优先级排序2轮转法进程调度算法模拟流程输入开始进程个数n创建n个PCB并加入ready_queue中Yready_

5、queue为空?NRunning=逐个将ready_pc中PCBRunning=idle阻塞running?NYYrunning=idle?N将running从 ready_queue中删除,再将running 加入block_queuebN是否创建新PCB?Y创建新进程并加入到ready_queue中随机对block_queue中的进程PCB询问是否要唤醒?Y处理完了吗?NN是否要唤醒?Y将其从 block_queue队列中删除,再将其加入ready_queue队列中n 程序代码/*以下程序在C+环境调试通过*/#define NULL 0#include #include #include

6、using namespace std;/*以下仅列出动态优先权的进程调度算法模拟*/*进程PCB结构*/struct Pcbint ID;/进程标识ID,其中0为闲逛进程,用户进程的标识数为1,2,3int priority;/进程优先级Priority,闲逛进程(idle)的优先级为0,用户进程的优先级大于0,且随机产生,标识数越大,优先级越高。int CPUtime;/进程占用的CPU时间CPUtime,进程每运行一次,累计值等于4int ALLtime;/进程总共需要运行时间Alltimeint State;/进程状态,0就绪态;1运行态;2阻塞态。struct Pcb *next;/

7、队列指针next,用来将多个进程控制块PCB链接为队列;typedef struct Pcb PCB;void init(); /*产生idle进程,输入用户进程数目,调用insert()*/void print(PCB *pcb); /*输出进程属性信息*/void print_init(PCB *pcb); /*输出所有PCB的初始值*/void insert_queue(PCB *queue,PCB *item); /*动态优先权调试算法将item插入到队列中,使得插入后,队列中按照优先级从高到低有序*/void insert_queue1(PCB *queue,PCB *item);

8、/*轮转法将item插入到队列末尾*/void pushback_queue(PCB *queue,PCB *item); /*将item插入到队列的尾部*/void insert(); /*动态优先权的进程调度算法生成进程属性信息,插入进程就绪队列*/void insert1(); /*轮转法的进程调度算法生成进程属性信息,插入进程就绪队列*/void run(PCB *pcb); /*运行进程,随机阻塞进程、产生新进程,插入就绪队列,唤醒阻塞进程*/void run1(PCB *pcb); /*轮转法试运行参数PCB所指的进程*/void block(PCB *pcb); /*调用dest

9、roy(),将进程插入阻塞队列*/void wakeup(); /*动态优先权的进程调度算法唤醒进程,插入就绪队列*/void wakeup1(); /*轮转法的进程调度算法唤醒进程,插入就绪队列*/void proc_priority(); /*优先权调度算法模拟*/void proc_loop(); /*轮转法调度算法模拟*/void update(PCB *pcb); /*更新进程信息*/PCB *ready_queue,*block_queue,*idleprocess; /*就绪队列,阻塞队列及闲逛进程指针变量*/void main()int i=0;while(1)cout(n P

10、lease select a number (1,2,0) );cout(n 1- priority );cout(n 2- loop);couti;if(i=1)cout(nThis is an example for priority processing:n);init();:proc_priority();else if (i=2)coutnext;cout(n ID priority CPUtime ALLtime Staten);while(temp!=NULL)coutn ID priority CPUtime ALLtime;if (temp-State=0)coutState

11、=1)cout( running);elsecoutnext;/*输出进程属性信息*/void print(PCB *pcb)PCB *temp;temp=pcb;if (pcb-ID=0) cout(ntThe idle process is running!);elsecoutn ID priority CPUtime ALLtime;if (temp-State=0)coutState=1)cout( running);elsecoutnext;while(p!=0 &p-priority=item-priority )q=p;p=p-next;if(p=0)/在队尾插入item-next=0;q-next=item;else

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

当前位置:首页 > 办公文档 > 教学/培训

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