优先级法、多级反馈轮转法

上传人:枫** 文档编号:496671047 上传时间:2023-09-05 格式:DOCX 页数:28 大小:128.97KB
返回 下载 相关 举报
优先级法、多级反馈轮转法_第1页
第1页 / 共28页
优先级法、多级反馈轮转法_第2页
第2页 / 共28页
优先级法、多级反馈轮转法_第3页
第3页 / 共28页
优先级法、多级反馈轮转法_第4页
第4页 / 共28页
优先级法、多级反馈轮转法_第5页
第5页 / 共28页
点击查看更多>>
资源描述

《优先级法、多级反馈轮转法》由会员分享,可在线阅读,更多相关《优先级法、多级反馈轮转法(28页珍藏版)》请在金锄头文库上搜索。

1、学号:课程设计專题目进程调度模拟设计一一优先级法、 多级反馈轮转法学院计算机学院专业班级姓名指导教师吴利军2013年 1月15日课程设计任务书学生姓名:指导教师:吴利军工作单位:计算机科学与技术学院题 目: 进程调度模拟设计 优先级法、多级反馈轮转法初始条件:1预备内容:阅读操作系统的处理机管理章节内容,对进程调度的功能以及进程 调度算法有深入的理解。2实践准备:掌握一种计算机高级语言的使用。 要求完成的主要任务: (包括课程设计工作量及其技术要求,以及说明书撰写 等具体要求)1模拟进程调度,能够处理以下的情形: 能够选择不同的调度算法(要求中给出的调度算法); 能够输入进程的基本信息,如进程

2、名、优先级、到达时间和运行时间等; 根据选择的调度算法显示进程调度队列; 根据选择的调度算法计算平均周转时间和平均带权周转时间。2设计报告内容应说明: 需求分析; 功能设计(数据结构及模块说明); 开发平台及源程序的主要部分; 测试用例,运行结果与运行情况分析; 自我评价与总结:i)你认为你完成的设计哪些地方做得比较好或比较出色;ii)什么地方做得不太好,以后如何改正;iii)从本设计得到的收获(在编写,调试,执行过程中的经验和教训);iv)完成本题是否有其他方法(如果有,简要说明该方法);时间安排:设计安排一周:周1、周 2:完成程序分析及设计。周 2、周 3:完成程序调试及测试。周 4、周

3、 5:验收、撰写课程设计报告。(注意事项:严禁抄袭,一旦发现,一律按0分记)指导教师签名:年 月 日系主任(或责任教师)签名进程调度模拟设计优先级法、多级轮转反馈法1 设计目的与功能1.1 设计目的 了解进程调度中的相关知识,能够使用其中的方法来进行进程调度模拟设计。本 次课程设计的重点是多级轮转反馈法和优先级法的使用,要求熟练掌握并运用他 们,并能够运用一种高级语言来完成这个程序。1.2 设计功能模拟进程调度,能够处理以下的情形: 能够选择不同的调度算法(要求中给出的调度算法); 能够输入进程的基本信息,如进程名、优先级、到达时间和运行时间等; 根据选择的调度算法显示进程调度队列; 根据选择

4、的调度算法计算平均周转时间和平均带权周转时间。2. 需求分析,数据结构或模块说明(功能与框图)2.1 需求分析无论是在批处理系统、分时系统还是实时系统,用户进程数一般都多于处理 机数,这将导致用户进程互相争夺处理机。另外,系统进程也同样需要使用处理 机。这就要求进程调度程序按照一定的策略,动态地把处理机分配给处于就绪队 列中的某一个进程,以使之执行。进程调度的主要任务是按照某种策略和方法选 取一个处于就绪状态的进程占用处理机。这次课程设计所要求使用的方法是时间 片轮转和优先级法,并且能够选择不同的算法。 而时间片轮转法的基本思路是让每个进程在就绪队列中的等待时间与享受服务 的时间成比例。时间片

5、轮转法的基本概念是将 CPU 的处理时间分成固定大小的时 间片。如果一个进程选中之后用完了系统规定的时间片,但未完成要求的任务, 则它自行释放自己所占有的 CPU 而排到就绪队列的末尾,等待下一次调度。同时, 进程调度程序又去调度当前就绪队列中的第一个进程或作业。优先级法是系统或用户按某种原则为作业或进程指定一个优先级来表示该作业或进程所享有的调 度优先权。优先级高的作业或进程优先调度。 根据所需求,这个进程调度的实现过程如下图所示:2.2 数据结构和模块说明主要数据结构:struct PCBchar nameNAME_LEN;int priority; /优先级int arrive_time

6、; / 到达时间,即创建时间int run_time; / 需要的时间片数int finish_time; / 完成时间int sleep_time; / 用于模拟进程的阻塞耗时int switch_time; /切换队列的时间(SRR专用)int used_run_time;/ 已经用过的时间片数short use_slices; /每次占用CPU将消耗的时间片数不同队列 中的进程的值不一样(RRMF专用)struct PCB *next;程序中主要函数char get_command(); / 显示主菜单并接受用户令void add_process(); /添加一个PCB结构进入预先准备队

7、列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();/ 释放资源,重新开始void man_auto(); / 手动自动切换void

8、 append(struct PCB *head,struct PCB *node) ; / 添加于所指队列的队尾void show_process(struet 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();/ 遍历等待队列,减少sleep_time,唤醒sleep_ time

9、降至进程3. 源程序的主要部分本次程序主要由三个部分组成:main函数部分,该部分主要包含main函数; LRU算法部分,该部分主要包含LRU函数、etm(int m,int n)函数和mini(int *b) 函数;OPT算法部分,该部分主要包含OPT函数和get Op t(int inPage)函数。3.1 main函数部分3.1.1main函数代码:int main(int argc, char *argv)char command;srand( (unsigned)time(NULL) );restart();while(command = get_command() != 0) ;3

10、.2进程调度方法部分3.2.1.多级轮转反馈函数代码/进程执彳丁( RRM F算法)void proc_run_rrmf()short slices_out = 0; try_wakeup_procs(); printf( );if(running = NULL) printf (没?有。进?程-到i?达?!n);return;pri ntf(进程正在运行:,running-name);running-used_run_time +;running-next = NULL;show_process(running);printf(n);if(running-used_run_time = ru

11、nning-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, &running);slices_out =

12、 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.优先级法函数代码void proc_run()try_wakeup_pr

13、ocs();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() %

14、100 + 1) sleep_time = (rand()%5+1); append(&waiting_list, &running);else append(&serving_ready_list, &running);running = NULL;4. 测试用例,运行结果与运行情况分析4.1 测试用例运行界面4.2运彳丁结果用多级轮转反馈法进行进程调度的结果如下图所示:* GU se rsAd mi n i strato rDeskto pcaozuDxito ngDe bu gcaozuoxito r 口 .-exelitSysten Clock: 00027itl Process b_l is running :tb_lnext:NULL Prepared Process List:iReadp Sueue 1= iRcadF Queue 2: 4C Empt 51Illea.dRji Queue 3 - ITieadlsP Queue 4: lUaiting Queue: Empt

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 其它学术论文

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