作业调度操作系统课程设计报告

合集下载

作业调度实验报告

作业调度实验报告

作业调度实验报告一、实验目的1.掌握作业调度的概念和基本原则;2.理解作业调度算法的原理和实现方式;3.熟悉作业调度过程中的各种参数和指标;4.进一步了解操作系统中的进程调度机制。

二、实验环境本次实验使用的操作系统环境为Windows平台。

三、实验内容1.实现一个简单的作业调度算法,根据作业的重要性和执行时间进行优先级排序;2.设计一个作业队列,模拟一系列作业的到达和执行过程;3.根据作业调度算法,将作业分配给CPU执行,并统计作业的等待时间、完成时间等指标;4.进行多次实验,比较不同调度算法之间的性能差异。

四、实验步骤1.首先,设计一个作业类,包括作业的名称、重要性、到达时间和执行时间等属性;2.定义一个作业队列,用于存储到达的作业,并按照到达时间进行排序;3.实现一个简单的作业调度算法,根据作业的重要性和执行时间进行优先级排序;4.设计一个CPU类,用于执行作业队列中的作业,并记录作业的等待时间、完成时间等指标;5.模拟一系列作业的到达和执行过程,将作业调度给CPU执行,并记录相关指标;6.分别使用不同的调度算法进行多次实验,比较各自的性能差异。

五、实验结果与分析通过多次实验,得到了不同调度算法下的作业等待时间、完成时间等指标,并进行了比较。

结果发现,在作业执行时间相同时,按照作业的重要性进行优先级排序的算法,能够使得较重要的作业尽早执行,因而整体的作业等待时间和完成时间较短。

而对于作业执行时间不一致的情况,采用短作业优先算法,可以使作业平均等待时间较短,但在一些较长的作业上可能会存在饥饿现象。

综合考虑作业的重要性和执行时间,采用带权重的优先级队列算法可以获得较好的调度效果。

六、实验总结通过本次实验,我深入了解了作业调度的概念、原理和实现方式。

通过对比不同调度算法的性能差异,对于实际的作业调度过程具有一定的指导意义。

此外,通过实验设计和代码实现,我也提高了编程和分析问题的能力。

总体而言,本次实验使我对操作系统中的作业调度有了更为深刻的理解,并提高了我的实践能力。

操作系统作业调度算法实验

操作系统作业调度算法实验

操作系统作业调度算法实验
操作系统作业调度算法实验可以让你更深入地理解作业调度的概念和方法,以下是实验的基本步骤和内容:
一、实验目的
掌握作业调度的基本概念和算法原理。

理解不同作业调度算法的特点和优缺点。

通过实验验证作业调度算法的正确性和性能。

二、实验内容
实验准备:准备一台计算机或模拟器,安装操作系统,并准备好实验所需的作业。

实验步骤:
(1)编写作业描述文件,包括作业的名称、到达时间、所需资源等信息。

(2)实现先来先服务(FCFS)、最短作业优先(SJF)、最高响应比优先(HRN)等作业调度算法,并编写相应的调度程序。

(3)将作业按照一定的顺序输入到调度程序中,并记录每个作业的执行时间、等待时间等参数。

(4)根据记录的数据计算平均周转时间、平均带权周转时间等指标,分析不同调度算法的性能差异。

(5)根据实验结果,分析不同调度算法的优缺点,并给出改进建议。

实验报告:整理实验数据和结果,撰写实验报告,包括实验目的、实验内容、实验步骤、实验结果、分析和结论等部分。

三、实验注意事项
在实验过程中,要注意保证作业的公平性,避免某些作业一直得不到执行的情况发生。

在实验过程中,要注意观察和记录每个作业的执行时间和等待时间等参数,以便后续的分析和比较。

在实验过程中,要注意保证系统的稳定性和可靠性,避免出现意外情况导致实验结果不准确。

在实验过程中,要注意遵守实验室规定和操作规程,确保实验过程的安全和顺利进行。

操作系统实验报告作业调度

操作系统实验报告作业调度

操作系统实验报告作业调度操作系统实验报告:作业调度引言作业调度是操作系统中的重要部分,它负责管理和调度系统中的各种作业,以最大化系统资源的利用率和提高作业的执行效率。

在本次实验中,我们将探讨作业调度的基本原理和实现方法,并通过实验验证其效果。

实验目的本次实验的主要目的是通过实际操作,了解作业调度的基本原理和实现方法,掌握作业调度的相关算法,并通过实验验证其有效性。

实验内容1. 实现作业调度的基本算法在本次实验中,我们将实现作业调度的基本算法,包括先来先服务(FCFS)、最短作业优先(SJF)、优先级调度(Priority Scheduling)和多级反馈队列调度(Multilevel Feedback Queue Scheduling)等。

通过编写代码,模拟这些算法的执行过程,并观察它们的效果。

2. 实验验证我们将设计一些测试用例,通过模拟作业的执行过程,分别使用不同的作业调度算法,并比较它们的执行效果。

通过实验验证,我们将得出不同算法的优劣势,并分析其适用场景。

实验结果经过实验验证,我们得出以下结论:1. 先来先服务(FCFS)算法适用于作业执行时间相对均匀的情况,但可能会导致平均等待时间较长。

2. 最短作业优先(SJF)算法能够最大程度地减少平均等待时间,但可能会出现作业饥饿现象。

3. 优先级调度(Priority Scheduling)算法能够根据作业的优先级进行调度,适用于有明确优先级需求的情况。

4. 多级反馈队列调度(Multilevel Feedback Queue Scheduling)算法能够根据作业的执行情况动态调整优先级,适用于各种类型的作业。

结论作业调度是操作系统中的重要组成部分,不同的作业调度算法适用于不同的场景。

通过本次实验,我们深入了解了作业调度的基本原理和实现方法,掌握了不同算法的优劣势,并通过实验验证了它们的有效性。

这将对我们进一步深入学习操作系统和提高系统性能有着重要的意义。

操作系统课程设计报告进程调度

操作系统课程设计报告进程调度

前言操作系统(Operating System, 简称OS)是管理和控制计算机硬件与软件资源旳计算机程序, 是直接运营在“裸机”上旳最基本旳系统软件, 任何其他软件都必须在操作系统旳支持下才干运营。

操作系统是顾客和计算机旳接口, 同步也是计算机硬件和其他软件旳接口。

操作系统旳功能涉及管理计算机系统旳硬件、软件及数据资源, 控制程序运营, 改善人机界面, 为其他应用软件提供支持, 让计算机系统所有资源最大限度地发挥作用, 提供多种形式旳顾客界面, 使顾客有一种好旳工作环境, 为其他软件旳开发提供必要旳服务和相应旳接口等。

事实上, 顾客是不用接触操作系统旳, 操作系统管理着计算机硬件资源, 同步按照应用程序旳资源祈求, 分派资源, 如: 划分CPU时间, 内存空间旳开辟, 调用打印机等。

操作系统旳重要功能是资源管理, 程序控制和人机交互等。

计算机系统旳资源可分为设备资源和信息资源两大类。

设备资源指旳是构成计算机旳硬件设备, 如中央解决器, 主存储器, 磁盘存储器, 打印机, 磁带存储器, 显示屏, 键盘输入设备和鼠标等。

信息资源指旳是寄存于计算机内旳多种数据, 如系统软件和应用软件等。

操作系统位于底层硬件与顾客之间, 是两者沟通旳桥梁。

顾客可以通过操作系统旳顾客界面, 输入命令。

操作系统则对命令进行解释, 驱动硬件设备, 实现顾客规定。

本次课程设计我们将对上学期所学旳知识进行系统旳应用, 而达到巩固知识旳作用目录1问题概述 (2)2需求分析 (2)3 概要设计 (2)3.1重要功能 (2)3.2 模块功能构造 (3)3.3 软硬件环境 (3)3.4数据构造设计 (3)4 具体设计 (4)4.1“先来先服务(FCFS)调度算法” (4)4.2“短进程调度算法(SPF)” (7)4.3“高响应比优先调度算法” (10)4.4“优先级调度(非抢占式)算法” (13)5 系统测试及调试 (15)5.1测试 (15)5.2调试过程中遇到旳问题 (16)6 心得体会 (17)7 参照文献 (18)8 附录 (19)1问题概述编写一种进程调度程序, 容许多种进程并发执行。

