进程调度实验报告[1]

上传人:daj****de2 文档编号:132159250 上传时间:2022-08-08 格式:DOCX 页数:13 大小:121.40KB
收藏 版权申诉 举报 下载
进程调度实验报告[1]_第1页
第1页 / 共13页
进程调度实验报告[1]_第2页
第2页 / 共13页
进程调度实验报告[1]_第3页
第3页 / 共13页
资源描述:

《进程调度实验报告[1]》由会员分享,可在线阅读,更多相关《进程调度实验报告[1](13页珍藏版)》请在装配图网上搜索。

1、实验一 进程调度一.实验题目:(1)、编写并调试一个模拟的进程调度程序,采用“最高优先数优先”调度算法对五个进程 进行调度。2)、编写并调试一个模拟的进程调度程序,采用“轮转法”调度算法对五个进程进行调度。 二:实验目的用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解三.实验内容:一最高优先级优先调度算法1)优先级简介动态优先数是指在进程创建时先确定一个初始优先数, 以后在进程运行中随着进程特 性的改变不断修改优先数,这样,由于开始优先数很低而得不到CPU的进程,就能因为等 待时间的增长而优先数变为最高而得到CPU运行。例如:在进程获得一次CPU后就将其优先数减少1

2、。或者,进程等待的时间超过某一时 限时增加其优先数的值,等等。2)详细设计优先权调度算法:1、设定系统中有五个进程,每一个进程用一个进程控制块(PCB)表示,进程队列采 用链表数据结构。2、进程控制块包含如下信息:进程名、优先数、需要运行时间、已用CPU时间、进 程状态等等。3、在每次运行设计的处理调度程序之前,由终端输入五个进程的“优先数”和“要 求运行时间”。4、进程的优先数及需要的运行时间人为地指定 .进程的运行时间以时间片为单位进 行计算。5、采用优先权调度算法,将五个进程按给定的优先数从大到小连成就绪队列。用头 指针指出队列首进程,队列采用链表结构。6、处理机调度总是选队列首进程运行

3、。采用动态优先数办法,进程每运行一次优先 数减“1”,同时将已运行时间加“1”。7、进程运行一次后,若要求运行时间不等于已运行时间,则再将它加入就绪队列; 否则将其状态置为“结束”,且退出就绪队列。8、“就绪”状态的进程队列不为空,则重复上面 6, 7 步骤,直到所有进程都成为“结 束”状态。9、在设计的程序中有输入语句,输入5 个进程的“优先数”和“要求运行时间”,也 有显示或打印语句,能显示或打印每次被选中进程的进程名、运行一次后队列的 变化,以及结束进程的进程名。10、最后,为五个进程任意确定一组“优先数”和“要求运行时间,”运行并调试所设计 的程序,显示或打印出逐次被选中进程的进程名及

4、其进程控制块的动态变化过程。3)流程图:运行旌程已占弟 CPU时趣已达到所 需舶运行时勿初焙化Pt氐辅人逬锂信息磐肚见曹逆程投人运行未到达已到达时间运任进程已占胃CPU时闾*牌返行i旺程的优先載議1 把运行进程插入就细臥列薈进程擄忧先数钛禹對底擔列避程完威struct pcb /*char name10; char state; int super;int ntime;图一.最高优先级优先调度算法流程图4) 源程序:#include stdio.h#include #include #define getpch(type) (type*)malloc(sizeof(type)#define N

5、ULL 0 定义进程控制块 PCB */进程名 /进程状态 /进程优先级/进程需要运行时间int rtime;/进程已经运行的时间struct pcb* link;*ready=NULL,*p;typedef struct pcb PCB;void inunizationO/初始化界面 printf(nntt*ttn); printf (实验一进程调度n);printf(tt*ttn);printf(nnnttttt 计算机学院软件四班n);printf (ttttt 蓝小花n);printf(ttttt3204007102n);printf (ttttt 完成时间:2006 年 11 月 1

6、0 日 nnnn);prin tf(请输入任意键进入演示过程n);getch();void sort() /*建立对进程进行优先级排列函数*/PCB *first, *second;int insert=0;if(ready=NULL)|(p-super)(ready-super) /*优先级最大者,插入队首*/ p-link=ready;ready=p;else /* 进程比较优先级,插入适当的位置中*/first=ready;second=first-link; while(second!=NULL)if(p-super)(second-super) /*若插入进程比当前进程优先数大,*/

