基于C++实现的进程调度算法

article/2025/10/1 18:05:48

资源下载地址:https://download.csdn.net/download/sheziqiong/85650672

一、问题描述与分析

1.1 设计构想

程序能够完成以下操作:选择调度算法;查看历史记录;创建进程;进程调度:进程创建完成后就选择进程调度算法,每次执行的结果都在屏幕上输出。

1.2 基本要求

  • 利用高级语言实现七种不同及进程调度算法:先来先服务调度算法,优先级调度算法,时间片轮转调度算法,短进程优先调度算法,最短剩余时间调度算法,最高响应比优先调度算法,多级反馈队列调度算法。

  • 通过实验理解有关进程控制块进程队列等的概念。

1.3 需求分析

  • 需求:在多道程序环境下,主存中有着多个进程,其数目往往多于处理机数目,要使这多个进程能够并发地执行,这就要求系统能按某种算法,动态地把处理机分配给就绪队列中的一-个进程,使之执行。分配处理机的任务是由处理机:调度程序完成的。由于处理机是最重要的计算机资源,提高处理机的利用率及改善系统必(吞吐量、响应时间),在很大程度上取决于处理机调度性能的好坏,因而,处理机调度便成为操作系统设计的中心问题之一。

  • 软件的基本功能:本软件在 vs code 环境下实现先来先服务、短作业优先、高响应比优先、时间片轮转调度算法、优先级调度算法和多级反馈队列调度算法,满足不同需求调度。

  • 输入/输出形式:I/O 输入:data 数组键盘输入。I/O 输出:运行结果从屏幕输出。文本输出:新的键盘输入的 data 数组添加到历史数据中。

  • 测试数据要求:对 data 数组赋值时,赋值的长度不可大于 data 数据的长度。

1.4 理论依据

为了描述和管制进程的运行,系统为每个进程定义了一个数据结构一进程控制块,程控制块中记录了操作系统所需的、用于描述进程的当前情况以及控制进程运行的全部信息,系统总是通过进程控制块对进程进行控制,亦即,系统是根据进程的进程控制块而不是任何别的什么而感知进程的存在的,进程控制块是进程存在的惟一标志。本次课程设计用不同结构体代替进程控制块的功能。

1.5 课程任务

  • 用 C++ 编程实现操作模拟操作系统进程调度子系统的基本功能;运用多种算法实现对进程的模拟调度。

  • 通过编写程序实现先来先服务调度算法,优先级调度算法,时间片轮转调度算法,短进程优先调度算法,最短剩余时间调度算法,最高响应比优先调度算法,多级反馈队列调度算法等七个算法,使学生进一步掌握进程调度的概念和算法,加深对处理机分配的理解。

  • 通过控制台显示用户界面。

二、设计分析

2.1 概要设计

数据结构分七个算法:先来先服务调度算法,优先级调度算法,时间片轮转调度算法,短进程优先调度算法,最短剩余时间调度算法,最高响应比优先调度算法,多级反馈队列调度算法。

typedef struct FSA
{int pro_num; //进程号int time;    //进程所需时间
} fsa;typedef struct PSA
{int pro_num;  //进程号int time;     //进程所需时间int priority; //优先级bool operator<(const struct PSA &a) const{return priority < a.priority;}
} psa;

2.2 详细设计

1.先来先服务调度算法:

按照进程进入就绪队列的先后次序进行选择。一旦一个进程得到处理机,他就会一直运行下去,直到该进程完成任务,才会让出处理机。

在这里插入图片描述

2.时间片轮转调度算法:

​ 在时间片轮转调度算法中,系统将所有的就绪进程排成一个就绪队列。系统可设置每隔一定时间(如30ms)便产生一次中断,去激活进程调度程序进行调度,把CPU分配给下一个进程,并令其执行一个时间片。当它运行完毕后,又把处理机分配给就绪队列中下一个进程,也让其执行一个时间片,当到队列尾再回到队首。

在这里插入图片描述

3.优先级调度算法:

优先级调度算法是指在创建进程之初便确定的,由优先级高的开始执行。

在这里插入图片描述

4.短进程优先调度算法:

短进程优先调度算法是从进程的就绪队列中挑选运行时间最短进程进入主存运行,一旦选中某个短进程,应该尽可能快地完成并让出处理机。这样减少了就绪队列中等待的进程数,同时也缩短了进程的平均等待时间。

在这里插入图片描述

5.最短剩余时间优先调度算法:

最短剩余时间优先调度算法是将短进程优先调度算法用于分时环境的变形。

6.最高响应比优先调度算法:

最高响应比优先调度算法是指在创建进程之初,先赋予其一个优先级,然后其值随着进程的推进或等待时间的增加而改变响应比,以便获得更好的调度性能。若所有的就绪进程具有各不相同的优先级初值,那么对于优先级初值低的进程,在等待了足够的时间后,也可以获得处理机。

7.多级反馈队列调度算法

短进程优先调度算法或最短剩余时间优先调度算法均是在估计的进程运行时间基础上进行调度的,但在程序开发环境或其他情况下,往往难以估计进程的运行时间。这里所研究的算法是时间片轮转调度算法的发展,不必估计进程运行时间。系统中有多个进程就绪队列,每个就绪队列对应一个调度级别。第 1 级队列的优先级最高,以下各级队列的优先级逐次降低。调度时,选择高优先级队列中的第 1 个就绪进程。

规则 1:如果 A 的优先级大于 B 的优先级,运行 A 不运行 B
规则 2:如果 A 的优先级等于 B 的优先级,轮转运行 A 和 B

规则 3:工作进入系统时,放在最高优先级(最上层)队列

规则 4:工作用完整个时间片后,降低其优先级(移入低一级队列)
规则 5:每经过一段时间,就将系统中所有工作重新加入最高优先级队列

在这里插入图片描述

三、系统编译与调试分析

文件写入会覆盖上一条记录,使用追加模式

算法方面每个算法设置一个函数接口,同时使用数组存储各个进程的时间

四、使用说明

选择算法-> 是否查看历史记录-> 输入进程所需时间-> 对应算法运行-> 输入 exit 退出系统

五、测试结果

  • 选择算法

  • 是否查看历史记录

在这里插入图片描述

  • 输入进程所需时间(添加到历史记录中,自动生成进程号)

在这里插入图片描述

非历史记录自动添加到历史记录中

在这里插入图片描述

  • 算法对进程实现不同操作

先来先服务调度算法(FSA)

在这里插入图片描述

优先级调度算法

在这里插入图片描述

时间片轮转调度算法

短进程优先调度算法

最短剩余时间调度算法(可以实现添加进程)
在这里插入图片描述

最高响应比优先调度算法

在这里插入图片描述

多级反馈队列调度算法

  • 退出(输入 exit)
    在这里插入图片描述

资源下载地址:https://download.csdn.net/download/sheziqiong/85650672


http://chatgpt.dhexx.cn/article/vRKA1VXB.shtml

相关文章

短进程优先调度算法c语言spf,短进程优先的调度算法详解

短进程优先的调度算法详解 发布时间:2020-05-17 04:52:01 来源:51CTO 阅读:293 作者:张立达 一、SPF算法简介 SJF算法SJF(shortest job first)是以进程的运行时间长度作为优先级,进程运行时间越短,优先级越高。 SJF算法的缺点必须预知进程的运行时间。即使是程序员也很难…

进程调度算法(c语言)

对一个非抢占式多道批处理系统采用以下算法的任意两种&#xff0c;实现进程调度,并计算进程的开始执行时间,周转时间,带权周转时间,平均周转时间,平均带权周转时间 1.先来先服务算法 2.短进程优先算法 *3.高响应比优先算法 一、设计思想 每个进程有一个进程控制块&#xff08;…

进程的创建——fork函数

1. 进程的信息 进程的结构 在Linux中&#xff0c;一切皆文件&#xff0c;进程也是保存在内存中的一个实例&#xff0c;下图描述了进程的结构: 堆栈:保存局部变量数据段:一般存放全局变量和静态变量代码段:存储进程的代码文件TSS状态段:进程做切换时&#xff0c;需要保存进程现场…

C语言结构体

本节主要讲解下结构体的一些易错点和重要内容 结构体变量定义 &#xff08;使用typedef起别名&#xff09; 一般的结构体定义&#xff1a;定义类型变量 struct student {long stuID;char stuName[10];char stuSex;char birthYear;int mathScore; }stu1;可以用typedef取别…

深入探索 Linux 进程信号的奥秘

Linux 进程信号 0 查看IPC(进程间通信)资源的指令1 学习进程信号的过程2 Linux 进程信号的基本概念2.1 对信号的基本认知 3 Linux 进程信号的产生方式4 Linux 进程信号的保存和处理5 Linux 进程信号递达6 volatile关键字 0 查看IPC(进程间通信)资源的指令 ipcs -m : 查看共享内…

Linux 进程信号深剖

目录 传统艺能&#x1f60e;概念&#x1f914;信号发送&#x1f914;信号记录&#x1f914;信号产生&#x1f914;常见信号处理方式&#x1f914;终端按键产生信号&#x1f914;核心转储&#x1f60b;如何调试&#x1f914; 系统函数发送信号&#x1f914;raise函数&#x1f91…

Linux进程信号

文章目录 一.信号入门二. 产生信号(1). 通过键盘按键产生信号(2). 硬件异常产生信号(3).通过系统函数发送信号(4). 由软件条件产生信号 三.阻塞信号(1). 阻塞/递达/未决概念 :(2). 信号在内核中的表示(3). sigset_t(4). 信号集操作函数(5). 处理信号 四. 可重入函数/不可重入函…

[培训-DSP快速入门-7]:C54x DSP开发环境与第一个汇编语言程序

作者主页(文火冰糖的硅基工坊)&#xff1a;https://blog.csdn.net/HiWangWenBing 本文网址&#xff1a;https://blog.csdn.net/HiWangWenBing/article/details/119011489 目录 引言&#xff1a; 第1章 DSP汇编语言编程的流程概述 第2章 汇编语言程序建立过程 2.1 建立工程…