操作系统课程设计---作业调度模拟

操作系统课程设计---作业调度模拟

操作系统课程设计---作业调度模拟《操作系统课程设计作业调度模拟》在计算机科学领域,操作系统是管理计算机硬件与软件资源的核心系统,而作业调度则是操作系统中的一个关键环节。

作业调度的主要任务是根据一定的策略,将系统中的作业合理地分配到处理机上执行,以提高系统的资源利用率和作业的执行效率。

本次课程设计的目标就是模拟实现一个简单的作业调度系统,通过对作业调度算法的设计和实现,深入理解操作系统中作业调度的原理和机制。

首先,让我们来了解一下作业调度的基本概念和常见的调度算法。

作业调度的主要目标是在多个作业之间合理地分配处理机资源,以满足不同作业的执行需求。

常见的作业调度算法包括先来先服务(FCFS)、短作业优先(SJF)、优先级调度、高响应比优先调度等。

先来先服务算法是最简单的调度算法,它按照作业到达系统的先后顺序进行调度。

这种算法的优点是实现简单、公平,但缺点是对于长作业可能会导致短作业长时间等待,从而影响系统的整体性能。

短作业优先算法则优先调度执行时间短的作业。

这种算法能够有效地减少作业的平均等待时间,提高系统的吞吐量,但可能会导致长作业长时间得不到调度,出现“饥饿”现象。

优先级调度算法为每个作业赋予一个优先级,系统根据优先级的高低来进行调度。

优先级可以根据作业的紧急程度、重要性等因素来确定。

这种算法能够灵活地满足不同作业的需求,但需要合理地设置优先级,否则可能会导致调度的不公平。

高响应比优先调度算法则综合考虑了作业的等待时间和执行时间,通过计算响应比来决定调度顺序。

响应比的计算公式为:响应比=(等待时间+执行时间)/执行时间。

这种算法在一定程度上避免了短作业优先算法中长作业的“饥饿”问题,同时也能保证短作业的优先调度。

在本次课程设计中,我们选择使用 C 或 C++语言来实现作业调度模拟系统。

系统的主要功能包括作业的创建、作业队列的管理、调度算法的实现以及作业执行情况的输出。

为了实现作业的创建,我们定义了一个作业结构体,其中包含作业的编号、到达时间、执行时间、优先级等信息。

2023年操作系统作业调度实验报告

2023年操作系统作业调度实验报告

实验二作业调度实验题目1、编写并调试一个单道解决系统的作业等待模拟程序。

作业调度算法:分别采用先来先服务(FCFS),最短作业优先(SJF)的调度算法。

(1 )先来先服务算法:按照作业提交给系统的先后顺序来挑选作业,先提交的先被挑选。

(2)最短作业优先算法:是以进入系统的作业所提出的“执行时间”为标准,总是优先选取执行时间最短的作业。

二.实验目的:本实验规定用高级语言(C语言实验环境)编写和调试一个或多个作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解三.实验过程〈一〉单道解决系统作业调度1)单道解决程序作业调度实验的源程序:zuoye.c 执行程序:zu o y e.exe2)实验分析:1、由于在单道批解决系统中,作业一投入运营,它就占有计算机的一切资源直到作业完毕为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的CP U时限等因素。

2、每个作业由一个作业控制块JCB表达,JCB可以包含如下信息:作业名、提交时间、所需的运营时间、所需的资源、作业状态、链指针等等。

作业的状态可以是等待W(Wait)、运营R(Run)和完毕F(Finish)三种状态之一。

每个作业的最初状态else i f (p->n e e d time<min->need t ime) m in=p; p= p ->next;( while (p!=NULL);i f (iden) {i—;/ / pr i n tf ("\nt i m e =%d: \ t no JCB sub mib.. . wait . . . t ime);tim e s++;i f ( times> 10 0) {prin t f("\nru n t ime i s too Ion g . .. error z,) ;g etc h () ; ))e 1 s e{ru n ning(m i n, m) ;//调用running ()函数}} //forf i na 1 (); 〃调用r u nn i ng()函数)voi d fefs (int m)〃先来先服务算法(int i, iden;syst e m ("cl s ");i ni t a 1 ();f or(i=0;i<n;i++)(p= r ea d y; i d en=l;do{if (p-> s tate= = , W* & &p ->reach t i me<=t i mes) i d e n=0:i f (i d e n )p= p -> n ext;}while(p!=NULL&&iden);if (i d on){i——;prin tf(〃\ n没有满足规定的进程,需等待”);t imes++;i f (time s >1 0 0 ) {prin t f ("\n 时间过长");getch () ;})e 1 se{runn i ng(p, m); 〃调用r u nn i n g ()函数))final () ;//调用ru n n i n g ()函数}void muneO{int m;s y s tem (〃 c 1 s〃);p r i n t f (z/\ n\n\t\t *** 火 * ****** * ***** * ***** *** *** * *** * **** ***** **\ t \ t\n ");P rintf ('\t \ t \ t\t 作业调度演示\ n ");pr i ntf( " \t\t^ ***** * * *** * *** * ******** * * **** * ******** * * *** * \t\P r intf(*\n\n\n\t\ t \tl.先来先服务算法.;pr i nt f ("\n\t\ t \ t2.最短作业优先算法.;printfC\n\ t \ t \t3.响应比高者优先算法");prin t f ( ° \0.退出程序.;P rintfC \n\n\t \t\ t \t 选择所要操作:");s c anf (*%d*, &m);sw i tc h (m)(c ase 1:f c f s (m);getchO ;s y stem("c 1 s");mune();brea k ;c a se 2 :sjf (m):getch ();system ( " cis*);mune ();break;case 3 :hr n (m);g e t c h ();sys t em("cls");mune ();br e a k ;case 0:system ("cis");break;d e f a u 1 t :pr intf(〃选择错误,重新选择getchO ;system ("c Is");muneO ;))main ()//主函数(i niz e ();muneO ;)5)调试结果:i.选择操作的界面程课件'计算机操作系统联作系统实验八作业调度\zuoye.exe ,作业调度演示.先来先服务算法.1 .最短企业优先算法.2 .响应居意者优先萱法 4战出程序.选择所要操作:2.输入操作初始信息:c 「E:\课程课件'计算机》3 .先来先服务算法作业调度结果:(调度顺序:a -> b ->c->d->e )输入作业数:5输入作业数:5太人作业名:a7、侬、|到达时间:0要运行的时间:4 必法崎松时间其要运行的时间:3植入作业名:c 作业默认到达时间:2 曲人作批要运行的时间;5 植入作业名:d 伟业默认到达时间:3 曲入作要运行的时间;2 检入作业名:e 伟业默认到达时间;4 输入作业要运行的时间;4作业证在运行,估计其运行情况: 开始运宜时刻:。

作业调度算法模拟系统课程设计报告

作业调度算法模拟系统课程设计报告

操作系统课程设计(学年设计、学年论文)任务书操作系统课程设计说明书学院名称:计算机与信息工程班级名称: 2011级网络工程2班学生姓名:童玉龙周速吴明诏汪泽王边学号: 2011211299 2011211346 2011211318 2011302 2011211303 题目:作业调度算法模拟系统指导教师姓名:张燕玲起止日期: 2013年6月3日~2013年6月30日第一部分:正文部分一、选题背景操作系统课程设计是集中实践性环节之一,是学习完《操作系统》课程后进行的一次全面的综合练习。

本次课程设计级要求学生达到熟练掌握操作系统的基本理论知识;掌握不同的调度算法;能够利用所学的基本编程知识,实现课程章节中涉及到的一些基本算法,从而加深理论知识的理解,树立掌握操作系统中各种作业调度算法。

二、设计思路作业调度的实质是一种资源分配,调度算法是指根据系统的资源分配策略所规定的额资源分配算法。

为了理解和掌握先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)三种算法,可以做如下工作;1.设置作业形式,应包含如下信息:作业号、作业到达时间、作业要求服务时间、等待时间、开始运行时间、结束运行时间、周转时间、带权周转时间、优先权和是否已经完成;2. 设置一个作业数量num;3.分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法对队列中的作业进行调度;4.先来先服务(FCFS)对先来的作业优先处理;5.最短作业优先(SJF)对已就绪作业进行短作业优先服务;6.响应比=(等待时间+需要服务时间)/需要服务时间,响应比高者优先(HRN)是对已就绪作业进行响应比高者优先服务,以免一些程序长时间不能被执行;7.对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,以比较各种算法优劣。

