时间片轮转调度算法实验报告.doc_第1页
时间片轮转调度算法实验报告.doc_第2页
时间片轮转调度算法实验报告.doc_第3页
时间片轮转调度算法实验报告.doc_第4页
时间片轮转调度算法实验报告.doc_第5页
已阅读5页,还剩9页未读 继续免费阅读

VIP免费下载

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

文档简介

实验概述:【实验目的及要求】用C语言编程实现时间片轮转调度算法【实验原理】基于时间片轮转调度算法思想用C语言编程实现【实验环境】(使用的软件)Visual C+6.0实验内容:本实验模拟在单处理机情况下处理机调度,用C语言编程实现先来先服务和最短作业优先调度算法。【实验方案设计】时间片大小固定,由用户输入。进程个数由用户输入。a. 每个进程用一个PCB表示。PCB包括进程名,到达时间,运行时间,剩余时间,进程状态,链接指针。其中,进程名,到达时间和运行时间由用户输入,剩余时间的初值等于运行时间。为简单起见,进程状态设为三种:就绪,运行和完成。链接指针指向下一个进程的PCB;b. 按照进程到达的先后顺序排成一个队列。设置一个队头指针指向队列中第一个进程,并设置一个队尾指针指向队列中的最后一个进程;c. 执行调度时,先选择队首的第一个进程运行。另外设置一个指向当前运行进程的指针;d. 由于本实验是模拟实验,所以对选中进程并不实际启动运行,而只是执行:l 被选中进程的状态置为运行态;l 被选中进程的剩余时间减去时间片大小;l 按照队列的顺序依次输出每个进程的进程名,到达时间,运行时间,剩余时间,进程状态。用这三个操作来模拟进程的一次运行;e. 进程运行一次后,以后的调度则将当前指针依次下移一个位置,指向下一个进程,即调整当前运行指针,以指示应运行进程。同时还应判断该进程的剩余时间是否为0。如果不为0,则等待下一轮的运行;如果该进程的剩余时间为0,则将该进程的状态置为完成态,并退出队列;f. 若处于就绪态的进程不为空,则重复第d步和第e步直到所有进程都运行完为止。【实验过程】(实验步骤、记录、数据、分析)测试用例1:屏幕显示:Please input the process name, arrive time and run time输入:1 2 12 3 23 4 3屏幕显示:Please input the slice1屏幕输出结果: *name arrive run rest state1 2 1 0 running2 3 2 2 ready3 4 3 3 ready *name arrive run rest state2 3 2 1 running3 4 3 3 ready *name arrive run rest state2 3 2 1 ready3 4 3 2 running *name arrive run rest state2 3 2 0 running3 4 3 2 ready *name arrive run rest state3 4 3 1 running*name arrive run rest state3 4 3 0 running *测试数据2:2 3 11 2 35 4 2测试数据3:【结论】(结果)测试数据1的运行结果(截图):测试数据2的运行结果:测试数据3的运行结果:源程序代码:#include stdio.h#include stdlib.hstruct studint name;int arrive;int run;int rest;char *state;struct stud *next;struct stud *create()int a,i;struct stud *head, *rear,*p,*q,*t;head=rear=NULL;printf(Please input the process number:);scanf(%d,&a);printf(nPlease input the process name,arrive time and run time:nFor example: 1 2 1n);for(i=0;iname,&p-arrive,&p-run); p-rest=p-run; p-state=ready; if(rear=NULL) head=p; p-next=NULL; rear=p; else t=NULL; q=head; while(q&q-arrivearrive) t=q; q=q-next; if(q=head) p-next=head; head=p; else if(t=rear) rear-next=p; p-next=NULL; rear=p; else t-next=p; p-next=q; return head;void output(struct stud *head)struct stud *p,*t,*r;int slice;printf(Please input the slice:); scanf(%d,&slice);while(head!=NULL) r=p=head; while(p!=NULL) t=head; p-rest=p-rest-slice;p-state=running;if(p-restrest=0;printf(n*n);printf(nametarrivetruntresttstaten);while(t!=NULL)printf(%dt%dt%dt%dt%sn,t-name,t-arrive,t-run,t-rest,t-state);t=t-next;if(p-rest=0)/*判断是否删除结点*/ if(p=head)head=p-next;free(p);p=head;/*删除头结点*/ else r-next=p-next; p=r-next; r=p;else r=p; p-state=ready; p=p-next; void main() struct stud *head; head=create(); output(head) ; 【小结】实验中产生的错误及原因分析:1、 程序运行不下去:错误分析:链表初始化排序过程中:指针p=Null时,不能执行q-arrive等命令;错误解决方法:将while(q-arrivearrive &q) t=q; q=q-next;改为:while(q&q-arrivearrive) t=q; q=q-next;2、 进程运行时间大于时间片时,程序进入死循环:当进程所需时间等于时间片时,运行结果正确:进程运行时间大于时间片时,程序进入死循环:错误分析:进程所需剩余时间计算错误;错误修改:将while(p!=NULL) t=head; p-rest=p-run-slice;p-state=running;修改为:while(p!=NULL) t=head; p-rest=p-rest-slice;p-state=running;错误3:测试数据:1 2 13 1 3Slice=2结果为: 即进入死循环。当进程所需时间小于时间片时,应立即跳出进程就绪对列。错误修改:在output()子函数中p-rest=p-rest-slice;后面加上一个语句:if(p-restrest=0;实验运行结果为:实验的体会及收获:通过这次试验,我对处理机的调度算法-基于时间片轮转调度算法思想有了更深的理解;另外使我对链表的知识有了更深的理解,而且锻炼了我的思维能力,使我能更全面地思考问题,以后还需要多做些这方面的练习。实验还需改进之处:为考虑进程所需时间小于时间片大小的情况,如:进程运行完一次时间片时间中断后,但下一个进程的提交时间要迟很多,这时候就会浪费很多时间等待,这是该程序还需改进的地方。另外,本实验中的RR算法的时间片大小固定,所以实际是属于基本轮转法,还有种是时间片长短是变化的,即改进轮转法。在基本轮转法中,时间片大小的设置是关键。时间片设得太短会导致过多的进程切换,降低了CPU效率;而设得太长又可能引起对短的交互请求的响应变差。据悉,通常,时间片的长度为几十毫秒到几百毫秒,而将时间片设为100毫秒通常是一个比较合理的折衷。指导教师评语及成绩:评语:成绩: 指导教师签名: 批阅日期:实验报告说明 1实验项目名称:要用最简练的语言反映实验的内容。要求与实验指导书中相一致。2实验类型:一般需说明是验证型实验还是设计型实验,是创新型实验还是综合型实验。3实验目的与要求:目的要明确,要抓住重点,符合实验指导书中的要求。4实验原理:简要说明本实验项目所涉及的理论知识。5实验环境:实验用的软硬件环境(配置)。6实验方案设计(思路、步骤和方法等):这是实验报告极其重要的内容。概括整个实验过程。对于操作型实验,要写明依据何种原理、操作方法进行实验,要写明需要经过哪几个步骤来实现其操作。对于设计型和综合型实验,在上述内容基础上还应该画出流程图、设计思路和设计方法,再配以相应的文字说明。对于创新型实验,还应注明其创新点、特色。7实验过程(实验中涉及的记录、数据

温馨提示

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

评论

0/150

提交评论