CN101702134B - 无操作系统干预情况下调度os隔离定序器上的线程的机制 - Google Patents
无操作系统干预情况下调度os隔离定序器上的线程的机制 Download PDFInfo
- Publication number
- CN101702134B CN101702134B CN200910222297.5A CN200910222297A CN101702134B CN 101702134 B CN101702134 B CN 101702134B CN 200910222297 A CN200910222297 A CN 200910222297A CN 101702134 B CN101702134 B CN 101702134B
- Authority
- CN
- China
- Prior art keywords
- thread
- sequencer
- operating system
- queue
- instruction
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4843—Task transfer initiation or dispatching by program, e.g. task dispatcher, supervisor, operating system
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Executing Machine-Instructions (AREA)
- Stored Programmes (AREA)
- Debugging And Monitoring (AREA)
- Computer And Data Communications (AREA)
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本文公开了在无操作系统干预的情况下调度与OS无关的“纤程”的方法、设备和系统实施例。对于至少一个实施例,由调度程序例程而不是操作系统调度纤程以供执行。调度程序例程可在每个启用的定序器上运行。调度程序可从队列系统检索纤程描述符。与调度程序相关联的定序器随后可执行由描述符描述的纤程。本文还描述和声明了其他实施例。
Description
本申请是申请日为2005年12月22日、申请号为200580045758.6、发明名称为“无操作系统干预情况下调度OS隔离定序器上的线程的机制”的专利申请的分案申请。
技术领域
本公开内容一般涉及信息处理系统,并且更具体地,涉及无操作系统干预情况下OS隔离定序器上的线程执行的调度和控制。
背景技术
为提高信息处理系统、诸如包括微处理器的那些信息处理系统的性能,采用了硬件和软件技术。在硬件方面,提高微处理器性能的微处理器设计方案包括了更快的时钟速度、流水线技术、分支预测、超标量执行、无序执行和高速缓存。许多此类方案使得晶体管数量增加,并且在一些情况下,甚至导致晶体管数量增加率大于性能提高率。
其他性能增强涉及软件技术,而不是寻求完全通过增加晶体管来提高性能。一种已用于提高处理器性能的软件方案称为“多线程处理”。在软件多线程处理中,指令流可分成可以并行执行的多个指令流。或者,多个独立的软件流可并行执行。
在一个称为时间片多线程处理或时间复用(“TMUX”)多线程处理的方案中,单个处理器在固定时间段后在线程之间切换。在还有的另一方案中,在发生例如长等待时间高速缓存缺失的触发事件时,单个处理器在线程之间切换。在称为基于事件切换的多线程处理(“SoEMT”)的此后一方案中,在给定时间最多只有一个线程是活动的。
在硬件方面,越来越支持多线程处理。例如,在一个方案中,在诸如芯片多处理器(“CMP”)系统等多处理器系统中的处理器各自可并发对多个软件线程之一起作用。在称为同时多线程处理(“SMT”)的另一方案中,单个物理处理器变得对操作系统和用户程序好像是多个逻辑处理器。对于SMT,多个软件线程可以是活动的,并同时在单个处理器上执行而无需切换。也就是说,每个逻辑处理器维护一套完整的架构状态,但共享诸如高速缓存、执行单元、分支预测器、控制逻辑和总线等物理处理器的许多其他资源。对于SMT,来自多个软件线程的指令因而在每个逻辑处理器上并发执行。
对于支持软件线程并发执行的系统,如SMT和/或CMP系统,操作系统应用可控制软件线程的调度和执行。然而,一般情况下,操作系统控制不能良好地扩展;操作系统应用调度线程而对性能没有负面影响的能力通常只限于较少量的线程。
发明内容
按照本发明的第一方面,提供了一种设备,所述设备包括:包括与操作系统无关的分布式调度程序例程的第一部分的第一线程执行单元;包括与操作系统无关的分布式调度程序例程的第二部分的第二线程执行单元;其中所述第一线程执行单元和所述第二线程执行单元能够进行并发多线程执行;其中所述第一部分和所述第二部分还查询工作队列以争用描述线程的工作描述符;以及其中所述分布式调度程序例程基于所述争用,在无操作系统干预的情况下调度要在所述线程执行单元中选定的一个上执行的线程。
按照本发明的第二方面,提供了一种多定序器多线程处理系统,所述多定序器多线程处理系统包括:存储器系统;第一定序器类型的第一定序器;第二定序器类型的第二定序器;以及存储在所述存储器系统中的软件库,所述软件库包括生成工作队列的一个或多个指令;所述库还包括分布式调度程序,以执行用户指引的来自所述工作队列的要在所述定序器上执行的工作的调度。
按照本发明的第三方面,提供了一种在多线程处理器中、在多个定序器之间调度软件线程的执行的方法,包括下列步骤:响应于用户生成的线程指令,生成描述线程的线程描述符;将所述线程描述符置于队列中;执行多个调度程序例程,每个所述例程与独特的定序器相关联,其中所述多个定序器不受基于操作系统的线程调度程序影响;其中每个所述调度程序例程争用所述队列中的所述描述符;以及调度所述线程以在所述定序器之一上执行。
附图说明
可参照下面的附图理解本发明的实施例,其中,类似的要素用类似的标号表示。这些图形无意于限制,而是用于说明调度OS隔离线程以供执行的设备、系统和方法的选定实施例。
图1是方框图,示出多定序器系统的一般并行编程方案的图形表示。
图2是方框图,示出在用户级多线程处理的至少一个实施例的线程和纤程(shred)之间的共享存储器和状态。
图3是方框图,示出多定序器系统的各个实施例。
图4是数据流程图,示出支持用户级线程控制的多定序器多线程处理系统的调度机制的至少一个实施例。
图5是数据流程图,示出非对称多定序器多线程处理系统的调度机制的至少一个实施例。
图6是数据流程图,示出包括多个工作队列的调度机制的至少一个实施例。
图7是时序图,示出用户驱动的与OS无关的纤程调度的控制流的至少一个实施例。
图8是时序图,示出用户驱动的与OS无关的纤程调度的特定示例的控制流的至少一个实施例。
图9是方框图,示出能够执行公开技术的系统的至少一个实施例。
具体实施方式
下面的论述描述了调度和/或以其他方式控制一个或多个OS隔离定序器上的执行线程(称为“纤程”)的方法、系统和机制的选定实施例。OS隔离定序器在本文中有时称为“OS不可见”。可结合单核或多核多线程处理系统来利用本文所述机制。在下面的说明中,陈述了如下的许多特定的细节以更透彻地理解本发明,如处理器类型、多线程处理环境、系统配置、多定序器系统中定序器的数量和拓扑、微架构的结构及指令名称和参数。然而,本领域的技术人员将理解,可无需此类特定细节来实现本发明。另外,未详细示出一些熟知的结构、电路及诸如此类以免不必要地混淆本发明。
共享存储器多处理范例可在称为并行编程的方案中使用。根据此方案,应用程序员可将有时称为“应用”或“进程”的软件程序分成要并发运行的多个任务以便表示软件程序的并行性。同一软件程序(“进程”)的所有线程共享共同的存储器逻辑视图。
图1是方框图,示出在多定序器多线程处理系统上的并行编程方案的图形表示。图1示出操作系统140可见的进程100、120。这些进程100、120可以是不同的软件应用程序,如字处理程序和电子邮件管理程序。通常,每个进程在不同的地址空间中操作。
操作系统(“OS”)140一般负责为诸如图1所示进程120等进程管理用户创建的任务。相应地,操作系统140可为与进程120相关联的每个用户定义的任务创建独特的线程125、126,并可将线程125、126映射到线程执行资源。(在图1中未示出线程执行资源,但下面有详细论述。)OS 140一般负责调度这些线程125、126以在执行资源上执行。与单个进程相关联的线程一般具有相同的存储器视图,并可看到彼此的虚拟地址空间。
由于OS 140负责创建、映射和调度线程,因此,线程125、126是OS 140可见的。另外,本发明的实施例包含OS 140不可见的另外的线程130-136。也就是说,OS 140并不创建、管理或以其他方式确认或控制这些另外的线程130-136。这些非OS 140创建或控制的另外的线程在本文有时称为“纤程”130-136,以便区分它们与OS可见的线程。由用户级程序创建和管理这些纤程,并调度这些纤程以在与操作系统隔离的定序器上运行。OS隔离定序器共享与OS可见定序器相同的环0状态。纤程因而共享为与同一进程相关联的线程创建的同一执行环境(地址映射)。
术语“线程”和“纤程”在本文中使用时至少包括要与进程的其他线程和/或纤程并发执行的指令集的概念。线程和“纤程”术语因此均包含软件指令集的想法。均为指令流的线程(由OS控制)与纤程(操作系统不可见并由用户控制)之间的区分因素在本文中使用时指如何管理线程和纤程指令流的执行的差异。响应对OS的系统调用而生成线程。OS生成该线程并分配资源以运行该线程。为线程分配的此类资源可包括操作系统用于控制和调度线程的数据结构。
与此相反,经用户指令或“原语”生成纤程的至少一个实施例,该指令或“原语”调用软件库或其他与OS无关的机制以生成OS不知道的纤程。因此可响应用户级软件库调用而生成纤程。
图2是方框图,以图形形式示出有关上述的声明即同一软件程序或进程的所有线程共享共同的存储器逻辑视图的其他细节。对于本发明的实施例,此声明在与进程100、120相关联的纤程方面同样适用。在本文中参照图1论述图2。
图2采用图1所示进程120、线程125、126及纤程130-136的图形表示。然而,此类表示不应视为限制。本发明的实施例无需对与进程相关联的线程或纤程的数量强加上限或下限。在下限方面,图1示出,在给定时间运行的每个进程根本无需一定与一些线程或纤程相关联。例如,图1所示的进程0 100示为在图1所示的特殊时间运行,既无线程,也无纤程。
然而,如图1所示,另一进程120可与一个或多个线程125、126相关联。另外,进程120还可另外与一个或多个纤程130-136相关联。进程120的两个线程125、126和四个纤程130-136的表示只是为了说明,不应视为限制。与进程相关联的OS可见线程的数量可受OS程序的限制。然而,对于至少一个实施例,与进程相关联的纤程的累计数量的上限只受在执行期间的特殊时间可用的线程执行资源的数量的限制。图2示出,与进程120相关联的第二线程126可具有和第一线程125不同数量(n)的线程与其相关联。(N对于线程125、126任意之一或两者均可为0。)
图2示出,特殊的存储器逻辑视图200由与特殊进程120相关联的所有线程125、126共享。图2示出,每个线程125、126分别具有其自己的应用和系统状态202a、202b。图2示出,线程125、126的应用和系统状态202由与特殊线程相关联的所有纤程(例如,纤程130-136)共享。
相应地,图2示出,本发明至少一个实施例的系统可支持在诸如线程125的OS可见线程和与该线程相关联的(OS不可见)纤程130-136之间的1对多关系。纤程是OS(参见图1中的140)不“可见的”指是程序员而不是OS可采用用户级技术创建、同步和以其他方式管理和控制纤程的操作。虽然OS 140知道并管理线程,但OS 140不知道也不管理或控制纤程。
因此,对于至少一个实施例,用户不依赖操作系统管理线程单元硬件与纤程之间的映射,而是可直接控制此类映射,并可直接操纵与纤程执行相关联的控制和状态转移。相应地,对于本文中所述的方法、机制和系统的实施例,线程单元架构的用户可见的特性至少是一套规范的指令,这些指令允许用户指引线程单元硬件的操纵和控制。
线程单元在本文也可互换地称为“定序器”,在本文中使用时可以是能够执行线程或纤程的任一物理或逻辑单元。它可包括为给定线程或纤程确定要执行的下一指令的下一指令指针逻辑。例如,图2所示的OS线程125可在未示出的定序器上执行,而每个活动纤程130-136可分别在其他定序器即“SEQ 1”-“SEQ 4”上执行。定序器可以是逻辑线程单元或物理线程单元。图3中示出了逻辑线程单元与物理线程单元之间的此类不同。
图3是方框图,示出能够执行公开技术的多定序器系统的实施例310、350的选定硬件特性。图3示出SMT多定序器多线程处理环境310的选定硬件特性。图3还示出其中每个定序器是单独的物理处理器核的多核多线程处理环境350的选定硬件特性。
在SMT环境310中,单个物理处理器304变得对操作系统和用户程序好像是多个逻辑处理器(未示出),这些逻辑处理器在本文中称为LP1到LPn。每个逻辑处理器LP1到LPn分别维护一套完整的架构状态AS1-ASn。对于至少一个实施例,架构状态包括数据寄存器、段寄存器、控制寄存器、调试寄存器和大多数模型特定的寄存器。逻辑处理器LP1-LPn共享物理处理器304的大部分其他资源,如高速缓存、执行单元、分支预测器、控制逻辑和总线。虽然此类特性可共享,但多线程处理环境310中的每个线程上下文可独立生成下一指令地址(并执行例如从指令高速缓存、执行指令高速缓存或跟踪高速缓存的取出(fetch))。因此,处理器304包括逻辑上独立的下一指令指针和取出逻辑320,以便即使可在单个物理取出/解码单元322中实施多个逻辑定序器,也可为每个线程上下文取出指令。对于SMT或实施例,术语“定序器”至少包含线程上下文的下一指令指针和取出逻辑320以及该线程上下文的相关联的架构状态AS中的至少一些。应注意的是,SMT系统310的定序器无需对称。例如,同一物理核的两个SMT定序器可在它们各自维护的架构状态信息量方面不同。
因此,对于至少一个实施例,多定序器系统310是支持并发多线程处理的单核处理器304。对于此类实施例,每个定序器是具有其自己的指令下一指令指针和取出逻辑及其自己的架构状态信息的逻辑处理器,但同一物理处理器核304执行所有线程指令。对于此类实施例,逻辑处理器维护其自己版本的架构状态,但可在并发执行的线程之间共享单个处理器核的执行资源。
图3还示出多核多线程处理环境350的至少一个实施例。此类环境350包括两个或更多个单独的物理处理器304a-304n,每个处理器能够执行不同的线程/纤程,使得至少部分不同线程/纤程的执行可同时进行。每个处理器304a到304n包括物理上独立的取出单元322,以取出其相应线程或纤程的指令信息。在其中每个处理器304a-304n执行单个线程/纤程的实施例中,取出/解码单元322实施单个下一指令指针和取出逻辑320。然而,在其中每个处理器304a-304n支持多个线程上下文的实施例中,取出/解码单元322为每个支持的线程上下文实施独特的下一指令指针和取出逻辑320。在图3中由虚线表示多处理器环境350中另外的下一指令指针和取出逻辑320的可选本质。
因此,对于图3所示的多核系统350的至少一个实施例,每个定序器可以是处理器核304,多个核304a-304n位于单个芯片封装360中。每个核304a-304n可以是单线程或多线程的处理器核。在图3中用虚线表示芯片封装360,以指示多核系统350的所示单芯片实施例只用于说明。对于其他实施例,多核系统的处理器核可位于不同芯片上。
为便于论述,下面的论述集中在多核系统350的实施例上。然而,这种集中不应视为限制,表现在下述机制可在多核或单核多定序器环境中执行。
图4是数据流程图,示出支持用户级线程控制的多定序器多线程处理系统的调度机制400的至少一个实施例。图4示出,机制400包括工作队列系统402。该机制还包括调度程序例程450,该例程可在多个定序器403、404中的每个定序器上执行。
对于至少一个实施例,工作队列系统402可维护等待执行并因此是“未决”的用户定义的纤程的描述符。如上所述,可采用调度机制400而不是OS提供的调度机制;每个工作描述符描述不受OS干预要在OS隔离或OS可见定序器上执行的纤程。
纤程描述符可由用户级纤程创建指令或原语创建。本领域的技术人员将认识到,在程序员的代码与实际的架构指令之间可能存在若干个级别的抽象,这些指令促使定序器执行动作,从而生成纤程描述符并将这些描述符置入工作队列402中。描述为由程序员或用户生成的指令在本文中使用时,旨在不但包含可由汇编程序或编译程序基于用户生成的代码或由用汇编语言工作的程序员生成的架构指令,而且包含最终可汇编或编译成架构纤程控制指令的任何高级原语或指令。还应理解,架构纤程控制指令还可由线程执行单元解码成一个或微操作。
图4还示出,用于每个定序器的调度程序例程450a、450b可访问工作队列系统402,以便获得在相关联的定序器403、404上执行的纤程。因此,图4示出允许纤程的用户级映射和控制的调度机制的至少一个实施例,而纤程可在无需OS干预纤程调度的情况下彼此和/或与OS控制的线程并发执行。
应注意的是,图4所示的定序器403、404无需对称,并且其数量不应视为限制。有关定序器的数量,调度机制400可用于任何数量的定序器。例如,可为包括4个、8个、16个、32个或更多个定序器的多定序器系统实施调度机制。
有关对称性,定序器403、404可以在任一方面不同,包括影响计算质量的那些方面。例如,定序器可在功耗、计算性能速度、功能特性或诸如此类方面不同。例如,对于一个实施例,定序器403、404可在功能方面不同。例如,一个定序器可能能够执行整数和浮点指令,但无法执行指令扩展的单指令多数据(“SIMD”)集,如流式SIMD扩展3(“SSE3”)。另一方面,另一定序器可能能够执行第一定序器可以执行的所有指令,并且也可以执行SSE3指令。
作为功能非对称性的另一示例,对于本发明的一个实施例,一个定序器可以是OS可见的(例如,参见图1的140),并可以因此能够执行“环0”操作,如执行系统调用、维修缺页故障及诸如此类。另一方面,另一定序器可与OS隔离,并因此无法执行环0操作。
利用调度机制400的系统的定序器还可在任一其他方面不同,如尺寸、字和/或数据路径大小、拓扑、存储器、功耗、功能单元数量、通信架构(多点与点对点互连)或与功能、性能、占地面积及诸如此类相关的任何其他度量。
图5是数据流程图,示出非对称多定序器多线程处理系统的调度机制500的至少一个实施例。图5只是示出一个非对称性实施例,表现在第一定序器503是操作系统540可见的,而第二定序器504与操作系统540隔离。同样地,本领域的技术人员将认识到在系统中可存在其他类型的非对称性,并且系统中可存在不止两个定序器。
图5示出,用于OS可见定序器503和隔离定序器504中的每个定序器的调度程序例程450a、450b探测工作队列系统502,以了解是否有要在分别与调度程序实例450a、450b相关联的定序器503、504上执行的纤程。同样地,此类机制500提供在无操作系统540干预的情况下在非对称定序器上的纤程调度。
图6是数据流程图,示出非对称多定序器多线程处理系统的调度机制600的至少一个实施例的其他细节。图6示出,工作队列系统602可包括多个工作队列604、606。对于至少一个实施例,多个工作队列604、606各自与一种定序器类型相关联。对于图6所示的示范实施例,第一队列604与一组一个或多个本文中称为“类型A”的第一类型的定序器640相关联。第二队列606与一组一个或多个本文中称为“类型B”的第二类型的定序器642相关联。对于前面图中所示的其他实施例,如图6中所示的队列和定序器类型的数量及每种类型的定序器的数量不应视为限制。
图6因此示出包括至少两种类型的非对称定序器-类型A定序器640和类型B定序器642的系统的调度机制600。队列系统602包括与每种类型的定序器相关联的工作队列604、606。每个定序器640、642包括分布式调度程序例程450的一部分。部分450a、450b可以是彼此的相同副本,但无需一定如此。
图6示出,第一队列604可包括要在类型A定序器640上运行的纤程623的纤程描述符。第二队列606可包括要在类型B定序器642上运行的纤程624的纤程描述符。类型A纤程623可以是用户编写以利用类型A定序器640提供的特殊功能的软件序列。类似地,类型B纤程624可以是用户编写以利用类型B定序器642提供的特殊功能的软件序列。
对于至少一个实施例,类型A定序器和类型B定序器的功能可以是互斥的。也就是说,例如,一组定序器640可支持另一组定序器642不支持的特殊功能,如SSE3指令的执行;而另一组定序器642可支持另一组定序器640不支持的特殊功能,如环0操作。
对于此类实施例,调度机制600可操作使得第一类型的线程623的描述符可由类型A定序器640上的调度程序例程450从第一队列604拉出;而第二类型的纤程624的描述符可由类型A定序器640上的调度程序例程450从第一队列604拉出。纤程到适当的定序器的映射可由用户级指令指引。
然而,对于至少一个其他实施例,如图6所示的实施例,定序器类型A 640和B 642的功能表示超集-子集功能关系,而不是互斥功能关系。也就是说,第一组定序器(如类型A定序器640)提供包括第二组定序器(如类型B定序器642)的所有功能加上第二组定序器642不提供的另外的功能的功能超集。对于此类实施例,可选地,可由类型A定序器640的调度程序例程450从第二队列606检索纤程描述符。例如,在类型A定序器的所有描述符不可用(如,第一队列604为空)时,可执行此可选处理。换而言之,具有超集功能的定序器可执行专门指定用于此类定序器的纤程,但也可执行指定用于具有子集功能的定序器的纤程。
最后,图6示出,可响应于由另一纤程或纤程感知的线程执行的纤程创建指令而将纤程描述符置于660工作队列系统602中。对于至少一个实施例,触发创建纤程描述符的指令是API类似(“应用程序员接口”)线程控制原语,如shred_create。诸如由软件库提供的软件可响应于snred_create原语而创建新纤程的纤程描述符,并可将它置于工作队列系统602中。
因此,对于至少一个实施例,响应于shred_create原语由软件创建纤程描述符,并将它置于队列系统702中。对于至少一个实施例,纤程描述符可以是至少标识纤程的以下属性的记录:a)纤程应开始执行的地址和b)栈描述符。栈描述符标识由新纤程用于存储诸如局部变量和返回地址等临时变量的存储器存储区域(栈)。
图7是数据流程图,示出利用如图4-6中所示任一调度机制等调度机制的实施例执行要在多定序器系统上执行的纤程的用户级调度的示范序列。对于至少一个实施例,由在定序器770上运行的线程T执行方法700。对于至少一个实施例,响应于由诸如程序员等用户生成的指令,执行方法700。对于图7,此类指令称为线程T的指令。当然,将可理解,用户可以用不同于图7所示的顺序来编程方法700的各个块。
图7示出多定序器系统的示范实施例,其中,定序器相对于功能度量是不对称的。也就是说,其上执行线程T的定序器770是OS可见定序器。这样,定序器770可经与操作系统的交互来执行特权操作,如环0操作(即,维修缺页故障,执行系统调用等)。与此相反,图7所示的示范实施例还包括OS不可见的隔离定序器760。这样,隔离定序器760无法执行特权操作。它们例如可被限于执行环3操作,但无法执行环0操作。图7因此示出包括非对称定序器的多定序器系统的示范实施例。
对于图7所示的实施例,方法700从块701开始,并继续到块704。在块704,线程T执行一个或多个指令来执行与线程T相关联的一个或多个并发纤程的用户级控制的初始化。对于至少一个实施例,此类初始化704可包括创建和/或初始化工作队列系统702的一个或多个队列(例如,参见图6的604和606)。
另外,图7示出,此类初始化704可包括一个或多个隔离定序器760的初始化。当然,本领域的技术人员将认识到,无需一定由单个例程、方法或函数执行在块704所示的队列创建和定序器初始化,也无需一定按本文中所述的顺序执行它们。例如,对于一个替代实施例,可以用相反的顺序执行在块704采取的初始化动作,或可以并发执行它们。
可执行块704的定序器初始化,以便使隔离定序器760准备运行由如计算机程序员等用户置于线程T的指令流中的用户生成的纤程创建指令所示的纤程。对于至少一个实施例,此类定序器初始化可包括在每个隔离定序器760上的分布式调度程序例程450的调用。正如下面更详细论述的一样,调度程序例程450的调用可引起调度环的执行,其中,分布式调度程序的每部分开始定期检查工作队列系统702,以了解是否有可由相关联的隔离定序器760执行的工作。
在无此类初始化704的情况下,对于至少一个实施例,预期隔离定序器760不可用于执行纤程。对于至少一个实施例,使定序器760准备执行纤程的初始化704至少包括调度程序例程450的调用。可在线程T的指令流中为用户所示的每个定序器执行初始化704。对于至少一个实施例,为执行而由线程T初始化的所有定序器共享由操作系统为与线程T相关联的进程构建的相同虚拟存储器视图。
处理从块704继续到块706。在块706,线程T为在用户定义的主纤程函数开始的执行生成纤程描述符。对于至少一个实施例,用户定义的主纤程函数替代传统的OS可见main()函数。图7示出,可将主纤程的纤程描述符置于工作队列系统702中。相应地,主纤程等待在下次机会由分布式纤程调度程序例程450之一调度以供执行。
从块706,处理继续到块708。在块708,OS可见线程T开始其自己的调度环。相应地,线程T执行一个或多个指令以初始化定序器770上的调度程序例程750。图7示出,调度程序750可咨询工作队列系统702以调度第一定序器770上的工作。图7因此示出一个实施例,其中,将所有纤程描述符发送到共用队列系统702,而所有调度程序例程450a-450n、550可从该系统请求和调度工作。由于调度例程450a-450n的实例分布在多个隔离定序器中,因此,调度例程450在本文中可称为“分布式”调度程序。
对于至少一个实施例,OS可见定序器770(第一类型)与队列系统702的第一工作队列相关联(例如,参见图6的604),而隔离定序器(第二类型)与队列系统702的第二工作队列相关联(例如,参见图6的606)。如上结合图6所述的,对于至少一个实施例,第一定序器770可从工作队列系统702的任一队列中拉出工作。
这样,OS可见定序器770和一个或多个隔离定序器760均已初始化704、706,能够基于用户生成的指令执行纤程而不是依赖OS管理此类调度。如上所述,用于执行此操作的至少一种机制是在初始化的(参见块704)隔离定序器760上调用调度程序例程450及在生成主纤程例程的纤程描述符的定序器770上调用更加共用的OS可见调度程序例程750(参见块708)。从块708,处理继续到块710。
在块710,定序器770根据其调度程序750在定序器770上的调度执行指令。块710的本质可以是迭代式,表现在多个纤程或线程部分可连续在定序器770上执行。在图7中以虚线表示块710处理的可能迭代本质。
定序器770可执行如工作队列系统702的与其定序器类型相关联的队列中的纤程描述符所示的纤程指令。此类指令可包括促使另外的纤程描述符生成并置于工作队列系统702中的那些指令。
对于至少一个实施例,由定序器770执行的纤程可包括需要定序器类型770提供的功能的那些纤程,而隔离定序器760无法执行那些纤程。例如,对于图7所示的示例,与定序器770相关联的队列可包括需要环0操作的纤程指令。也就是说,纤程执行的操作系统调用可能需要特殊的处理,这是因为OS只可为从OS可见定序器发出的系统调用服务。可由OS可见定序器770经代理机制执行在OS隔离定序器760上运行的纤程的系统调用。
代理机制允许OS可见定序器模仿纤程以便得到操作系统的注意,进而执行特权指令。可以用任何数量的方式实施代理机制。例如,在隔离定序器760尝试在OS隔离定序器上执行特权指令、如系统调用时,可隐含调用此类机制。尝试的系统调用会促使异常生成。异常的处理程序可保存纤程状态,生成系统调用的纤程描述符,并将纤程描述符置于与OS可见定序器702相关联的队列中。在调度此类描述符用于在OS可见定序器770上执行710时,定序器770可在获得纤程的状态并执行系统调用前保存其自己的状态。对于此类代理执行,在OS可见定序器770上的执行在促使OS隔离定序器760上出现故障的指令恢复。纤程的状态随后被保存,并且控制返回给故障OS隔离定序器760,以便它可继续其纤程的执行。
对于至少一个其他实施例,特权指令的代理执行可明确由用户控制。对于此类实施例,用户可明确指示包括特权指令的纤程应在OS可见定序器770上执行。此类指示可表示为纤程创建原语的参数或变体。包括队列首选参数或者使用专用纤程创建原语在本文中均统称为调度提示。
纤程创建原语(如“shred_create()”)原语可调用库函数。该函数会促使创建新纤程描述符,并还会促使描述符置于工作队列系统702的队列中。标准shred_create()原语的可选参数可允许用户指定描述符的队列类型。或者,在本文中称为shred_create_affinity()的可选函数调用可由用户用于表示特殊纤程的队列首选项。例如,如果纤程由大量系统调用组成,则用户可指定与能够执行环0操作的定序器类型相关联的工作队列。本领域的技术人员将认识到,类似的参数和/或替代参数方案也可与Yield原语一起使用。
图7所示的系统可包括与系统调用的处理有关的另外的防护措施。例如,互斥可用于提供围绕OS调用的串行化。互斥可用于将死锁降到最低,否则,在线程和一个或多个其相关联的纤程尝试得到操作系统为线程同步而提供的相同锁定时会发生死锁。
对于在块710执行的任一纤程或纤程部分,定序器770可继续纤程的执行,直至执行Exit或Yield原语。如果在当前纤程中遇到“Exit”原语,则当前纤程的执行完成,并且调度程序750会刺激队列系统702的适当队列以调度另一指令序列在定序器770上执行。对于至少一个实施例,Exit指令因此将纤程标记为完成,并且控制返回给调度程序750。
如果在当前纤程中遇到“Yield”原语,则调用进程的纤程描述符会被放回队列系统中,并且控制返回给调度程序750。相应地,在执行“Yield”原语时,当前纤程的剩余纤程指令的纤程描述符可置于工作队列系统702中。
对于Exit或Yield情况,在当前纤程的执行在块710已完成后,处理可在块712结束。或者,可调度新线程或纤程以供执行。相应地,从块710环回到块710的虚线指示可由定序器770执行另外的线程或纤程。在如分布式调度程序750调度的所有线程和/或纤程(或纤程部分)的执行完成后,处理可在块712结束。
有关在块710的执行后另外的纤程的调度,可在Yield或End指令已执行后由分布式调度程序750调度新纤程以在当前定序器770上执行。对于至少一个实施例,此类动作可由于调度程序750从与不同于其自己类型的定序器类型相关联的工作队列获得工作而发生。
或者,另外的OS可见指令可在块710后执行。此类工作可从与定序器770自己的定序器类型相关联的工作队列调度。如上所述,对于至少一个实施例,定序器770的调度程序750只在其自己的队列为空时调度最初指定在OS隔离定序器上执行的纤程。
图8是时序图,示出与OS无关的纤程调度的控制流的至少一个实施例。为便于说明,图8的时序图示出图7所示的方法实施例700的特定示例的控制流。相应地,在下面参照图7论述图8。如图7所示,图8所示的方法800可由第一OS可见定序器(870)和第二隔离定序器(860)执行。
图8示出在第一类型的第一定序器870上的初始化704(参见图7)的至少一个实施例的其他细节。对于至少一个实施例,定序器870在功能度量方面与第二定序器860不同。也就是说,第一定序器870是OS可见的,而第二定序器860被隔离。
图8示出,初始化704可包括至少两个用户生成的指令的执行。在本文中称为纤程监视器(“SEMONITOR”)指令的第一指令用于设置OS可见定序器与OS隔离定序器之间通信的信道。第二初始化指令是控制转移指令,在本文中称为纤程转移(“SXFR”)指令。
本领域的技术人员将认识到,在本文中所述的方法700、800和系统无需限于纤程控制指令的任一特殊名称或指令集结构。本领域的技术人员还将认识到,SEMONITOR和SXFR类型的指令可由于编译程序、汇编程序或库函数而为原语生成,如上述的shred_create()、shred_create_affinity()、shred_yield()和shred_exit()。在此方面,最终的指令在本文中仍然称为“用户生成的”,但它们可能是响应于更高级的用户结构而生成。纤程原语的上述部分名单不应视为限制。
本领域的技术人员还应认识到,随附权利要求书包含实施例,其中,最终纤程控制指令不一定是硬件支持的指令。相反,对于至少一个实施例,响应于原语生成的“指令”可以是硬件信号,而不是架构指令。可响应于用户生成的原语由软件或固件层生成诸如中断或其他定序器控制信号等信号,以便实施SEMONITOR和SXFR类型的功能。
相反,方法700、800一般假设,定序器870、860支持用于生成和控制纤程的架构、用户级指令,并且传统的多线程处理API可通过使用规范纤程指令集而得到全面实施。有关一个示范的规范纤程指令集的进一步论述,可参阅代理人案号为42390.P19770、题为“在多个指令定序器上的基于指令集的线程执行的机制”(A Mechanism ForInstructions Set-Based Thread Execution on a Plurality of InstructionSequencers)的同时待审的美国专利申请。
对于至少一个实施例,假设定序器870、860至少支持规范纤程指令集,该指令集包括根据SEMONITOR和SXFR的指令。用户利用此类型的指令来控制多个定序器的操作且尤其是实现定序器间控制转移的能力在本文中称为“定序器算术”。提供定序器算术的纤程指令可用作构建更高级的纤程处理原语的组成部分,举例子如Fork、Join、Yield、Exit、Lock、Wait和Unlock。这些原语可用于实现在无需OS级调度情况下执行的并发共享存储器纤程的用户级管理。这样,规范纤程指令可用于在架构纤程指令与应用软件之间构建抽象层。规范纤程指令因此可用于构建支持遗留应用程序接口的抽象层。
一般,SXFR类型的指令在由第一定序器执行时,可将信号从第一定序器发送到第二定序器。SXFR类型的指令因此提供了一种执行纤程间服务信令的机制。SXFR类型的指令的动作是同步的,表现在用户可通过明智地将SXFR类型的指令置于代码中而相对于纤程指令流中其他指令的执行来控制SXFR指令的执行的定时。
与此相反,SEMONITOR类型的指令提供异步定序器算术。SEMONITOR类型的指令可由程序员用于配置第二定序器监视来自第一定序器的信号。
图8示出,第一初始化指令SEMONITOR指令在指定目标定序器上将处理程序例程映射到特定的事件类型。也就是说,图8所示的SEMONITOR指令的实施例将特殊例程的开始指令指针地址(此处,分布式调度程序例程“调度程序”的开始)映射到指定定序器id 1的事件类型“init”。在目标定序器上,第一定序器上的SEMONITOR指令执行的结果是目标定序器监视所示事件指示符,并在指定地址开始在目标定序器上的控制流。
对于至少一个实施例,事件类型可实施为指示符,如在由第一定序器指示指定事件时变为激活的信号线。由于在第一定序器SID0870上SEMONITOR指令的执行,如由作为SEMONITOR指令的定序器标识符参数的“1”标识的目标定序器SID1 860轮询或以其他方式监视“init”事件指示符。在init指示符被激活时,SID1 860跳到指定地址(即,调度程序例程的开始处)并开始调度程序代码的执行。调度程序例程只用作图8的示例,本领域的技术人员将认识到,任何适当的事件处理程序代码均可使用。SEMONITOR指令的执行因此可设置在指定定序器上进行的异步控制转移。
图8所示的SEMONITOR初始化专用于图8所示的示例,但不应视为限制。可执行类似于图8所示的SEMONITOR指令的一组若干个初始化指令用于替代实施例,以便将一系列事件类型映射到特定的处理程序例程。在图8所示的SEMONITOR指令执行后,事件类型“init”与分布式调度程序相关联。
第二初始化指令SXFR指令随后由第一定序器870执行。SXFR指令的执行发送事件以初始化OS隔离定序器SID1上单独的执行线程。在802,在OS隔离定序器SID1检测到包含“Init”方案的信号时,OS隔离定序器SID1启动线程S,并开始对应于分布式调度程序(例如,参见图7的450)的指令流的执行。
图8示出包括以下参数的SXFR指令的实施例:定序器标识符、事件类型和可选的同步标记。定序器标识符(“SID”)指定这样的定序器,由于SXFR指令的执行而要将控制转移给它。对于图8所示的示例,定序器870的定序器标识符为“SID0”,而定序器860的定序器标识符为“SID1”。
图8所示的SXFR指令的事件类型参数指示“init”事件类型。由于图中所示的前面的SEMONITOR指令的执行,“init”事件类型在SXFR指令执行时已与分布式调度程序(图7的450)相关联。相应地,事件类型参数有效地向受让定序器(也就是说,SID1 860)指示,在定序器860开始执行时它应在分布式调度程序的IP地址开始执行。
图8所示的示范SXFR指令的最后参数是可选的等待/不等待标记。通过指定“不等待”,指令实际上开始并发多线程处理情况-第一定序器870无需等待来自受让定序器860的同步指示符,而是在它一完成了SXFR指令的执行后就可继续其自己指令流的执行。
SXFR指令因此是纤程创建和控制转移指令。图8示出,由于第一定序器的SXFR指令的执行,纤程S开始执行在第二定序器860上的分布式处理程序例程。因此,在执行SXFR指令后,线程T和纤程S可并发执行。
由于“不等待”标记的原因,在SID0 870上的线程T的执行可在该定序器在704执行了SXFR指令后继续执行。相应地,线程T继续创建706“主纤程”程序的纤程描述符,并将此类描述符置于工作队列系统702中。如上结合图7所述,主纤程描述符可被置于工作队列系统702(图2)中,在该系统中,队列与隔离定序器SID1 860相关联。
线程T随后调用708其OS可见定序器750,并继续根据其调度程序750的指引执行指令710。如上结合图7所述,可选地,线程T可查找纤程描述符709,并因此可在710至少为满足以下条件的那些实施例执行纤程指令:a)允许OS可见调度程序从OS隔离定序器队列中拉出工作和/或b)支持在OS可见定序器870上的纤程指令的代理执行。在执行一次或多次迭代的指令执行710后,线程T的处理可在712结束。
有关隔离定序器860,图8示出为纤程S执行的操作顺序的至少一个实施例。如上所述,由于由OS可见定序器SID 870上执行的OS可见线程T执行的初始化处理704的原因,调度环(即,分布式调度程序450的执行)可在定序器860上启动。
在804,在SID1 860上执行的调度程序例程450查询工作队列系统702以确定是否有纤程描述符可用于由定序器860执行。对于图8所示的示范序列,如果块706(上面已论述)已经由SID0 870执行,则定序器SID1 860可能在块806遇到主纤程描述符。
如果找到描述符,则定序器860执行806描述符所示的纤程。一直执行纤程,直至a)完成或者b)遇到Yield指令。
应注意的是,纤程的指令可包括另外的纤程创建指令。也就是说,对于至少一个实施例,纤程本身可执行至少两种类型的纤程操作:纤程控制操作(与创建和终止纤程有关)和同步操作(如Yield操作)。(对于至少一个实施例,可通过用户在纤程指令流中使用符合工业标准的原语而调用此类操作。例如,一个此类工作标准是POSIX(可移植操作系统接口)。)图8中从806到工作队列系统702的虚线示出,在纤程执行806期间,可创建另外的纤程描述符,并且可将另外的描述符置于工作队列系统702中。
例如,用户可将Yield原语置于纤程指令流中。此类Yield原语可促使定序器放弃纤程控制。为此,定序器860可在终止纤程执行前将剩余纤程指令的描述符放回工作队列系统702中。Yield原语可调用在执行控制转移前交换栈的函数,从而在将控制返回给定序器的调度程序前保存当前线程上下文。
图8示出,在执行终止指令(Exit、Yield等)时,终止或暂停在SID1 860上纤程S的执行。这种情况下,可选地,分布式调度程序450可探测工作队列系统702,以了解是否有另一纤程描述符,以便识别可由定序器SID1 860执行的工作。在图8中通过从806到804的虚线箭头指示工作队列系统702的此类可选的迭代探测。
对于图8所示的示例,应注意的是,可能的是,在SID0 870上运行的调度程序例程450探测工作队列系统702前,在SID1 860上运行的调度程序例程450可能发现“主纤程”例程的纤程描述符。此类情况下,假设定序器860或870能够执行“主纤程”例程,“主纤程”例程即使其描述符由SID0 870创建,也可由SID1 860执行。
从以上关于图8的论述将明白,对于至少一个实施例,两个所示定序器860、870均能够执行“主纤程”例程。相应地,对于至少一个实施例,可假设定序器860、870对称。然而,对于至少一个其他实施例,定序器860、870不完全对称,但每个定序器860、870仍具有充足的执行主纤程例程的功能能力。例如,在主纤程例程只需要环3能力、定序器SID1 860具有环3能力并且SID0 870具有环3和环0能力的情况下,此类实施例可存在。对于此类实施例,如图6所示,工作队列系统702可包括第一队列(例如,用于只可由SID0 870执行的描述符)和用于可由SID0 870或SID1 860执行的描述符的第二队列。
有关分布式调度程序450和工作队列系统702,对于至少一个实施例,工作队列系统702可受到临界段的保护。如上所述,每个隔离定序器860可有效地运行其自己的分布式调度程序例程450的一部分的副本,并尝试争用对任务队列系统702的队列的顶端的访问权,以处理下一就绪指令来运行其相关联的定序器。如果定序器上的一个任务在等待诸如互斥等同步变量、条件变量或信号量,则在进入对应的临界段后,可取消调度该任务,并将其放置在任务队列的尾端。
考虑到图8所示的示例,可看到本发明的实施例能够在不使用OS的情况下在与OS隔离的定序器上调度线程的执行。因此,借助于本文中公开的技术,可能的是,构建具有比OS能够支持的更多的定序器的多定序器系统,并允许在OS不支持的多定序器系统的定序器上的用户级线程调度。
对于上述机制、系统和方法的至少一些实施例,分布式调度程序450作为事件驱动自行调度程序操作,其中,响应于由于API类似的线程控制(shred_create、shred_create affinity及诸如此类)或线程同步(shred_yield及诸如此类)原语创建的排队调度事件而创建纤程。调度程序和原语可实施为运行期程序库的一部分,该库在诸如符合POSIX的API等传统工业标准API与多定序器系统硬件之间创建中间抽象层,其中,定序器至少支持一套规范纤程指令,这些纤程指令实施用户级定序器算术。该库可包括诸如上述分布式调度程序450的实施例的调度程序。运行期程序库可充当中间抽象层,以便程序员可通过支持纤程处理的硬件利用传统线程API(如Pthreads API或Win32线程API)。该库可提供基于用户编程的原语、透明调用规范纤程指令的函数。
可在包括单核SMT系统(例如参见图3的310)和多核系统(例如参见图3的350)的任一多定序器系统上实施本文中论述的调度机制和技术。下面结合图9进行此类系统的进一步论述。
图9示出能够执行公开技术的计算系统900的至少一个示范实施例。计算系统900包括至少一个处理器核904和存储器系统940。存储器系统940可包括更大、相对较慢的存储器存储部件902及一个或多个更小、相对较快的高速缓存,如指令高速缓存944和/或数据高速缓存942。存储器存储部件902可存储用于控制处理器904的操作的指令910和数据912。指令910可包括分布式调度程序例程450的一个或多个副本。
旨在将存储器系统940作为存储器的广义表示,并且存储器系统940可包括多种形式的存储器,如硬盘驱动器、CD-ROM、随机存取存储器(RAM)、动态随机存取存储器(DRAM)、静态随机存取存储器(SRAM)、闪存及相关的电路。存储器系统940可存储由处理器904可执行的数据信号表示的指令910和/或数据912。指令910和/或数据912可包括用于执行本文中所述的任一或所有技术的代码和/或数据。例如,数据912可包括一个或多个队列以形成能够存储如上所述的纤程描述符的队列系统702。或者,指令910可包括生成用于存储纤程描述符的队列系统702的指令。
处理器904可包括向执行核930提供指令信息的前端920。取出的指令信息可在高速缓存225中缓冲以等待由执行核930来执行。前端920可按程序顺序向执行核930提供指令信息。对于至少一个实施例,前端920包括确定要执行的下一指令的取出/解码单元322。对于系统900的至少一个实施例,取出/解码单元322可包括单个下一指令指针和取出逻辑320。然而,在其中每个处理器904支持多个线程上下文的一个实施例中,取出/解码单元322为每个支持的线程上下文实施独特的下一指令指针和取出逻辑320。在图9中由虚线表示多处理器环境中另外的下一指令指针和取出逻辑320的可选本质。
可以用硬件、硬件仿真软件或其他软件、固件或此类实施方案的组合来实施本文中所述的方法实施例。可为包括至少一个处理器、数据存储系统(包括易失性和非易失性存储器和/或存储元件)、至少一个输入装置和至少一个输出装置的可编程系统来实施本发明的实施例。对本申请来说,处理系统包括具有处理器的任一系统,如数字信号处理器(DSP)、微控制器、专用集成电路(ASIC)或微处理器。
程序可存储在通用或专用可编程处理系统可读取的存储介质或装置(例如,硬盘驱动器、软盘驱动器、只读存储器(ROM)、CD-ROM装置、闪存装置、数字多功能盘(DVD)或其他存储装置)上。处理系统中的处理器可访问的指令提供在处理系统读取存储介质或装置以执行本文中所述的过程时配置和操作处理系统。本发明的实施例还可视为实施为配置用于处理系统的机器可读存储介质,其中,如此配置的存储介质使处理系统以特定和预定方式操作来执行本文中所述的功能。
示范系统900代表基于Intel公司提供的 及和微处理器的处理系统,但还可使用其他系统(包括具有其他微处理器的个人计算机(PC)、工程工作站、个人数字助理和其他手持式装置、机顶盒及诸如此类)。对于一个实施例,示范系统可执行Microsoft公司提供的WindowsTM操作系统版本,但还可使用例如其他操作系统和图形用户界面。
虽然已示出和描述了本发明的特殊实施例,但本领域的技术人员将明白,在不脱离随附权利要求书范围的情况下,可进行更改和修改。例如,工作队列系统702可包括由多个定序器类型争用的单个队列。对于此类实施例,资源要求明确包括在每个纤程描述符中。分布式调度程序的每个定序器的部分在从工作队列去除纤程的描述符以供定序器执行前执行检查以确保定序器能够执行纤程。
对于另一替代实施例,可在工作队列系统702中实施混合方案。对于此类混合方案,工作队列系统702包括多个队列。不过,一个或多个队列对应于多个定序器类型。对于此类混合实施例,在与不止一个定序器类型相关联的任一队列的每个纤程描述符中包括了明确的资源指示。
上述分布式调度程序例程可使用循环调度方案来调度纤程描述符的执行。然而,对于至少一个替代实施例,上述分布式调度程序和工作队列系统可支持基于优先级的高度方案。此外,对于至少一个替代实施例,多队列队列系统实施例的队列首选项可由用户或运行期程序库设置,以指示任务由优选定序器执行。例如,可在执行纤程的剩余指令时将在Yield操作前在特殊定序器上执行的纤程发送回该相同的特殊定序器。
有关将纤程描述符分派到工作队列系统中,上面已结合图7描述了可通过用户使用特殊参数或特殊的“Affinity”原语以便在纤程创建时定义应指配给哪个队列,从而可明确静态控制纤程描述符的指配。
对于至少一个替代实施例,可不利用此类静态指配方案,或者除其之外,利用动态指配。可通过诸如互斥等用户级同步对象实施动态指配。此类互斥可允许纤程将产生的纤程动态自行调度到工作队列系统的特殊队列中。或者,可实施动态指配,使得分布式调度程序观察队列的行为并动态选择哪个队列应接收描述符。还或者,可通过程序员使用诸如“Lock”和“Unlock”原语等同步原语执行动态指配。此类原语可利用OS互斥结构。在执行Lock原语时,当前定序器可执行Yield操作,并将当前纤程的描述符置于对应于互斥的队列中。
相应地,本领域的技术人员将认识到,在不脱离本发明在其更广义方面的范围的情况下,可进行更改和修改。随附权利要求书因此将在其范围内包含在本发明真实范围内的所有此类更改和修改。
Claims (18)
1.一种用于无操作系统干预情况下调度线程的设备,包括:
包括与操作系统无关的分布式调度程序例程的第一部分的第一线程执行单元;
包括与操作系统无关的分布式调度程序例程的第二部分的第二线程执行单元;
其中,所述第一线程执行单元和所述第二线程执行单元能够进行并发多线程执行;
其中,所述第一部分和所述第二部分还查询工作队列以争用描述线程的工作描述符;以及
其中,所述分布式调度程序例程基于所述争用,在无操作系统干预的情况下调度要在所述线程执行单元中选定的一个上执行的线程。
2.如权利要求1所述的设备,其中:
所述线程执行单元中的至少一个是操作系统可见的,并且所述执行单元中的至少另一个是所述操作系统不可见的。
3.如权利要求1所述的设备,其中:
所述设备是单核处理器;以及
所述第一线程执行单元和所述第二线程执行单元是逻辑处理器。
4.如权利要求1所述的设备,其中:
所述设备是多核处理器;以及
所述第一线程执行单元和所述第二线程执行单元是处理器核。
5.如权利要求1所述的设备,其中:
所述执行单元在功能上对称。
6.如权利要求5所述的设备,其中:
所述队列系统包括保存适用于所有所述执行单元的工作描述符的单个队列。
7.如权利要求1所述的设备,其中:
所述执行单元中的至少一个在计算上相对于其他执行单元中的一个或多个不对称。
8.如权利要求7所述的设备,其中:
所述队列系统包括为所述至少一个非对称执行单元保存工作描述符的第一队列,并且还包括为所述一个或多个其他执行单元保存描述符的第二队列。
9.一种多定序器多线程处理系统,包括:
存储器系统;
第一类型的第一线程执行单元,其中第一线程执行单元是操作系统可见的并且将要执行分布式调度程序的第一部分;以及
第二类型的第二线程执行单元,其中第二线程执行单元是操作系统不可见的操作系统隔离单元并且将要执行所述分布式调度程序的第二部分;以及
所述分布式调度程序的第一部分和第二部分能够访问的工作队列,
其中所述存储器系统将存储软件库,所述软件库包括生成所述工作队列的一个或多个指令;
其中所述软件库还包括所述分布式调度程序,以执行用户指引的来自所述工作队列的要在所述第一线程执行单元和第二线程执行单元上执行的工作的调度并且调度所述工作而不受来自操作系统的干预。
10.如权利要求9所述的系统,其中:
所述分布式调度程序为所述第一线程执行单元和所述第二线程执行单元执行调度环。
11.如权利要求9所述的系统,其中:
所述工作队列保存描述未决软件线程的一个或多个记录。
12.如权利要求11所述的系统,其中:
所述一个或多个记录各自包括相关联的未决软件线程的开始地址。
13.如权利要求11所述的系统,其中:
所述一个或多个记录各自包括相关联的未决软件线程的栈指针。
14.如权利要求11所述的系统,其中:
所述分布式调度程序还执行用户指引的来自所述工作队列的要在所述线程执行单元上执行的工作的调度,使得所述线程执行单元并发执行其相关联的工作。
15.如权利要求11所述的系统,其中:
所述库还包括一个或多个函数,每个函数响应于相关联的用户生成的原语而生成纤程指令,其中,所述原语符合众所周知的应用程序员接口标准。
16.在多线程处理器中,一种在多个定序器之间调度软件线程的执行的方法,包括:
响应于用户生成的线程指令,生成描述纤程的纤程描述符,其中所述纤程是操作系统不可见的;
将所述纤程描述符置于队列中;
执行多个调度程序例程,每个所述调度程序例程与独特的定序器相关联,其中,所述多个定序器不受基于操作系统的线程调度程序影响,其中所述多个定序器是操作系统不可见的操作系统隔离定序器;
其中,每个所述调度程序例程争用所述队列中的所述纤程描述符;以及
调度所述纤程以在所述定序器之一上执行而无操作系统干预。
17.如权利要求16所述的方法,还包括:
所述用户生成的线程指令是原语,所述原语包括在应用程序员接口中。
18.如权利要求17所述的方法,其中:
所述应用程序员接口符合工业标准。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/027,445 US8607235B2 (en) | 2004-12-30 | 2004-12-30 | Mechanism to schedule threads on OS-sequestered sequencers without operating system intervention |
US11/027445 | 2004-12-30 |
Related Parent Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2005800457586A Division CN101160565B (zh) | 2004-12-30 | 2005-12-22 | 无操作系统干预情况下调度os隔离定序器上的线程的机制 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101702134A CN101702134A (zh) | 2010-05-05 |
CN101702134B true CN101702134B (zh) | 2014-07-23 |
Family
ID=36582629
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200910222297.5A Expired - Fee Related CN101702134B (zh) | 2004-12-30 | 2005-12-22 | 无操作系统干预情况下调度os隔离定序器上的线程的机制 |
CN2005800457586A Expired - Fee Related CN101160565B (zh) | 2004-12-30 | 2005-12-22 | 无操作系统干预情况下调度os隔离定序器上的线程的机制 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2005800457586A Expired - Fee Related CN101160565B (zh) | 2004-12-30 | 2005-12-22 | 无操作系统干预情况下调度os隔离定序器上的线程的机制 |
Country Status (6)
Country | Link |
---|---|
US (2) | US8607235B2 (zh) |
EP (1) | EP1839146B1 (zh) |
JP (3) | JP2008525921A (zh) |
KR (1) | KR20070095376A (zh) |
CN (2) | CN101702134B (zh) |
WO (1) | WO2006074027A2 (zh) |
Families Citing this family (45)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
DE10331202A1 (de) * | 2003-07-10 | 2005-03-31 | S.K. Enterprise Gmbh | Verwendung von Molkenpermeat zur Behandlung des Metabolischen Syndroms |
US8607235B2 (en) | 2004-12-30 | 2013-12-10 | Intel Corporation | Mechanism to schedule threads on OS-sequestered sequencers without operating system intervention |
US8010969B2 (en) * | 2005-06-13 | 2011-08-30 | Intel Corporation | Mechanism for monitoring instruction set based thread execution on a plurality of instruction sequencers |
RU2312388C2 (ru) * | 2005-09-22 | 2007-12-10 | Андрей Игоревич Ефимов | Способ организации многопроцессорной эвм |
US8028295B2 (en) | 2005-09-30 | 2011-09-27 | Intel Corporation | Apparatus, system, and method for persistent user-level thread |
US8079035B2 (en) * | 2005-12-27 | 2011-12-13 | Intel Corporation | Data structure and management techniques for local user-level thread data |
US8914618B2 (en) | 2005-12-29 | 2014-12-16 | Intel Corporation | Instruction set architecture-based inter-sequencer communications with a heterogeneous resource |
US8689215B2 (en) | 2006-12-19 | 2014-04-01 | Intel Corporation | Structured exception handling for application-managed thread units |
US8074274B2 (en) * | 2006-12-29 | 2011-12-06 | Intel Corporation | User-level privilege management |
US7975272B2 (en) * | 2006-12-30 | 2011-07-05 | Intel Corporation | Thread queuing method and apparatus |
KR100888675B1 (ko) | 2007-02-15 | 2009-03-13 | 고려대학교 산학협력단 | 임베디드 코어에서 멀티 쓰레드 실행을 위해 확장된프로세서 및 임베디드 코어에서 멀티 쓰레드 실행 방법 |
US7853950B2 (en) * | 2007-04-05 | 2010-12-14 | International Business Machines Corporarion | Executing multiple threads in a processor |
US20080320475A1 (en) * | 2007-06-19 | 2008-12-25 | Microsoft Corporation | Switching user mode thread context |
US8327363B2 (en) * | 2007-07-24 | 2012-12-04 | Microsoft Corporation | Application compatibility in multi-core systems |
US8544014B2 (en) * | 2007-07-24 | 2013-09-24 | Microsoft Corporation | Scheduling threads in multi-core systems |
US7904696B2 (en) * | 2007-09-14 | 2011-03-08 | Intel Corporation | Communication paths for enabling inter-sequencer communication following lock competition and accelerator registration |
CN101547212B (zh) * | 2008-03-29 | 2012-09-05 | 华为技术有限公司 | 一种分布式对象的调度方法和系统 |
US9785462B2 (en) | 2008-12-30 | 2017-10-10 | Intel Corporation | Registering a user-handler in hardware for transactional memory event handling |
KR101041777B1 (ko) | 2009-06-08 | 2011-06-17 | 엠텍비젼 주식회사 | 멀티 스레드 처리 방법 및 이를 사용하는 프로세서 디바이스 |
US8719547B2 (en) | 2009-09-18 | 2014-05-06 | Intel Corporation | Providing hardware support for shared virtual memory between local and remote physical memory |
US8464035B2 (en) | 2009-12-18 | 2013-06-11 | Intel Corporation | Instruction for enabling a processor wait state |
US8898664B2 (en) * | 2010-06-01 | 2014-11-25 | Microsoft Corporation | Exposure of virtual cache topology to a guest operating system |
US8443376B2 (en) | 2010-06-01 | 2013-05-14 | Microsoft Corporation | Hypervisor scheduler |
US8561070B2 (en) | 2010-12-02 | 2013-10-15 | International Business Machines Corporation | Creating a thread of execution in a computer processor without operating system intervention |
US8572628B2 (en) | 2010-12-02 | 2013-10-29 | International Business Machines Corporation | Inter-thread data communications in a computer processor |
KR102082241B1 (ko) | 2011-09-06 | 2020-02-27 | 인텔 코포레이션 | 전력 효율적 프로세서 아키텍처 |
CN103136047B (zh) * | 2011-11-30 | 2016-08-17 | 大唐联诚信息系统技术有限公司 | 一种多线程管理方法及架构 |
WO2013101139A1 (en) | 2011-12-30 | 2013-07-04 | Intel Corporation | Providing an asymmetric multicore processor system transparently to an operating system |
US20130205144A1 (en) * | 2012-02-06 | 2013-08-08 | Jeffrey R. Eastlack | Limitation of leakage power via dynamic enablement of execution units to accommodate varying performance demands |
US10255104B2 (en) * | 2012-03-29 | 2019-04-09 | Advanced Micro Devices, Inc. | System call queue between visible and invisible computing devices |
US8943343B2 (en) | 2012-06-20 | 2015-01-27 | Intel Corporation | Controlling an asymmetrical processor |
CN107317839A (zh) | 2012-07-04 | 2017-11-03 | 中兴通讯股份有限公司 | 物联网消息处理方法、装置及系统 |
US20140075163A1 (en) * | 2012-09-07 | 2014-03-13 | Paul N. Loewenstein | Load-monitor mwait |
US10158585B2 (en) * | 2013-02-21 | 2018-12-18 | Intel Corporation | Packet processing with reduced latency |
US9207940B2 (en) * | 2013-03-15 | 2015-12-08 | Intel Corporation | Robust and high performance instructions for system call |
WO2015027403A1 (en) * | 2013-08-28 | 2015-03-05 | Hewlett-Packard Development Company, L.P. | Testing multi-threaded applications |
CN105677455A (zh) * | 2014-11-21 | 2016-06-15 | 深圳市中兴微电子技术有限公司 | 一种设备调度方法及任务管理器 |
GB2544994A (en) | 2015-12-02 | 2017-06-07 | Swarm64 As | Data processing |
EP3704595A4 (en) * | 2017-10-31 | 2021-12-22 | Micron Technology, Inc. | SYSTEM WITH A HYBRID THREADING PROCESSOR, HYBRID THREADING MATRIX WITH CONFIGURABLE COMPUTER ELEMENTS AND HYBRID CONNECTION NETWORK |
US11093251B2 (en) | 2017-10-31 | 2021-08-17 | Micron Technology, Inc. | System having a hybrid threading processor, a hybrid threading fabric having configurable computing elements, and a hybrid interconnection network |
US11513840B2 (en) * | 2018-05-07 | 2022-11-29 | Micron Technology, Inc. | Thread creation on local or remote compute elements by a multi-threaded, self-scheduling processor |
US11068305B2 (en) * | 2018-05-07 | 2021-07-20 | Micron Technology, Inc. | System call management in a user-mode, multi-threaded, self-scheduling processor |
US11132233B2 (en) * | 2018-05-07 | 2021-09-28 | Micron Technology, Inc. | Thread priority management in a multi-threaded, self-scheduling processor |
CN109491780B (zh) * | 2018-11-23 | 2022-04-12 | 鲍金龙 | 多任务调度方法及装置 |
US20230138967A1 (en) * | 2021-10-29 | 2023-05-04 | Blackberry Limited | Thread scheduling |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6289369B1 (en) * | 1998-08-25 | 2001-09-11 | International Business Machines Corporation | Affinity, locality, and load balancing in scheduling user program-level threads for execution by a computer system |
CN1455347A (zh) * | 2002-04-30 | 2003-11-12 | 电子科技大学 | 一种分布式并行调度宽带网络服务器系统 |
Family Cites Families (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0422310A1 (en) * | 1989-10-10 | 1991-04-17 | International Business Machines Corporation | Distributed mechanism for the fast scheduling of shared objects |
US5257375A (en) * | 1991-08-23 | 1993-10-26 | International Business Machines Corp. | Method and apparatus for dispatching tasks requiring short-duration processor affinity |
US5768594A (en) * | 1995-07-14 | 1998-06-16 | Lucent Technologies Inc. | Methods and means for scheduling parallel processors |
JP3760035B2 (ja) * | 1996-08-27 | 2006-03-29 | 松下電器産業株式会社 | 複数の命令流を独立に処理し、命令流単位に処理性能を柔軟に制御するマルチスレッドプロセッサ |
US6766515B1 (en) * | 1997-02-18 | 2004-07-20 | Silicon Graphics, Inc. | Distributed scheduling of parallel jobs with no kernel-to-kernel communication |
US7191440B2 (en) * | 2001-08-15 | 2007-03-13 | Intel Corporation | Tracking operating system process and thread execution and virtual machine execution in hardware or in a virtual machine monitor |
US8032891B2 (en) * | 2002-05-20 | 2011-10-04 | Texas Instruments Incorporated | Energy-aware scheduling of application execution |
US20040049580A1 (en) * | 2002-09-05 | 2004-03-11 | International Business Machines Corporation | Receive queue device with efficient queue flow control, segment placement and virtualization mechanisms |
JP4750350B2 (ja) | 2003-03-13 | 2011-08-17 | パナソニック株式会社 | タスク切換装置、方法及びプログラム |
US7093147B2 (en) * | 2003-04-25 | 2006-08-15 | Hewlett-Packard Development Company, L.P. | Dynamically selecting processor cores for overall power efficiency |
US7376954B2 (en) * | 2003-08-28 | 2008-05-20 | Mips Technologies, Inc. | Mechanisms for assuring quality of service for programs executing on a multithreaded processor |
US7516456B2 (en) * | 2003-09-25 | 2009-04-07 | International Business Machines Corporation | Asymmetric heterogeneous multi-threaded operating system |
US7451146B2 (en) * | 2004-06-30 | 2008-11-11 | Hewlett-Packard Development Company, L.P. | Almost non-blocking linked stack implementation |
US20060075404A1 (en) * | 2004-10-06 | 2006-04-06 | Daniela Rosu | Method and system for scheduling user-level I/O threads |
US8607235B2 (en) | 2004-12-30 | 2013-12-10 | Intel Corporation | Mechanism to schedule threads on OS-sequestered sequencers without operating system intervention |
-
2004
- 2004-12-30 US US11/027,445 patent/US8607235B2/en not_active Expired - Fee Related
-
2005
- 2005-12-22 EP EP05855829.7A patent/EP1839146B1/en not_active Not-in-force
- 2005-12-22 CN CN200910222297.5A patent/CN101702134B/zh not_active Expired - Fee Related
- 2005-12-22 CN CN2005800457586A patent/CN101160565B/zh not_active Expired - Fee Related
- 2005-12-22 WO PCT/US2005/047334 patent/WO2006074027A2/en active Application Filing
- 2005-12-22 JP JP2007549606A patent/JP2008525921A/ja active Pending
- 2005-12-22 KR KR1020077017501A patent/KR20070095376A/ko active Search and Examination
-
2011
- 2011-01-18 JP JP2011007496A patent/JP2011076639A/ja active Pending
-
2013
- 2013-07-04 JP JP2013140714A patent/JP5678135B2/ja not_active Expired - Fee Related
- 2013-10-30 US US14/067,223 patent/US9069605B2/en not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6289369B1 (en) * | 1998-08-25 | 2001-09-11 | International Business Machines Corporation | Affinity, locality, and load balancing in scheduling user program-level threads for execution by a computer system |
CN1455347A (zh) * | 2002-04-30 | 2003-11-12 | 电子科技大学 | 一种分布式并行调度宽带网络服务器系统 |
Non-Patent Citations (1)
Title |
---|
SUSHANT GOEL等.Distributed Scheduler for High Performance Data-Centric System.《IEEETENCON 2003.CONFERENCE ON CONVERGENT TECHNOLOGIES FOR THE ASIA-PACIFIC REGION》.2003,1157-1161. * |
Also Published As
Publication number | Publication date |
---|---|
WO2006074027A3 (en) | 2006-08-24 |
US8607235B2 (en) | 2013-12-10 |
JP2013191244A (ja) | 2013-09-26 |
US20060150184A1 (en) | 2006-07-06 |
CN101702134A (zh) | 2010-05-05 |
WO2006074027A2 (en) | 2006-07-13 |
KR20070095376A (ko) | 2007-09-28 |
US20140115594A1 (en) | 2014-04-24 |
CN101160565B (zh) | 2012-06-20 |
JP2011076639A (ja) | 2011-04-14 |
EP1839146B1 (en) | 2018-10-24 |
JP2008525921A (ja) | 2008-07-17 |
US9069605B2 (en) | 2015-06-30 |
JP5678135B2 (ja) | 2015-02-25 |
EP1839146A2 (en) | 2007-10-03 |
CN101160565A (zh) | 2008-04-09 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101702134B (zh) | 无操作系统干预情况下调度os隔离定序器上的线程的机制 | |
CN102147749B (zh) | 仿真os隔离定序器上的用户级多线程处理的机制 | |
CN101251792B (zh) | 用于受应用管理的线程单元的结构化异常处理 | |
TWI736001B (zh) | 用以加速資料流訊號處理之異質cpu/gpu系統和由其實施之加速的資料流訊號處理方法 | |
US7650601B2 (en) | Operating system kernel-assisted, self-balanced, access-protected library framework in a run-to-completion multi-processor environment | |
Denning | Third generation computer systems | |
EP1837762B1 (en) | Scheduling method, scheduling device, and multiprocessor system | |
US8516461B2 (en) | Method to dynamically distribute a multi-dimensional work set across a multi-core system | |
CN101896886B (zh) | 一种用于计算机系统的资源分配方法及进程执行方法 | |
US20070204271A1 (en) | Method and system for simulating a multi-CPU/multi-core CPU/multi-threaded CPU hardware platform | |
CN101310257A (zh) | 多处理器系统和用于使计算机执行多处理器系统的控制方法的程序 | |
GB2580428A (en) | Handling exceptions in a machine learning processor | |
US9367350B2 (en) | Meta-scheduler with meta-contexts | |
EP1760580B1 (en) | Processing operation information transfer control system and method | |
GB2580135A (en) | Handling exceptions in a multi-tile processing arrangement | |
JPS6334490B2 (zh) | ||
Seo et al. | An effective design of master-slave operating system architecture for multiprocessor embedded systems | |
Khurana | Operating System (For Anna) | |
Langer et al. | Work-in-Progress: Real-Time Scheduling of Parallel Applications with Gang Scheduling | |
Mohan | Operating Systems | |
Végh et al. | The von Neumann computer model on the mirror of new technologies | |
Ebner | An associatively controlled functional multiprocessor for real-time applications | |
Wasson | Detailed design of the kernel of a real-time multiprocessor operating system. | |
Fiske | Thread scheduling mechanisms for multiple-context parallel processors | |
Reddy | Operating Systems Made Easy |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20140723 Termination date: 20171222 |
|
CF01 | Termination of patent right due to non-payment of annual fee |