为多核处理器上的操作系统延迟调度任务的装置和方法与流程

文档序号:23067942发布日期:2020-11-25 17:55阅读:139来源:国知局
为多核处理器上的操作系统延迟调度任务的装置和方法与流程

本公开涉及实时操作系统,并且更具体地,涉及用于在多核处理器上为操作系统调度任务的系统和方法。



背景技术:

通常,使用多核系统在多核系统的多个核上一次调度多个任务,以提高系统性能是众所周知的。多核系统通常用于诸如无线网络应用(5g)、认知系统、iot应用、生物医学系统、汽车等应用中。多核系统以两种主要方式进行处理,包括对称多处理(smp)系统和非对称多处理(amp)系统。amp系统包括仅限于单个核的实时操作系统(rtos)的单个实例,从而导致调度方案仅限于rtos正在运行的核。smp系统使用共享公共操作系统和公共内存的多核系统来处理任务,使得调度方案扩展到参与多核系统的所有核。操作系统的单个副本可用于所有处理器,这些处理器通过通信路径共享对公共内存的平等访问。

由于smp系统只有一个操作系统副本用于所有核,因而两个或多个任务可能会同时尝试访问操作系统的关键数据部分,这会导致意外或错误的数据。另外,使用锁将对关键数据部分的访问每一次限制为一个核/任务。为了访问操作系统的关键数据部分,任务必须获得锁,并在执行完成后,核/任务必须释放锁以使锁可用于其它任务。然而,在两个或多个任务请求同时访问操作系统的情况下,仅一个任务将被授予访问权限,而其它任务则必须保持空闲。因而,当任务调用系统调用时,会在总体系统操作中产生延迟。

常规机制还包括多重锁定策略,以访问操作系统的不同关键数据部分。然而,给定任务可能必须获取多个锁才能访问操作系统的不同关键数据部分,从而要求任务等待所需的所有锁可用。在此过程中,等待一些锁被释放而被阻止的任务将使得任何其它等待这些锁的任务无法访问关键数据部分。因为有两个任务在等待对方的锁,这种情况导致了死锁,从而计算机系统死机。因而,单锁机制会导致smp系统的时间延迟过长,而多锁机制会遇到性能问题和死锁。

以上信息仅作为背景信息呈现,以帮助读者理解本公开。申请人对以上任何内容是否可以适用于关于本公开的现有技术,未做出任何确定,也没有断言。

本公开的一方面在于,提供用于在多核处理器上为操作系统延迟调度任务的系统和方法。

本公开的另一方面在于,提供能在多核处理器的多个核上独立地执行、而不停止任何核的操作的分段调度实例。

本公开的另一方面在于,延迟第二核处的切换上下文实例。

本公开的另一方面在于,当由第二核接收到软件生成的中断(sgi)时,通过确定至少一个核中的不平衡,来执行延迟的调度器实例。

本公开的另一方面在于,提供包括抢占当前运行的任务、挂起当前运行的任务和平衡当前运行的任务中的至少之一的调度操作。



技术实现要素:

技术问题

根据一个实施方式,用于在多核处理器上为操作系统延迟调度任务的方法,包括:接收用于在第二核上发起调度操作的系统调用,以及对第二核调用调度实例,其中,调度实例向所述调度操作通知进入的高优先级任务。该方法还包括延迟第二核处的切换上下文实例,其中,延迟第二核处的切换上下文实例解除了对第一核的阻止以执行其它任务。

技术方案

该方法还可以包括:在至少一个核上执行至少一个其它的系统调用,以及当由第二核接收到软件生成的中断(sgi)时,通过确定至少在一个核中的不平衡,执行延迟的切换上下文实例。

可以通过发送软件生成的中断(sgi)来调用调度实例,调度操作可以包括在第二核上执行进入的高优先级任务,调度实例可以包括抢占当前运行的任务(当前运行的任务正在第二核上运行)、挂起当前运行的任务、和平衡当前运行的任务中的至少之一。

抢占任务可以包括:通过跟踪当前在第二核上运行的任务和处于就绪状态的多个任务的优先级,确定抢占条件;确定当前在第二核上运行的任务的抢占是否需要在调度实例中连续执行或被延迟;以及执行以下之一:当需要在调度实例中连续执行抢占时,保存待抢占的任务的上下文,并恢复待执行的任务的上下文,其中,待抢占的任务是当前在第二核上运行的任务,待执行的任务是比当前在第二核上运行的任务具有更高优先级的任务;以及当要延迟抢占时,执行系统状态处理并发出信号。

挂起当前运行的任务可以包括:确定将挂起当前运行的任务;保存当前运行的任务的上下文,并挂起当前运行的任务;确定要调度为运行状态的下一个优先级最高的任务;以及执行以下之一:在挂起实例中连续调度下一个优先级最高的任务,以及延迟下一个优先级最高的任务到稍后的时间点,其中,由挂起实例修改系统的状态。

平衡当前运行的任务可以包括:确定在调用实例中待恢复的延迟操作,以及在调用实例中执行延迟的操作。

