1、优先级法多级反馈轮转法进程调度模拟设计学 号: 课 程 设 计题 目进程调度模拟设计优先级法、多级反应轮转法学 院计算机学院专 业班 级姓 名指导教师吴利军2021年1月15日课程设计任务书学生姓名: 指导教师: 吴利军 工作单位: 计算机科学与技术学院 题 目: 进程调度模拟设计优先级法、多级反应轮转法 初始条件:1预备内容:阅读操作系统的处理机办理章节内容,对进程调度的功能以及进程调度算法有深入的理解。2实践准备:掌握一种计算机高级语言的使用。要求完成的主要任务: 包孕课程设计工作量及其技术要求,以及仿单撰写等具体要求1模拟进程调度,能够处理以下的情形: 能够选择分歧的调度算法要求中给出的
2、调度算法; 能够输入进程的根本信息,如进程名、优先级、到达时间和运行时间等; 按照选择的调度算法显示进程调度队列; 按照选择的调度算法计算平均周转时间和平均带权周转时间。2设计敷陈内容应说明: 需求分析; 功能设计数据构造及模块说明; 开发平台及源轨范的主要局部; 测试用例,运行结果与运行情况分析; 自我评价与总结:你认为你完成的设计哪些地方做得比力好或比力出色;什么地方做得不太好,以后如何改正;从本设计获得的收获在写,调试,执行过程中的经历和教训;完成此题是否有其他方式如果有,简要说明该方式;时间放置:设计放置一周:周1、周2:完成轨范分析及设计。周2、周3:完成轨范调试及测试。周4、周5:
3、验收、撰写课程设计敷陈。考前须知:严禁抄袭,一旦发现,一律按0分记指导教师签名: 年 月 日系主任或责任教师签名: 年 月 日进程调度模拟设计优先级法、多级轮转反应法1设计目的与功能1.1设计目的了解进程调度中的相关知识,能够使用其中的方式来进展进程调度模拟设计。本次课程设计的重点是多级轮转反应法和优先级法的使用,要求熟练掌握并运用他们,并能够运用一种高级语言来完成这个轨范。1.2设计功能模拟进程调度,能够处理以下的情形: 能够选择分歧的调度算法要求中给出的调度算法; 能够输入进程的根本信息,如进程名、优先级、到达时间和运行时间等; 按照选择的调度算法显示进程调度队列; 按照选择的调度算法计算
4、平均周转时间和平均带权周转时间。2.需求分析,数据构造或模块说明(功能与框图)2.1需求分析无论是在处理系统、分时系统还是实时系统,用户进程数一般都多于处理机数,这将导致用户进程互相争夺处理机。另外,系统进程也同样需要使用处理机。这就要求进程调度轨范按照必然的策略,动态地把处理机分派给处于就绪队列中的某一个进程,以使之执行。进程调度的主要任务是按照某种策略和方式拔取一个处于就绪状态的进程占用处理机。这次课程设计所要求使用的方式是时间片轮转和优先级法,并且能够选择分歧的算法。而时间片轮转法的根本思路是让每个进程在就绪队列中的等待时间与享受办事的时间成比例。时间片轮转法的根本概念是将CPU的处理时
5、间分成固定大小的时间片。如果一个进程选中之后用完了系统规定的时间片,但未完成要求的任务,那么它自行释放本身所占有的CPU而排到就绪队列的末尾,等待下一次调度。同时,进程调度轨范又去调度当前就绪队列中的第一个进程或作业。优先级法是系统或用户按某种原那么为作业或进程指定一个优先级来暗示该作业或进程所享有的调度优先权。优先级高的作业或进程优先调度。按照所需求,这个进程调度的实现过程如下列图所示:2.2数据构造和模块说明主要数据构造:struct PCB char nameNAME_LEN; int priority; /优先级 int arrive_time; / 到达时间,即创立时间 int ru
6、n_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构造进入预先准备队列void start_sch
7、eduling(); / 演示进程调度队列,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 append(struct
8、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(); / 遍历等待队列,减少sleep_time,唤醒sleep_time降至进程3.源轨范的主要局部
9、本次轨范主要由三个局部组成:main函数局部,该局部主要包含main函数;LRU算法局部,该局部主要包含LRU函数、setm(int m,int n)函数和mini(int *b)函数;OPT算法局部,该局部主要包含OPT函数和getOpt(int inPage)函数。3.1 main函数局部main函数代码:int main(int argc, char *argv) char command; srand( (unsigned)time(NULL) ); restart(); while(command = get_command() != 0); 3.2 进程调度方式局部/进程执行RRM
10、F算法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(running-used_run_time = running-run_time) running-finish_t
11、ime = 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 = 1; else running-use_sl
12、ices -; 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;void proc_run() try_wakeup_procs(); printf( ); if(runnin
13、g = 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 =
14、 (rand()%5+1); append(&waiting_list, &running); else append(&serving_ready_list, &running); running = NULL;4.测试用例,运行结果与运行情况分析4.1测试用例运行界面 4.2运行结果用多级轮转反应法进展进程调度的结果如下列图所示:用优先级法进展进程调度所获得的结果如下列图所示:5.自我评价与总结5.1本次课程设计做得比力好地方 本次课程设计条理清楚,能够运用两种分歧的方式来进展进程调度。在进程调度函数的实现时运用的构造体来实现各个的功能。5.2什么地方做得不太好,以后如何改正 实验中一些不太好的局部就是本次实验虽然完成了教师所要求的任务,但是轨范设计的界面还不是很优秀,用户体验不是很好。以后需要在这方面改善,一个好的轨范不仅要有高效率,易
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1