C++实现FCFS调度算法
前言 :
最近刚开始学操作系统,刚好要做实验便记录一下实验内容,首先要理解FCFS的基本概念,它是以提交时间为核心的一种调度算法
基本思路:
题目已知提交时间与运行时间要我们得出所有作业的开始、完成、周转、带权周转、平均周转、平均带权周转时间。
题目关键在于求出上一作业的完成时间后与下一作业的提交时间相比较,以此来判断开始时间是等于本作业的提交时间还是上一次作业的完成时间
#include<iostream>
#include <iomanip>//保留小数用到
using namespace std;
struct Fcfs
{int N;double Htime;//提交时间double Rtime;//运行时间double Stime;//开始时间double Ctime;//完成时间double Ztime;//周转时间double DZtime;//带权周转时间
};#define t 4//作业数量double sumZtime;//总周转时间double sumDZtime;//总带权周转时间void Fin();void Px();void Get();void print();struct Fcfs F[t],temp;void Fin() {//输入所有作业的提交与执行时间for (int i = 0; i < t; i++) {cout << "请输入提交时间: ";cin >> F[i].Htime;cout << "请输入执行时间: ";cin >> F[i].Rtime; }cout << endl;}void Px() { //冒泡升序排序(提交时间) for (int i = 0; i < t - 1; i++) {for (int j = 0; j < t - i-1; j++) {if (F[j + 1].Htime < F[j].Htime) {temp = F[j + 1]; //temp = F[j + 1].Htime;F[j + 1] = F[j]; //F[j + 1].Htime = F[j].HtimeF[j] = temp; //F[j].Htime = temp//以上注释如此填写会只交换Htime而不交换Rtime}}}}void Get() { //先把第一个作业所有数据得出F[0].Stime = F[0].Htime;F[0].Ctime = F[0].Stime + F[0].Rtime;F[0].Ztime = F[0].Ctime - F[0].Htime;F[0].DZtime = F[0].Ztime / F[0].Rtime;sumZtime= F[0].Ztime;sumDZtime= F[0].DZtime;for (int i = 1; i < t; i++) { //根据第一个数据求开始时间if (F[i].Htime < F[i - 1].Ctime) { //如果提交时间小于上一个作业的完成时间F[i].Stime = F[i - 1].Ctime; //开始时间等于上一个作业的完成时间}elseF[i].Stime = F[i].Htime; //开始时间等于本作业的提交时间//-----------------------------------------------------------------------//公共部分求出剩下数据:F[i].Ctime = F[i].Stime + F[i].Rtime; //完成=开始+运行F[i].Ztime = F[i].Ctime - F[i].Htime; //周转=完成-提交F[i].DZtime = F[i].Ztime / F[i].Rtime; //带权周转=周转/运行sumZtime += F[i].Ztime; //循环累加sumDZtime += F[i].DZtime; //循环累加}}void print() {cout << setiosflags(ios::fixed) << setprecision(2); //保留2位小数cout << "FCFS调度算法:" << endl;cout << "作业\t 提交时间\t 执行时间\t 开始时间\t 完成时间\t 周转时间\t 带权周转时间\t "<<endl;for (int i = 0; i < t; i++) {F[i].N = i + 1;cout << F[i].N << "\t\t" << F[i].Htime << "\t\t" << F[i].Rtime << "\t\t" <<F[i].Stime << "\t\t" << F[i].Ctime << "\t\t" << F[i].Ztime << "\t\t" << F[i].DZtime << "\n";}cout << setiosflags(ios::fixed) << setprecision(3); //保留3位小数cout << "平均周转时间: ";cout << sumZtime/t << endl;cout << "平均带权周转时间: ";cout << sumDZtime/t << endl;}int main() {Fin();Px();Get();print();}
输入:9.00 0.10
8.00 2.00
8.50 0.50
9.50 0.20
C++实现FCFS调度算法相关推荐
- fcfs调度算法_FCFS:先来先服务调度算法
fcfs调度算法 The FCFS, which stands for First Come First Serve Scheduling Algorithm, is a non-preemptive ...
- fcfs调度算法_C / C ++程序用于先到先得(FCFS)调度算法
fcfs调度算法 Here you will get C/C++ program for first come first served (fcfs) scheduling algorithm. 在这 ...
- FCFS调度算法(操作系统)先来先服务
FCFS调度算法(FCFS,First Come First Serve) 算法思想: 主要从"公平的角度考虑"(类似于我们生活中排队买东西) 算法规则: 按照作业/进程到达的先后 ...
- FCFS调度算法与SJF调度算法(C语言实现)
FCFS调度算法的思想就是谁先来就谁先受到服务,这与餐厅排队买饭是一个道理. SJF调度算法是谁的服务时间短谁就先来.(举个例子,一个人山人海的餐厅里,都在那抢饭吃,很混乱,没人排队,谁吃的快谁就先吃 ...
- 操作系统实验 作业调度算法 先来先服务FCFS调度算法
作业调度算法 先来先服务FCFS调度算法 作业调度的原理: 非抢占调度 把作业从外存调入内存 作业调度算法: 先来先服务FCFS 短作业优先SJF 静态优先级调度 高响应比优先调度 实验原理 作业调度 ...
- 模拟FCFS调度算法(先来先服务)没错,是篇好文章!
文章目录 一.FCFS的介绍 二.代码演示 三.代码分析 1.使用节点模拟进程 2.SimulateFCFS(核心模拟FCFS类) 3.创建一个节点为n的队列(模拟就绪队列) 4.核心计算分析 5.输 ...
- 先来先服务(FCFS)调度算法(Java实现)
文章目录 前言 一.先来先服务(FCFS)是什么? 二.先来先服务(FCFS)算法分析 三.实现代码 1.作业数据类 2.作业调度类 3.运行结果 总结 前言 在操作系统中作业调度的主要任务是根据PC ...
- 调度算法—FCFS调度算法详解
FCFS概念介绍 FCFS,全称First come First Serve,中文名:先来先调度算法. 优点:简单,易实现: 缺点:对短作业不公平: FCFS代码实现 FCFS算法的实现步骤: 1.确 ...
- 先来先服务调度算法(FCFS)
先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度.当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将它们调入内 ...
最新文章
- 安装SecureCRT
- python连通域标记_pythonamp;#8212;二值图像连通域标记 - 易采站长站
- Extjs 更换主题(转载)
- ubuntu安装可加速播放打视频播放器vlc
- vscode-icons插件使用
- pads layout PCB整体旋转,不改变布局并保留连线
- OUTLOOK邮箱设置
- 【最小割】HDU 4971 A simple brute force problem.
- java unicode编码转换中文_Java实现 中文转换成Unicode编码 和 Unicode编码转换成中文...
- 达内java考试_达内第一次JAVA考试题
- 零基础如何入门MATLAB(适用于所有编程语言)?(建议收藏)
- 百度文库文字下载(python原码)
- USB 格式化,提示The volume is too big for FAT32(卷对FAT32来说太大)
- 王道训练营Day24——Linked
- JavaScript世界各地时间转换为北京时间
- dagger2简单使用与理解笔记
- BGP 下一跳的理解和实验
- 三维分布图 matlab,怎样用matlab画三维三点分布图
- 宠物商店mysql数据库设计_宠物商城数据库设计
- 使用viewer实现图片预览
热门文章
- 2021年熔化焊接与热切割试题及解析及熔化焊接与热切割模拟考试题
- 每日一坑:qt dragEnterEvent、dragMoveEvent、dropEvent不响应
- 用java编写输出直角三角型、倒直角三角形
- 【扫盲】SDN网络与传统网络对比分析
- 企业路由器配置PPTP PC到站点模式Virtual Private Network指南_1(外网访问内网资源)
- 库存物料与非库存物料的区别
- html空间 绑定域名,墨涩网 - Coding搭建html静态网站后绑定域名+SSL证书——墨涩网...
- python 回调函数
- Kinect的学习笔记发展一Kinect引进和应用
- 稻城亚丁6日游之准备