三、过程论述3.1模拟实现作业调度算法中三种算法的简介该三种算法包括:FCFS(先来先服务算法)、SJF(短作业优先算法)、HRN(最高响应比优先算法)。

操作系统实验报告作业调度

操作系统实验报告作业调度

操作系统实验报告作业调度操作系统实验报告:作业调度引言:操作系统是计算机系统中最核心的软件之一,它负责管理计算机的资源,为用户提供良好的使用环境。

在操作系统中,作业调度是非常重要的一部分,它决定了计算机如何合理地分配和调度各个作业的执行顺序,以提高计算机的效率和性能。

本实验报告将介绍作业调度的概念、调度算法以及实验结果。

一、作业调度的概念作业调度是指根据一定的策略和算法,将就绪队列中的作业按照一定的顺序分配给处理器,使得计算机系统能够充分利用资源,提高系统的吞吐量和响应时间。

作业调度的目标是实现公平性、高效性和平衡性。

二、作业调度的算法1. 先来先服务(FCFS)调度算法FCFS调度算法是最简单的调度算法之一,它按照作业的到达顺序进行调度,先到达的作业先执行。

这种算法的优点是简单易实现,但是可能会导致长作业等待时间过长,造成资源浪费。

2. 最短作业优先(SJF)调度算法SJF调度算法是根据作业的执行时间来进行调度,执行时间短的作业先执行。

这种算法能够最大程度地减少平均等待时间,提高系统的响应速度,但是可能会导致长作业长时间等待。

3. 优先级调度算法优先级调度算法是根据作业的优先级来进行调度,优先级高的作业先执行。

这种算法可以根据不同的需求设置不同的优先级,但是可能会导致低优先级的作业长时间等待。

4. 时间片轮转调度算法时间片轮转调度算法是将处理器的执行时间划分为多个时间片,每个作业在一个时间片内执行,时间片用完后,将处理器分配给下一个作业。

这种算法可以实现公平性,但是可能会导致长作业等待时间过长。

三、实验结果与分析在本次实验中,我们使用了不同的作业调度算法,并对其进行了性能测试。

测试结果显示,FCFS算法在平均等待时间方面表现较差,而SJF算法和优先级调度算法在平均等待时间方面表现较好。

时间片轮转调度算法能够实现公平性,但是可能会导致长作业等待时间过长。

结论:作业调度是操作系统中的重要组成部分,合理的作业调度算法能够提高计算机系统的效率和性能。

作业调度设计报告(多道)Word版

作业调度设计报告(多道)Word版

作业调度(多通道)课程设计报告一、目的要求:用高级语言编写和调试一个或多个作业调度的模拟程序,以加深对作业调度算法的理解。

二、详细设计:在多通道批处理系统中,作业的运行除了考虑作业之间的优先关系之外,还必须考虑系统能否为其所需的资源分配资源。

因为在多通道批处理系统中同时有不只一道作业在CPU中运行,这样就会导致某个作业需要的资源正在被另一个作业占用,这样就会导致无法分配资源的作业进入等待状态,直到该资源被其它作业释放后才能重新激活。

①、作业调度算法该作业调度系统的调度算法是基于优先级的调度算法。

在作业提交后按预先设定的优先级的高低依次插入到就绪队列(ready),但在系统运行过程中,除了考虑优先级外(即优先级高只是表明该作业能较先运行),同时还应该考虑该作业所需的资源是否能够被分配到。

②、为作业分配资源在这里采用这样的方法判断资源能否分配:查看该作业运行所需的第一个资源,然后在系统资源中查看该资源是否还有空闲的,有则表示该资源可以插入到运行队列(run)中,准备在下一个时间片中运行。

③、设置同时运行的最大并行度这里设置一个量maxrun,这个量是系统允许同时并行运行的作业数量,当运行队列中的作业数目达到最大值maxrun后,即使某作业所需的资源系统还有空闲的,也不再允许继续分配。

④、作业模块每个作业由一个作业控制块JCB控制,相关信息将在代码中将详细给出。

⑤、所需资源模块每个作业的JCB模块中有个所需资源的链,其结构用needsource表示,相关信息将在代码中将详细给出。

⑥、系统资源模块(systemsource)将系统拥有的各个资源及其的数目链成链,在系统运行过程中通过这个链就可以查询某作业需要的资源系统是否可以分配。

每当为某作业分配了某个资源后,该资源的数目减1,而当某作业释放了某个资源后,该资源的数目又将加1。

相关信息将在代码中将详细给出。

