《线程通信和同步技术的制作方法》由会员分享,可在线阅读,更多相关《线程通信和同步技术的制作方法(5页珍藏版)》请在金锄头文库上搜索。
1、线程通信和同步技术的制作方法专利名称:线程通信和同步技术的制作方法技术领域:本发明的实施例涉及微处理器架构。更具体地说,本发明的实施例涉及对在一个或多个微处理器或微处理器核心内执行的两个或两个以上线程间的通信和同步的管理。背景技术:可以组织现代计算机程序内的指令以便根据各种指令串或“线程”来执行。通常,在处理资源内执行的指令的线程利用和/或生成一组对于特定线程唯一或至少与特定线程关联的状态信息。但是,各线程也可以共享状态信息或其它信息、例如将由一个或多个线程操作的数据,在此情况下,可能需要将信息从一个线程传递给另一个线程。 在典型的共享存储器的微处理器或处理系统中,各线程通过一个用于将信息存储
2、在存储单元中的线程(发送线程)交换信息,该信息可以由另一个线程(接收线程)读取。通常,接收线程可以在各个时间轮询存储单元,以便检测发送线程何时更新了数据。在某些现有技术的实现中,检测机制可以检测何时写入共享信息,并且可以对此做出响应而向接收线程报警。在后一情形中,检测机制检测共享信息何时写入到存储单元并向接收线程报警,在此情况下,一些现有技术利用监视或“探听”微处理器之间或微处理器与诸如DRAM的存储器之间的互连的特殊硬件检测逻辑。该检测逻辑可以配置成用于监视将在互连之间传送的到特定地址的命令,这可能需要用于每个将受监视的存储单元的检测逻辑。诸如上述的现有技术在管芯面积和功率方面会很费成本。此
3、外,这些现有技术在监视多个存储单元的更新时可能不易调整,从而导致软件开发的难题。有这样一种现有技术,它涵盖了向在微处理器上运行的用户级线程直接报告事件而不需要操作系统的传统干预来通知中断或异常情况的机制。这些用户级中断或用户级异常基于具有这样一种机制,该机制保存关于线程的当前状态的足够信息并将线程重定向到执行“处理程序”代码的预定块以便响应事件。作为处理程序代码的一部分,线程可以执行它想要做的任何工作,然后可以返回到它在事件之前所处的执行路径。也可以选择不返回到该执行路径,而是继续执行完全不同的任务组。发明内容根据第一实施例,本申请提供了一种用于线程通信和同步的设备,包括高速缓存存储器,所述高
4、速缓存存储器包括一致性状态字段以及一个或多个监视位字段,所述一致性状态字段用于存储与对应的高速缓存行有关的一致性信息,所述一个或多个监视位字段指示是否要为状态转换监视所述高速缓存行;检测逻辑,用于在设置了所述一个或多个监视位字段中的监视位时,检测是否已经在一致性状态字段中发生对一致性信息的状态转换。根据第二实施例,本申请提供了一种用于线程通信和同步的系统,包括高速缓存存储器,所述高速缓存存储器包括一致性状态字段以及多个监视位字段,所述一致性状态字段用于存储与高速缓存行有关的一致性信息,所述多个监视位字段用于指示是否要为对应的高速缓存行的状态改变监视所述高速缓存行;第一存储器,所述第一存储器用于
5、存储第一指令和第三指令,所述第一指令用于设置所述多个监视位字段内的位,所述第三指令用于启用检测逻辑以检测对所述一致性状态字段中的一致性信息的状态转换是否已经发生。根据第三实施例,本申请提供了一种用于线程通信和同步的方法,包括使高速缓存行能被监视,看是否有通过发送线程内的指令写入到所述高速缓存行 的数据;对于所述高速缓存行检测对一致性信息的状态转换,以指示对与所述高速缓存行相对应的数据的修改;响应于检测到状态转换而将所述数据递送给接收线程。附图的各图中举例而不是限制性地示出本发明的实施例,附图中,类似的附图标记表示类似的元件,并且其中图I示出可以结合本发明的至少一个实施例使用的处理系统的一部分。
6、图2示出可以根据本发明的一个实施例使用的高速缓存项及对应的一致性(coherency)和监视项。图3是示出根据一个实施例在检测可以指示通过线程执行到高速缓存行的写入的一致性状态转换中涉及的操作的流程图。图4示出可以在其中使用本发明的一个实施例的前端总线(FSB)计算机系统。图5示出按照点对点(PtP)配置布置的计算机系统。具体实施例方式本发明的实施例涉及微处理器架构。更具体地说,本发明的实施例涉及对由一个或多个微处理器或微处理器核心执行的指令的两个或两个以上线程间的通信和同步的管理。本发明的至少一个实施例提供一种通过线程来识别在任何其它线程修改了存储在一组存储单元中的值的情况下要通知的那些存储
7、单元的机制。在一个实施例中,可以通过微处理器内的用户级中断/异常机制来执行通知,或通过计算系统内的某个其它逻辑或软件来实施通知。在一个实施例中,线程间的通信和同步是通过使得能够通知线程有关由一个或多个其它线程访问的高速缓存行的特定高速缓存一致性事件来实现的。与某些现有技术的线程间通信技术不同,本发明的实施例可以利用处理器或计算机系统内的许多已有资源而不是利用特殊的检测硬件来监视发送线程所写入到的特定存储单元。具体来说,至少一个实施例利用早已存在于高速缓存行内的一致性信息来检测信息何时写入到对应于诸如DRAM的存储器内的单元的高速缓存行。更具体地说,当前处于允许本地读取对应于该行的数据值的状态(
8、如“共享”状态)的高速缓存行必须在另一个线程修改对应于该行的任何数据值之前对其采取一致性动作。与某些现有技术的线程间通信技术不同,本发明的实施例可以允许监视其它线程对存储单元所做的许多唯一的更新。具体来说,至少一个实施例利用共同报告机制来指示另一个线程是否已经更新了受监视的一个或多个存储单元。本发明的一个实施例可以利用只用于检测高速缓存行状态转换的最少量的检测逻辑来检测高速缓存行状态转换,并利用用户级中断机制来通知接收线程,以便接收线程可以检索写入到高速缓存行的信息。在其它实施例中,可以将对高速缓存行状态转换的检测作为监视事件或“场景”编程到处理器的状态通道中。在其它实施例中,对高速缓存行状态
9、转换的检测可以响应诸如中断、异常、陷阱、故障等硬件机制而发生。在一个实施例中,可以通过将一个或多个监视位包含在高速缓存行内、或以其他方式将一个或多个监视位与高速缓存行关联来使一个或多个高速缓存行被监视或将这个或这些高速缓存行“标记”为将要被监视的高速缓存行。为了设置监视位,至少一个实施例可以利用命令或指令或某些其它方式。此外,可以利用多个监视位,以便用户的代码的某些 部分可以独立于该代码的其它部分来配置所监视的高速缓存行。在检测到高速缓存行状态之后,可以经由清零命令或指令或某些其它方式来将监视位清零(clear)。图I示出可以结合本发明的至少一个实施例使用的处理系统的一部分。具体来说,图I示出
10、处理器或处理核心101,该处理器或处理核心101具有与它关联的高速缓存存储器105,该高速缓存存储器105可以由在处理器/核心101或某个其它处理资源(未示出)内执行的指令的一个或多个线程共享。在本发明的一个实施例中,高速缓存存储器105对于线程来说就像是由那个线程独占地使用一样,以便线程可以将信息存储在高速缓存行内而无需考虑正在使用该高速缓存行的其它线程。图I中还示出存储器110,该存储器110可以由DRAM或诸如SRAM、磁盘或紧密盘等的某些其它存储器技术组成。在一个实施例中,高速缓存存储器105包括镜像存储器110的各项的子集的项。因此,高速缓存存储器可以包括用于通知从高速缓存存储器访问
11、数据的代理有关特定高速缓存行(例如,图I中的高速缓存行“A”)何时包含无效数据(“I”状态)或该高速缓存行何时被修改(“M”状态)的一致性信息,从而使得在高速缓存行可以在各个代理、线程或程序之间共享时(“S”状态),以及在特定线程、代理或程序独占地使用该高速缓存行时(“E”状态),它不会包含与对应的存储器项(例如,图I中的存储器项“A”)相同的数据。图2示出可以根据本发明的一个实施例使用的高速缓存项和对应的一致性和监视项。具体来说,高速缓存200的高速缓存行201可以在字段203存储对应于该高速缓存行的数据,在字段205存储地址标签和一致性信息,并在字段207存储监视信息。为了使对高速缓存行的
12、状态改变能被监视,在监视信息字段中设置一个或多个位。此外,如果高速缓存由多个硬件线程共享(例如,每个硬件线程运行独立的软件线程),那么取决于线程内有多少个实例可以监视高速缓存行,每个线程可以对应于监视信息字段内的多个位。例如,在图2中,标为“a”的监视位对应于第一个线程,在该线程内只有三个实例(可以重复)监视对应的高速缓存行。标为“b”的监视位对应于第二个线程,该线程有两个实例(可以重复)监视对应的高速缓存行。标为“d”的监视位对应于第三个线程,在该线程内只有一个实例(可以重复)监视对应的高速缓存行。因此,对应于每个线程内将监视对应高速缓存行的每个实例的每个位可以独立地设置或清零。当然,高速缓
13、存行中存在的监视位字段越多,一次就有越多的线程和线程内越多的实例可以监视高速缓存行。在一个实施例中,高速缓存行包含六个监视位字段,从而允许两个线程在每个线程内的三个不同的实例监视高速缓存行。在其它实施例中,可以使用更多或更少的位字段来启用可以监视高速缓存行的更多或更少的线程或线程内的实例。在一个实施例中,将由共享高速缓存的一个线程相对于共享相同高速缓存的其它线程执行的存储器更新与来自不共享该高速缓存的其它线程的一致性事件一样处理。例如,如果一个线程更新了存储在高速缓存行内的一个值,那么设置了监视位的其它线程可以检测该更新,并通过诸如用户级中断机制的 中断机制通知对应的线程。在其它实施例中,中断
14、机制可以是用户看不见的中断机制。在一个实施例中,可以在处理器内或在高速缓存存储器内的逻辑中执行两个独立的命令或指令,以便分别设置监视位和将监视位清零。例如,在一个实施例中,可以执行“加载监视”指令,该指令具有对应于高速缓存行的地址,并具有作为属性要写入到监视位的对应数据。类似地,在一个实施例中,可以执行“清零监视”指令,该指令具有对应于高速缓存行的地址,并具有作为属性要写入以便将监视位清零的对应数据。在一个实施例中,取决于指令的监视位属性的值,利用一个指令来设置监视位和将监视位清零。在另一个实施例中,利用一个指令来将每个高速缓存行处的所有特定属性清零。对已经标记为将受监视(例如,在一个实施例中
15、,通过设置对应的监视位)的高速缓存行的状态转换的检测可以用多种方式实现。例如,在一个实施例中,可以利用诸如执行布尔“或”函数(如“或”门)的逻辑的逻辑来检测高速缓存行是否设置了它的任何对应的监视位,如果有,那么检测高速缓存行的一致性位(图I中标为“c”)是否发生了状态转换,以指示另一个线程执行了对那个高速缓存行的写入。在一个实施例中,从允许本地读取对应数据的任何状态到I状态的状态转换可以指示线程已经或者正打算将信息写入到对应的高速缓存行。此外,还可以检测由共享高速缓存的另一个线程执行的对高速缓存行的写入以作为更新。在其它实施例中,高速缓存行的一致性状态转换可以触发处理硬件内的中断、异常、故障、
16、陷阱或其它信令机制,以便指示线程已经将信息写入到高速缓存行。在其它实施例中,可以利用其它机制来指示一致性状态转换,该一致性状态转换指示线程已经将数据写入到特定高速缓存行。在一个实施例中,在每个线程的基础上监视事件,在该实施例中,可以定义称为“场景”的事件的逻辑组合以便检测可以指示已经将数据写入到高速缓存行的高速缓存行的一致性状态转换信息。在此情况下,称为“通道”的处理器状态存储区域可以编程为执行与上述用于检测高速缓存行的一致性状态转换的硬件和/或软件基本相同的逻辑功能。该场景的发生可以触发软屈服(yield)事件,如故障类或陷阱类屈服,它可以调用屈服事件处理程序来处理该场景。在一个实施例中,用于通知线程有关指示所监视的行已经被修改或者不久将被修改的事件的机制可以具有掩码,该掩码可以编程为监视位的任意一个集合。例如,在一个实施例中,通过在通道掩码和将写入到通道的编程位之间执行诸如逻辑“与”运算的布尔运算来将通道编程。在一个实施例中,该机制是用户级中断机制,而在其它实施例中,该机制是用户看不见的中断机制。在一个实施例中,用于通知线程有关指示所监视的行已经