操作系统论文导读(四):Minimizing Memory Utilization of Real-Time Task Sets in Single and…

news2024/10/6 10:34:49

目录

一、论文核心思想:

二、降低RAM的思想

三、基本的相关定义

四、单处理器方面

五、优化单处理器中的堆栈使用

六、多处理器方面

七、基本的相关调度

八、协议特点


Minimizing Memory Utilization of Real-Time Task Sets in Single and Multi-Processor Systems-on-a-chip 最小化处理器片上系统中实时任务集的内存利用率

一、论文核心思想:

-引入了一个全新的概念,抢占阈值,并利用这个概念对单处理器上的SRP进行改进,使其内存利用率进一步提高。

-介绍了一种用于在多处理器系统中共享资源的快速简单算法,以及用于将抢占阈值分配给任务的流程。保证硬实时任务集的可调度性的同时最小化 RAM 使用。

二、降低RAM的思想

论文背后的想法是基于非交错执行。在SRP中,任务执行是完美嵌套的:如果任务 A 抢占任务 B,则 B 不会在 A 结束之前再次执行。这样, 可以对任务的所有执行帧使用单个堆栈。

而如果任务抢占仅限于在选定的任务组之间发生,则可以限制堆栈中同时活动的任务帧的最大数量,从而减少堆栈对 RAM 空间的最大需求。——即让部分组成为不可被抢占组,任务一旦执行就不可被抢占。

单处理器方面,文章给出了SRPT 的算法,它允许在EDF方案下对所有实时任务使用一个堆栈; 用于分配调度参数的优化过程,在不损害任务集的可调度性的情况下最小化最大堆栈大小。

多处理器方面,文章给出了MSRP 的算法,它允许分配在不同处理器上的实时任务通过共享内存进行通信/交互; 每个任务都分配给一个处理器,一个处理器上的所有任务共享相同的进程栈; 用于将任务分配给处理器和分配调度参数的优化过程,以最小化整体堆栈大小。

三、基本的相关定义

解释:任务在处理器上执行时被抢占的条件只有抢占任务的抢占优先级高于该任务的抢占阈值(抢占优先级是SRP论文中提出的,抢占阈值为本文提出,用于减少任务的抢占),倘若不满足该条件,哪怕抢占优先级与任务优先级均高于正在运行任务也不允许任务抢占。(增加了任务抢占的苛刻条件)

 解释:任务集可以划分为非抢占组。给出了非抢占组的定义,即倘若对于组内的任意两个任务,任务相互都是无法抢占的。显然,组数越少,对堆栈大小的要求就越低。如何优化这个分组问题,也是文章后续需要解决的问题

四、单处理器方面

1)提出优化的前提点——SRP的契合性和抢占苛刻度:在SRP中,当任务访问临界区时,系统上限被提升到当前系统上限和资源上限之间的最大值。 这样,到达的任务不能抢占正在执行的任务,除非它的抢占级别大于当前系统上限。 这种机制可以被认为是另一种限制可抢占性的方式。

2)任务调度规则:如果想让任务R1和任务R2相互不可抢占,可以让它们共享一个伪资源 pk:资源 pk的上限是R1R2抢占级别之间的最大值。 在运行时, R1 R2的实例将在开始执行时锁定 pk 并持有锁定直到它们完成。 假设任务R1需要一组伪资源 p1, ... ,ph。 当R1开始执行时,它会锁定所有这些资源:在 SRP 中,这对应于将系统上限提高到 maxceil(pi)),将这个值定义为任务R1的抢占阈值。也就是说,只要找到这组伪资源,就能够让R1R2相互不可抢占。(具体将在后续进行说明)

3)SRPT优点: 首先,它无缝集成了对互斥资源的访问和抢占阈值,实现工作量很小,没有额外的开销,它允许在 EDF 之上实现抢占阈值机制。 此外,由于 EDF 是最优的,给定的抢占阈值分配更有可能产生可行的调度。


个人看法:实际来说我并没有认为SRPT做出什么及其创新性的改动,仅仅是相比于SRP增加了一个抢占阈,(而且抢占阈值也是本来SRP当中自己创新的点只是没有提出这种概念),以此来减少任务之间的抢占,他们只是找了一种方法去找到一组最好的伪资源分配给任务,从而可以减少堆栈同时活动任务帧的数量,而且这种思想在之前的论文中就有过,本篇论文更重要的是对于多处理器上的讨论和策略

