操作系统实验报告-批处理系统的作业调度
操作系统作业调度实验报告

#define NULL 0
int n;
float T1=0,T2=0;
int times=0;
struct jcb//作业控制块
{
char name[10]; //作业名
int reachtime; //作业到达时间
3、对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间。
3)流程图:
二.最短作业优先算法
三.高响应比算法
图一.先来先服务流程图
4)源程序:
#include <stdio.h>
#include <stdlib.h>
#include <conio.h>
{
if(m==3) //显示高响应比算法调度作业后的运行情况
{
printf("\n作业%s正在运行,估计其运行情况:\n",q->name);
printf("开始运行时刻:%d\n",q->starttime);
printf("完成时刻:%d\n",q->finishtime);
printf("周转时间:%f\n",q->cycletime);
struct jcb *next; //结构体指针
}*ready=NULL,*p,*q;
typedef struct jcb JCB;
void inize()//初始化界面
{
printf("\n\n\t\t*********************************************\t\t\n");
操作系统作业调度算法实验

操作系统作业调度算法实验
操作系统作业调度算法实验可以让你更深入地理解作业调度的概念和方法,以下是实验的基本步骤和内容:
一、实验目的
掌握作业调度的基本概念和算法原理。
理解不同作业调度算法的特点和优缺点。
通过实验验证作业调度算法的正确性和性能。
二、实验内容
实验准备:准备一台计算机或模拟器,安装操作系统,并准备好实验所需的作业。
实验步骤:
(1)编写作业描述文件,包括作业的名称、到达时间、所需资源等信息。
(2)实现先来先服务(FCFS)、最短作业优先(SJF)、最高响应比优先(HRN)等作业调度算法,并编写相应的调度程序。
(3)将作业按照一定的顺序输入到调度程序中,并记录每个作业的执行时间、等待时间等参数。
(4)根据记录的数据计算平均周转时间、平均带权周转时间等指标,分析不同调度算法的性能差异。
(5)根据实验结果,分析不同调度算法的优缺点,并给出改进建议。
实验报告:整理实验数据和结果,撰写实验报告,包括实验目的、实验内容、实验步骤、实验结果、分析和结论等部分。
三、实验注意事项
在实验过程中,要注意保证作业的公平性,避免某些作业一直得不到执行的情况发生。
在实验过程中,要注意观察和记录每个作业的执行时间和等待时间等参数,以便后续的分析和比较。
在实验过程中,要注意保证系统的稳定性和可靠性,避免出现意外情况导致实验结果不准确。
在实验过程中,要注意遵守实验室规定和操作规程,确保实验过程的安全和顺利进行。
操作系统实验之处理机调度实验报告

操作系统实验之处理机调度实验报告一、实验目的处理机调度是操作系统中的核心功能之一,本次实验的主要目的是通过模拟不同的处理机调度算法,深入理解操作系统对处理机资源的分配和管理策略,比较不同调度算法的性能差异,并观察它们在不同负载情况下的表现。
二、实验环境本次实验使用的操作系统为 Windows 10,编程语言为 Python 38。
实验中使用了 Python 的相关库,如`numpy`、`matplotlib`等,用于数据生成、计算和图形绘制。
三、实验原理1、先来先服务(FCFS)调度算法先来先服务算法按照作业到达的先后顺序进行调度。
先到达的作业先被服务,直到完成或阻塞,然后再处理下一个到达的作业。
2、短作业优先(SJF)调度算法短作业优先算法选择预计运行时间最短的作业先执行。
这种算法可以有效地减少作业的平均等待时间,但可能导致长作业长时间等待。
3、时间片轮转(RR)调度算法时间片轮转算法将处理机的时间分成固定长度的时间片,每个作业轮流获得一个时间片的处理时间。
当时间片用完后,如果作业还未完成,则将其放入就绪队列的末尾等待下一轮调度。
4、优先级调度算法优先级调度算法为每个作业分配一个优先级,优先级高的作业先被执行。
优先级可以根据作业的性质、紧急程度等因素来确定。
四、实验内容与步骤1、数据生成首先,生成一组模拟的作业,包括作业的到达时间、预计运行时间和优先级等信息。
为了使实验结果更具代表性,生成了不同规模和特征的作业集合。
2、算法实现分别实现了先来先服务、短作业优先、时间片轮转和优先级调度这四种算法。
在实现过程中,严格按照算法的定义和规则进行处理机的分配和调度。
3、性能评估指标定义了以下性能评估指标来比较不同调度算法的效果:平均等待时间:作业在就绪队列中的等待时间的平均值。
平均周转时间:作业从到达系统到完成的时间间隔的平均值。
系统吞吐量:单位时间内完成的作业数量。
4、实验结果分析对每种调度算法进行多次实验,使用不同的作业集合,并记录相应的性能指标数据。
批处理系统的作业调度

实验批处理系统的作业调度一、实验目的(1)加深对作业概念的理解;(2)深入了解批处理系统如何组织作业、管理作业和调度作业。
二、预备知识(1)批处理系统的概念;批处理系统,又名批处理操作系统。
批处理是指用户将一批作业提交给操作系统后就不再干预,由操作系统控制它们自动运行。
这种采用批量处理作业技术的操作系统称为批处理操作系统。
批处理操作系统分为单道批处理系统和多道批处理系统。
批处理操作系统不具有交互性,它是为了提高CPU的利用率而提出的一种操作系统。
1.作用:大家知不知道默认共享这回事?这东西用不着的地方可就不是好东西了.所以就要删掉.但这东西是每次系统重起后都会重新创建的.所以每次都要重新打开cmd重新删掉一下.极为麻烦.但有了批处理文件就不一样了,先把命令输入到批处理文件中,然后加入到启动项中,每次启动就会自动运行,免去了每次输入命令的麻烦.(2).如何创建批处理文件?不要听了批处理文件就感到很神气,其实这东西很简单的.你用过记事本没有?用过?好的.将记事本打开,什么都不用写,然后选择文件,保存.保存类型选择所有文件,文件名则命名为*.bat 这个*代表是文件名,你可以随便的起.保存好之后,看看你保存的地方,会出现一个白色窗口里有个黄色齿轮的图标.这东西就是你创建的批处理文件,双击他就可以运行,但他现在由于里面没有输入任何命令,所以他运行了并不会做任何事情.当我们想往这个*.bat文件中添加东西时,只要右键选择他,然后选择编辑,就可以打开记事本往内输入命令了.3.批处理文件中的命令是什么?批处理文件中的命令暂时先可以理解为dos命令,等稍后深入理解了以后再进行解释.批处理顾名思义就是一大堆东西堆在一起处理.换句话说就是往里面写一条条dos命令,然后按顺序挨个执行,效果跟你在cmd里敲dos命令是一个效果.只不过用批处理写好之后,要运行只要双击下就可以运行了.而不用再一遍一遍的重复的往里面打命令.这就是批处理文件的好处.(2)批处理系统的调度。
操作系统实验报告作业调度

操作系统实验报告作业调度操作系统实验报告:作业调度引言作业调度是操作系统中的重要部分,它负责管理和调度系统中的各种作业,以最大化系统资源的利用率和提高作业的执行效率。
在本次实验中,我们将探讨作业调度的基本原理和实现方法,并通过实验验证其效果。
实验目的本次实验的主要目的是通过实际操作,了解作业调度的基本原理和实现方法,掌握作业调度的相关算法,并通过实验验证其有效性。
实验内容1. 实现作业调度的基本算法在本次实验中,我们将实现作业调度的基本算法,包括先来先服务(FCFS)、最短作业优先(SJF)、优先级调度(Priority Scheduling)和多级反馈队列调度(Multilevel Feedback Queue Scheduling)等。
通过编写代码,模拟这些算法的执行过程,并观察它们的效果。
2. 实验验证我们将设计一些测试用例,通过模拟作业的执行过程,分别使用不同的作业调度算法,并比较它们的执行效果。
通过实验验证,我们将得出不同算法的优劣势,并分析其适用场景。
实验结果经过实验验证,我们得出以下结论:1. 先来先服务(FCFS)算法适用于作业执行时间相对均匀的情况,但可能会导致平均等待时间较长。
2. 最短作业优先(SJF)算法能够最大程度地减少平均等待时间,但可能会出现作业饥饿现象。
3. 优先级调度(Priority Scheduling)算法能够根据作业的优先级进行调度,适用于有明确优先级需求的情况。
4. 多级反馈队列调度(Multilevel Feedback Queue Scheduling)算法能够根据作业的执行情况动态调整优先级,适用于各种类型的作业。
结论作业调度是操作系统中的重要组成部分,不同的作业调度算法适用于不同的场景。
通过本次实验,我们深入了解了作业调度的基本原理和实现方法,掌握了不同算法的优劣势,并通过实验验证了它们的有效性。
这将对我们进一步深入学习操作系统和提高系统性能有着重要的意义。
操作系统——作业调度

操作系统——作业调度实验⼆作业调度模拟程序⼀、⽬的和要求 1. 实验⽬的 (1)加深对作业调度算法的理解; (2)进⾏程序设计的训练。
2.实验要求 ⽤⾼级语⾔编写⼀个或多个作业调度的模拟程序。
单道批处理系统的作业调度程序。
作业⼀投⼊运⾏,它就占有计算机的⼀切资源直到作业完成为⽌,因此调度作业时不必考虑它所需要的资源是否得到满⾜,它所运⾏的时间等因素。
作业调度算法: 1) 采⽤先来先服务(FCFS)调度算法,即按作业到达的先后次序进⾏调度。
总是⾸先调度在系统中等待时间最长的作业。
2) 短作业优先 (SJF) 调度算法,优先调度要求运⾏时间最短的作业。
3) 响应⽐⾼者优先(HRRN)调度算法,为每个作业设置⼀个优先权(响应⽐),调度之前先计算各作业的优先权,优先数⾼者优先调度。
RP (响应⽐)=作业周转时间 / 作业运⾏时间=1+作业等待时间/作业运⾏时间每个作业由⼀个作业控制块JCB表⽰,JCB可以包含以下信息:作业名、提交(到达)时间、所需的运⾏时间、所需的资源、作业状态、链指针等等。
作业的状态可以是等待W(Wait)、运⾏R(Run)和完成F(Finish)三种之⼀。
每个作业的最初状态都是等待W。
⼀、模拟数据的⽣成 1.允许⽤户指定作业的个数(2-24),默认值为5。
2. 允许⽤户选择输⼊每个作业的到达时间和所需运⾏时间。
3.(**)从⽂件中读⼊以上数据。
4.(**)也允许⽤户选择通过伪随机数指定每个作业的到达时间(0-30)和所需运⾏时间(1-8)。
⼆、模拟程序的功能 1.按照模拟数据的到达时间和所需运⾏时间,执⾏FCFS, SJF和HRRN调度算法,程序计算各作业的开始执⾏时间,各作业的完成时间,周转时间和带权周转时间(周转系数)。
2. 动态演⽰每调度⼀次,更新现在系统时刻,处于运⾏状态和等待各作业的相应信息(作业名、到达时间、所需的运⾏时间等)对于HRRN算法,能在每次调度时显⽰各作业的响应⽐R情况。
操作系统实验报告——调度算法