[培训-DSP快速入门-6]:C54x DSP开发中C语言库函数的使用

作者主页(文火冰糖的硅基工坊)&#xff1a;https://blog.csdn.net/HiWangWenBing 本文网址&#xff1a;https://blog.csdn.net/HiWangWenBing/article/details/119010855 目录 第1章 DSP库函数概述 第2章 运行时支持库 2.1 如何加入运行时支持库 2.2 为什么需要运行时的库…

【DSP开发】帮您快速入门 TI 的 Codec Engine

德州仪器半导体技术&#xff08;上海&#xff09;有限公司 通用DSP 技术应用工程师 崔晶 德州仪器&#xff08;TI&#xff09;的第一颗达芬奇&#xff08;DaVinci&#xff09;芯片&#xff08;处理器&#xff09;DM6446已经问世快三年了。继DM644x之后&#xff0c;TI又陆续推出…

DSP开发,使用CCS软件建立工程以及烧录

DSP开发&#xff0c;使用CCS软件建立工程以及烧录 1 概述1.1 资源概述1.2 DSP介绍 2 工程建立步骤4 烧录到flash中4.1 通过增减文件实现4.2 增加预编译宏 5 独立下载工具5.1 Uniflash5.2 C2prog 6 程序源码6.1main()函数6.2 leds.c文件6.3 leds.h文件 1 概述 实验的代码已经上…

浅谈DSP开发创建第一个工程Hello World

浅谈DSP开发创建第一个工程Hello World 本教程以TI公司的TMS320F2812芯片为例进行演示开发环境搭建(CCS)CMD文件概述编写第一个工程Hello World概述 本教程以TI公司的TMS320F2812芯片为例进行演示 开发环境搭建(CCS) 首先开发环境问题&#xff1a;目前最新TI官方发布的开发环…

DSP(数字信号处理器)技术概要

数字信号处理器(digital signal processor,DSP)是一种用于数字信号处理的可编程微处理器&#xff0c;它的诞生与快速发展&#xff0c;使各种数字信号处理算送得以实时实现&#xff0c;为数字信号处理的研究和应用打开了新局面&#xff0c;提供了低成本的实际工作环境和应用平台…

DSP_1 环境搭建

1、打开ccs6.0&#xff0c;将DSP281x_common、DSP281x_headers两个库文件导入到根目录当中。 2、在project的Properties当中添加库文件路径&#xff0c;使编译器能够找到这些文件。 3、exclude那些重定义的文件&#xff0c;即可。 4、编译的过程分为compile与link&#xff0c…

从BES蓝牙耳机开发中谈DSP开发与嵌入式ARM的区别

对比下DSP开发与嵌入式ARM的区别&#xff0c;DSP开发&#xff0c;发开算法&#xff0c;注意链接文件的使用。 一先看BES的DSP开发 1 lds链接文件之代码段text 存放可执行代码和浮点数常量 2 data数据段 3 .bss段 存放没有初始化的全局变量和静态变量。 二 ARM开发 主要是配置…

用于多核DSP开发的核间通信

TI的多核DSP以TMS320C6678为例&#xff0c;它是多核同构的处理器&#xff0c;内部是8个相同的C66x CorePac。对其中任意一个核的开发就和单核DSP开发的流程是类似的。   但是如果仅仅只是每个核独立开发&#xff0c;那么很难体现出多核的优势。要充分发挥多核处理器的性能&am…

近期C6000 DSP开发小结

使用C开发DSP 如果你也跟我一样刚开始接触C6000系列的DSP&#xff0c;我觉得可以尝试一下用C来开发&#xff0c;虽然说这么做代码的执行效率可能会比C或者纯汇编的开发来得低&#xff0c;但它胜在能够让整个工程的脉络更加清晰。 面向C6000开发的cl6x编译器对C有比较好的支持。…

【DSP开发】CCS5.5测试代码运行时间

1、进入CCS环境&#xff0c;load已有工程.out文件&#xff0c;找到要查看的代码执行周期的地方。 2、选择CCS菜单中的Run——Clock——Enable 3、选择Run——Clock——Setup 4、在左下角观察时钟周期 5、 至此就可以解决在代码中引入<time.h>后输出为0的情况&#xff…

ADI DSP开发环境(CCES)下的程序烧录问题(以ADSP-SC589为例)

在CCES环境下将程序烧录到flash主要有两种方式。 1.通过命令窗口 首先在对项目编译产生文件的属性设置为Release。 在编译完成后&#xff0c;找到每个CORE单独生成的DXE文件&#xff1a; 文件通常位于项目目录下每个core的Release文件中。 安装SC589评估板的驱动&#xff…

DSP开发环境及工具之CCS

DSP开发环境及工具之CCS CCS( Code Composer Studio)是美国德州仪器(TI)公司的嵌入式处理器的开发环境,可以用于TI公司的各个系列处理器的软件开发和调试,如DSP,MCU,ARM等。 主要的操作都是在这个窗口之间做相应的切换。 创建工程文件 或者