优先数和轮转法进程调度实验报告_第1页
优先数和轮转法进程调度实验报告_第2页
优先数和轮转法进程调度实验报告_第3页
优先数和轮转法进程调度实验报告_第4页
优先数和轮转法进程调度实验报告_第5页
已阅读5页,还剩16页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、实验二进程调度报告一、基本信息1、实验题目:进程调度2、完成人:*3、报告日期:#二、实验内容简要描述1、实验目标:进程调度是处理机管理的核心内容。本实验要求用C语言编写和调试一个简单的进程调度程序。通过本实验可以加深理解有关进程控制块、进程队列的概念,并体会和了解优先数和时间片轮转调度算法的具体实施办法。2、实验要求:(1)设计进程进程控制块PCB表结构,分别适用于优先数调度算法和循环轮转调度算法。PCB结构通常包括以下信息:进程名,进程优先数(或轮转时间片),进程所占用的CPU时间,进程的状态,当前队列指针等。根据调度算法的不同,PCB结构的内容可以作适当的增删。(2)建立进程就绪队列。对

2、两种不同算法编制入链子程序。(3)编制两种进程调度算法:1)优先数调度;2)循环轮转调度。三、报告主要内容1、设计思路:(1)设计就绪、执行、完成三个队列;根据输入进程的时间,按照需要的时间越多,优先级越低,(60减去所需时间)建立就绪队列。(2)对优先数调度算法实现,首先从就绪队列中取出第一个进程。进程执行,优先数减3,CPU时间片数加1,进程还需要时间片数减1,在此设置计数器count,来判断进程是否执行完成。若进程完成,标志flag为0,并插入完成队列;否则插入就绪队列,等待下一次继续执行。重复上述操作,直到进程全部完成。(3)对轮转法调度算法实现,从就绪队列取进程,在时间片数为2的时间

3、内进程执行,计数器count加2,若进程完成,继续取下一个进程执行,否则,若时间片用完,计数器清零,将该进程排列到就绪队列的尾上。然后取下一个进程,由于计数器已经清零,故相当于又给了一个时间片。重复上述操作,直到进程全部完成。2、主要数据结构:(1)PCB结构:typedefstructnodecharname20;/*进程的名字*/intprio;/*进程的优先级*/intround;/*分配CPU的时间片*/intcputime;/*CPU执行时间*/intneedtime;/*进程执行所需要的时间*/charstate;/*进程的状态,W-就绪态,R-执行态,F-完成态*/intcoun

4、t;/*记录执行的次数*/structnode*next;/*链表指针*/PCB;三个应用队列:PCB*ready=NULL,*run=NULL,*finish=NULL;/*定义三个队列就绪、执行和完成队列*/3、主要代码结构:(1)函数声明部分:voidGetFirst();/*从就绪队列取得第一个节点*/voidOutput();/*输出队列信息*/voidInsertPrio(PCB*in);/*创建优先级队列,规定优先数越小优先级越高*/voidInsertTime(PCB*in);/*时间片队列*/voidInsertFinish(PCB*in);/*时间片队列*/voidPrio

5、Create();/*优先级输入函数*/voidTimeCreate();/*时间片输入函数*/voidPriority();/*按照优先级调度*/voidRoundRun();/*时间片轮转调度*/(2)主函数:intmain()charchoise;printf(请输入要创建的进程数目:n);scanf(%d,&num);getchar();printf(输入进程的调度方法:(P/R)n);scanf(%c,&choise);switch(choise)caseP:PrioCreate();Priority();break;caseR:TimeCreate();RoundRun();bre

6、ak;default:break;Output();4、主要代码段分析:voidPriority()/*按照优先级调度算法*/intflag=1;/设定标志位,当flag=0时,该进程结束GetFirst();while(run!=NULL)/*当就绪队列不为空时,则调度进程如执行队列执行*/Output();/*输出每次调度过程中各个节点的状态*/while(flag)run-prio-=3;/*优先级减去三*/run-cputime+;/*CPU时间片加一*/run-needtime-;/*进程执行完成的剩余时间减一*/if(run-needtime=0)/*如果进程执行完毕,将进程状态置

7、为F,将其插入到完成队列*/run-state=F;run-count+;/*进程执行的次数加一*/InsertFinish(run);flag=0;else/*将进程状态置为W,入就绪队列*/run-state=W;run-count+;/*进程执行的次数加一*/InsertTime(run);flag=0;flag=1;GetFirst();/*继续取就绪队列队头进程进入执行队列*/voidRoundRun()/*时间片轮转调度算法*/intflag=1;GetFirst();while(run!=NULL)Output();while(flag)run-count+;run-cputim

