优先级法、多级反馈轮转法-进程调度模拟设计.docx

上传人:壹****1 文档编号:545207613 上传时间:2022-09-13 格式:DOCX 页数:41 大小:222.75KB
返回 下载 相关 举报
优先级法、多级反馈轮转法-进程调度模拟设计.docx_第1页
第1页 / 共41页
优先级法、多级反馈轮转法-进程调度模拟设计.docx_第2页
第2页 / 共41页
优先级法、多级反馈轮转法-进程调度模拟设计.docx_第3页
第3页 / 共41页
优先级法、多级反馈轮转法-进程调度模拟设计.docx_第4页
第4页 / 共41页
优先级法、多级反馈轮转法-进程调度模拟设计.docx_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《优先级法、多级反馈轮转法-进程调度模拟设计.docx》由会员分享,可在线阅读,更多相关《优先级法、多级反馈轮转法-进程调度模拟设计.docx(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, &running);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运行结果用多级轮转反馈法进行进程调度的结果如下图所示:

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 商业/管理/HR > 其它文档 > 租房合同

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号