1、编写并调试一个单道处理系统的作业等待模拟程序。

  作业等待算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRN)的调度算法。

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

输入样例:

作业名   提交时间   运行时间

1         5         2

2         2         5

3         2         4

FCFS:

按照提交时间排序:2,3,1

作业2 开始时间 2

运行时间 5

完成时间 7

周转时间 7 - 2 = 5

带权周转时间 5 / 5 = 1

作业 3 开始时间 7

运行时间 4

完成时间 11

周转时间 11 - 2 = 9

带权周转时间 9 / 4 = 2.25

作业 1 开始时间 11

运行时间 2

完成时间 13

周转时间 13 - 5 = 8

带权周转时间 8 / 2 = 4

SJF:

按照运行时间从短到长排序:1,3,2

作业 1 开始时间 5

运行时间 2

完成时间 7

周转时间 7 - 5 = 2

带权周转时间 2 / 2 = 1

作业3 开始时间 7

运行时间 4

完成时间 11

周转时间 11 - 2 = 9

带权周转时间 9 / 4 = 2.25

作业 2 开始时间 11

运行时间 5

完成时间 16

周转时间 16 - 2 = 14

带权周转时间 14 / 5 = 2.8

HRN:

作业1 等待时间 5 - 5 = 0  优先权 0 / 2 + 1 = 1

作业2 等待时间 5 - 2 = 3  优先权 3 / 5 + 1 = 1.6

作业3 等待时间 5 - 2 = 3  优先权 3 / 4 + 1 = 1.75

按照优先权排序:3,2,1

作业 3 开始时间 2

运行时间 4

完成时间 6

周转时间 6 - 2 = 4

带权周转时间 4 / 4 = 1

作业 2 开始时间 6

运行时间 5

完成时间 11

周转时间 11 - 2 = 9

带权周转时间 11 / 5 = 1.8

作业1 开始时间 11

运行时间 2

完成时间 13

周转时间 13 - 5 = 8

带权周转时间 8 / 2 = 4

