用于自主自适应互斥体的方法和系统的制作方法

文档序号:6431661阅读:94来源:国知局
专利名称:用于自主自适应互斥体的方法和系统的制作方法
技术领域
本发明涉及一种改进的数据处理系统,特别是涉及多处理协调的方法和设备。更具体地说,本发明提供了在任务管理或控制期间使用互斥锁(互斥体)处理调度或者资源分配的方法和设备。
背景技术
现代操作系统支持多程序设计(multiprogramming),从而多个程序看起来似乎在具有单个中央处理单元(CPU)的单一计算装置上并行运行,或可能在对称的多处理器(SMP)机中的多CPU上并行运行。并行运行的现象是利用串行化运行(也被称之为“时间分片(time slicing)”)实现的即装置的操作系统允许多个程序之一在某个有限时段即时间片(timeslice)内独自地运行,然后在其后的时段内独自运行多个程序中另外一个。由于程序间切换非常快地发生,因此这些程序看起来好像是并行运行,即使它们实际上为串行化运行也是如此。当用于一个程序的时间片结束时,该程序就进入暂停或者“休眠”状态,并且另一个程序“唤醒”并开始运行。
改善单个程序或者单个处理的性能的一种方法是把程序或者处理划分成多个运行路径,通常将其称为似乎并行地运行的“线程”。这样的程序或者处理通常被称作“多任务”或者“多线程”。在每个线程独自使用CPU期间,操作系统为其提供时间片。操作系统通常提供内建机构,以非常快速而有效的方式在多个并行程序之间和/或多个线程之间进行切换。某些类型的CPU提供对多线程的操作系统的直接硬件支持。由于本发明的原理等同地应用于可以包括单线程或多线程的并行线程和并行程序,所以这里使用的术语“线程”可以指非多线程程序或多线程程序内的一个线程。
当线程运行时,它们总是需要存取数据处理系统内的资源,比如存储器、数据结构、文件或者其它资源。打算被多线程共享的资源必须以这样一种方式被共享保护被包含在资源内的或者经过资源的数据的完整性。实现的方式之一是串行化运行正在争用共享资源的线程。当第一线程已经使用一个资源时,需要资源的第二线程必须等待到该资源不再被使用,这种情况通常作为第一线程已经成功地完成其资源使用的结果而发生。
操作系统通常提供多个机构来协调多线程的共享资源的使用。尽管应用程序开发商可以创建她自己的特定机构来确保对共享线程的串行化存取,但是应用程序开发商通常利用操作系统所提供的机构或标准化软件库内的机构,把共享资源的控制逻辑嵌入到多线程中。操作系统特定机构的使用是有利的,因为它允许操作系统把资源争用信息并入时间片功能中。因此,操作系统根据线程对资源的需要和争用来把时间片分配给线程,而不是通过使线程严格地周期使用时间片。
串行化存取共享资源的普通机构是互斥体或者互斥锁,互斥锁是具有以下两种状态的简单锁锁定和解锁。该锁通常被实施为经由例程的标准化库中的软件子例程或者模块创建、毁坏或修改的数据对象或数据结构。互斥体可以逻辑地关联于共享资源,以使得成功锁定互斥体的线程被说成是互斥体的当前拥有者。只有拥有特定互斥体的线程才将存取与特定互斥关联的共享资源,并且只有拥有特定互斥体的线程才可以解锁该特定互斥体。因此,存取共享资源的线程内的代码临界区(critical section of code)由锁定互斥体的调用以及解锁该互斥体的调用来界定。如果线程试图锁定互斥体但失败,那么它必须等待,直至在开始运行存取共享资源的代码临界区之前能够锁定互斥体。如果在通过协调处理共享的存储器内分配了互斥体,则互斥体可以用来同步单一处理或交叉多处理内的多个线程。
在获取互斥体失败后,线程等待该互斥体的方式取决于实施互斥体机构的方式。三种类型的锁被广泛使用阻塞锁、自旋锁以及阻塞锁和自旋锁的某些组合。如果已获取到互斥体并且另一个线程需要锁定该互斥体,则实施为阻塞锁的互斥体使等待的线程停止运行或暂停,即变成“休眠”。相反,自选锁不将等待的线程置于“休眠”。或者,等待的线程运行循环,从而重复地请求该锁直至它被当前拥有互斥体的线程释放。该循环可以包含空循环、迭代循环,即“忙循环”或“忙等待”,它递增或者递减变量,使线程不立即重新请求互斥体,而是等待取决于迭代循环的长度的时间段。
与阻塞锁或自旋锁不同,互斥体通常被实施为带有超时的自旋锁,它是将阻塞锁特征与自旋锁特征相结合的锁。具有超时的自旋锁在有限时间段旋转,同时允许线程试图再次获得该锁。如果有限时段期满而又未获得该锁,则锁定该线程。用于超时的时段通常是通过在忙等待循环中运行固定次数的迭代来控制的。除了一个锁例程和解锁例程外,软件库还通常包含一个“trylock(试锁)”子例程,在其中,如果未获得互斥体,即不强迫请求例程等待互斥体变成可用,则把控制返回到请求子例程。
阻塞和旋转的行为具有它们的优点和缺点。阻塞快速地暂停等待线程的运行。然而,阻塞的行为可以暂停将立即获得锁的线程,并且线程的暂停需要明显的开销,例如必须保存线程的运行场景。自旋消耗比如CPU时间和存储器高速缓存行这样的资源,但是如果审慎地选择自旋周期的长度,则等待线程通常可以较快地获得互斥体,从而允许自旋操作比阻塞操作消耗更少的计算资源。然而,自旋与阻塞之间的选择取决于许多因素,特别是取决于等待的线程正在运行的装置的计算环境。
为了改善性能,自旋锁超时通常是可调整的。某些操作系统内核允许自旋超时的长度根据整个系统范围(system-wide)调整。在其它情况下,自旋锁超时可基于每个应用(per-application)来调整。自旋锁超时的值可以从提供运行时间或者环境变量值的配置文件或者特性文件中读取。然而,找到自旋锁超时的适当值可能是由系统管理器执行的、耗时的任务。
因此,拥有一个被实施为不需要专门的手工调谐处理的、带有超时的自旋锁的互斥体总是有好处的。