7、 /*插入到当前进程前面*/ p-link=second;first-link=p; second=NULL;insert=1;else /* 插入进程优先数最低,则插入到队尾*/first=first-link; second=second-link;if(insert=0) first-link=p;void input() /*建立进程控制块函数*/int i;system(cls); /*清屏*/printf(n请输入五个进程信息:n);for(i=0;iname);printf(n 输入进程优先数:);scanf(%d,&p-super);printf(n 输入进程运行时间:);sc

8、anf(%d,&p-ntime);printf(n);p-rtime=0;p-state=w;p-link=NULL;sort(); /* 调用 sort 函数*/int spaceO/计算进程控制块的个数int l=0; PCB* pr=ready;while(pr!=NULL)l+;pr=pr-link;return(l);void disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/printf(n qname t state t super t ndtime t runtime n); printf(|%st,pr-name);printf(|%ct,pr-stat

9、e);printf(|%dt,pr-super);printf(|%dt,pr-ntime);printf(|%dt,pr-rtime);printf(n);void check() /*建立进程查看函数*/PCB* pr;printf (n *当前正在运行的进程是:s,p-name); /*显示当前运行进程*/ disp(p);pr=ready;prin tf(n *当前就绪队列状态为:n); /*显示就绪队列状态*/while(pr!=NULL)disp(pr);pr=pr-link;void des troy() /*建立进程撤消函数(进程运行结束,撤消进程)*/printf(n 进程%

10、s已完成.n,p-name);free(p);void running。/*建立进程就绪函数(进程运行时间到,置就绪状态*/(p-rtime)+;if(p-rtime=p-ntime)destroy(); /* 调用 destroy 函数*/else (p-super)-;p-state=w;sort(); /*调用 sort 函数*/void youxian() /高优先级优先算法的程序入口int len,h=0;char ch;system(cls);input();len=space();while(len!=0)&(ready!=NULL)ch=getchar();h+;printf(

11、n The execute number:%d n,h);p=ready;ready=p-link;p-link=NULL;p-state=R;check();running();printf(n 按任一键继续);printf(nn进程已经完成.n);ch=getchar();void menu()/菜单int m;system(cls);printf(nntt*ttn); printf (tttt 进程调度演示n);printf(tt*ttn);printf(nnntttl.演示最高优先数优先算法.);printf(nttt2. 演示轮转法算法.);printf(nttt0. 退出程序.);

12、printf(nntttt选择进程调度方法:);scanf(%d,&m);switch(m)case 1:youxian();/高优先级优先算法的程序入口system(cls);menu();break;case 2:lunzhuan();/轮转法演示进程的程序入口system(cls);menu();break;case 0:system(cls);break;default:system(cls);menu();main() /* 主函数*/inunization();menu();五)调试结果1. 一运行程序, 则显示一个友好的界面,上面有实验者的实验题目, 班级 ,姓名,学号 , 及完

13、 成实验的日期,界面如下:2.按任意键进入程序,里面有几个可以选择的操作:-E:1M程课件I计算机操作系统喋作系统实验1谜程谓度jin.exe-进程调度演示1.演示最高优忑数优先算法.选择进程调度方法:3. 选择 1.进入最高优先数优先算法的演示,此时输入 5 个进程的名,优先级以及运行时间课程课件计算机操作系请输入五个进程信息:进程号No.0:输入进程名5输入进程优先数泊输入进程运行时间汐进程号No.l:输入进程名汁输入进程优先数汁输入进程运行时间=1进程号如-2:输入进程名址输入进程优先数:4输入进程运行时间=3进程号No.3:输入进程名为输入进程优先数汴输入进程运行时间=3进程号No.

14、4:输入进程名汚输入进程优先数汐输入进程运行时间=14此后,每按一次回车键,相当于队列首进程运行了一个cpu的时间,运行完毕后, 如果要求运行时间不等于已运行时间,则再将它加入就绪队列;否则 将其状态置为“结束”,且退出就绪队列。第一次运行程序时的正在运行的进程以及等待队列中的进程的各信息如下:The execute number:1qname !cstate iRsuper !4当前就绪队列状态为qname !astate!usuper !3qname !bstate!usuper !3qname idstate!usuper !3qname !5state!usuper !2ndtimei

15、3i0runtimendtime12i0runtimendtimei0runtimendtimei3i0runtimendtimeruntime:1 :0*当前正在运行的进程是3按任一犍继续5.继续按回车键,则显示第二次时的运行情况:The execute number:2X NX N qname!a当前正在运行的进程是zstate!Rsuper :3ndtime!2!0runtimei当前就绪队列状态为:qnamestatesuperndtimeruntime!b!u!3!1!0qnamestatesuperndtimeruntimeid!u!3!3!0qnamestatesuperndti

