优先级法、多级反馈轮转法-进程调度模拟设计.doc
《优先级法、多级反馈轮转法-进程调度模拟设计.doc》由会员分享,可在线阅读,更多相关《优先级法、多级反馈轮转法-进程调度模拟设计.doc(41页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、学 号: 课 程 设 计题 目进程调度模拟设计优先级法、多级反馈轮转法学 院计算机学院专 业班 级姓 名指导教师吴利军2013年1月15日课程设计任务书学生姓名: 指导教师: 吴利军 工作单位: 计算机科学与技术学院 题 目: 进程调度模拟设计优先级法、多级反馈轮转法 初始条件:1预备内容:阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程调度算法有深入的理解。2实践准备:掌握一种计算机高级语言的使用。要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写等具体要求)1模拟进程调度,能够处理以下的情形: 能够选择不同的调度算法(要求中给出的调度算法); 能够输入进程的基
2、本信息,如进程名、优先级、到达时间和运行时间等; 根据选择的调度算法显示进程调度队列; 根据选择的调度算法计算平均周转时间和平均带权周转时间。2设计报告内容应说明: 需求分析; 功能设计(数据结构及模块说明); 开发平台及源程序的主要部分; 测试用例,运行结果与运行情况分析; 自我评价与总结:i)你认为你完成的设计哪些地方做得比较好或比较出色;ii)什么地方做得不太好,以后如何改正;iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);iv)完成本题是否有其他方法(如果有,简要说明该方法);时间安排:设计安排一周:周1、周2:完成程序分析及设计。周2、周3:完成程序调试及测试。周
3、4、周5:验收、撰写课程设计报告。(注意事项:严禁抄袭,一旦发现,一律按0分记)指导教师签名: 年 月 日系主任(或责任教师)签名: 年 月 日进程调度模拟设计优先级法、多级轮转反馈法1设计目的与功能1.1设计目的了解进程调度中的相关知识,能够使用其中的方法来进行进程调度模拟设计。本次课程设计的重点是多级轮转反馈法和优先级法的使用,要求熟练掌握并运用他们,并能够运用一种高级语言来完成这个程序。1.2设计功能模拟进程调度,能够处理以下的情形: 能够选择不同的调度算法(要求中给出的调度算法); 能够输入进程的基本信息,如进程名、优先级、到达时间和运行时间等; 根据选择的调度算法显示进程调度队列;
4、根据选择的调度算法计算平均周转时间和平均带权周转时间。2.需求分析,数据结构或模块说明(功能与框图)2.1需求分析无论是在批处理系统、分时系统还是实时系统,用户进程数一般都多于处理机数,这将导致用户进程互相争夺处理机。另外,系统进程也同样需要使用处理机。这就要求进程调度程序按照一定的策略,动态地把处理机分配给处于就绪队列中的某一个进程,以使之执行。进程调度的主要任务是按照某种策略和方法选取一个处于就绪状态的进程占用处理机。这次课程设计所要求使用的方法是时间片轮转和优先级法,并且能够选择不同的算法。而时间片轮转法的基本思路是让每个进程在就绪队列中的等待时间与享受服务的时间成比例。时间片轮转法的基
5、本概念是将CPU的处理时间分成固定大小的时间片。如果一个进程选中之后用完了系统规定的时间片,但未完成要求的任务,则它自行释放自己所占有的CPU而排到就绪队列的末尾,等待下一次调度。同时,进程调度程序又去调度当前就绪队列中的第一个进程或作业。优先级法是系统或用户按某种原则为作业或进程指定一个优先级来表示该作业或进程所享有的调度优先权。优先级高的作业或进程优先调度。根据所需求,这个进程调度的实现过程如下图所示:开始选择调度方法时间片轮转优先级法输入进程信息显示进程调度队列列计算平均周转时间和平均带权周转时间并显示出来2.2数据结构和模块说明主要数据结构:struct PCB char nameNA
6、ME_LEN; int priority; /优先级 intarrive_time; / 到达时间,即创建时间 int run_time;/ 需要的时间片数 int finish_time; / 完成时间 intsleep_time;/ 用于模拟进程的阻塞耗时 intswitch_time; / 切换队列的时间(SRR专用) intused_run_time; / 已经用过的时间片数 short use_slices;/ 每次占用CPU将消耗的时间片数不同队列中的进程的值不一样(RRMF专用) struct PCB *next;程序中主要函数char get_command();/ 显示主菜单
7、并接受用户令void add_process();/ 添加一个PCB结构进入预先准备队列void start_scheduling(); / 演示进程调度队列,SRR版void start_scheduling_rrmf();/ RRMF版void calculate_time_costs();/ 计算并显示平均周转时间,平均带权周转时间void switch_algorithm();/ 切换调度算法(线性优先级法,多级反馈轮转法)void view_list(struct PCB *list);/查看队列中内容void help_menu();/ 显示帮助菜单void restart();/
8、 释放资源,重新开始void man_auto();/ 手动自动切换void append(struct PCB *head, struct PCB *node);/ 添加于所指队列的队尾void show_process(struct PCB *node);/ 显示一个PCB的内容void time_slice();/ 一个时间片void proc_run();/ 进程执行void proc_run_rrmf();/ RRMF版void proc_switch();/ 进程切换void proc_switch_rrmf();/ RRMF版void try_wakeup_procs();/ 遍
9、历等待队列,减少sleep_time,唤醒sleep_time降至进程3.源程序的主要部分本次程序主要由三个部分组成:main函数部分,该部分主要包含main函数;LRU算法部分,该部分主要包含LRU函数、setm(int m,int n)函数和mini(int *b)函数;OPT算法部分,该部分主要包含OPT函数和getOpt(int inPage)函数。3.1 main函数部分3.1.1main函数代码:int main(int argc, char *argv)char command;srand( (unsigned)time(NULL) );restart();while(comma
10、nd = get_command() != 0); 3.2 进程调度方法部分3.2.1.多级轮转反馈函数代码:/进程执行(RRMF算法)void proc_run_rrmf()short slices_out = 0;try_wakeup_procs();printf( );if(running = NULL) printf(没?有D进?程到?达?!n);return;printf(进程正在运行 :, running-name);running-used_run_time +;running-next = NULL;show_process(running);printf(n);if(runn
11、ing-used_run_time = running-run_time) running-finish_time = sys_clock;running-use_slices = (QUEUE_NUM+1) - running-priority;append(&finished_list, &running);slices_out = 1;else if( (rand() % 100 + 1) sleep_time = (rand()%5+1);running-use_slices = (QUEUE_NUM+1) - running-priority;append(&waiting_list
12、, &running);slices_out = 1;else running-use_slices -;if(0 = running-use_slices) slices_out = 1;if(running-priority PRIORITY4)running-priority -;running-use_slices = (QUEUE_NUM+1) - running-priority;append(&ready_listQUEUE_NUM-running-priority, &running);if(slices_out)running = NULL; 3.2.2.优先级法函数代码vo
13、id proc_run()try_wakeup_procs();printf( );if(running = NULL) printf(没有进程抵达n);return;printf( 进程正在运行 :, running-name);running-used_run_time +; running-next = NULL;show_process(running);printf(n);if(running-used_run_time = running-run_time) running-finish_time = sys_clock;append(&finished_list, &runnin
14、g);else if( (rand() % 100 + 1) sleep_time = (rand()%5+1);append(&waiting_list, &running);else append(&serving_ready_list, &running);running = NULL;4.测试用例,运行结果与运行情况分析4.1测试用例运行界面 4.2运行结果用多级轮转反馈法进行进程调度的结果如下图所示:用优先级法进行进程调度所得到的结果如下图所示:5.自我评价与总结5.1本次课程设计做得比较好地方 本次课程设计条理清楚,能够运用两种不同的方法来进行进程调度。在进程调度函数的实现时运用的
15、结构体来实现各个的功能。5.2什么地方做得不太好,以后如何改正 实验中一些不太好的部分就是本次实验虽然完成了老师所要求的任务,但是程序设计的界面还不是很优秀,用户体验不是很好。以后需要在这方面改进,一个好的程序不仅要有高效率,易读性,我认为还需要较好的用户体验,以后我要在这方面多加改进。5.3从本设计得到的收获通过这次课程设计,我对操作系统有了更进一层的理解,同时对以前学的c程序设计语言也有了更深的理解。在本次实验中我遇到了很多困难,本次实验中的程序编写花了很久。在这次课程设计中,我自己先熟悉各种知识,然后查找相关资料来实现一些所需要的功能,尤其是在那两个方法时所要运用到的一些知识。 我觉得在
16、以后的学习过程中还应该多做这样的设计,它可以让我们把所学的理论用于实践,一方面可以检验并巩固我们所学的内容,另一方面可以让我们在实践中感到所学知识的实用性,从而提高我们的学习兴趣。6.参考文献1 张绕学,计算机操作系统教程,清华大学出版社,2005年6月2 周湘贞,操作系统原理与实践教程清华大学出版社,2006年10月3 严蔚敏,数据结构(C语言版)清华大学出版社,2004年11月4 闵联营,c+程序设计教程武汉理工大学出版社,2005年7月附:源代码Common.h#ifndef _COMMON_H_#define _COMMON_H_#define NAME_LEN20#define IN
17、C_FACTOR2/ 模拟时间片的延时#define DELAY_COUNTER10000/ RRMF 所需常量#define QUEUE_NUM4/就绪队列的条数#define PRIORITY14#define PRIORITY23#define PRIORITY32#define PRIORITY41#define USE_SLICES11#define USE_SLICES22#define USE_SLICES33#define USE_SLICES44/*全局数据结构和变量*/ 进程控制块 PCB 结构 struct PCB char nameNAME_LEN; int prior
18、ity; /优先级 intarrive_time; / 到达时间,即创建时间 int run_time;/ 需要的时间片数 int finish_time; / 完成时间 intsleep_time;/ 用于模拟进程的阻塞耗时 intswitch_time; / 切换队列的时间 (SRR专用) intused_run_time; / 已经用过的时间片数 short use_slices;/ 每次占用CPU将消耗的时间片数,不同队列中的进程的值不一样 (RRMF专用) struct PCB *next;int sys_clock = 0;/ 模拟系统时钟int add_idx = 0;/ 第几轮
19、添加进程int pre_list_size = 0;short algorithm = 0; / 调度算法标记, 0-SRR 1-RRMF 默认为0char algo_name5 = SSR;short manual = 0; / 手动,自动标记,0-手动 1-自动 默认为0char oper_name10 = Manual;int newly_factor = INC_FACTOR;/ 新创建进程优先级增长速率int serving_factor = INC_FACTOR / 2;/ 享受服务进程优先级增长速率struct PCB *pre_list;/ 预先准备的队列,用于模拟进程的不同时
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 优先级 多级 反馈 轮转 进程 调度 模拟 设计
限制150内