进程中的调度器实例的制作方法

文档序号:6593888阅读:234来源:国知局
专利名称:进程中的调度器实例的制作方法
进程中的调度 器实例背景计算机系统中执行的进程常常具有不同优先级的任务。为了按所需的来运行,进 程可花费大量的开销来确保基于任务的优先级将合适的处理资源分配到任务。这一开销可 包括使用调度进程的任务以便在计算机系统中执行的调度器。带有单个调度器的进程通常在该进程所生成的所有任务之间共享处理资源并将 相同的调度策略应用于所有任务。一般而言,进程不具有通过将不同的调度策略应用于任 务的子集来直接对子集区分优先级的能力。虽然开发者可划分任务的子集并将该划分指派 到操作系统所提供的执行上下文,但这种方法可迫使开发者设计在动态分配资源的计算机 系统中可能不是最优的复杂的基础结构。概述提供本发明内容是为了以精简的形式介绍将在以下具体实施方式
中进一步描述 的一些概念。本概述并不旨在标识所要求保护的主题的关键特征或必要特征,也不旨在用 于限制所要求保护的主题的范围。提供了在进程中创建多个调度器实例的计算机系统的运行时环境。每一调度器实 例包括已分配的处理资源并且被指派要执行的一组任务。调度器实例使用已分配的处理资 源来调度要执行的任务以执行进程的工作。另外,一个调度器实例中的任务可创建嵌套调 度器实例。附图简述包括附图来提供了对各实施例的进一步理解,且这些附图被合并在本发明书内并 构成其一部分。附图示出各实施例,并且与说明书一起用于解释本发明的原理。其他实施 例和各实施例的许多预期优点将随着参考下面的详细描述进行更好的理解而得到认识。附 图的元素不一定相对于彼此而缩放。相同的附图标记指代对应的类似部分。

