当前位置:文档之家› 操作系统-课程设计报告-处理机调度程序

操作系统-课程设计报告-处理机调度程序

:操作系统课程设计报告@学校:广州大学学院:计算机科学与教育软件学院班级:计算机127班课题:处理机调度程序任课老师:陶文正、陈文彬姓名:黄俊鹏{学号:11班内序号:27成绩:日期:2015年1月6日一、设计目的在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个。

也就是说能运行的进程数大于处理机个数。

为了使系统中的进程能有条不紊地工作,必须选用某种调度策略,选择一进程占用处理机。

要求学生设计一个模拟处理机调度算法,以巩固和加深处理机调度的概念。

二、设计要求1)进程调度算法包括:时间片轮转法,短作业优先算法,动态优先级算法。

2)可选择进程数量3)本程序包括三种算法,用C语言实现,执行时在主界面选择算法(可用函数实现)(进程数,运行时间,优先数由随机函数产生)执行,显示结果。

三、设计思路及算法思想1.·2.界面菜单选项一级菜单提供2个选项:①自动生成进程数量②手动输入所需进程数量一级菜单选择完毕后进入二级菜单:①重新生成进程②时间片轮转法《③短作业优先算法④动态优先级算法⑤退出程序3.调度算法程序所用PCB结构体!需要用到的进程结构体如上图所示1)时间片轮转法主要是设置一个当前时间变量,curTime和时间片roundTime。

遍历进程组的时候,每运行一个进程,就把curTime += roundTime。

进程已运行时间加roundTime2)短作业优先算法遍历进程组,找到未运行完成并且运行时间最短的进程,让它一次运行完成,如此往复,直到所有进程都运行完成为止。

3)—4)动态优先级算法做法跟短作业优先算法类似,此处主要是比较进程的优先数,优先级高者,先执行。

直到全部执行完毕。

当一个进程运行完毕后,适当增减其余进程的优先数,以达到动态调成优先级的效果。

4.程序流程图四、运行截图1)启动后输入5,生成5个进程~2)输入1,选择时间片轮转法。

自动输出结果,分别是时间片为1和4的结果3)输入2,选择短作业优先算法#4)输入3,选择动态优先级算法;5)输入0,重新生成进程,再输入3,生成3个进程,选择2.短作业优先算法6)输入q,退出五、心得体会}通过这次实验,让我对操作系统的进程调度有了更进一步的了解。

这个实验的模拟程度跟真实系统相比只是冰山一角,由此可见操作系统是何其复杂的软件产品,仅进程调度就有那么丰富和内涵的知识需要掌握。

但是再复杂的系统,都是由小部件构成的。

古语云:不积跬步,无以至千里。

不积小流,无以成江海。

掌握这些基础的知识,可以为以后打下扎实的基础。

六、附录(源代码)All rights reserved.ame = name;p[i].priority = GetRandomNumber(MIN_PRIORITY, MAX_PRIORITY);p[i].runningTime= GetRandomNumber(MIN_RUNNING_TIME,MAX_RUNNING_TIME);name++;!}}void PrintResult(PCB p[],int num){double avgCycTime = 0,avgWeiCycTime = 0;printf("|进程名到达时间运行时间开始时间完成时间周转时间带权周转时间优先数 |\n");for (int i = 0;i < num;i++){printf("|%3c %-4d %-4d %-4d %-4d %-4d % %-4 d|\n",p[i].name,p[i].arriveTime,p[i].runningTime,p[i].beginTime,p[i].finish Time,p[i].cyclingTime,p[i].weigthCyclingTime,p[i].priority);}avgCycTime += p[i].cyclingTime;avgWeiCycTime += p[i].weigthCyclingTime;rriveTime = 0;p[i].beginTime = 0;p[i].finishTime = 0;p[i].cyclingTime = 0;p[i].weigthCyclingTime = 0;^p[i].hadRunTime = 0;p[i].finish = 0;}avgWeiCycTime /= num;avgCycTime /= num;printf("平均周转时间:%.2f 平均带权周转时间:%.2f\n",avgCycTime,avgWeiCycTime);}"inish)continue;eginTime == 0 && i != 0){p[i].beginTime = curTime;}adRunTime + roundTime >= p[i].runningTime){p[i].finishTime= curTime + p[i].runningTime- p[i].hadRunTime;>p[i].cyclingTime = p[i].finishTime - p[i].arriveTime;p[i].weigthCyclingTime= p[i].cyclingTime/(double)p[i].runningTime;p[i].finish = 1;finishNum ++;curTime += p[i].runningTime - p[i].hadRunTime;}else{p[i].hadRunTime += roundTime;curTime += roundTime;>}}}PrintResult(p, num);}void RoundRobin(PCB p[],int num){RealRoundRobin(p, num, 1); inish== 0&& p[min].runningTime>= p[i].runningTime)*min = i;else if (p[i].finish == 0 && p[min].finish == 1)min = i;}p[min].beginTime = curTime;p[min].hadRunTime = p[min].runningTime;p[min].finishTime = p[min].beginTime + p[min].runningTime;>p[min].cyclingTime = p[min].finishTime - p[min].arriveTime;p[min].weigthCyclingTime= p[min].cyclingTime/(double)p[min].runningTime;p[min].finish = 1;finishNum++;curTime = p[min].finishTime;}PrintResult(p, num);}#inish == 0 && p[min].priority >= p[i].priority)min = i;else if (p[i].finish == 0 && p[min].finish == 1)min = i;}p[min].beginTime = curTime;)p[min].hadRunTime = p[min].runningTime;p[min].finishTime = p[min].beginTime + p[min].runningTime;p[min].cyclingTime = p[min].finishTime - p[min].arriveTime;p[min].weigthCyclingTime= p[min].cyclingTime/(double)p[min].runningTime;p[min].finish = 1;finishNum++;curTime = p[min].finishTime;}-PrintResult(p, num);}int main(int argc, const char * argv[]) {PCB pcbGroup[30]; n");}}!新生成进程 | 1.时间片轮转法 | 2.短作业优先算法 | 3.动态优先级算法 | q.退出\n>>>>>>");char ch;while ((ch = getchar()) == '\n');switch (ch) {case'0'://0 重新生成进程processNum = 0;break;case'1'://1 时间片轮转法RoundRobin(pcbGroup, processNum);break;case'2'://2 短作业优先算法ShortestJobFirst(pcbGroup, processNum);break;case'3'://3 动态优先级算法DynamicPriorityFirst(pcbGroup,processNum);break;case'q'://q 退出exit(0);default:break; }}return0;}。

相关主题