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

合集下载

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

操作系统作业调度实验报告
#define getpch(type) (type*)malloc(sizeof(type))
#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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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请输入作业数量: ");
相关文档
最新文档