作业调度算法

操作系统之实验二作业调度模拟程序

五迷三道 提交于 2020-03-31 02:01:05
实验二 作业调度模拟程序 专业:商业软件工程 班级:商软2班 姓名:甘佳萍 学号:201406114207 一、目的 实验目的: (1)加深对作业调度算法的理解; (2)进行程序设计的训练。 二、要求 实验要求: 用高级语言编写一个或多个作业调度的模拟程序。 单道批处理系统的作业调度程序。作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所运行的时间等因素。 作业调度算法: (1) 采用先来先服务(FCFS)调度算法,即按作业到达的先后次序进行调度。总是首先调度在系统中等待时间最长的作业。 (2) 短作业优先 (SJF) 调度算法,优先调度要求运行时间最短的作业。 (3) 响应比高者优先(HRRN)调度算法,为每个作业设置一个优先权(响应比),调度之前先计算各作业的优先权,优先数高者优先调度。RP (响应比)= 作业周转时间 / 作业运行时间=1+作业等待时间/作业运行时间 每个作业由一个作业控制块JCB表示,JCB可以包含以下信息:作业名、提交(到达)时间、所需的运行时间、所需的资源、作业状态、链指针等等。 作业的状态可以是等待W(Wait)、运行R(Run)和完成F(Finish)三种之一。每个作业的最初状态都是等待W。 一、 模拟数据的生成 1. 允许用户指定作业的个数(2-24),默认值为5。 2.

4.操作系统_处理器调度

╄→гoц情女王★ 提交于 2020-02-04 02:39:00
1. 处理器调度 文章目录 1. 处理器调度 1.1. 概念 1.2. 处理器调度的层次 1.2.1. 高级调度 1.2.2. 中级调度 1.2.3. 低级调度 1.2.4. 处理器三级调度模型 1.2.5. 处理器二级调度模型 1.3. 选择调度算法的原则 1.3.1. 资源利用率 1.3.2. 响应时间 1.3.3. 周转时间 1.3.4. 吞吐率 1.3.5. 公平性 1.4. 作业周转时间 1.4.1. 作业周转与平均周转时间 1.4.2. 作业带权周转时间和平均作业带权周转时间 1.5. 作业的管理与调度 1.5.1. 批处理作业的组织和管理 1.1. 概念 在计算机系统中,可能有很多批处理作业同时存放在磁盘的后备作业队列中,或者有很多终端与主机相连,交互塑作业不断地进人系统,这样主存和处理器等资源便供不应求。按照何种原则挑选批处理作业进入主存运行、能否继续接纳分时用户. 如何在进程之间分配处理器资源,无疑是操作系统进行资源管理所要面对的重要问题,由处理器调度完成涉及处理器调度和资源分配的工作。 1.2. 处理器调度的层次 1.2.1. 高级调度 高级调度( high level scheduling)又称作业调度、长程调度,在多道批处理操作系统中, 从输人系统的一批作业中按照预定的调度策略挑选若干作业进入主存,为其分配所需资源

算法设计与分析(分支限界法批处理作业调度)