可以通过激活由软件调用的中断,来执行在第一核与第二核之间用于通知事件的信令;并且该方法还可以包括:在第一子关键部分期间,由第二核接收软件生成的中断(sgi),并确定进入的任务是高优先级任务。

该方法还可以包括,在第二子关键部分期间,存储当前在第二核上运行的任务的上下文,以及恢复确定的高优先级任务的上下文。

每个任务都可具有关联的优先级,并且可以假设每个任务处于就绪、运行和挂起状态之中的一种状态。

任务的调度可以基于优先级,并且调度实例可以包括抢占实例,抢占实例负责运行与参与对称多处理(smp)的核的数量相等的多个任务,这些任务是从就绪状态的任务中基于最高优先级选出的。

根据实施方式,用于在多核系统上为操作系统调度任务的装置包括:存储器,包括多个核的多核处理器,以及在多核处理器上执行的操作系统(os),其中,os包括模块化调度器,模块化调度器联接至多核处理器和存储器,并配置为:接收用于在第二核上发起调度操作的系统调用;对第二核调用调度实例,调度实例向调度操作通知进入的高优先级任务;延迟第二核处的切换上下文实例,延迟第二核处的切换上下文实例包括解除对第一核的阻止以执行其它任务。

当结合以下描述和附图考虑时,将更好地体会和理解本申请实施方式的这些和其它方面。然而,应当理解的是,以下描述虽然指示了实施方式及其大量的具体细节,但是它们是由示例而非限制的方式给出。在不脱离本发明精神的情况下,可以在本申请实施方式的范围内进行许多变更和修改,并且本申请的实施方式包括所有这样的修改。

附图说明

在附图中示出了本公开,在所有附图中,相同的附图标记指示相同的部件。通过以下参照附图的描述,将更好地理解本申请的实施方式,其中:

图1是示出了根据现有技术,在多核系统的多个核上调度的任务的各种状态的状态图;

图2是根据本申请公开的实施方式,用于在多核系统上调度操作系统的任务的装置的框图;

图3a是示出了根据本申请公开的实施方式,用于在多核系统上调度操作系统的任务的方法的流程图;

图3b是示出了根据本申请公开的实施方式,用于在多核系统上调用调度实例的方法的流程图;

图3c是示出了根据本申请公开的实施方式,用于在多核系统上调用抢占调度实例的方法的流程图;

图3d是示出了根据本申请公开的实施方式,用于在多核系统上调用挂起调度实例的方法的流程图;

图3e是示出了根据本申请公开的实施方式,用于在多核系统上调用平衡调度实例的方法的流程图;

图4a是示出了根据本申请公开的实施方式,在多核系统的两个核上的调度实例的时间并行执行的示例;

图4b是示出了根据本申请公开的实施方式,在多核系统的三个核上的调度实例的时间并行执行的示例;

图5a和图5b是示出了根据现有技术,基于单个调度器模块的任务调度和执行任务迁移的示例;

图5c是示出了根据现有技术,基于单个调度器模块的任务调度和执行任务迁移的示例调度图;

图5d和图5e是示出了根据本申请公开的实施方式,基于模块化调度实例的任务调度和执行任务迁移的示例;

图5f是示出了根据本申请公开的实施方式,基于模块化调度器的任务调度和执行任务迁移的示例调度图;

图5g是示出了时序图的示例,该时序图示出了使用常规单个调度器模块执行的调度与使用根据本申请所公开实施方式的模块化调度器执行的调度之间的比较;

图6a和图6b是示出了使用常规调度器执行的任务迁移机制与使用根据本申请所公开实施方式的模块化调度器执行的任务迁移机制之间的比较的示例;

图7a是示出了根据现有技术,多核处理器的多个核之间的信令的示例;以及

图7b是示出了根据本申请公开的实施方式,在多核处理器的核上运行的模块化调度器实例的示例,其解决了在多核处理器的多个核之间的冗余信令的问题。

具体实施方式

现在将参照附图详细描述本公开的各种实施方式。在以下描述中,仅提供诸如详细配置和组件之类的具体细节,以帮助对本公开的这些实施方式的总体理解。因而,对于本领域技术人员而言显而易见的是,在不脱离本公开的范围和精神的情况下,可以对本申请所述的实施方式进行各种改变和修改。另外,为了清楚和简洁,省略了对公知功能和构造的描述。

另外,一些实施方式可以与一个或多个其它实施方式结合以形成新的实施方式,本申请所述的各种实施方式并非相互排斥。

在本申请中,除非另有说明,否则本申请所用的术语“或”是指非排他性的。因而,表述“a、b或c”表示仅a,仅b,仅c,a和b两者,a和c两者,b和c两者,a、b和c的全部,或其变体。本申请中使用的示例仅旨在促进对可以实践本申请实施方式的方式的理解,并且进一步使本领域技术人员能够实践本申请中的实施方式。因而,示例不应解释为限制本申请的实施方式的范围。

