首页 进程调度算法课程设计

进程调度算法课程设计

举报
开通vip

进程调度算法课程设计PAGE/NUMPAGES信息与计算科学操作系统原理课程设计报告题目:进程调度算法班级:姓名:专业:进程调度算法一、实验目的通过优先权法与轮转调度算法的模拟加深对进程概念和进程调度过程的理解,掌握进程状态之间的切换,同时掌握进程调度算法的实现方法和技巧。二、实验内容1、用C语言或C++语言来实现对N个进程采用优先算法以及轮转算法的进程调度。2、每个用来标示进程的进程控制块PCB用结果来描述,包括以下字段(1)进程标识ID,其中0为闲逛进程,用户进程的标识数为1、2、3、、、、、、、。(2)进程优先级Pr...

进程调度算法课程设计
PAGE/NUMPAGES信息与计算科学操作系统原理课程设计 报告 软件系统测试报告下载sgs报告如何下载关于路面塌陷情况报告535n,sgs报告怎么下载竣工报告下载 题目:进程调度算法班级:姓名:专业:进程调度算法一、实验目的通过优先权法与轮转调度算法的模拟加深对进程概念和进程调度过程的理解,掌握进程状态之间的切换,同时掌握进程调度算法的实现 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 和技巧。二、实验内容1、用C语言或C++语言来实现对N个进程采用优先算法以及轮转算法的进程调度。2、每个用来标示进程的进程控制块PCB用结果来描述,包括以下字段(1)进程标识ID,其中0为闲逛进程,用户进程的标识数为1、2、3、、、、、、、。(2)进程优先级Priority,闲逛进程(idle)的优先级为0,用户有进程的优先级大于0,且随机产生,标识数越大,优先级越高。(3)进程占用的CPU时间CPUtime,进程每运一次,累积等于4.(4)进程总共需要运行时间Alltime,利用随机函数产生。(5)进程状态,0—就绪态,1—运行态,2—阻塞态。(6)队列指针next,用来将多个进程控制块PCB链接为队列。3、优先数改变的原则(1)进程在就绪队列中每呆一个时间片,优先数增加1.(2)进程每运行一个时间片,优先数增加1.4、在调度前,系统中拥有的进程数PCB_number有键盘输入,进初始化后,所有的进程控制块PCB连接成就绪队列。5、为了清楚的观察诸进程的调度过程,程序应将每个时间片内的进程的情况显示出来。三、实验步骤1、进程管理程序调式好后,运行进程管理程序输入开始进程数n创建n个PCB并加入ready-queue中ready-queue是否为空YNRunning<=idRunning<=逐个将redy_pc中的PCB阻塞RunningNYRunning=idleYN将Running从ready_queue中删除,再将running加入block_queueb更新新进程就绪队列进程优先数,优先数加1是否创建新PCBNY创建新进程并加入到ready_queue中随机对block_queue中的进程PCB询问是否要唤醒?处理完了吗YN是否要唤醒NY将其从blick_queuek队列是中删除,再将其加入ready_queuek2、优先权调度(1)输入1选择优先权调度算法模拟。(2)输入开始进程个数n,创建n个PCB并加入就绪队列ready_queue中。(3)就绪队列ready_queue不为空,调度就绪队列中第一个进程运行,否则,从闲逛队列idleprocess中调度闲逛进程运行。(4)在运行过程中,当遇到阻塞,则该进程插入到阻塞队列block_queue中,且将该进程从ready_queue中删除。(5)如果运行时间CPUtime大于等于Alltime,该进程运行完毕,释放该进程;否则插入到就绪队列中。(6)更新就绪队列中的优先级数。(7)随机对阻塞队列block_queue中的进程PCB询问是否要唤醒,唤醒,即从唤醒队列中选择第一个进程,且插入就绪队列中;阻塞队列中没有阻塞进程返回。(8)重复上述步骤,直到本次调度结束。3、轮转调度(1)输入2选择优先权调度算法模拟。(2)输入开始进程个数n,创建n个PCB并加入就绪队列ready_queue中。(3)就绪队列ready_queue不为空,调度就绪队列中第一个进程运行,否则,从闲逛队列idleprocess中调度闲逛进程运行。(4)在运行过程中,当遇到阻塞,则该进程插入到阻塞队列block_queue中,且将该进程从ready_queue中删除。(5)如果运行时间CPUtime大于等于Alltime,该进程运行完毕,释放该进程;否则插入到就绪队列中。(6)随机对阻塞队列block_queue中的进程PCB询问是否要唤醒,唤醒,即从唤醒队列中选择第一个进程,且插入就绪队列中;阻塞队列中没有阻塞进程返回。(7)如果时间到,本次调度结束,否则重复上述步骤,直到本次调度结束。输入开始进程数n创建n个PCB并加入ready-queue中ready-queue是否为空YNRunning<=idRunning<=逐个将redy_pc中的PCB阻塞RunningNYRunning=idleYN将Running从ready_queue中删除,再将running加入block_queueb是否创建新PCBNY创建新进程并加入到ready_queue中随机对block_queue中的进程PCB询问是否要唤醒?处理完了吗YN是否要唤醒NY将其从blick_queuek队列是中删除,再将其加入ready_queuekY四、实验过程中遇到的问题及解决 方案 气瓶 现场处置方案 .pdf气瓶 现场处置方案 .doc见习基地管理方案.doc关于群访事件的化解方案建筑工地扬尘治理专项方案下载 1、请仔细阅读动态优先权的进程调度算法的模拟实现代码,说明该算法与教材中介绍的算法做了哪些简单化处理.优先权模拟时优先权是随机产生,在实际的系统中,系统进程的优先权高于一般用户进程的优先权。2、为什么对进程的优先数可按上述原则进行修改?最高优先权调度算法仅照顾了优先权高的进程,当不断有优先权高的进程需调度时,而优先权低的进程将很难得到处理机的调度,所以进程在就绪队列中每呆一个时间片,优先数增加1,使优先权低的进程不总是忙等。3、请给出设计实现的轮转发进程调度算法的设计思想.时间轮转调度算法:系统将所有的就像进程按先来先服务的原则,排成一个队列,每次调度时,把CPU分配给首进程,并令其执行一个时间片。当执行的时间片用完时,发出中断请求,调度程序便据此信号来停止该进程的执行,并将其送到就绪队列的末尾,如此反复,就可以保证就绪队列中的所有进程在一个给定的时间内,均能获得一时间片处理机执行时间。4、在实际的进程调度中,除了按调度算法选择下一个执行的进程外,还应处理哪些工作?最高优先权调度算法,常用于批处理系统中,作为作业调度算法,也作为多种操作系统中的进程调度算法,还可以用于实时系统中:时间轮转调度算法,一般用于分时系统中。五、课程设计 总结 初级经济法重点总结下载党员个人总结TXt高中句型全总结.doc高中句型全总结.doc理论力学知识点总结pdf 1、当把该算法用于作业调度时,系统将从后备队列中选择若干个优先权最高的作业,装入内存,当用于进程调度算法时,该算法是把处理及分配给就绪队列中优先权最高的进程。2、当系统空闲(就绪队列为空)时,系统运行闲逛进程,否则运行其他进程,发生变迁(就绪运行)3、在运行进程(包括闲逛进程)的过程中,可能发生变迁2(运行阻塞),即将运行进程插入到阻塞队列(闲逛进程不能不被阻塞),可能有其他的进程创建PCB,还可能唤醒阻塞队列中的某些进程PCB,发生变迁3(阻塞就绪),即从阻塞队列中插入就绪队列中。4、时间片运行结束后,若进程累积占用CPU时间大于等于进程需要运行时间,则进程执行结束,释放其PCB。若进程累积占用CPU时间小于进程需要运行时间,发生变迁4(运行就绪),即将当前运行的进程插入就绪队列中。编译器:visualstidio2008professional附:进程调度算法代码//process.cpp:Definestheentrypointfortheconsoleapplication.//#include"stdafx.h"#include"stdio.h"#include"stdlib.h"#include"iostream"#defineNULL0#definefalse0#definetrue1bool_state=0;structPCB{intID;intpriority;intCPUtime;intALLtime;intState;PCB*next;};voidinit();/*产生idle进程,输入用户进程数目,调用insert()*/voidprint(PCB*pcb);/*输出进程属性信息*/voidprint_init(PCB*pcb);/*输出所有PCB的初始值*/voidinsert();/*生成进程属性信息,插入进程就绪队列*/voidRun_priority(PCB*pcb);/*运行进程,随机阻塞进程、产生新进程,插入就绪队列,唤醒阻塞进程*/voidblock(PCB*pcb);/*调用destroy()将进程插入阻塞队列*/voidwakeup();/*唤醒进程,插入就绪队列*/voidproc_priority();/*优先权调度算法模拟*///voidRun_loop(PCB*pcb);voidproc_loop();/*轮转法调度算法模拟*/voidupdate(PCB*pcb);/*更新进程信息*/voidpushback_queue(PCB*queue,PCB*item);/*将item插入到队列的尾部*/voidinsert_queue(PCB*queue,PCB*item);/*将item插入到队列中,使得插入后,队列中按照优先级从高到低有序*/voidsort_queue(PCB*&queue);/*对queue中的结点进行排序,按照优先级从大到小*/PCB*ready_queue,*block_queue,*idleprocess;/*就绪队列,阻塞队列及闲逛进程指针变量*/intmain(intargc,char*argv[]){inti=0;while(1){cout<<"\\**********PROCESS**********/";cout<<("\nPleaseselectanumin(1,2,0)");cout<<("\n1--priority");cout<<("\n2--loop");cout<<("\n0--exit\n");cout<<"Pleaseselectanum:";cin>>i;while(i){if(i==1){cout<<("\nThisisaexampleforpriorityprocessing:\n");init();proc_priority();}elseif(i==2){cout<<("\nThisisaexampleforroundrobinprocessing:\n");init();proc_loop();}else{cout<<"Pleaseselectanumin(1,2,0)\n";}cout<<"Pleaseselectanum:";cin>>i;}return0;}}///////输出所有PCB的初始值voidprint_init(PCB*pcb){PCB*temp=pcb->next;cout<<("\nIDpriorityCPUtimeALLtimeState");while(temp!=NULL){cout<<"\n"<ID<<""<priority<<""<CPUtime<<""<ALLtime;if(temp->State==0)cout<<("ready");elseif(temp->State==1)cout<<("running");elsecout<<("blocked");temp=temp->next;}}///////输出进程属性信息voidprint(PCB*pcb){PCB*temp;temp=pcb;if(pcb->ID==0)cout<<("\nTheidlepeocessidrunning!");else{cout<<"\n"<ID<<""<priority<<""<CPUtime<<""<ALLtime;if(temp->State==0)cout<<("ready");elseif(temp->State==1)cout<<("running");elsecout<<("blocked");}}///////将item插入到队列中,使得插入后,队列中按照优先级从高到低有序voidinsert_queue(PCB*queue,PCB*item){PCB*p,*q;q=queue;p=q->next;while(p!=0&&p->priority>=item->priority){q=p;p=p->next;}if(p==0){item->next=0;q->next=item;}else{item->next=p;q->next=item;}}///////将item插入到阻塞队列的尾部voidpushback_queue(PCB*queue,PCB*item){PCB*p,*q;q=queue,p=q->next;while(p!=0){q=p;p=p->next;}item->next=q->next;q->next=item;}///////对queue中的结点进行排序,按照优先级从大到小voidsort_queue(PCB*&queue){PCB*temp=newPCB;temp->next=0;while(queue->next){PCB*p;p=queue->next;queue->next=p->next;insert_queue(temp,p);}queue->next=temp->next;deletetemp;}///////生成进程属性信息,插入进程就绪队列,显示进程信息voidinsert(){PCB*newp=0;staticlongid=0;newp=newPCB;id++;newp->ID=id;newp->State=0;newp->CPUtime=0;newp->priority=rand()%3+1;newp->ALLtime=rand()%3+1;newp->next=NULL;pushback_queue(ready_queue,newp);//print(newp);//cout<<("建立:Creating->ready\n");}////////生成n个进程属性信息,插入进程就绪队列,显示进程信息voidinsert(intn){for(inti=0;inext=0;ready_queue=newPCB;ready_queue->next=0;inti=0,pcb_number=-1;//闲逛进程放入就绪队列idleprocess=NULL;idleprocess=(PCB*)malloc(sizeof(PCB));idleprocess->ID=0;idleprocess->State=0;idleprocess->CPUtime=0;idleprocess->priority=0;idleprocess->ALLtime=0;idleprocess->next=NULL;idleprocess->next=ready_queue->next;//闲逛进程放入就绪队列ready_queue->next=idleprocess;//也可以假定初始时系统中只有一个idle进程//输入初始进程的个数while(pcb_number<0){cout<<("InputthenumberofPCBtobestart:");cin>>pcb_number;}cout<<("\nIDpriorityCPUtimeALLtimeState\n");for(;iState=2;pcb->CPUtime-=2;if(pcb->CPUtime<=0){pcb->CPUtime+=2;}cout<<"\nTheprocessno"<ID<<"isblocked!";print(pcb);cout<<("变迁2:running->blocked\n");pcb->next=block_queue->next;block_queue->next=pcb;}///////更新进程信息,就绪队列中进程的优先级均增加1voidupdate(PCB*pcb){PCB*temp=pcb->next;while(temp&&temp->next){temp->priority++;temp=temp->next;}}///////唤醒进程,插入就绪队列voidwakeup(){if(block_queue->next==0)/*此时没有阻塞的进程,无所谓的唤醒*/return;PCB*q,*p;while(true){q=block_queue;p=q->next;while(p&&rand()%20!=1){q=p;p=p->next;}if(p!=0){q->next=p->next;break;}}p->State=0;cout<ready"<ID==0){insert_queue(ready_queue,pcb);print(pcb);cout<<"变迁1:ready->running\n";}else{pcb->State=1;pcb->CPUtime+=4;pcb->priority=pcb->priority-3;/*每运行一个时间片,其优先数减3*/if(pcb->priority<1)pcb->priority=1;print(pcb);printf("变迁1:ready->running\n");if(rand()%3==1)/*PCB不是闲逛进程,满足条件侧阻塞此进程*/{if(pcb->CPUtime-2ALLtime)block(pcb);else/*已执行完毕,应该销毁进程*/{cout<<'\n';cout<<"Theprocessno"<ID<<"iscompleted!销毁:running->Destroy"<CPUtime>=pcb->ALLtime)/*释放*/{cout<<'\n';cout<<"Theprocessno"<ID<<"ifcompleted!销毁:running->Destrory"<ID==0){insert_queue(ready_queue,pcb);print(pcb);cout<<"变迁1:ready->running\n";}else{pcb->State=1;pcb->CPUtime=pcb->ALLtime;print(pcb);printf("变迁1:ready->running\n");if(rand()%3==1)/*PCB不是闲逛进程,满足条件侧阻塞此进程*/{_state=1;block(pcb);}else{cout<<'\n';cout<<"Theprocessno"<ID<<"ifcompleted!销毁:running->Destrory"<next;ready_queue->next=running->next;cout<next;ready_queue->next=running->next;cout<0){times=times-running->ALLtime;//每次运行一个进程减去ALLtime;if(times>=0){Run_loop(running);}elseif(_state)//如果运行时被阻塞,则运行2个时间单位{times=times+2;_state=0;cout<<"5487584574389574fgfgfgfgfgfgfg38954378954375894378954375";}elsepushback_queue(block_queue,running);//时间不过,则阻塞该进程,放到阻塞队列}elseif(times<=0){cout<<"\n*本次调度时间片到!";break;}}cout<<"\n*本次调度结束。"<
本文档为【进程调度算法课程设计】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: ¥12.6 已有0 人下载
最新资料
资料动态
专题动态
机构认证用户
夕夕资料
拥有专业强大的教研实力和完善的师资团队,专注为用户提供合同简历、论文写作、PPT设计、计划书、策划案、各类模板等,同时素材和资料部分来自网络,仅供参考.
格式:doc
大小:147KB
软件:Word
页数:0
分类:艺术
上传时间:2021-06-23
浏览量:6