三、调度算法流程图如下:作业调度的详细过程如下:四、程序代码如下:#include <iostream.h>#include <stdlib.h>#include "conio.h"#define GetSpace(type) (type*)malloc(sizeof(type)) //空间分配函数#define NULL 0#define sourcenum 8 //系统拥有的各种同类资源数目#define maxrun 3 //定义在CPU中能同时运行的作业总数char syssourcename[sourcenum] = {'A','B','C','D','E','F','G','H'};//系统资源名称int sournum[sourcenum] = {1,1,1,1,1,1,1,1}; //对应的系统资源数量int systemtime = 0; //系统时间,开始为零int runjcb = 0; //在运行队列中的作业数量,开始为零int JCBNum = 0; //总的作业数int JCBTime = 0; //总的周转时间float JCBTime_1 = 0; //总的带权周转时间struct systemsource{ //系统资源,包括名称和数量char name;int number;systemsource * link;}*systemsor;struct needsource{ //作业所需资源链表结构char name;needsource *link;}*sourcelink;struct jcb{ //作业结构char name[10]; //作业名称int ptime; //提交时间int rtime; //开始运行时间int ftime; //完成时间int super; //优先级int needtime; //所需运行时间needsource * source; //所需资源链表char state; //作业状态bool runflag; //标识该作业运行与否jcb * link;}*wait=NULL,*ready=NULL,*run=NULL,*p;typedef struct systemsource SYSTEM;typedef struct needsource NEED;typedef struct jcb JCB;//-----------------------------------------------------------------------------void init() //将系统资源名称和对应的资源数目放到系统资源队列中{systemsource *fir,*sec;for(int i=0;i < sourcenum;i++){fir = GetSpace(SYSTEM);fir = new SYSTEM;fir->name = syssourcename[i]; //系统资源名称fir->number = sournum [i]; //对应的数量fir->link = NULL;if(i==0)systemsor = fir; //生成系统资源链表systemsorelsesec->link = fir;sec = fir;}}//----------------------------------------------------------------------------- void sort(bool BOOL){//按作业的优先级的高低依次插入到相关队列//当BOOL为true时表明要插入到就绪队列,否则插入到等待队列jcb *fir,*sec;bool ins = true;if(BOOL) //插入就绪队列fir = ready;elsefir = wait;if((fir==NULL) || (p->super) > (fir->super)){p->link = fir;fir = p;if(BOOL)ready = fir;elsewait = fir;}else{sec = fir->link ;while(sec != NULL){if((p->super) > (sec->super)){p->link = sec;fir->link = p;sec = NULL;ins = false;}else{fir=fir->link;sec=sec->link;}}if(ins)fir->link = p;}}//----------------------------------------------------------------------------- void input(){int num;cout<<"\n输入作业个数: ";cin>>num;JCBNum += num; //将新加的作业个数加到总的作业数中for(int i=0; i<num; i++){p = GetSpace(JCB);p = new JCB;cout<<"\n\n输入作业 "<<i+1<<" 的名称: ";cin>>p->name ;cout<<"\n输入该作业的优先级: ";cin>>p->super;cout<<"\n输入该作业所需的资源数目: ";cin>>p->needtime;needsource *fir,*sec;systemsource *cur;sec = p->source;for(int j=0; j<p->needtime ; j++){bool BOOL=true;fir = GetSpace(NEED);while(BOOL){cur = systemsor; //指向系统资源链表cout<<"\n输入第 "<<j+1<<" 个资源的名称:";cin>>fir->name;fir->link = NULL;while(cur != NULL) //保证输入的资源是系统有的{if(fir->name == cur->name ) //输入的是合法资源{BOOL = false;break;}elsecur = cur->link ;}if(cur == NULL) //输入的是非法资源cout<<"\n该资源不是系统资源,请重新输入...\n\n";}if(j==0)p->source = fir;elsesec->link = fir;sec = fir;}p->ptime = systemtime; //提交时间为当前系统时间p->ftime = p->rtime = 0;p->runflag = false; //开始时运行状态为否p->state = 'O'; //状态为就绪Orderp->link = NULL;sort(true);//参数为true表示插入就绪链表,当参数为false是表示要插入等待链表}}//----------------------------------------------------------------------------- int space() //查看就绪队列是否为空,返回其长度{int len=0; jcb *fir;fir = ready;while(fir != NULL){len++;fir=fir->link ;}return len;}//----------------------------------------------------------------------------- void attemper() //为作业分配资源函数{jcb *fir,*sec,*thr;systemsource *res;if(run != NULL) //如果有作业正在运行的话,优先为它们分配资源{sec = fir = run;while(fir != NULL){res = systemsor; //指向系统资源链表while(res != NULL){if(fir->source->name == res->name){//找到运行队列中所有作业需要的资源//并查看系统能否为其分配资源if(res->number > 0) //可以为该作业分配资源{res->number --; //资源数减1sec = fir; //继续分配队列中其它作业需要的资源fir = fir->link;}else //不能分配,插入等待队列{if(fir == run) //如果的运行队列的队首{run = run->link ;p= fir;sec = fir = run;}else{sec->link = fir->link;p=fir;fir = fir->link;}p->link = NULL;p->state = 'W'; //作业状态为等待Waitp->super --; //优先级减1,从而保证其它作业能得到资源runjcb --; //运行的作业数减1sort(false); //插入等待队列}break;}elseres = res->link ;}}}//为就绪队列中的作业分配资源sec = fir = ready;jcb *cur;while(runjcb <= maxrun && fir != NULL) //运行队列中的总数小于允许同时运行的总数{res = systemsor; //指向系统资源链表while(res != NULL){if(fir->source->name == res->name){if(res->number > 0) //能够为该作业分配资源{res->number --; //对应资源数目减1runjcb ++; //运行队列作业树木加1thr = fir;cur = run;//将该作业移出就绪队列if(fir == ready){ready = ready->link ;sec = fir = ready;}else{sec->link = fir->link ;fir = fir->link ;}thr->link = NULL;thr->state = 'R';if(thr->runflag == false){//该作业第一次运行,开始运行时间等于当前系统时间thr->rtime = systemtime;thr->runflag = true; //表示已经运行}//插入到运行队列的队尾if(run == NULL)run = thr;else{while(cur->link != NULL) //找到运行队列的队尾cur = cur->link ;cur->link = thr; //在队尾插入该作业}}else{//准备为就绪队列中的下一个作业分配资源sec = fir;fir = fir->link;}break; //跳处内while循环}res = res->link ; //指向系统资源链表的下一个资源,继续查找}}}//----------------------------------------------------------------------------- void display(jcb *pr){needsource *res;cout<<"\n\t"<<pr->name<<"\t"<<pr->ptime<<"\t"<<pr->rtime<<"\t"<<pr->ftime<<"\t"<<pr->super<<"\t"<<pr->state<<"\t"<<pr->source->name<<endl;res = pr->source->link;while(res != NULL){ //将作业所需的资源列表逐一打印出来cout<<"\t\t\t\t\t\t\t"<<res->name<<endl;res = res->link;}cout<<endl;}//----------------------------------------------------------------------------- void check() //打印在运行队列,就绪队列和等待队列中的作业的信息{jcb *pr;if(run == NULL)cout<<"\n 当前在运行队列没有任何作业...\n";else{cout<<"\n 当前在运行队列的作业参数如下...\n\n";cout<<"\tname\tptime\trtimr\tftime\tsuper\tstate\tsource"<<endl;pr = run;while(pr != NULL){display(pr); //打印作业信息函数pr = pr->link ;}}if(ready == NULL)cout<<"\n 当前在就绪队列没有任何作业...\n";else{cout<<"\n 当前在就绪队列的作业参数如下...\n\n";cout<<"\tname\tptime\trtimr\tftime\tsuper\tstate\tsource"<<endl;pr = ready;while(pr != NULL){display(pr); //打印作业信息函数pr = pr->link ;}}if(wait == NULL)cout<<"\n 当前在等待队列没有任何作业...\n\n";else{cout<<"\n 当前在等待队列的作业参数如下...\n\n";cout<<"\tname\tptime\trtimr\tftime\tsuper\tstate\tsource"<<endl;pr = wait;while(pr != NULL){display(pr); //打印作业信息函数pr = pr->link ;}}cout<<endl;}//----------------------------------------------------------------------------- void activation(char ResName) //激活在等待队列中的作业{//ResName为刚刚释放的资源的名称//在等待队列中找到某作业所需资源队列的第一个资源名称跟其相同的,激活之jcb *fir,*sec;if(wait == NULL) //等待队列为空,返回return;if(wait->source->name == ResName) //等待队列中第一个作业就是需要该资源的作业 //激活之{p = wait;wait = wait->link ;p->state = 'O'; //作业状态为就绪Orderp->link = NULL;sort(true); //将该作业插入到就绪队列中}else{//在等待队列中查找需要该资源的作业fir = wait;sec=fir->link ;while(sec != NULL){if(sec->source->name == ResName){p = sec;fir->link = sec->link ;p->state = 'O';p->link = NULL;sort(true); //将该作业插入到就绪队列中break;}else{fir = sec;sec = sec->link ;}}}}//------------------------------------------------------------------------------------------------void destory(jcb *pr) //打印运行完成的作业信息,并撤消之{pr->ftime = systemtime;cout<<"\n\n\n 作业 "<<pr->name<<" 已经完成...\n\n";cout<<" 相关参数如下:"<<endl;cout<<"\n提交时间: "<<pr->ptime;cout<<"\n---------------------------";cout<<"\n开始运行时间: "<<pr->rtime;cout<<"\n---------------------------";cout<<"\n完成时刻: "<<pr->ftime;cout<<"\n---------------------------";cout<<"\n所需运行时间: "<<pr->needtime;cout<<"\n---------------------------";cout<<"\n实际运行时间: "<<pr->ftime-pr->rtime; //实际运行时间等于完成时刻//开始运行时刻cout<<"\n---------------------------";cout<<"\n周转时间: "<<pr->ftime-pr->ptime;//周转时间德育完成时刻-提交时刻cout<<"\n---------------------------";cout<<"\n带权周转时间 "<<float(pr->ftime-pr->ptime)/float(pr->needtime);//带权周转时间等于周转时间/所需的运行时间cout<<"\n---------------------------"<<endl;JCBTime += systemtime-pr->ptime; //将该作业的周转时间加入到作业总周转时间JCBTime_1 += float(JCBTime)/float(pr->needtime); //更新总带权周转时间cout<<endl;delete pr;}//----------------------------------------------------------------------------- void running() //运行函数//每运行一次相当于把运行队列中所有作业所需的第一个资源从所需资源队列中撤消掉{jcb *fir;systemsource *res; //系统资源needsource *abandon;if(run == NULL) //运行队列为空,没有运行作业return;fir = run;while(fir != NULL){res = systemsor; //res指向系统资源链表的表头while(res != NULL){if(fir->source->name == res->name) //运行的结果是该作业取消所需的第一个资源{abandon = fir->source; //abandon为需要释放的资源fir->source = fir->source->link;res->number ++; //释放该作业占用的但已经完成的资源activation(res->name); //激活等待队列中需要该资源的作业delete abandon;break;}elseres = res->link ;}fir = fir->link ;}}//----------------------------------------------------------------------------- void displayResult() //检查是否有运行完的作业{jcb *fir,*sec,*thr;if(run == NULL) //运行队列为空,返回return;fir = sec = run; //在运行队列中找到已经完成的作业while(fir != NULL){if(run->source == NULL) //所需资源链表为空,该作业已经完成{thr = run;run = run->link ;fir = sec = run;destory(thr); //打印该作业的参数信息并撤消该作业runjcb --; //当前运行队列的作业数减1cout<<"\n按任意键继续..."<<endl;getch();}elseif(fir->source == NULL){thr = fir;sec->link = fir->link ;fir = fir->link ;destory(thr); //打印该作业的参数信息并撤消该作业runjcb --; //当前运行队列的作业数减1cout<<"\n按任意键继续..."<<endl;getch();}else{sec = fir;fir = fir->link ;}}}//----------------------------------------------------------------------------- void main(){int len,h=0;bool flag = true;init(); //初始化系统资源,形成链表input(); //输入作业及其相关信息len = space();systemtime = 0; //开始系统时间确保是零while((len != 0) && (flag)){system("cls");cout<<"\n 当前运行的步数:"<< h+1<<endl;h++;attemper(); //作业调度check(); //查看当前作业的参数running(); //运行符合条件的作业systemtime ++; //系统时间加1cout<<"\n\n按任意键继续..."<<endl;getch();system("cls");displayResult(); //打印已经完成的作业参数if(ready == NULL){if(run == NULL)flag = false; //当运行队列和就绪队列都为空时,作业运行完成}}cout<<"\n\n 全部作业完成,当前系统时间为: "<<systemtime<<endl;cout<<"\n\n这组作业的平均周转时间:"<<float(JCBTime)/float(JCBNum)<<endl;cout<<"这组作业的平均带权周转时间: "<<JCBTime_1/float(JCBNum)<<endl;cout<<"\n\n 按任意键退出..."<<endl;getch();}五、系统演示⒈开始(初始化JCB)2.输入四个作业(A,B,C,D),它们所需的资源有冲突,调度算法第一次分配资源的情况如下:运行队列(最大并行度为3)就绪队列和等待队列:3.从运行队列中可以看到作业B和A在第二部都需要资源‘D‘,但系统的D资源只有一个,所以接下来B和A发生冲突,将优先极低的作业插入等待队列,如下:4.当有作业完成,打印其信息:5.该组作业全部完成:六、总结至此,作业调度(多通道)课程设计全部完成…刘金宏2006-5-18(注:可编辑下载,若有不当之处,请指正,谢谢!)。

