ImageVerifierCode 换一换
格式:DOCX , 页数:35 ,大小:121.77KB ,
资源ID:9847163      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/9847163.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(优先级法多级反馈轮转法.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

优先级法多级反馈轮转法.docx

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 PCBchar nameNAME_LEN;int priority; /

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

7、add_process();/演示进程调度队列,SRR版/ RRMF 版/ 计算并显示平均周转时间,平/ 切换调度算法(线性优先级法,void start_scheduling();void start_scheduling_rrmf(); void calculate_time_costs();均带权周转时间void switch_algorithm();多级反馈轮转法)void view_list( struct PCB *list); / 查看队列中内容void help_menu(); / 显示帮助菜单void restart(); / 释放资源,重新开始void man_auto()

8、; / 手动自动切换void append( struct PCB *head, struct PCB *node); / 添加于所指队列的队尾内容void try_wakeup_procs(); / 遍历等待队列,减少 sleep_time, 唤醒 sleep_time 降至进程3.源程序勺主要部分本次程序主要由三个部分组成: main 函数部分,该部分主要包含 main 函数; LRU算法部分,该部分主要包含 LRU数、setm(int m,int n)函数和mini(int *b) 函数;OPT算法部分,该部分主要包含 OPT函数和getOpt(i nt in Page) 函数。3.1m

9、ain 函数部分3.1.1main 函数代码:int main( int argc, char *argv)char command;srand( ( unsigned )time(NULL) );restart();while (command = get_command() != 0 );3.2进程调度方法部分3.2.1. 多级轮转反馈函数代码:/进程执行(RRM算法)void proc_run_rrmf()short slices_out = 0;try_wakeup_procs();printf( );if (running = NULL) printf( 没?有?昵?程?到达?! n

10、);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; running-use_slices = (QUEUE_NUM+1) -running-priority;append(&finished_list, &running);slices_out = 1

11、;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_slices -;if (0 = running-use_slices) slices_out = 1;if (running-priority PRIORITY4) running-priority -;running-use_slices = (

12、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_procs(); printf( );if (running = NULL) printf( 没有进程抵达 n );return ;printf( 进程正在运行 : , running-name); running-used_run_time +;running-next = N

13、ULL; 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.测

14、试用例,运行结果与运行情况分析4.1 测试用例运行界面4.2运行结果用多级轮转反馈法进行进程调度的结果如下图所示:CU ser5Ad mi n ist哉 orlDes kto pr caozuDxito nqDe bu g uzuoxloq, exerI h_0 p si 3钉2vtut :& 0t:0rt;22U3 = 4next :HULIiJflIttlttttttttlttttttttttilttttttttttititttUUttNttEttttItt Systen Clock: 006271| Process b_l is running :h_l p:l at:2 rt-6 ut

15、:6 st :0f t:-1 us:4next:NULL Pre paired Fiocess List:Readv Queue Tlcad Quicue 2 - t EmptyReaidi/ Qiixeue 9 - C Entpt: yReadjjr Qmeue 4- Waitingr Queue: EmptFin is lied Queue -c at = 4rt :2utst =0Ft:12us: 2next:a1a P=2 at -0Ft :4ut :4 st :0Ft :13us -3next:hJLI) 尸2 at =2rt: but :b st :-lfc:16us: 3next

16、:b_MJli_0 P二 at = 2rL :6lit stf L ;22us-4next:hULElb_l p = l at = 2rt : &ut =G si; =0ft ;27us=4next = NULLBRMF Similatinn Fin-isFd*Aueraqe Time Cost: 16.000Average Weighted Tine Cost: 3.415个进程正在进行中ftutumat ic , QH+ 请按G 査询】F青选择将要超询换作:h用优先级法进行进程调度所得到的结果如下图所示:Ui C:U5ersAdmiiriistratOirDesktopcacii2Lj0x

17、itcngDebugcao2uoMtohg.eKecp:10atrt:2ut :2st:-lft:13US:1next :lb1bp:10At: 2Ft; 5ut :5stft:ilUSnext:b_0b_ep:12At :2rt:5utstft:20US:1next:HULLP:14 at :2 i*t松 System Clock:盹023 ttWa j.1, jLii yQueue =t Eiriptr Pi n i e liedQueue :ap:5atert4ut :4st: Qt18us : 1next:c1Lcp:10at4rt2ut :2st :-lft13US :1next:h

18、1Lbp:lMat2rt5utst :Bft18US :1next : Jb_(31tbjBp:2at2rtEut :5st : Ft28ue : 1nsx*t Jh_l1bp:14at2Kt5ut :5st :eFt23US :1next: NULLSER S inulation Finis lied?A vq raye T ime Cost: 080 Awe rage Ve ihtcd Iine Cost; 3,60S眺氏M”喰”如果遇到问題,请按V查询1 Process b_l is Funning :Lb_l noxt:NULL Pre pared Process List Empt

19、y Seizing Ready Queue: Newljf Ready QueUje: Empty A5.自我评价与总结5.1本次课程设计做得比较好地方本次课程设计条理清楚,能够运用两种不同的方法来进行进程调度。 在进程 调度函数的实现时运用的结构体来实现各个的功能。5.2什么地方做得不太好,以后如何改正实验中一些不太好的部分就是本次实验虽然完成了老师所要求的任务, 但是 程序设计的界面还不是很优秀,用户体验不是很好。以后需要在这方面改进,一 个好的程序不仅要有高效率,易读性,我认为还需要较好的用户体验,以后我要 在这方面多加改进。5.3从本设计得到的收获通过这次课程设计,我对操作系统有了更进

20、一层的理解,同时对以前学的 c程序设计语言也有了更深的理解。 在本次实验中我遇到了很多困难,本次实验中 的程序编写花了很久。在这次课程设计中,我自己先熟悉各种知识,然后查找相关资料来实现一些 所需要的功能,尤其是在那两个方法时所要运用到的一些知识。我觉得在以后的学习过程中还应该多做这样的设计,它可以让我们把所学的理论用于实践, 一方面可以检验并巩固我们所学的内容, 另一方面可以让我们在 实践中感到所学知识的实用性,从而提高我们的学习兴趣。6.参考文献1张绕学,计算机操作系统教程 ,清华大学出版社 ,2005年 6月2周湘贞,操作系统原理与实践教程清华大学出版社, 2006 年 10 月3严蔚敏

21、,数据结构(C语言版)清华大学出版社,2004年11月4闵联营,C+程序设计教程武汉理工大学出版社,2005年7月附:源代码Common.h#ifndef _COMMON_H_ #define _COMMON_H #define NAME_LEN 20#define INC_FACTOR 2 / 模拟时间片的延时#define DELAY_COUNTER 10000/ 进程控制块 PCB 结构struct PCBchar nameNAME_LEN;int priority; /优先级int arrive_time; / 到达时间,即创建时间int run_time; / 需要的时间片数int

22、finish_time; / 完成时间int sleep_time; / 用于模拟进程的阻塞耗时int switch_time; / 切换队列的时间 (SRR 专用)int used_run_time; / 已经用过的时间片数short use_slices; / 每次占用 CPU 将消耗的时间片数,不同队列中的进程的值不一样 (RRMF 专用)struct PCB *next;int sys_clock = 0; / 模拟系统时钟int add_idx = 0; / 第几轮添加进程int pre_list_size = 0;, 0-SRR 1-RRMF 默认为 0short algorith

23、m = 0; / 调度算法标记char algo_name5 = SSR;short manual = 0; / 手动,自动标记, 0-手动 1-自动 默认为 0 char oper_name10 = Manual;int serving_factor = INC_FACTOR / 2; / 享受服务进程优先级增长速率struct PCB *pre_list; struct PCB *running;/ 预先准备的队列,用于模拟进程的不同时刻到达调度队列/ 指向正在运行进程struct PCB *serving_ready_list; / 享受服务进程队列struct PCB *newly_r

24、eady_list; / 新创建进程队列struct PCB *waiting_list; / 等待队列struct PCB *finished_list = NULL; / 完成队列/ RRMF 的多级队列/ ready_list0优先级PRIORITY1 ,占时间片USE_SLICES1/ ready_list1优先级PRIORITY2 ,占时间片USE_SLICES2/ ready_list2优先级PRIORITY3 ,占时间片USE_SLICES3/ ready_list3优先级PRIORITY4 ,占时间片USE_SLICES4/ .struct PCB *ready_listQUE

25、UE_NUM;char get_command(); / 显示主菜单,并接受用户命令void add_process(); / 添加一个 PCB 结构进入 pre_list( 预先准备队列 )void start_scheduling(); / 演示进程调度队列, SRR 版void start_scheduling_rrmf(); / RRMF 版void calculate_time_costs(); / 计算并显示平均周转时间,平均带权周转时间void switch_algorithm(); / 切换调度算法(线性优先级法,多级反馈轮转法)void view_list(struct PC

26、B *list); / 查看队列中内容void help_menu(); / 显示帮助菜单void restart(); / 释放资源,重新开始void man_auto(); / 手动 /自动 切换void append(struct PCB *head, struct PCB *node); / 添加 node 于 head 所指队列的队尾void show_process(struct PCB *node); / 显示一个 PCB 的内容void time_slice(); / 一个时间片void proc_run(); / 进程执行void proc_run_rrmf(); / RRM

27、F 版void proc_switch(); / 进程切换void proc_switch_rrmf(); / RRMF 版void try_wakeup_procs(); / 遍历等待队列, 减少 sleep_time,唤醒 sleep_time 降至 0 的进程#endif /_COMMON_H_Main.c#include #include #include #include #include #include common.h int main(int argc, char *argv)char command;srand( (unsigned)time(NULL) );restart();while(command = get_command() != 0);/接收用户选择并转入相应的操作char get_command()char c;printf(n%d个进程正在进行中,%s, %s,如果遇到问题,请按6查询n请选 择将要进行的操作 :n,pre_list_size,algo_name,oper_name)

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1