基于时间片轮转法调度算法模拟.doc

PAGE \* MERGEFORMAT PAGE \* MERGEFORMAT 0 操作系统课程设计报告 课程设计题目:基于时间片轮转法调度算法模拟 姓名: 学号: 专业:计算机科学与技术 班级: 指导教师:小辉 2013 年 1月11日 目 录 HYPERLINK \l _Toc4330 一.课程设计目的与内容 1 TOC \o 1-2 \h \z \u HYPERLINK \l _Toc28430 二.任务分析 2 HYPERLINK \l _Toc6104 三.概要分析 3 HYPERLINK \l _Toc17842 四.详细设计 4 HYPERLINK \l _Toc2648 五.运行结果 6 六. HYPERLINK \l _Toc18259 总 结 7 七.附录8 八.评分表11 一.课程设计目的与内容 1.课程设计目的 (1)在单处理器情况下按时间片轮转算法实现处理器调度,输出运行动态变化过程。 (2)通过算法的实现加深了解处理器调度的工作。 2.课程设计内容 输入实现处理器调度的几个进程信息,任意确定一组“要求运行时间”,启动所设计的处理器调度程序,显示逐次被选中进程的进程名以及进程控制块的动态变化过程。 二、任务分析 时间片轮转的主要思想就是按顺序为每一个进程一次只分配一个时间片的时间。算法要完成的功能就是将各个进程按照时间片轮转运行的动态过程显示出来。时间片轮转算法的主要实现过程是首先为每一个进程创建一个进程控制块,定义数据结构,说明进程控制块所包含的内容,有进程名、进程所需运行时间、已运行时间和进程的状态以及指针的信息。实现的过程即运用指针指向某一个进程,判断当前的进程是否是就绪状态“r”,如果是,则为该进程分配一个时间片,同时,已运行时间加一且要求运行的时间减一,如此循环执行,当某一个进程的所需要运行的时间减少至0时,则将该进程的状态设置为“e”。然后,将指针指向下一个未运行完成的进程,重复判断,直至所有的进程都运行结束。 三、概要设计 (1)所用数据结构及符号说明 #includestdio.h #includeconio.h #includemalloc.h #includestring.h #define NULL 0 typedef struct PCB{ char name[10]; //进程名 struct PCB *next; //链指针 int need_time; //要求运行时间 int worked_time; //已运行时间 char condition; //进程状态,只有“就绪”和“结束”两种状态 int flag; //进程结束标志 }PCB; PCB *front,*rear; int N; //N为进程数 (2)主程序的流程图: 开始 开始 输入进程数 输入进程数N 输入各进程信息 输入各进程信息 为每个进程创建 为每个进程创建PCB并初始化形成一个循环链队列 指针指向循环链队列第一个进程 指针指向循环链队列第一个进程 进程是否’r’ 进程是否’r’ 运行时间+1 运行时间+1且剩余时间-1 剩余时间 剩余时间=0? Y 将进程状态置为 将进程状态置为’e’(完成) 指针指向队列中下个进程 指针指向队列中下个进程 所有进程是否完成 所有进程是否完成 N 结束 Y 结束 (3)程序说明:处理器调度总是选择指针指示的进程运行。由于本实验是模拟处理器调度的功能,所以,对被选中的进程并不实际的启动运行,而是执行:已运行时间+1来模拟进程的一次运行,表示进程已经运行过一个单位的时间。 四、详细设计 (1)首先每一个进程用一个进程控制块PCB来代表。进程控制块的格式为: 进程名 指针 要求运行时间 已运行时间 状态 其中,进程名——作为进程的标识,如Q1、Q2等。 指针——进程按顺序排成循环链队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程的指针指出第一个进程的进程控制块首地址。 要求运行时间——假设进程需要运行的单位时间数。 已运行时间——假设进程已经运行的单位时间数,初始值为“0”。 状态——有两种状态,“就绪”和“结束”,初始状态都为“

文档评论(0)

1亿VIP精品文档

相关文档