(完整word版)操作系统作业调度实验报告-多道批处理

(完整word版)操作系统作业调度实验报告-多道批处理

计算机学院计算机科学与技术专业07 班姓名学号教师评定_________________实验题目作业调度一、实验目的本实验要求学生模拟作业调度的实现,用高级语言编写和调试一个或多个作业调度的模拟程序,了解作业调度在操作系统中的作用,以加深对作业调度算法的理解。

二、实验内容和要求1、为单道批处理系统设计一个作业调度程序(1)、编写并调试一个单道处理系统的作业调度模拟程序。

(2)、作业调度算法:分别采用先来先服务(FCFS),最短作业优先(SJF)的调度算法。

(3)、由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的CPU时限等因素。

(4)、每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源、作业状态、链指针等等。

作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种状态之一。

每个作业的最初状态总是等待W。

(5)、对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,并比较各种算法的优缺点。

2、模拟批处理多道操作系统的作业调度(1)写并调试一个作业调度模拟程序。

(2)作业调度算法:分别采用先来服务(FCFS)调度算法。

(3)在批处理系统中,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求,所需要的资源是否得到满足。

作业调度程序负责从输入井选择若干个作业进入主存,为它们分配必要的资源,当它们能够被进程调度选中时,就可占用处理机运行。

作业调度选择一个作业的必要条件是系统中现有的尚未分配的资源可满足该作业的资源要求。

但有时系统中现有的尚未分配的资源既可满足某个作业的要求也可满足其它一些作业要求,那么,作业调度必须按一定的算法在这些作业中作出选择。

操作系统作业调度实验报告

操作系统作业调度实验报告

操作系统作业调度实验报告昆明理⼯⼤学信息⼯程与⾃动化学院学⽣实验报告(2011 —2012学年第⼆学期)课程名称:操作系统开课实验室:信⾃楼 2012年4⽉ 10⽇⼀、实验⽬的通过编写进程管理的算法,要求学⽣掌握整个进程管理的各个环节,进程的数据结构描述,进程的各种状态之间的转换,以及进程的调度算法。

以加深对进程的概念及进程调度算法的理解,并且提⾼链表的应⽤能⼒,达到提⾼编程能⼒的⽬的。

⼆、所⽤仪器、材料(设备名称、型号、规格等)。

计算机⼀台,VC++ 6.0。

三、源程序:#include#include#include"assert.h"using namespace std;class Job{public:int m_runtime;//作业运⾏时间int m_level;//优先级int m_arrivenum;//作业到达次序int m_start;//作业开始时间int m_end;//作业结束时间Job* m_next;//指向下⼀个结点public:Job(){m_next=NULL;m_runtime=0;m_level=0;m_arrivenum=0;m_start=0;m_end=0;}~Job(){}};class JobList{public:JobList(){Head=new Job;assert(Head);length=0;int num,runtime,level,arrivenum;Job* pt,*st;st=Head;cout<<"请输⼊作业个数:";cin>>num;while(length{pt=new Job;assert(pt);cout<<"请输⼊第"<cin>>runtime>>level>>arrivenum;pt->m_runtime=runtime;pt->m_level=level;pt->m_arrivenum=arrivenum;st->m_next=pt;st=pt;length++;}}~JobList()//由于Job类调⽤⾃⼰的析构函数,故⽽此处不需要操作{}Job* GetHead(){return Head;}int GetLength(){return length;}private:Job* Head;int length;};void FCFS( JobList joblist){int timetag=0,i=0;Job* pt;while(i{pt=joblist.GetHead()->m_next;//头结点不⽤while(pt->m_arrivenum!=i){pt=pt->m_next;}pt->m_start=timetag;timetag+=pt->m_runtime;pt->m_end=timetag;i++;//下⼀作业}int overtime=0;pt=joblist.GetHead()->m_next;while(pt!=NULL){overtime+=(pt->m_end-pt->m_arrivenum);pt=pt->m_next;}cout<<"FCFS的平均作业周转时间为:"<<(double)overtime/joblist.GetLength()< }void SJF( JobList joblist){int tag,i=0,timetag=0;Job *pt,*st;pt=joblist.GetHead()->m_next;//pt->m_start=timetag;timetag+=pt->m_runtime;pt->m_end=timetag;pt->m_runtime=100;while(i<(joblist.GetLength()-1)){st=pt->m_next;tag=100;while(st)//找到最⼩{if(st->m_runtimetag=st->m_runtime;st=st->m_next;}st=pt->m_next;while(st->m_runtime!=tag)st=st->m_next;st->m_start=timetag;timetag+=st->m_runtime;st->m_end=timetag;st->m_runtime=100;//重新标记i++;//下⼀作业}int overtime=0;while(pt){overtime+=(pt->m_end);//-pt->m_arrivenum);pt=pt->m_next;}cout<<"SJF的平均周转时间为:"<<(double)overtime/joblist.GetLength()< void RR( JobList joblist){Job* pt;int timetag=0,remaintime=0;bool tag=true;pt=joblist.GetHead()->m_next;while(pt){remaintime+=pt->m_runtime;pt=pt->m_next;}while(tag){pt=joblist.GetHead()->m_next;while(pt){if(pt->m_runtime==0)pt=pt->m_next;else{timetag+=2;pt->m_runtime-=2;remaintime-=2;if(pt->m_runtime<0)//作业结束⾃⾏退出{pt->m_runtime=0;timetag--;}if(pt->m_runtime==0)pt->m_end=timetag;pt=pt->m_next;}}if(remaintime==0)tag=false;}pt=joblist.GetHead()->m_next;int overtime=0;while(pt){overtime+=pt->m_end;pt=pt->m_next;}cout<<"RR的平均周转时间为:"<<(double)overtime/joblist.GetLength()< }void HLF( JobList joblist)//优先级算法{int timetag=0,i=0,leveltag;Job* pt;while(i{leveltag=0;pt=joblist.GetHead()->m_next;while(pt)//找到最⾼优先级别的{if(pt->m_level>leveltag)leveltag=pt->m_level;pt=pt->m_next;}pt=joblist.GetHead()->m_next;while(pt->m_level!=leveltag){pt=pt->m_next;}pt->m_start=timetag;timetag+=pt->m_runtime;pt->m_end=timetag;pt->m_level=0;i++;}pt=joblist.GetHead()->m_next;int overtime=0;while(pt){overtime+=pt->m_end;pt=pt->m_next;}cout<<"HLF的平均作业周转时间为:"<<(double)overtime/joblist.GetLength()< }void main(){int choice;cout<<"请选择调度算法"<<cin>>choice;while(choice!=0){switch(choice){case 1:{cout<<"建⽴作业"<JobList myjoblist;FCFS(myjoblist);break;}case 2:{cout<<"建⽴作业"<JobList myjoblist;HLF(myjoblist);break;}case 3:{cout<<"建⽴作业"<JobList myjoblist;SJF(myjoblist);break;}case 4:{cout<<"建⽴作业"<JobList myjoblist;RR(myjoblist);break;}}cout<<"请选择调度算法"<<cin>>choice;}//FCFS(joblist);//HLF(joblist);//SJF(joblist);//RR(joblist);}四、程序截图:五、实验结果、分析和结论(误差分析与数据处理、成果总结等。