可以根据执行所述的功能块来描述和说明实施方式。在本申请中,这些块可以指单元、引擎、管理器、模块等,可以由诸如逻辑门、集成电路、微处理器、微控制器、存储电路、无源电子组件、有源电子组件、光学组件、硬连线电路等的模拟和/或数字电路物理实现,并且可以可选地由固件和/或软件驱动。电路例如可以在一个或多个半导体芯片中、或在诸如印刷电路板等的基板支撑件上实施。构成块的电路可以通过专用硬件、或通过处理器(例如,一个或多个可编程微处理器和相关联电路)、或通过执行模块的某些功能的专用硬件和执行其它功能的处理器的组合来实现。在不脱离本公开的范围的情况下,实施方式的每个块可以在物理上分成两个或更多个相互作用和分离的块。同样地,在不脱离本公开的范围的情况下,实施方式的块可以物理地组合成更复杂的块。

现在参照附图,并且更具体地参照图1至图7b来描述优选的实施方式,在所有附图中,相似的附图标记始终表示对应的特征。

图1是示出了根据现有技术,在多核系统的多个核上调度的任务的各种状态的状态图。

参照图1,可以在多核系统的多个核上调度多个任务。操作系统内提供的调度器用于在多核系统的多个核上调度多个任务。多个任务可以处于诸如运行状态、阻止状态和就绪状态的状态之一。

在步骤1,任务正在多核系统的多个核中的一个核上执行。在任何时间实例,与在同一时间实例在同一核上排队的所有其它任务相比,正在核上执行的任务具有最高的优先级。另外,当没有具有更高优先级的任务就绪时,继续执行在核上执行的任务,直至具有与当前执行的任务相比更高优先级的新任务到达(1a)。

在步骤2,核包括处于就绪状态的任务。处于就绪状态的任务与正在核上执行的任务相比具有更低的优先级。另外,当将具有比在核上执行的任务更高优先级的新任务添加到队列中时,在核上执行的任务可以进入就绪状态(2a)。

在步骤3,核还包括处于阻止/等待/挂起状态的任务。处于阻止/等待/挂起状态的任务是需要一些资源(在特定时间实例不可用)的任务,且正在等待资源变得可用。当在核上执行的任务需要一些不可用的资源时,执行的任务会自动进入阻止/等待/挂起状态(3a)。当处于阻止/等待/挂起状态的任务所需的资源变得可用时,任务进入就绪状态。

图2是根据本申请公开的实施方式,用于在多核系统上调度操作系统120的任务的装置100的框图。

参照图2,例如,装置100可以包括操作系统120、多核处理器160和存储器180。操作系统120支持多核系统上的smp处理,并且允许任务间通信、信令和调度服务。另外,操作系统120包括模块化调度器140。在实施方式中,装置100例如可以是移动电话、智能电话、个人数字助理(pda)、平板电脑、可穿戴设备、物联网(iot)设备等。

在一个实施方式中,模块化调度器140可以配置为基于调度方案来调度任务,例如基于优先级的抢占式调度、基于时间片的调度等。由于模块化调度器140对任务的调度,任务在诸如就绪、挂起和运行等多个状态之间转换。在第一核上执行的模块化调度器140可以配置为生成用于在第二核上发起调度操作的系统调用,并对第二核调用调度实例。调度实例向调度操作通知进入的高优先级任务,并通过向第二核发送sgi来调用调度实例。调度操作包括在第二核上执行进入的高优先级任务。调度实例可以是抢占当前在第二核上运行的任务、挂起当前在第二核上运行的任务、以及平衡当前在第二核上运行的任务中的至少之一。

抢占实例负责确保在任何给定时间点多核系统的各个核上正在执行合格的任务。根据基于优先级的抢占调度策略,抢占实例确保执行优先级最高的就绪任务。当调用模块化调度器140的抢占实例时,模块化调度器140通过监控当前在第二核上运行的任务和在第二核上处于就绪状态的多个任务的优先级,来确定抢占条件。模块化调度器140还确定是否需要在调度实例中连续执行对当前在第二核上运行的任务的抢占或延迟抢占,并且执行以下之一:当需要在调度实例中连续执行抢占时,保存待抢占的任务的上下文并恢复待执行的任务的上下文;以及当要延迟抢占时,执行系统状态处理并发出信号。待抢占的任务是当前在第二核上运行的任务,待执行的任务是比当前在第二核上运行的任务具有更高优先级的任务。

挂起实例负责管理处于运行状态的任务的挂起,即,当任务从运行状态转换为阻止状态时。当调用模块化调度器140的挂起实例时,模块化调度器140确定当前在第二核上运行的任务需要挂起,并保存当前在第二核上运行的任务的上下文,以及挂起当前在第二核上运行的任务。另外,模块化调度器140可以配置为确定要调度为运行状态的下一个优先级最高的任务。另外,模块化调度器140可配置为执行以下之一:在挂起实例中连续调度下一个优先级最高的任务,以及将下一个优先级最高的任务延迟到稍后的时间点。在核上调用挂起实例时,修改系统状态。