#include <iostream>
#include <cmath>
using namespace std; struct Box
{
string ID; //作业号
double begin_time; //提交时间
double turnaround_time; //周转时间
double service_time; //要求服务时间
double finish_time; //完成时间
double Wturnaround_time; //带权周转时间
double wait_time; //等待时间
double rate; //优先权
Box& operator = (const Box& p2) //重载 = 运算符,方便排序
{
this->begin_time = p2.begin_time;
this->finish_time = p2.finish_time;
this->service_time = p2.service_time;
this->ID = p2.ID;
this->turnaround_time = p2.turnaround_time;
this->Wturnaround_time = p2.Wturnaround_time;
this->wait_time = p2.wait_time;
this->rate = p2.rate;
return *this;
}
}; typedef struct
{
Box data[]; } JCB; JCB jcb;
int n; void init() //初始化作业块
{
cout<<"please input the number of the process:";
cin>>n;
for(int i = ; i<n; i++)
{
cout<<"process ID:";
cin>>jcb.data[i].ID;
cout<<jcb.data[i].ID<<"'s begin time:";
cin>>jcb.data[i].begin_time;
cout<<jcb.data[i].ID<<"'s service time:";
cin>>jcb.data[i].service_time;
}
for(int i = ; i<n-; i++) //按照提交时间从前到后排序,小的在前
{
for(int j = i+; j<n; j++)
{
if(jcb.data[i].begin_time > jcb.data[j].begin_time)
swap(jcb.data[i],jcb.data[j]);
}
}
for(int i = ; i<n-; i++) //提交时间一样,序号小的排前面
{
for(int j = i+; j<n; j++)
{
if(jcb.data[i].begin_time == jcb.data[j].begin_time && jcb.data[i].ID > jcb.data[j].ID)
swap(jcb.data[i],jcb.data[j]);
}
}
} void FCFS() //先来先服务
{
double bt = jcb.data[].begin_time;
double gtt = ;
double gwtt = ;
double real_begin;
cout<<"ID "<<"real begin time "<<"begin time "<<"turnaround time "<<"finish time "<<"wighted turnaround time"<<endl;
for(int i = ; i<n; i++)
{
real_begin = bt; //真实开始时间
jcb.data[i].finish_time = real_begin + jcb.data[i].service_time; //完成时间 = 开始时间 + 服务时间
jcb.data[i].turnaround_time = jcb.data[i].finish_time - jcb.data[i].begin_time; //周转时间 = 完成时间 - 提交时间
jcb.data[i].Wturnaround_time = jcb.data[i].turnaround_time/jcb.data[i].service_time; //带权周转时间 = 周转时间/服务时间
cout<<jcb.data[i].ID<<" "<<real_begin<<" "<<jcb.data[i].begin_time
<<" "<<jcb.data[i].turnaround_time<<" "<<jcb.data[i].finish_time
<<" "<<jcb.data[i].Wturnaround_time<<endl;
bt = jcb.data[i].finish_time; //下一个作业的开始时间
gtt += jcb.data[i].turnaround_time; //总周转时间
gwtt += jcb.data[i].Wturnaround_time; //总带权周转时间
}
cout<<"group's turnaround time :"<<gtt/n<<endl;
cout<<"group's wighted turnaround time :"<<gwtt/n<<endl;
} void SJF() //短作业优先
{
double bt = ;
double gtt = ;
double gwtt = ;
double real_begin;
cout<<"ID "<<"real begin time "<<"begin time "<<"turnaround time "<<"finish time "<<"wighted turnaround time"<<endl;
for(int i = ; i<n-; i++) //按照服务时间从小到大排序
for(int j = i; j<n; j++)
if(jcb.data[i].service_time > jcb.data[j].service_time)
swap(jcb.data[i],jcb.data[j]);
for(int i = ; i<n-; i++)
{
for(int j = i+; j<n; j++)
{
if(jcb.data[i].service_time == jcb.data[j].service_time && jcb.data[i].ID > jcb.data[j].ID)
swap(jcb.data[i],jcb.data[j]);
}
}
bt = jcb.data[].begin_time;
for(int i = ; i<n; i++)
{
real_begin = bt;
jcb.data[i].finish_time = real_begin + jcb.data[i].service_time;
jcb.data[i].turnaround_time = jcb.data[i].finish_time - jcb.data[i].begin_time;
jcb.data[i].Wturnaround_time = jcb.data[i].turnaround_time/jcb.data[i].service_time;
cout<<jcb.data[i].ID<<" "<<real_begin<<" "<<jcb.data[i].begin_time
<<" "<<jcb.data[i].turnaround_time<<" "<<jcb.data[i].finish_time
<<" "<<jcb.data[i].Wturnaround_time<<endl;
bt = jcb.data[i].finish_time;
gtt += jcb.data[i].turnaround_time;
gwtt += jcb.data[i].Wturnaround_time;
}
cout<<"group's turnaround time :"<<gtt/n<<endl;
cout<<"group's wighted turnaround time :"<<gwtt/n<<endl;
} void HRN() //高响应比优先
{
double bt = ;
double gtt = ;
double gwtt = ;
double real_begin;
cout<<"ID "<<"real begin time "<<"begin time "<<"turnaround time "<<"finish time "<<"wighted turnaround time"<<endl;
for(int i = ; i<n; i++)
{
jcb.data[i].wait_time = jcb.data[n-].begin_time - jcb.data[i].begin_time; //等待时间 = 作业最后提交时间 - 提交时间
jcb.data[i].rate = jcb.data[i].wait_time/jcb.data[i].service_time+; //高响应比 = 等待时间 / 服务时间 + 1
}
for(int i = ; i<n-; i++)
for(int j = i; j<n; j++)
if(jcb.data[i].rate < jcb.data[j].rate)
swap(jcb.data[i],jcb.data[j]);
bt = jcb.data[].begin_time;
for(int i = ; i<n; i++)
{
real_begin = bt;
jcb.data[i].finish_time = real_begin + jcb.data[i].service_time;
jcb.data[i].turnaround_time = jcb.data[i].finish_time - jcb.data[i].begin_time;
jcb.data[i].Wturnaround_time = jcb.data[i].turnaround_time/jcb.data[i].service_time;
cout<<jcb.data[i].ID<<" "<<real_begin<<" "<<jcb.data[i].begin_time
<<" "<<jcb.data[i].turnaround_time<<" "<<jcb.data[i].finish_time
<<" "<<jcb.data[i].Wturnaround_time<<endl;
bt = jcb.data[i].finish_time;
gtt += jcb.data[i].turnaround_time;
gwtt += jcb.data[i].Wturnaround_time;
}
cout<<"group's turnaround time :"<<gtt/n<<endl;
cout<<"group's wighted turnaround time :"<<gwtt/n<<endl;
} int main()
{
int k = ;
while()
{
cout<<"*****************************"<<endl;
cout<<" 1.FCFS"<<endl<<" 2.SJF"<<endl<<" 3.HRN"<<endl;
cout<<"*****************************"<<endl;
cout<<"please choose:";
cin>>k;
init();
switch(k)
{
case :
FCFS();
break;
case :
SJF();
break;
case :
HRN();
break;
default:
break;
}
}
return ;
}