操作系统实验报告-作业调度

操作系统实验报告-作业调度

作业调度一、实验目的1、对作业调度的相关内容作进一步的理解。

2、明白作业调度的主要任务。

3、通过编程掌握作业调度的主要算法。

二、实验内容及要求1、对于给定的一组作业, 给出其到达时间和运行时间,例如下表所示:作业名 A B C D E F到达时间0 2 5 5 12 15服务时间 6 50 20 10 40 82、分别用先来先服务算法、短作业优先和响应比高者优先三种算法给出作业的调度顺序。

3、计算每一种算法的平均周转时间及平均带权周转时间并比较不同算法的优劣。

三、主要算法流程图开始响应比高者优先短作业优先先来先服务算法生成调度顺序队列计算平均周转时间及平均带权周转时间结束退出系统YN四、测试数据及运行结果测试数据workA={'作业名':'A','到达时间':0,'服务时间':6} workB={'作业名':'B','到达时间':2,'服务时间':50} workC={'作业名':'C','到达时间':5,'服务时间':20} workD={'作业名':'D','到达时间':5,'服务时间':10} workE={'作业名':'E','到达时间':12,'服务时间':40} workF={'作业名':'F','到达时间':15,'服务时间':8}运行结果先来先服务算法调度顺序:['A', 'B', 'C', 'D', 'E', 'F'] 周转时间:74.1666666667 带权周转时间:4.83333333333短作业优先算法调度顺序:['A', 'D', 'F', 'C', 'E', 'B']周转时间:44.8333333333带权周转时间:1.166********响应比高者优先算法调度顺序:['A', 'D', 'F', 'E', 'C', 'B']周转时间:48.1666666667带权周转时间:1.5五、代码#encoding=gbkworkA={'作业名':'A','到达时间':0,'服务时间':6,'结束时间':0,'周转时间':0,'带权周转时间':0}workB={'作业名':'B','到达时间':2,'服务时间':50}workC={'作业名':'C','到达时间':5,'服务时间':20}workD={'作业名':'D','到达时间':5,'服务时间':10}workE={'作业名':'E','到达时间':12,'服务时间':40}workF={'作业名':'F','到达时间':15,'服务时间':8}list1=[workB,workA,workC,workD,workE,workF]list2=[workB,workA,workC,workD,workE,workF]list3=[workB,workA,workC,workD,workE,workF]#先来先服务算法def fcfs(list):resultlist = sorted(list, key=lambda s: s['到达时间'])return resultlist#短作业优先算法def sjf(list):time=0resultlist=[]for work1 in list:time+=work1['服务时间']listdd=[]ctime=0for i in range(time):for work2 in list:if work2['到达时间']<=ctime:listdd.append(work2)if len(listdd)!=0:li = sorted(listdd, key=lambda s: s['服务时间'])resultlist.append(li[0])list.remove(li[0])ctime+=li[0]['服务时间']listdd=[]return resultlist#响应比高者优先算法def hrrn(list):time=0resultlist=[]for work1 in list:time+=work1['服务时间']listdd=[]ctime=0for i in range(time):for work2 in list:if work2['到达时间']<=ctime:work2['等待时间']=ctime-work2['到达时间']listdd.append(work2)if len(listdd)!=0:li = sorted(listdd, key=lambda s: (s['等待时间']+s['服务时间'])/s['服务时间'])resultlist.append(li[-1])list.remove(li[-1])ctime+=li[-1]['服务时间']listdd=[]return resultlist#调度顺序def shunxu(resultlist,miaoshu):print(miaoshu)ddsx=[]for work in resultlist:for d,x in work.items():if d.decode('gb2312')==u'作业名':ddsx.append(x)#print d.decode('gb2312')+":"+str(x) print(u'调度顺序:'+str(ddsx))turnaroundTime(resultlist)#平均周转时间及平均带权周转时间def turnaroundTime(resultlist):time=0for work in resultlist:work['结束时间']=work['服务时间']+timetime=work['结束时间']work['周转时间']=work['结束时间']-work['到达时间']work['带权周转时间']=work['周转时间'] / work['服务时间'] zzsj=0dqzzsj=0for work in resultlist:zzsj+=work['周转时间']dqzzsj+=work['带权周转时间']print('周转时间:'+str(zzsj*1.0/len(resultlist)))print('带权周转时间:'+str(dqzzsj*1.0/len(resultlist)))print('')shunxu(fcfs(list1),'先来先服务算法') shunxu(sjf(list2),'短作业优先算法') shunxu(hrrn(list3),'响应比高者优先算法')。

操作系统实验报告作业调度

操作系统实验报告作业调度

操作系统实验报告作业调度作业调度是操作系统中的一个重要组成部分,用于管理和分配计算机系统中的作业,确保系统可靠高效地运行。

作业调度算法的选择直接影响到系统的性能和资源利用率。

本实验通过对不同作业调度算法的理论分析和实际测试,探究它们的特点和优劣,最终找到适合特定场景的作业调度算法。

以下是本次实验的详细报告。

一、实验目的1.理解作业调度算法的原理和功能;2.掌握常用的作业调度算法;3.分析和比较不同作业调度算法的优缺点。

二、实验内容1. FIFO(First In First Out)作业调度算法;2. SJF(Shortest Job First)作业调度算法;3. RR(Round Robin)作业调度算法;4. HRN(Highest Response Ratio Next)作业调度算法。

三、实验过程1.FIFO作业调度算法FIFO算法是最简单的作业调度算法,按照作业提交的先后顺序进行调度。

首先将所有作业按照到达时间排序,然后按照顺序依次执行作业。

2.SJF作业调度算法SJF算法是根据作业的执行时间进行排序,优先执行执行时间最短的作业。

通过比较作业的执行时间,选择最短的作业进行执行。

3.RR作业调度算法RR算法是采用时间片轮转的方式进行调度。

每个作业分配一个时间片,当时间片用完后,将该作业移到队列的末尾继续执行。

时间片的长度可以根据需要进行调整。

4.HRN作业调度算法HRN算法是根据作业的响应比来确定调度顺序。

响应比由作业的等待时间和作业执行时间的比值来计算,响应比越大,优先级越高。

选择响应比最高的作业进行执行。

四、实验结果分析在本实验中,我们通过实际测试不同作业调度算法的性能来进行评估。