当调用模块化调度器140的平衡实例时,模块化调度器140确定在调用的实例中待恢复的延迟的操作,并在调用实例中执行该延迟的操作。平衡实例验证当前运行的任务连同由另一个调度器实例修改的状态是否为延迟的操作要被执行提供了指示。另外,平衡实例还检测任何在其它核上运行的任务的资格是否需要更改,并在提供模块化调度器140的调度器实例不连续传播情况下向各个核提供信号。通常,在接收到由其它调度器实例生成的软件触发时,调用平衡实例。

另外,模块化调度器140可以配置为延迟第二核处的切换上下文实例,以解除对第一核的阻止以执行其它任务。另外,模块化调度器140可以配置为:当由第二核接收到软件生成的中断(sgi)时,通过确定至少一个核中的不平衡,在至少一个核上执行至少一个其它系统调用以及执行延迟的调度器实例。

在一个实施方式中,多核处理器160可包括多个核,这些单独的核之间具有互连。多个核可以统称为核,或一般称为核。多核处理器160可以配置为从存储器180读取和/或写入到存储器180。这样的读和写操作可以涉及与多核处理器160的多个核的操作相关联的指令和数据。另外,多核处理器160内的每个核可以配置为单独访问存储器180。通过生成对多个核的软件驱动的硬件中断,而实现多个核间的信令。

在一个实施方式中,存储器180可以配置为存储与在多核处理器160的核上的操作相关联的指令和数据。存储器180可以包括非易失性存储元件。这样的非易失性存储元件的示例可以包括磁性硬盘、光盘、软盘、闪存、或电可编程存储器(eprom)或电可擦除可编程(eeprom)存储器的形式。另外,在一些示例中,存储器180可以认为是非暂存性存储介质。术语“非暂存性”可以指示存储介质没有体现为载波或传播的信号。然而,术语“非暂存性”不应解释为存储器180是不可移动的。在一些示例中,存储器180可以配置为存储比存储器大的信息量。在某些示例中,非暂存性存储介质可以存储可以随着时间改变的数据(例如,在随机存取存储器(ram)或高速缓存中)。

尽管图2示出了装置100的硬件元件,但是应当理解,其它实施方式不限于此。在其它实施方式中,装置100可以包括更少或更多元件。另外,元件的标号或名称仅用于说明性目的,并不限制本公开的范围。可以将一个或多个组件组合在一起,以用于在多核处理器上的操作系统执行相同或基本相似的任务调度的功能。

图3a是示出了根据本申请公开的实施方式,用于在多核系统上调度操作系统的任务的方法的流程图300a。

参照图3a,在步骤310,装置100接收系统调用,以在第二核上发起调度操作。例如,在如图2所示的装置100中,模块化调度器140可以配置为接收用于在第二核上发起调度操作的系统调用。

在步骤320,装置100对第二核调用调度实例。例如,在如图2所示的装置100中,模块化调度器140可以配置为对第二核调用调度实例。

在步骤330,装置100延迟第二核的切换上下文实例。例如,在如图2所示的装置100中,模块化调度器140可以配置为延迟在第二核处的切换上下文实例。

在步骤340,装置100在至少一个核上执行至少一个其它系统调用。例如,在如图2所示的装置100中,模块化调度器140可以配置为在至少一个核上执行至少一个其它系统调用。

在步骤350,当由第二核接收到sgi时,装置100通过确定至少一个核中的不平衡来执行延迟的调度器实例。例如,在如图2所示的装置100中,模块化调度器140可以配置为:当第二核接收到sgi时,通过确定至少一个核中的不平衡来执行延迟的调度器实例。

该方法中的各种动作、行动、块、步骤等可以以呈现的顺序、以不同的顺序或同时执行。另外,在一些实施方式中,一些动作、行动、块、步骤等可以省略、添加、修改、跳过等,而不脱离本公开的范围。

图3b是示出了根据本申请公开的实施方式,用于在多核系统上调用调度实例的方法的流程图300b。

参照图3b,在步骤320,装置100对第二核调用调度实例。例如,在如图2所示的装置100中,模块化调度器140可以配置为对第二核调用调度实例。

可以以三种方式中的至少一种对第二核调用调度实例,即,在步骤322,装置100可以调用抢占调度实例;在步骤324,装置100可以调用挂起实例;以及在步骤326,装置100可以调用平衡实例。

图3c是示出了根据本申请公开的实施方式,用于在多核系统上调用抢占调度实例的方法的流程图300c。

参照图3c,在步骤322a,装置100通过跟踪当前在第二核上运行的任务和处于就绪状态的多个任务的优先级,来确定抢占条件。例如,在如图2所示的装置100中,模块化调度器140可以配置为:通过跟踪当前在第二核上运行的任务和处于就绪状态的多个任务的优先级,来确定抢占条件。