8、e+;run-needtime-;if(run-needtime=0)/*进程执行完毕*/run-state=F;InsertFinish(run);flag=0;elseif(run-count=run-round)/*时间片用完*/run-state=W;run-count=0;/*计数器清零,为下次做准备*/InsertTime(run);flag=0;flag=1;GetFirst();四、实验结果1、基本数据(1)源程序代码行数源码共:273行(2)完成该实验投入的时间(小时数)(3)与其他同学讨论次数2、测试数据设计优先数调度算法测试数据:A12A23A34A42A54时间片轮转调

9、度算法测试数据A13A22A34A42A513.测试结果分析raaiC;WindovsVystem32匚rrT.exe请输入要创建的进程数目输入进程的调度方袪:P输入进程名字和进程所需时间:A12A23A34A424进程名优先圾轮数A158R257A356A556A458甘程名优先圾轮遨A2570A3Q的5G0A4550A1560进程名优先级轮数R356A556A455A155A257&333養程名借先圾轮遨Q3333A455A155A254A356进程名优先级轮数R455A155A254A353A556&333辻程名优先班轮数A1550A2540cpu时间0000CDU时间00010cpu时

10、间00110CDU时间B1110cpu时间11110CPU时间11需要时叵2344雷蓼时百3441需要时页4411需要时百4112需要时页11拿要时间1进程状态第程状态第程状态进程状态ii计1iej计匚T-c计匚-计1优先扱0(03000002021cpu时间需要时间进程名2211数器Fr进程狀态FFFFFFF需程状态张程状态railC:WinVystem32匚nrd.EKE00051052130027-855400050525200000000半0B0级先55优54圾先54优535252思先圾50优先级5050优先圾47131311cpu时间需要时间12133011upu吋页需要吋间1313

11、cpu时间需要时间13221cpu时间需萝时间2222cpu时间需要时间312a20F纸程状态如程状态F备呈状态A数器111A数器122匸数器22计数器324画jC:Wind-cv/ssystem22cmd.exeA3A5A4A1A2迸程名A5A4A1A3述程名A3H4A1A2A5适程名A5A4A1A2A3遇程名A4A1A2R3A5适程名A4A1A2A3A51兀丸职牝毅cpu闻日常蠢呵山500228225202Q5282Q021优先级轮数c皿时间需要时司5002202B5202Q4S03Q50022优先级轮数呼时间需要时间031520ZB5202S03Q50022优先级轮数c叫时间需要时间47

12、0315202Q520204S03B031优先级轮数可讪寸间需要时间5202e520260440雄先级览数5205204804404B31cpu时间需要时间2QQQQ40pa.s:ueKI辱内部或外部命令,也不是可运行的程序辻程状志进程状态F进程状态FJ/n口-f-b2计2nc.-D口数2计3J.ET寻数?计2J/n0.-0廊jC:WindomS2crrd.exe请输入要创建的进程数目:输入进程的调度方袪:嘉入进程名字和进程时间片所需时间:A13A22A34A42A51遡程名优先级轮数W时间需要时间A2Q20R3BZBA4Q20A5620AlQ20茬程名优先圾轮遨c叫时间需要时间A30204A

13、4B2BA5Q2SA1622020进程名优先圾轮数W时间需要时页R4E12B2A56201AlS221A2B220A3S204甘程名优先圾轮遨c叫时百需要时百AEB2B1AlS221ASS222ft20320A4S2Q2进程名优先级轮数cpu时间需要时页R1EJZ21A36222A2220A4S220A5201注程名优先级轮数c叫时间需要时页A3G22A2Q22进程状态第程状态B进程状态进程状态F进程状态进程狀态口曽数?0KuS-01-0TVJS-01-B-01-B五、实验体会1、实验过程中遇到的问题及解决过程本次试验,思路设计不难,主要还是在利用指针处理时感觉很困难,实验中设计了结构指针用来

14、指向PCB结构,PCB结构中又有链表指针。为此必须时时防止出现野指针,程序崩溃。在时间片轮转法调度中,老师要求:进程每执行1次,CPU时间片数加2,进程还需要的时间数减2.一开始我认为这不妥,计数器统计,每次增加1。比如测试数据中第5个A51。这个进程所需时间片只有1,所以如果都是减2,我设计后程序结果显示混乱。然后我把进程执行完成的条件:if(run-needtime=0)/*进程执行完毕*/更改后,程序显示正常。在建立优先数就绪队列时主要运用,链表插入模型。但是由于本题是从建立、到完成一个就绪对列,所以必须分多种情况讨论。2、实验过程中产生的错误及原因分析3、实验体会和收获(1)本次试验后对优先数调度算法和时间片轮转调度算法实现的过程,有了很清楚的认识、理解。设计计数器来对进程执行状态的时间分析,使得进程调度这一抽象模型得到具体化。之后,便是

温馨提示

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

评论

0/150

提交评论