FCFS,SJF,HRN的更多相关文章

  1. C语言模拟实现先来先服务(FCFS)和短作业优先(SJF)调度算法

    说明 该并非实现真正的处理机调度,只是通过算法模拟这两种调度算法的过程. 运行过程如下: 输入进程个数 输入各个进程的到达事件 输入各个进程的要求服务事件 选择一种调度算法 程序给出调度结果:各进程的 ...

  2. 0422 Step2-FCFS调度

    一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行, ...

  3. 0421 实验二Step2-FCFS调度

    一.目的和要求 1. 实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 2.实验要求 用高级语言编写一个或多个作业调度的模拟程序. 单道批处理系统的作业调度程序.作业一投入运行, ...

  4. C语言程序代写(Linux下线程)

    联系QQ:928900200 CSCI 3120 Operating Systems Summer 2014 Handout 3Assignment 2Date Due: June 5, 2014 b ...

  5. 菜鸟的飞翔日记-os篇

    一轮王道os复习感想 1概述 虽然去年有上操作系统这门必修课,考的成绩也算理想,本来还有点沾沾自喜,嗯,觉得自己学的还不错,知道有一天我拿起了王道,(没给王道打广告)看王道的原因完全在于为考研做准备, ...

  6. OS作业模拟SJF和FCFS

    一个OS的作业, 用于模拟短作业优先 和 先来先服务两种作业调度方式. #!/usr/bin/python3.5 ## Modify the SJF and FCFS algorithm in the ...

  7. 调度算法FCFS、SJF和优先权调度的介绍和例题

    调度算法 一.先来先服务FCFS (First Come First Serve) 1.思想: 选择最先进入后备/就绪队列的作业/进程,入主存/分配CPU 2.优缺点 优点:对所有作业/进程公平,算法 ...

  8. 《操作系统_FCFS和SJF》

    先来先服务FCFS和短作业优先SJF进程调度 转自:https://blog.csdn.net/qq_34374664/article/details/73231072 一.概念介绍和案例解析 FCF ...

  9. OS实验报告--FCFS算法

    实验二.作业调度模拟实验 专业:商业软件工程  姓名:王泽锴 学号:201406114113 一.实验目的 (1)加深对作业调度算法的理解: (2)进行程序设计的训练. 二.实验内容和要求 (1)实验 ...

随机推荐

  1. 递推问题 hdu 2046 与1143的比对

    2046 在2×n的一个长方形方格中,用一个1× 2的骨牌铺满方格,输入n ,输出铺放方案的总数.例如n=3时,为2× 3方格,骨牌的铺放方案有三种,如下图:   Input 输入数据由多行组成,每行 ...

  2. JVM锁优化以及区别

    偏向所锁,轻量级锁都是乐观锁,重量级锁是悲观锁. 首先简单说下先偏向锁.轻量级锁.重量级锁三者各自的应用场景: 偏向锁:只有一个线程进入临界区: 轻量级锁:多个线程交替进入临界区: 重量级锁:多个线程 ...

  3. react-native 沉浸式状态栏

    使用StatusBar即可实现沉浸式,但是必须把背景色设置为透明.否则如果有不同页面的头部颜色不一样的话,导航栏的颜色动画会很怪异,不会是跟着页面一起动画. <StatusBar barStyl ...

  4. JS中浏览器的数据存储机制

    一.JS中的三种数据存储方式 cookie.sessionStorage.localStorage 二.cookie 1.cookie的定义: cookie是存储在浏览器上的一小段数据,用来记录某些当 ...

  5. Oracle数据库账户口令复杂度-等保测评之身份鉴别

    1.     默认情况下数据库没有启用密码验证函数功能,可通过下面sql查询 SQL> select limit from dba_profiles where RESOURCE_NAME='P ...

  6. PE重装系统

    PE重装系统 PE: 含义:全称 Windows Preinstall Environment,即Windows 预安装环境 作用: 是一个用于Windows安装准备的最小操作系统,其实就是一个简易版 ...

  7. javascript_03-数据类型

    数据类型 JavaScript 和 Java 一样,也是有基本数据类型的.但也是有区别的. JavaScript中的数据类型 简单(基本.值)数据类型 number string boolean un ...

  8. Python-共享引用

    A会改变么? 下面三小段代码,A的值都会改变么? >>> A = "spam" >>> B = A >>> B = " ...

  9. 001——搭建OpenCV实验环境

    开发环境 VS 2017 15.7.6 OpenCV 3.4.1 搭建环境 设置环境变量 创建Win32 空项目 配置属性管理器 测试代码 #include<opencv2/opencv.hpp ...

  10. 【OF框架】在部署中使用 Windows身份认证

    准备 了解Windows身份认证相关知识及原理 框架开发项目完成,并完成发布包,完成在IIS中部署. 框架支持对Windows身份认证的实现,仅需要通过配置节进行配置即可切换,可以在部署的时候配置即可 ...