欢迎来到天天文库
浏览记录
ID:35617826
大小:136.50 KB
页数:16页
时间:2019-04-02
《操作系统课程设计--时间片轮转算法》由会员上传分享,免费在线阅读,更多相关内容在学术论文-天天文库。
1、课程设计说明书NO.16时间片轮转算法1.课程设计的目的通过操作系统课程设计,通过对作业调度算法的设计,深入理解作业调度的原理,从原理分析、物理设计,到功能分析和应用程序的最终实现,让学生亲自动手参与一个操作系统的模拟设计,真正理解和掌握操作系统的有关内容,加深对操作系统,软件工程,程序设计语言的理论知识的理解和应用水平;在理论和实验教学基础上进一步巩固已学基本理论及应用知识并加以综合提高;学会将知识应用于实际的方法,提高分析和解决问题的能力,增强对手能力;并更好的理解和消化课本所学的知识,为毕业设计和以后工作打下必要基础。2.课程设计的开发语言Windows操作系统MicrosoftVisu
2、al C++6.03.功能描述时间片轮转的主要思想就是按顺序为每一个进程一次只分配一个时间片的时间。算法要完成的功能就是将各个进程按照时间片轮转运行的动态过程显示出来。时间片轮转算法的主要实现过程是首先为每一个进程创建一个进程控制块,定义数据结构,说明进程控制块所包含的内容,有进程名、进程所需运行时间、已运行时间和进程的状态以及指针的信息。实现的过程即运用指针指向某一个进程,判断当前的进程是否是就绪状态“r”,如果是,则为该进程分配一个时间片,同时,已运行时间加一且要求运行的时间减一,如此循环执行,当某一个进程的所需要运行的时间减少至0时,则将该进程的状态设置为“e”。然后,将指针指向下一个未
3、运行完成的进程,重复判断,直至所有的进程都运行结束。4.方案论证4.1概要设计4.1.1所用数据结构及符号说明typedefstructPCB{charname[10];//进程名structPCB*next;//循环链指针沈阳大学课程设计说明书NO.16intneed_time;//要求运行时间intworked_time;//已运行时间,初始为0charcondition;//进程状态,只有“就绪”和“结束”两种状态intflag;//进程结束标志,用于输出}PCB;PCB*front,*rear;//循环链队列的头指针和尾指针intN;//N为进程数4.1.2主程序的流程图图1:主程序的
4、流程图4.1.3程序说明:处理器调度总是选择指针指示的进程运行。由于本实验是模拟处理器调度的功能,所以,对被选中的进程并不实际的启动运行,而是执行:已运行时间+1沈阳大学课程设计说明书NO.16来模拟进程的一次运行,表示进程已经运行过一个单位的时间。4.2详细设计首先每一个进程用一个进程控制块PCB来代表。进程控制块的格式为:进程名指针要求运行时间已运行时间状态图2:PCB控制块其中,进程名——作为进程的标识,如Q1、Q2等。指针——进程按顺序排成循环链队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程的指针指出第一个进程的进程控制块首地址。已运行时间——假设进程已经运行的单位时间数
5、,初始值为“0”。状态——有两种状态,“就绪”和“结束”,初始状态都为“就绪”,用“R”表示。当一个进程运行结束后,它的状态为“结束”,用“E”表示。每次运行所设计的处理器调度程序前,为每个进程任意确定它的“要求运行时间”。把五个进程按顺序排成循环链队列,用指针指出队列连接情况。用指针表示轮到运行的进程,如下图描述所示:K1Q1K2Q2K3Q3K4Q4K5Q5 K2 K3 K4 K5 K1 2 4 3 1 2 0 0 0 0 0 R R R R R PCB1 PCB2 PCB3 PCB4 PCB5图3:进程队列4.3程序详细设计步骤:沈阳大学课程设计说明书NO.16a.首先建立PCB的数据结构
6、,为了便于正确输出,加上了进程结束标志flag。输入进程信息(包括进程名和要求运行的时间),并为每个进程创建一个PCB并初始化形成一个循环链队列,用函数creatPCB()来实现。b.建立函数judge()用来判断进程全部运行结束标志,即当所有进程的状态变为’e’(即完成状态)后,循环结束,表示所有进程都已运行成功。c.建立时间片轮转算法creatProcess()对进程进行轮转运行,首先指针s指向第一个进程PCB,即s=front,判断该进程的状态是否为’r’(就绪状态),即if(s->condition=='r'),若是则表示此进程尚未执行结束,则执行s->worked_time++且s-
7、>need_time--,if(s->need_time==0),则表示此进程已运行结束,将其状态置为结束,即s->condition='e',并根据状态位输出完成信息,且以后不会再运行此进程。将指针指向下个进程,s=s->next,并判断所有进程是否已全部运行结束,没有则重复上面算法。当所有进程的状态位都变成’e’表示所有进程运行完成,则循环结束。d.建立主函数main(),输入进程数N,调用初
此文档下载收益归作者所有