文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 1 《操作系统原理》 课程设计报告
姓 名: 吴沛儒 班 级: BX0907 学 号: 9 指导老师: 胡静
二〇一一年十二月十二日 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
2 目录 一、 《操作系统原理》课程设计的目的与要求 .......................................... 错误!未定义书签。 1、 目的 .................................................................................................. 错误!未定义书签。 2、 要求 .................................................................................................. 错误!未定义书签。 二、 简述课程设计内容、主要功能和实现环境 ...................................... 错误!未定义书签。 1. 课程设计内容 ...................................................................................... 错误!未定义书签。 三、 任务的分析、设计、实现和讨论 ...................................................... 错误!未定义书签。 1、 任务的分析 ...................................................................................... 错误!未定义书签。 2、 任务的设计与实现 .......................................................................... 错误!未定义书签。 五、 附录 ...................................................................................................... 错误!未定义书签。 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
3 进程调度—优先数法与简单轮转法 一、 《操作系统原理》课程设计的目的与要求 1、 目的 进程是操作系统最重要的概念之一,进程调度又是操作系统核心的主要内容。本实习要求学生独立地用高级语言编写和调试一个简单的进程调度程序。调度算法可任意选择或自行设计。任务一采用简单轮转法,任务二采用优先数法等。本课题可以加深对进程调度和各种调度算法的理解。 2、 要求 (1) 设计一个有n个进程并发的进程调度程序。每个进程由一个进程控制块(PCB)表示。进程控制块一般应该包含下述信息:进程名、进程优先数、进程需要运行的时间、占用CPU的时间以及进程的状态等,且可按调度算法的不同而增删。 (2) 调度程序应包含2种不同的调度算法,运行时可任意选一种,以利于各种算法的分析比较。 (3) 算法应能显示或打印各个进程的PID、状态(运行状态R、等待状态W等)和参数(已运行时间等)的变化情况,便于观察诸进程的调度过程 进程是操作系统最重要的概念之一,进程调度又是操作系统核心的主要内容。本实习要求学生独立地用高级语言编写和调试一个简单的进程调度程序。调度算法可任意选择或自行设计。任务一采用简单轮转法,任务二采用优先数法等。本课题可以加深对进程调度和各种调度算法的理解。
二、 简述课程设计内容、主要功能和实现环境 1. 课程设计内容 进程调度是处理机管理的核心内容。本实验要求用C语言编写和调试一个简单的进程调度程序。选用优先数法或简单轮转法对五个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。为了便于处理,程序进程的运行时间以时间片为单位计算。各进程的优先数或轮转时间片数、以及进程需要运行的时间片数,均由伪随机数发生器产生。通过本实验可以加深理解有关进程控制块、进程队列的概念,并体会和了解优先数和时间片轮转调度算法的具体实施办法。 2. 主要功能 本程序可选用优先数法或简单轮转法对五个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。为了便于处理,程序进程的运行时间以时间片为单位计算。 3. 实现环境 本次课程设计结合算法的特点,采用Windows操作系统平台。开发工具为Microsoft Visual C++6.0。
三、 任务的分析、设计、实现和讨论 1、 任务的分析 本程序可选用优先数法或简单轮转法对五个进程进行调度。每个进程处于运行R(run)、就绪W(wait)和完成F(finish)三种状态之一,并假设起始状态都是就绪状态W。为了便于处理,程序进程的运行时间以时间片为单位计算。各进程的优先数或轮转时间片数、以及进程需要运行的时间片数,均由伪随机数发生器产生。 下面介绍优先数法和简单轮转法两种进程调度算法: 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 4 (1) 优先数法。进程就绪链按优先数大小从高到低排列,链首进程首先投入运行。每过一个时间片,运行进程所需运行的时间片数减1,说明它已运行了一个时间片,优先数也减3,理由是该进程如果在一个时间片中完成不了,优先级应该降低一级。接着比较现行进程和就绪链链首进程的优先数,如果仍是现行进程高或者相同,就让现行进程继续进行,否则,调度就绪链链首进程投入运行。原运行进程再按其优先数大小插入就绪链,且改变它们对应的进程状态,直至所有进程都运行完各自的时间片数。 (2) 简单轮转法。进程就绪链按各进程进入的先后次序排列,进程每次占用处理机的轮转时间按其重要程度登入进程控制块中的轮转时间片数记录项(相当于优先数法的优先数记录项位置)。每过一个时间片,运行进程占用处理机的时间片数加1,然后比较占用处理机的时间片数是否与该进程的轮转时间片数相等,若相等说明已到达轮转时间,应将现运行进程排到就绪链末尾,调度链首进程占用处理机,且改变它们的进程状态,直至所有进程完成各自的时间片。
进程控制块结构如下:
进程控制块链结构如下:
其中:RUN—当前运行进程指针; HEAD—进程就绪链链首指针; TAID—进程就绪链链尾指针。
2、 任务的设计与实现
进程ID 链指针 优先数/轮转时间片数 占用CPU时间片数 进程所需时间片数 进程状态
TAIL RUN 1 … R HEAD 3
… W 5 … W 2 … W 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
5 算法流程图:
3、 操作过程和结果分析 优先数调度算法测试数据:
优先数调度算法程序运行结果截图: 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
6 图1.1 结果截图 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
7 图1.2 结果截图 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
8 简单轮转调度算法测试数据:
简单轮转调度算法程序运行结果截图:
图2.1 结果截图 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
9 图2.2 结果截图 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持.
10 图2.3 结果截图 4、 思考题的解答和讨论 通过以上的调度算法测试数据,得出以下不同算法的不同调度性能结果: 算法 比较项 (时间轮转法)RR (最高优先数)HRP
调度方式 抢占式 (按时间片) 非抢占式 响应时间 对于短进程提供良好的响应时间 提供良好的响应时间 开销 低 可能高
对待进程的作法 公平对待 良好的均衡(进程) 文档来源为:从网络收集整理.word版本可编辑.欢迎下载支持. 11 四、 《操作系统》课程设计小结 当我在回首这一个星期的时候,不因虚度光阴而悔恨,也不因碌碌无为而羞耻。我想,这可能是我一学期中最丰富而有意义的一个星期了。
从大一开始我的理论知识就比实践知识好的多,每门课都如此,实训是我最头疼的一件事。课本上记得很牢的东西到了实际操作的时候感觉都用不上,做个实验就手忙脚乱的。所以我感觉,这个星期的课设不仅学到了在理论课上学不到的知识,更是让我对自己的实践操作有了信心。
本次课程设计的题目之一是进程调度——优先数法与简单轮转法。在多任务系统中,进程调度是CPU管理的一项核心工作。根据调度模式的不同,多任务系统有两种类型,即非抢占式和抢占式。其中,优先数法是非抢占式调度策略,而简单轮转法是抢占式调度策略。进程调度算法是系统效率的关键,它确定了系统对资源,特别是对CPU资源的分配策略,因而直接决定着系统最本质的性能指标,如相应速度和吞吐量等。常用的调度算法有:先进先出法,短进程优先法,时间片轮转法(时间片轮转法还分为可变时间片轮转法和简单循环轮转法),优先级调度法。简单循环轮转法中的时间片q是一个十分重要的因素,它的计算公式为q=t/n。q的选择对进程调度有很大的影响。q取的太大,轮转法就会退化成先进先出算法;而取的太小,则会导致系统开销增加,将时间浪费在进程切换上。所以q必须取值适中,使就绪队列中的所有进程都能得到同样的服务。但我们这次的实验中暂时还没有考虑到时间片q对算法的影响,只是测试了这个调度策略的算法。
这次我们的实验测试并比较了简单轮转法和优先数法这两种调度策略的性能。不同的算法有它自己不同的长处,简单轮转法虽然能够使每个进程可以以相等的速度向前进展,但对于紧急进程的处理就显然不及优先数法。可是优先数法的开销较高,而且可能对于较短而且优先级低的进程会花较长的时间等待。不过它还是具有良好的均衡性。实际应用中,经常是多种策略结合使用。如时间片轮转法中也可以适当考虑优先级因素,对于紧急的进程可以分配一个长一点的时间片,或连续运行多个时间片等。这样取长补短,合理利用各种不同算法的优势,让CPU的运行效率大大提高。
人们总是在寻找更好的解决方案,让算法的性能和开销得到一个相对较好的平衡。我在寻找这样的一个解决方案时,同学对我说虽然老师没有在课上讲过这个策略,但其实书上有关于更好的调度策略。也就是多级反馈队列调度。这种算法可以先用较小的时间片处理完那些用时较短的进程,而给那些用时较长的进程分配较大的时间片,以免较长的进程频繁被中断而影响处理机的效率。这也就是上面所提到的“多种策略结合使用,如时间片轮转法中也可以适当考虑优先级因素”。