在步骤322b,装置100确定当前在第二核上运行的任务的抢占是否需要在调度实例中连续地执行,或者当前在第二核上运行的任务的抢占是否需要延迟。例如,在如图2所示的装置100中,模块化调度器140可以配置为:确定是否需要在调度实例中连续地执行当前在第二核上运行的任务的抢占,或者是否需要延迟当前在第二核上运行的任务的抢占。

在步骤322c,响应于确定需要在调度实例中连续地执行当前在第二核上运行的任务的抢占,装置100保存待抢占的任务的上下文,并恢复待执行任务的上下文。例如,在如图2所示的装置100中,模块化调度器140可以配置为:响应于确定需要在调度实例中连续地执行当前在第二核上运行的任务的抢占,保存待抢占的任务的上下文,并恢复待执行任务的上下文。

在步骤322d,响应于确定需要延迟当前在第二核上运行的任务的抢占,装置100执行系统状态处理和信令。例如,在如图2所示的装置100中,模块化调度器140可以配置为:响应于确定需要延迟当前在第二核上运行的任务的抢占,而执行系统状态处理和信令。

图3d是示出了根据本申请公开的实施方式,用于在多核系统上调用挂起调度实例的方法的流程图300d。

参照图3d,在步骤324a,装置100确定当前运行的任务将挂起。例如,在如图2所示的装置100中,模块化调度器140可以配置为挂起当前运行的任务。

在步骤324b,装置100保存当前运行的任务的上下文,并挂起当前运行的任务。例如,在如图2所示的装置100中,模块化调度器140可以配置为保存上下文,并挂起当前运行的任务。

在步骤324c,装置100确定要调度为运行状态的下一个优先级最高的任务。例如,在如图2所示的装置100中,模块化调度器140可以配置为确定下一个优先级最高的任务要调度为运行状态。

在步骤324d,装置100在挂起实例中连续调度下一个优先级最高的任务。例如,在如图2所示的装置100中,模块化调度器140可以配置为在挂起实例中连续调度下一个优先级最高的任务。

在步骤324e,装置100将下一个优先级最高的任务延迟至稍后的时间点。例如,在如图2所示的装置100中,模块化调度器140可以配置为将下一个优先级最高的任务延迟至稍后的时间点。

图3e是示出了根据本申请公开的实施方式,用于在多核系统上调用平衡调度实例的方法的流程图300e。

参照图3e,在步骤326a,装置100确定在调用实例中待恢复的延迟操作。例如,在如图2所示的装置100中,模块化调度器140可以配置为确定延迟的操作要在调用实例中恢复。

在步骤326b,装置100在调用实例中执行延迟的操作。例如,在如图2所示的装置100中,模块化调度器140可以配置为在调用实例中执行延迟操作。

图4a是示出了根据本申请公开的实施方式,在多核系统的两个核上调度实例的时间并行执行的示例。

例如,多核系统可以包括两个核,即核0和核1。正在核0上运行的任务调用系统调用。由该任务调用的系统调用势必影响核1。

在常规方法和系统中,当由核0上的任务触发系统调用时,两个核(即核0和核1)都纳入os120的控制中。然后,os120执行整体代码并执行所需的修改,诸如状态改变、任务改变等。然而,当os120运行整体代码时,os120阻止两个核执行任何其它任务。另外,一旦os120完成了整体代码的执行,两个核都将包括与任务有关的更新数据。另外,os120放弃对两个核的控制。

参照图4a,模块化调度器140正在核0上执行。然而,当模块化调度器140正在核0上执行时,核1也要调度器实例。根据实施方式,调度器实例是分段的,因而模块化调度器140可以同时在核0和核1上执行。核0进入关键部分,模块化调度器140运行第一调度器实例。当模块化调度器140运行第一调度器实例时,核1也在运行一些任务而不停止。然而,核1中的事件触发了核1进入关键部分的要求,因而核1等待直至核0退出关键部分。

当核0释放关键部分时,核1进入关键部分。在进入关键部分时,模块化调度器140执行对核1的平衡,执行核1所需的调度实例,并退出关键部分。另外,当模块化调度器140正在核1上执行时,核0可能遇到创建需求调度器实例的事件。因而,核0必须等待核1释放关键部分,才能获取对关键部分的访问权限。然而,由于核1上的调度器实例,因而在os120中可能创建了一些改变,核0需要平衡改变。因而,当核0第二次获取对关键部分的访问时,在核0上执行的模块化调度器140的调度器实例确保os120对最新的改变采取行动。因而,在该实施方式中,调度器实例的并行性为系统提供了动态性。

图4b是示出了根据本申请公开的实施方式,在多核系统的三个核上调度实例的时间并行执行的示例。

结合图4a参照图4b,提供了三个核(即核0、核1和核2)上调度实例的时间并行执行。在核0上运行的模块化调度器140平衡任何不平衡的核0,并发送信号(sgi)至核1。核0上的os120执行独立于被调用以在核1上执行的sgi。

在接收到sgi时,核1运行模块化调度器140以平衡核1。另外,在由核0发送的sgi到达核1前,核2可以获得关键部分并执行所需的状态改变,即添加新任务到核1队列。因而,核1执行os120中发生的最新修改。另外,与常规方法和系统不同,根据实施方式的方法仅发送单个sgi,从而减少了os120中的冗余信令和等待时间。

因而,在该实施方式中,执行是串行进行的,其中在核0上完成第一状态,调用要在核1上完成的第二状态以及与核2相关的第三状态。在常规方法和系统中,通过控制要发生状态改变的所有三个核,第一状态、第二状态和第三状态都在同一瞬间处理。因而,直至调度实例的执行完成为止,所有三个核都停止执行任何其它动作,从而影响了装置100的实时确定性和处理时间。

图5a和图5b是示出了根据现有技术,基于单个调度器模块的任务调度和执行任务迁移的示例。

例如,多核系统可以包括四个核(即核0、核1、核2和核3),其中四个任务在四个核上运行,即,在初始状态下,任务t2在核0上运行,任务t3在核1上运行,任务t4在核2上运行,任务t5在核3上运行。另外,任务t2的优先级为2,任务t3的优先级为3,任务t4的优先级为4,任务t5的优先级为5。另外,在多核系统执行的任务中,任务t5具有最高优先级。最初,任务t2正在核0上运行。由于核2上发生了某一事件,将任务t6添加到核0;以及由于核1上发生了某一事件,在同一时间实例将任务t7添加到核0。

参照图5a和图5b,在常规方法和系统中,在步骤502a,当任务t6需要由核2添加到核0时,单个调度器模块在核2上运行。单个调度器模块负责调度所有核上的任务,因而在调用时,单个调度器模块获取锁,并确定在所有核上执行的任务的优先级和所有核(即核0、核1、核2和核3)的平衡。当在核2上调用单个调度器模块时,单个调度器模块确定所有核的平衡。因而,单个调度器模块得到较长的调度器实例。另外,如果由多个核调用单个调度器模块,并且在每个调度器实例,如果单个调度器模块要检查所有核的平衡,则将花费很长时间来持有锁。当由特定核持有锁时,则其它核无法执行内核功能。另外,在任何时间实例,四个核中的任何一个可以发生任何事件。

另外,在步骤502a,在核2上执行的单个调度器模块将sgi发送至核0,以指示核2上已发生某一事件以及作为事件的结果任务6需要在核0上执行。在步骤504a,单个调度器模块基于在所有核的队列中处于各种状态的任务的优先级,来执行并确定所有核的平衡。基于任务的优先级平衡所有核,包括:通过执行任务t6的上下文切换到运行状态,来重新调度较高优先级的任务,即,通过核0上的单个调度器模块,任务t6在核0上进入运行状态,多个核上运行的所有任务中优先级最低的任务t2进入就绪状态。

在步骤506a,在核1上执行的单个调度器模块将sgi发送至核0,以指示在核1上发生了某一事件,并作为结果需要在核0上执行任务7。在步骤508a,单个调度器模块基于在所有核的队列中处于各种状态的任务的优先级,来执行并确定所有核的平衡,即,通过核0上的单个调度器模块,任务t7在核0上进入运行状态,而相较于任务t7具有较低优先级的任务t6进入就绪状态。在常规方法中,完整地执行单个调度器模块两次,即,将任务t6添加到核0时和将任务t7添加到核0时。另外,即使单个调度器模块知道由于核1上的事件而需要在核0上执行比任务t6具有更高优先级的任务t7,也在核0上短期地以运行状态冗余调度任务t6。

图5c是示出了根据现有技术,基于单个调度器模块的任务调度和执行任务迁移的示例调度图。

结合图5a和图5b参照图5c,在步骤1,在核2上执行的单个调度器模块通过将sgi发送至核0来向核0发送信号,以指示任务6需要在核0上执行。另外,核0从核2接收到sgi,并响应于sgi,在步骤2,完整执行单个调度器模块以确定所有核的平衡。另外,单个调度器模块通过在核0上将任务t6重新调度为运行状态,来执行任务t6的上下文切换以平衡核;并且在核0上,多个核上运行的所有任务中优先级最低的任务t2进入就绪状态。

在步骤3,核1尝试访问核0上的单个调度器模块,以执行核0上的任务t7。然而,由于单个调度器模块包括使用单个锁以访问核0的关键部分,且锁已由正在核0上执行任务t6的核2持有,因此核1将无法访问核0。然而,一旦核2释放了锁,则核1获取锁以在核0上执行,在核1上执行的单个调度器模块将sgi发送至核0,以指示任务t7需要在核0上执行。在步骤4,核0从核1接收到sgi,并响应于sgi,完整执行单个调度器模块以确定所有核的平衡。此外,单个调度器模块通过在核0上将任务t7重新调度为运行状态,来执行任务t7的上下文切换以平衡核;并且在核0上,相较于任务t7具有较低优先级的任务t6进入就绪状态。

图5d和图5e是示出了根据本申请公开的实施方式,基于模块化调度实例的任务调度和执行任务迁移的示例。

结合图5a和图5b参照图5d和图5e,在步骤502c,模块化调度器140的抢占实例正在核2上执行。模块化调度器140的抢占实例确定,在与核0上的任务t2相比时,进入(至核0)的任务t6具有更高的优先级。另外,模块化调度器140决定延迟在核0上待执行的上下文切换操作,并执行所需的状态改变;以及将sgi发送至核0,以指示在核0上已经发生了某一事件,并且作为事件的结果,需要将任务6添加到核0。另外,在核2上执行的模块化调度器140不在核2本身上发起调度。在核2上执行的模块化调度器140将仅向核0提供延迟调度,即,通知核0开始调度。在步骤504c,模块化调度器140仅在核0上执行抢占实例,并且通过将任务6添加到就绪状态,来延迟核0上的任务6的上下文切换。由于任务7可以使得与任务6相关的当前事件(例如,状态的修改)无效,因而模块化调度器140不执行上下文切换,以解决由于动态自适应引起的任务t6的添加而导致的多核系统中的不平衡。

在步骤506c,在核0的实际上下文切换(即,将任务t2替换为任务t6)之前,模块化调度器140的抢占实例在核1上执行,并激活要在核0上调度的任务t7。与常规方法和调度器不同,在核1上执行的模块化调度器140不将sgi发送至核0,而直接添加在核0上待执行的任务7。

在步骤508c,模块化调度器140仅执行抢占实例,且无需再次将sgi发送至核0以执行调度。另外,当模块化调度器140正在执行抢占实例时,任务t2正在核0上运行(如步骤510c所示)。在步骤512c,模块化调度器140基于在核0的队列中处于各种状态的任务的优先级来确定核0的平衡,即,通过模块化调度器140,任务t7进入核0上的运行状态,并且具有比任务t7更低优先级的任务t2进入就绪状态。在实施方式中,模块化调度器140不检查所有其它核上的平衡,而模块化调度器140仅通知核0新任务已绑定至核0,因而需要检查。因而,核2上的模块化调度器140花费的时间更少。

在常规方法和系统中,核2获得锁,运行单个调度器模块,在核0上执行上下文切换,即,已在核0上运行的一个任务进入另一状态,并且优先级更高的任务转换到运行状态。上下文切换有其自身的开销,并且冗余上下文切换增加了系统中的冗余。另外,常规方法和系统包括与sgi相关的反馈机制。与常规方法和系统不同,在本实施方式中,sgi仅是向目标核指示调度已延迟的单向信号,因而目标核需要关注调度。

图5f是示出了根据本申请公开的实施方式,基于模块化调度器140的任务调度和执行任务迁移的示例调度图。

结合图5d和图5e参照图5f,在步骤1,核2仅执行模块化调度器140的抢占实例,并且通过将sgi发送至核0来向核0发信号以指示任务6需要在核0上执行。另外,核0从核2接收到sgi,响应于sgi,执行模块化调度器140以仅确定核0的平衡。

在步骤2,一旦核2释放了锁,则核1获取锁以在核0上执行,并且在核1上执行的模块化调度器140不将sgi发送至核0。另外,在步骤3,核0仅执行模块化调度器140的平衡实例,确定核0的平衡。另外,在步骤4,模块化调度器140通过重新调度核0上的任务t7至运行状态,执行任务t7的上下文切换以仅平衡核0,并且核0上的具有比任务t7更低优先级的任务t2进入就绪状态。

图5g是示出了时序图的示例,该时序图示出了使用常规单个调度器模块执行的调度与使用根据本申请所公开的实施方式的模块化调度器140执行的调度之间的比较。

结合图5a和图5b参照图5g,常规方法和系统的时序图指示了当任务t6添加到核0时、以及再次将任务t7添加到核0时另一上下文切换的冗余上下文切换。

与常规方法和系统不同,在本实施方式中,结合图5c,当将任务t7添加到核0时,仅存在一个上下文切换。因而,由于避免了冗余决策而节省了时间。

图6a和图6b是示出了使用常规调度器和根据本申请所公开的实施方式的模块化调度器执行的任务迁移机制之间的比较的示例。

例如,多核系统可以包括四个核(即核0、核1、核2和核3),在四个核上运行四个任务,即,在核0上运行的任务t6,在核1上运行的任务t8,在核2上运行的任务t7和在核3上运行的任务t5。任务t6、任务t8和任务t7都是核绑定任务。然而,任务t5是自由运行任务,因而可以自由地在多个核中的任何一个上执行。由于核1上的某一事件,任务t8自行挂起。

在常规方法和系统中,在步骤602a,在核1上调用常规调度器。由于优先级为8的任务t8进入阻止状态,常规调度器将sgi发送至核3以将任务t5迁移至核1中。另外,核1在while循环中旋转,等待来自核3的自由运行任务t5的迁移。在步骤604a,核3接收sgi,并发起优先级为5的自由运行任务t5到核心1的迁移。另外,在核3上,优先级为4的任务进入运行状态以在核3上执行。同时,核1继续在while循环中旋转。在步骤606a,常规调度器在核1上恢复自由运行任务t5的上下文。