操作系统实验报告——调度算法1. 实验目的本实验旨在探究操作系统中常用的调度算法,通过编写代码模拟不同的调度算法,了解它们的特点和应用场景。
2. 实验环境本次实验使用的操作系统环境为Linux,并采用C语言进行编码。
3. 实验内容3.1 调度算法1:先来先服务(FCFS)FCFS调度算法是一种简单且常见的调度算法。
该算法按照进程到达的先后顺序进行调度。
在本实验中,我们使用C语言编写代码模拟FCFS算法的调度过程,并记录每个进程的等待时间、周转时间和响应时间。
3.2 调度算法2:最短作业优先(SJF)SJF调度算法是一种非抢占式的调度算法,根据进程的执行时间来选择下一个要执行的进程。
在本实验中,我们使用C语言编写代码模拟SJF算法的调度过程,并计算每个进程的等待时间、周转时间和响应时间。
3.3 调度算法3:轮转调度(Round Robin)Round Robin调度算法是一种经典的时间片轮转算法,每个进程在给定的时间片内依次执行一定数量的时间。
如果进程的执行时间超过时间片,进程将被暂时挂起,等待下一次轮转。
在本实验中,我们使用C语言编写代码模拟Round Robin算法的调度过程,并计算每个进程的等待时间、周转时间和响应时间。
4. 实验结果分析通过对不同调度算法的模拟实验结果进行分析,可以得出以下结论:- FCFS算法适用于任务到达的先后顺序不重要的场景,但对于执行时间较长的进程可能会导致下一个进程需要等待较久。
- SJF算法适用于任务的执行时间差异较大的场景,能够提高整体执行效率。
- Round Robin算法适用于时间片相对较小的情况,能够公平地为每个进程提供执行时间。
5. 实验总结本次实验通过模拟不同调度算法的实际执行过程,深入了解了各种调度算法的原理、特点和适用场景。
通过对实验结果的分析,我们可以更好地选择合适的调度算法来满足实际应用的需求。
在后续的学习中,我们将进一步探索更多操作系统相关的实验和算法。
实验一 处理机调度实验报告

