利用事件等待表锚定对事件锁定的方法和系统的制作方法

文档序号:6412485阅读:263来源:国知局
专利名称:利用事件等待表锚定对事件锁定的方法和系统的制作方法
技术领域
本发明一般地涉及数据处理系统,并且更具体地涉及利用可选择的锁定方法锁定对某事件的访问的方法和系统。
计算机工业的发展是由用户不断提高速度及功能性的难以满足的欲望驱动的。这种发展所带来的一种形式是多处理机计算机。类似于其它计算机系统,多处理机系统具有许多已适宜进行改进的不同区域。适宜于进行改进的一个这种区域涉及用于这种多处理机环境的操作系统(例如UNIX、AIX等)。更具体地,在这种多处理机环境中,为了使对资源的访问串行化,操作系统采用锁定。
一种这样的资源是串件表锚定(Event List Anchor),以及和事件表锚定相关的表(事件表)。简言之,在UNIX中把事件表锚定定义为事件标识符。
当今访问事件表所使用的现有的各种方法造成串行化。具体地,目前的方法采用单锁定,例如Proc-Base-lock(AIX),使事件表串行化,并且可能串行化不在事件表中的其它字段。
因此,具有一种仅串行化事件表自身的方法和系统应会带来明显的好处。本发明提供这种方法和系统。
在一个方面上,本发明是一种保持线程(thread)表的方法,这些线程正在等待事件的发生。该方法包括检测基于事件的发生要求执行某种类型的动作的线程的步骤。该方法还包括设定事件表锚定的值以指示当前不能得到锚定的步骤,事件表锚定用于跟踪等待事件发生的线程表。当事件表锚定不能得到时,该方法还包括把检测到的线程增添到等待事件发生的线程表中的步骤。该方法还包括把事件表锚定的值置为等于一个指示所增添的线程的物理位置的指针的步骤,从而指示事件表锚定的可用性。
通过参照下述附图以及伴随的说明,熟练的技术人员将会更好地了解本发明而且它的各种目的和优点将会变得更为清晰,附图是