与常规方法和系统不同,在本实施方式中,在步骤602b,当运行的任务t8将状态转移为阻止状态时,在核1上调用模块化调度器140的挂起实例。模块化调度器140的挂起实例保存从运行状态转移出的任务(即任务t8)的上下文。另外,模块化调度器140的挂起实例确定要在核1上调度的下一个优先级最高任务(即,在核3上自由运行的任务),确定任务5是从核3迁移并在核1上调度。另外,模块化调度器140的挂起实例在执行所需的状态修改之后,确定操作需要延迟并向核3发信号,并在当前正在执行挂起实例的核上调度优先级最高的任务t3。

然而,模块化调度器140不在while循环中等待,而执行具有优先级3的任务t3的上下文切换,任务t3存在于核1的就绪队列中以在核1上执行。在步骤604b,核3从在核1上运行的模块化调度器140接收sgi。在核3上接收到sgi时,在核3上调用平衡实例,该平衡实例确定多核系统不平衡,需要将当前运行的任务t5迁移至核1上,并保存任务t5的上下文,调度任务t4并通知核1进一步延迟调度任务t5的操作。另外,将具有优先级5的自由运行任务t5迁移至核1,并执行具有优先级4的任务t4的上下文切换以在核3上执行。然而,当模块化调度器140在核3上执行时,任务t3继续在核1上执行,平衡实例确定需要调度任务t5,并还得出不需要进一步传播调度操作的结论。在步骤606b,模块化调度器140在核1上执行上下文切换,并且任务t3移回核1上的就绪状态。因而,根据实施方式的方法总体上提高了cpu利用率。

图7a是示出了根据现有技术,多核处理器的多个核之间的信令的示例。

例如,多核系统可以包括四个核(即核0、核1、核2和核3),四个任务在四个核上运行,即在核0上运行的任务t15,在核1上运行的任务t20,在核2上运行的任务t26和在核3上运行的任务t30。任务t15、任务t20和任务t26都是核绑定任务。然而,任务t30是自由运行任务,因而可以自由地在多个核中的任何一个上执行。由于核0上的某一事件,任务t15自行挂起;由于核3上的某一事件,任务t30自行挂起。

在常规方法和系统中,在步骤702a,在核1上调用常规调度器。常规调度器在核0上运行,确定多核系统中是否存在任何不平衡,并平衡多核系统的所有核。在步骤704a,核0将sgi发送至核3,以运行单一常规调度器。核0上的任务t12仍处于就绪状态,在核0上等待切换到运行状态。另外,由于任务t15自行挂起,因而没有任务在核0上运行,且核0具有繁忙的等待实例。

由于任务t30也自行挂起,因而也在核3上调用常规调度器。另外,常规调度器再次在核3上运行,确定多核系统中是否存在任何不平衡,并平衡多核系统的所有核。

在步骤706a,常规调度器在核3上发起任务t25从就绪状态至运行状态的上下文切换,并将sgi发送至核0以指示核0执行上下文切换。核0再次调用常规调度器,并在核0上执行任务t12从就绪状态至运行状态的上下文切换。

图7b是示出了根据本申请公开的实施方式,在多核处理器的核上运行的模块化调度器实例的示例,其解决了在多核处理器的多个核之间的冗余信令的问题。

结合图7a参照图7b,在步骤702b,在核1上调用模块化调度器140。模块化调度器140在核0上运行,确定在核0中是否存在任何不平衡且仅平衡核0。模块化调度器140提供对核3的延迟调度,且不检查多核系统的其它核是否不平衡。

在步骤704b,模块化调度器140执行核0上的任务t12从就绪状态至运行状态的上下文切换。另外,核0还向核3发送sgi,以运行模块化调度器140。与常规方法和系统不同,在该实施方式中,核0不进入使多核系统的效率降低的繁忙等待状态。

另外,在步骤704b,模块化调度器140在核3上执行,确定核3中是否存在任何不平衡,并基于因进入核0上的运行状态的任务t12导致的最新改变(诸如对关键部分所做的改变)仅平衡核3。

在步骤706b,模块化调度器140在核3上发起任务t25从就绪状态至运行状态的上下文切换。然而,模块化调度器140不将sgi发送至核0。因而,根据本实施方式的方法减少了冗余信令,并且增强了系统的响应能力。

对特定实施方式的上述描述将充分地揭示本申请中实施方式的一般特性,以使其他人可以通过应用当前知识而容易地修改和/或适应这些特定实施方式的各种应用,而不会背离一般概念,因而,这样的适应和修改应当并旨在理解为处于所公开的实施方式的等同形式的含义和范围内。应当理解,本申请采用的措词或术语是出于描述的目的而非限制。因而,尽管已经根据优选实施方式描述了本申请的实施方式,但是本领域技术人员将认识到,可以在如本申请描述的实施方式的精神和范围内进行修改来实现本申请的实施方式。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1