欢迎来到天天文库
浏览记录
ID:29444113
大小:489.00 KB
页数:10页
时间:2018-12-19
《某实验报告材料二进程调度算法》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、实用标准文案实验报告二——进程调度算法的设计姓名:xxxx学号:xxxxx班级:xxxx一、实习内容•实现短进程优先调度算法(SPF)•实现时间片轮转调度算法(RR)二、实习目的•通过对进程调度算法的设计,深入理解进程调度的原理。•进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位。•进程调度分配处理机,是控制协调进程对CPU的竞争,即按一定的调度算法从就绪队列中选中一个进程,把CPU的使用权交给被选中的进程。三、实习题目1.先来先服务(FCFS)调度算法•原理:每次调度是从就绪队列中,选择一个最先进入就绪队列的进程,把处理器分配给该进程,使之得到执
2、行。该进程一旦占有了处理器,它就一直运行下去,直到该进程完成或因发生事件而阻塞,才退出处理器。•将用户作业和就绪进程按提交顺序或变为就绪状态的先后排成队列,并按照先来先服务的方式进行调度处理,是一种最普遍和最简单的方法。它优先考虑在系统中等待时间最长的作业,而不管要求运行时间的长短。•按照就绪进程进入就绪队列的先后次序进行调度,简单易实现,利于长进程,CPU繁忙型作业,不利于短进程,排队时间相对过长。2.时间片轮转调度算法RR•原理:时间片轮转法主要用于进程调度。采用此算法的系统,其程序就绪队列往往按进程到达的时间来排序。进程调度按一定时间片(q)轮番运行各个进程.•进程按到达
3、时间在就绪队列中排队,调度程序每次把CPU分配给就绪队列首进程使用一个时间片,运行完一个时间片释放CPU,排到就绪队列末尾参加下一轮调度,CPU分配给就绪队列的首进程。精彩文档实用标准文案•固定时间片轮转法:1所有就绪进程按FCFS规则排队。2处理机总是分配给就绪队列的队首进程。3如果运行的进程用完时间片,则系统就把该进程送回就绪队列的队尾,重新排队。4因等待某事件而阻塞的进程送到阻塞队列。5系统把被唤醒的进程送到就绪队列的队尾。•可变时间片轮转法:1进程状态的转换方法同固定时间片轮转法。2响应时间固定,时间片的长短依据进程数量的多少由T=N×(q+t)给出的关系调整。3根据进
4、程优先级的高低进一步调整时间片,优先级越高的进程,分配的时间片越长。3.算法类型:4.模拟程序可由两部分组成,先来先服务(FCFS)调度算法,时间片轮转。流程图如图所示:精彩文档实用标准文案四、主要数据结构及符号说明enumStatus{running,ready,block}用枚举类型来列举进程的状态enumAlgorithm{spf,rr}用枚举类型来列举两种进程调度算法typedefclassPCB//definePCBclasswhichstoreinformationofPCB{public:intid,cputime,alltime,startblock,block
5、time;//进程号、已经运行时间、还需要的时间、何时开始阻塞及阻塞时间的变量Statusstate;//进程的状态classPCB*next;//指向下一个进程的指针精彩文档实用标准文案PCB(){}}PCB,*PCBptr,**PCBpp;定义类类型来存储一个进程的相关信息,并用链表的方式来存放进程五、实现代码为:精彩文档实用标准文案#defineMAX100#include#includeintm,b,n,x;intrt[10];//到达时间intst[10];//服务时间intct[10];//完成时间intcyt[10];//周转
6、时间/**************RR算法***************/voidRR(intN){inti,t,k;inta[MAX];//存放进程的剩余时间intcnt[MAX];//存放进程调度次数printf("pleaseinputthetimepiece(t):");scanf("%d",&t);for(i=0;i7、0)if(a[i]>=t){a[i]-=t;b+=t;cnt[i]=cnt[i]+1;printf("processname:%dcallednumber:%dendtime:%dlefttime:%d",i+1,cnt[i],b,a[i]);printf("*********************************");}else{b=b+a[i];cnt[i]=cnt[i]+1;a[i]=0;printf("processname:%dcallednumb
7、0)if(a[i]>=t){a[i]-=t;b+=t;cnt[i]=cnt[i]+1;printf("processname:%dcallednumber:%dendtime:%dlefttime:%d",i+1,cnt[i],b,a[i]);printf("*********************************");}else{b=b+a[i];cnt[i]=cnt[i]+1;a[i]=0;printf("processname:%dcallednumb
此文档下载收益归作者所有