短作业优先调度算法
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
课程设计报告课程设计题目:短作业优先(SJF)调度算法模拟
专业:计算机科学与技术
班级:
姓名:
学号:
指导教师:
2013年01 月09日
目录
摘要 (2)
第一章概述 (3)
1.1 课程设计的目的 (3)
1.2 主要完成的任务 (3)
1.3 使用的开发工具 (3)
1.4解决的主要问题 (3)
第二章课程设计的基本概念和原理 (4)
第三章总体设计 (5)
第四章详细设计 (6)
4.1数据结构 (6)
4.2具体数据结构和模块设计简要说明 (6)
4.3 程序相关数据 (6)
第五章短作业优先调度的算法实现 (9)
第六章设计结果及分析 (16)
总结 (20)
参考文献 (21)
评分表 (22)
摘要
在多道程序环境下,主存中有着多个进程,其数目往往多于处理机数目。这就要求系统能按某种算法,动态地把处理机分配给就绪队列中的一个进程,使之执行。分配处理机的任务是由处理机调度程序完成的。由于处理机是最重要的计算机资源,提高处理机的利用率及改善系统性能(吞吐量、响应时间),在很大程度上取决于处理机调度性能的好坏,因而,处理机调度便成为操作系统设计的中心问题之一。
在多道程序系统中,一个作业被提交后必须经过处理机调度后,方能获得处理机执行。对于批量型作业而言,通常需要经历作业调度和进程调度两个过程后方能获得处理机。作业调度是对成批进入系统的用户作业,根据作业控制块的信息,按一定的策略选取若干个作业使它们可以去获得处理器运行的一项工作。而对每个用户来说总希望自己的作业的周转时间是最小的,短作业优先(SJF)便是其中一种调度方法。
本次课程设计主要是模拟短作业优先(SJF)调度算法。
关键字:多道程序进程调度短作业优先(SJF)调度算法
第一章概述
1.1 课程设计的目的
加深对作业概念的理解,掌握短作业优先(SJF)算法,深入了解批处理系统如何组织作业、管理作业和调度作业,了解作业控制块的作用,以及作业控制块的内容和组织方式。
进行操作系统课程设计主要是在学习操作系统课程的基础上,在完成操作系统各部分实验的基础上,对操作系统的整体进行一个模拟,通过实践加深对各个部分的管理功能的认识,还能进一步分析各个部分之间的联系,最后达到对完整系统的理解。同时,可以提高运用操作系统知识解决实际问题的能力;锻炼实际的编程能力、开发软件的能力;还能提高调查研究、查阅技术文献、资料以及编写软件设计文档的能力。
1.2 主要完成的任务
本次课程设计主要的任务是用C语言来实现对N个进程采用短作业优先算法对进程调度进行模拟。
1.3 使用的开发工具
Microsoft Visual C++ 6.0
1.4解决的主要问题
随着计算机进入多道程序系统,如何分配CPU资源就成为了操作系统不可避免要面临的一个问题。计算机只有一个CPU,或者只有有限的CPU资源,当系统中有多个进程处于就绪状态,要竞争CPU资源时,操作系统就要负责完成如何分配资源的任务。在操作系统中,由调度程序来完成这一选择分配工作,调度程序所使用的算法即是调度算法,调度算法需要考虑的指标主要有尽量保证CPU资源分配的公平性,按照一定的策略强制执行算法调度;平衡整个计算机系统,尽量保持各部分都正处于忙碌状态。因此短作业优先算法就是一个较好的算法。
第二章课程设计的基本概念和原理
本次课程设计主要是采用短作业优先算法进程的进程调度过程。短作业优先调度算法,是指对短作业或短进程优先调度的算法。他们可以分别用于作业调度和进程调度,短作业优先的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将他们调入内存运行。而短进程优先调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给他,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机时再度重新调度。本程序采用了非抢占式短作业优先调度。而非抢占式这种方式,一旦把处理机分配给某进程后,便让该进程一直执行,直至该进程完成或发生某事件而被阻塞时,才再把处理机分配给其它进程,决不允许某进程抢占已经分配出去的处理机。这种调度方式的优点是实现简单,系统开销小,适用于大多数的批处理系统环境。但它难以满足紧急任务的要求——立即执行,因而可能造成难以预料的后果。因此,在要求比较严格的实时系统中,不宜采用这种调度方式。本课程设计主要是在满足要求多道单处理机的情况下进行短作业的优先调度。
本次课程设计主要是通过比较各个进程的优先级以及各进程所需要占用的CPU时间来确定哪个作业优先运行,短作业优先调度算法除了能保证优先级更高的作业优先运行外,还能使相同优先级的前提下,所需CPU时间最短的那个作业优先运行,次外,本次课程设计还增加了阻塞时间和被阻塞时间来对个进程的运行加以控制。
此次课程设计的总体流程图如下:
图1 总体流程图
4.1数据结构
每个用来标识进程的进程控制块PCB用结构来描述,包括以下字段:
进程标识数ID;进程优先数PRIORITY,并规定优先数越大的进程,其优先权越高;进程已占用的CPU时间CPUTIME;进程还需占用的CPU时间ALLTIME。当进程运行完毕时,ALLTIME变为0;进程的阻塞时间STARTBLOCK,表示当进程再运行STARTBLOCK个时间片后,进程将进入阻塞状态;进程被阻塞的时间BLOCKTIME,表示已阻塞的进程再等待BLOCKTIME 个时间片后,进程将转换成就绪状态;进程状态STATE;队列指针NEXT,用来将PCB排成队列。
在这个模拟程序中作业控制块PCB的数据结构类型可定义为:
Struct PCB{ //作业控制块
int ID ; //进程编号ID
int Priority; //进程优先级随机产生
int CPUtime; //进程占用CPU时间
int Alltime; //进程还需占用的CPU时间,随机产生
int Startblock;//进程的阻塞时间
int Blocktime; //进程被阻塞的时间
int state; //进程状态
struct PCB*next; //结构体指针
}
4.2具体数据结构和模块设计简要说明
(1)短作业优先算法:首先比较各进程的优先级,优先级越大的进程优先执行,在优先级相同的情况下,判断作业的alltime,alltime最小的最先执行,依次按照时间从小到大执行进程。
(2)数据结构(见详细设计)
(3)主函数模块
4.3 程序相关数据
假设在调度前,系统中有5个进程,它们的初始状态如下: