基于c++的作业调度算法模拟

操作系统模拟实验—短作业调度算法(SJF)Python实现 本次实验是基于Python3.x的环境. INPUT_DATA = [('A',1,5), ('B',4,5), ('C',2,3), ('D',10,2)] # 模拟文件 (作业名字, 作业到达时间, 作业运行时间) ALL_JOB = [] # 从文件读进来的作业 ARRIVED_JOB = [] #就绪队列 import time from math import ceil cla... 阅读详情

程序实现了作业调度算法中的FCFS算法和SJF算法.

FCFS算法:优先考虑系统中等待时间长的作业 ,而不管该作业所需执行时间长短.说的通俗点 , 哪个作业先提交 , 哪个作业先进内存.这是对作业调度而言 , 同样 , FCFS算法也可以用于进程调度 , 此时 谁先进内存的谁先上cpu.

那么这样一来就会出现这样的问题 : 如果一个作业所需运行时间很长(长作业) , 并且它先提交给系统 . 那么该作业就要长时间的占用cpu , 而之后来到的短作业 , 即便它占用cpu的时间很短也上不了cpu.在单位时间内 , cpu上执行的作业数会变少.系统吞吐量降低.

为了解决这种情况 , 采用SJF算法. SJF算法优先考虑短作业 , 即:不管作业的提交时间 , 作业服务时间短的先上cpu . 这样一来,系统吞吐量提高了.

这套代码基于链表 , 链表的一个节点模拟一个作业说明书.

FCFS和SJF两套算法是由void ListSort2(LinkList  &L) 和 void ListSort(LinkList  &L)模拟的.

#include<iostream>
#include<stdlib.h>
using namespace std;

typedef struct LNode_JCB
{
	int arrive_time;
	int serve_time;
	int finish_time;
	int turnover_time;
	struct LNode_JCB *next;
}LNode_JCB , *LinkList;

int main()
{
	//声明 
	void  CreateList_L(LinkList &L , int n);
	void  ListSort(LinkList &L);
	void simulate_cpu_dispatch(LinkList &L);
	void ListSort2(LinkList  &L);
	void FCFS(LinkList &L , int n);
	void SJF(LinkList &L , int n);
	LinkList L;  int n=5;
	
	//先来先服务 
	FCFS(L , n);
	//短作业优先 
	SJF(L,n);
	return 0;
}

void   CreateList_L(LinkList &L , int n)
{
	L = (LinkList)malloc(sizeof(LNode_JCB));
	L->next = NULL;
	for(int i=n ; i>0 ; --i)
	{
		LinkList p = (LinkList)malloc(sizeof(LNode_JCB));
		cout<<"***************************输入第"<<n-i+1<<"的作业到达时间"<<endl;
		cout<<"                            ";
		cin>>p->arrive_time;
		cout<<"***************************输入第"<<n-i+1<<"个作业的服务时间"<<endl;
		cout<<"                            ";
		cin>>p->serve_time;
		p->next = L->next;
		L->next = p;
	}
}

/*
void  ListSort(LinkList &L , LinkList &u)
{
	LinkList m;
	while(L->next)
	{
		if(L->time > L->next->time)
		{
			u = L->next;
			L->next->next = m;
			L->next->next =L;
			L->next = m;
		}
		else
		{
			u = L;
			L = L->next;
		}
	}
}
*/

void ListSort(LinkList  &L)  //单链表排序    基于先来先服务算法排序 
{  
    LinkList p, q;  
    int t;  
    p = L->next;  
    while (p)  
    {  
        q = p->next;  
        while (q)  
        {  
            if (p->arrive_time > q->arrive_time)  
            {  
                t = p->arrive_time;  
                p->arrive_time = q->arrive_time;  
                q->arrive_time = t;
				
				t = p->serve_time;  //在排序时对服务时间也要交换 
				p->serve_time = q->serve_time;
				q->serve_time = t;  
            }  
            q = q->next;  
        }  
        p = p->next;  
    }  
}  


void ListSort2(LinkList  &L)  //单链表排序   基于短作业优先算法排序 
{  
    LinkList p, q;  
    int t;  
    p = L->next;  
    while (p)  
    {  
        q = p->next;  
        while (q)  
        {  
            if (p->serve_time > q->serve_time)  
            {  
                t = p->serve_time;  
                p->serve_time = q->serve_time;  
                q->serve_time = t;
				
				t = p->arrive_time;  //到达时间也要交换 
				p->arrive_time = q->arrive_time;
				q->arrive_time = t;  
            }  
            q = q->next;  
        }  
        p = p->next;  
    }  
}  


void simulate_cpu_dispatch(LinkList &L)
{
	LinkList p = L->next;
	p->finish_time = p->arrive_time +  p->serve_time;
	p->turnover_time = p->finish_time - p->arrive_time;
	while(p->next)
	{
		if(p->next->arrive_time >= p->finish_time)
		{
			p->next->finish_time = p->next->arrive_time +  p->next->serve_time;
			p->next->turnover_time = p->next->finish_time - p->next->arrive_time;
			p = p->next;
		}
		else
		{
			p->next->finish_time = p->finish_time + p->next->serve_time;
			p->next->turnover_time = p->next->finish_time - p->next->arrive_time;
			p = p->next;
		}
	}
}

void  FCFS(LinkList &L , int n)
{
	cout<<"                           ";
	cout<<"实现作业调度算法//基于先来先服务,模拟cpu运行环境"<<endl; 
	CreateList_L(L , n);//构造单链表 
	ListSort(L);//单链表排序 
	simulate_cpu_dispatch(L);
	L = L->next;
	int i=5;
	while(L)
	{
		cout<<endl<<endl<<endl;
		cout<<"///////////////////////////第"<<i-5+1<<"个进入cpu的作业://////////////////////////////"<<endl;
		cout<<"                           到达时间"<<L->arrive_time<<endl<<endl;
		cout<<"                           服务时间"<<L->serve_time<<endl<<endl; 
		cout<<"                           完成时间"<<L->finish_time<<endl<<endl;
		cout<<"                           周转时间"<<L->turnover_time<<endl<<endl;
		i++;
		L= L->next;
	}
}

void  SJF(LinkList &L , int n)
{
	cout<<"                           ";
	cout<<"实现作业调度算法//基于短作业优先算法,模拟cpu运行环境"<<endl; 
	CreateList_L(L , n);//构造单链表 
	ListSort2(L);//单链表排序 
	simulate_cpu_dispatch(L);
	L = L->next;
	int i=5;
	while(L)
	{
		cout<<"///////////////////////////第"<<i-5+1<<"个进入cpu的作业://////////////////////////////"<<endl;
		cout<<"                           到达时间"<<L->arrive_time<<endl<<endl;
		cout<<"                           服务时间"<<L->serve_time<<endl<<endl; 
		cout<<"                           完成时间"<<L->finish_time<<endl<<endl;
		cout<<"                           周转时间"<<L->turnover_time<<endl<<endl;
		i++;
		L= L->next;
	}
}
效果图:


操作系统 实验1【短作业优先调度算法(C++代码实现——FCFS\SJF\HRRN)】 先来先服务(FCFS) 短作业(SJF) 高响应比优先(HRRN) 阅读详情

相关推荐

基于优先级的多道程序系统作业调度——基于优先级

基于优先级的多道程序系统作业调度——基于优先级 编写并调试一个多道程序系统的作业调度模拟程序。   作业调度算法:采用基于优先级的作业调度。 本程序中,我设定CPU最大可运行资源数为10,时间片为0.5,如果输入的作业(单个)占用CPU时间大于10,程序终止,无法调度。 测试样例: 作业名 提交时间 CPU时间 IO时间 优...

Nikki_o3o的博客 903

作业调度算法的仿真

目录 一、实验要求 二、实验内容 三、实验过程 1、实验过程中的存储结构和关键函数 2、主要程序段分析 四、实验结果展示 四、实验分析 一、实验要求 编程完成对先来先服务、短作业优先和高响应比优先三种作业调度算法,并在实验报告中分析这三种方法的特性。 二、实验内容 1、模拟系统随时都可能会收到作业,在执行作业的过程中也是要实时能够接收到新提交的作业,并更新加入作业后备队列中。 2、模拟系统作业调度的流程,在系统空闲时,有作业来会触发...

Echol_sue的博客 1807

操作系统可视化模拟作业调度课程设计

QT框架是一个跨平台的应用程序和用户界面框架,由挪威的Trolltech公司于1991年开发。它的第一个版本专注于Unix系统,但随着时间的推移,它已经演变为一个支持跨平台开发的全能工具集,包括了Windows、Mac OS、Linux以及其他嵌入式系统平台。QT的历史上具有几个重要的里程碑。2008年,Nokia公司收购了Trolltech,并将QT框架广泛应用于Symbian和MeeGo操作系统。之后,QT成为了开源软件,由Qt Project社区维护。

weixin_29903713的博客 986

C++模拟作业调度算法(先来先服务算法、短作业优先和响应比高者优先算法)

事先说明: 本代码为原创,转载请附原博地址。 代码可以运行,但是运算结果并不知道对错(感觉第三个有问题),凌晨两点写的,大脑并不清醒,欢迎交流修改。 如果我的老师查重的时候看到这篇,请你看一下交作业时间和博客时间来确定这是我本人写的~ 理论部分: 简单地说一下吧,毕竟书上应该都有。 先来先服务算法,就非常简单地按照作业到达先后进行计算。 短作业优先算法,是在作业到达的基础上,如果有多...

做题记录 7232

小白快速上手 labelimg:新手图像标注详解教程

本教程主要帮助没有使用过labelimg的小白上手该软件,快速学会基本操作和打标签,为数据集准备打下基础。

小白一枚~ 2万+

项目管理-(补充)七种基本质量工具

七种基本质量工具,用于PDCA循环的架构内 解决与质量相关的问题,分为老七工具和新七工具。 1)老七种:刘英只点劣质茶(流程图、因果图、直方图、散点图、帕累托图、控制图、核查表)2)新七种:锯树联亲测动优(矩阵图、树形图、关联图、亲和图、过程决策程序图、活动网络图、优先矩阵)

weixin_42081167的博客 4602

操作系统·用Java模拟作业调度算法

用Java模拟四种常用的作业调度算法(FCFS、SJF、HPF、HRRN)。

m0_55006433的博客 1345

毕设案例|保安公司智慧管理系统的建设与开发方案

"保安公司智慧管理系统是一款专为保安行业设计的高效信息化解决方案,其核心功能涵盖了从人力资源管理到业务运营的各个方面。系统以Java作为开发语言,结合SpringMVC框架,确保了稳定性和可扩展性,而MySQL数据库则提供了强大的数据存储和处理能力。首先,系统允许用户设置各类保安,如门卫、巡逻员等,实现精细化分类管理。其次,保安信息管理模块包括详细的人事档案、资格证书、培训记录等,便于人员追踪和考核。部门和城市设置方便公司层级管理和异地项目管理。岗位设置与时间安排精确到分钟,确保排班科学合理。

muyu2980的专栏 935

作业调度算法模拟

title: 作业调度。

m0_62378260的博客 692

RS485差分信号A下拉B上拉导致的乱码问题:一个硬件工程师的踩坑实录

本文通过一个工业网关项目中的RS485通信乱码故障,深入剖析了差分信号偏置电路设计的核心要点。文章详细记录了从波形抓取、原理图分析到多节点冲突排查的全过程,重点揭示了A下拉、B上拉这一反常规配置如何导致总线空闲状态不稳定,进而引发数据包末尾多出0x00字节及前导乱码的问题,并最终给出了硬件与软件协同的系统级解决方案与设计准则。

weixin_29159441的博客 236

在 SAP 中修改 Profile 文件中的主机名需要谨慎操作,需需确保所有相关配置保持一致

在SAP系统中修改Profile文件主机名需谨慎操作,主要步骤包括:1)停止相关SAP服务;2)重命名并编辑实例级Profile文件(如ER1_D00_OLDHOST改为ER1_D00_LRPSAP),修改所有含旧主机名的参数;3)可选更新默认Profile文件;4)在Windows系统中调整注册表配置;5)验证一致性后重启服务。关键注意:保持大小写统一、修改前备份文件、集群环境需同步所有节点。通过系统日志确认新主机名生效且无报错。

金牌架构师 1049

SWUST OJ 517题保姆级解析:用C++模拟作业调度,从读题到AC的完整思路

本文详细解析了SWUST OJ 517题的作业调度问题,提供了从理解题目到C++实现的完整思路。通过设计高效的数据结构和算法,帮助读者掌握模拟类题目的解题技巧,特别适合算法初学者和刷题提升的开发者。文章包含代码实现、常见问题解答和测试用例,是解决作业调度方案的实用指南。

weixin_30733003的博客 415

游戏市场销售数据抓取:使用Python爬虫获取游戏市场上的销售情况和玩家反馈

在本文中,我们使用Python爬虫抓取了多个游戏平台上的销售数据、玩家反馈和游戏动态。通过使用requests和Selenium,我们能够有效地获取静态和动态网页数据,并利用pandas进行数据处理和存储。如果您有更具体的需求,可以扩展此爬虫以抓取更多的数据,进行深度分析或实现更复杂的可视化功能。数据抓取是一项非常强大的技术,它不仅能够帮助游戏开发者优化产品,还能帮助营销团队理解玩家需求,提升市场竞争力。

2201_76125261的博客 1308

【计算机操作系统】作业调度算法的 C++ 实现(附源码)

文章目录一、实验目的二、实验内容2.1 单道处理系统的作业调度2.2 多道程序系统的作业调度三、流程图3.1 单道批处理系统的作业调度四、设计思想4.1 设计思路4.2 代码解析六、代码实现七、结尾 一、实验目的   用高级语言编写和调试一个或多个作业调度的模拟程序,以加深对作业调度算法的理解。因为源码中我对一些关键步骤的注释已经比较清晰了,所以在本文中不会再对每一个细节都进行分析,只分析整体的代码结构和所使用到的设计模式。   博客内所有文章均为 原创,所有示意图均为 原创,若转载请附原文链接。 二、

Coder Yang 9295

PyQt5开发应聘简历模版

该工具旨在帮助用户对Excel、CSV格式的数据进行快速导入、分析及可视化展示,支持折线图、柱状图、饼图等多种图表类型,提供数据筛选、排序、统计等功能,适用于企业数据分析人员日常工作。:一款用于本地文件管理的桌面应用,支持文件的新建、复制、移动、删除、重命名等基本操作,具备文件搜索、分类整理、批量操作及文件信息查看等功能,提升用户文件管理效率。:熟悉QSS(Qt Style Sheet)样式表,可对PyQt5界面进行个性化美化,包括控件颜色、字体、边框、布局等样式定制,提升应用视觉体验。

ybmzlqzj的博客 83

【OpenAI】Python:(1) 基于 Gym-CarRacing 的自动驾驶项目 | 前置知识介绍 | 项目环境准备 | 手把手带你一步步实现

本篇是关于多伦多大学自动驾驶专业项目 Gym-CarRacing 的博客。GYM-Box2D CarRacing 是一种在 OpenAI Gym 平台上开发和比较强化学习算法的模拟环境。它是流行的 Box2D 物理引擎的一个版本,经过修改以支持模拟汽车在赛道上行驶的物理过程。由于内容比较多所以分多次更新,本篇是关于前置知识介绍,以及项目环境准备的。

有道无术, 术尚可求。有术无道, 止于术。 5053

c语言实现FCFS SJF算法,实现FCFS和SJF调度算法.docx

操作系统实验报告实验一:作业调度学院:软件学院专业:软件工程班级:软件工程12-01姓名:***学号:541213460157实验一:作业调度实现FCFS和SJF调度算法【实验题目】:编写程序,实现FCFS和SJF算法,模拟作业调度过 程,加深对作业调度的理解。【实验内容】实现FCF和SJF调度算法。-数据结构设计(JCB,后备作业队列)-算法实现与模拟(排序、调度)-输出调度结果,展示调度过程并...

weixin_28923083的博客 1318

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

优先级调度算法的模拟(非抢占式C++实现)

设置参数 设置了四个作业进行实验,可以在init()函数中动态修改 根据计算,根据优先级调度算法,得出作业的调度流程图 运行程序,得出程序运行结果 通过对比可以发现,程序运行正确,并且程序还可以输出,每一秒运行的状态,参数包括正在运行的进程名,开始运行时间,及当前就绪队列中的进程名 流程图 源程序 #include<iostream> using namespace std; const int N = 20; int h[N], hh, tt = ...