实验一处理机调度实验报告一、实验目的处理机调度是操作系统中的一个重要组成部分,其目的是合理地分配处理机资源,以提高系统的性能和效率。
本次实验的主要目的是通过模拟处理机调度算法,深入理解不同调度算法的工作原理和性能特点,并能够对它们进行比较和分析。
二、实验环境本次实验使用了以下软件和工具:1、操作系统:Windows 102、编程语言:Python3、开发环境:PyCharm三、实验内容1、先来先服务(FCFS)调度算法先来先服务调度算法按照作业或进程到达的先后顺序进行调度。
即先到达的作业或进程先得到处理机的服务。
2、短作业优先(SJF)调度算法短作业优先调度算法优先调度运行时间短的作业或进程。
在实现过程中,需要对作业或进程的运行时间进行预测或已知。
3、高响应比优先(HRRN)调度算法高响应比优先调度算法综合考虑作业或进程的等待时间和运行时间。
响应比的计算公式为:响应比=(等待时间+要求服务时间)/要求服务时间。
4、时间片轮转(RR)调度算法时间片轮转调度算法将处理机的时间分成固定大小的时间片,每个作业或进程在一个时间片内运行,当时间片用完后,切换到下一个作业或进程。
四、实验步骤1、设计数据结构为了表示作业或进程,设计了一个包含作业或进程 ID、到达时间、运行时间和等待时间等属性的数据结构。
2、实现调度算法分别实现了上述四种调度算法。
在实现过程中,根据算法的特点进行相应的处理和计算。
3、模拟调度过程创建一组作业或进程,并按照不同的调度算法进行调度。
在调度过程中,更新作业或进程的状态和相关时间参数。
4、计算性能指标计算了平均周转时间和平均带权周转时间等性能指标,用于评估不同调度算法的性能。
五、实验结果与分析1、先来先服务(FCFS)调度算法平均周转时间:通过计算所有作业或进程的周转时间之和除以作业或进程的数量,得到平均周转时间。
在 FCFS 算法中,由于按照到达顺序进行调度,可能会导致长作业或进程长时间占用处理机,从而使平均周转时间较长。
单道批处理系统作业调度

