CN101189579B - 用于多线程处理的使用信号量的方法和装置 - Google Patents
用于多线程处理的使用信号量的方法和装置 Download PDFInfo
- Publication number
- CN101189579B CN101189579B CN200480039052.4A CN200480039052A CN101189579B CN 101189579 B CN101189579 B CN 101189579B CN 200480039052 A CN200480039052 A CN 200480039052A CN 101189579 B CN101189579 B CN 101189579B
- Authority
- CN
- China
- Prior art keywords
- semaphore
- thread
- instruction
- message
- instruction thread
- 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
Images
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
- G06F9/52—Program synchronisation; Mutual exclusion, e.g. by means of semaphores
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/3004—Arrangements for executing specific machine instructions to perform operations on memory
-
- 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/30—Arrangements for executing machine instructions, e.g. instruction decode
- G06F9/30003—Arrangements for executing specific machine instructions
- G06F9/30076—Arrangements for executing specific machine instructions to perform miscellaneous control operations, e.g. NOP
- G06F9/30087—Synchronisation or serialisation instructions
-
- 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)
- Multi Processors (AREA)
- Debugging And Monitoring (AREA)
- Advance Control (AREA)
- Executing Machine-Instructions (AREA)
Abstract
多个并行的被动指令线程使用“主动”和“抢先”信号量协调对共享资源的访问。主动信号量向执行和/或控制电路发送使得线程状态改变的消息、线程可由线程调度器响应于未决的从属关系而置于非活动状态,这可由一信号量来指示。对应于从属关系的线程状态变量用于指示该线程处于非活动模式。当解决了该从属关系时,向控制电路传送导致清除从属关系变量的消息。响应于清除从属关系的变量,线程被置于活动状态。执行可在活动状态中的线程上进行。抢先信号量以类似的方式操作,不同之处在于信号量是由线程分派器在线程被分派到执行电路用于执行之前或之后配置的。
Description
技术领域
本发明涉及用于多线程处理的技术和体系结构,尤其涉及用于多线程处理的使用信号量的技术和体系结构。
背景
“信号量”(也称为“临界段”或“互斥信号”)是一种允许其中多个进程竞争共享资源(例如,存储器、文件)的操作的协调或同步的硬件和软件构造。一般而言,信号量是储存在操作***存储器的指定位置中进程可检查和改变的值。基于信号量的值,进程可访问共享资源,或等待一段时间并再次检查信号量。
常规计算机***中的信号量通常使用对原子“测试与置位”或相似类型的指令(例如,锁定、位测试、位测试与置位、位测试与复位)的硬件支持而被实现为软件例程。使用该信号量实现,可通过共享(例如,全局)数据以及一个或多个信号量来建立生产者-消费者通信关系。信号量允许由试图修改数据的多个进程中选中的一个来修改共享数据,这提供了数据一致性。
该信号量构造是“被动的”,因为线程必须执行轮询操作来获取信号量。轮询需求消耗了以别的方式可用于其它目的的处理器和***资源。因此,传统的信号量会导致效率低下。
附图简述
在附图的各图中作为示例而非局限示出了本发明,附图中,相同的参考标号引用相同的元素。
图1是大量的多线程处理器体系结构的一个实施例的框图。
图2是线程调度和信号量初始化操作的协调的一个实施例的流程图。
图3a-3d是其中可使用信号量来同步线程执行的从属关系的概念图示。
详细描述
在以下描述中,为解释起见,陈述了众多具体细节以提供对本发明的全面理解。然而,本领域的技术人员可以清楚,本发明可不采用这些具体细节来实施。在其它情况下,以框图形式示出了结构和设备以避免模糊本发明。
对主动信号量的示例使用的综述
此处所描述的是其中多个并行被动指令线程(后文称为“线程”)使用“主动”信号量来协调对共享资源的访问的体系结构和相关联的方法。该信号量被称为主动的是因为信号量实体向执行和/或控制电路发送消息以使线程状态改变。例如,线程可由线程调度器响应于未决从属关系而置于睡眠(或不活动)模式,这可由信号量来指示。对应于该从属关系的线程状态变量用于指示该线程处于睡眠模式中。
当解决了从属关系时,向控制电路(例如,线程调度器)传递一消息,以使该从属关系变量被清除。响应于所清除的从属关系变量,该线程被置于活动(或唤醒)状态中。执行可在活动状态的线程上继续。
继续上述示例,如果线程试图获取信号量却无法获得,则该线程被置于不活动状态。由于线程是不活动的,因此它无***询该信号量以确定由该信号量指示的从属关系何时被解决,这是现有技术中所需要的。该线程保留在不活动状态,直到接收(例如,从信号量实体)到指示从属关系被解决的消息。响应于该消息,线程被置于活动状态中,这允许执行继续。
图1是大量多线程处理器体系结构的一个实施例的框图。如此处所使用的,标签“大量多线程”体系结构指的是包括可支持多线程执行的多个处理器的体系结构。在一个实施例中,每一处理器可支持一个或多个线程。单个处理器上的多线程通过允许在其它线程处于非活动状态的同时执行活动线程来实现高执行效率。在信号量上待决的非活动状态中的线程不会消耗/浪费处理器资源。尽管描述是针对大量多线程体系结构的,但是信号量构造和相关联的方法适用于任何多线程体系结构,而无论支持的线程数是多少。
大量多线程***100包括储存要在执行期间由一个或多个处理核心使用的数据和指令的存储器分层结构110。存储器分层结构110可以包括本领域中已知的任何方式的动态随机存取存储器(DRAM)、一级或多级指令高速缓存、一级或多级数据高速缓存、以及一级或多级共享指令和数据高速缓存。线程分派器120与存储器分层结构110耦合,它接收诸如与新线程相关联的指令指针以及数据和/或数据指针等信息。线程分派器120也经由消息总线125与处理核心耦合。在一个实施例中,线程分派器120负责管理处理核心的线程资源。在接收新待决线程之后,线程分派器120选择具有执行该待决线程的资源的一个处理核心,并将该线程分派到所选择的处理核心。在处理核心上完成现有线程之后,通知线程分派器120,从而使得该处理核心上的线程资源可用于将来的待决线程。
***100被示出为具有多个处理器核心(130、131、139、150、151和159),其每一个包括具有相关联的控制电路的执行电路。处理器核心可以是相同的,或者处理器核心可具有不同的功能。任何数量的处理器核心可被包括在***100内。在一个实施例中,处理器核心按行来配置,每一行具有一个行控制器。例如,行控制器140可经由行控制总线145与处理器核心130、131和139耦合。类似地,行控制器160可经由行控制总线165与处理器核心150、151和159耦合。
处理器核心也经由消息总线125与信号量实体170耦合。信号量实体170包括提供此处所描述的信号量功能的存储器和控制逻辑。在一个实施例中,信号量实体170通过如以下更详细描述地发送和接收消息来与处理器核心交互。
线程分派器120也经由消息总线125与信号量实体170耦合。在一个实施例中,线程分派器通过如以下更详细描述地发送和接收消息来代表线程与信号量实体170交互。
每一处理核心中的控制电路可包含管理在同一处理核心上执行的多个线程的状态的线程调度电路,并还可包含执行活动指令线程的指令调度电路。在指令执行期间,一个或多个处理核心将试图访问共享的***资源。为获得对共享***资源的控制,线程通过对应的执行核心必须获得对应于要访问的共享***资源的信号量的控制。
在一个实施例中,为获得对信号量的控制,请求处理核心通过消息总线125向信号量实体170发送信号量请求消息。在发送信号量请求消息之后,请求线程被置于其中执行和相关联的操作(例如,对信号量的轮询)暂停的非活动状态。
响应于接收信号量请求消息,信号量实体170确定是否要向请求线程授予对信号量的控制。当授予信号量时,信号量实体170向请求线程发送信号量确认消息。响应于信号量确认消息,请求线程被恢复到其中使用所请求的资源的执行继续的活动状态。当线程完成了对共享资源的使用,该线程向信号量实体170发送释放信号量消息。响应于释放信号量消息,信号量实体170释放信号量,并允许其它线程获得对***资源的访问。
在一个实施例中,信号量由处理核心所执行的指令(信号量指令)以及通过例如消息总线125在处理核心和信号量实体之间传递的消息(信号量消息)来支持。在替换实施例中,可支持不同的和/或另外的消息或指令。
基于链表的信号量实体
在一个实施例中,传统的每一信号量队列由具有用于对每一信号量形成链表的条目的缓冲池来替换。由此,每一信号量可以是指向从缓冲池中的条目形成的链表的头指针。链表可以是双向链表或单向链表。
在一个实施例中,信号量表对每一支持的信号量包括一个指针。在一个实施例中,信号量表中的指针是指示要用于对应的信号量的链表的头。自由池指针指示缓冲池的头,且未使用信号量条目包括空(NULL)指针。
在一个实施例中,每一信号量条目包括释放状态字段、确认抑制字段、线程标识符字段、前一指针和下一指针。在替换实施例中,可使用其它和/或不同的字段,例如可省略前一指针。在一个实施例中,每一信号量还可包括指示对应于信号量的链表是否为空的单个位(或其它指示符)。
信号量消息
对线程或代表线程的线程分派器使用获取信号量消息(ACQ_MSG)来向信号量实体作出对信号量拥有权的请求。在一个实施例中,ACQ_MSG包含信号量标识符字段、线程标识符字段、“自动释放”字段和“确认抑制”(ack-suppression)字段。自动释放字段用于仅有头从属关系的线程。即,该线程从属于先前的线程,但是没有后续的线程从属于该线程。确认抑制字段用于仅有尾从属关系的线程。即,该线程不从属于任何先前的线程,但是该线程的确仅有从属于它的后续线程。ACQ_MSG可由线程分派器或与线程关联的其它控制电路发出。
在一个实施例中,在接收到ACQ_MSG之后,信号量实体通过从自由池列表中移除头条目,并将其添加到所选信号量的尾部,来使对于请求线程的信号量实体入队到目标信号量(由信号量标识符字段指定)的链表中。信号量条目的字段基于ACQ_MSG中的信息来更新:线程标识符字段、释放状态字段和确认抑制字段由ACQ-MSG消息中的请求者线程标识符、自动释放字段和确认抑制字段替换。如果信号量链表在ACQ_MSG之前不为空,则信号量实体不发送任何消息。否则,如果信号量链表在接收到ACQ_MSG之前为空,则采取以下动作之一。
如果复位确认抑制字段,则在消息总线125上从信号量实体向请求线程发送具有线程标识符的ACK_MSG。如果置位确认抑制字段,则不从信号量实体发送ACK_MSG消息。如果复位自动释放字段,则在信号量链表中维持刚入队的信号量条目。因此,信号量链表不为空,且信号量当前由线程拥有。如果置位自动释放字段,则从信号量链表中移除刚入队的信号量实体,且因此信号量链表为空。
对线程使用释放信号量消息(REL_MSG)以向信号量实体作出释放信号量的拥有权的请求。在一个实施例中,REL_MSG包括信号量标识符字段和线程标识符字段。在一个实施例中,REL_MSG只能由与持有该信号量的拥有权的线程相关联的控制电路发出,即,信号量标识符在信号量链表的顶部。在接收到REL_MSG之后,信号量实体从信号量链表的头部移除该条目。
在另一实施例中,REL_MSG可由与共享该信号量的任何线程相关联的控制电路发出。在接收到REL_MSG之后,信号量实体复位对于信号量链表中的对应条目释放状态字段,而无论条目在链表中的位置如何。如果信号量条目在链表的头部,则从该信号量链表的头部移除该条目。然后,下一条目成为链表的头部。如果下一条目不为空,则检查该条目。如果链表的新头部置位了释放状态字段,则再次从信号量链表的头部移除它。
在一个实施例中,这一递归过程继续,直到链表头部为空(信号量队列为空)或链表头部的释放状态字段被复位(等待从对应于该条目的线程释放信号量)。如果链表头部不为空,且未置位确认抑制字段,则ACK_MSG由信号量实体发送给由该条目的线程标识符字段标识的线程。如果链表头部不为空,且确认抑制字段被置位,则不发送ACK_MSG。
信号量确认消息(ACK_MSG)由信号量实体生成,以通知线程获取了所请求的信号量。在一个实施例中,ACK_MSG包括信号量标识符字段和线程标识符字段。ACK_MSG仅由信号量实体发出,且由执行线程标识符字段中所标识的线程的处理核心接收。
在接收到ACK_MSG之后,接收处理核心复位由线程标识符字段标识的线程的等待信号量状态字段。如果线程处于非活动状态,则线程状态改为活动状态。
信号量指令
获取信号量(ACS)指令使得ACQ_MSG消息被发送到具有所请求的信号量的信号量标识符、请求线程的线程标识符且复位自动释放字段的信号量实体。线程被置于置位等待信号量字段状态的非活动状态。ACS指令与(跟随其后的)释放信号量(RLS)指令(下文描述)成对。ACS-RLS指令对例如可用于临界段应用。
获取具有自动释放的信号量(ASR)指令使得ACQ_MSG被发送给具有所请求的信号量的信号量标识符、请求线程的线程标识符并置位自动释放字段的信号量实体。该线程被置于置位等待信号量状态字段的非活动状态中。在一个实施例中,ASR指令不能与RLS指令成对。在一个实施例中,ASR指令可用于仅有头部从属关系的线程。
等待信号量(WTS)指令使得检查等待信号量线程状态字段。如果该状态字段被置位,则该线程被置于非活动状态。如果状态字段未被置位,则该线程保留在活动状态中。不响应于WTS指令向信号量实体发送任何消息。对WTS指令的使用意味着先前在线程分派时刻由线程分派器使用ACQ_MSG代表线程获取信号量。如果在先前由线程分派器发出的ACQ_MSG中置位确认抑制字段,则不使用WTS指令。
释放信号量(RSL)指令使得向具有正被释放的信号量的信号量标识符以及释放线程的线程标识符的信号量实体发送REL_MSG。释放线程保留在活动状态中。如果先前对释放线程发出了ACS指令,则仅发出一个RLS指令。如果先前对释放线程发出了ASR指令,则不发出RLS指令。如果对释放线程发出了WTS指令,则WTS指令后可以跟随或不跟随RLS指令,取决于由线程分派器发送的ACQ_MSG的自动释放字段。如果自动释放字段复位,则不应发出RLS指令。如果置位了自动释放字段,则RLS指令应当跟随WTS指令。
主动信号量的示例获取
由于指令线程是由处理核心执行的,因此当资源可用时执行指令。当需要具有信号量的资源,例如共享存储器位置时,可能需要对该信号量的拥有权来访问该资源。由此,在需要信号量之前,对指令线程的执行是以本领域中的任何已知方式来实现的。
在一个实施例中,当需要信号量时,执行获取信号量(ACS)指令。ACS指令可由执行请求该信号量的指令线程的处理核心来执行。作为ACS指令执行的一部分或响应于此指令的执行,由执行该线程的处理核心通过消息总线向信号量实体发送获取信号量消息(ACQ_MSG)。用于ACQ_MSG的一种格式如上所述。也可使用其它格式。
作为ACS指令执行的一部分或响应于此指令的执行,请求信号量的线程被置于置位等待信号量状态字段的非活动状态。通过将线程置于非活动状态,不执行线程中的指令,这包括万一信号量请求被拒绝,则轮询所请求的信号量。通过将线程置于非活动状态,等待信号量的线程不消耗处理器资源和***带宽。对于支持多线程的处理核心,处理器资源和***带宽可由其它活动线程使用。
信号量实体接收ACQ_MSG,并将请求者信息条目置于目标信号量的链表中。如果信号量不被另一线程拥有或控制,则信号量条目被置于信号量链表的头部,因为没有其它条目。如果信号量被另一线程拥有或控制,则信号量实体被置于信号量链表的尾部。在一个实施例中,链表的尾部是通过从头条目开始到尾条目遍历缓冲池中的链表条目来标识的,且新条目成为新尾条目。在另一实施例中,链表的尾部直接由储存在信号量表中的链表的尾指针来标识。
当线程完成了对对应于信号量的资源的使用时,持有该信号量的线程释放对该信号量的控制,这将在下文中详细描述。当释放信号量时,移除信号量链表头部处对应的信号量,且链表中的下一信号量条目成为链表头部。
当信号量条目成为信号量链表头部时,其状态字段由信号量实体检查。如果复位确认抑制字段,则从信号量实体向与该信号量条目相关联的线程发送确认消息(ACK_MSG)。ACK_MSG的一种格式在下文中描述。也可使用其它格式。ACK_MSG向接收实体(例如,线程)指示已向接收实体授予对对应的信号量的控制。
响应于ACK_MSG,激活对应的线程。当被激活时,重新开始对线程中的指令的处理,且可访问对应于该信号量的共享资源。当线程完成对共享资源的访问时,释放该信号量,这将在下文中详细描述。
主动信号量的示例释放
在一个实施例中,当执行释放信号量(RLS)指令时,释放信号量。RLS指令可由执行请求该信号量的指令线程的处理核心来执行。作为RLS指令执行的一部分或响应于此指令的执行,向信号量实体发送释放信号量消息(REL_MSG)。REL_MSG的一种格式如上所述。也可使用其它格式。
响应于REL_MSG,信号量实体将REL_MSG的线程标识符字段与信号量链表进行匹配。信号量实体检查对应的信号量条目是否在链表的头部。如果对应的信号量条目在链表的头部,则信号量实体从链表头部移除该线程条目。链表中的后一条目成为头条目。然后可将信号量授予对应于新头条目的线程。如果对应的信号量条目不在链表的头部,则信号量实体置位该信号量条目的释放状态字段。
行为模型
基于所使用的链表的结构,信号量可被分类为联合信号量或有序信号量。基于从信号量实体进行的ACK_MSG的发送,信号量可被分类为主动信号量或抢先信号量。由此,可支持四种类型的信号量。
联合信号量的一个实施例的综述
联合信号量允许并发线程以任何顺序访问信号量。在一个实施例中,信号量由线程分派器在与空链表的会话开始处(或指示空链表的单个位)初始化。不从线程分配器向信号量实体发送任何其它消息。信号量链表是由执行多个指令线程的执行电路在运行中构建的。
在一个实施例中,线程通过执行ACS或ASR指令作出对联合信号量的请求。线程通过执行RLS指令释放联合信号量。在一个实施例中,新ACQ_MSG将导致对应于请求线程的条目被置于信号量链表的尾部。这提供了先到先服务(FSFS)信号量模型。
有序信号量的一个实施例的综述
有序信号量允许并发线程以预定顺序访问信号量。该顺序是由线程分配器在分派时预定的。顺序可以是从属于应用程序的。当线程分派本质上是顺次时,线程分派器可代表每一分派的线程向信号量实体发送ACQ_MSG消息以依照该顺序来构建信号量链表。
进入临界段的线程可使用WTS指令来等待信号量的拥有权。当线程已被置于信号量链表中时,不使用ACS和ASR指令。在一个实施例中,信号量实体可依照链表顺序提供对信号量的控制。在信号量上等待的线程将按照链表顺序接收ACQ_MSG。
主动信号量的一个实施例的综述
如上所述,对于主动信号量,ACQ_MSG用于使得线程从非活动状态转移到活动状态。信号量实体从执行线程的执行电路接收一个或多个ACQ_MSG。信号量实体仅向对应于信号量链表头部处的线程的执行电路发送ACK_MSG。在移除信号量链表的头部之后,信号量实体检查链表的新头部的状态,并可向对应于信号量链表的新头部的线程的执行电路发送后续的ACK_MSG。活动信号量也可以是联合信号量。
抢先信号量的一个实施例的综述
抢先信号量向信号量链表的头部处的线程发送一个且仅一个ACK_MSG,而无论该线程是否处于非活动状态。这适用于使用具有先前由线程分配器发送了ACQ_MSG的有序信号量的线程,使得仅一个ACK_MSG被发送到线程。使用有序信号量的线程可包含WTS和/或RLS指令。
对于抢先信号量,ACK_MSG由信号量实体自动发送给信号量链表的头部处的线程。在一个实施例中,存在“风险条件”的可能性,如果来自线程的条目的定时由线程分派器以及该线程对执行电路可见的时间入队到信号量链表中,则该“风险条件”可能存在。由于两个动作都是由线程分派器启动的,但是是通过不同的数据路径发生的,因此必须考虑这些事件的定时。
如果线程执行在信号量配置之前开始,则如果线程中有WTS指令,则没有风险条件。由于等待信号量线程状态变量是由线程分派器设置的,因此即使在线程被入队到信号量链表之前到达了线程的WTS指令,也不会发生风险条件。WTS指令使得线程进入非活动状态,而不向信号量实体发送消息。当信号量实体向线程发送ACK_MSG时,执行电路使得线程再次变为活动。
如果信号量由线程分配器配置为置位确认抑制字段,则会导致风险条件。在这一情况下,线程将不被置于非活动状态中。相反,如果在为线程配置信号量之前线程到达RLS指令且向信号量实体发送了REL_MSG,则信号量实体可能不处于处理REL_MSG的条件中。为避免这一风险条件,线程执行和信号量实体可确保REL_MSG不传送由线程分派器发出的ACQ_MSG。
由此,在一个实施例中,为避免风险条件,如果复位确认抑制,则线程分派器在完成信号量配置之前完成线程配置。如果置位确认抑制字段,线程分派器在完成线程配置之前完成信号量配置。由于线程分派器串行地分派准备好的线程,因此顺次操作可确保必要的排序。
当在信号量配置之前完成线程配置时,线程分派器可分派线程,并等待指示在发送引起信号量配置的消息之前要完成线程配置的信号。当在线程配置之前完成信号量配置时,线程分派器可发送启动信号量配置的消息,并等待指示在分派线程之前要完成信号量配置的信号。由于串行配置会不必要地限制来自分派器的吞吐量,因此可将配置操作管线化。
图2是线程分派和信号量初始化操作的协调的一个实施例的流程图。在一个实施例中,线程分派器确定是否对要发送的信号量消息置位确认抑制字段(210)。在替换实施例中,其它***组件可确定是否置位了或将要置位确认抑制字段。
如果置位了确认抑制字段(210),则线程分派器向信号量实体发送信号量请求消息(例如,ACQ_MSG)(220)。信号量实体处理该请求消息,并在处理了请求消息之后(例如,对请求线程将链表条目入队)向线程分派器发送“信号量配置完成”信号。“信号量配置完成”信号可采用任何形式,例如单行可用于发送一位信号,或者可通过消息总线发送消息。
线程分派器等待来自信号量实体的“信号量配置完成”信号(230)。在等待“信号量配置完成”信号时,线程分派器可例如分派其它线程或执行不引起分配线程的操作。在接收到“信号量配置完成”消息之后,线程分派器向执行电路分派线程(240)。线程然后由执行电路执行(250)。
如果复位确认抑制字段(210),则线程分派器向执行电路分派线程(215)。在向执行电路分派了线程之后,线程分派器等待来自执行电路的“线程配置完成”信号(225)。在一个实施例中,当执行电路被设置成开始线程的执行时,执行电路向线程分派器发送“线程配置完成”信号。“线程配置完成”信号可采用任何形式,例如,单行可用于发送一位信号,或者可通过消息总线发送消息。然后由执行电路执行线程(250)。
当等待“线程配置完成”信号时,线程分派器可例如分派其它线程或执行不引起发送信号量请求消息的操作。在接收到“线程配置完成”消息之后,线程分派器向信号量实体发送信号量请求消息235。这可在开始了线程执行之后发生,或与线程执行的开始同时发生。
图2的示例提供了具有抢先信号量的线程执行和信号量配置的协调的顺次示例。如上所述,关于图2所描述的操作也可以用管线化的方式来执行。
线程同步
图3a-3d是其中信号量可用于同步线程执行的从属关系的概念图示。图3a示出了1∶1∶1(一对一)从属关系。图3a的从属关系可以是强顺次顺序从属关系或联合从属关系。对于强顺次顺序从属关系,可使用单个抢先的有序信号量。在一个实施例中,在从线程分派器发送到信号量实体来请求信号量的ACQ_MSG中,确认抑制字段和自动释放字段都被复位。指令线程包括获得和释放信号量的WTS-RLS指令对。
对于联合从属关系,可使用单个主动的联合信号量。在一个实施例中,在从执行线程的执行电路发送到信号量实体以请求信号量的ACQ_MSG中,确认抑制字段和自动释放字段都被复位。指令线程包括获得和释放信号量的ACS-RLS对。
图3b示出了1∶N(一对多)从属关系,其中一个线程具有对N个其它线程的头从属关系,其中N个其它线程不彼此从属。此处,N是正整数,它可以是1或大于1。对于1∶N从属关系,可使用单个抢先的有序信号量。在一个实施例中,对于N个独立的线程,由线程分派器代表N个线程发送ACQ_MSG。在从线程分派器发送到信号量实体以请求信号量的ACQ_MSG中,置位确认抑制字段,但复位自动释放字段。对于对其它N个线程具有头从属关系的单个线程,也由线程分派器发送ACQ_MSG。在请求信号量的ACQ_MSG中,复位确认抑制字段,并置位自动释放字段。N个指令线程仅包括释放信号量的一个RLS指令。单个指令线程包括获得和释放信号量的WTS-RLS指令对。
图3c示出了N∶1(多对一)从属关系,其中N个线程对单个线程具有头从属关系,但是这N个线程不彼此从属。对于N∶1从属关系,可使用单个抢先的有序信号量。在一个实施例中,线程分派器负责代表N个从属的线程和一个被从属的线程发送ACQ_MSG。在一个实施例中,对于单个被从属的线程,在请求信号量的ACQ_MSG中,置位确认抑制字段,并复位自动释放字段。对于N个从属的线程,在请求信号量的ACQ_MSG中,复位确认抑制字段,并置位自动释放字段。单个被从属的指令线程仅包括释放信号量的一个RLS指令。N个从属的指令线程包括获得和释放信号量的WTS-RLS指令对。
图3d示出了N∶M(多对多)从属关系,其中N个从属的线程对M个被从属的线程有头从属关系。在这一情况下,N个从属的线程不彼此从属,且M个被从属的线程不彼此从属。N∶M从属关系情况与上述1∶1∶1、1∶N和N∶1情况相比是更一般的情况。对于N∶M从属关系,可使用单个抢先的有序信号量。在一个实施例中,线程分派器负责代表N个从属的线程和M个被从属的线程发送ACQ_MSG。在一个实施例中,对于M个被从属的线程,在请求信号量的ACQ_MSG中,置位确认抑制字段,并复位自动释放字段。对于N个从属的线程,在请求信号量的ACQ_MSG中,复位确认抑制字段,并置位自动释放字段。M个被从属的指令线程仅包括释放信号量的一个RLS指令。N个从属的指令线程包括获得和释放信号量的WTS-RLS指令对。
图3a-3d的从属关系可用于支持更复杂的从属关系。例如,对于N∶1∶N从属关系,可使用两个抢先的有序信号量。N∶1从属关系线程如上对于图3c所描述的那样处理,而1∶N从属关系如上对于图3b所描述的那样处理。
结论
说明书中对于“一个实施例”或“实施例”的引用意味着此处关于该实施例所描述的具体特征、结构或特性被包括在本发明的至少一个实施例中。短语“在一个实施例中”在说明书各处的出现不必都引用同一实施例。
在以上说明书中,参考其具体实施例描述了本发明。然而,很明显,可对本发明进行各种修改和改变而不脱离本发明的较宽泛精神和范围。因此,说明书和附图在说明性而非限制性的意义上考虑。
Claims (26)
1.一种用于多线程处理的方法,包括:
确定对应于一信号量的变量的状态;
如果所述变量处于第一状态,则在分派指令线程用于执行之前,为所述指令线程生成一信号量条目,其中所述第一状态指示所述信号量会通知所述线程所述信号量已经被获得;以及
如果所述变量处于第二状态,则在为指令线程生成信号量条目之前,分派所述指令线程用于执行,其中所述第二状态指示所述信号量不会通知所述线程所述信号量已经被获得,
其中,如果所述变量处于第一状态,则在分派指令线程之前为所述指令线程生成信号量条目包括:
向信号量实体发送请求由所述指令线程对所述信号量的控制的消息;以及
响应于接收指示所述信号量实体已处理了所述消息的信号,向执行电路分派所述指令线程;
其中,如果所述变量处于第二状态,则在为指令线程生成信号量条目之前分派所述指令线程用于执行包括:
向执行电路分派所述指令线程;以及
响应于指示已开始对所述指令线程的执行的信号,向信号量实体发送请求由所述指令线程对所述信号量的控制的消息。
2.如权利要求1所述的方法,其特征在于,还包括分派所述指令线程用于执行,并在所述指令线程执行期间为所述指令线程生成信号量条目。
3.如权利要求1所述的方法,其特征在于,所述对应于信号量的变量指示信号量实体是否自动向对应于所述指令线程的执行电路发送指示对所述信号量的控制的消息。
4.如权利要求1所述的方法,其特征在于,所述向信号量实体发送消息并分派指令线程被管线化。
5.如权利要求1所述的方法,其特征在于,所述消息包括信号量标识符字段、线程标识符字段以及对应于所述变量的字段。
6.如权利要求1所述的方法,其特征在于,所述向信号量实体分派指令线程并发送消息被管线化。
7.如权利要求2所述的方法,其特征在于,分派所述指令线程用于执行并在所述指令线程执行期间为所述指令线程生成信号量条目包括:
向执行电路分派所述指令线程;以及
响应于一组指令的执行,向信号量实体发送请求由所述指令线程对所述信号量的控制的消息。
8.如权利要求7所述的方法,其特征在于,所述一组指令包括获取信号量指令。
9.如权利要求7所述的方法,其特征在于,所述一组指令包括带自动释放的获取信号量指令。
10.一种用于多线程处理的设备,包括:
用于确定对应于一信号量的变量的状态的装置;
用于如果所述变量处于第一状态,则在分派指令线程用于执行之前,为所述指令线程生成信号量条目的装置,其中所述第一状态指示所述信号量会通知所述线程所述信号量已经被获得;以及
用于如果所述变量处于第二状态,则在为指令线程生成信号量条目之前分派所述指令线程用于执行的装置,其中所述第二状态指示所述信号量不会通知所述线程所述信号量已经被获得;以及
其中,用于如果所述变量处于第一状态,则在分派指令线程之前为所述指令线程生成信号量条目的装置还包括:
用于向信号量实体发送请求由所述指令线程对所述信号量的控制的消息的装置;以及
用于响应于接收到指示所述信号量实体已处理了所述消息的信号向执行电路分派所述指令线程的装置;
其中,用于如果所述变量处于第二状态,则在为指令线程生成信号量条目之前分派所述指令线程用于执行的装置还包括:
用于向执行电路分派所述指令线程的装置;以及
用于响应于指示已开始对所述指令线程的执行的信号向信号量实体发送请求由所述指令线程对所述信号量的控制的消息的装置。
11.如权利要求10所述的设备,其特征在于,还包括用于分派所述指令线程用于执行,且在所述指令线程执行期间为所述指令线程生成信号量条目的装置。
12.如权利要求11所述的设备,其特征在于,用于分派所述指令线程用于执行,并在所述指令线程执行期间为所述指令线程生成信号量条目的装置包括:
用于向执行电路分派指令线程的装置;以及
用于响应于一组指令的执行向信号量实体发送请求由所述指令线程对所述信号量的控制的消息的装置。
13.一种用于多线程处理的方法,包括:
确定对应于信号量的变量的状态;
如果所述变量处于第一状态,则在向执行电路分派指令线程用于执行之前,向信号量实体生成消息以便为所述指令线程生成信号量条目,其中所述第一状态指示所述信号量会通知所述线程所述信号量已经被获得,其中所述信号量实体用于维护信号量的条目,所述条目指示请求对所述信号量的控制的一个或多个指令线程;以及
如果所述变量处于第二状态,则在向所述信号量实体生成消息以便为指令线程生成信号量条目之前向所述执行电路分派所述指令线程用于执行,其中所述第二状态指示所述信号量不会通知所述线程所述信号量已经被获得,
其中,如果所述变量处于第一状态,则在向所述执行电路分派指令线程用于执行之前向所述信号量实体生成消息以便为所述指令线程生成信号量条目包括向信号量实体发送请求由所述指令线程对所述信号量的控制的消息,以及响应于接收指示所述信号量实体已处理了所述消息的信号向所述执行电路分派所述指令线程;
其中,如果所述变量处于第二状态,则在向所述信号量实体生成消息以便为指令线程生成信号量条目之前向所述执行电路分派所述指令线程用于执行还包括响应于指示所述指令线程的执行已开始的信号,向执行电路分派所述指令线程,并向信号量实体发送请求由所述指令线程对所述信号量的控制的消息。
14.如权利要求13所述的方法,其特征在于,分派指令线程用于执行而不为所述线程生成信号量条目。
15.如权利要求13所述的方法,其特征在于,所述信号量实体维持一个或多个信号量。
16.如权利要求13所述的方法,其特征在于,所述消息包括信号量标识符字段、线程标识符字段、以及对应于所述变量的字段。
17.如权利要求13所述的方法,其特征在于,所述对应于信号量的变量指示信号量实体是否自动向对应于所述指令线程的执行电路发送指示对所述信号量的控制的消息。
18.如权利要求13所述的方法,其特征在于,所述向信号量实体发送消息以及分派所述指令线程的操作被管线化。
19.如权利要求14所述的方法,其特征在于,执行电路响应于一组指令的执行向信号量实体生成请求由所述指令线程对所述信号量的控制的消息。
20.一种用于多线程处理的装置,包括:
用于确定对应于信号量的变量的状态的装置;
用于如果所述变量处于第一状态,则在向执行电路分派指令线程用于执行之前向信号量实体生成消息以便为所述指令线程生成信号量条目的装置,其中所述第一状态指示所述信号量会通知所述线程所述信号量已经被获得,其中所述信号量实体用于维护信号量的条目,所述条目指示请求对所述信号量的控制的一个或多个指令线程;以及
用于如果所述变量处于第二状态,则在向所述信号量实体生成消息以便为指令线程生成信号量条目之前向所述执行电路分派所述指令线程用于执行的装置,其中所述第二状态指示所述信号量不会通知所述线程所述信号量已经被获得,
其中,用于如果所述变量处于第一状态,则在向所述执行电路分派指令线程用于执行之前向所述信号量实体生成消息以便为所述指令线程生成信号量条目的装置包括用于向信号量实体发送请求由所述指令线程对所述信号量的控制的消息的装置,以及用于响应于接收指示所述信号量实体已处理了所述消息的信号向所述执行电路分派所述指令线程的装置;
其中,用于如果所述变量处于第二状态,则在向所述信号量实体生成消息以便为指令线程生成信号量条目之前向所述执行电路分派所述指令线程用于执行的装置还包括响应于指示所述指令线程的执行已开始的信号,用于向执行电路分派所述指令线程装置,以及用于向信号量实体发送请求由所述指令线程对所述信号量的控制的消息的装置。
21.如权利要求20所述的装置,其特征在于,还包括用于分派指令线程用于执行而不为所述线程生成信号量条目的装置。
22.如权利要求20所述的装置,其特征在于,所述信号量实体维持一个或多个信号量。
23.如权利要求20所述的装置,其特征在于,所述消息包括信号量标识符字段、线程标识符字段、以及对应于所述变量的字段。
24.如权利要求20所述的装置,其特征在于,所述对应于信号量的变量指示信号量实体是否自动向对应于所述指令线程的执行电路发送指示对所述信号量的控制的消息。
25.如权利要求20所述的装置,其特征在于,所述用于向信号量实体发送消息的装置以及用于分派所述指令线程的装置被管线化。
26.如权利要求21所述的装置,其特征在于,执行电路响应于一组指令的执行向信号量实体生成请求由所述指令线程对所述信号量的控制的消息。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201110460725.5A CN102622271B (zh) | 2003-12-31 | 2004-12-23 | 用于多线程处理的使用信号量的方法和设备 |
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/750,090 US7614054B2 (en) | 2003-12-31 | 2003-12-31 | Behavioral model based multi-threaded architecture |
US10/750,090 | 2003-12-31 | ||
PCT/US2004/043395 WO2005066768A2 (en) | 2003-12-31 | 2004-12-23 | Behavioral model based multi-threaded architecture |
Related Child Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110460725.5A Division CN102622271B (zh) | 2003-12-31 | 2004-12-23 | 用于多线程处理的使用信号量的方法和设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101189579A CN101189579A (zh) | 2008-05-28 |
CN101189579B true CN101189579B (zh) | 2012-03-07 |
Family
ID=34711206
Family Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110460725.5A Expired - Fee Related CN102622271B (zh) | 2003-12-31 | 2004-12-23 | 用于多线程处理的使用信号量的方法和设备 |
CN200480039052.4A Expired - Fee Related CN101189579B (zh) | 2003-12-31 | 2004-12-23 | 用于多线程处理的使用信号量的方法和装置 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110460725.5A Expired - Fee Related CN102622271B (zh) | 2003-12-31 | 2004-12-23 | 用于多线程处理的使用信号量的方法和设备 |
Country Status (7)
Country | Link |
---|---|
US (2) | US7614054B2 (zh) |
EP (1) | EP1700203B1 (zh) |
JP (1) | JP4584935B2 (zh) |
CN (2) | CN102622271B (zh) |
AT (1) | ATE554444T1 (zh) |
TW (1) | TWI279717B (zh) |
WO (1) | WO2005066768A2 (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7614054B2 (en) * | 2003-12-31 | 2009-11-03 | Intel Corporation | Behavioral model based multi-threaded architecture |
GB0519597D0 (en) * | 2005-09-26 | 2005-11-02 | Imagination Tech Ltd | Scalable multi-threaded media processing architecture |
US7792864B1 (en) * | 2006-06-14 | 2010-09-07 | TransUnion Teledata, L.L.C. | Entity identification and/or association using multiple data elements |
US8701111B2 (en) * | 2008-07-09 | 2014-04-15 | International Business Machines Corporation | Lock windows for reducing contention |
US9348644B2 (en) | 2014-10-08 | 2016-05-24 | International Business Machines Corporation | Application-level dispatcher control of application-level pseudo threads and operating system threads |
CN104572277B (zh) * | 2014-12-17 | 2018-04-27 | 大唐移动通信设备有限公司 | 一种线程流控方法和装置 |
CN109254834B (zh) * | 2017-07-13 | 2021-05-14 | 普天信息技术有限公司 | 一种多线程启动同步方法 |
US20190042332A1 (en) * | 2017-08-03 | 2019-02-07 | Next Silicon, Ltd. | Hardware locking primitive system for hardware and methods for generating same |
US11119782B2 (en) * | 2018-05-07 | 2021-09-14 | Micron Technology, Inc. | Thread commencement using a work descriptor packet in a self-scheduling processor |
US11099899B2 (en) * | 2019-11-14 | 2021-08-24 | Sas Institute Inc. | Atomic pool manager for a data pool using a memory slot for storing a data object |
CN112612582B (zh) * | 2020-12-14 | 2024-05-28 | 北京和利时控制技术有限公司 | 信号量功能实现方法和装置 |
KR20240102798A (ko) * | 2022-12-26 | 2024-07-03 | 리벨리온 주식회사 | 뉴럴 프로세서 및 이의 명령어 페치 방법 |
CN117076139B (zh) * | 2023-10-17 | 2024-04-02 | 北京融为科技有限公司 | 数据处理方法及相关设备 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US5852731A (en) * | 1995-06-05 | 1998-12-22 | International Business Machines Corporation | Computer program product for synchronizing static variable initialization and reference under a multi-threaded computer environment |
US6018785A (en) * | 1993-12-30 | 2000-01-25 | Cypress Semiconductor Corp. | Interrupt-generating hardware semaphore |
Family Cites Families (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0381859A (ja) * | 1989-08-25 | 1991-04-08 | Nec Corp | マルチプロセッサシステム |
GB9123264D0 (en) * | 1991-11-01 | 1991-12-18 | Int Computers Ltd | Semaphone arrangement for a data processing system |
CA2201275A1 (en) * | 1997-03-27 | 1998-09-27 | Chris L. Brealey | Locking tool data objects in a framework environment |
JP2001084235A (ja) | 1999-09-10 | 2001-03-30 | Nec Corp | ロック粒度統計情報を利用した排他制御方法及びプログラムを記録した機械読み取り可能な記録媒体 |
US6687904B1 (en) * | 1999-11-22 | 2004-02-03 | Sun Microsystems, Inc. | Method and apparatus for selecting a locking policy based on a per-object locking history |
US7240058B2 (en) * | 2002-03-01 | 2007-07-03 | Sun Microsystems, Inc. | Lock mechanism for a distributed data system |
CN1212569C (zh) * | 2002-11-01 | 2005-07-27 | 英业达股份有限公司 | 多线程自动测试方法 |
US7614054B2 (en) | 2003-12-31 | 2009-11-03 | Intel Corporation | Behavioral model based multi-threaded architecture |
-
2003
- 2003-12-31 US US10/750,090 patent/US7614054B2/en not_active Expired - Fee Related
-
2004
- 2004-12-23 EP EP04815468A patent/EP1700203B1/en not_active Not-in-force
- 2004-12-23 WO PCT/US2004/043395 patent/WO2005066768A2/en not_active Application Discontinuation
- 2004-12-23 CN CN201110460725.5A patent/CN102622271B/zh not_active Expired - Fee Related
- 2004-12-23 AT AT04815468T patent/ATE554444T1/de active
- 2004-12-23 JP JP2006547392A patent/JP4584935B2/ja not_active Expired - Fee Related
- 2004-12-23 CN CN200480039052.4A patent/CN101189579B/zh not_active Expired - Fee Related
- 2004-12-27 TW TW093140775A patent/TWI279717B/zh not_active IP Right Cessation
-
2009
- 2009-11-03 US US12/611,919 patent/US8914800B2/en not_active Expired - Fee Related
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6018785A (en) * | 1993-12-30 | 2000-01-25 | Cypress Semiconductor Corp. | Interrupt-generating hardware semaphore |
US5852731A (en) * | 1995-06-05 | 1998-12-22 | International Business Machines Corporation | Computer program product for synchronizing static variable initialization and reference under a multi-threaded computer environment |
Non-Patent Citations (4)
Title |
---|
徐洪斌,苏铁熊,董小瑞.多线程技术及其实现.山西电子技术 3.2003,(3),13-14,25. |
徐洪斌,苏铁熊,董小瑞.多线程技术及其实现.山西电子技术 3.2003,(3),13-14,25. * |
陈江.一种基于COM/COM+的跨进程消息共享池接口组件.福建电脑 10.2003,(10),49-50. |
陈江.一种基于COM/COM+的跨进程消息共享池接口组件.福建电脑 10.2003,(10),49-50. * |
Also Published As
Publication number | Publication date |
---|---|
WO2005066768A3 (en) | 2007-02-22 |
JP4584935B2 (ja) | 2010-11-24 |
JP2007517328A (ja) | 2007-06-28 |
EP1700203A2 (en) | 2006-09-13 |
ATE554444T1 (de) | 2012-05-15 |
TW200535694A (en) | 2005-11-01 |
CN102622271B (zh) | 2016-08-24 |
CN101189579A (zh) | 2008-05-28 |
US8914800B2 (en) | 2014-12-16 |
CN102622271A (zh) | 2012-08-01 |
US20050149928A1 (en) | 2005-07-07 |
WO2005066768A2 (en) | 2005-07-21 |
US20100115518A1 (en) | 2010-05-06 |
EP1700203B1 (en) | 2012-04-18 |
US7614054B2 (en) | 2009-11-03 |
TWI279717B (en) | 2007-04-21 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US8914800B2 (en) | Behavioral model based multi-threaded architecture | |
US8448179B2 (en) | Processing architecture having passive threads and active semaphores | |
JPH03126158A (ja) | スケジユーリング方法及び装置 | |
CN101365999B (zh) | 发送完成事件批处理 | |
US8112559B2 (en) | Increasing available FIFO space to prevent messaging queue deadlocks in a DMA environment | |
CN100549964C (zh) | 信息处理设备、中断处理控制方法 | |
EP0563624B1 (en) | Method and apparatus for performing conditional operations on externally shared data | |
CN104094235B (zh) | 多线程计算 | |
US20080288691A1 (en) | Method and apparatus of lock transactions processing in single or multi-core processor | |
CN107577539B (zh) | 用于内核态和用户态通讯的共享内存结构及其应用 | |
CN110795254A (zh) | 一种基于php处理高并发io的方法 | |
CN103218329A (zh) | 数字信号处理数据传输 | |
CN112491426B (zh) | 面向多核dsp的服务组件通信架构及任务调度、数据交互方法 | |
US7424712B1 (en) | System and method for controlling co-scheduling of processes of parallel program | |
EP3792757A1 (en) | Method, apparatus, device, and storage medium for performing processing task | |
CN111831408A (zh) | 异步任务处理方法、装置、电子设备及介质 | |
CN101634956B (zh) | 多核处理器消息调度方法及调度器 | |
CN115905155A (zh) | 一种逻辑日志同步的并行传输的方法 | |
US10713188B2 (en) | Inter-process signaling system and method | |
CN117331655A (zh) | 多线程调度方法及装置 | |
CN102736949B (zh) | 改善对非连贯设备要执行的任务的调度 | |
US9507654B2 (en) | Data processing system having messaging | |
CN112783663B (zh) | 一种可扩展的栅栏同步方法及设备 | |
CN116128704A (zh) | 数据处理方法、数据处理装置以及计算机可读存储介质 | |
CN117370042A (zh) | 用于核间远程调用的方法、嵌入式多核***和存储介质 |
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 | ||
C17 | Cessation of patent right | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20120307 Termination date: 20131223 |