管理计算机内的计算机程序的临界区锁的系统和方法

文档序号:6554314阅读:211来源:国知局
专利名称:管理计算机内的计算机程序的临界区锁的系统和方法
技术领域
本发明的领域是数据处理,或者更具体地说,本发明是用于管理支持多个逻辑分区的计算机内的计算机程序的临界区锁的方法、系统和产品。
背景技术
线程是多线程计算机上执行的软件单元。即,线程是计算机系统中可执行工作实体。线程可以被看作独立的可执行计算机程序指令流。在这样一台计算机上,软件程序是以被称为“进程”的执行单元方式执行的,该“进程”涉及执行软件程序所需的所有处理器寄存器、代码段与偏移寄存器、数据段与偏移寄存器、堆栈段与偏移寄存器、标志寄存器、指令指针寄存器、程序计数器等等。为了提高效率,进一步利用线程组织“进程”,其中除了一个线程与该进程的所有其他线程共享存储器外,进程的每个线程分别具备执行所需的所有属性,这样可以降低操作系统从线程切换到线程(“上下文切换”)的开销。
进程的各线程共享同一个存储空间,而且可以读和写到同一存储地址。此外,在任意两条计算机程序指令之间,正在读存储地址的线程可能被中断,而且不保证处理器在另外一个线程写入同一存储地址之前恢复运行状态。这种状况被称为“竞态状态”。当多个线程可以同时访问共享存储器,而且该线程读和修改存储器内的数据时,可能出现这种竞态状态。防止发生竞态状态的常用方法被称为“相互排斥”或者“互斥(mutex)”。在互斥中,其中共享数据被读或者被修改的代码部分被定义为“临界区(critical section)”,而且执行某种机制,以保证两个线程绝对不会同时处于相同共享数据的临界区中。
保证两个线程不同时处于相同共享数据的临界区中的机制在本说明书中被称为“锁(lock)”。锁的例子包括有Unix信标量、C++中的监视级和Java中的同步方法。可以认为请求独占访问共享数据的临界区的线程要请求锁,通常利用系统调用实现请求锁,如果该锁不是立即可用的,则将系统调用将请求线程置于等待状态,直到该锁成为可用的。可以认为已经独占访问共享数据临界区的线程要保持锁。
锁受护送效应作用。一次只有一个线程可以占有锁。当多个线程请求访问同一个锁时,护送(convoy)发生。所有请求线程可经历从运行状态切换到等待状态的上下文切换。他们可以离开等待状态,返回就绪状态,竞争占有处理器,再一次请求锁,而且如果该锁不是可用的,则再一次返回等待状态-以便重新开始整个进程。传统的补救方法是最小化计算机程序指令的临界区大小,以便锁持有者仅保持该锁进行相关数据处理所需的最短时间。然而,这不是一个完善的解决方案,在发生护送效应时,它们对整个计算机系统的性能别有害。
逻辑分区(“LPAR”)是一组数据结构和业务,它能够在一个计算机中分配计算机资源,以使该计算机的作用如同两个或者更多个独立的计算机。管理器(hypervisor)是系统软件层,它在逻辑分区中的操作系统之下运行,以在物理处理器上调度虚拟处理器。虚拟处理器是一个子系统,它用于对逻辑分区分配处理器时间。物理处理器的共享池(pool)支持对逻辑分区分配部分物理处理器(在时间片内)。在时间片内共享的这部分物理处理器被称为“虚拟处理器”。当线程在该虚拟处理器的时间片上运行时,可以认为该线程运行在虚拟处理器上。在一组虚拟处理器之间,以运行在逻辑分区上的操作系统不可见的方式,子处理器分区时间共享物理处理器。与其中通过在中断禁用模式下运行,线程可仍控制物理处理器的操作系统中的多道作业不同,在子处理器分区中,在其虚拟处理器时间片结束时,管理器预排空该线程,以使物理处理器对不同虚拟处理器可用。
因此,在子处理器分区中,如果线程要获取锁(甚至在中断禁用条件下),不能保证在该线程放弃控制物理处理器之前,该锁被释放。由于为了完成执行其临界区,只能在该线程重新获取物理处理器的控制后才能释放锁,所以这通常导致在锁获取与释放之间具有长时间延迟。这种长时间延迟将恶化分区内的锁争用,因为正在竞争该锁的其他虚拟处理器被强制等待,直到持有锁的虚拟处理器再一次获取物理处理器的控制并释放该锁。

发明内容
本发明所公开的方法、系统和计算机程序产品用于管理支持多个逻辑分区的计算机内的计算机程序的临界区锁,它们包括通过在物理处理器上在时间片内执行的虚拟处理器上执行的线程,确定该线程的临界区的预期锁定时间是否超过该时间片内虚拟处理器的剩余权利;以及如果预期锁定时间超过剩余权利,则推迟获取锁。
根据更具体说明附图所示的本发明典型实施例,本发明的上述已经其它目的、特征和优点显而易见,其中同样的参考编号通常表示本发明典型实施例中的同样部分。