单道批处理系统作业调度单道批处理系统作业调度是指在单道批处理系统中,根据作业的特性和系统资源的情况,合理地安排作业的执行顺序和分配系统资源的过程。
它是操作系统中的一个重要组成部份,对于提高系统的效率和资源利用率至关重要。
一、作业调度的原则1. 公平性原则:保证每一个作业都有机会获得系统资源,避免某些作业长期占用资源而导致其他作业等待过久。
2. 高效性原则:尽量减少作业的等待时间,提高系统的吞吐量和响应速度。
3. 紧急性原则:优先处理紧急的作业,确保系统的稳定运行。
4. 先来先服务原则:按照作业提交的先后顺序进行调度,保证公平性和公正性。
二、作业调度的算法1. 先来先服务(FCFS)算法:按照作业提交的先后顺序进行调度,先提交的作业先执行。
适合于作业的执行时间相对较短且相对稳定的情况。
2. 短作业优先(SJF)算法:根据作业的执行时间预测,选择执行时间最短的作业优先执行。
适合于作业的执行时间差异较大的情况。
3. 优先级调度算法:为每一个作业分配一个优先级,根据优先级高低进行调度。
适合于需要根据作业的重要性和紧急程度进行调度的情况。
4. 时间片轮转(RR)算法:将系统的执行时间划分为多个时间片,每一个作业在一个时间片内执行一定的时间,然后切换到下一个作业。
适合于多个作业之间的执行时间相对均衡的情况。
三、作业调度的流程1. 作业提交:用户将作业提交到系统中,包括作业的名称、优先级、执行时间等信息。
2. 作业入队:将提交的作业加入到作业队列中,按照先来先服务或者其他调度算法进行排序。
3. 作业调度:根据调度算法选择下一个执行的作业,并将其从作业队列中取出。
4. 资源分配:根据作业的资源需求,分配相应的系统资源给作业,如CPU、内存等。
5. 作业执行:作业开始执行,占用系统资源进行计算、IO操作等。
6. 作业完成:作业执行完毕后,释放占用的系统资源,并将结果返回给用户。
7. 下一个作业:根据调度算法选择下一个执行的作业,重复步骤3-6,直到所有作业执行完毕。
操作系统实验报告作业调度

操作系统实验报告作业调度操作系统实验报告:作业调度引言:操作系统是计算机系统中最核心的软件之一,它负责管理计算机的资源,为用户提供良好的使用环境。
在操作系统中,作业调度是非常重要的一部分,它决定了计算机如何合理地分配和调度各个作业的执行顺序,以提高计算机的效率和性能。
本实验报告将介绍作业调度的概念、调度算法以及实验结果。
一、作业调度的概念作业调度是指根据一定的策略和算法,将就绪队列中的作业按照一定的顺序分配给处理器,使得计算机系统能够充分利用资源,提高系统的吞吐量和响应时间。
作业调度的目标是实现公平性、高效性和平衡性。
二、作业调度的算法1. 先来先服务(FCFS)调度算法FCFS调度算法是最简单的调度算法之一,它按照作业的到达顺序进行调度,先到达的作业先执行。
这种算法的优点是简单易实现,但是可能会导致长作业等待时间过长,造成资源浪费。
2. 最短作业优先(SJF)调度算法SJF调度算法是根据作业的执行时间来进行调度,执行时间短的作业先执行。
这种算法能够最大程度地减少平均等待时间,提高系统的响应速度,但是可能会导致长作业长时间等待。
3. 优先级调度算法优先级调度算法是根据作业的优先级来进行调度,优先级高的作业先执行。
这种算法可以根据不同的需求设置不同的优先级,但是可能会导致低优先级的作业长时间等待。
4. 时间片轮转调度算法时间片轮转调度算法是将处理器的执行时间划分为多个时间片,每个作业在一个时间片内执行,时间片用完后,将处理器分配给下一个作业。
这种算法可以实现公平性,但是可能会导致长作业等待时间过长。
三、实验结果与分析在本次实验中,我们使用了不同的作业调度算法,并对其进行了性能测试。
测试结果显示,FCFS算法在平均等待时间方面表现较差,而SJF算法和优先级调度算法在平均等待时间方面表现较好。
时间片轮转调度算法能够实现公平性,但是可能会导致长作业等待时间过长。
结论:作业调度是操作系统中的重要组成部分,合理的作业调度算法能够提高计算机系统的效率和性能。
操作系统 批处理系统作业调度实验报告

