实验一-进程调度——starof(10页).doc

上传人:1595****071 文档编号:47776589 上传时间:2022-10-03 格式:DOC 页数:10 大小:236.50KB
返回 下载 相关 举报
实验一-进程调度——starof(10页).doc_第1页
第1页 / 共10页
实验一-进程调度——starof(10页).doc_第2页
第2页 / 共10页
点击查看更多>>
资源描述

《实验一-进程调度——starof(10页).doc》由会员分享,可在线阅读,更多相关《实验一-进程调度——starof(10页).doc(10页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、-第 1 页实验一实验一-进程调度进程调度starof-第 2 页实验一实验一进程调度进程调度一一.实验题目实验题目:1、编写并调试一个模拟的进程调度程序,采用“最高优先数优先”调度算法对五个进程进行调度。2、编写并调试一个模拟的进程调度程序,采用“轮转法”调度算法对五个进程进行调度。二二:实验目的实验目的用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解三三.实验内容实验内容:最高优先级优先调度算法最高优先级优先调度算法1)优先级简介动态优先数动态优先数是指在进程创建时先确定一个初始优先数,以后在进程运行中随着进程特性的改变不断修改优先数,这样,由于开始优先数很低而

2、得不到 CPU 的进程,就能因为等待时间的增长而优先数变为最高而得到 CPU 运行。例如:在进程获得一次 CPU 后就将其优先数减少 1。或者,进程等待的时间超过某一时限时增加其优先数的值,等等。2)详细设计优先权调度算法优先权调度算法:1、设定系统中有五个进程,每一个进程用一个进程控制块(PCB)表示,进程队列采用链表数据结构。2、进程控制块包含如下信息:进程名、优先数、需要运行时间、已用 CPU 时间、进程状态等等。3、在每次运行设计的处理调度程序之前,由终端输入五个进程的“优先数”和“要求运行时间”。4、进程的优先数及需要的运行时间人为地指定.进程的运行时间以时间片为单位进行计算。5、采

3、用优先权调度算法,将五个进程按给定的优先数从大到小连成就绪队列。用头指针指出队列首进程,队列采用链表结构。6、处理机调度总是选队列首进程运行。采用动态优先数办法,进程每运行一次优先数减“1”,同时将已运行时间加“1”。7、进程运行一次后,若要求运行时间不等于已运行时间,则再将它加入就绪队列;否则将其状态置为“结束”,且退出就绪队列。8、“就绪”状态的进程队列不为空,则重复上面 6,7 步骤,直到所有进程都成为“结束”状态。9、在设计的程序中有输入语句,输入 5 个进程的“优先数”和“要求运行时间”,也有显示或打印语句,能显示或打印每次被选中进程的进程名、运行一次后队列的变化,以及结束进程的进程

4、名。10、最后,为五个进程任意确定一组“优先数”和“要求运行时间”,运行并调试所设计的程序,显示或打印出逐次被选中进程的进程名及其进程控制块的动态变化过程。-第 3 页3)3)流程图流程图:图一.最高优先级优先调度算法流程图4)4)源程序源程序:#include#include stdio.hstdio.h#include#include#include#include#define#define getpch(type)getpch(type)(type*)malloc(sizeof(type)(type*)malloc(sizeof(type)#define#define NULLNULL

5、 0 0structstruct pcbpcb/*/*定义进程控制块定义进程控制块 PCBPCB*/*/charchar name10;name10;/进程名进程名charchar state;state;/进程状态进程状态intint super;super;/进程优先级进程优先级intint ntime;ntime;/进程需要运行时间进程需要运行时间intint rtime;rtime;/进程已经运行的时间进程已经运行的时间-第 4 页structstruct pcb*pcb*link;link;*ready=NULL,*p;*ready=NULL,*p;typedeftypedef st

6、ructstruct pcbpcb PCB;PCB;voidvoid sort()sort()/*/*建立对进程进行优先级排列函数建立对进程进行优先级排列函数*/*/PCBPCB*first,*first,*second;*second;intint insert=0;insert=0;if(ready=NULL)|(p-super)(ready-super)if(ready=NULL)|(p-super)(ready-super)/*/*优先级最大者优先级最大者,插入队首插入队首*/*/p-link=ready;p-link=ready;ready=p;ready=p;elseelse/*/

7、*进程比较优先级进程比较优先级,插入适当的位置中插入适当的位置中*/*/first=ready;first=ready;second=first-link;second=first-link;while(second!=NULL)while(second!=NULL)if(p-super)(second-super)if(p-super)(second-super)/*/*若插入进程比当前进程优先数大若插入进程比当前进程优先数大,*/,*/*/*插入到当前进程前面插入到当前进程前面*/*/p-link=second;p-link=second;first-link=p;first-link=p