图1是示出带有包括多个调度器实例的进程的运行时环境的一实施例的框图。图2是示出用于在进程中创建多个调度器实例的方法的一实施例的流程图。图3是示出用于将执行上下文指派到进程中的调度器实例的方法的一实施例的 流程图。图4A-4B是示出进程中的嵌套调度器实例的实施例的框图。图5是示出用于在进程中创建嵌套调度器实例的方法的一实施例的流程图。图6是示出供在调度器中使用的调度组的一实施例的框图。图7是示出被配置成实现带有包括多个调度器实例的进程的运行时环境的计算 机系统的一实施例的框图。详细描述在以下详细描述中,对附图进行了参考,附图构成了实施例的一部分且在其中作 为示例示出了可在其中实践本发明的各特定实施例。就此,诸如“顶部”、“底部”、“前方”、 “后方”、“前导”、“尾部”等的方向性术语参考正在描述的附图的方向来使用。因为实施例的 各组件可位于多个不同的方向,所以方向性术语出于说明的目的来使用而不是限制。可以理解,可以使用其它实施例并且可以做出结 构上或逻辑上的改变而不背离本发明的范围。 因此,以下详细描述并不旨在限制,并且本发明的范围由所附权利要求来限定。应该理解,此处描述的各示例性实施例的特征可相互组合,除非另外具体注明。图1是示出带有包括多个调度器实例22(1)_22(N)的进程12A的运行时环境10 的一实施例的框图,其中N是大于或等于2的整数且表示第N个调度器实例22 (N)。运行时环境10表示计算机系统中的运行时操作模式,如图7中示出且在下文中更 详细地描述的计算机系统100,其中该计算机系统正在执行指令。计算机系统从诸如图7中 示出且在下文中更详细描述的运行时平台122等运行时平台中生成运行时环境10。运行时环境10包括至少一个调用的进程12A、资源管理层14和一组硬件线程 16 (1)-16 (M),其中M是大于或等于1的整数且表示第M个硬件线程16 (M)。运行时环境10 使用资源管理层14和硬件线程16(1)-16(M)来允许执行来自进程12A的任务以及来自与 进程12A共存的任何其他进程的任务(未示出)。运行时环境10结合资源管理层14来操 作以允许进程12A获得计算机系统的处理器和其他资源(例如,硬件线程16 (1)-16 (M))。 运行时环境10还结合资源管理层14来操作以允许多个调度器实例22 (1) -22 (N)共存于进 程12A中。运行时环境10包括生成每个调度器实例22的调度器功能。在一个实施例中,调 度器功能被实现为调度器应用程序编程接口(API)。在其他实施例中,调度器功能可使用其 他合适的编程构造来实现。当进程12A被调用时,调度器功能在进程12A或另一共存进程 中创建调度器实例22,其中每个调度器实例22操作用于调度进程12A的任务以供一个或多 个硬件线程16(1)-16(M)执行。运行时环境10可利用应用程序或库开发者使用知晓调度 器功能所提供的设施的附随工具在其程序(例如,进程12A)中表达的精细粒度并发性。进程12A包括对主存一个或多个执行上下文(即线程)的处理和其他资源的分 配。进程12A从资源管理层14获得对计算机系统中的处理和其他资源(例如,硬件线程 16(1)-16 (M))的访问。进程12A使用该处理和其他资源来使任务被执行。进程12A生成可变长度的任务形式的工作,其中每一任务与调度器实例22中的执 行上下文相关联。每一任务包括当由计算机系统执行时执行工作单元的指令序列。每一执 行上下文形成在已分配的处理资源上执行相关联的任务的线程(或诸如子进程等的类似 OS概念)。每一执行上下文包括程序状态信息和机器状态信息。执行上下文可在没有剩余 任务要执行的情况下终止。对于每一任务,运行时环境10和/或进程12A或者将任务指派 到调度器实例22以被调度来执行,或者以其他方式使该任务在不使用调度器实例22的情 况下被执行。进程12A可被配置成在基于诸如栈模型或解释器模型等任何合适的执行模型的 计算机环境中操作,且可表示任何合适类型的代码,如应用程序、库函数或操作系统服务。 进程12A具有与包括定义的存储器地址空间的一组已分配的资源相关联的程序状态和机 器状态。进程12A相对于运行时环境10中的任何共存进程自主地或基本自主地执行。因 此,进程12A不会不利地更改共存进程的程序状态或分配到共存进程的任何资源的机器状 态。类似地,共存进程不会不利地更改进程12A的程序状态或分配到进程12A的任何资源 的机器状态。资源管理层14通过将一个或多个硬件线程16指派到进程12A来将处理资源分配到进程12A。资 源管理层14与图1的实施例中的计算机环境的操作系统(未在图1中示 出)分开存在。在其他实施例中,资源管理层14或其部分或全部功能可被包括在操作系统 中。硬件线程16驻留在计算机系统的一组或者一个或多个处理器封装(例如,图7中 示出且在下文更详细地描述的处理器封装102)的执行核中。每一硬件线程16被配置成独 立于或基本独立于其他执行核来执行指令,且包括机器状态。硬件线程16可被包括在单个 处理器封装中,或者可分布在多个处理器封装上。处理器封装中的每一执行核可包括一个 或多个硬件线程16。处理器12A隐式地或显式地使得经由运行时环境10提供的调度器功能来创建每 一调度器实例22(1)-22 (N)。当进程12A使用计算机系统中可用的API或编程语言特征时, 可隐式地创建调度器实例22。响应于API或编程语言特征,运行时环境10创建带有默认策 略37的调度器实例22。为了显式地创建调度器22,进程12A可调用运行时环境10提供的 调度器功能并为调度器实例22指定一个或多个策略37。进程12A可在整个执行过程中增 加或减少调用的调度器实例22的数量。每一调度器实例22以对于进程12透明的方式与资源管理层14进行交互来协商 计算机系统的处理和其他资源。资源管理层14基于供需和调度器实例22的任何策略37 来将硬件线程16分配到调度器实例22。在图1示出的实施例中,调度器实例22通过创建形成底层硬件线程16的抽象的 虚拟处理器32来管理处理资源。每一调度器实例22包括一组虚拟处理器32 (1) -32 (P),其 中每个P是大于或等于1的整数且表示调度器实例22中的第P个虚拟处理器32 (P)。每一 调度器实例22在进程12A的执行的各个点可具有相同或不同数量的虚拟处理器32 ( S卩,每 一 P(1)-P(M)可以少于、多于、或等于在进程12A的执行期间的任何其他Ρω-Ρ(Μ))。每一调度 器实例22通过将每一虚拟处理器32映射到硬件线程16来将虚拟处理器32复用到硬件线 程16上。每一调度器实例22可将一个以上的虚拟处理器32映射到特定硬件线程16上, 但只将一个硬件线程16映射到每一虚拟处理器32。在其他实施例中,每一调度器实例22 以其他合适的方式来管理处理资源以使得硬件线程16执行进程12的指令。每一调度器实例22中的执行上下文集包括具有正在由相应的虚拟处理器 32⑴-32⑵执行的相应的相关联任务36⑴-36⑵的一组执行上下文34⑴-34⑵,以及 在进程12A的执行期间的任何点的一组零个或多个执行上下文38。每一执行上下文34和 38包括指示执行上下文34或38是正在执行的、可运行的(例如,响应于变为解除阻塞或被 添加到调度器实例22)还是被阻塞的状态信息。正在执行的执行上下文34已经被附加到 虚拟处理器32且当前正在执行。可运行的执行上下文38包括相关联的任务40且准备好 由可用虚拟处理器32来执行。被阻塞的执行上下文38还包括相关联的任务40且正在等 待正由另一执行上下文34生成的或者将由另一执行上下文38生成的数据、消息或事件。在虚拟处理器32上执行的每一执行上下文34可在其执行过程中生成按任何合适 的方式来组织(例如,添加到工作队列(未在图1中示出))的附加任务42。在一实施例 中,可以通过使用运行时环境10提供的应用程序编程接口(API)或编程语言特征以及相应 的工具来创建工作。当处理资源可为调度器实例22所用时,任务被指派到执行上下文34 或38,执行上下文34或38在拾取新任务之前将其在虚拟处理器32上执行至完成或执行至阻塞点(例如,等待消息 或窃取子任务完成)。当任务解除阻塞时,任务被重新调度来在可 用虚拟处理器上执行,该任务可能被给予选择该任务在阻塞之前在其中执行此任务的硬件 线程16上的虚拟处理器32的优先级,希望存储器分层结构(即,高速缓存分层结构)已经 包含了可最优重用的数据。在虚拟处理器32上执行的执行上下文34还可通过生成将由其 他执行上下文38使用的数据、消息或事件来对其他执行上下文38解除阻塞。每一调度器实例22中的每一任务可以是实现的(例如,实现的任务36和40),这 指示执行上下文34或38已经或将要被附加到该任务且该任务准备好执行。实现的任务通 常包括解除阻塞的执行上下文和调度的代理。未实现的任务被称为未实现的。未实现的任 务(例如,任务42)可作为父任务的执行所生成的子任务来创建,且可由并行构造来生成 (例如,并行、并行的、开始和完成)。每一调度器实例22可被组织成带有执行上下文的逻辑 上独立的任务(即,实现的任务)的同步集合(例如,栈和/或队列),以及依赖任务(即, 未实现的任务)的工作窃取(workstealing)队列的列表,如以下图6的实施例所描述的。在完成、阻塞或以其他方式中断(即,显式产生或迫使抢先)与在虚拟处理器32 上运行的执行上下文34相关联的任务36之后,虚拟处理器32变成可为执行另一实现的任 务40或未实现的任务42所用。调度器实例22搜索可运行执行上下文38或未实现的任务 42来附加到可用虚拟处理器32以便按任何合适的方式执行。例如,调度器实例22可在搜 索要执行的未实现的任务42之前首先搜索要执行的可运行执行上下文38。每一调度器实 例22不断地将执行上下文38附加到可用虚拟处理器32以供执行,直到执行了调度器实例 22的所有任务和执行上下文38。调度器实例22可具有不同种类的执行上下文。在包括其中进程12A是Windows 进程的Windows操作系统的计算机系统的实施例中,Windows进程中的不同的调度器实例 22可包括线程执行上下文和纤程(fiber)执行上下文。因此,线程执行上下文和光纤执行 上下文可存在于同一 Windows进程中。在执行任务之前,每一调度器实例22从运行时环境10或操作系统(例如,图7的 OS 120)获得执行上下文34和38。可用虚拟处理器32定位并执行执行上下文34来开始 执行任务。虚拟处理器32响应于与完成、阻塞、或以其他方式被中断的执行上下文34相关 联的任务36而再次变为可用。当虚拟处理器32变为可用时,如果当前执行下文34所执行 的先前任务36完成,则虚拟处理器32切换至可运行执行上下文38或者执行下一任务40 或42作为对当前执行上下文34的继续。在一个实施例中,调度器实例22独立于彼此而自主地操作并与下方的公共资源 管理层14进行通信。在其他实施例中,调度器实例22与资源管理层14和彼此进行通信以 便允许被调度在调度器实例22的一个实例上的工作与被调度在另一调度器实例22上的工 作进行协调。调度器实例22可各自具有相同或不同的策略37。当调度器实例22被调用时,运 行时环境10和/或进程12A为调度器实例22指定策略37。每一调度器实例22的策略可 指定以下的一个或多个1)要分配的处理资源的数量(例如,最小数目、所需数目和/或最大数目);2)共享类型(例如,独占的或可共享的);3)优先级类型(例如,高、中或低);
4)公平 性类型(例如,增强高速缓存局部性或增强公平性);5)行为类型(例如,欺诈零工(rogue chore)阈值、空闲阈值、分段阈值、和/或其 他资源重新分配行为);6)执行次序类型(例如,后进先出(LIFO)次序、先进先出(FIFO)次序、或为了服 务质量或排序保证的默认次序);以及7)拓扑结构类型(即,指定特定局部性特征的信息(例如,计算机系统中的一组相 关处理资源)和/或指定特定资源特征的信息(例如,计算机系统中的具有所选芯片组能 力的一组处理资源))。除进程12A以外,运行时环境10中的其他共存进程(未示出)可包括在进程的执 行过程中可增加或减少的零个或多个调度器实例22。图2是示出用于在进程12A中创建多个调度器实例22的方法的一实施例的流程 图。在一实施例中,图2的方法可由的计算机系统中的进程12A和/或运行时环境10显式 地或隐式地执行。在进程12A中创建至少第一和第二调度器实例22 (1)和22 (2),如框52中所指示 的。调度器实例22(1)和22(2)各自包括可由计算机系统执行以使得在相应的处理资源子 集上执行由运行时环境10和/或进程12A所指派的相应的一个或多个任务集的指令。处 理资源集包括硬件线程16,且在一个实施例中,还包括资源管理层14所分配的虚拟处理器 32。在资源管理层14将虚拟处理器32集分配到调度器实例22(1)和22 (2)的情况下,虚 拟处理器32集表示计算机系统的相应的处理器资源(即,硬件线程16)子集。因此,资源 管理层14将每一虚拟处理器32集映射到相应的硬件线程16集。调度器实例22(1)和22⑵可由运行时环境10和/或进程12A使用如上所述的 运行时环境10的调度器功能来隐式地或显式地启动。调度器实例22(1)和22(2)也可在 进程12A的执行期间的同一时刻(例如,在启动进程12A时)或不同时刻启动。另外,调度 器实例22⑴和22⑵可具有相同或不同的策略37。运行时环境10和/或进程12A将一组一个或多个任务分配到调度器实例22 (1) 以供执行并将一组一个或多个任务分配到调度器实例22(2)以供执行。运行时环境10和 /或进程12A可基于如下参考图3更详细地描述的调度器实例22(1)和22 (2)的各自的策 略37或基于其他准则来指派任务集。参考图2,调度器实例22(1)调度第一组任务以供执行,如框54中所指示的。当调 度器实例22(1)的虚拟处理器32变为可用时,调度器实例22(1)将执行上下文34附加到 该可用虚拟处理器32并将来自调度器实例22 (1)中的任务集的任务与执行上下文34相关 联以使得虚拟处理器32经由底层硬件线程16来执行该任务。调度器实例22(1)继续执行 来自任务集的任务直到调度器实例22(1)中的所有任务都已被执行。同样,调度器实例22(2)调度第二组任务以供执行,如框56中所指示的。当调度 器实例22(2)的虚拟处理器32变为可用时,调度器实例22(2)将执行上下文34附加到该 可用虚拟处理器32并将来自调度器实例22 (2)中的任务集的任务与执行上下文34相关联 以使得虚拟处理器32经由底层硬件线程16来执行该任务。调度器实例22 (2)继续执行来 自任务集的任务直到调度器实例22(2)中的所有任务都已被执行。现在将根据一个实施例来描述使用图2的方法的示例。在该示例中,进程12A是执行音频和视频处理的应用程序且音频处理具有胜于视频处理的优先级。因此,进程12A 调用具有高处理资源数的第一调度器实例22(1)来执行音频处理,而调用具有低处理资源 数的第二调度器实例22(2)来执行视频处理。运行时环境10将与音频处理相关的任务集 分配到进程12A所指定的调度器实例22(1)而将与视频处理相关的任务集分配到进程12A 所指定的调度器实例22(2)。如果分配到进程12A的处理资源数量发生变化,则运行时环 境10可在确保调度器实例22(1)具有足够用于较高优先级的音频处理的处理资源的同时 调整分配到调度器实例22(1)和/或22(2)的处理资源数量。图3是示出用于将一组一个或多个任务指派到进程12A中的调度器实例22的方法的一实施例的流程图。当运行时环境10和/或进程12A确定任务集要被分配到调度器 实例22以供执行时,运行时环境10和/或进程12A如框62中所指示地标识所有调度器实 例22的策略37并如框64中所指示地基于策略37将任务集指派到调度器实例22。运行时环境10可向进程12A提供请求带有与进程12A所指定的一个或多个策略 最密切地匹配的一个或多个策略37的调度器实例22的能力。运行时环境10搜索进程12A 中的调度器实例22并基于可配置的预定义试探来选择调度器实例22。回头参考上文中进程12A执行音频和视频处理的示例,运行时环境10可从调度器 实例22⑴和22⑵的各自的策略37中确定调度器实例22⑴被配置成具有比调度器实 例22(2)更多的处理资源。因此,运行时环境10可将较高优先级的音频处理任务指派到进 程12A所指定的调度器示例22 (1)而将较低优先级的视频处理任务指派到进程12A所指定 的调度器示例22⑵。如上参考图1-3所述的使用多个调度器实例22可有利地提供对进程12A中的工 作的划分指定策略限制的方式。进程开发者可选择在进程中创建若干调度器实例22,每个 调度器实例带有不同的策略37,并使得工作单元取决于该工作的本质而被压至合适的调度 器实例22上。开发者可调节调度器实例22的策略37的参数以根据需要影响进程的吞吐 量或响应性。除了将任务集分配到调度器实例22之外,进程12A可获得对与分配到调度器实例 22的处理资源分开的处理资源的访问。例如,运行时环境10可允许从资源管理层14向进 程12A分配除了分配到调度器实例22的那些虚拟处理器之外的虚拟处理器32。运行时环 境10和/或进程12A可使得在这些分开的处理资源上执行所选任务集以使得执行所选执 行上下文34而无需使用调度器实例22。如图4A-4B和5的实施例所示,运行时环境10还允许执行上下文34在现有调度 器实例22(1)中动态地嵌套新的调度器实例22 (2)。在现有调度器实例22(1)中的执行上 下文34(2)上执行的任务36(2)可调用运行时环境10的调度器功能以便创建调度器实例 的新的实例22⑵。图4A-4B是示出进程12B中并排存在的调度器实例22(1)和22⑵的 实施例的框图,其中调度器实例22(1)的执行上下文34(2)在调度器实例22(1)中嵌套调 度器实例22(2)。图5是示出用于在最初属于进程12B中的调度器22(1)的执行上下文34 上创建嵌套调度器实例22(2)的方法的一实施例的流程图。参考图4A和5,在进程12B中创建第一调度器实例22 (1),如框72中所指示的。在 图4A的示例中,调度器实例22(1)包括正在分别执行执行上下文34(1)和34(2)的一组虚 拟处理器32 (1)和32 (2)。调度器实例22 (1)还包括正等待被执行的执行上下文38池和策略37。每一执 行上下文34⑴-34(2)和38包括标识调度器实例22⑴的数据44(1)。作 为每一执行上下文34(1)-34 (2)和38被分配到调度器实例22(1)的结果,数据44(1)与每 一执行上下文34(1)-34(2)和38—起存储。在一个实施例中,数据44(1)可被存储在每一 执行上下文34(1)-34(2)和38的本地存储里的栈中,并表示已经被压至栈上的第一条目。在进程12B中的调度器实例22(1)中的执行上下文34(2)上执行的任务36(2)可 导致创建第二调度器实例22 (2),如框74中所指示的。调度器实例22 (2)的策略37可与调 度器实例22⑴的策略37不同,以允许调度器实例22⑴和22⑵执行具有不同性能特性 的不同任务集。在图4A和4B的示例中,在执行上下文34(2)上执行的任务36(2)导致创 建带有策略37的调度器实例22 (2),并由此在执行上下文34(2)中动态地嵌套调度器实例 22(2)。调度器实例22(2)中的虚拟处理器32(1)拾取执行上下文34(2)以供执行。在调 度器实例22(1)中,先前被指派到执行上下文34(2)的虚拟处理器32(2)变成可用于执行 调度器22(1)中的其他任务。因此,调度器实例22(1)中的虚拟处理器32 (2)拾取执行上 下文38(1)来执行任务40(1)。作为执行上下文34 (2)被移动到调度器实例22 (2)的结果,标识调度器实例22 (2) 的数据44(2)与执行上下文34(2) —起存储。在一个实施例中,数据44(2)可被存储在执 行上下文34(2)的本地存储里的栈中,并被压至包括数据44(1)的栈中的第一条目的顶部。 栈的顶部条目指示每一执行上下文34的当前调度器实例22。嵌套调度器实例22(2)可用诸如在图4B的示例中示出的虚拟处理器32(2)等附 加虚拟处理器32来创建。调度器实例22(1)和22 (2)各自使用相应的虚拟处理器32集来调度相应的任务 集来执行,如框76中所指示的。调度器实例22 (1)继续调度调度器实例22 (1)的任务以便在调度器实例22 (1)的 虚拟处理器32(1)和32(2)上执行,而调度器实例22(2)调度执行上下文34(2)上的任务 36(2)所生成的调度器实例22(1)的任务以便在调度器实例22⑵的虚拟处理器32(1)和 32(1)上执行。运行时环境10和/或进程12B可继续将执行上下文34和38所拾取以供执行的 附加任务集指派到调度器实例22(1)。标识调度器实例22(1)的数据44(1)与被分配到调 度器实例22(1)的任何附加执行上下文一起存储。然而,运行时环境10和/或进程12B只允许将由执行上下文34(2)上的任务36(2) 所生成的任务指派到嵌套调度器实例22(2)。在图4B的示例中,执行上下文34(3)上的任 务36 (3)正由虚拟处理器32(2)执行而执行上下文38池正在等待由调度器实例22 (2)来 执行。标识调度器实例22(2)的数据44(2)与执行上下文34(2)-34(3)和38—起存储在 调度器实例22 (2)中。执行上下文34(2)最终可被返回至调度器实例22(1),如框78中所指示的。为此, 从执行上下文34(2)中移除数据44(2)从而使得数据44(1)指示执行上下文34(2)属于 调度器实例22(1)。在数据44(1)和44(2)作为栈来存储的情形中,从栈的顶部弹出数据 44(2)而数据44(1)返回至栈的顶部。调度器实例22(1)中的虚拟处理器32拾取执行上下 文34 (2)以供执行。使用图5的方法,可以在每一执行上下文34上堆叠或嵌套任意数量的调度器实例22,其中每一调度器实例22包括可与其他调度器实例22的策略37不同的所需策略37。每 一执行上下文包括标识已指派的调度器实例22的数据44。每一次执行上下文移动至新的 调度器实例22时,标识新的调度器实例22的新的数据44被添加(例如,至栈上)至执行 上下文。在其他实施例中,嵌套调度器实例22可与父调度器实例22更密切地集成以潜在 可能地允许父调度器实例22和嵌套的调度器实例22之间的资源共享。使用图5的方法,库开发者可有利地创建嵌套带有所选调度器策略或策略偏好的 调度器实例22的库。这可允许库开发者确保库中的库功能用最合适这些功能的调度器策 略来执行而不管上覆进程的调度器策略。例如,执行上下文34(2)上的任务36(2)可表示 图4A-4B的示例中的进程12B所调用的库功能。通过使用调度器实例22(2),执行上下文 34(2)可比在由调度器实例22(1)执行的情况下更高效地执行。在一个实施例中,进程12A和12B将任务组织成一个或多个调度组90并将调度组 90呈现给调度器实例22。图6是示出供在调度器实例22中使用的调度组90的一实施例 的框图。调度组90包括可运行集合92、实现的任务集合93、工作集合94、和一组零个或多 个工作窃取队列96。可运行集合92包含解除阻塞执行上下文38的列表。当执行上下文 变为解除阻塞时,调度器实例22将执行上下文38添加至可运行集合92。实现的任务集合 93包含可能具有或可能不具有相关联的执行上下文38的实现的任务40的列表(例如,未 启动的代理)。当进程12将新的可运行任务呈现给调度器实例22时,调度器实例22将实 现的任务添加至实现的任务集合93。工作集合94包含如由箭头98所指示的工作窃取队 列96的列表,并跟踪正在执行来自工作窃取队列96的任务的执行上下文。每一工作窃取 队列96包括一个或多个未实现的任务42。使用图6的实施例,调度器实例22可首先在调度器实例22中的每一调度组90的 可运行集合92中搜索解除阻塞的执行上下文38。调度器实例22然后可在调度器实例22 的调度组90的工作窃取队列96中搜索未实现的任务之前在所有调度组90的实现的任务 集合93中搜索实现的任务。在一个实施例中,变为可用的虚拟处理器32可尝试在该虚拟处理器32最近从中 获得可运行执行上下文38的调度组90 (即,当前调度组90)的可运行集合92中定位可运 行执行上下文38或者在该调度组90的实现的任务集合93中定位实现的任务40。可用虚 拟处理器32然后可尝试以循环或其他合适的次序在调度器实例22的其余调度组90中的 可运行集合92中定位可运行执行上下文38或者在其余调度组90的实现的任务集合93中 定位实现的任务40。如果没有找到可运行执行上下文38,则可用虚拟处理器32然后可尝 试在以循环或其他合适的次序搜索调度器实例22的其余调度组90中的工作窃取队列96 之前在当前调度组90的工作窃取队列96中定位未实现的任务42。图7是示出被配置成实现带有进程12A或12B中的多个调度器实例22的运行时 环境10的计算机系统100的一实施例的框图。计算机系统100包括一个或多个处理器封 装102、存储器系统104、零个或多个输入/输出设备106、零个或多个显示设备108、零个或 多个外围设备110、和零个或多个网络设备112。处理器封装102、存储器系统104、输入/ 输出设备106、显示设备108、外 围设备110和网络设备112使用包括任何合适的类型、数量和配置的控制器、总线、接口、和/或其他有线或无线连接的一组互连114来进行通信。计算机系统100表示出于通用或专用目的而配置的任何合适的处理设备。计算机系统100的示例包括服务器、个人计算机、膝上型计算机、图形输入板计算机、个人数字助 理(PDA)、移动电话、和音频/视频设备。计算机系统100的组件(即,处理器封装102、存 储器系统104、输入/输出设备106、显示设备108、外围设备110、网络设备112和互连114) 可包含在公共外壳(未示出)中或任何合适数量的独立外壳(未示出)中。处理器封装102包括硬件线程16(1)-16 (M)。处理器封装102中的每一硬件线程 16被配置成访问并执行存储在存储器系统104中的指令。这些指令可包括基本输入输入系 统(BIOS)或固件(未示出)、操作系统(OS) 120、运行时平台122、应用程序124和资源管理 层14(也在图1中示出)。每一硬件线程16可结合或响应于从输入/输出设备106、显示 设备108、外围设备110、和/或网络设备112接收到的信息来执行指令。计算机系统100引导并执行OS 120。OS 120包括可由硬件线程16执行来管理计 算机系统100的组件并提供允许应用程序124访问并使用该组件的一组功能的指令。在一 实施例中,OS 120是Windows操作系统。在其他实施例中,OS 120是适于和计算机系统100 一起使用的另一操作系统。资源管理层14包括可结合OS 120来执行以如上参考图1所述地分配包括硬件线 程16的计算机系统100的资源的指令。资源管理层14可作为可为一个或多个应用程序 124所用的功能库或者作为OS 120的一个集成部分被包括在计算机系统100中。运行时平台122包括可结合OS 120和资源管理层14来执行以生成运行时环境10 并向应用程序124提供运行时功能的指令。这些运行时功能包括如上参考图1所详细描述 的调度器功能。运行时功能可作为应用程序124的一部分、作为对一个或多个应用程序124 可用的功能库、或者作为OS 120和/或资源管理层14的一个集成部分被包括在计算机系 统100中。每一应用程序124包括可结合OS 120、资源管理层14和/或运行时平台122来执 行以使计算机系统100执行所需操作的指令。每一应用程序124表示可与由OS 120提供 的多个调度器实例22、资源管理层14和/或运行时平台122 —起执行的一个或多个进程, 诸如上述的进程12A和12B。存储器系统104包括被配置成存储指令和数据的任何合适的类型、数量和配置的 易失性或非易失性存储设备。存储器系统104的存储设备表示存储包括OS 120、资源管理 层14、运行时平台122和应用程序124的计算机可执行指令的计算机可读存储介质。这些 指令可由计算机系统来执行以执行此处描述的OS 120、资源管理层14、运行时平台122和 应用程序124的功能和方法。存储器系统104中的存储设备的示例包括硬盘驱动器、随机 存取存储器(RAM)、只读存储器(ROM)、闪存驱动器和卡、以及磁盘和光盘。存储器系统104存储从处理器封装102、输入/输出设备106、显示设备108、外围 设备110和网络设备112接收的指令和数据。存储器系统104向处理器封装102、输入/输 出设备106、显示设备108、外围设备110和网络设备112提供存储的指令和数据。输入/输出设备106包括被配置成将指令或数据从用户输入到计算机系统100并 将指令或数据从计算机系统100输出到用户的任何合适的类型、数量和配置的输入/输出 设备。输入/输出设备106的示例包括键盘、鼠标、触摸垫、触摸屏、按钮、拨盘、旋钮和开关。
显 示设备108包括被配置成向计算机系统100的用户输出文本和/或图形信息的 任何合适的类型、数量和配置的显示设备。显示设备108的示例包括监视器、显示屏和投影 仪。外围设备110包括被配置成用计算机系统100中的一个或多个其他组件来操作以 执行通用或专用处理功能的任何合适的类型、数量和配置的外围设备。网络设备112包括被配置成允许计算机系统100通过一个或多个网络(未示出) 进行通信的任何合适的类型、数量和配置的网络设备。网络设备112可根据任何合适的网 络协议和/或配置来操作以允许计算机系统100将信息发送给网络或者从网络接收信息。尽管此处说明并描述了具体实施例,但本领域技术人员可以理解,可用各种替换 和/或等价实现来替换此处示出并描述的具体实施例而不背离本发明的范围。本申请旨在 覆盖此处讨论的具体实施例的任何改编或变型。因此,本发明旨在仅由权利要求书及其等 效方案来限制。
权利要求
1. 一种存储计算机可执行指令的计算机可读存储介质(104),所述计算机可执行指令 在由计算机系统(100)执行时执行一种方法,所述方法包括用所述计算机系统可执行的指令来创建第一调度器实例(22)以使得所述计算机系统 执行进程(12)的第一组任务(36/40/42);以及用所述计算机系统可执行的指令来创建第二调度器实例(22)以使得所述计算机系统 执行所述进程的第二组任务(36/40/42)。
2.如权利要求1所述的计算机可读存储介质,其特征在于,所述方法还包括 将第一组虚拟处理器(32)分配到所述第一调度器实例来表示所述计算机系统的处理器资源的第一子集;以及将第二组虚拟处理器(32)分配到所述第二调度器实例来表示所述计算机系统的处理 器资源的第二子集。
3.如权利要求2所述的计算机可读存储介质,其特征在于,所述方法还包括 将所述第一组虚拟处理器映射到第一组硬件线程(16)以使得所述第一组硬件线程执行所述第一组任务;以及将所述第二组虚拟处理器映射到第二组硬件线程(16)以使得所述第二组硬件线程执 行所述第二组任务。
4.如权利要求1所述的计算机可读存储介质,其特征在于,创建所述第二调度器实例 包括将执行所述第一组任务中的一个的执行上下文(34)从所述第一调度器实例移动至所 述第二调度器实例;以及将所述第一组任务中的一个作为所述第二组任务中的一个来执行。
5.如权利要求4所述的计算机可读存储介质,其特征在于,创建所述第二调度器实例 还包括在将所述第一组任务中的一个作为所述第二组任务中的一个来执行之前,将标识所述 第一调度器实例的数据(44)与所述执行上下文一起存储。
6.一种方法,包括启动进程(12)中的第一和第二调度器实例(22),所述第一和第二调度器实例能够分 别访问来自一组处理资源的处理资源的第一子集和第二子集以及来自所述进程的第一组 任务和第二组任务(36/40/42);用所述第一调度器实例调度所述第一组任务中的第一个以便由所述处理资源的第一 子集中的一个来执行;以及用所述第二调度器实例调度所述第二组任务中的一个以便由所述处理资源的第二子 集中的一个来执行。
7.如权利要求6所述的方法,其特征在于,还包括通过将所述第一组任务中的一个与被分配到所述第一调度器实例的第一组虚拟处理 器(32)中的一个上的第一执行上下文(34)进行关联来调度所述第一组任务中的第一个以 便由所述处理资源的第一子集中的一个来执行;以及通过将所述第二组任务中的一个与被分配到所述第二调度器实例的第二组虚拟处理 器(32)中的一个上的第一执行上下文(34)进行关联来调度所述第二组任务中的一个以便由所述处理资源的第二子集中的一个来执行;其中所述处理资源的第一和第二子集分别包括所述第一和第二组虚拟处理器。
8.如权利要求7所述的方法,其特征在于,还包括将所述第一组虚拟处理器中的一个映射到第一硬件线程(16)以便执行所述第一组任 务中的第一个;以及将所述第二组虚拟处理器中的一个映射到第二硬件线程(16)以便执行所述第二组任 务中的一个;其中所述处理资源集包括所述第一和第二硬件线程。
9.如权利要求6所述的方法,其特征在于,还包括响应于在所述第一调度器实例中的处理资源的第一子集中的一个上执行第一执行上 下文(34)上的第一组任务中的一个,启动所述第二调度器实例;以及启动所述第二调度器实例来包括所述第一执行上下文。
10.如权利要求9所述的方法,其特征在于,还包括将标识所述第一调度器实例的第一数据(44)与所述第一执行上下文一起存储。
11.如权利要求10所述的方法,其特征在于,还包括将标识所述第一调度器实例的第二数据(44)与第二执行上下文(34) —起存储在所述 第一调度器实例中;以及将标识所述第二调度器实例的第三数据(44)与所述第一执行上下文一起存储。
12.如权利要求11所述的方法,其特征在于,还包括将所述第一数据和所述第三数据作为栈来存储。
13.如权利要求9所述的方法,其特征在于,还包括将所述第二调度器实例中的所述第一执行上下文返回至所述第一调度器实例。
14.如权利要求9所述的方法,其特征在于,还包括在启动所述第二调度器实例之后调度所述第一组任务中的第二个以便由所述处理资 源的第一子集中的一个来执行。
15.如权利要求6所述的方法,其特征在于,所述进程是应用程序、库函数或操作系统 服务中的一个。
全文摘要
提供了在进程中创建第一和第二调度器实例的计算机系统的运行时环境。每一调度器实例包括已分配的处理资源并被指派要执行的一组任务。每一调度器实例使用已分配的处理资源来调度要执行的任务以执行进程的工作。
文档编号G06F9/50GK102047218SQ200980121240
公开日2011年5月4日 申请日期2009年5月1日 优先权日2008年6月2日
发明者G·弗纳德斯, N·古斯塔夫松, P·卢奇多, P·林塞斯, R·帕蒂尔, R·莫洛伊 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1