操作系统批处理系统作业调度实验报告批处理系统的作业调度实验报告年级 2009级学号 2009443004 姓名郭占强成绩专业生物信息学实验地点生科楼409 指导教师王硕实验项目批处理系统的作业调度实验日期 2011年11月18日一、实验目的加深对作业概念的理解;深入了解批处理系统如何组织作业、管理作业和调度作业。
二、实验要求编写程序完成批处理系统中的作业调度,要求采用响应比高者优先的作业调度算法。
实验具体包括:首先确定作业控制块的内容,作业控制块的组成方式;然后完成作业调度;最后编写主函数对所作工作进程测试。
三、实验原理:操作系统根据允许并行工作的道数和一定的算法从系统中选取若干作业把它们装入主存储器,使它们有机会获得处理器运行。
四、实验程序设计#include "string.h"#include<iostream.h>#include<stdio.h>#define n 10 /*假定系统中可容纳的作业数量为n*/typedef struct jcb{char name[4]; /*作业名*/int length; /*作业长度,所需主存大小*/int printer; /*作业执行所需打印机的数量*/int tape; /*作业执行所需磁带机的数量*/int runtime; /*作业估计执行时间*/int waittime; /*作业在系统中的等待时间*/int next; /*指向下一个作业控制块的指针*/}JCB; /*作业控制块类型定义*/int head; /*作业队列头指针定义*/int tape,printer;long memory;JCB jobtable[n]; /*作业表*/int jobcount=0; /*系统内现有作业数量*/shedule( )- 1 -/*作业调度函数*/{float xk,k;int p,q,s,t;do{p=head;q=s=-1;k=0;while(p!=-1){ if(jobtable[p].length<=memory&&jobtable[p].tape<=tape&&jobtable[p] .printer<=printer){ /*系统可用资源是否满足作业需求*/xk=(float)(jobtable[p].waittime)/jobtable[p].runtime;if(q==0||xk>k) /*满足条件的第一个作业或者作业q的响应比小于作业p的响应比*/{k=xk; /*记录响应比*/q=p;t=s;}/*if*/}/*if*/s=p;p=jobtable[p].next; /*指针p后移*/}/*while*/if(q!=-1){ if(t==-1) /*是作业队列的第一个*/head=jobtable[head].next;elsejobtable[t].next=jobtable[q].next;/*为作业q分配资源:分配主存空间;分配磁带机;分配打印机*/memory=memory-jobtable[q].length;tape=tape-jobtable[q].tape;printer=printer-jobtable[q].printer;printf("选中作业的作业名:%s\n",jobtable[q].name);}}while(q!=-1);}/*作业调度函数结束*/main( ){char name[4];int size,tcount,pcount,wtime,rtime;int p;/*系统数据初始化*/memory=65536;tape=4;printer=2;head=-1;printf("输入作业相关数据(以作业大小为负数停止输入):\n");/*输入数据,建立作业队列*/- 2 -printf("输入作业名、作业大小、磁带机数、打印机数、等待时间、估计执行时间\n");scanf("%s%d%d %d %d %d",name,&size,&tcount,&pcount,&wtime,&rtime);while(size!=-1){/*创建JCB*/if(jobcount<n)p=jobcount;else { printf("无法再创建作业\n");break;}jobcount++;/*填写该作业相关内容*/strcpy(jobtable[p].name,name);jobtable[p].length=size;jobtable[p].printer=pcount;jobtable[p].tape=tcount;jobtable[p].runtime=rtime;jobtable[p].waittime=wtime;/*挂入作业队列队首*/jobtable[p].next=head;head=p;/* 输入一个作业数据*/printf("输入作业名、作业大小、磁带机数、打印机数、等待时间、估计执行时间\n");scanf("%s%d%d%d%d%d",name,&size,&tcount,&pcount,&wtime,&rtime);}/*while*/shedule( ); /*进行作业调度*/}/*main( )函数结束*/五、实验结果与分析1. 本程序采用响应比高者优先算法进行作业调度。
批处理系统作业调度实验报告