falldeep的算法世界 2741

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

基于优先队列的作业调度算法实现

实训作业 #include <bits/stdc++.h> #include <windows.h> using namespace std; typedef long long LL; mt19937_64 gen(time(0)); struct node { //定义作业的属性,放在结构体里 int start; //开始时间 int end; //结束时间 int num; //作业编号 int

qq_34035720的博客 801

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

操作系统 作业调度算法(FCFS)的实现

作业调度算法:采用先来先服务(FCFS)调度算法,即按作业提交的先后次序进行调度。总是首先调度最先到达的作业。每个作业由一个作业控制块JCB表示,JCB至少包含如下信息:作业名、提交时间、所需的运行时间等等。每个作业完成后要输出该作业的开始运行时刻、完成时刻、周转时间和带权周转时间,这一组作业完成后计算并输出这组作业的平均周转时间、平均带权周转时间。作业号 提交时间 运行时间 开始 完成 周转时间 带权周转时间。采用FCFS调度算法,编写并调试一程序,模拟作业调度过程。(2)掌握作业调度算法的原理。

weixin_57007453的博客 517

作业调度算法

#include #include #include #include using namespace std; const int maxn = 100; int n; struct job{ int oID,ID,arrivalTime,endTime,length,priority; int endtime; int type; friend bool operato

SUNSET 705

洛谷-算法1-1-模拟与高精度3

两只牛逃跑到了森林里。Farmer John 开始用他的专家技术追捕这两头牛。你的任务是模拟他们的行为(牛和 John)。追击在 10×10 的平面网格内进行。一个格子可以是:空地,一个障碍物,两头牛(它们总在一起),或者 Farmer John。两头牛和 Farmer John 可以在同一个格子内(当他们相遇时),但是他们都不能进入有障碍的格子。CF牛在地图里以固定的方式游荡。每分钟,它们可以向前移动或是转弯。如果前方无障碍(地图边沿也是障碍),它们会按照原来的方向前进一步。

2302_81657110的博客 622

操作系统作业调度

用高级语言编写和调试一个或多个作业调度的模拟程序,以加深对作业调度算法的理解。为单道批处理系统设计一个作业调度程序。 由于在单道批处理系统中,作业一投入运行,它就占有计算机的一切资源直到作业完成为止,因此调度作业时不必考虑它所需要的资源是否得到满足,它所占用的 CPU时限等因素。   作业调度算法:采用先来先服务(FCFS)调度算法,即按作业提交的先后次序进行调度。总是首先调度在系统中等待时间最长的作业。每个作业由一个作业控制块JCB表示,JCB可以包含如下信息:作业名、提交时间、所需的运行时间、所需的资源

hlp_whale的博客 2320

操作系统-----作业调度实验

一、 实验要求 1、 编写并调试一个单道处理系统的作业调度模拟程序。(必做)  作业调度算法:分别采用先来先服务(FCFS),最短作业优先(SJF)、响应比高者优先(HRRN)的调度算法。   对每种调度算法都要求打印每个作业开始运行时刻、完成时刻、周转时间、带权周转时间,以及这组作业的平均周转时间及带权平均周转时间,以比较各种算法的优缺点。 #include <iostream> #include <math.h> #include <vector> #include

weixin_44771301的博客 1630

操作系统实验之作业调度算法

#include<iostream.h> #include<stdio.h> #include<string.h> #include<stdlib.h> voidFCFS();//先来先服务 voidSJF();//短作业优先 voidinput();//输入函数 voidop...

weixin_34162695的博客 509

洛谷P1065 [NOIP 2006 提高组] 作业调度方案

/工件的上一步时间。//机器号,record[i]代表工件步骤。}//使用的机器的对应的consume time。//完成了最简单的直接,那么之后呢?}//项目使用的机器号,也代表着工件顺序。//从简单的算法开始,不考虑插入。//每个工件m个工序都需要。

Lhn1246331285的博客 493
上一篇: 括号配对检查
下一篇: 基于开放定址法的哈希造表和查找
libingbojava
博客等级 码龄9年 64粉丝 111原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值