没有合适的资源?快使用搜索试试~ 我知道了~
操作系统实验六作业调度算法模拟.pdf
资源推荐
资源详情
资源评论
操作系统实验六作业调度算法模拟
实验六 作业调度算法模拟
⼀、实验⽬的
(1)掌握周转时间、等待时间、平均周转时间等概念及其计算⽅法。
(2)理解五种常⽤的进程调度算法(FCFS、SJF、HRRF、HPF、RR),区分算法之间的差异性,并⽤C语⾔模拟实现各算法。
(3)了解操作系统中⾼级调度、中级调度和低级调度的区别和联系。
⼆、实验环境
硬件环境:计算机⼀台,局域⽹环境;
软件环境:Windows或Linux操作系统,C语⾔编程环境。
三、实验内容和步骤
1. 实验说明
1. 基本概念
1. 程序:程序是指静态的指令集合,它不占⽤系统的运⾏资源,可以长久地保存在磁盘中。
2. 进程:进程是指进程实体(由程序、数据和进程控制块构成)的运⾏过程,是系统进⾏资源分配和调度的⼀个独⽴单位。
进程执⾏程序,但进程与程序之间不是⼀⼀对应的。通过多次运⾏,⼀个程序可以包含多个进程;通过调⽤关系,同⼀进
程可以被多个程序包含(如⼀个DLL⽂件可以被多个程序运⽤)。
3. 作业:作业由⼀组统⼀管理和操作的进程集合构成,是⽤户要求计算机系统完成的⼀项相对独⽴的⼯作。作业可以是完成
了编译、链接之后的⼀个⽤户程序,也可以是各种命令构成的⼀个脚本。
4. 作业调度:作业调度是在资源满⾜的条件下,将处于后备状态的作业调⼊内存,同时⽣成与作业相对应的进程,并为这些
进程提供所需要的资源。作业调度适⽤于多道批处理系统中的批处理作业。根据作业控制块中的信息,检查系统是否满⾜
作业的资源要求,只有在满⾜作业调度的资源需求的情况下,系统才能进⾏作业调度。
2. 基本调度算法
1. 1)先来先服务(First-Come First-Served,FCFS)调度算法
先来先服务调度算法遵循按照进⼊后备队列的顺序进⾏调度的原则。该算法是⼀种⾮抢占式的算法,是到⽬前为⽌最简单的调度
算法,其编码实现⾮常容易。该算法仅考虑了作业到达的先后顺序,⽽没有考虑作业的执⾏时间长短、作业的运⾏特性和作业对
资源的要求。
2. 2)短作业优先(Shortest-Job-First,SJF)调度算法
短作业优先调度算法根据作业控制块中指出的执⾏时间,选取执⾏时间最短的作业优先调度。本实验中规定,该算法是⾮抢占式
的,即不允许⽴即抢占正在执⾏中的长进程,⽽是等当前作业执⾏完毕再进⾏调度。
3. 3)响应⽐⾼者优先(HRRF)调度算法
FCFS调度算法只⽚⾯地考虑了作业的进⼊时间,短作业优先调度算法考虑了作业的运⾏时间⽽忽略了作业的等待时间。响应⽐
⾼者优先调度算法为这两种算法的折中。响应⽐为作业的响应时间与作业需要执⾏的时间之⽐。作业的响应时间为作业进⼊系统
后的等待时间与作业要求处理器处理的时间之和。
4. 4)优先权⾼者优先(Highest-Priority-First,HPF)调度算法
优先权⾼者优先调度算法与响应⽐⾼者优先调度算法⼗分相似,根据作业的优先权进⾏作业调度,每次总是选取优先权⾼的作业
优先调度。作业的优先权通常⽤⼀个整数表⽰,也叫优先数。优先数的⼤⼩与优先权的关系由系统或者⽤户规定。优先权⾼者优
先调度算法综合考虑了作业执⾏时间和等待时间的长短、作业的缓急度,作业对外部设备的使⽤情况等因素,根据系统设计⽬标
和运⾏环境⽽给定各个作业的优先权,决定作业调度的先后顺序。
和运⾏环境⽽给定各个作业的优先权,决定作业调度的先后顺序。
3. 本实验所选⽤的调度算法均默认为⾮抢占式调度。实验所⽤的测试数据如下表所⽰。本实验所⽤的测试数据如下表所⽰
2. 实验内容
要求:
1、通过程序的打印信息来检查作业信息的读⼊是否正确。
2、运⾏FCFS算法,检查其运算结果是否正确
3、根据下图所⽰补充短作业优先代码,并计算其等待时间和周转时间。
4、参考以上算法的实现⽅法,编写⾼响应⽐优先算法和优先权⾼者优先算法。
/*
/*
* @Description:
* @version:
* @Author:
* @Date: 2021-05-14 13:25:09
* @LastEditors: Please set LastEditors
* @LastEditTime: 2021-05-14 19:08:11
*/
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
//
最⼤作业数量
#define MAXJOB 50
//
作业的数据结构
typedef struct node
{
int number; //
作业号
int reach_time; //
作业抵达的时间
int need_time; //
作业的执⾏需要的时间
int privilege; //
作业优先级
//
以上是从⽂件中输⼊的信息
float excellent; //
作业响应⽐
int start_time; //
作业开始时间
int wait_time; //
作业等待时间
int visited; //
作业是否已经被访问过
} job;
//
作业序列
job jobs[MAXJOB];
//
作业数量
int quantity;
//
初始化所有作业
void initial_jobs()
{
int i;
for (i = 0; i < MAXJOB; i++)
{
jobs[i].number = 0;
jobs[i].reach_time = 0;
jobs[i].privilege = 0;
jobs[i].excellent = 0;
jobs[i].start_time = 0;
jobs[i].wait_time = 0;
jobs[i].visited = 0;
}
quantity = 0;
}
//
重置所有作业的信息
void reset_jinfo()
{
int i;
for (i = 0; i < MAXJOB; i++)
{
jobs[i].start_time = 0;
jobs[i].wait_time = 0;
jobs[i].visited = 0;
}
}
//
读取作业的基本信息
void readJobdata()
{
FILE *fp;
char fname[20];
int i;
printf("Please input jobs data file name\n");
scanf("%s", fname);
剩余10页未读,继续阅读
资源评论
是空空呀
- 粉丝: 167
- 资源: 3万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功