一个人想着一个人 提交于 2019-12-15 18:51:58
批处理作业调度分支限界算法 (1)问题分析: 给定n个作业的集合{J1,J2,…,Jn}。每个作业必须先由机器1处理,然后由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理的时间。所有作业在机器2上完成处理的时间和称为该作业调度的完成时间和。 2)程序源代码: import java.util.Collections; import java.util.LinkedList; /** * 批处理作业调度问题--优先队列式分支限界法 */ public class BBFlow { public int n;//作业数 public int bestc;//最小完成时间和 public int [][]m;//个作业所需的处理时间数组 public int [][]b;//个作业所需的处理时间排序数组 public int[][] a;//数组m和b的对应关系数组 public int[] bestx;//最优解 public boolean[][] y;//工作数组 public BBFlow(int n,int[][] m){ this.n=n; bestc=10000; this.m=m; b=new int[n][2]; a=new int[n][2]; bestx=new int[n]; y=new boolean

批处理作业调度_分支限界法

旧时模样 提交于 2019-12-14 16:44:28
一、 问题描述 给定 n 个作业的集合 j = {j1, j2, …, jn}。每一个作业 j[i] 都有两项任务分别在两台机器上完成。每一个作业必须先由机器1 处理,然后由机器2处理。作业 j[i] 需要机器 j 的处理时间为 t[j][i] ,其中i = 1, 2, …, n, j = 1, 2。对于一个确定的作业 调度,设F[j][i]是作业 i 在机器 j 上的完成处理的时间。所有作 业在机器2上完成处理的时间之和 f = sigma F[2][i] 称为该作业 调度的完成时间之和。 批处理作业调度问题要求对于给定的 n 个作业,制定最佳作业调度 方案,使其完成时间和达到最小。 二、 解题思路及所选算法策略的可行性分析 用优先队列式分支限界法解决此问题。由于要从n个作业的所有排列中找出有最小完成时间和的作业调度,所以批处理作业调度问题的解空间树是一颗排列树。对于批处理作业调度问题,可以证明存在最佳作业调度使得在机器1和机器2上作业以相同次序完成(因为每个作业必须先在机器1上完成作业才能在机器2上进行作业)。 如果对于未安排的作业,对于其中一个作业,每当该作业在机器1上完成处理后都能立即在机器2上开始处理,则机器1没有空闲时间,达到满工作状态,将此情况的未安排作业在机器2上的工作时间总和记为S1,同理将机器2满工作状态的情况下的工作时间总和记为S2,则必有:

处理机调度-作业调度

感情迁移 提交于 2019-12-04 20:55:46
处理机调度-作业调度 作业调度的主要目的-两个转变 1.完成作业从后备状态到执行状态的转变 2.从执行状态到完成状态的转变 作业调度的主要功能 记录系统中各作业的状况 为了从若干的作业中挑选出一个作业来投入运行,并且在执行的时候对其进行管理,它就必须掌握作业在各个状态,包括执行阶段的有关情况。 为了记录这些状态信息,系统为每一个作业创建了一个 作业控制块(JCB) 来记录这些信息。 JCB块的创建与释放 1.系统为每个作业建立一个作业控制块JCB记录这些有关信息 2.当作业执行完毕进入完成状态之后,系统撤消其JCB而释放有关资源并撤消作业 JCB块内包含的内容 1.作业名由用户提供并由系统将其转换为系统可识别的作业 标识符 2.作业类型指该作业属于 计算型 (要求CPU时间多)、 管理型 (要求输入/输出量大),或 图形设计型 (要求高速图形显示)等 3.资源要求包括:该作业估计执行时间、要求的最迟完成时间、要求的内存量和外存量、要求的外设类型及台数以及要求的软件支持工具库函数等,资源要求均由用户提供 4.资源使用情况包括:作业进入系统时间、开始执行时间、已执行时间、内存地址、外设台数等 5.优先级用来决定该作业的调度次序,可以由用户给定,也可以由系统动态计算产生 6.当前状态指该作业当前所处的状态。只有当作业处于 后备状态 时,该作业才可以被调度

批处理作业调度-回溯法

匿名 (未验证) 提交于 2019-12-02 23:43:01
2019独角兽企业重金招聘Python工程师标准>>> 问题描述:   给定n个作业,集合J=(J1,J2,J3)。每一个作业Ji都有两项任务分别在2台机器上完成。每个作业必须先有机器1处理,然后再由机器2处理。作业Ji需要机器j的处理时间为tji。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理时间。则所有作业在机器2上完成处理时间和f=F2i,称为该作业调度的完成时间和。 简单描述:   对于给定的n个作业,指定最佳作业调度方案,使其完成时间和达到最小。 算法设计:   从n个作业中找出有最小完成时间和的作业调度,所以批处理作业调度问题的解空间是一棵排列树。   类Flowshop的数据成员记录解空间的结点信息,M输入作业时间,bestf记录当前最小完成时间和,bestx记录相应的当前最佳作业调度。   在递归函数Backtrack中,      当i>n时,算法搜索至叶子结点,得到一个新的作业调度方案。此时算法适时更新当前最优值和相应的当前最佳调度。     当i<n时,当前扩展结点在i-1层,以深度优先方式,递归的对相应子树进行搜索,对不满足上界约束的结点,则剪去相应的子树。 算法描述: class Flowshop { friend Flow ( int * *, int , int []); private : void Backtrack ( int i )

算法设计与分析——批处理作业调度

情到浓时终转凉″ 提交于 2019-12-02 22:45:41
之前讲过一个相似的问题流水作业调度问题,那一道题最开始用动态规划,推到最后得到了一个Johnson法则,变成了一个排序问题,有兴趣的可以看一下 https://www.cnblogs.com/wkfvawl/p/11667092.html 一、问题描述 给定n个作业的集合{J1,J2,…,Jn}。每个作业必须先由机器1处理,然后由机器2处理。作业Ji需要机器j的处理时间为t ji 。对于一个确定的作业调度,设Fji是作业i在机器j上完成处理的时间。所有作业在机器2上完成处理的时间和称为该作业调度的完成时间和。批处理作业调度问题要求对于给定的n个作业,制定最佳作业调度方案,使其完成时间和达到最小。 例:设n=3,考虑以下实例: 来源: https://www.cnblogs.com/wkfvawl/p/11765576.html

处理机调度的层次

房东的猫 提交于 2019-12-01 16:36:25
一个作业从提交开始直到完成,往往经历以下三个调度: 一、作业调度 作业调度又称高级调度,主要任务是按照一定的原则从外存上处于后备队列的作业中挑选一个或者多个作业,为其分配内存、I/O设备等必要资源,并建立相应的进程,使它们获得竞争处理机的权利。简要地说就是 内存与外存的调度 ,对于每个作业仅调入一次、调出一次。多道批处理系统中大多配有作业调度,而其他系统中通常不需要配置作业调度,作业调度的执行频率较低且时间较长,通常为几分钟一次。 二、内存调度 内存调度又称中级调度,引入中级调度的目的是为了 提高内存利用率和系统吞吐量 。内存调度将那些暂时不能运行的进程调至外存等待,把此时的进程状态称为挂起状态。当处于挂起状态的进程能够运行且内存有空闲时,将其重新调入内存并修改状态为就绪状态,挂在就绪队列上等待。 三、进程调度 进程调度又称低级调度,主要任务是按照某种方法和策略从就绪队列中选取一个进程,将处理机分配给它。进程调度是操作系统中 最基本的一种调度 ,执行频率很高且时间较短,一般几十毫秒一次。 四、三级调度的联系 1、作业调度为进程活动做准备,进程调度使进程正常活动起来,内存调度将暂时不能运行的进程挂起,内存调度处于作业调度和进程调度之间; 2、作业调度次数最少,内存调度次数略多,进程调度频率最高; 3、进程调度是最基本的,不可或缺。 对以下2个例子进行分析: 1

回溯算法批处理作业调度问题

五迷三道 提交于 2019-11-30 01:48:09
1、问题描述 给定n个作业的集合J={j1,j2,j3,…jn},每一个作业都有两项任务分别在两台机器上完成。每个作业必须先由机器1处理,再由机器2处理。作业Ji需要机器j的处理时间为tij,设Fij是作业i在机器j上的完成处理时间。所有作业在机器2上处理的时间和称为该作业调度的完成时间和。 批处理作业调度问题要求对于给定的N个作业,制定最佳作业调度方案,使其完成时间和达到最小。其中最典型的一个例子就是在计算机系统中完成一批n个作业,每个作业都先完成计算,然后将计算结果打印出来。 示例: tji 机器1 机器2 作业1 2 1 作业2 3 1 作业3 2 3 在这个例子中。最优调度顺序为:1 3 2;处理时间为:18 2、算法描述 从n个作业的所有排列中找出有最小完成时间和的作业调度,所以批处理调度问题是一颗排列树按照回溯搜索排列树的算法框架,设开始时x=[1,2,3,4…,n]是所给的n个作业,则相应的排列树由 x[1,n]的所有排列构成。 在递归方法backtrack中,当i>n时,算法搜索至叶结点,得到一个新的作业调度方案。此时算法适时更新当前最优值和相应的当前作业调度。 当i<n时,当前扩展结点位于排列树的第i-1层。此时算法选择下一个要安排的作业,以深度优先的方式递归的对相应字数进行搜索。对于不满足上届约束的结点,则减去相应的子树。 程序初始化: int x [ 100

(八)作业调度

倾然丶 夕夏残阳落幕 提交于 2019-11-28 02:11:41
作业调度主要有FIFO,运算时间短的作业优先,优先数调度算法,响应比最高者优先调度算法,均衡调度算法 模拟最高响应比优先作业调度算法 输入:作业流文件,其中存储的是一系列要执行的作业, 每个作业包括三个数据项: 作业号、作业进入系统的时间(用一整数表示,如10:10,表示成1010)、估计执行时间(单位分)优先级(0级最高) 参数用空格隔开,下面是示例: 1 800 50 2 815 30 3 830 25 4 835 20 5 845 15 6 900 10 7 920 5 其中调度时刻为最后一个作业到达系统的时间! 输出作业号!进入内存的时间!每行输出一个作业信息 本程序包括:FIFO,运算时间短的作业优先,优先数调度算法,响应比最高者优先调度算法 作业调度 #include < stdio.h > #include < iostream.h > #include < iomanip.h > #include < string .h > const int MAXJOB = 50 ; // 定义最大作业 // 定义数据结构体 typedef struct node{ int number; int reach_time; int reach_hour; int reach_minite; int need_time; int privilege; float excellent