欢迎来到天天文库
浏览记录
ID:29174978
大小:553.75 KB
页数:19页
时间:2018-12-17
《操作系统进程调度课程设计报告》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、东莞理工学院操作系统课程设计报告设计时间:2012-1-1至2012-1-08姓名:学号:组员:专业年级:一.设计目的:通过课程设计,加深对操作系统各资源管理模块的理解,掌握操作系统的基本原理及功能,具有初步分析实际操作系统、设计、构造和开发现代操作系统的基本能力。二.设计内容:2.题目:进程调度算法的设计设计要求:①设计进程控制块PCB表结构,分别适用于优先数调度算法和循环轮转调度算法。②建立进程就绪队列。对两种不同算法编制入链子程序。③编制两种进程调度算法:1)优先数调度;2)循环轮转调度开发环境:VC++6
2、.0设计技术参数:①本程序用两种算法对五个进程进行调度,每个进程可有三个状态,并假设初始状态为就绪状态。②为了便于处理,程序中的某进程运行时间以时间片为单位计算。各进程的优先数或轮转时间数以及进程需运行的时间片数的初始值均由用户给定。③在优先数算法中,优先数的值为50与运行时间的差值,即P_TIME-process->needtime。进程每执行一次,优先数减3,CPU时间片数加1,进程还需要的时间片数减1。在轮转算法中,采用固定时间片(即:每执行一次进程,该进程的执行时间片数为已执行了2个单位),这时,CPU时
3、间片数加2,进程还需要的时间片数减2,并排列到就绪队列的尾上。④对于遇到优先数一致的情况,采用FIFO策略解决。三.设计过程1、个人负责实现的功能:2、/函数功能:优先级法调度将进程插入到就绪队列算法3、4、voidFirstInsert(PCB*q)5、{6、PCB*p,*s,*r;/*p,*r用来控制就绪队列滚动,S指向插入的队列*/7、intb;/*b作为插入控制标志的*/8、s=q;19200941402324张伟龙东莞理工学院操作系统课程设计报告1、p=READY;2、r=p;3、b=1;4、if(s-
4、>PRIO>=READY->PRIO)5、{6、s->next=READY;7、READY=s;8、}9、else10、{11、while((p!=NULL)&&b)12、{13、if(p->PRIO>=s->PRIO)14、{15、r=p;16、p=p->next;17、}18、else19、{20、b=0;21、}22、}23、s->next=p;24、r->next=s;25、}26、}27、//函数功能:时间片轮转算法调度将进程插入到就绪队列算法28、29、voidSecondInsert(PCB*q)3
5、0、{31、tail->next=q;32、tail=q;33、q->next=NULL;34、}设计思路首先设计分成两个主要部分:1、优先级法调度将进程插入到就绪队列算法:*p,*r用来控制就绪队列滚动,*S指向插入的队列,再比较p和s的进程的优先度大小,如果大于等于则直接加到首部。否则和第二个再比较,p指向下一个进程,r指向p的上一个进程,如果p==NULL,则将新进程插到队尾。否则s的next指向p,r的next指向s。2时间片轮转算法调度将进程插入到就绪队列算法:直接将要插进的进程插进就绪队尾即可,也就是
6、将尾部的进程的next指向新插进队列。tail指向新插进程的地址。19200941402324张伟龙东莞理工学院操作系统课程设计报告算法和流程图开始输入P或R到参数algo是P还是R以pcreate_task创建任务,代表优先数算法以rcreate_task创建任务,代表轮转算法priority(charalgo),执行优先数算法roundrun(charalgo),执行轮转算法终止Main函数流程图:PR19200941402324张伟龙东莞理工学院操作系统课程设计报告优先数算法流程图:是否运行完毕?needt
7、ime==0?run->state='W';insert1(run);run=NULL;返回运行数加1;需要时间减1;优先数减3;run->next=finish;finish=run;run->state='F';run=NULL;将进程就绪队列中第一个放进运行队列就绪队列不空,并且,就绪队列队首优先数大于运行的进程将进程就绪队列中第一个放进运行队列打印运行情况进程运行完毕?开始YNYNNY循环轮转调度算法流程图:19200941402324张伟龙东莞理工学院操作系统课程设计报告是否运行完毕?needtime=
8、=0?run->count=0;返回运行数加1;需要时间减1;运行时间加1;run->next=finish;finish=run;run->state='F';run=NULL;将进程就绪队列中第一个放进运行队列时间片等于运行时间run->count==run->round?run->state='W';insert2(rn;firstin();打印运行情况进程运行完毕
此文档下载收益归作者所有