批处理系统作业调度一、实验目的加深对作业概念的理解;深入了解批处理系统如何组织作业、管理作业和调度作业;二、实验要求编写程序完成批处理系统中的作业调度,要求采用响应比高者优先的作业调度算法。
实验具体包括:首先确定作业控制块的内容,作业控制块的组成方式;然后完成作业调度;最后编写主函数对所作工作进程测试。
三、实验原理:操作系统根据允许并行工作的道数和一定的算法从系统中选取若干作业把它们装入主存储器,使它们有机会获得处理器运行,这项工作被称为“作业调度”。
实现这部分功能的程序就是“作业调度程序”。
四、实验内容:编写程序完成批处理系统中的作业调度,要求采用响应比高者优先的作业调度算法。
实现具体包括:首先确定作业控制块的内容和组成方式;然后完成作业调度;最后编写主函数,对所做工作进行测试。
五、提示讲解:作业调度的实现主要有两个问题:一个是如何将系统中的作业组织起来;另一个是如何进行作业调度.为了将系统中的作业组织起来,需要为每个进入系统的作业建立档案以记录和作业相关的信息,例如,作业名、作业所需资源、作业执行时间、作业进入系统的时间、作业信息在存储器中的位置、指向下一个作业控制块的指针等信息。
这个记录作业相关信息的数据块称为作业控制块(JCB ),并将系统中等待作业调度的作业控制块组织成一个队列,这个队列称为后备队列。
当进行作业调度时,从后备队列中查找选择作业。
由于实验中没有实际作业,作业控制块中的信息内容只使用了实验中需要的数据.作业控制块中首先应该包括作业名;其次是作业所需资源(内存大小、打印机的数量和磁带机的数量);采用响应比高者优先作业调度算法,为了计算响应比,还需要有作业的估计执行时间、作业在系统中的等待时间;另外,指向下一个作业控制块的指针必不可少。
将作业控制块组织成一个队列,实验中采用静态链表的方式模拟作业的后备队列,作业队列头指针定义为:int *head;实验中,内存采用可移动的动态分区管理方法,即只要内存空闲区总和比作业大就可以满足作业对内存的需求;对打印机和磁带机这两种独占设备采用静态分配法,即作业执行前必须获得所需资源,并且执行完才归还.采用响应比高者优先调度算法进行调度时,必须计算出系统中所有满足必要条件作业的响应比,从中选择响应比最高的一个作业装入主存储器分配资源。
(完整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)在批处理系统中,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求,所需要的资源是否得到满足。
作业调度程序负责从输入井选择若干个作业进入主存,为它们分配必要的资源,当它们能够被进程调度选中时,就可占用处理机运行。
作业调度选择一个作业的必要条件是系统中现有的尚未分配的资源可满足该作业的资源要求。
但有时系统中现有的尚未分配的资源既可满足某个作业的要求也可满足其它一些作业要求,那么,作业调度必须按一定的算法在这些作业中作出选择。
模拟批处理多道操作系统的作业调度

石家庄经济学院实验报告(学院)系: 信息工程学院专业: 网络工程**: ***班级: 网络2班学号: ****************: ***日期:2010 年 1月 22 日printf("第%d个作业:状态:",i+1);scanf("%s",&w[i].state);printf("第%d个作业:主存:",i+1);scanf("%d",&w[i].store);printf("第%d个作业:磁带:",i+1);scanf("%d",&w[i].tape);}2、算法设计:(1)算法选择函数:int choice()函数功能:根据要求选择FCFS或SFJ。
入口参数:c出口参数:i流程图见图1图1 作业调度算法选择流程图(2)先来先服务函数(FCFS):int FCFS()函数功能:FCFS的运算过程入口参数:F出口参数:j或-1流程图见图2所示:图2 先进先出算法流程图(3)短作业优先服务函数(SFJ):int SFJ()函数功能:SFJ的运算过程入口参数:S出口参数:j或-1流程图见图3所示:图3 短作业优先算法流程图(4)随机数算法操作函数功能:输入随机数模拟处理器调度入口参数:time_t和k出口参数:p和q流程图:无(5)撤离作业算法操作函数功能:主存中的作业按运行的时间来决定撤离的先后次序入口参数:h 和l出口参数:H和L流程图见图4所示:图4 撤离作业算法流程图(6)主功能函数:void Administer()函数功能:实现函数要求。
入口参数:无出口参数:无流程图见图5所示:图5 主功能算法流程图2.随机函数不大于0.5,转入主存3.随机数大于0.5,查看主存,并按先进先出算法调度4. .随机数大于0.5,查看主存,并按短作业优先服务算法调度5.显示五个作业的信息状态6. .随机函数不大于0.5,转入主存,并根据已在主存中的作业需运行的时间来决定撤离的先后次序7. 显示五个作业的信息状态六.设计总结通过此次实验不仅巩固了作业调度还把处理器调度算法进一步熟练运用了。
操作系统实验报告-作业调度

作业调度一、实验目的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. 结论作业调度是一个重要的操作系统概念,它决定了系统的性能和效率。
在本文中,我们介绍了作业调度的基本概念和常用算法,并讨论了在实验中的应用。
操作系统实验报告-批处理系统的作业调度