五、优化单处理器中的堆栈使用

以上为相关定义 

步骤:

步骤 1 找到任务的抢占阈值的最佳分配

步骤 2 找到一组最佳的非抢占组,使总堆栈大小最小化,保持调度的可行性

该算法选择可能的抢占阈值分配,并使用之前SRP测试调度的不等式测试可行性(等式1)。

优化算法的工作原理如下:

1)任务通过降低抢占级别来排序;

2)从具有最高抢占级别的任务开始,根据等式 1尝试提高每个任务的抢占阈值

3)给定一个可行的抢占阈值分配,将任务集划分为非抢占式组并计算最大堆栈大小

用于将任务集划分为抢占组的算法更为复杂,概述如下:

1)通过升序抢占阈值对任务进行排序;

2)算法首先为每个任务找到最大组。 任务 T 的最大组是可以使用 T 作为代表性任务创建的最大非抢占组。 (非抢占组的代表性任务是组中所有任务中阈值最小的任务) 。

3)然后,该算法调用一个递归函数,该函数使用上一步计算的信息将所有任务分配给非抢占组。 该函数称为 create-group(),递归地计算所有解决方案,包括将任务划分为一组非抢占式G组。

下图为找最大组的算法。

解读:其实就是先创建一个空列表,由于按升序排序后k>i则任务k的抢占阈值大于i,之后再次找无法相互抢占的嵌套插入就能够找到最大组。最开始插入的任务就是代表性任务。

用于将任务集划分为抢占组的算法更为复杂,概述如下:

1)通过升序抢占阈值对任务进行排序;

2)算法首先为每个任务找到最大组。 任务 T 的最大组是可以使用 T 作为代表性任务创建的最大非抢占组。 (非抢占组的代表性任务是组中所有任务中阈值最小的任务) 。

3)然后,该算法调用一个递归函数,该函数使用上一步计算的信息将所有任务分配给非抢占组。 该函数称为 create-group(),递归地计算所有解决方案,包括将任务划分为一组非抢占式G组。

函数 create-group是程序的核心。每个任务都分配了一个新索引,该索引对应于它在抢占阈值顺序中的位置(从 0 开始)。调用时,该函数计算一组从 G 开始的新组, min-stack 指向总体堆栈要求的当前最小值,并求和到正在计算的解决方案的(部分)堆栈要求。第一次调用该函数时,g 的值为 0(算法从具有最低阈值的任务开始),min-stack 指的是包含所有堆栈要求(最坏情况堆栈要求)的总和。尚未计算出 G 组。第 9-31 行用于选择性地提取 Mg 的一个子集,并将其插入到 G 中,以测试解决方案的最优性并进行更新。但在最坏的情况下,算法的复杂度是任务数量的指数。

六、多处理器方面

1)基本定义:资源可以分为本地资源和本地资源。 本地资源仅由属于同一处理器的任务使用,而全局资源由属于不同处理器的任务使用。

2)核心思想:MSRP希望让属于一个任务的所有处理器共享一个队列,同时各个处理器均有自己的堆栈,如果一个任务试图访问全局资源,但该资源已被占领,则会采用自旋锁的方式,但自旋锁会浪费时间,故而当任务执行全局资源的临界区时,优先级将被提高到该资源上的最大优先级。

3)规则 1:对于本地资源,算法与SRP算法相同。 特别地,为每个任务定义了一个抢占级别,为每个本地资源定义了一个上限,为每个处理器 Pk 定义了一个系统上限 。
规则 2:允许任务通过嵌套的临界区访问本地资源。 可以嵌套本地和全局资源。 但是,不能嵌套全局临界区,否则会发生死锁。
规则 3:对于每个全局资源,每个处理器 Pk 都定义了一个上限,该上限大于或等于 Pk 上任务的最大抢占级别。
规则 4:当分配给处理器 Pk 的任务 T 访问全局资源 pl 时,系统上限 πk 提高到 ceil(pl) 使任务不可抢占。 然后,任务检查资源是否空闲:在空闲情况下,它锁定资源并执行临界区。 否则,任务被插入到全局资源上的一个 FCFS 队列中,然后执行忙等待。
规则 5:当分配给处理器的任务 r 释放全局资源 pl 时,算法检查相应的 FCFS 队列,如果其他任务 T 正在等待,则授予对该资源的访问权限,否则该资源是解锁状态。 然后,系统上限恢复到先前的值。

七、基本的相关调度

 

考虑一个由两个处理器和五个任务组成的系统。任务 12 3 分配给处理器 P1:任务 3 使用本地资源 p1,任务 2 通过嵌套关键使用资源 p1 p2 部分,并且任务1 不使用任何资源。 任务 4 5分配给处理器 P2:任务 4 使用全局资源 p2 而任务 5 不使用资源。

资源 p1 的上限为 2。处理器 P1 上资源 p2 的上限为 3,处理器 P2 上资源 p2的上限为 2

在时间 t =  3 ,任务 2 被阻塞是因为它的抢占级别 为2 等于处理器 PI 上的当前系统上限 2

在时间 t = 5,任务 3 锁定资源 p2 并将系统上限 提高到 3

在时间 t = 6,任务 4 尝试访问当前被 任务2 锁定的全局资源 p2。因此,它提高了系统上限P2处理器 的天花板到2 并执行忙等待。

在时间 t = 7 时,r1 r5 都被阻塞。 在时间 t = 8 时,任务 3 释放全局资源 p2,任务 4 可以进入 p2上的临界区。 同时将处理器P1的系统上限设置回2,此时任务1可以抢占。

八、协议特点

1)定理一旦作业开始执行,它就不能被阻塞,只能被更高优先级的作业抢占。

2)一个作业最多可以经历一个阻塞时间等于一个较低抢占级别的任务的一个临界区的持续时间(加上跨度锁定时间,如果资源是全局的)。

3)在设计分配算法时,目标之一是尽可能减少自旋锁时间。值得注意的是,使用 MSRP,每个处理器几乎独立于其他处理器工作。

4)使用 MSRP 可以将一个堆栈用于分配给同一处理器的所有任务。

5)MSRP 不需要本地资源的信号量或阻塞队列,而全局资源只需要一个 FIFO 队列。

6)最后,MSRP SRP 一样,倾向于减少数量 系统中的抢占,因此开销较少,但是,这是以潜在危险的自旋锁时间为代价的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/416348.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

算法记录 | Day29 回溯算法

491.递增子序列 思路: 1.确定回溯函数参数:定义全局遍历存放res集合和单个path,还需要 nums数组startindex(int)为下一层for循环搜索的起始位置。 2.终止条件:当startindex >len(nums),r…

C++初阶—vector深度剖析及模拟实现

目录 ➡️0. 前言 😊1.简易框架实现 🐔1. 无参构造 🐔2. 容量capacity — 长度size() 🐔3. 动态增长 — push_back—pop_back — reserve 🐔4. 迭代器的实现 🐔4.front和back的实现 😊2…

你知道C语言的typedef关键字吗?

本篇博客主要讲解C语言中的typedef关键字。typedef的作用是类型重定义,可以理解为给类型起一个别名。我主要从3个方面来讲解: typedef内置类型。typedef自定义类型。typedef和#define的区别。 1.typedef内置类型 typedef可以给一个类型起“别名”。比如…

服务器部署前后端分离项目

服务器部署前后端分离项目 目录服务器部署前后端分离项目一、安装环境安装jdk1、在/usr/local目录下创建jdk文件夹,并将jdk安装包放到/usr/local/jdk包下并解压1.1通过文件传输工具将jdk包上传到服务器上1.2输入解压命令1.3解压完成,生成下面的文件2、配…

学习周报4/9

文章目录前言文献阅读摘要简介方法结论时间序列预测总结前言 本周阅读文献《Improving LSTM hydrological modeling with spatiotemporal deep learning and multi-task learning: A case study of three mountainous areas on the Tibetan Plateau》,文章主要基于…

多种方法解决SLF4J: Defaulting to no-operation (NOP) logger implementation的错误