发明内容
本发明提供了一种在数据处理系统中管理互斥体的方法。对于每个互斥体,维持平均获取成本,该平均获取成本指示线程试图获得互斥体而引起的计算资源的平均消耗。如果线程试图获取被锁定的互斥体,那么线程根据限制条件和此时用于互斥体的平均获取成本值进入自旋状态或者休眠状态。维持特定线程的当前获取成本值,该成本值代表在获取互斥体的最初试图之后和在获取互斥体之前由线程消耗的计算资源。当线程获得互斥体时,特定线程的当前获取成本值包含在平均获取成本值中。


在所附的权利要求书中限定了被认为是本发明特征的新颖特征。通过参考以下结合附图的详细说明,将会更好地理解本发明本身和其它目的以及本发明的优点。
图1A图示了数据处理系统的典型网络,其中每个数据处理系统都可以实施本发明;图1B图示了可以在数据处理系统内使用的典型计算机结构,其中在该数据处理系统中可以实施本发明;图2A图示了一个方框图,该方框图显示了在利用互斥体的典型多线程应用程序内的各部件逻辑结构;图2B图示了一个方框图,该方框图显示了支持多线程应用程序运行的典型数据处理系统中各部件的逻辑结构,其中多线程应用程序使用由操作系统内核支持的互斥体;图3图示了自旋锁互斥体的一种典型实施;图4A图示了根据本发明实施例的一个显示互斥体数据结构的方框图,该互斥体数据结构已经被扩展到包括支持自适应互斥体的信息;图4B图示了一个显示某些数据字段的方框图,该数据字段可以用于特定线程的、与互斥体有关的数据结构,以支持自适应互斥体的获取;图5A-图5C图示了一组显示一个处理的流程图,通过该处理,一个线程获取自适应互斥体,同时协助跨越所有尝试计算运行平均获取成本,以获得自适应互斥体;和图6图示了一个显示处理的流程图,通过该处理,线程释放自适应互斥体。
具体实施例方式
通常,可以包括或者涉及本发明的装置包含广泛的数据处理技术。因此,在详细描述本发明之前,先说明分布式数据处理系统内的硬件和软件成分的典型结构。
参见附图,图1A图示了数据处理系统的典型网络,其中的每个数据处理系统都可以实施本发明的一部分。分布式数据处理系统100包含网络101,它是可以用来在一起连接到分布式数据处理系统100内的装置与计算机之间提供通信链路的媒介。网络101可以包括永久连接件,比如线路和光纤电缆,也可以包括通过电话或者无线通信产生的临时连接。在所示的实例中,服务器102和服务器103与存储单元104一起连接到网络101。此外,客户机105-107和服务器102-103可以由各种计算装置(比如主计算机、个人计算机、个人数字助理(PDA)等)代表。分布式数据处理系统100可以包括未示出的附加服务器、客户机、路由器、其它装置和对等式结构。
在所示的实例中,分布式数据处理系统100可以包括具有代表全球网络汇集的网络101的因特网;和使用各种协议彼此通信的网关,这些协议比如是简便目录存取协议(LDAP)、传输控制协议/网际协议(TCP/IP)、超文本传输控制协议(HTTP)、无线应用协议(WAP)等。当然,分布式数据处理系统100还可以包括多种不同类型网络,比如内联网、局域网(LAN)或者广域网(WAN)。例如,服务器102直接支持客户机109和网络110,以组建无线通信链路。网络激活电话机111经由网线链路112连接网络110,而PDA113经由无线链路114连接网络110。电话机111和PDA113也可以使用建立所谓个人域网(PAN)或者个人专用(ad-hoc)网的合适的技术如蓝牙无线技术,经由无线链路115在它们之间直接传送数据。按照同样的方式,PDA113可以经由无线通信链路116把数据传送到PDA107。
本发明可以在各种硬件平台上实现。图1A打算作为不同种类计算环境的一个实例,不打算作为本发明的结构限制。
参见图1B所示的如图1A所示的数据处理系统的典型计算机结构的示意图,该计算机结构可以实施本发明。数据处理系统120包含一个或多个连接内部系统总线123的中央处理单元(CPU)122,该内部系统总线123互连随机存取存储器(RAM)124、只读存储器126和输入/输出适配器128,适配器128支持各种I/O装置比如打印机130、盘单元132或其它未显示的装置,比如音频输出系统等。系统总线123还连接提供接入通信链路136的通信适配器134。用户接口适配器148连接各种用户装置,如键盘140和鼠标142,或者连接未显示的其他装置,如触摸屏、摄像头(stylus)、麦克风等。显示适配器144把系统总线123连接到显示装置146。
本领域熟练技术人员将会明白,图1B中的硬件可以根据系统实施而变化。例如,该系统可以具有一个或多个处理器(比如英特尔奔腾处理器和数字信号处理器(DSP))以及一种或多种易失性和非易失性存储器。其它外围设备可以和图1B所示的硬件一起使用,或者替代图1B中所示的硬件。所示实例不用来限制本发明的结构。
除了能够在各种硬件平台上实施本发明外,还可以在各种软件环境中实现本发明。典型的操作系统可以用来控制每个数据处理系统内的程序运行。例如,一个装置可以运行Unix操作系统,而另一个装置包含一个简单的Java运行时间环境。代表性计算机平台可以包括浏览器,浏览器是一个公知软件应用程序,用于访问各种格式的超文本文件,比如图形文件、字处理文件、可扩展标记语言(XML)、超文本标记语言(HTML)、手持装置标记语言(HDML)、无线标记语言(WML)和各种其它格式和类型文件。
本发明可以在各种硬件和软件平台上实施,如在图1A和图1B所述的包括对称多处理器(SMP)机上实施。尽管本发明不需要图1A和图1B中所述的所有部件,但是这些元件可以由设嵌入本发明的一个部件(例如操作系统、应用程序或者某个其它部件)使用。此外,本发明可以在这样一个计算环境中实施,在该计算环境中,各种部件(诸如显示装置)间接地用来支持本发明,以便(例如)允许系统管理员配置参数和元素。
更具体地说,尽管如此,但是本发明针对一种改进的互斥体,该互斥体可以被实施于一个操作系统内、一个应用程序内,或者以某种其它方式实施于一个数据处理系统内。在详细说明改进的互斥体之前,首先描述典型互斥体的使用。如上所述,应用程序开发商可以创建如图2A所示的特定应用程序互斥体,但是应用程序开发商通常采用如图2B所示的、由操作系统提供的机构或者标准化软件库中的机构。可以以各种特定应用或者非特定应用形式实施本发明,而又不影响本发明的范围。
参见图2A,其中的方框示了在利用互斥体的典型多线程应用程序中的各部件的逻辑结构。多线程应用程序202包括多个线程,如线程204和线程206。应用程序可以实施它自己的、由互斥体数据结构210支持的互斥体功能208,以便对于由包括应用程序的线程共享的资源,使它自己的线程的操作串行化,而不依赖于由操作系统提供的、或者标准软件库内(诸如POSIX“p线程(pthread)”库)的互斥体功能。
参见图2B,其中的方框示了典型数据处理系统的各部件的逻辑结构,该典型数据处理系统支持使用由操作系统内核支持的互斥体的多线程应用程序的运行。计算机220支持一个包含内核级功能222的操作系统,该内核级功能222控制分别包括线程228和230的多线程应用程序224和226的运行。内核中的线程调度器232利用线程调度器数据结构234确定线程何时运行以及何时被暂停,线程调度器数据结构234可以包含协助线程调度任务管理的数据结构,例如,数据结构可以包括FIFO(先进先出)队列,比如与各种线程状态关联的队列,例如准备运行队列、休眠队列、I/O阻塞队列、互斥体等待队列,或者其它状态。驻留在内核中的互斥体管理例程236(或利用内核级特权运行的内核扩展的程序)提供创建、修改和毁坏诸如互斥体数据结构238内反映的互斥体的功能。如上所述,尽管如此,互斥体管理例程和互斥体数据结构也可以按应用级而不是按内核级予以实施,本发明可应用于任何一种实施的形式。在下文中,术语“休眠”被认为等同于“暂停”。
参见图3所示介绍自旋锁互斥体的典型实施。处理开始于线程请求获得互斥体(步骤302),在下文中,术语“获得”、“保留”、“占有”、“拥有”,或者“锁定”互斥体被认为是等同的。然后确定互斥体是否被释放和解锁(步骤304),如果不是,则通过绕互斥体自旋来检查线程是否已经使用了可配置时间量(步骤306)。如果不是,则线程执行一个忙等待循环(步骤308),即当线程等待互斥体变成可用时,在一个循环中自旋。如果线程先前已经经过步骤302-308,则线程通过完成另一个忙等待循环,继续执行自旋操作。在自旋某个时段之后,线程重复步骤302。
如果互斥体在步骤304是自由的,则为该线程而锁定互斥体(步骤310),并且线程可以开始访问共享资源(步骤312),而不可能与另一线程碰撞以及损坏与共享资源关联的数据的完整性。在线程已经执行它的关于共享资源的操作之后,线程请求将释放互斥体,并解锁互斥体(步骤314),从而结束该处理。在互斥体已经被解锁之后,可以由其它并发运行的线程使用互斥体。如果线程通过绕互斥体自旋已经使用了如步骤306所确定的可配置时间量,则线程例如通过调用造成线程进入休眠状态的内核功能而在互斥体上休眠(步骤316)。线程可以休眠可配置的时段,或者内核可以有当互斥体被解锁时唤醒线程的能力。在任何一种情况下,当线程被唤醒之后,线程再次试图获得互斥体。
如上所述,在现有技术中,自旋锁超时是可调整的,以便尽量改善获取互斥体的处理性能。某些操作系统内核允许基于整个系统范围(system-wide)调整自旋超时的长度。在其它情况中,自旋锁超时可基于每个应用程序调整。然而,找到自旋锁超时的适当值可能是一件费时的试验任务。现在回到本发明,本发明针对获取这样一个互斥体的处理,该互斥体以每个互斥体(per-mutex)为基础自动自适应在获得互斥体的在前尝试期间已经消耗的计算资源。剩下的附图在下文中说明本发明的各个实施例。
参见图4A,所示的方框示说明了互斥体数据结构,该数据结构已经被扩展到包含支持本发明实施例的自适应互斥体的信息。应当注意的是,所示互斥体数据结构中信息数据项可以被存储在其它数据结构中,而且图4A中的互斥体数据结构仅仅是支持本发明实施例的可以在逻辑上相互关联的各种信息数据项的逻辑结构的一个实例,其它信息数据项可以被包含在互斥体数据结构中。
互斥体数据结构402包含互斥体404,互斥体404是为反映互斥锁的锁定或解锁状态而触发的数据值。如果互斥体被锁定,则锁定的线程标识符406指示由操作系统分配给当前拥有互斥体(即已经锁定互斥体)的线程的线程标识符。如果该互斥体被锁定以及存在等待其释放的线程,那么等待的线程列表408包含等待互斥体释放的线程的线程标识符。作为选择,等待的线程列表408可以包含一个记录列表,其中每个记录代表一个正在等待互斥体的线程,并且每个记录可以包含下面将要详细说明的线程管理信息。互斥体数据结构402还包含平均获得成本410,对于存储已经获得互斥体404的线程的平均成本或者计算资源的消耗,该平均获得成本尤为重要,以下将更详细说明。
参见图4B,所示方框图显示了本发明实施例的某些数据字段,这些数据字段可以在特定线程、与互斥体有关的数据结构中使用,以支持自适应互斥体获取。图4B所示的数据字段可以代表图4A所示的等待线程列表408内特定线程记录中所包含的数据字段。作为选择,图4B中显示的数据字段可以被存储在操作系统管理其特定线程操作的线程控制块内。与自适应互斥体上操作结合使用的数据字段随本发明不同实施例而改变。图4B所示的数据字段还用来在图5A-图6中图示说明可以执行调度线程运行的附加的线程有关的管理。在任何情况下,图4B所示的数据字段是正在试图获取特定自适应互斥体的特定线程所特有的。可以假定,当特定线程每次试图获取已给定的自适应互斥体时,初始化这些数据字段。
线程标识符420指示由操作系统分配给特定线程的线程标识符。等待标志422指示特定线程正在等待获取自适应互斥体。忙等待标志424指示线程在等待自适应互斥体的时候,已经进入忙等待或自旋状态。休眠标志426指示线程在等待自适应互斥体的时候,已经进入休眠状态。休眠开始时标428是指示线程进入休眠状态时的时间值,休眠结束时标430是指示线程退出休眠状态时的时间值。附加数据字段432包含线程的当前互斥体获取成本的值即某些度量,以指示在当前时间点之前为获取特定自适应互斥体的当前尝试中已经消耗的计算资源的量。
参见图5A-图5C,所述的一组流程图显示了本发明实施例的,一个线程在通过获取自适应互斥体的所有尝试协助运行平均获取成本的时候,获取自适应互斥体的处理。图5A-图5C图示说明了各种互斥体获取阶段,或者在试图获取自适应互斥体的时候线程可能经历的各种互斥体获取状态。图5A主要说明了能够锁定一个处于解锁状态的自适应互斥体的线程的处理。图5B显示了线程进入自旋状态,即线程自旋或者忙等待已锁定的自适应互斥体的处理,而图5C显示了线程进入休眠状态,即线程休眠于已锁定自适应互斥体的处理。
参见图5A,处理开始于进入锁定自适应互斥体的程序(步骤502),例如,开始于从特定线程调用该程序。在该实施例中,该程序被称之为“自适应互斥体管理例程”,它可以作为通过特定操作系统调用进行访问的内核级程序而存在,或者作为仅仅可以用特定特权运行的其它类型程序而存在。作为选择,一个应用可以实施本发明的一个实施例,在此情况下,自适应互斥体管理例程可以被编译成应用程序的目标代码。
为了反映线程的最当前的状态,例如为了线程调度器的利益,设置一个标志值来指示该线程正在等待互斥体(步骤504)。各种特定线程数据值可以被初始化,比如初始化图4B所示的数据值。特别是,可以把获取感兴趣的特定自适应互斥体的线程当前获取成本设定为零(步骤506)。
然后确定自适应互斥体是否已经被锁定(步骤508)。如果互斥体还没有被锁定,则为该线程锁定互斥体(步骤510)。需要注意的是,步骤508和步骤510应当被实施为原子操作(atomic operation),即被实施为不能中断的操作。各种公知技术都可用来执行关于互斥体的原子操作。为了反映线程的最当前状态,把一个线程标识符存储在所需要的任何数据结构中,以指示已经获取互斥体的线程的标识(步骤512),并且清除等待标志值,以指示该线程不再等待互斥体(步骤514)。
然后检索自适应互斥体的平均获取成本以及用于该互斥体的线程当前获取成本(步骤516)。利用这些已检索值,计算和存储自适应互斥体的平均获取成本的新值(步骤518)。自适应互斥体管理例程随后返回到调用程序(步骤520),并结束获取自适应互斥体的处理。用来计算平均获取成本的新值的算法可以随本发明不同实施例而变化,这不影响本发明的范围。下面详细说明算法的实例。
在步骤508,如果自适应互斥体已经被锁定,则确定互斥体平均获取成本是否超出门限值或者是否满足特定限制条件(步骤522)。下面更详细说明门限值或者其它的条件形式。如果互斥体平均获取成本未超出门限值或者不满足特定条件,则处理转移到图5B所示的运行块。如果线程的平均获取成本超过门限值或者满足特定条件,则处理转移到图5C所示的运行块。更具体地说,图5B图示说明了线程绕已锁定的自适应互斥体自旋的运行块。图5C图示说明了线程休眠于已锁定的自适应互斥体的运行块。
现在参见图5B,运行块通过设置一个标志值而启动,该标志值指示线程正在自旋于或者正在忙等待于自适应互斥体(步骤530),从而反映线程的最当前状态。如果需要,则初始化忙等待循环(步骤532),并且进入、运行和完成忙等待循环(步骤534)。例如,忙等待循环可以包括不执行任何实质上有用的工作的空迭代循环。
然后以某种度量形式计算就计算资源来说的运行这个特定忙等待循环的成本(步骤536)。计算任何给定的忙等待循环的算法可以随本发明的不同实施例变化,这不影响本发明的范围。下面更详细讨论计算忙等待循环的计算成本的算法的一个实例。如果该成本已经被计算和保存,或者如果该成本已经得知,例如通过预配置值得知,则只检索该成本而不计算该成本。
然后通过添加为最近完成的自旋循环获得或计算的成本,更新用于自适应互斥体的线程获取成本的值(步骤538),从而产生用于自适应互斥体的新的、特定线程的当前获取成本。照此方式,保持互斥体的线程获取成本的运行总成本。尽管该成本值可以被描述为总值,但是应当注意,成本值代表一个近似总值,各种指令执行等也许未被包含于成本值中。由于线程已经完成忙等待循环,因此指示线程正在自旋或者忙等待于自适应互斥体的标志值被清零(步骤540),从而反映线程的最当前状态,并结束该运行块。
现在参见经由图5A的步骤522到达的图5C,运行块通过设置一个指示线程正休眠于自适应互斥体的标志而启动(步骤542),由此反映线程的最当前状态。例如通过系统调用,获得一个用于当前时间点的时标(步骤544),并且以适当的数据结构存储该时标,以作为线程进入休眠状态的时间,即线程的休眠开始时间(步骤546)。然后线程进入休眠状态一个时段(步骤548)。线程可以休眠一个预配置的时段,但是最好是线程休眠,直至该线程被来自另一个线程的已触发的睡醒信号唤醒,或者以某种其它方式(例如线程调度器的动作)唤醒。
在某个时间点,线程退出休眠状态(步骤550)。为当前时间点获取一个时标(步骤552),该时标代表线程退出休眠状态的时间,即线程休眠停止时间。
然后,根据线程休眠开始时间和线程休眠停止时间,以某种度量形式计算该特定休眠周期的计算成本(步骤554)。计算任何给定休眠周期的成本的算法可以随本发明不同实施例而变化,这不影响本发明的范围。下面更详细讨论计算休眠周期的计算成本的算法的实例。通过添加为最近完成的休眠周期获得或计算的成本,更新自适应互斥体的线程获取成本的值(步骤556),从而产生用于自适应互斥体的新的、特定线程的当前获取成本。以此方式,维持用于互斥体的线程获取成本的运行总值。尽管成本值可以被描述为一个总值,但是应当注意,成本值代表一个近似总值,因为各种指令运行等也许未被包含在成本值中。由于线程已经完成了休眠周期,因此指示线程正休眠于自适应互斥体的标志值被清零(步骤558),由此反映线程的最当前状态,并且结束该运行块。
计算线程当前获取成本的算法可以改变,可以使用反映计算资源的线程消耗的任何适当特征。例如,如果线程自旋于已锁定的自适应互斥体,则可以根据线程运行于忙等待循环中的迭代次数来计算计算成本。如果线程休眠于已锁定的自适应互斥体,则可以根据线程处于休眠状态的时间量计算计算成本。线程被认为是,在休眠状态期间根据线程占据各线程管理结构内的诸多项目的实事造成的计算成本,即消耗计算资源,其中所述线程管理结构可以有有限数量的项目。此外,即使线程处于休眠状态,也必须管理线程,所以在线程的休眠期间对于该线程执行各种线程管理功能,例如,确定线程是否应当退出休眠状态,然后是否调度以运行。
互斥体的平均获取成本和线程的当前获取成本是反映计算资源的物理消耗的两个度量值。可以代数或逻辑地计算、比较和合并互斥体平均获取成本的两个不同值。为此,应当以某种方式标准化每个值,使每个成本值代表关于相同量纲(例如,秒、毫秒、迭代(iteration)、千迭代(kilo-iteration)等)的量,由此允许比较及合并成本值。
例如,本发明的实施例可以依据迭代次数计算计算成本,其中迭代次数是当线程自旋于已锁定自适应互斥体时容易获得的量。如果线程休眠于一个已锁定的自适应互斥体,则线程把线程处于休眠状态的时间量转换成多个迭代,例如,使用转换因子将其转换成多个迭代,该转换因子涉及一个线程可以在一秒钟不中断地运行的迭代次数。例如,可以用每秒一百千迭代(即每毫秒1百次迭代)转换因子把休眠6秒钟的成本值转换成自旋的600000次迭代。
通过基准检测(benchmark)一个迭代循环,可以容易和试验地确定该转换因子值。操作系统中的一个特定功能或者在软件运行的装置的启动或者初始化阶段期间,配置系统的一个特殊模块可以自动地执行该测量。然后可以例如通过系统数据区或者配置文件,提供转换因子值以及用来支持系统上应用程序运行的其它系统参数,从而避免时间消耗、手控处理,该手控处理通常由系统安装商或者系统管理员执行。
参见图6,一个流程示说明了线程释放自适应互斥体的处理。图6通过显示一个正在释放自适应互斥体的线程来补充图5A-图5C,其中使用图5A-图5C所示的处理在前获得了所述的自适应互斥体。处理开始于进入解锁一个自适应互斥体的一个例程时(步骤602)。在检查确保正在请求解锁自适应互斥体的线程是在前已经锁定自适应互斥体的线程之后,再解锁自适应互斥体(步骤604)。需要注意的是,步骤604应当被实施为原子操作。程序随后清除或者删除在前存储在一个数据结构中的、指示在前锁定互斥体的线程的标识的线程标识符(步骤606)。
然后确定正在等待自适应互斥体的任何线程是否正休眠于该自适应互斥体(步骤608)。如果是,则向正休眠于自适应互斥体的线程发送一个睡醒信号(步骤610),例如,通过将调度线程运行的系统调用发送该信号。如果多个线程都休眠于该自适应互斥体,那么可以使用适当算法来选择将试图锁定自适应互斥体的下一个线程。解锁例程随后返回到调用程序(步骤612),从而结束解锁自适应互斥体的处理。
从以上提供的详细说明中,将会明白本发明的优点。本发明自动地调整关于特定的锁定互斥体的线程行为,以便取决于关于互斥体在前动作的方式,使线程进入自旋状态或者进入休眠状态。
在本发明中,每个自适应互斥体具有通过许多线程为获取互斥体的许多尝试而计算的相关联的平均获取成本。换言之,对于每个自适应互斥体,和对于线程已经尝试获取互斥体的每一次,计算用于该特定尝试的计算成本。如上所述,该值被标识为线程当前获取成本,它是在当前时间点之前,特定线程的可能的多次尝试的计算成本的运行总值。当线程最终获取互斥体时,在计算上利用平均获取成本并以某种方式包含线程的当前获取成本,所述平均获取成本与该线程刚刚获取的特定互斥体相关联。
在现有技术中,当锁定一个互斥体时,一个线程通常在一个锁定互斥体上执行自旋超时操作,由此使线程在按系统级或者应用级配置的时段之后进入休眠。而对于本发明,线程是否应当自旋于或者休眠于已锁定的自适应互斥体的确定取决于特定互斥体使用的历程。
在本发明中,特定自适应互斥体的平均获取成本是确定线程应当自旋于已锁定自适应互斥体还是休眠于已锁定自适应互斥体的焦点。在图5A的步骤522,将该时间点的特定自适应互斥体的平均获取成本与门限值进行比较。在一个可替换实施例中,不是执行简单的比较,而是执行更复杂的计算或者条件检查。如果此时间点的特定自适应互斥体的平均获取成本小于门限值,则线程自旋于已锁定的自适应互斥体。如果此时间点的特定自适应互斥体的平均获取成本大于或等于门限值,则线程休眠于已锁定的自适应互斥体。照此方式,正在尝试获取该特定互斥体的线程的行为适应于该特定互斥体使用的历程。
如上所述,用来计算例如图5A中步骤518的平均获取成本的新值的算法随本发明不同实施例而改变,这不影响本发明的范围。例如,可以使用以下算法计算新的平均获取成本。如果当前平均获取成本为零,则将新的平均获取成本设置为等于线程的当前获取成本,如果当前平均获取成本不为零,那么从线程的当前获取成本减去平均获取成本。该结果被加权因子整除(div功能)。加权调整过的结果被加到或减去前一平均获取成本,其中加或者减的选择分别取决于第一减法运算是正还是负,即保留第一减法运算结果的符号。
加权因子可以被选择为方便的2的幂,例如64,由此允许除法实施为简单的比特位移。该算法是有利的,因为它不可能在固定的精密系统中溢出,并且该算法仅需要三个负荷、三个单周期指令(即两个加和一个比特位移)以及一次存储。此外,该算法仅使用永久存储器的单个字,并且它是真正可伸缩的,因为它是成本不依赖已经锁定的次数的固定时间操作。
尽管该算法减少了需要维持平均的工作量并且增加了计算真平均的效率,但是该算法只是计算近似平均,而不是计算真平均。然而在许多方式之中,由于平均超时展现的惯性行为,该近似平均更适合于预测未来平均成本。
在自旋或休眠判决中使用的门限值的选择,即与图5A的步骤522判决中平均获取成本的比较,可以随用来计算平均获取成本的算法的选择而变化。在上述计算平均获取成本的算法中,当获取自适应互斥体时,如果获取线程的当前获取成本小于当前平均获取成本,则减少平均获取成本。为了确保最近计算的平均获取成本精确地反映关于自适应互斥体的行为的历程行为,门限值被优先选择为稍大于当线程进入休眠状态然后被立即唤醒时发生的计算成本。
例如,如果线程休眠然后立即唤醒,则线程的当前获取成本将比较小,以及把线程的当前获取成本并入到新计算的平均获取成本中将导致更小的平均获取成本。如果该情况重复发生,则平均获取成本将接近线程休眠然后立即唤醒时引发的计算成本。如果门限值被选择为稍大于当线程休眠然后立即唤醒时引发的计算成本,则随后执行自旋或休眠判决的任何线程将最终选择自旋,而不是休眠。照此方式,本发明调整了关于特定自适应互斥体的线程的行为。在适当和有效的情况下,线程在锁定的自适应互斥体上运行一个自旋循环,并且在适当和有效的情况下,线程休眠于已锁定的自适应互斥体。
如果门限值选择为稍大于当线程进入休眠状态然后立即被唤醒时引发的计算成本,则可以通过测量线程休眠和醒来所需的时间,简单和经验地确定该门限值。该测量可以由操作系统中一个特定功能自动地执行,或者由在软件运行的装置启动或初始化阶段期间配置系统的特定模块自动地执行。然后,例如通过系统数据区或者配置文件,提供已测量值和其它系统参数,所述其它系统参数用来支持系统上应用的运行。因此,本发明避免了时间消耗、手动调谐处理,而该手动调协处理通常由调节通常出错的系统安装商或者系统管理员执行。
重要的是,尽管已经在全功能数据处理系统的场境中描述了本发明,但是本领域熟练技术人员将会明白,本发明的处理能够以计算机可读媒介中指令的形式或者各种其它形式来分布,而与实际用来完成分布的信号承载媒介的类型无关。计算机可读媒介的例子包括诸如EPROM、ROM、磁带、纸带、软盘、硬盘驱动器、RAM和CD-ROM的媒介,以及传输型媒介,比如数字和模拟通信链路。
已经提供的本发明的描述用于解释和说明目的,而不打算穷举或限制到所公开的实施例。本领域熟练技术人员明白许多修改和变化。本发明的各实施例被选择来解释本发明的原理以及它的实际应用,并且能够使本领域熟练技术人员理解本发明,以便实现各种实施例与可能适合于其它预期使用的各种修改。
权利要求
1.一种在数据处理系统中管理互斥体的方法,该方法包括维持用于互斥体的平均获取成本值;第一线程尝试获取互斥体;和响应第二线程已经获取互斥体的确定,根据互斥体的平均获取成本值确定进入第一线程的自旋状态或者休眠状态。
2.根据权利要求1所述的方法,其中平均获取成本值指示线程获取互斥体时的计算资源的平均消耗。
3.根据权利要求1所述的方法,还包括维持一个特定线程的当前获取成本值,该当前获取成本值代表第一线程在最初尝试获取互斥体之后和获取互斥体之前的计算资源的消耗;和响应第一线程获取互斥体,为互斥体重新计算平均获取成本值,以计入特定线程的当前获取成本值。
4.根据权利要求1所述的方法,还包括如果平均获取成本值满足第一条件,则进入自旋状态;和如果平均获取成本值满足第二条件,则进入休眠状态。
5.根据权利要求4所述的方法,其中第一条件为平均获取成本值小于门限值,第二条件为平均获取成本值大于或等于门限值。
6.根据权利要求5所述的方法,其中门限值与线程进入然后退出休眠状态所需的时间量有关。
7.根据权利要求1所述的方法,还包括进入第一线程的自旋状态或者休眠状态;和在退出第一线程的自旋状态或者休眠状态之后,计算或检索指示第一线程在自旋状态或休眠状态期间的计算资源消耗的成本值。
8.根据权利要求7所述的方法,还包括通过运行一个忙等待循环进入第一线程的自旋状态;和根据在忙等待循环中执行的迭代次数,计算指示第一线程在自旋状态期间的计算资源消耗的成本值。
9.根据权利要求7所述的方法,还包括通过执行一个系统调用,进入第一线程的休眠状态,以暂停第一线程的运行;和根据第一线程处于休眠状态的时间量,计算指示第一线程在休眠期间的计算资源消耗的成本值。
10.根据权利要求7所述的方法,还包括把指示由第一线程在自旋状态或休眠状态期间的计算资源消耗的成本值添加到当前获取成本值上,该当前获取成本值代表第一线程在最初尝试获取互斥体之后及获取互斥体之前的计算资源消耗。
11.根据权利要求7所述的方法,还包括使指示第一线程在自旋状态或休眠状态期间计算资源的消耗的成本值标准化,然后将其添加到当前获取成本值上。
12.一种在数据处理系统中管理互斥体的设备,包括维持用于互斥体的平均获取成本值的装置;用于由第一线程尝试获取互斥体的装置;和确定装置,响应第二线程已经获取互斥体的确定,根据互斥体的平均获取成本值确定进入第一线程的自旋状态或者休眠状态。
13.根据权利要求12所述的设备,其中平均获取成本值指示线程获取互斥体时的计算资源的平均消耗。
14.根据权利要求12所述的设备,还包括维持特定线程的当前获取成本值的装置,该当前获取成本值代表第一线程在最初尝试获取互斥体之后和获取互斥体之前的计算资源的消耗;和重新计算装置,响应第一线程获取互斥体,为互斥体重新计算平均获取成本值,以包括特定线程的当前获取成本值。
15.根据权利要求12所述的设备,还包括如果平均获取成本值满足第一条件,则进入自旋状态的装置;和如果平均获取成本值满足第二条件,则进入休眠状态的装置。
16.根据权利要求15所述的设备,其中第一条件为平均获取成本值小于门限值,第二条件为平均获取成本值大于或等于门限值。
17.根据权利要求16所述的设备,其中门限值与线程进入然后退出休眠状态所需的时间量有关。
18.根据权利要求12所述的设备,还包括进入第一线程的自旋状态或者休眠状态的装置;和计算或检索装置,在退出第一线程的自旋状态或者休眠状态之后,计算或检索指示第一线程在自旋状态或休眠状态期间的计算资源消耗的成本值。
19.根据权利要求18所述的设备,还包括通过运行忙等待循环进入第一线程的自旋状态的装置;和根据在忙等待循环中执行的迭代次数,计算指示第一线程在自旋状态期间的计算资源消耗的成本值的装置。
20.根据权利要求18所述的设备,还包括通过执行一个系统调用,进入第一线程的休眠状态以暂停第一线程的运行的装置;和根据第一线程处于休眠状态的时间量,计算指示第一线程在休眠期间的计算资源消耗的成本值的装置。
21.根据权利要求18所述的设备,还包括添加装置,把指示由第一线程在自旋状态或休眠状态期间的计算资源消耗的成本值添加到当前获取成本值上,该当前获取成本值代表第一线程在最初尝试获取互斥体之后及获取互斥体之前的计算资源消耗。
22.根据权利要求18所述的设备,还包括标准化装置,使指示第一线程在自旋状态或休眠状态期间计算资源的消耗的成本值标准化,然后将其添加到当前获取成本值上。
23.一种计算机可读媒介的计算机程序产品,供管理互斥体的数据处理系统使用,所述计算机程序产品包括维持用于互斥体的平均获取成本值的装置;第一线程尝试获取互斥体的装置;和确定装置,响应第二线程已经获取互斥体的确定,根据互斥体的平均获取成本值确定进入第一线程的自旋状态或者休眠状态。
24.根据权利要求23所述的计算机程序产品,其中平均获取成本值指示线程获取互斥体时的计算资源的平均消耗。
25.根据权利要求23所述的计算机程序产品,还包括维持特定线程的当前获取成本值的装置,该当前获取成本值代表第一线程在最初尝试获取互斥体之后和获取互斥体之前的计算资源的消耗;和重新计算装置,响应第一线程获取互斥体,为互斥体重新计算平均获取成本值,以包括特定线程的当前获取成本值。
26.根据权利要求23所述的计算机程序产品,还包括如果平均获取成本值满足第一条件,则进入自旋状态的装置;和如果平均获取成本值满足第二条件,则进入休眠状态的装置。
27.根据权利要求26所述的计算机程序产品,其中第一条件为平均获取成本值小于门限值,第二条件为平均获取成本值大于或等于门限值。
28.根据权利要求27所述的计算机程序产品,其中门限值与线程进入然后退出休眠状态所需的时间量有关。
29.根据权利要求23所述的计算机程序产品,还包括进入第一线程的自旋状态或者休眠状态的装置;和计算或检索装置,在退出第一线程的自旋状态或者休眠状态之后,计算或检索指示第一线程在自旋状态或休眠状态期间的计算资源消耗的成本值。
30.根据权利要求29所述的计算机程序产品,还包括通过运行忙等待循环进入第一线程的自旋状态的装置;和根据在忙等待循环中执行的迭代次数,计算指示第一线程在自旋状态期间的计算资源消耗的成本值的装置。
31.根据权利要求29所述的计算机程序产品,还包括通过执行一个系统调用,进入第一线程的休眠状态以暂停第一线程的运行的装置;和根据第一线程处于休眠状态的时间量,计算指示第一线程在休眠期间的计算资源消耗的成本值的装置。
32.根据权利要求29所述的计算机程序产品,还包括添加装置,把指示由第一线程在自旋状态或休眠状态期间的计算资源消耗的成本值添加到当前获取成本值上,该当前获取成本值代表第一线程在最初尝试获取互斥体之后及获取互斥体之前的计算资源消耗。
33.根据权利要求29所述的计算机程序产品,还包括标准化装置,使指示第一线程在自旋状态或休眠状态期间计算资源的消耗的成本值标准化,然后将其添加到当前获取成本值上。
全文摘要
本发明提供了一种在数据处理系统中管理互斥体的方法。对于每个互斥体,维持一个平均获取成本,该平均获取成本指示尝试获取互斥体的线程造成的计算资源的平均消耗。如果线程尝试获取已锁定的互斥体,则线程根据限制条件和此时用于互斥体的平均获取成本,进入自旋状态或者休眠状态。维持特定线程的当前获取成本值,该当前获取成本值代表线程在最初尝试获取互斥体之后和获取互斥体之前的计算资源消耗。当线程获取互斥体时,特定线程当前获取成本被并入平均获取成本值中。
文档编号G06F9/46GK1601477SQ20041008244
公开日2005年3月30日 申请日期2004年9月22日 优先权日2003年9月25日
发明者乔尔·H·肖普 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1