#include
#include
#include
#include
#include
typedefcharstring[10];/*//定义string为含有10个字符元素的字符数组类型*/
structtask{
stringname;/*作业号*/
intarrtime;/*作业抵达时间*/
操作系统实验报告-批处理系统的作业调度
实验一批处理系统的作业调度
(1)加深对作业概念的理解。
(2)深入细致介绍批处理系统如何非政府作业、管理作业和调度作业。
编写程序完成批处理系统的作业调度,要求采用响应比优先调度算法。
最低积极响应比优先法(hrrn)就是对fcfs方式和sjf方式的一种综合均衡。hrrn调度策略同时考量每个作业的等待时间长短和估算须要的继续执行时间长短,从中挑选出积极响应比最低的作业资金投入继续执行。
printf("%9s%9d%9d%9d%9d%9d%9d\n",
jcb[i].name,jcb[i].arrtime,jcb[i].sertime,
jcb[i].begtime,jcb[i].fintime,jcb[i].turtime,jcb[i].wtutime);
voidcheck()
intstatime,endtime,sumturtime=0.0,sumwtutime=0.0,aveturtime,avewtutime;intcurrent=0,times=0,pre=0;
printf("-------------------------------------------------------------------------\n");
计算机算法设计与分析 批处理作业调度 实验报告

×××实验报告纸计算机科学与工程学院(院、系)网络工程专业071班组计算机算法设计与分析课学号2007102241 姓名实验日期2010.教师评定批处理系统作业调度问题1、实验目的:加深对作业概念的理解。
深入了解批处理系统如何组织作业、管理作业和调度作业。
2、算法分析:1.采用响应比高者优先的作业调度算法2.确定作业控制块的内容、组织方式。
3.完成作业调度。
4.编写主函数对所做工作进行测试。
3、程序代码:#include <stdio.h>#include <string.h>#define n 10 //后备队列中JCB的最大数量//作业控制块typedef struct{char name[4]; //作业名int length; //作业长度int printer; //打印机数量int tape; //磁带机数量int runtime; //运行时间int waittime; //等待时间int next; //指针} JCB;//后备队列(对结构)JCB jobTable[n]; //作业表int jobCount; //作业表中当前作业数量int head; //作业表头指针//初始化函数void Init(){head=-1;jobCount=0;}//入队函数void PushQueue(JCB job){if(jobCount>=n){printf("队列已满,不能加入\n");return;}if(head==-1)head=0;jobTable[jobCount].length=job.length;strcpy(jobTable[jobCount].name,);jobTable[jobCount].printer=job.printer;jobTable[jobCount].runtime=job.runtime;jobTable[jobCount].tape=job.tape;jobTable[jobCount].waittime=job.waittime;jobTable[jobCount-1].next=jobCount;jobTable[jobCount].next=-1;jobCount++;}//出队函数void PopQueue(int num){if(jobCount==0){printf("空队不能出队");return;}if(num>=jobCount){printf("队列中不存在该元素");return;}if(jobCount==1){head=-1;jobTable[0].next=-1;jobCount=0;}else{jobTable[num-1].next=jobTable[num].next;jobTable[num].next=-1;jobCount--;}}//系统资源int memory=65536; //主存大小64MB,65536KBint tape=4; //磁带机数量int printer=2; //打印机数量//作业调度函数void Schedule(){int currJob,maxJob;double currJobRatio,maxJobRatio;while(head!=-1){currJob=maxJob=head;currJobRatio=maxJobRatio=0;//找出响应比最大的作业while(1){//找出满足资源的作业if(jobTable[currJob].length<=memory && jobTable[currJob].printer<=printer && jobTable[currJob].tape<=tape){currJobRatio=(double)jobTable[currJob].waittime/jobTable[currJob].runtime; //计算响应比if(currJobRatio>maxJobRatio){maxJobRatio=currJobRatio;maxJob=currJob;}}if(jobTable[currJob].next==-1)break;elsecurrJob=jobTable[currJob].next;}//输出响应比最大的作业、分配资源if(maxJobRatio!=0){memory-=jobTable[maxJob].length;tape-=jobTable[maxJob].tape;printer-=jobTable[maxJob].printer;printf("选中作业的作业名为:%s\n",jobTable[maxJob].name);PopQueue(maxJob);}}}void main(){//用于作业的临时变量char tmp_name[4];int tmp_length;int tmp_printer;int tmp_tape;int tmp_runtime;int tmp_waittime;int tmp_count; //记录输入作业数量JCB tmp_job; //临时作业变量printf("请输入作业相关信息,以作业名为Q为输入结束。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
}
int HRN(int pre)
{
int current=1,i,j;/*优先权=(等待时间+服务时间)/服务时间*/
for(i=0; i<num; i++)
{
JCB[i].waiTime=JCB[pre].finTime-JCB[i].arrTime; /*等待时间=上一个作业的完成时间-到达时间*/
int finTime; /*结束运行时间*/
int turTime; /*周转时间*/
int wTuTime; /*带权周转时间*/
int priority;/*优先权*/
int finish;/*是否已经完成*/
}JCB[10];
存放作业控制块的区域:
#define n 10
JCB jobtable[10];
print(current, times);
pre=current;
}
for(i=0; i<num; i++)
{
sumTurTime+=JCB[i].turTime;
sumWTuTime+=JCB[i].wTuTime;
}
aveTurTime=sumTurTime/num;
aveWTuTime=sumWTuTime/num;
printf("(计与平均值) %9d%9d%9d%9d\n",NULL,sumTurTime,aveTurTime,aveWTuTime);
printf("-------------------------------------------------------------------------\n");
}
void main()
{
char again;
do {
system("cls"); /*清屏*/
printf("please input 4 groups of datas:\n");
input();
check();
printf("Continue...(Y/N): "
四.实验部分源程序
实验中,作业控制块及队列的数据结构定义如下:
struct task {
string name; /*作业号*/
int arrTime; /*作业到达时间*/
int serTime; /*作业要求服务时间*/
int waiTime; /*等待时间*/
int begTime; /*开始运行时间*/
JCB[i].priority=(JCB[i].waiTime+JCB[i].serTime)/JCB[i].serTime;
}
for(i=0; i<num; i++)
{
if(!JCB[i].finish)
{
current=i; /*找到第一个还没完成的作业*/
break;
}
}
for( j=i; j<num; j++) /*和后面的作业比较*/
{
if(times==0)
{
JCB[i].begTime=JCB[i].arrTime;
JCB[i].finTime=JCB[i].begTime+JCB[i].serTime;
JCB[i].turTime=JCB[i].serTime;
JCB[i].wTuTime=1.0;
staTime=JCB[i].begTime;
{
JCB[i].finish=0;
}
staTime, endTime,sumTurTime=0.0, sumWTuTime=0.0, aveTurTime, aveWTuTime;
current=0; times=0; pre=0;
JCB[pre].finTime=0;
printf("-------------------------------------------------------------------------\n");
for(i=0; i<num; i++)
{
JCB[i].finish=0;
}
staTime, endTime,sumTurTime=0.0, sumWTuTime=0.0, aveTurTime, aveWTuTime;
current=0; times=0; pre=0;
JCB[pre].finTime=0;
scanf("%s",JCB[i].name);
printf("到达时间: ");
scanf("%d",&JCB[i].arrTime);
printf("服务时间: ");
scanf("%d",&JCB[i].serTime);
JCB[i].priority = 0;
JCB[i].finish =0;
}
else
{
if(JCB[i].arrTime>JCB[pre].finTime)
JCB[i].begTime=JCB[i].arrTime;
else
JCB[i].begTime=JCB[pre].finTime;
JCB[i].finTime=JCB[i].begTime+JCB[i].serTime;
if(JCB[j].priority>JCB[current].priority)
current=j; /*找出服务时间比较短的一个*/
}
}
}
return current;/*返回当前作业*/
}
void runing(int i, int times, int pre, int staTime, int endTime)
X3到达时间最迟,其响应比最小,所以在最后。
我的体会:
#include<string.h>
typedef char string[10]; /* //定义string为含有10个字符元素的字符数组类型*/
struct task {
string name; /*作业号*/
int arrTime; /*作业到达时间*/
int serTime; /*作业要求服务时间*/
{
if( !JCB[j].finish) /*还没完成(运行)*/
{
if(JCB[current].arrTime<=JCB[pre].finTime) /*如果作业在上一个作业完成之前到达*/
{
if(JCB[j].arrTime<=JCB[pre].finTime&&JCB[j].priority>JCB[current].priority )
{
if(times==0)
{
printf("名称到达时间服务时间开始时间完成时间周转时间带权周转时间\n");
}
printf("%9s%9d%9d%9d%9d%9d%9d\n",
JCB[i].name,JCB[i].arrTime,JCB[i].serTime,
JCB[i].begTime,JCB[i].finTime,JCB[i].turTime,JCB[i].wTuTime);
响应比R定义如下:R=(W+T)/T=1+W/T
其中T为该作业估计需要的执行时间,W为作业在后备状态队列中的等待时间。
每当要进行作业调度时,系统计算每个作业的响应比,选择其中R最大者投入执行。这样,即使是长作业,随着它等待时间的增加,W/T也就随着增加,也就有机会获得调度执行。这种算法是介于FCFS和SJF之间的一种折中算法。由于长作业也有机会投入运行,在同一时间内处理的作业数显然要少于SJF法,从而采用HRRN方式时其吞吐量将小于采用SJF法时的吞吐量。另外,由于每次调度前要计算响应比,系统开销也要相应增加。
}
void check( )
{
int i;
int staTime, endTime, sumTurTime=0.0, sumWTuTime=0.0, aveTurTime, aveWTuTime;
int current=0, times=0, pre=0;
JCB[pre].finTime=0;
for(i=0; i<num; i++)
JCB[i].turTime=JCB[i].finTime-JCB[i].arrTime;
JCB[i].wTuTime=JCB[i].turTime/JCB[i].serTime;
}
if(times==num-1)
endTime=JCB[i].finTime;
JCB[i].finish=1;
}
void print(int i,int times)
printf("\n-- HRRN -----------------------------------------------------------------\n");
for(times=0; times<num; times++)
{
current=HRN(pre);
runing(current, times, pre, staTime, endTime);
}JCB[10];
int num;
void input()
{
int i;
system("cls");
printf("\n请输入作业数量: ");