8、;second=NULL;second=NULL;insert=1;insert=1;elseelse/*/*插入进程优先数最低插入进程优先数最低,则插入到队尾则插入到队尾*/*/first=first-link;first=first-link;second=second-link;second=second-link;if(insert=0)if(insert=0)first-link=p;first-link=p;voidvoid input()input()/*/*建立进程控制块函数建立进程控制块函数*/*/intint i;i;system(cls);system(cls);/*/*

9、清屏清屏*/*/printf(nprintf(n 请输入五个进程信息请输入五个进程信息:n);:n);for(i=0;for(i=0;i5;iname);scanf(%s,p-name);printf(nprintf(n 输入进程优先数输入进程优先数:);:);scanf(%d,&p-super);scanf(%d,&p-super);printf(nprintf(n 输入进程运行时间输入进程运行时间:);:);scanf(%d,&p-ntime);scanf(%d,&p-ntime);printf(n);printf(n);p-rtime=0;p-rtime=0;p-state=w;p-st

10、ate=w;p-link=NULL;p-link=NULL;sort();sort();/*/*调用调用 sortsort 函数函数*/*/intint space()space()/计算进程控制块的个数计算进程控制块的个数intint l=0;l=0;PCB*PCB*pr=ready;pr=ready;-第 5 页while(pr!=NULL)while(pr!=NULL)l+;l+;pr=pr-link;pr=pr-link;return(l);return(l);voidvoid disp(PCBdisp(PCB*pr)pr)/*/*建立进程显示函数建立进程显示函数,用于显示当前进程用于

11、显示当前进程*/*/printf(nprintf(n qnameqname tt statestate tt supersuper tt ndtimendtime tt runtimeruntime n);n);printf(|%st,pr-name);printf(|%st,pr-name);printf(|%ct,pr-state);printf(|%ct,pr-state);printf(|%dt,pr-super);printf(|%dt,pr-super);printf(|%dt,pr-ntime);printf(|%dt,pr-ntime);printf(|%dt,pr-rtime

12、);printf(|%dt,pr-rtime);printf(n);printf(n);voidvoid check()check()/*/*建立进程查看函数建立进程查看函数*/*/PCB*PCB*pr;pr;printf(nprintf(n*当前正在运行的进程是当前正在运行的进程是:%s,p-name);:%s,p-name);/*/*显示当前运行进程显示当前运行进程*/*/disp(p);disp(p);pr=ready;pr=ready;printf(nprintf(n*当前就绪队列状态为当前就绪队列状态为:n);:n);/*/*显示就绪队列状态显示就绪队列状态*/*/while(pr!

13、=NULL)while(pr!=NULL)disp(pr);disp(pr);pr=pr-link;pr=pr-link;voidvoid destroy()destroy()/*/*建立进程撤消函数建立进程撤消函数(进程运行结束进程运行结束,撤消进程撤消进程)*/)*/printf(nprintf(n 进程进程%s%s 已完成已完成.n,p-name);.n,p-name);free(p);free(p);voidvoid running()running()/*/*建立进程就绪函数建立进程就绪函数(进程运行时间到进程运行时间到,置就绪状态置就绪状态*/*/(p-rtime)+;(p-rti

14、me)+;if(p-rtime=p-ntime)if(p-rtime=p-ntime)destroy();destroy();/*/*调用调用 destroydestroy 函数函数*/*/elseelse(p-super)-;(p-super)-;p-state=w;p-state=w;sort();sort();/*/*调用调用 sortsort 函数函数*/*/voidvoid youxian()youxian()/高优先级优先算法的程序入口高优先级优先算法的程序入口intint len,h=0;len,h=0;charchar ch;ch;system(cls);system(cls)

15、;input();input();len=space();len=space();while(len!=0)&(ready!=NULL)while(len!=0)&(ready!=NULL)ch=getchar();ch=getchar();h+;h+;printf(nprintf(n TheThe executeexecute number:%dnumber:%d n,h);n,h);p=ready;p=ready;ready=p-link;ready=p-link;-第 6 页p-link=NULL;p-link=NULL;p-state=R;p-state=R;check();check

16、();running();running();printf(nprintf(n 按任一键继续按任一键继续.);.);printf(nnprintf(nn 进程已经完成进程已经完成.n);.n);ch=getchar();ch=getchar();voidvoid sort2()sort2()PCBPCB*q;*q;q=ready;q=ready;if(ready=NULL)if(ready=NULL)ready=p;ready=p;elseelsewhile(q-link!=NULL)while(q-link!=NULL)q=q-link;q=q-link;q-link=p;q-link=p;