文章目录1. 复现错误2. 分析错误3. 解决错误4. 解决该错误的其他方法1. 复现错误 今天在编写使用Quartz执行定时任务的方法,如下代码所示: public class QuartzTest {public static void main(String[] args) throws SchedulerException {// 1、创建Sch…

大数据系列——Hive理论

概述 Hive是一个数据仓库管理工具,将结构化的数据文件映射为一张数据库表,并提供类SQL(HQL)查询功能。由Facebook实现并开源,最后捐赠给Apache发展为顶级项目。 以RDBMS数据库为元数据存储服务, 以Hadoop HDFS来存储…

44.节流与防抖

目录 1 防抖 1.1 概念 1.2 应用场景 1.3 lodash防抖 1.4 手写防抖 2 节流 2.1 概念 2.2 应用场景 2.3 lodash节流 2.4 手写节流 2.5 记录视频上一次的播放位置 1 防抖 1.1 概念 防抖就是让事件触发后延迟n秒后再执行回调函数,在这n秒内如…

014:Mapbox GL添加draw组件,绘制点、线、多边形、删除

第014个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中添加draw组件,绘制点、线、多边形,删除所选元素。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实现效果 文章目录 示例效果配置方式示例源代码(共78行)相关API参考:专栏目标示例效果 配置方…

用于平抑可再生能源功率波动的储能电站建模及评价(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

项目部署---手工部署项目

手工部署项目 在ideal中开发springboot项目并打成jar包 将jar包上传到Linux服务器 mkdir /usr/local/app 创建目录,将项目jar包放到此目录 ![](https://img-blog.csdnimg.cn/83cf26b151874637a2dfeda7dd05e4cf.jpeg) 启动SpringBoot程序 检查防火墙,…

电脑蓝屏问题排查

最近电脑安装了最新win10,更新最新的驱动以后,开机几分钟后,会蓝屏重启,报错为: DRIVER_POWER_STATE_FAILURE 下载蓝屏分析工具BlueScreenView 问题出在ntoskrnl.exe bing搜索给出了二种解决方案: 1&a…

软件测试应届生社招找工作面试会遇到哪些坑?(全网最全避坑指南)

目录 找工作的最佳时间 是否裸辞 我们要做哪些准备工作 准备一段自我介绍 准备一份pdf简历 社招找工作的渠道:内推 找工作的最佳时间 社招找工作的最佳时间是:金三银四。也就是春节后的三月份和四月份。 为什么是金三银四呢?因为每年的…

HTML5 Geolocation

文章目录HTML5 Geolocation定位用户的位置浏览器支持HTML5 - 使用地理定位处理错误和拒绝在地图中显示结果给定位置的信息getCurrentPosition() 方法 - 返回数据Geolocation 对象 - 其他有趣的方法HTML5 Geolocation HTML5 Geolocation(地理定位)用于定位…

【SQL Server】数据库开发指南(五)T-SQL 高级查询综合应用与实战

T-SQL 是 SQL Server 的专用版本,提供了一组强大的高级查询功能,包括聚合函数、子查询、连接、视图、窗口函数、共享表达式、递归查询等。这些功能使得 T-SQL 可以轻松处理大量数据,并支持各种复杂的查询和数据操作。本文将介绍 T-SQL 的一些…

Debian 10配置apt源常见问题

目录 一:配置本地apt源没有发现文件 解决方案 二:apt下载bind9报错E: Package bind9 has no installation candidate 方法一: 方法二:更新不报错但是安装依旧报错E: Package bind9 has no installation candidate 一&#xff…

密码加密——加盐算法(两种方式)

加盐算法 文章目录加盐算法手写一个加盐算法spring security密码安全是一件很重要的事情,所以一定要谨慎对待 常见的主要是3种方式 明文MD5加密加盐算法 首先明文肯定是不可取的,在数据库中明文存储密码风险实在是太大了 简单来说,使用MD…

DataGrip连接数据库设置(MySQL、Oracle、SQL Server)

一、DataGrip连接MySQL 1.1 配置信息 1.2 测试查询employees库中departments表信息 employees为测试库,具体来源,参考这篇文章 下载并导入MySQL示例数据库employees 。 1.3 测试查询employees库中employees表信息 二、DataGrip连接Oracle 将SID改为o…

「字节跳动实习期间」免费专栏发布+服务端知识架构

字节跳动实习期间专栏内容 主要放在字节跳动实习期间个人的一些笔记,通过整理放出,并保持不断迭代 同时这里并不会放涉及字节内部的文档和知识,只是博主整理的网上已有的知识 欢迎同学们关注专栏、互相学习、共同进步,我也会在…

vue-cli(vue脚手架方式搭建)

1.首先安装node前端环境,可以帮助我们去下载其他的组件 下载完成后,去自己的电脑找到node的文件路径,复制去配置环境变量,在path中配 环境搭配完成后,在cmd中进行测试 ,输入一下两个命令进行测试 2.在hbuilderX中创建一个vue-cli项目(标准的前段项目) 3.组件路由 (1)安装 v…