16、meruntime!c!u!3!3!1qnamestatesuperndtimeruntime!5!u!2!1!0按任一键继续6. 重复 5 操作,直到进程运行完毕.二简单轮转法调度算法1)简单轮转法的基本思想:所有就绪进程按 FCFS 排成一个队列,总是把处理机分配给队首的进程,各进程占 用 CPU 的时间片相同。即将 CPU 的处理时间划分成一个个相同的时间片,就绪队列的诸 进程轮流运行一个时间片。当一个时间片结束时,如果运行进程用完它的时间片后还未 完成,就强迫运行机制进程让出CPU,就把它送回到就绪队列的末尾,等待下一次调度。 同时,进程调度又去选择就绪队列中的队首进程,分配给它一时间

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

18、则将当前指针依此下移一个位置,指向下一个进程,即调整 当前运行指针指向该进程的链接指针所指进程,以指示应运行进程。同时还应判断该进程的要求运行时间是否等于已运行时间。若不等,则等待下一轮的运行,否则将该进程的状 态置为完成态C,并退出循环队列。7. 若就绪队列不空,则重复上述的(5)和(6)步骤直到所有的进程都运行完为止。8. 在所设计的调度程序中,包含显示或打印语句。显示或打印每次选中的进程的名称及运行 一次后队列的变化情况。3)流程图就细以列空?结束并姑运行庭程已占猬 CPU时闾已这到所 需闌运行时1知p ca.赫人巷程信患樹肚见苜遊程投人适行齐到这翳行进程插入諏已到达逬程完威 槪湄復进程

19、时间运任进程已占用 CPuffl 间+爲进程按输入顺序插入諏图二. 简单轮转法调度算法流程图4)主要程序轮转法调度算法与最高优先数优先算法代码大多数都是共享的.很大不同的只有他们每次 运行一个cpu时间后,运行后的进程怎样插入到队列中的的sort()算法,还有就是运行算法 running。;下面我只列出几个算法的代码void sort2()PCB *q;q=ready;if(ready=NULL) ready=p;elsewhile(q-link!=NULL) q=q-link; q-link=p;void running2() /*建立进程就绪函数(进程运行时间到,置就绪状态*/ (p-rt

20、ime)+;if(p-rtime=p-ntime)destroy(); /* 调用 destroy 函数*/ elsep-state=w;sort2(); /*调用 sort 函数*/void lunzhuan()/轮转法演示进程的程序入口int len,h=0;char ch;system(cls);input2(); len=space();while(len!=0)&(ready!=NULL)ch=getchar();h+;printf(n The execute number:%d n,h); p=ready;ready=p-link; p-link=NULL; p-state=R;c

21、heck();running2(); printf(n 按任一键继续);printf(nn进程已经完成.n);ch=getchar();5)调试结果:1.输入五个进程的初始状态如下:E课程课件i计算机丫请输入五个进程信息: 进程号No.0:输入进程名5输入进程运行时间:3进程号No.l:输入进程名:h输入进程运行时间汐进程号No.2:输入进程名址输入进程运行时间进程号No.3:输入进程名为输入进程运行时间汐进程号No. 4:输入进程名输入进程运行时间汐2.此后,每按一次回车键,相当于队列首进程运行了一个 cpu 的时间,运行完毕 后,如果要求运行时间不等于已运行时间,则再将它加入就绪队列;否则

22、将其 状态置为“结束”,且退出就绪队列。第一次运行程序时的正在运行的进程以 及等待队列中的进程的各信息如下:The execute number:1*当前正在运行的进程是5qname state super ndtimeruntime!a!RS1866661936!3!0当前就绪队列状态为:qnamestatesuperndtimeruntime!b! wS1599032927!2!0qnamestatesuperndtimeruntime!c! wS1668236380!1!0qnamestatesuperndtimeruntimeid! wS1685417059!2!0qnamestate

23、superndtimeruntime!e! wS1852398700!2!0按任一犍继续3.继续按回车键,则显示第二次时的运行情况:The execute numbei:2当前正在运行的进程是汁qnamestatesuperndtimeruntimeibiRS15990329271210当前就绪队列状态为:qnamestatesuperndtimeruntime!c! wS1668236380!1!0qnamestatesuperndtimeruntime!d! wS1685417059!210qnamestatesuperndtimeruntime!e! wS1852398700!210qnamestatesuperndtimeruntime!a! w!3!1料任-1犍继续.4.重复 5 操作,直到进程运行完毕.

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


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