操作系统论文导读(二):A Schedulability Compatible MultiprocessorResource Sharing Protocol - MrsP — PCP协议多核拓展

前戏:PCP协议,即优先级天花板协议,详情请关注本人另一篇博客:操作系统论文导读(一):Priority Inheritance Protocols: An Approach to Real-Time Synchronization —优先级继承与优先级天花板协议_管二狗绝不摆烂的博客-CSDN博客

一、论文基本概述

        多处理器资源共享协议没有得到很好的开发,也没有商定的最佳实践。文章提出了一种新的基于单处理器优先级天花板协议的多处理器协议变体。新协议的独特性质是,等待访问资源的任务必须代表正在等待相同资源(但已被抢占)的其他任务来服务该资源。协议形式的动机是希望将协议与有效的可调度性分析联系起来。该协议是通用的,但本文是针对具有零星任务模型的分区固定优先级系统开发的。描述了支持协议的两种方法。

二、Mrsp基本属性和主要目标

由于在单核系统中,在某一时刻只能有一个任务在核心上运行,并且当任务运行时可以使用其需要访问的系统资源,因此资源共享较为简单。然而,当系统的处理器核心增加时,协调资源访问的问题就较为明显。

因此,当可能有n个并发访问资源rj时,获取该资源所需的时间为:(n-1) cj。因此,将现有软件系统由单核向多核系统的移植需要在以下两点中权衡:

  1. 任务间的干扰(高优先级的任务被强张)减少;
  2. 任务访问资源所需的时间增加。

例如:从单核向双核时,任务间的冲突(即:抢夺处理器计的情况)的可能性会减半,但是访问资源所需的时间会加倍。

以上效果体现在:对于任意资源rj,访问该资源的核心数量为|map(G(rj))|;每个访问所需的时间为cj,所以该资源的全部执行时间为:ej = |map(G(rj))|cj。需要注意ej不是任务与资源的直接映射,而是反应潜在的并发访问数量。与单核PCP协议相同:只要任务开始执行,其所需的所有资源都可以被其访问,但是任务的执行时间为ej ,而不是cj。

在多核心系统上的响应时间分析为:

操作系统论文导读(二):A Schedulability Compatible MultiprocessorResource Sharing Protocol - MrsP — PCP协议多核拓展_第1张图片                    (4)

式中hpl(i)为在本地(一个核心内)优先级大于τi的任务集合,e为一个资源被本地优先级小于τi的任务,与被本地优先级等于或大于τi的任务执行时间中的最长时间,为公式(2)中提到的由于系统实现而产生的阻塞时间。

对于每一个任务,其参数Ci为:

操作系统论文导读(二):A Schedulability Compatible MultiprocessorResource Sharing Protocol - MrsP — PCP协议多核拓展_第2张图片                    (5)

另外,与单核优先级置顶协议兼容,本发明同样支持嵌套资源访问,并保障执行过程中不会出现死锁的情况。

三、工作流程

1.对于所有系统资源,在每一个核心上都会被分配到一个置顶优先级。
2.当一个资源被访问时,访问该资源的任务的优先级会立即被提升到该资源在该核心上的置顶优先级;
3.访问资源的请求处理顺序为先进先出(FIFO);
4.当任务等待资源访问权限,以及使用资源并执行时,任务的优先级为被访问资源的置顶优先级。
5.任意在等待访问资源的任务,都必须代替其他试图访问该资源的任务执行相应的计算。
6.第5条内的“协调任务”必须以先进先出(FIFO)顺序处理在原始等待队列中的请求。

举例理解:

在不同核心上的任务(a,b)访问同一个资源CR1时,两个任务中的临界区域可以被任意一个任务执行。所以,如果a首先访问CR1,拥有CR1的资源锁,但是在本地被其他的任务抢占,则如果b访问CR1时,b将首先“接替”a的执行,并完成a的临界区域的代码的执行,然后再执行其自身的临界区域代码。当a恢复执行时,其对资源CR1的访问已经执行完毕。

四、协议特点

1.对于任意资源,在每个核心上至多有1个任务可试图对其进行访问;

2.等待访问资源rk的先进先出(FIFO)队列的最大长度为|map(G(rk))|
3.每个工作在其开始执行前,在本地会受到至多1次阻塞,并且该阻塞在该工作开始执行之前发生。
4.在MrsP协议下,存在最差响应时间(不会死锁,可以嵌套)

嵌套举例:

假设一个系统中有四个任务a,b,c,d,这些任务在不同的核心中执行。在此系统中有两个资源cr1和cr2,其执行时间分别为c1和c2.任务a和b直接访问资源cr1。任务c和d直接访问cr2。另外cr1也会访问cr2。所以,当a访问cr1时,在获得cr1的锁的同时,访问cr2。因此a的直接执行时间为c1+c2。
每次访问cr1,在最坏情况下,都需要等待任务c和d完成对cr2的访问。因此,对于a和b而言,访问cr1的时间长度为2(c1 + 3c2),即:任务需要等待获取cr1的时间为(c1+3c2),而同时可能有两个核心的任务试图访问cr1。对于任务c和d而言,访问cr2的时间长度为3c2。

五、实现方式

本文主要介绍了两种实现方式,但只详细化了一种,此处给出一种实现方式的实例,另一种仅给出定义。

任务迁移(主要介绍)
        如果任务τa在访问资源ri时被(本地一个更高优先级的任务)抢占,则任务τa可以迁移到其他(存在同样需要访问资源ri且处于自旋状态的任务的)核心上。在新的核心上任务τa会被分配比处于自旋状态的任务高的优先级,进而任务τa会抢占处于自旋状态的任务。
通过任务迁移实现的MrsP协议需要系统保证在核心中,具备一个比资源顶层优先级更高一级别的优先级,并且只能被迁移的任务使用。

举例说明:假设资源cr1被三个核心(p1, p2,和p3)中的任务锁使用。在时间t,p1上的任务a执行并获取cr1的锁,此时a的优先级被升级到Pri(cr1, p1)。稍后,在p2上的任务b试图获取cr1。首先任务b的优先级被升级到Pri(r1, p2),并开始自旋等待资源释放。之后,在p1上任务c初始化并试图执行,任务c的优先级Pri(τh)>Pri(r1, p1),因此任务c抢占任务a。此时,任务迁移可以触发。任务可以选择迁移到核心p2和p3上,但是在p2上有处在自选状态并且同样需要r1的任务。因此,任务a迁移到p2中,并且其优先级为Pri(r1, p2)+1。任务a会持续在核心p2中执行直到其被其他任务抢占,届时任务a可以选择迁移回p1(或者当核心p3有需要访问cr1的任务,则会迁移到p3)。当任务a完成关于cr1的计算(其临界区域)后,会迁移回原来的核心(p1)中,以其原本的优先级继续执行其他代码。此时,任务b可以获得cr1并继续在p2上执行。

并行执行
        如果任务的临界区域代码为“原动作”(atomic action),即:临界区域读取资源内部状态(S)和一些“输入”,计算输出,并在没有其他副作用的情况下更新S:(input, S)=> (output, S’)。此时,可以将所有在“等待”资源的任务以并行的方式执行。最先完成的任务可以更新S,其他稍后完成的任务不对资源做任何变动。

你可能感兴趣的:(OS学习笔记,risc-v,系统安全)