图1是典型多处理机计算机系统的示意图,本发明可在这种系统中实施;图2是一个高层方块图,表示根据本发明的原理可在图1的数据处理系统中包括的精选的部件;图3是一个方块图,表示根据本发明的原理的图1的操作系统中的事件表锚定;图4是一个流程图,表示根据本发明的原理在把线程置为休眠时对事件表锚定的使用;图5是一个流程图,表示根据本发明的原理利用事件表锚定唤醒在图4中已置为休眠的线程;图6是一个流程图,表示本发明的一种备择实施方式,该实施方式根据本发明的原理基于优先级把图4中已置为休眠的线索唤醒;以及图7是一个根据本发明的理论的过程Set-Event-Locked,该进程分别由图5、6及4的唤醒方法和休眠方法调用。
在下述说明中为了对本发明提供充分的理解,陈述了许多具体的细节,例如字式字节的具体长度等。但是,对于一般的技术人员这是明显的,即可在不同于这些具体细节下实施本发明。在许多情况下为了不因不必要的详尽而使本发明难予理解,用方块图形式显示周知的电路。有关时标的细节是略去的,因为对于得到对本发明的完整理解这些细节不是必需的,而且这些细节通常是有关技术中的一般技术人员所掌握的。
现请参照图1,图中表示可实施本发明的数据处理系统20。数据处理系统20包括处理机22、键盘82及显示器96。借助电缆28键盘82和处理机22连接。显示器96包括显示屏幕30,后者可利用阴极射线管(CRT)、液晶显示器(LCD)、电极发光屏等实现。数据处理系统20还包括指点器84,它可用跟踪球、操纵杆、触板或触屏、跟踪引导器或者如所示用鼠标器实现。指点器可用于在显示屏幕30上移动指针或光标。处理机20还可以和一个或多个外围设备连接,例如调制解调器92、CD-ROM78、网络适配器90和软盘机40,每个外围设备可位于处理机20的机壳的内部或外部。诸如打印机100的输出设备也可和处理机20连接。
一般的技术人员会注意到和意识到显示器96、键盘82以及指点器84各可利用若干周知的现成产品中的任一种实现。
现请参照图2,图中表示根据本发明的原理可在图1的数据处理系统20中包括的精选部件。数据处理系统20主要是由计算机可读的指令控制的,指令可以以软件为形式,只要软件可存储或可访问即可。这种软件可能在中央处理机(CPU)50内执行以使数据处理系统20工作。
和系统总线5连接的存储设备包括随机存取存储器(RAM)56、只读存储器(ROM)58以及非易失性存储器60。这些存储器包括着允许存储及检索信息的电路。ROM包含不能修改的存储数据。存储在RAM里的数据可由CPU 50或其它的硬件设备修改。非易失性存储器是切断电源时不会丢失数据的存储器。非易失性存储器包括ROM、EPROM、闪速存储器或者电池组供电的CMOS RAM。如图2中所示,这种电池组供电的CMOS RAM可用于存储配置信息。
扩充插件卡或板是一种电路板,它包括连接起来的芯片和其它电子部件以对计算机增添功能和资源。典型的扩充插件卡增加存储器、磁盘机控制器66、视频支持、并行和串行端口以及内置调制解调器。对于膝上机、掌上机和其它便携式计算机,扩充卡通常采取PC卡的形式,它们是信用卡大小的设备,设计成插入到计算机的侧部或后部中的槽中。这种插槽的一个例子是PCMCIA插槽(个人机存储卡国际联盟),它定义型号1、2和3的卡槽。因此,空槽68可用于接收不同类型的扩充卡或者PCMCIA卡。
磁盘控制器66和软盘控制器70都包括着专用集成电路和相关电路,分别引导和控制从/对硬盘机72和软盘或盒带机74的读写。这些盘控制器处理诸如定位读/写磁头、在驱动器和CPU 50之间传递和控制与存储器的双向信息传送等任务。单个盘控制器可能可以控制多于一个的盘驱动器。
CD-ROM控制器76可能包含在数据处理系统20之中,用于从CD-ROM 78(大容量只读存储器)读数据。这种CD-ROM用激光设备而不是用磁性设备读数据。
在数据处理系统20中设置键盘及鼠标器控制器80,用于与键盘82和指点器84接口。指点器典型地用于控制一个屏幕上的元素例如光标,它可以采用带着一个辉点的箭头的形式,该辉点规定用户按下鼠标器按钮时指针的位置。其它指点器包括图形输入板、指示笔、光笔、操纵杆、操纵盘、跟踪球、跟踪板以及IBM公司按“TrackPoint”商标出售的指点器。
通过都和系统总线5连接的串行控制器88和网络适配器90可使处理系统20和其它数据处理系统之间的通信变得更为方便。串行控制器88用于在计算机之间、计算机和外围设备之间在单条线路上一次一位地发送信息。串行通信可以是同步的(由某种标准例如时钟控制)或者不同步的(由决定信息流的控制信号的交换管理)。串行通信标准的例子包括RS-232接口和RS-422接口。如所示,这样的串行接口可用于和调制解调器92通信。调制解调器是一种可使计算机在标准电话线上发送信息的通信设备。调制解调器把计算机的数字信号转换成适宜于在电话线上通信的联锁信号。调制解调器92可应用到把数据处理系统20和联机信息服务连接起来,例如由IBM公司和Sears公司的服务标志“PRODIGY”下提供的信息户服务。联机服务提供商可能提供可经调制解调器92下装到数据处理系统20上的软件。调制解调器92可以提供和其它软件资源的连接,例如服务器、电子公告牌、互联网或者万维网。
网络适配器90可用于把数据处理系统20和局域网94连接起来。网络94可向计算机用户提供电子上的通信及传送软件和信息的装置,此外,网络可提供发布式处理,其在处理一个任务时涉及几个共享工作负荷的或者合作的计算机。
由显示器控制器98控制的显示器96用于显示数据处理系统20生成的可视输出。这种可视输出可能包括正文、图形、动画图形和电视。显示器96可以用基于CRT的视频显示器、基于LCD的扁平面显示器或基于等离子体气体的扁平面显示器实现。显示器控制器98包括生成发送到显示器96的视频信号所需的电子部件。
打印机100可通过并行控制器102和数据处理系统20连接。打印机100用于把正文或计算机生成的图象打印到纸上或者别的如透明软片的介质上。其它类型的打印机包括图象给定器、绘图机或胶片记录器。
并行控制器102用于沿着连接系统总线5和别的并行通信设备如打印机100的导线同时发送多个数据及控制位。
CPU 50取出、译码和执行指令,并且通过计算机的主要数据传输路径系统总线5对其它资源双向地传送数据。该总线连接数据处理系统20的多个部件并且定义数据交换媒体。系统总线5把存储设备56、58和60、CPU50以及图2中所示的别的设备连接起来并且允许它们之间的数据交换。
现请参照图3,图中表示说明根据本发明的原理的图1操作系统(未示出)的事件表锚定302的方块图。TAB Books公司出版的由M.C.Shaw和S.S.Shaw合著的“UNIX Internals”书中可找到涉及事件表锚定以及其它有关UNIX结构的具体说明,从而该书是本文的参考资料。
概括地说,为了保持一个同时等待发生各自事件的线程结构表,UNIX操作系统采用事件表锚定,例如事件表锚定302。如前面已说明,现有技术的方法为了串行化事件表采用单锁定。使用这种锁定带来的缺点是它可能串行化不在事件表之中的其它字段。
在本发明的最佳实施方式中,每个事件表锚定302充当它所代表的事件表的一把锁。
更具体地,在最佳实施方式中,事件表锚定320可以具有三种值(1)Event-Null(事件空),(2)Event-Lock(事件锁定)和(3)Thread-ID(线程标识符)。如果事件表锚定302具有为Event-Null的值,则它表示不存在目前正等待其所代表的事件发生的线索。如果事件表锚定302具有等于Event-Lock的值,则它表示对于事件表锚定302目前正采取某个动作。
例如,如图3中所示,事件表锚定302可以具有等于Event-null 308或Event-Look310的值,或者它通过Thread-ID指向一个线索结构如线索结构304。线索结构304包括线索表304a,后者可具有空值或者指向另一个线索结构,例如线索结构306。线索结构306也包含一个事件表306a,后者可具有空值或指向别的线索结构,从而形成事件表链。下面将结合图4解释有关把事件表锚定用作所代表的事件的一把锁的更具体的信息。
现参照图4,图中表示根据本发明的原理在把线索置成休眠时使用图1的事件表锚定的流程图。应该注意只要希望使用的事件尚未发生时都把线索置成休眠方式。还应该注意到下面所说明的方法代表把AIX的休眠程序的部分修改成利用根据本发明的原理的事件表锚定。当在步骤402当由线索调用休眠程序开始本方法。然后本方法进入步骤404,以调用进程Set_Event_Locked(置事件为锁定)。结合图7将会更详细地说明Set_Event-Locked。Set_Event-Locked进程回送存储在事件表锚定302里的当前值,在此刻该值为Event_Null或Thread-ID中的一个。本方法接着进行步骤406,判定回送的当前值等于Event-Null还是等于Thread_ID。如果在步骤406判定当前值等于Thread_ID,方法进入步骤408。但是如果在步骤406判定当前值等于Event-Null,方法进入步骤412。
在步骤408,把当前的线索(即做出调用的线索)增添到等待代表的事件发生的事件表中的线索链中。然后,方法进入步骤410。
在步骤412,使当前线索代表唯一等待Event-Initialize Chain(事件初始化链)的线索。然后,方法进入到步骤410。
在步骤410,同步地把指向当前Thread-ID的指针存储到事件表锚定302中。从而,通过存储非Event_Locked(事件锁定)的值有效地解锁事件表锚定。然后本方法在步骤414结束。
熟练的技术人员理解在发生事件后必须唤醒休眠的线索。下面结合图5说明和唤醒有关的事件表锚定302的使用。
现参照图5,图中表示根据本发明的原理利用事件表锚定唤醒上面在图4中使之休眠的线索的流程图。也请注意下面所说明的方法代表把AIX的唤醒程序部分修改成利用根据本发明的原理的事件表锚定。在调用唤醒进程时本方法从步骤500开始。方法接着进入步骤502,调用进程Set_Event_Locked,如上面所解释该进程回送事件表锚定302的当前值。然后,方法进入步骤504,对事件表锚定302的当前值进行比较以判定该值等于Event-Null还是等于别的值。如果在步骤504判定事件表锚定302的当前值等于Event_Null,方法进入步骤508。但是如果在步骤504判定当前值不等于Even_Null,则方法进入步骤506。
在步骤506,所有事件表链中的休眠线索(例如304和306)被唤醒以供执行。然后,方法进入步骤508。在步骤508,同步地把等于Event_Null的值存储到事件表锚定302中。接着方法在步骤510终止。
现参照图6,图中表示本发明的一种备择实施方式,该方式中根据本发明的原理基于优先级基础唤醒前面在图4中置成休眠的线索。本方法在调用Wake_Up_One(唤醒一个)进程的步骤600处开始。接着方法进入调用Set_Event-Locked进程的步骤602。接着方法进入把当前值和Event_Null进行比较的步骤604。如果在步骤604当前值等于Event_Null,则方法进入步骤610。但是,如果在步骤604当前值等于除Event_Null之外的任何值,则方法进入步骤606。
在步骤606,使事件表链中的优先级最高的休眠线索成为可执行并且从事件表中移出,并且方法进入步骤608。在步骤608,判定在事件表中是否还剩有休眠线索。如果在步骤608确定在事件表中存在着休眠线索,方法进入步骤612。但是,如果在步骤608确定在事件表链中不再存在线索,方法进入步骤610。
在步骤612,如果请求,从事件表检索新的第一Thread_ID,之后方法进入步骤614。在步骤614,同步地把第一Thread_ID存储到事件表锚定302中,并且方法进入在其处终止的步骤616。
在步骤610,同步地把Event_Null的值存储到事件表锚定302中,并且方法进入在其处终止的步骤616。
现参照图7,图中表示根据本发明的原理分别由图5、6和4的唤醒方法和休眠方法调用的Set_Event-Locked进程的流程图。该方法从步骤700开始,接着进入检索事件表锚定302的当前值的步骤702。然后方法进入判定当前值是否等于Event_Locked的步骤704。如果在步骤704确定当前值等于Event_Locked,则方法返回到步骤702并且重复从该点起的上述各步骤。但是,如果在步骤704确定当前值不等于Event_Locked,方法进入步骤706。
在步骤706,自动地把事件表锚定302置成等于Event_Locked。从而自动地涉及到试图对存储器某个地址的读或写的操作,该操作不由任何其它对该地址的访问中断。
然后,方法进入步骤708,以把事件表锚定302的当前值回送给发出调用的程序,并且该方法终止。
我们相信经上述说明本发明的操作和结构是明了的。尽管所显示的和所描述的方法和系统是按最佳方式说明的,但是在不违背下述权利要求书所定义的本发明的精神和范围的前提下很明显可以进行各种改变和修改。
权利要求
1.一种保持等待事件发生的线程的表的方法,该方法包括步骤检测为执行基于事件发生的某种类型的动作所要求的线程;设定事件表锚定的值以表示它当前是不能得到的,事件表锚定用于跟踪等待事件发生的线程表;当事件表锚定不能得到时,把检测到的线索增添到等待事件发生的线索表中;以及把事件表锚定的值置成等于指示增添的线索的物理位置的指针,从而指示事件表锚定的可使用性。
2.权利要求1的方法,其中设定事件表锚定的值以表示它当前是不可得到的步骤,包括步骤检索事件表锚定的当前值;以及如果该当前值指示该表是可使用的,自动地把事件表锚定的值置为表示其是不可得到的。
3.权利要求2的方法,其中自动设置的步骤包括步骤自动地把事件表锚定的值设置成一个既不等于空也不等于有效线索指针的值。
4.一种用于保持等待事件发生的线索表的设备,该设备包括用于检测为执行基于事件发生的某种类型的动作所要求的线索的装置;用于设定事件表锚定的值以表示它当前是不能得到的装置,事件表锚定用于跟踪等待事件发生的线索表;用于当事件表锚定不能得到时把检测到的线索增添到等待事件发生的线索表中的装置;以及用于把事件表锚定的值置成等于指示增添的线索的物理位置的指针的装置,从而指示事件表锚定的可使用性。
5.权利要求4的设备,其中用于设定事件表锚定的值以表示它当前是不可得到的装置,包括用于检索事件表锚定的当前值的装置;以及用于当该当前值指示该表是可使用的时自动地把事件表锚定的值置为表示其是不可得到的装置。
6.权利要求5的设备,其中用于自动设备的装置包括用于自动地把事件表锚定的值设置成一个既不等于空也不等于有效线索指针的值的装置。
7.一种计算机程序,包括一种计算机可使用的介质,在其上包含着计算机可读的程序代码装置,用于保持等待事件发生的线索表。该计算机可读的程序代码装置包括用于检测为执行基于事件发生的某种类型的动作所要求的线索的装置;用于设定事件表锚定的值以表示它当前是不能得到的装置,事件表锚定用于跟踪等待事件发生的线索表;用于当串件表锚定不能得到时把检测到的线索增添到等待事件发生的线索表中的位置;以及用于把事件表锚定的值置成等于指示增添的线索的物理位置的指针的装置,从而指示事件表锚定的可使用性。
8.权利要求7的计算机程序产品,其中用于设定事件表锚定的值以表示它当前是不可得到的计算机可读程序代码装置,包括用于检索事件表锚定的当前值的装置;以及用于当该当前值指示该表是可使用的时自动地把事件表锚定的值置为表示其是不可得到的装置。
9.权利要求8的计算机程序产品,其中用于自动设置的计算机可读程序产品代码装置包括用于自动地把事件表锚定的值设置成一个既不等于空也不等于有效线索指针的值的装置。
全文摘要
一种用于保持等待事件发生的线索表的方法和设备。首先检测为执行基于事件发生的某种类型的动作所需的线索。然后,把事件表锚定的值设定成表示它是不可得到的。事件表锚定用于跟踪等待事件发生的线索表。当事件表锚定是不可得到的时,把检测到的线索增添到等待事件发生的线索表中。最后,把事件表锚定的值置为等于增添的线索的物理位置中的指针,从而表示事件表锚定的可用性。
文档编号G06F9/52GK1183593SQ9712151
公开日1998年6月3日 申请日期1997年10月21日 优先权日1996年11月22日
发明者詹姆斯·威廉·范·弗里特 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1