17、voidvoid running2()running2()/*/*建立进程就绪函数建立进程就绪函数(进程运行时间到进程运行时间到,置就绪状态置就绪状态*/*/(p-rtime)+;(p-rtime)+;if(p-rtime=p-ntime)if(p-rtime=p-ntime)destroy();destroy();/*/*调用调用 destroydestroy 函数函数*/*/elseelsep-state=w;p-state=w;sort2();sort2();/*/*调用调用 sortsort 函数函数*/*/voidvoid lunzhuan()lunzhuan()/轮转法演示进程的程

18、序入口轮转法演示进程的程序入口intint len,h=0;len,h=0;charchar ch;ch;system(cls);system(cls);input2();input2();len=space();len=space();while(len!=0)&(ready!=NULL)while(len!=0)&(ready!=NULL)ch=getchar();ch=getchar();h+;h+;printf(nprintf(n TheThe executeexecute number:%dnumber:%d n,h);n,h);p=ready;p=ready;ready=p-lin

19、k;ready=p-link;p-link=NULL;p-link=NULL;p-state=R;p-state=R;check();check();running2();running2();printf(nprintf(n 按任一键继续按任一键继续.);.);printf(nnprintf(nn 进程已经完成进程已经完成.n);.n);ch=getchar();ch=getchar();voidvoid menu()menu()/菜单菜单intint m;m;system(cls);system(cls);-第 7 页printf(nntt*ttn);printf(nntt*ttn);pr

20、intf(ttttprintf(tttt 进程调度演示进程调度演示n);n);printf(tt*ttn);printf(tt*ttn);printf(nnnttt1.printf(nnnttt1.演示最高优先数优先算法演示最高优先数优先算法.);.);printf(nttt2.printf(nttt2.演示轮转法算法演示轮转法算法.);.);printf(nttt0.printf(nttt0.退出程序退出程序.);.);printf(nnttttprintf(nntttt 选择进程调度方法选择进程调度方法:);:);scanf(%d,&m);scanf(%d,&m);switch(m)swi

21、tch(m)casecase 1:1:youxian();youxian();/高优先级优先算法的程序入口高优先级优先算法的程序入口system(cls);system(cls);menu();menu();break;break;/case/case 2:2:/lunzhuan();lunzhuan();/轮转法演示进程的程序入口轮转法演示进程的程序入口/system(cls);/system(cls);/menu();menu();/break;break;casecase 0:0:system(cls);system(cls);break;break;default:default:sy

22、stem(cls);system(cls);menu();menu();intint main()main()/*/*主函数主函数*/*/menu();menu();returnreturn 0;0;五五)调试结果调试结果(用(用 C C 语言编写,语言编写,在在 ColdBlocksColdBlocks 下编译运行的)下编译运行的)1.1.一运行程序,则显示一如下界面:2 2.选择 1.进入最高优先数优先算法的演示,此时输入5个进程的名,优先级以及运行时间4.4.此后,每按一次回车键,相当于队列首进程运行了一个cpu的时间,运行完毕后,如果要求运行时间不等于已运行时间,则再将它加入就绪队列;

23、否则将其状态置为“结束”,且退出就绪队列。第一次运行程序时的正在运行的进程以及等待队列中的进程的各信息如下:5.5.继续按回车键,则显示第二次时的运行情况:6 6.一直按回车键,直到进程运行完毕.简单轮转法调度算法简单轮转法调度算法1)1)简单轮转法的基本思想:简单轮转法的基本思想:所有就绪进程按 FCFS 排成一个队列,总是把处理机分配给队首的进程,各进程占-第 8 页用 CPU 的时间片相同。即将 CPU 的处理时间划分成一个个相同的时间片,就绪队列的诸进程轮流运行一个时间片。当一个时间片结束时,如果运行进程用完它的时间片后还未完成,就强迫运行机制进程让出 CPU,就把它送回到就绪队列的末

24、尾,等待下一次调度。同时,进程调度又去选择就绪队列中的队首进程,分配给它一时间片,以投入运行。直至所有的进程运行完毕。2)2)详细设计详细设计:1、设系统有 5 个进程,每个进程用一个进程控制块 PCB 来代表。2、为每个进程任意确定一个要求运行时间。3、按照进程输入的先后顺序排成一个队列。再设一个队首指针指向第一个到达进程的首址。4、执行处理机调度时,开始选择队首的第一个进程运行。另外,再设一个当前运行进程的指针,指向当前正在运行的进程。5.考虑到代码的可重用性,轮转法调度程序和最高优先级优先调度是调用同一个模快进行输出注:由于轮转法调度程序和最高优先级优先调度是调用同一个模快进行输出,所以