测试使用了一组模拟作业集,包括不同的作业执行时间和到达时间。

通过对比不同算法的实际表现1.FIFO算法的优点是简单易实现,但缺点是无法考虑作业的执行时间,因此可能导致平均等待时间较长。

2.SJF算法的优点是能够有效地减少平均等待时间,但缺点是对于长作业可能导致短作业长时间等待。

操作系统实验报告作业调度

操作系统实验报告作业调度

操作系统实验报告:作业调度1. 引言作业调度是操作系统中的一个重要概念,它涉及到如何合理地安排计算机系统中的作业执行顺序,以最大程度地提高系统的效率和性能。

本文将介绍作业调度的基本概念和主要算法,以及在实验中的应用。

2. 作业调度的概念作业调度是指根据一定的策略和算法,按照一定的顺序从作业队列中选取作业,将其分配给可用资源来执行的过程。

作业调度的目标是实现公平、高效的任务分配,以提高系统的整体性能。

3. 作业调度算法3.1 先来先服务(FCFS)先来先服务是最简单的作业调度算法,即按照作业提交的顺序来执行。

当一份作业到达系统后,它将被放入作业队列的末尾。

一旦当前执行的作业完成,系统将选择队列中的下一个作业来执行。

3.2 短作业优先(SJF)短作业优先算法是根据作业的执行时间来进行调度,执行时间越短的作业优先级越高。

当一个作业进入系统时,系统会检查队列中的所有作业,并选择执行时间最短的作业来执行。

3.3 优先级调度优先级调度算法是根据作业的优先级来进行调度,优先级越高的作业优先级越高。

每个作业都会被分配一个优先级值,系统会按照优先级从高到低的顺序来执行作业。

3.4 时间片轮转调度时间片轮转调度算法将作业分为多个时间片,每个时间片的执行时间相等。

当一个作业进入系统时,系统会分配给它一个时间片,如果在时间片内作业没有完成,则将其放回队列的末尾,并执行下一个作业。

4. 实验中的应用在操作系统实验中,作业调度是一个重要的实验内容。

通过实验,我们可以深入了解不同调度算法的特点和适用场景。

实验中,我们可以使用模拟器来模拟作业调度的过程。

我们可以创建一个作业队列,然后使用不同的调度算法来执行这些作业,并记录它们的执行时间和系统的吞吐量。

通过实验,我们可以比较不同算法在不同场景下的表现,选择最适合当前系统的作业调度算法。

5. 结论作业调度是一个重要的操作系统概念,它决定了系统的性能和效率。

在本文中,我们介绍了作业调度的基本概念和常用算法,并讨论了在实验中的应用。

作业调度系统实验报告

作业调度系统实验报告

一、实验目的1. 理解作业调度系统的基本原理和流程。

2. 掌握作业调度算法的设计与实现。

3. 评估不同作业调度算法的性能。

二、实验环境1. 操作系统:Windows 102. 编程语言:Python3.73. 开发工具:PyCharm三、实验内容1. 作业调度系统概述2. 作业调度算法设计3. 作业调度系统实现4. 性能评估与分析四、实验步骤1. 作业调度系统概述(1)作业调度系统定义:作业调度系统是计算机系统中负责将作业分配到各个处理器(CPU)进行执行的部分。

(2)作业调度系统功能:作业调度系统负责接收作业、分析作业、选择作业执行、监控作业执行、处理作业异常等。

2. 作业调度算法设计(1)先来先服务(FCFS)算法:按照作业提交的顺序进行调度。

(2)短作业优先(SJF)算法:优先调度预计运行时间最短的作业。

(3)最高响应比优先(HRRN)算法:综合考虑作业的等待时间和估计运行时间,优先调度响应比最高的作业。

(4)轮转调度(RR)算法:将作业分配到各个处理器进行执行,每个处理器分配固定的时间片,时间片结束后进行抢占调度。

3. 作业调度系统实现(1)创建作业类:定义作业的属性,如作业ID、预计运行时间、实际运行时间等。

(2)创建调度器类:实现作业调度算法,包括作业接收、分析、选择、监控和异常处理等功能。

(3)创建处理器类:模拟CPU执行作业,记录作业执行时间。

(4)创建模拟环境:模拟多个作业提交到系统中,调度器根据算法进行调度,处理器执行作业。

4. 性能评估与分析(1)性能指标:平均等待时间、平均周转时间、吞吐量等。

(2)评估方法:通过模拟不同作业调度算法在相同作业集合下的性能,对比分析其优缺点。

(3)结果分析:根据实验结果,分析不同作业调度算法在处理不同作业集合时的性能表现。

五、实验结果与分析1. FCFS算法(1)平均等待时间:20ms(2)平均周转时间:25ms(3)吞吐量:0.82. SJF算法(1)平均等待时间:15ms(2)平均周转时间:20ms(3)吞吐量:0.93. HRRN算法(1)平均等待时间:18ms(2)平均周转时间:23ms(3)吞吐量:0.854. RR算法(1)平均等待时间:17ms(2)平均周转时间:22ms(3)吞吐量:0.86根据实验结果,SJF算法在处理短作业集合时具有较好的性能,平均等待时间和周转时间较短;而FCFS算法在处理长作业集合时性能较好,平均等待时间和周转时间较长。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

阳工程学院课程设计设计题目:作业调度系别信息工程系班级软本094 起止日期:2011年5月23日起——至2011年5月27日止阳工程学院课程设计任务书课程设计题目:作业调度系别信息工程系班级软本094 学生矫娜雨薇缪斯吕岩孟昭鹏学号 07 08 09 22 23指导教师柳、吕海华职称副教授、讲师课程设计进行地点:实训F 任务下达时间: 2011 年 5 月 3 日起止日期:2011 年 5 月 23 日起—至2011年5月27 日止教研室主任欣 2011 年5月12日批准一、课程设计的原始资料及依据查阅有关计算机操作系统的教材、实验指导书等资料,进一步熟悉操作系统的基本原理,算法的设计思想。

作业调度是批处理操作系统中的重要容。

本设计要求用高级语言编写和调试一个简单的作业调度程序。

通过本设计可以加深理解有关作业控制块、作业队列的概念,并体会和了解先来先服务、短作业优先和响应比高者优先作业调度算法的具体实施办法。

加深理解有关作业控制块、作业队列的概念和状态转换。

二、课程设计主要容及要求1.认真阅读资料,掌握作业调度的原理和相关算法的思想。

2.要求在设计的过程中,建立清晰的层次结构。

3.画出主要的功能结构图和主要算法的流程图。

4.设计作业控制块JCB表结构,分别适用于先来先服务、短作业优先和响应比高者优先调度算法。

JCB结构通常包括以下信息:作业名,作业到达系统的时间,作业要求服务时间,作业的完成时间等。

根据调度算法的不同,JCB结构的容可以作适当的增删。

5.建立作业并送入后备队列。

对两种不同算法编制入链子程序。

6.分别显示三种不同算法下,后备队列中所有的作业排列情况。

7.编制作业调度算法:先来先服务、短作业优先和响应比高者优先调度算法。

8.显示根据不同调度算法形成的作业调度顺序。

9.运行程序,检查结果是否和理论值一致。

10.环境可以使用Windows,Turbo C环境或Linux。

三、对课程设计说明书撰写容、格式、字数的要求1.课程设计说明书是体现和总结课程设计成果的载体,主要容包括:设计题目、设计目的、设备器材、设计原理及容、设计步骤、遇到的问题及解决方法、设计总结、参考文献等。

一般不应少于3000字。

2.在适当位置配合相应的实验原理图、功能模块图、算法流程图等图表进行说明。

应做到文理通顺,容正确完整,书写工整,装订整齐。

3.设计总结部分主要写本人完成工作简介以及自己的设计体会,包括通过课程设计学到了什么,哪里遇到了困难,解决的办法以及今后的目标。

4.课程设计说明书手写或打印均可。

手写要用学校统一的课程设计用纸,用黑或蓝黑墨水工整书写;打印时采用A4纸,页边距均为20mm,正文采用宋体小四号字,行间距18磅。