图1是根据本发明实施例的自动计算装置的方框图,该自动计算装置包括用于管理支持多个逻辑分区的计算机内的计算机程序的临界区锁的典型计算机。
图2是根据本发明实施例用于管理支持多个逻辑分区的计算机内的计算机程序的临界区锁的典型系统的原理方框图。
图3A是根据本发明实施例用于管理支持多个逻辑分区的计算机内的计算机程序的临界区锁的典型线程状态的状态图。
图3B是根据本发明实施例用于管理支持多个逻辑分区的计算机内的计算机程序的临界区锁的典型虚拟处理器状态的状态图。
图4是根据本发明实施例用于管理计算机程序的临界区锁的4个线程和2个虚拟处理器的典型执行顺序的时序图。
图5是示出用于管理支持多个逻辑分区的计算机内的计算机程序的临界区锁的典型方法的流程图。
图6是示出用于管理支持多个逻辑分区的计算机内的计算机程序的临界区锁的又一个典型方法的流程图。
图7是示出用于管理支持多个逻辑分区的计算机内的计算机程序的临界区锁的又一个典型方法的流程图。
具体实施例方式
下面将从图1开始,参考

根据本发明实施例用于管理支持多个(multiplicity)逻辑分区的计算机内的计算机程序的临界区锁的典型方法、系统和产品。根据本发明实施例管理支持多个逻辑分区的计算机内的计算机程序临界区锁是在自动计算装置(machinery),即,一台或者多台计算机上实现的。因此,为了进一步说明问题,图1是根据本发明实施例包括用于管理支持多个逻辑分区的计算机内的计算机程序的临界区锁的典型计算机(152)的自动计算装置的方框图。图1所示的计算机(152)包括几个物理处理器(156);以及随机存取存储器(“RAM”)(168),通过系统总线(160)连接到该计算机的物理处理器和其他部件上。
在RAM(168)中存储了逻辑分区(104)、应用程序(158)、虚拟处理器(122)、操作系统(154)、逻辑处理器(106)、线程(182)以及管理器(102)。如上所述,逻辑分区(“LPAR”)(104)是一组数据结构和业务,它可用在一个计算机中分布计算机资源,以使该计算机的作用如同两个或者更多个独立的计算机。如同它是单独计算机一样,可以对每个逻辑分区分配其操作所需的所有资源,包括处理器时间、存储器、操作系统等等。应用程序(158)是实现线程执行的用户级数据处理的计算机程序指令。
虚拟处理器(122)是执行对逻辑分区处理器时间分配的子系统、数据结构和计算机程序指令。物理处理器的共享池(pool)支持对逻辑分区分配部分物理处理器(在时间片内)。在时间片内共享的这部分物理处理器被称为“虚拟处理器”。当线程在该虚拟处理器的时间片上运行时,可以认为该线程运行在虚拟处理器上。
在各逻辑分区之间共享共享处理池保持的物理处理器。在该说明书的例子中,根据具有表示一个物理处理器的处理能力的、1.0处理单元的各处理单元,共享物理处理器。在图1所示的例子中,所示的线程(182)运行在虚拟处理器(122)上,示出线程(182)运行在其上的逻辑分区(104)的时间片。
逻辑处理器(106)是调度线程用于执行的操作系统结构。它代表可以执行线程的部分处理器资源。
操作系统(154)是系统软件层,用于调度线程并提供用于使系统资源对线程可用的功能,包括存储器访问、访问输入/输出资源等等。操作系统还可以控制分配并授权访问计算机资源。操作系统执行低层的基本任务,例如,识别键盘的输出,将输出发送到显示屏幕,跟踪磁盘驱动器上的文件和目录以及控制诸如磁盘驱动器和打印机外围设备。操作系统还负责安全,确保未授权用户不访问系统以及线程只能访问授权它们可以访问的资源。根据本发明实施例用于管理支持多个逻辑分区的计算机内的计算机程序临界区锁的操作系统是多线程操作系统,其例子包括UNIXTM、LinxTM、Microsoft XPTM、AIXTM、IBM的i5/OSTM以及本技术领域内的技术人员能想到的许多其他操作系统。
图1所示的管理器(102)是系统软件层,它在逻辑分区的操作系统下运行。即,在操作系统和底层物理计算机部件-包括物理处理器之间,运行该管理器(102)。管理器的功能之一是在物理处理器上调度虚拟处理器。在图1所示的例子中,根据本发明实施例,管理器(102)是可以管理支持多个逻辑分区的计算机内的计算机程序临界区锁的计算机程序指令。
线程(182)是通过确定预期临界区的锁定时间是否超过发出该线程的虚拟处理器的剩余权利(entitlement),可以管理临界区锁的计算机程序指令。如果预期锁定时间超过剩余权利,则线程(182)将推迟获取锁。根据本发明实施例,改进管理器(102),以对线程(182)提供临界区的预期锁定时间。管理器(102)可以计算预期锁定时间,作为各线程之间锁的平均锁定时间,或者作为计算机系统上的所有锁的平均锁定时间。管理器(102)还可以对线程(182)提供在该时间片内的虚拟处理器总权利。管理器(102)可以对线程(182)识别在该时间片内已经使用的部分权利。
在图1所示的例子中,RAM(168)存储了管理器(102)、虚拟处理器(122)、逻辑分区(104)、操作系统(154)、应用程序(158)、线程(182)以及逻辑处理器(106)。然而,本技术领域内的技术人员应当理解,这种软件的许多部件也存储在非易失性存储器(166)中。图1所示的计算机(152)包括非易失性计算机存储器(166),它通过系统总线(160)连接到处理器(156)和计算机(152)的其他部件。利用硬盘驱动器(170)、光盘驱动器(172)、可电擦可编程只读存储器(所谓“EEPROM”或“闪速”存储器)(174)、RAM驱动器(未示出)或者本技术领域内的技术人员能想到的任何其他计算机存储器,可以实现非易失性计算机存储器(166)。
图1所示的典型计算机包括一个或者多个输入/输出接口适配器(178)。利用例如用于控制到诸如计算机显示屏的显示设备(180)的输出以及来自诸如键盘和鼠标的用户输入设备(181)的用户输入进行控制的软件驱动程序(driver)和计算机硬件,计算机内的输入/输出接口适配器实现面向用户的输入/输出。
图1所示的典型计算机(152)包括通信适配器(167),用于与其他计算机实现数据通信。例如,通过诸如IP网络的数据通信网-以及本技术领域内的技术人员能想到的其他方式,可以实现数据通信。通信适配器实现通过其一个计算机直接或者通过网络将数据通信发送到另一个计算机的硬件级数据通信。根据本发明实施例用于确定目的地的可用性的通信适配器的例子包括用于有线拨号通信的调制解调器、用于有线网络通信的以太网(IEEE802.3)适配器以及用于无线网络通信的802.11b适配器。
为了进一步说明问题,图2是根据本发明实施例用于管理支持多个逻辑分区的计算机内的计算机程序的临界区锁的典型系统的原理方框图。图2所示的系统包括LPAR(103)和LPAR(104)。图2所示的系统包括两个操作系统(154,155),这两个操作系统分别在LPAR(103)和LPAR(104)中。图2所示的系统包括6个逻辑处理器(106-116),其中两个用于LPAR(103)中的操作系统(154),四个用于LPAR(104)中的操作系统(155)。六个线程(202-212)分别运行在6个逻辑处理器(106-116),每个逻辑处理器运行一个线程。图2所示的系统包括管理器(102)和4个虚拟处理器,其中2个虚拟处理器(122,124)分配给LPAR(103),2个虚拟处理器(126,128)分配给LPAR(104)。
图2所示的系统还包括三个物理处理器(156,130,132)。在该例子中,三个物理处理器(156,130,132)的处理能力分配给各LPAR,如下所述
●物理处理器(156)的全部处理能力全部分配给虚拟处理器(122),以使逻辑处理器(106)可用整个物理处理器(156)。
●物理处理器(130)的一半处理能力分配给虚拟处理器(124),以使逻辑处理器(108)在时间片内可用物理处理器(130)的一半。
●物理处理器(130)的一半处理能力分配给虚拟处理器(126)。虚拟处理器(126)分配给以SMT模式运行、具有两个用于虚拟处理器(126)的逻辑处理器(110,112)的LPAR(104)。逻辑处理器(110)和逻辑处理器(112)在时间片内分别可用物理处理器(130)的处理能力的四分之一。
●物理处理器(132)的全部处理能力分配给虚拟处理器(128)。虚拟处理器(128)分配给以SMT模式运行、具有两个用于虚拟处理器(128)的逻辑处理器(114,116)的LPAR(104)。逻辑处理器(114)和逻辑处理器(116)在时间片内分别可用物理处理器(132)的处理能力的四分之一。
管理器(102)在物理处理器上调度虚拟处理器。操作系统调度线程和逻辑处理器。对其分配了虚拟处理器的操作系统不知道虚拟处理器从运行状态转移到就绪状态,从而在一段时间内失去物理处理器的控制。在其相应虚拟处理器失去物理处理器的控制时持有临界区锁的任何线程保留该锁,直到虚拟处理器重新获取(regain)物理处理器,而且该线程完成它的临界区。在虚拟处理器等待重新获取物理处理器时,许多其他线程可能需要同一临界区锁,所有这些线程不得不等待,产生了明显的护送效应,而且降低了整个系统的性能。
然而,根据本发明实施例可以改进该例子中的线程,以便可以确定该线程的临界区的预期锁定时间是否超过在其上执行线程的虚拟处理器的剩余权利。如果预期锁定时间超过剩余权利,则线程将推迟获取锁。根据本发明实施例改进管理器(102),以对线程提供临界区的预期锁定时间。管理器(102)可以计算预期锁定时间,作为各线程之间锁的平均锁定时间,或者作为计算机系统上的所有锁的平均锁定时间。管理器(102)还对线程提供该时间片内的虚拟处理器的总权利。管理器(102)可以对线程识别在时间片内已经使用的部分权利。
图2所示系统中的物理处理器、虚拟处理器和逻辑处理器的数量、配置以及分配仅用于说明问题,而非限制本发明。用于管理支持多个逻辑分区的计算机内的计算机程序的临界区锁的系统可以包括任何数量、配置和分配的物理处理器、虚拟处理器和逻辑处理器。
为了进一步说明问题,图3A是根据本发明实施例用于管理支持多个逻辑分区的计算机内的计算机程序的临界区锁的典型线程状态的状态图。图3A中的圆圈表示线程的状态。圆圈之间的箭头表示由操作系统功能引起的状态转移。图3A所示的线程状态包括创建状态(352)、就绪状态(354)、运行状态(356)、等待状态(358)以及停止状态(360)。在另一个线程请求时首先创建线程时,该线程临时处于创建状态(352),以使操作系统有时间收集该线程的信息和资源。操作系统一准备好线程以便运行,它便“启动”(353),即,进入就绪状态(354)。处于运行状态(356)的线程可以退出(370)运行状态(356),然后,进入停止状态(360)。
在“就绪队列”中排队处于就绪状态(354)的线程,等待机会运行。使线程从就绪状态转移到运行状态的操作系统功能被称为发送(dispatch)(362)。在线程被发送时,即,在处于运行状态时,当前分配该线程,以在逻辑处理器上执行。是否物理地执行该线程取决于是否逻辑处理器的虚拟处理器当前通过其管理器被调度,即,是否逻辑处理器的虚拟处理器当前在物理处理器上在该时间片内执行。在逻辑处理器上,一次只能一个线程处于运行状态。
线程可能失去逻辑处理器的保持权,通过抢占(preemption)或者超时(364),线程从运行状态转移到就绪状态。当具有较高优先权的线程进入逻辑处理器的就绪队列时,线程被抢占。如果在其全部时间片内,线程保持占有逻辑处理器,即,保持运行状态,则该线程超时。
通过发出系统调用,线程也可以离开运行状态(356),然后,进入等待状态(358)-以等待该系统调用结束。这种系统调用包括有意请求睡眠(366)或等待特定时间周期、锁定请求、请求从盘上读数据或者将数据写入盘、请求从输入/输出资源上读取数据或者将数据写入或写输入/输出资源等。在图3A所示的例子中,通过发出请求,在逻辑处理器的虚拟处理器的剩余时间片睡眠,逻辑处理器上执行的线程推迟获取锁。
线程从等待状态返回就绪状态的过程被称为唤醒(368)线程。当锁持有者释放请求的锁时,处于等待锁的等待状态(358)的线程被唤醒。一个以上的线程可以在等待状态(358)中排队等待同一个锁。该队列可表示处理产生该线程的程序的延迟。通过缩短线程在等待锁释放锁的等待状态下(358)花费的时间,根据本发明实施例管理支持多个逻辑分区的计算机内的计算机程序的临界区锁可以缩短处理程序的时间延迟。在图3A所示的例子中,在物理处理器上在时间片内执行的虚拟处理器上执行的线程确定该线程的临界区的预期锁定时间是否超过该时间片内虚拟处理器的剩余权利。如果预期锁定时间超过剩余权利,则线程推迟获取锁。线程推迟获取锁可以减小等待状态队列的大小。相反,其他线程可获取锁并避开等待状态。相反,如果该线程获取锁,则在虚拟处理器的时间片期满之前,它不能完成临界区。如果它不能完成临界区,则该线程继续持有锁,直到虚拟处理器的下一个时间片。在该线程获取锁的时间与虚拟处理器下一个时间片之间请求锁的所有其他线程不能获取锁,并将进入等待状态。
为了进一步说明问题,图3B是根据本发明实施例用于管理支持多个逻辑分区的计算机内的计算机程序的临界区锁的典型虚拟处理器状态的状态图。图3B中的圆圈表示虚拟处理器的状态。圆圈之间的箭头表示管理器功能引起的状态转移。图3B示出的虚拟处理器状态包括创建状态(372)、就绪状态(374)、运行状态(376)、等待状态(378)和停止状态(380)。当通常在引导时间首先创建虚拟处理器时,虚拟处理器临时处于在创建状态(372),以使管理器有时间收集该虚拟处理器的信息和资源。管理器可以保持虚拟处理器的处理器应用资源寄存器。在首先创建该虚拟处理器时,管理器可以将虚拟处理器使用时间片的权利存储在寄存器中。管理器还可以存储虚拟处理器的时间片的当前使用,或者在创建时存储0。管理器一准备好运行虚拟处理器,就“启动”(373)该虚拟处理器,即,该虚拟处理器进入就绪状态(374)。管理器可以退出(390)处于运行状态(376)的虚拟处理器,然后,使它处于停止状态(380)。
在“就绪队列”中,排队处于就绪状态(374)的虚拟处理器,等待运行机会。在物理处理器上,一次只有一个虚拟处理器处于运行状态。
虚拟处理器可能失去占有物理处理器,并通过抢占、超时或者被挤出(384),该虚拟处理器从运行状态转移到就绪状态。当具有较高优先权的虚拟处理器进入物理处理器的就绪队列时,虚拟处理器被抢占。如果虚拟处理器保持占有物理处理器,即,在其全部时间片内保持运行状态,则该虚拟处理器超时。通过发出系统调用,虚拟处理器也可以离开运行状态(376),然后,进入等待状态(378)-以等待该系统调用完成。一个这种系统调用是睡眠(386)请求。使虚拟处理器从等待状态返回就绪状态的过程被称为唤醒(388)虚拟处理器。
在图3B的例子中,运行在管理器调度的虚拟处理器上的线程遇到临界区,而且需要锁。管理器对线程提供临界区的预期锁定时间,而且还可以对线程提供该时间片内的虚拟处理器剩余权利,或者根据其线程可计算剩余权利的信息。通过确定预期锁定时间是否超过其时间片内的虚拟处理器的剩余权利,线程可以判定是否推迟获取锁。在确定预期锁定时间超过其时间片内的虚拟处理器的剩余权利后获取了锁的线程,具有在虚拟处理器超时之前完成其临界区的更大机会,从而降低了等待该锁的各线程之间发生护送效应的危险。
为了进一步说明问题,图4是根据本发明实施例用于管理计算机程序的临界区锁的4个线程(402-408)和2个虚拟处理器(410,412)的典型执行顺序的时序图。该例子中的虚拟处理器(410,412)在顺序时间片内运行在同一个底层物理处理器(未示出)上。线程(402-408)分别具有临界区(414-420)。每个线程为其临界区请求相同的锁。
线程(402)运行在虚拟处理器(410)上,在时间T1,该线程(402)遇到其临界区。在T1时间,虚拟处理器(410)具有对其物理处理器的剩余权利T2-T1。线程(402)的临界区(414)的预期锁定时间是T6-T5,是大于虚拟处理器(410)的剩余权利T2-T1的时间段。根据本发明实施例,改进了该例子中的线程(402),以确定线程的临界区的预期锁定时间是否超过时间片内的虚拟处理器的剩余权利,然后,如果该预期锁定时间超过剩余权利,则线程推迟获取锁。因此,在该例子中,线程(402)将获取锁从时间T1推迟到时间T5,在虚拟处理器的当前时间片期间,虚拟处理器的剩余权利期间睡眠。
在时间T2,虚拟处理器(410)失去占有物理处理器,然后,在时间T5,重新获取物理处理器。从时间T3到T4,虚拟处理器(412)运行在物理处理器上。在T3与T4之间,线程(404,406以及408)分别遇到其临界区(416,418以及420),并获取线程(402)推迟的同一个锁。如果线程(402)不推迟获取锁,则线程(404,406,408)将必须等待,直到至少时间T6以获取锁。
为了进一步说明问题,图5是示出用于管理支持多个逻辑分区的计算机内的计算机程序的临界区锁的典型方法的流程图。图5的方法包括利用在物理处理器(506)上在时间片(508)内执行的虚拟处理器(510)上执行的线程(302),确定(318)该线程的临界区(303)的预期锁定时间(320)是否超过该时间片内虚拟处理器的剩余权利(322)。
通过利用该时间片内的虚拟处理器(510)的总权利减去在虚拟处理器的当前时间片内运行的虚拟处理器(510)的时间,线程(302)可以确定其剩余权利(322)。管理器(102)可以对线程(302)提供该时间片内的虚拟处理器的剩余权利(322)。管理器(102)可以在寄存器中保存当前时间片内的虚拟处理器的运行时间。例如,IBM的POWER5管理器可以为每个虚拟处理器保存并更新被称为处理器利用资源寄存器(PURR)的寄存器。虚拟处理器的PURR包含在虚拟处理器的当前时间片内虚拟处理器运行的时间,即,在当前时间片内已经使用的总权利的部分。管理器可以保持含有虚拟处理器对当前时间片的总权利的寄存器-或者使该总权利对线程可用。管理器(102)还可以对线程(302)提供临界区的预期锁定时间(320)。
图5所示的方法进一步包括如果预期锁定时间(320)超过剩余权利(322),则推迟(312)获取锁。为了推迟获取锁,线程发出系统调用,以至少睡眠虚拟处理器的时间片的剩余部分。然后,线程进入等待状态,而且,在虚拟处理器的当前时间片内期间,不返回运行状态。
在图5的例子中,推迟(312)获取锁还可用包括将推迟标志的值设置(324)为真(326),从而记录锁至少已经被先前推迟一次。利用通过将其值设置为“真”或者1可以设置的布尔值或整数,可以实现推迟标志。
图5所示的方法进一步包括,如果预期锁定时间(320)不超过剩余权利(322),则获取(310)锁。通过请求锁,线程(302)可以获取锁。通常,利用诸如C或C++中的请求信标量(semaphore)的系统调用,或者通过调用Java同步方法,实现请求锁。如果该锁立即可用,则线程(302)执行临界区。如果该锁不是立即可用的,则线程(302)进入等待状态,直到锁成为可用的。
图5所示的方法进一步包括利用管理器(102)对线程(302)提供(316)预期锁定时间(320)。在图5所示的方法中,通过计算(502)该锁的平均锁定时间,提供(316)预期锁定时间(300)。例如,管理器(102)计算线程在锁保护的临界区上的执行时间的平均值。作为一种选择,在图5所示的方法中,通过计算(504)在计算机上执行的所有线程获取的所有锁的平均锁定时间,可以提供(316)预期锁定时间(320)。例如,管理器(102)可以计算在所有临界区上的所有线程的平均执行时间。对线程提供预期锁定时间的这些方法仅用于说明问题,而不限制本发明。管理支持多个逻辑分区的计算机内的计算机程序临界区锁可以包括利用其他手段获取预期锁定时间的线程,正如本技术领域内的技术人员所知。例如,可以将预期锁定时间保留为系统配置参数。在另一个替换例中,应用程序可以保持它自己的线程的平均锁定时间。例如,应用程序可以计算位于每个锁保护的临界区上的各线程的平均执行时间。在应用程序产生的线程每次进入临界区时,该线程都启动计时器。当该线程退出临界区时,它向该应用程序报告执行临界区花费的时间和锁的标识。然后,该应用程序可以保持该应用程序产生的各线程遇到的锁的平均锁定时间的表。本技术领域内的技术人员可以设想用于提供预期锁定时间的其它方法,而且所有这些方法均在本发明的范围内。
同样,在图5所示的例子中,将预期锁定时间(320)的值与该时间片内的虚拟处理器的剩余权利(322)的值进行比较是用于说明问题,而非限制本发明。管理支持多个逻辑分区的计算机内的计算机程序临界区锁可以包括用于确定该线程的临界区(303)的预期锁定时间(320)是否超过该时间片内的虚拟处理器的剩余权利(322)的其他方法。例如,在虚拟处理器的时间片终止之前,管理器(102)可以设置等待位,在获取锁之前,线程(182)检验这个等待位。如果设置了该等待位,则该线程可以推迟获取锁。可以调整判定应该在权利期满之前多久设置该等待位,或者根据特定系统配置的性能数据对其进行设置或校正。
为了进一步说明问题,图6是示出用于管理支持多个逻辑分区的计算机内的计算机程序的临界区锁的又一个典型方法的流程图。图6所示的方法与图5所示的方法类似。即,图6的方法包括利用在物理处理器(506)上在时间片(508)内执行的虚拟处理器(510)上执行的线程(302),确定(318)该线程的临界区(303)的预期锁定时间(320)是否超过该时间片内的虚拟处理器的剩余权利(322),如果预期锁定时间(320)超过剩余权利(322),则推迟(312)获取锁,以与图5所示方法类似的方式执行所有这些过程。然而,图6所示的方法还包括利用管理器(102)对线程(302)提供该时间片内的虚拟处理器的总权利(606)。图6所示的方法还包括利用管理器(102)对线程(302)识别在该时间片内使用的一部分(608)权利。管理器(102)可以在寄存器中保存虚拟处理器在虚拟处理器的当前时间片内运行的时间,例如,上面描述的PURR寄存器。管理器可以保持含有对当前时间片的虚拟处理器的总权利的寄存器-或者使该总权利对线程可用。管理器(102)还可以对线程(302)提供临界区的预期锁定时间(320)。
图6所示的方法进一步包括根据虚拟处理器的总权利(606)和已经使用的部分权利(608),利用线程(302)计算(610)该时间片内的虚拟处理器的剩余权利(322)。该线程可以从虚拟处理器的总权利(606)中减去虚拟处理器已经使用的部分权利。该差值是虚拟处理器的剩余权利(322)。
为了进一步说明问题,图7是示出用于管理支持多个逻辑分区的计算机内的计算机程序的临界区锁的又一个典型方法的流程图。图7所示的方法与图5所示的方法类似,即,图7所示的方法包括利用在物理处理器(506)上在时间片(508)内执行的虚拟处理器(510)上执行的线程(302),确定(318)该线程的临界区(303)的预期锁定时间(320)是否超过该时间片内虚拟处理器的剩余权利(322),然后,如果预期锁定时间(320)超过剩余权利(322),则推迟(312)获取锁,以图5所示方法的类似方式执行所有这些过程。然而,图7所示的方法还包括确定(702)是否先前已推迟获取锁。在线程推迟获取锁时,例如,通过将诸如布尔值或者整数的推迟标志设置为“真”或者1,线程可以跟踪它是否已经先前推迟获取锁。通过检验推迟标志(322),这种线程可以确定(702)是否已经先前推迟获取锁。图7所示的方法还包括,如果先前推迟获取锁,则获取(310)该锁。在该线程获取了锁后,该线程将推迟标志(322)复位为“假”或者0。
为了进一步说明问题,下面是,在线程确定预期锁定时间超过在虚拟处理器的时间片内线程虚拟处理器的剩余权利时,推迟线程获取锁的Java伪码的例子。
//Code for a thread…do_u();do_v();imminentPreemption.nowEnteringCriticalSection();  myClass.critical Section();  do_x();  do_y();  do_z();  …  //Defer Lock If Expected Lock Time Is Greater  //Than Remaining Entitlement Of Virtual Processor  class imminentPreemption{  public void nowEnteringCriticalSection(){   int expectedLockTime=getExpected LockTime();   int remainingEntitlement=getRemainingEntitlement();   boolean deferralFlag=getDeferral Flag();   if(!deferralFlag){   if(ExpectedLockTime>remainingEntitlement){<!-- SIPO <DP n="15"> --><dp n="d15"/>   deterralFlag=true;   sleep(remainingEntitlement);   }  }  else deferralFlag=false;  }  }  //Code for critical section  class myClass{   synchronized criticalSection(){   do_A();   do_B();   do_C();   }  }
利用“伪码”对该例子进行了说明,因为它是Java代码的通用形式表示的说明,而不是JAVA代码的实际工作模型。在调用myClass.criticalSection()之前,通过调用imminentPreemption.nowEnteringCriticalSection(),根据本发明实施例改进后的线程确定是否推迟获取锁。在nowEnteringCriticalSection()中,getExpectedLockTime()、getRemainingEntitlement()和getDeferralFlag()是操作系统发出的系统调用,以对线程访问分别提供预期锁定时间、该线程的虚拟处理器的剩余权利以及推迟标志。反过来,利用同样的管理器调用,操作系统可以从管理器获取这些量。
语句if(!deferralFlag)可以测试该线程是否已经先前推迟获取锁。如果已经先前推迟,则deferralFlag=TURE,nowEnteringCriticalSection()清除推迟标志,然后退出,使调用nowEnteringCriticalSection()的线程获取锁。如果没有先前推迟,则nowEnteringCriticalSection()使用下面的语句测试该锁的预期锁定时间是否超过该线程的虚拟处理器的剩余权利
if(ExpectedLockTime>remainingEntitlement).
如果预期锁定时间超过剩余权利,则nowEnteringCriticalSection()置位推迟标志,然后,睡眠识别为“remainingEntitlement,”的时间段,推迟获取锁,至少直到线程唤醒。如果预期锁定时间不超过虚拟处理器的剩余权利,则nowEnteringCriticalSection()返回其调用线程,使调用线程获取锁,而不再推迟。在nowEnteringCriticalSection()返回之后,通过调用Java同步方法myClass.criticalSection(),该线程获取锁,然后,进入其临界区。在该例子中,myClass.criticalSection()是在执行之前获取锁的Java同步方法。
为了进一步说明问题,下面说明,当线程确定预期锁定时间超过在时间片内的线程虚拟处理器剩余权利时,推迟获取临界区的锁的线程的C型伪码的例子。
  /*Code for thread*/  …  do_u();  do_v();  nowEnteringCriticalSection();  acquireLock();  do_A();/*begin critical section*/  do_B();  do_C();/*end critical section*/  releaseLock();  do_x();<!-- SIPO <DP n="17"> --><dp n="d17"/>  do_y();  do_z();  …  /*Defer Lock If Expected Lock Time Is Greater*/  /*Than Remaining Entitlement Of Virtual Processor*/  void nowEnteringCriticalSection(){   int expectedLockTime;   int remainingEntitlement;   int deferralFlag;   deferralFlag=getDeferralFlag();   expectedLockTime=getExpectedLockTime();   remainingEntitlement=getRemainingEntitlement();   if(!deferralFlag){  if(expectedLockTime>remainingEntitlement){   deferralFlag=1;   sleep(remainingEntitlement);  }   }   else deferralFlag=0;  }