25、在时间轮转法调度算法的进程中,依然显示了随即产生的优先级数.6.进程运行一次后,以后的调度则将当前指针依此下移一个位置,指向下一个进程,即调整当前运行指针指向该进程的链接指针所指进程,以指示应运行进程。同时还应判断该进程的要求运行时间是否等于已运行时间。若不等,则等待下一轮的运行,否则将该进程的状态置为完成态 C,并退出循环队列。7.若就绪队列不空,则重复上述的(5)和(6)步骤直到所有的进程都运行完为止。8.在所设计的调度程序中,包含显示或打印语句。显示或打印每次选中的进程的名称及运行一次后队列的变化情况。3)3)流程图流程图图二.简单轮转法调度算法流程图4)4)主要程序主要程序轮转法轮转法

26、调度算法与最高优先数优先算法代码大多数都是共享的.很大不同的只有他们每次运行一个 cpu 时间后,运行后的进程怎样插入到队列中的的 sort()算法,还有就是运行算法running();下面我只列出几个算法的代码voidvoid sort2()sort2()PCBPCB*q;*q;q=ready;q=ready;if(ready=NULL)if(ready=NULL)ready=p;ready=p;elseelsewhile(q-link!=NULL)while(q-link!=NULL)q=q-link;q=q-link;q-link=p;q-link=p;voidvoid running2

27、()running2()/*/*建立进程就绪函数建立进程就绪函数(进程运行时间到进程运行时间到,置就绪状态置就绪状态*/*/(p-rtime)+;(p-rtime)+;if(p-rtime=p-ntime)if(p-rtime=p-ntime)destroy();destroy();/*/*调用调用 destroydestroy 函数函数*/*/-第 9 页elseelsep-state=w;p-state=w;sort2();sort2();/*/*调用调用 sortsort 函数函数*/*/voidvoid lunzhuan()lunzhuan()/轮转法演示进程的程序入口轮转法演示进程的

28、程序入口intint len,h=0;len,h=0;charchar ch;ch;system(cls);system(cls);input();input();len=space();len=space();while(len!=0)&(ready!=NULL)while(len!=0)&(ready!=NULL)ch=getchar();ch=getchar();h+;h+;printf(nprintf(n TheThe executeexecute number:%dnumber:%d n,h);n,h);p=ready;p=ready;ready=p-link;ready=p-lin

29、k;p-link=NULL;p-link=NULL;p-state=R;p-state=R;check();check();running2();running2();printf(nprintf(n 按任一键继续按任一键继续.);.);printf(nnprintf(nn 进程已经完成进程已经完成.n);.n);ch=getchar();ch=getchar();voidvoid menu()menu()/菜单菜单intint m;m;system(cls);system(cls);printf(nntt*ttn);printf(nntt*ttn);printf(ttttprintf(ttt

30、t 进程调度演示进程调度演示n);n);printf(tt*ttn);printf(tt*ttn);printf(nnnttt1.printf(nnnttt1.演示最高优先数优先算法演示最高优先数优先算法.);.);printf(nttt2.printf(nttt2.演示轮转法算法演示轮转法算法.);.);printf(nttt0.printf(nttt0.退出程序退出程序.);.);printf(nnttttprintf(nntttt 选择进程调度方法选择进程调度方法:);:);scanf(%d,&m);scanf(%d,&m);switch(m)switch(m)casecase 1:1:

31、youxian();youxian();/高优先级优先算法的程序入口高优先级优先算法的程序入口system(cls);system(cls);menu();menu();break;break;casecase 2:2:lunzhuan();lunzhuan();/轮转法演示进程的程序入口轮转法演示进程的程序入口system(cls);system(cls);menu();menu();break;break;-第 10 页casecase 0:0:system(cls);system(cls);break;break;default:default:system(cls);system(cls);menu();menu();5)5)调试结果调试结果:1.1.输入五个进程的初始状态如下:2.2.此后,每按一次回车键,相当于队列首进程运行了一个 cpu 的时间,运行完毕后,如果要求运行时间不等于已运行时间,则再将它加入就绪队列;否则将其状态置为“结束”,且退出就绪队列。第一次运行程序时的正在运行的进程以及等待队列中的进程的各信息如下:3.3.继续按回车键,则显示第二次时的运行情况:4 4.一直按回车键,直到进程运行完毕.四四.总结及心得体会总结及心得体会

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

当前位置:首页 > 应用文书 > 合同协议

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