文标题采用黑体小三号字,一级节标题采用黑体四号字,二级节标题采用黑体小四号字,表题与图题采用宋体五号字。

5.课程设计说明书装订顺序为:封面、任务书、成绩评定表、目录、正文、参考文献。

四、设计完成后应提交成果的种类、数量、质量等方面的要求1.完成“任务书”中指定的功能,运行结果正确。

2.课程设计说明书。

五、时间进度安排六、主要参考资料(文献)[1]凤羽.操作系统.:电子工业,2004[2]马季兰、秀芳等.操作系统原理与Linux. :人民邮电,2000[3]孟静.操作系统原理教程.:清华大学,2000[4]周、金海溶. 操作系统原理实验.: 科学,2000系(部):信息工程系班级:软本094 学生:矫娜系(部):信息工程系班级:软本094 学生:雨薇系(部):信息工程系班级:软本094 学生:缪斯系(部):信息工程系班级:软本094 学生:吕岩阳工程学院操作系统课程设计成绩评定表系(部):信息工程系班级:软本094 学生:孟昭鹏摘要随着社会科学技术的迅猛发展,计算机以它卓越的进步已经遍布各行各业,其实计算机本身就是一堆废铁,而操作系统使它有了生命和灵魂,操作系统就相当于人的各个组织,如果没有操作系统那计算机就像一个植物人一样,毫无价值。

操作系统是配置在计算机上的第一层软件,是对硬件系统的首次扩充。

它在计算机系统中占据了特别重要的地位,很多系统软件以及大量的应用软件都依赖于操作系统的支持,取得它的服务。

在计算机系统上所配置的操作系统的主要目标与计算机系统的规模和操作系统的应用环境有关,而操作系统在计算机系统中所起的作用也可以从不同的角度来观察。

操作系统已成为从大型机直至微型机都配置的软件,在不同的操作系统中采用的调度方式是不同的,它不仅是计算机与用户之间的接口,也是计算机资源的管理者。

当今的的计算机已经从无操作系统到单道批处理系统再发展到多道程序系统然后是分时系统和实时系统。

在多道程序系统中,一个作业被提交后必须经过处理机调度后,方能获得处理机执行。

作业是一个比程序更为广泛的概念,它不仅包含了通常的程序和数据,而且还应配有一分作业说明书,系统根据该说明书来对程序的运行进行控制。

在批处理系统中,是以作业为基本单位从外存调入存的。

对于批量型作业而言,通常要经历作业调度和进程调度两个过程方能获得处理机。

为了管理和调度作业,在多道批处理系统中为每个作业设置了一个作业控制块,即PCB(Job Control Block)每当作业进入系统是,系统便为每个作业创建一个PCB,根据作业类型将它插入相应的后备队列中,作业调度程序根据一定的算法来调度它们,被调度到的作业将会装入存。

作业调度的主要功能是根据作业控制块中的信息,审查系统能否满足用户作业的资源需求,以及按照一定的算法,从外存的后备队列中选取某些作业调入存,并为它们创建进程,分配必要的资源,然后,再将新创建的进程排在就绪队列上,准备准备执行。

每次执行作业调度时,都需要做以下两个决定:1.接纳多少个作业,取决于多道程序度即允许多少个作业同时在存中运行,多道程序度的确定是根据系统的规模和运行速度等情况做适当的折中。

2.接纳哪些作业,取决于采用的调度算法。

作业调度的算法主要包括三种:先来先服务算法、短作业优先调度算法和高响应比优先调度算法。

本系统采用结构体定义作业的数据类型,用数组接纳各个作业,通过把创建的JCB结构体组织成链,用不同算法循环测试处理的每个作业,来确定各个作业接受系统服务的次序,从而输出每个算法对作业处理结果,即平均周转时间。

从而确定哪种算法对于本次的作业调度是最佳的算法。

关键词操作系统,作业调度,调度算法,优先权,响应比,平均周转时间,最佳算法目录第1章引言 (1)1.1设计题目 (1)1.2设计目的 (1)1.3设备器材 (1)1.4任务分析 (1)1.5 操作系统概述 (2)1.5.1 发展历史 (2)1.5.2 分类 (4)1.6 系统开发技术 (5)1.6.1 Visual C++概述 (6)1.6.2 C++发展历史简单介绍 (6)1.6.3 Visual C++的特点 (7)1.6.4 C++语言发展及设计原则 (7)1.6.5 C++编程技巧 (8)第2章设计原理 (11)2.1先来先服务调度算法 (11)2.2短作业优先调度算法 (11)2.3高响应比优先调度算法 (11)第3章程序分析 (13)3.1系统操作 (13)3.2程序功能结构图 (13)3.3程序功能流程图 (14)3.3.1 创建作业流程图 (14)3.3.2 先来先服务调度算法流程图 (14)3.3.3 短作业优先调度算法流程图 (15)3.3.4 响应比优先调度算法流程图 (16)3.3.5总结最优调度算法流程图 (16)第4章程序实现方法 (18)4.1主函数程序实现 (18)4.1.1主程序实现功能 (18)4.1.2 主程序实现代码 (18)4.1.3 主程序运行界面 (19)4.2 创建作业函数的实现 (20)4.2.1 函数说明 (20)4.2.2 创建函数实现代码 (20)4.2.3 创建函数运行界面 (21)4.3 先来先服务函数 (21)4.3.1函数说明 (21)4.3.2先来先服务代码 (21)4.3.3 程序运行界面 (23)4.4短作业优先函数 (24)4.4.1函数说明 (24)4.4.2短作业优先代码 (24)4.4.3程序运行界面 (26)4.5 响应比高者优先函数 (26)4.5.1函数说明 (27)4.5.2响应比高者优先代码 (27)4.5.3响应比高者优函数运行结果 (29)4.6总结函数 (29)4.6.1 函数说明 (29)4.6.2 总结函数实现代码 (29)4.6.3 总结函数运行界面 (30)第5章遇到的问题及解决方法 (32)5.1 遇到的问题 (32)5.2 解决的方法 (32)总结 (33)致 (34)参考文献 (35)第1章引言1.1设计题目作业管理1.2设计目的了解作业进入系统至运行完毕的总过程。

掌握并学会运用不同的调度算法。

进一步了解作业调度中作业的创建过程与实现过程。

学会并理解优先权在高响应比优先高度算法中的作用。

1.3设备器材硬件:计算机一台软件:Windows操作系统,VC++环境或TC2.0环境1.4任务分析本次课程设计的题目为作业调度,其调度算法分别为先来先服务调度算法、短作业优先调度算法、高响应比优先调度算法。

作业调度的主要功能是根据作业控制块中的信息,审查系统能否满足用户作业的资源需求,以及按照一定的算法,从外存的后备队列中选取某些作业调入存,并为它们创建进程、分配必要的资源。

然后再将新创建的进程插入就绪队列,准备执行。

每个系统在选择作业调度算法时,既应考虑用户的要求,又能确保系统具有较高的效率。

在每次执行作业调度时,都须做出两个决定,一是决定接纳多少个作业;二是决定接纳哪些作业。

在OS中调度的实质是一种资源分配,因而调度算法是指:根据系统的资源分配策略所规定的资源分配算法。

对于不同的系统和系统目标,通常采用不同的调度算法。

先来先服务调度算法是一种最简单的调度算法,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入存,为它们分配资源、创建进程,然后放入就绪队列。

短作业优先调度算法是指对短作业优先调度的算法。

短作业优先的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入存运行。

高响应比优先调度算法,是指将就绪队列中排序的优先权最高的作业调入存执行。

在高响应比调度算法中,优先权的计算公式为:优先权=(等待时间+要求服务时间)/要求服务时间,该算法既照顾了短作业,又考虑了作业到达的先后次序,不会使长作业长期得不到服务。

因此,该算法实现了一种较好的折衷。

当然,在利用该算法时,每要进行调度之前,都须先做响应比的计算,这会增加系统开销。

在执行高响应比优先调度算法时,每有一个作业调入存运行后就需根据最后一次调入存的业状态计算就绪队列中的其它作业的优先权。

相关文档
最新文档