在进入该线程的临界区之前,通过调用nowEnteringCriticalSection(),该线程确定是否推迟获取锁。在nowEnteringCriticalSection()中,getExpectedLockTime()、getRemainingEntitlement()和getDeferralFlag()是系统调用,操作系统发出该系统调用,以对线程访问分别赋予预期锁定时间、该线程的虚拟处理器的剩余权利以及推迟标志。反过来,利用类似的管理器调用,操作系统可以从管理器中获取这些量。语句if(!deferralFlag)测试线程是否已经先前推迟获取锁。如果先前推迟,则deferralFlag=TURE以及nowEnteringCriticalSection()清除推迟标志,然后,退出,使调用nowEnteringCriticalSection()的线程获取锁。
如果未先前推迟,则nowEnteringCriticalSection()测试预期锁定时间是否超过该线程的虚拟处理器的剩余权利。如果预期锁定时间超过剩余权利,则nowEnteringCriticalSection()置位推迟标志,然后,睡眠识别为“remainingEntitlement,”的时间段,推迟获取锁,至少直到线程唤醒。如果预期锁定时间不超过剩余权利,则nowEnteringCriticalSection()返回它调用的线程,使所调用的线程获取锁,而不再推迟。
在nowEnteringCriticalSection()返回后,线程获取锁,执行其临界区,释放锁,以及继续进行处理。由于C语言不具有Java同步方法,所以在进入和退出临界区时,通过调用acquireLock()和relaeaseLock(),C线程必须分别明确获取和释放锁。利用例如以信标量形式获取和释放锁的程序代码,可以实现acquireLock()和relaeaseLock()。
主要在用于管理支持多个逻辑分区的计算机内的计算机程序的临界区锁的全功能计算机系统的上下文中,描述了本发明的典型实施例。然而,本技术领域内的技术人员应当理解,还可以以设置在与任何适当数据处理系统一起使用的信号承载介质上的计算机程序产品的形式,实现本发明。这种信号承载介质可以是传输介质,或者机器可读信息的可记录介质,包括磁介质、光介质或者其他适当介质。可记录介质的例子包括硬盘驱动器或软盘驱动器中的磁盘、光盘驱动器中的压缩光盘、磁带以及本技术领域内的技术人员能想到的其他介质。传输介质的例子包括用于声音通信的电话网络和数字数据通信网,例如,EthernetsTM和使用IP协议通信的网络以及万维网。本技术领域内的技术人员显然理解,具有适当编程装置的计算机系统可以执行以程序产品形式体现的本发明方法的各步骤。本技术领域内的技术人员应当理解,尽管该说明书中描述的某些典型实施例面向通过计算机硬件安装和执行的软件,但是,利用固件或者硬件实现的变换实施例在本发明范围内。
显然,在不脱离本发明实质范围的情况下,根据上面所做的描述,可以对本发明的各种实施例进行修改和变更。该说明书中的描述仅用于说明问题,而不能理解为具有限制意义。只有下面的权利要求的语言限定本发明范围。
权利要求
1、一种用于管理支持多个逻辑分区的计算机内的计算机程序的临界区锁的方法,该方法包括
通过在物理处理器上在时间片内执行的虚拟处理器上执行的线程,确定该线程的临界区的预期锁定时间是否超过该时间片内虚拟处理器的剩余权利;以及
如果预期锁定时间超过剩余权利,则推迟获取锁。
2、根据权利要求1所述的方法,进一步包括通过管理器对该线程提供预期锁定时间。
3、根据权利要求2所述的方法,其中提供预期锁定时间进一步包括计算该锁的平均锁定时间。
4、根据权利要求2所述的方法,其中提供预期锁定时间进一步包括对在该计算机上执行的所有线程获取的所有锁,计算平均锁定时间。
5、根据权利要求1所述的方法,进一步包括
通过管理器对该线程提供该时间片内的虚拟处理器的所有权利;
通过管理器对该线程识别在该时间片已经使用的部分权利;以及
根据虚拟处理器的总权利和已经使用的部分权利,该线程计算该时间片内的虚拟处理器的剩余权利。
6、根据权利要求1所述的方法,进一步包括
确定是否先前已推迟获取锁;以及
如果先前已推迟获取锁,则获取该锁。
7、一种用于管理支持多个逻辑分区的计算机内的计算机程序的临界区锁的系统,该系统包括计算机处理器和可操作地与计算机处理器相连的计算机存储器,该计算机存储器具有设置在其内的计算机程序指令,该计算机程序指令可以
通过在物理处理器上在时间片内执行的虚拟处理器上执行的线程,确定该线程的临界区的预期锁定时间是否超过该时间片内虚拟处理器的剩余权利;以及
如果预期锁定时间超过剩余权利,则推迟获取锁。
8、根据权利要求7所述的系统,进一步包括通过管理器可以对该线程提供预期锁定时间的计算机程序指令。
9、根据权利要求8所述的系统,其中提供预期锁定时间进一步包括计算该锁的平均锁定时间。
10、根据权利要求8所述的系统,其中提供预期锁定时间进一步包括对在该计算机上执行的所有线程获取的所有锁,计算平均锁定时间。
11、根据权利要求7所述的系统,进一步包括计算机程序指令,该计算机程序指令可以
通过管理器对该线程提供该时间片内的虚拟处理器的所有权利;
通过管理器对该线程识别在该时间片已经使用的部分权利;以及
根据虚拟处理器的总权利和已经使用的部分权利,该线程计算该时间片内的虚拟处理器的剩余权利。
12、根据权利要求7所述的系统,进一步包括
确定是否先前已推迟获取锁;以及
如果先前已推迟获取锁,则获取该锁。
13、一种用于管理支持多个逻辑分区的计算机内的计算机程序的临界区锁的计算机程序产品,该计算机程序产品设置在信号承载介质上,该计算机程序产品包括的计算机程序指令可以实现上述方法权利要求所述方法之任一。
全文摘要
用于管理支持多个逻辑分区的计算机内的计算机程序的临界区锁的方法,该方法包括通过在物理处理器上在时间片内执行的虚拟处理器上执行的线程,确定该线程的临界区的预期锁定时间是否超过该时间片内虚拟处理器的剩余权利;以及如果预期锁定时间超过剩余权利,则推迟获取锁。
文档编号G06F9/46GK1877533SQ20061000428
公开日2006年12月13日 申请日期2006年2月13日 优先权日2005年6月6日
发明者安德鲁·顿西, 尤斯·M·阿卡帕蒂, 苏亚塔·卡什亚普 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1