在虚拟机或其他计算机实体之间传送数据的系统和方法

文档序号:6419908阅读:246来源:国知局
专利名称:在虚拟机或其他计算机实体之间传送数据的系统和方法
技术领域
一般地说,本发明涉及计算机系统,更具体地说,本发明论及在虚拟机、逻辑分区或应用程序之间传送消息和数据的有效技术。
背景技术
在许多计算机环境中,两个或更多个计算机实体需要交换消息或数据。这些计算机实体包括虚拟机、逻辑分区和在单一操作系统(如Unix或Windows NT)上运行的应用。
虚拟机操作系统在今天是众所周知的,它包含一个公共基础部分和若干单独的用户部分。在一个IBM z/VM操作系统中,该公共基础部分称作“控制程序”或“CP”,而每个用户部分称作“虚拟机”或“宾客(guest)”。在每个虚拟机上能运行许多应用。每个虚拟机有它自己的工作调度器(以及相关联的工作队列)而且是作为个人操作系统显现给用户及其应用。每个虚拟机以它们所支持的应用的名义执行命令。不同的虚拟机能通过公共基础部分彼此通信。不同虚拟机之间经由CP进行的通信是以消息的形式实现的,这些消息由虚拟化通信设备如Guest Lan或IBM专有协议(如IUCV)传送。尽管这些通信是由多样协议传送的,但所有这些通信机制至少有四个共同性质a)消息数据首先被写入发送方的虚拟地址空间。
b)在每个接收方虚拟机中为每个消息产生一个中断。这调用每个接收方虚拟机中的中断处理。
c)为实现通信,CP必须被调用。
d)CP把消息数据从发送方虚拟地址空间复制到所有接收方的虚拟地址空间。
采用上述通信方法,存在显著的开销,此种开销是与调用CP、产生中断、处理中断和把消息数据从发送方虚拟地址空间复制到每个接收方的虚拟地址空间相关联的。
下面是对IUCV的更详细描述。IUCV是IBM专有的点到点协议。点对点协议从一个发送方向一个接收方传送数据。为经由IUCV进行通信,发送方首先调用CP,指出通信的预期接收方的标识。CP产生一个对该接收方的中断,如果该接收方同意通信,则CP向该接收方提供一个通信路径id(标识)。然后,CP还中断该发送方并向该发送方提供该通信路径id。为发送数据,该发送方调用CP,指出先前得到的路径id和要发送的数据。CP使用该路径id去识别接收方并产生对该接收方的中断。该接收方通过调用CP以接收该数据作为对中断的响应。于是CP从发送方的虚拟地址空间向接收方的虚拟地址空间复制数据并对发送方产生一个中断,指出数据已被传送。
下面是对Gest Lan的更详细描述。Guest Lan是使用局域网(LAN)协议的一种虚拟化通信设备。Lan协议允许在一个发送方和多个接收方之间同时通信。为经由Guest Lan通信,发送方和接收方都调用CP,指出它们希望加入Guest Lan。为发送数据,发送方调用CP,指出要发送的数据和哪些接收方应得到该数据。CP为每个所确定的接收方产生一个中断。每个接收方通过调用CP以接收数据来响应。于是CP把数据从发送方的虚拟地址空间复制到每个接收方的虚拟地址空间。一旦所有接收方已收到该数据,CP对发送方产生一个中断,指出该数据已传送给所有接收方。
逻辑分区环境也是今天众所周知的。逻辑分区是对单个计算机系统的资源的一种逻辑划分,这种划分是由软件和微代码完成的。每个逻辑分区各自是由一个或多个CPU、存储器和外围设备的配置规定的。在一个逻辑分区上运行的操作系统看待它的逻辑分区几乎与真实的计算机区分不开,当然,逻辑分区可能提供某些附加的服务,这些服务在真实计算机上是得不到的。所以,该操作系统基本上不知道它是运行在一个逻辑分区上,而且它基本上不知道这同一真实计算机上的其他逻辑分区。每个分区也有它自己的调度器,并如在虚拟机环境中那样使用中断从一个逻辑分区到另一个逻辑分区传送消息/数据。
有其他已知技术用于当两个应用运行在同一操作系统(如WindowsNT或Unix)上时一个应用与另一个应用间的通信。在这一环境中,操作系统对这两个应用使用同一个调度器。根据这些已知的通信技术,当应用“A”要与应用“B”通信时,应用A调用/通知该操作系统内的管理程序(supervisor)。该调用包括可由应用A访问的存储器中该消息/数据的地址。作为响应,管理程序把该消息/数据复制到应用B能访问的位置。接下来,管理程序把一个工作单元(work element)放到调度队列上。该工作单元把应用B认作接收方并包括一个取消息/数据命令。然后,调度器在与操作系统调度策略和工作单元相对优先级相一致的时刻把该工作单元调度到应用B。下面是一些可能的已知调度策略。如果应用B当前不忙,则当处理器变为空闲和/或未被处理(任何应用的)更高优先级工作单元所占用时,该消息/数据工作单元被调度到应用B。如果应用B当前忙于另一个优先级较低的工作项目,则调度器可能在该较低优先级工作项目完成它的被分配的处理器时间片或对操作系统进行一次调用时替入该消息/数据工作项目。但是,“中断”该操作系统以向应用B传送消息/数据是不适当的,因为这会导致开销。对调度器的共享使这种做法没有必要。如上文指出的那样,虚拟机、逻辑分区和其他环境没有共同的调度器。
本发明的一个目的是提供一种有效的方法,用于在a)运行在同一基础操作系统上的两个不同的虚拟机、b)同一计算机的两个逻辑分区或c)运行在同一计算机上但有不同调度器的两个应用之间的通信/数据传送。
本发明的一个目的是提供一种有效的方法,用于a)全部运行在同一基础操作系统上的一个虚拟机到两个或更多个其他虚拟机、b)同一计算机的一个逻辑分区到两个或更多个其他逻辑分区或c)运行在同一计算机上但有不同调度器的一个应用到两个或更多个其他应用的通信/数据传送。

发明内容
本发明在于一种方法,用于有共享存储器的第一和第二计算机程序之间的通信。第一计算机程序有第一工作调度器用于第一工作队列。第二计算机程序有第二工作调度器用于第二工作队列。一个消息或数据被从第一程序写入共享存储器供第二程序使用,以一个工作项目对第二工作队列进行更新,该工作项目指出用于第二程序的消息或数据。与更新步骤相关联的是确定第二程序当前是否忙。如果是,则第二程序不会因为该消息或数据而被中断。当其后第二程序变为不忙时,该第二程序便无需中断而接收和执行该工作项目去接收该消息或数据。如果第二程序当前不忙,则第二程序被中断以在它的工作队列上处理该消息或数据。(这给第二程序以最小负担。)根据本发明的另一特性,有一种方法用于具有共享存储器和共同基础操作系统的第一和第二虚拟机之间的通信。第一虚拟机有第一工作调度器用于第一工作队列。第二虚拟机有第二工作调度器用于第二工作队列。第一和第二工作队列驻留在由第一和第二虚拟机二者共享的存储器中。无需调用共同基础操作系统,一个消息或数据被从第一虚拟机写入共享存储器供第二虚拟机使用,以一个工作项目对第二工作队列进行更新,该工作项目指出用于第二虚拟机的消息或数据。其后,第二虚拟机程序从共享存储器中读取该消息或数据。


图1是根据本发明的虚拟机操作系统方框图。
图2是显示根据本发明由图1的虚拟机实现的接收来自另一虚拟机的消息或数据的过程的流程图。
图3是显示根据本发明由图1的虚拟机实现的向另一虚拟机发送消息或数据的过程的流程图。
图4是根据本发明的逻辑上分区的计算机系统的方框图。
图5是显示根据本发明由图4的计算机系统的一个逻辑分区实现的接收来自另一逻辑分区的消息或数据的过程的流程图。
图6是显示根据本发明由图4的一个逻辑分区实现的向另一逻辑分区发送消息或数据的过程的流程图。
具体实施例方式
现在详细地参考附图,各图中相同的标号始终表示相同的部件。图1显示根据本发明的虚拟机操作系统,一般以10表示。作为举例,虚拟机操作系统10可以是IBM z/VM版本4.2.0或4.3.0操作系统,当然本发明也能被纳入其他虚拟机或非虚拟机操作系统。z/VM 4.2.0操作系统的详情在IBM出版物“z/VM 4.2.0一般信息”(z/VM 4.20 General Information)(文档号GC24-5991-03)中被公开,它可从国际商业机器公司(PO Box29570,IBM Publications,Raleigh,North Corolina 27626-0570)或在万维网上得到,网址为WWW.IBM.com/shop/publications/order。该出版物在这里被纳入作为本公开内容的一部分供参考。操作系统10在物理计算机11如IBM zSeries(z系列)大型机中执行,当然本发明也能在其他服务器计算机或个人计算机中实现。操作系统10包含用户部分12、14、16...(在z/VM操作系统中称作“虚拟机”或“宾客虚拟机”)和公共基础部分20(在z/VM操作系统中称作“CP”)。每个用户部分12、14和16提供标准的操作系统功能,如I/O、通信等。每个用户部分12、14和16能并发执行若干不同的应用,如图中所示应用32、34和36。作为举例,应用32、34和36可以是TELNET、FTP和PING(并使用本发明代替先有技术的通信机制)。在z/VM 4.2.0和4.3.0操作系统中,Linux(Linus Torvalds的商标)操作系统也能在每个虚拟机12、14和16上运行,当然,Linux操作系统不需要虚拟机12、14和16的某些操作系统功能,因为它们前已由Linux操作系统提供了。尽管未画出,通常还有许多其他虚拟机及相关的操作系统,它们也共享公共基础部分20。同样,在每个虚拟机上可以有多个应用在执行。基础部分20包括已知的功能,如虚拟化的存储器、虚拟化的诸设备以及虚拟化的诸CPU。
计算机11还包括存储器区21,它由全部虚拟机12、14、16等共享。作为“被共享的”存储器区,每个虚拟机能直接寻址和访问该共享存储器区21以从中读取数据和向其中写入数据。对于由应用请求的或由应用产生的数据,该应用向它运行所在的相应虚拟机发出读或写请求。这个相应的虚拟机代表该应用访问共享存储器,如下文中参考图2和图3解释的那样。在本发明的(多个实施例中的)一个实施例中,共享存储器21是基础部分20的非连续保存段(Discontiguous Saved Segment,DCSS)部分的一部分。DCSS是共享存储器的一种特殊形式,它能被动态加载和卸载。在虚拟机终止甚至CP终止时它仍能存在,并能包含可执行代码。然而,除了共享存储器外,DCSS内的其他功能不是本发明所需的,因此本发明不局限于涉及DCSS或其等效物的那些实现。
每个虚拟机12、14和16包括各自的读功能32a、32b和32c,各自的写功能42a、42b和42c以及各自的调度器22a、22b和22c。当虚拟机在它执行的应用中遇到写命令时便调用写功能。该写功能是处于待用状态的,所以对写功能任务无需排队。写功能把数据从虚拟机写入共享存储器。写操作不调用CP。当虚拟机在它执行的应用中遇到读命令时便调用读功能。该读功能是处于待用状态的,所以对读功能任务无需排队。读功能从共享存储器中读数据。这样,数据不是从写方虚拟地址空间复制到读方虚拟地址空间。还有,不调用CP去读共享存储器,而这减少了开销。每个虚拟机当完成一个工作项目并因此需要另一个工作项目(如果有的话)时便调用(call/invoke)它的调度器。响应这一调用,该调度器检验共享存储器21内其相应队列26a、26b和26c上的工作项目。
在共享存储器21中还存储表24。该表指出每个虚拟机12、14、16的状态。每个虚拟机12、14和16还包括各自的工作队列管理功能(WorkQueue Management Function,“WQMF”)81a、81b或81c,该WQMF当出现工作项目时便把它们加到工作队列中,并把每个虚拟机的状态更新为“闲”或“不闲”,如下文描述的那样。表24包括每个虚拟机的标识和指出各自虚拟机是否空闲的一个指示。表24还包括用于每个虚拟机的指针,指向各自工作队列26a、26b或26c。当状态变化时表24也变化。在图1所示例子中,当前虚拟机12不空闲,即它当前正在执行另一个工作项目/任务。然而,虚拟机12在完成它的当前工作项目之后在它的工作队列26a中没有任何事情要做。虚拟机14当前是空闲的,但在其队列26b中有一个工作项目。在队列26b中的工作项目是读共享存储器的内容,从位置24D00开始并延伸给定的长度。(在工作项目之后的词“null(空)”表明该队列中再没有工作项目。)虚拟机16当前不空闲,并在其队列26c中有一个工作项目。在队列26c中的工作项目是读共享存储器中的内容,从位置24D00开始并延伸给定的长度。
图2是流程图,显示每个调度器的操作,即每个调度器与其他调度器分离地实现图2的步骤。在一个虚拟机完成每个工作项目/任务之后,它调用它的调度器去寻找要完成的新的工作项目(决策48)。在该虚拟机内的调度器响应这一调用,检验相应的工作队列(对调度器22a是工作队列26a,对调度器22b是工作队列26b,对调度器22c是工作队列26c)以查找工作项目(步骤50)。如果在该队列中存在一个工作项目(决策52),则调度器对该工作项目进行分析(parse),以确定它的性质并确定调用哪个功能来完成该工作项目。在读请求的情况中,调度器调用读功能,在由该工作项目指出的位置读消息/数据。这样,能在不产生中断和不调用中断处理的情况下完成这个读操作。然后,调度器循环回到决策52,以再次检验工作队列。如果在决策52的任何循环期间,在工作队列中没有工作项目,则该调度器在表24中为相应的虚拟机设置状态字段为“闲”(步骤60)。然后,调度器通知该虚拟机进入等待状态(步骤62)。在这一等待状态,该虚拟机是处于“睡眠”或“闲”方式,这时它不为应用也不为它本身执行任何工作项目。该虚拟机将保持在这一等待状态,直至收到一个中断指出在其工作队列中有了新的工作项目(决策66)。当收到这一中断时,该虚拟机的WQMF在表24中为相应的虚拟机设置状态字段为“不闲”(步骤68)。接下来,该调度器循环回到决策52以检验该工作队列去寻找工作项目。在这时,在该工作队列中应该有一个工作项目。
图3显示虚拟机之一(例如虚拟机12)当它想要向另一虚拟机(如虚拟机14)发送一个消息/数据时的操作。在步骤80,虚拟机12调用它的写功能32a以把数据写入共享存储器21。如前文解释的那样,每个虚拟机通过提供适当的地址能直接访问共享存储器。于是,虚拟机12的写功能32a通过给定要写入的地址和提供要写的数据把该数据写入共享存储器。接下来,在虚拟机12内的工作队列管理功能(“WQMF”)81a通过把一工作项目写入虚拟机14的工作队列26b使得对工作队列26b添加了一个工作项目(步骤82)。因为该工作队列是在共享存储器中,所以这不需要调用CP。接下来,WQMF 81a通过检验表24确定虚拟机14当前是否空闲(决策84)。如果不空闲,则虚拟机12不再做任何事情去完成这一通信,而且在这一通信过程的任何一点CP都不被调用(终止步骤86)。根据本发明,虚拟机12不去中断虚拟机14,这是因为在中断虚拟机过程中涉及的开销。如上文参考图2解释的那样,当虚拟机14完成它的当前工作项目时,它将自动调用(invoke/call)它的调度器去检验其工作队列以寻找另一个工作项目(决策48和步骤50)。在那时它将看到来自虚拟机12的这个工作项目。再次参考决策84,如果虚拟机14空闲,则根据本发明,虚拟机12向虚拟机14发出“唤醒”型中断(步骤88)。这需要调用CP。这个唤醒型中断告警/调用虚拟机14,告知它在其队列26b中有一个工作项目。虚拟机12以发出这一中断完成数据通信的它的那一部分。该“唤醒”中断自动地使虚拟机14启动其调度器22b(图2的决策48)以检验其工作队列寻找工作项目。然后调度器22b实现图2中所示步骤以检验它的工作队列26b(步骤50和决策52),然后读数据(步骤54)。
图3还显示虚拟机之一(例如虚拟机12)当它想要与两个或更多个其他虚拟机(例如虚拟机14和16)进行通信时的操作。在步骤80,虚拟机12调用它的写功能32a以把数据写入共享存储器21。于是,虚拟机12通过给定要写入的地址和提供要写的数据把该数据写入共享存储器。在图1中所示例子中,数据被写入以地址24D00开始的共享存储器位置。接下来,虚拟机12内的WQMF 81a通过把工作项目、数据地址和数据长度写到工作队列上,对虚拟机14和16的工作队列26b和26c添加了一个工作项目(步骤82)。然后,虚拟机12内的WQMF 81a通过检验表24确定虚拟机14和16当前是否空闲(决策84)。在图1所示例子中,虚拟机14是空闲的,但虚拟机16是忙的。于是,对于忙的虚拟机16,虚拟机12不再做任何事情去完成这一通信(终止步骤86)。根据本发明,虚拟机12不去中断忙的虚拟机16,这是因为在中断虚拟机过程中涉及的开锁。如上文参考图2解释的那样,当忙的虚拟机16完成它的当前工作项目时,它将自动检验它的工作队列以寻找另一工作项目(决策48和步骤50)。在那时它将看到来自虚拟机12的这个工作项目,于是通信将被完成,而无需调用CP。再次参考决策84,因为虚拟机14是空闲的,于是根据本发明,虚拟机12向空闲的虚拟机14发出“唤醒”型中断(步骤88)。这个唤醒型中断告警/调用空闲虚拟机14,告知它在其队列中有一个工作项目。虚拟机12以发出这一中断完成数据通信的它的那一部分。该“唤醒”中断自动地使虚拟机14调用(invoke/call)它的调度器22b以检验其工作队列寻找工作项目。然后调度器22b实现图2中所示步骤以检验它的工作队列26b(决策52),然后读数据(步骤54)。
图4显示根据本发明的逻辑分区的计算机系统,总体上以110表示。系统110是一个物理计算机111的一个逻辑分区,该物理计算机可以是例如IBM zSeries大型机,当然本发明也能在其他服务器计算机或个人计算机中实现。系统110包含逻辑分区112、114、116。每个逻辑分区112、114和116向其应用提供标准的操作系统功能,如I/O、通信等。每个逻辑分区112、114和116能并发执行若干不同的应用,如图中所示应用132、134和136。作为举例,应用132、134和136能是Telnet,FTP以及Ping(并使用本发明代替先有技术的通信机制)。基础部分120参与计算机111及其资源的实际逻辑分区,即对一个或多个CPU分区,对存储器分区,对I/O分区等。不同于本发明的基础部分120和逻辑分区112、114及116的一个实例的诸功能在题为“企业系统/9000 9221处理器操作您的系统—卷2(逻辑分区方式)”(Enterprise System/9000 9221 ProcessorsOperating Your System-Volume 2(Logically Partitioning Mode))的文档中描述,出版号为SA24-4351-02,它可从国际商业机器公司(PO Box 29570,IBM Publications,Raleigh,North Carolina 27626-0570)或在万维网上得到,网址为WWW.IBM.com/shop/publications/order。
计算机111还包括存储器区121,它由全部球逻辑分区112、114、116等共享。作为“被共享的”存储器区,每个逻辑分区能直接寻址和访问该共享存储器区121以从中读取数据和向其写入数据。对于由应用请求的数据或由应用产生的数据,该应用向它运行所在的逻辑分区发出读或写请求。这个相应的逻辑分区代表该应用访问该共享存储器,如下文中参考图5和图6解释的那样。
每个逻辑分区112、114和116包括各自的读功能132a、132b和132c,各自的写功能142a、142b和142c以及各自的调度器122a、122b和122c。当逻辑分区在它执行的应用中遇到写命令时便调用写功能。该写功能是处于等待状态的,所以对写功能任务无需排队。写功能把数据从逻辑分区写入共享存储器,所以不调用基础部分120。当逻辑分区在它执行的应用中遇到读命令时便调用读功能。该读功能是处于待用状态的,所以对读功能任务无需排队。读功能从共享存储器中读数据。所以不调用基础部分120。还有,数据不是从写方的虚拟地址空间复制到读方的虚拟地址空间。每个逻辑分区当完成一个工作项目并因此需要另一个工作项目(如果有的话)时便调用(call/invoke)它的调度器。响应这一调用,调度器检验共享存储器121内其相应队列126a、126b或126c上的工作项目。
在共享存储器121中还存储表124。该表指出每个逻辑分区112、114和116的状态。每个逻辑分区112、114和116还包括各自的WQMF 181a、181b或181c,该WQMF当出现工作项目时便把它们加到工作队列中,并把每个逻辑分区的状态更新为“闲”或“不闲”,如下文描述的那样。表124包括每个逻辑分区的标识和指出各逻辑分区是否空闲的一个指示。表124还包括用于每个逻辑分区的指针,指向各自工作队列126a、126b或126c。当状态变化时表124也变化。在图4所示例子中,当前逻辑分区112不空闲,即它当前还在执行另一个工作项目/任务。然而,逻辑分区112在完成它的当前工作项目之后在它的工作队列126a中没有任何事情要做。逻辑分区114当前是空闲的,但在其队列126b中有一个工作项目。在队列126b中的工作项目是读共享存储器的内容,从位置24D00开始并延伸给定的长度。(在工作项目之后的词“null(空)”表明该队列中再没有工作项目。)逻辑分区116当前不空闲,并在其队列126c中有一个工作项目。在队列126c中的工作项目是读共享存储器中的内容,从位置24D00开始并延伸给定的长度。
图5是流程图,显示每个调度器的操作,即每个调度器与其他调度器分离地实现图5的步骤。在一个逻辑分区完成每个工作项目/任务之后,它调用它的调度器去寻找要完成的新的工作项目(决策148)。在该逻辑分区内的调度器响应这一调用,检验相应的工作队列(对调度器122a是工作队列126a,对调度器122b是工作队列126b,对调度器122c是工作队列126c)以查找工作项目(步骤150)。如果在该队列中存在一个工作项目(决策152),则调度器对该工作项目进行分析(parse),以确定它的性质并确定调用哪个功能来完成该工作项目。在读请求的情况中,调度器调用读功能,在由该工作项目指出的位置读消息/数据。这样,能在不产生中断和不调用中断处理的情况下完成这个读操作。然后,调度器循环回到决策152,以再次检验工作队列。如果在决策152的任何循环期间,在工作队列中没有工作项目,则该调度器在表124中为相应的逻辑分区设置状态字段为“闲”(步骤160)。然后,调度器通知该逻辑分区进入等待状态(步骤162)。在这一等待状态,该逻辑分区是处于“睡眠”或“闲”方式,这时它不为应用也不为它本身执行任何工作项目。该逻辑分区将保持在这一等待状态,直到收到一个中断指出在其工作队列中有了新的工作项目(决策166)。当收到这一中断时,该逻辑分区的WQMF在表124中为相应的逻辑分区设置状态字段为“不闲”(步骤168)。接下来,该调度器循环回到决策152以检验该工作队列去寻找工作项目。在这时,在该工作队列中应该有一个工作项目。
图6显示逻辑分区之一(例如逻辑分区112)当它想要向另一逻辑分区(例如逻辑分区114)发送一个消息/数据时的操作。在步骤180,逻辑分区112调用它的写功能132a以把数据写入共享存储器121。如前文解释的那样,每个逻辑分区通过提供适当的地址能直接访问共享存储器。于是,逻辑分区112的写功能132a通过给定要写入的地址和提供要写的数据把该数据写入共享存储器。接下来,在逻辑分区112内的WQMF 181a通过把一工作项目写入逻辑分区114的工作队列126b使得对工作队列126b添加了一个工作项目(步骤182)。接下来,WQMF 181a通过检验表124确定逻辑分区114当前是否空闲(决策184)。如果不空闲,则该逻辑分区不再做任何事情去完成这一通信,而且在这一通信过程的任何一点基础部分120都不被调用(终止步骤186)。根据本发明,逻辑分区112不去中断逻辑分区114,这是因为在中断逻辑分区过程中涉及的开销。如上文参考图5解释的那样,当逻辑分区114完成它的当前工作项目时,它将自动调用(invoke/call)它的调度器去检验其工作队列以寻找另一个工作项目(决策148和步骤150)。在那时它将看到来自逻辑分区112的这个工作项目。再参考决策184,如果逻辑分区114空闲,则根据本发明,逻辑分区112向逻辑分区114发出“唤醒”型中怕(步骤188)。这个唤醒型中断告警/调用逻辑分区114,告知它在其队列126b中有一个工作项目。逻辑分区112以发出这一中断完成数据通信的它的那一部分。该“唤醒”中断自动地使逻辑分区114启动其调度器122b(图5中的决策148)以检验其工作队列寻找工作项目。然后调度器22b实现图5中所示步骤以检验它的工作队列126b(步骤150和决策152),然后读数据(步骤154)。
图6还显示逻辑分区之一(例如逻辑分区112)当它想要与两个或更多个其他逻辑分区(例如逻辑分区114和116)进行通信时的操作,在步骤180,逻辑分区112调用它的写功能132a以把数据写入共享存储器121。于是,逻辑分区112通过给定要写入的地址和提交要写的数据把该数据写入共享存储器。在图4中所示例子中,数据被写入以地址24D00开始的共享存储器位置。接下来,逻辑分区112内的WQMF 181a通过把工作项目、数据地址和数据长度写到工作队列上,对逻辑分区114和116的工作队列126b和126c添加了一个工作项目(步骤182)。然后,逻辑分区112内的WQMF 181a通过检验表124确定逻辑分区114和116当前是否空闲(决策184)。在图4所示例子中,逻辑分区114是空闲的,但逻辑分区116是忙的。于是,对于忙的逻辑分区116,逻辑分区112不再做任何事情去完成这一通信(终止步骤186)。根据本发明,逻辑分区112不去中断忙的逻辑分区116,这是因为在中断逻辑分区过程中涉及的开销。如上文参考图5解释的那样,当忙的逻辑分区116完成它的当前工作项目时,它将自动检验它的工作队列以寻找另一工作项目(决策148和步骤150)。在那时它将看到来自逻辑分区112的这个工作项目,于是通信将被完成,而无需调用基础部分120。再次参考决策184,因为逻辑分区114是空闲的,于是根据本发明,逻辑分区112向空闲的逻辑分区114发出“唤醒”型中断(步骤188)。这个唤醒型中断告警/调用空闲的逻辑分区114,告知它在其队列中有一个工作项目。逻辑分区112以发出这一中断完成数据通信的它的那一部分。该“唤醒”中断自动使逻辑分区114调用(invoke/call)它的调度器112b以检验其工作队列寻找工作项目。然后调度器122b实现图5中所示步骤以检验它的工作队列126b(决策152),然后读数据(步骤154)。
权利要求
1.一种在具有共享存储器的第一和第二计算机程序之间通信的方法,所述第一计算机程序具有用于第一工作队列的第一工作调度器,所述第二计算机程序具有用于第二工作队列的第二工作调度器,所述方法包含如下步骤从所述第一程序向所述共享存储器写用于所述第二程序的消息或数据,并以一个工作项目更新所述第二工作队列,该工作项目指出用于所述第二程序的消息或数据;与所述更新步骤相关联,确定所述第二程序当前是否忙;如果是,则不因所述消息或数据而中断所述第二程序;以及如果不是,则中断所述第二程序以处理在其工作队列上的所述消息或数据。
2.根据权利要求1所述的方法,其特征在于,当所述第二程序随后变为不忙时,所述第二程序,无需中断,而接收和执行所述工作项目以接收所述消息或数据。
3.根据权利要求1所述的方法,其特征在于,所述第一程序是一个第一虚拟机而所述第二程序是一个第二虚拟机。
4.根据权利要求1所述的方法,其特征在于,所述第一和第二工作队列驻留在由所述第一和第二计算机程序共享的一个存储器中。
5.根据权利要求1所述的方法,其特征在于,所述第一和第二工作队列驻留在所述共享存储器中。
6.根据权利要求5所述的方法,其特征在于,所述共享存储器是由一个虚拟机操作系统的公共基础部分建立的,从而使所述共享存储器同时驻留在两个虚拟机中。
7.根据权利要求1所述的方法,其特征在于,所述第一计算机程序是一个计算机系统的一个第一逻辑分区,而所述第二计算机程序是所述计算机系统的一个第二逻辑分区。
8.根据权利要求7所述的方法,其特征在于,进一步包含一个由所述第一和第二逻辑分区共用的基本操作系统,并且所述写和更新步骤不需要调用所述基本操作系统。
9.根据权利要求1所述的方法,其特征在于,进一步包含由所述第二计算机程序从所述共享存储器读所述消息或数据的步骤。
10.根据权利要求9所述的方法,其特征在于,当从所述第一计算机程序向所述第二计算机程序传送所述消息或数据时,所述消息或数据只被一次写入所述共享存储器。
11.一种在具有共享存储器的第一和第二计算机程序之间通信的系统,所述第一计算机程序具有用于第一工作队列的第一工作调度器,所述第二计算机程序具有用于第二工作队列的第二工作调度器,所述系统包含用于从所述第一程序向所述共享存储器写供所述第二程序使用的消息或数据,并以一个工作项目更新所述第二工作队列的装置,该工作项目指出用于所述第二程序的消息或数据;与所述更新步骤关联,用于确定所述第二程序当前是否忙,而且如果是忙,则不因所述消息或数据而中断所述第二程序,而如果不是忙,则中断所述第二程序以处理在其工作队列上的所述消息或数据的装置。
12.一种用于在具有共享存储器的第一和第二计算机程序之间通信的计算机程序产品,所述第一计算机程序具有用于第一工作队列的第一工作调度器,所述第二计算机程序具有用于第二工作队列的第二工作调度器,所述程序产品包含计算机可读介质;用于从所述第一程序向所述共享存储器写消息或数据供所述第二程序使用,并以一个工作项目更新所述第二工作队列的程序指令装置,该工作项目指出用于所述第二程序的消息或数据;与所述更新步骤关联,用于确定所述第二程序当前是否忙,而且如果是忙,则不因所述消息或数据而中断所述第二程序,而如果不是忙,则中断所述第二程序以处理在其工作队列上的所述消息或数据的程序指令装置;其中,所述程序指令装置被记录在所述介质上。
13.一种在具有共享存储器和公共基础操作系统的第一和第二虚拟机之间通信的方法,所述第一虚拟机具有用于第一工作队列的第一工作调度器,所述第二虚拟机具有用于第二工作队列的第二工作调度器,所述第一和第二工作队列驻留在由所述第一和第二虚拟机二者共享的存储器中,所述方法包含如下步骤不调用所述公共基础操作系统,从所述第一虚拟机向所述共享存储器写用于所述第二虚拟机的消息或数据,并以一个工作项目更新所述第二工作队列,该工作项目指出用于所述第二虚拟机的消息或数据。
14.根据权利要求13所述的方法,其特征在于,与所述更新步骤相关联并且不调用所述公共基础操作系统,确定所述第二虚拟机当前是否忙,而且如果是忙,则不因所述消息或数据而中断所述第二虚拟机,而如果不是忙,则中断所述第二虚拟机以处理在其工作队列上的所述消息或数据。
15.根据权利要求14所述的方法,其特征在于,所述中断步骤需要调用所述公共基础操作系统。
16.根据权利要求13所述的方法,其特征在于,所述第一调度器驻留在所述第一虚拟机中,所述第二调度器驻留在所述第二虚拟机中。
17.根据权利要求13所述的方法,其特征在于,进一步包含所述第二虚拟机程序从所述共享存储器读所述消息或数据的步骤。
18.根据权利要求17所述的方法,其特征在于,当从所述第一虚拟机向所述第二虚拟机传送所述消息或数据时,所述消息或数据只被一次写入所述共享存储器。
19.一种在具有共享存储器和公共基础操作系统的第一和第二计算机程序之间通信的方法,所述第一计算机程序具有用于第一工作队列的第一工作调度器,所述第二计算机程序具有用于第二工作队列的第二工作调度器,所述第一和第二工作队列驻留在由所述第一和第二计算机程序二者共享的存储器中,所述方法包含如下步骤不调用所述公共基础操作系统,从所述第一计算机程序向所述共享存储器写用于所述第二计算机程序的消息或数据并以一个工作项目更新所述第二工作队列,该工作项目指出用于所述第二计算机程序的消息或数据。
20.根据权利要求19所述的方法,其特征在于,所述第一计算机程序是一个第一逻辑分区,所述第二计算机程序是一个第二逻辑分区。
21.根据权利要求19所述的方法,其特征在于,所述第一和第二工作队列驻留在由所述第一和第二计算机程序二者共用的一个或多个存储器中。
全文摘要
一种在具有共享存储器的第一和第二计算机程序之间通信的方法。该第一计算机程序具有第一工作调度器用于第一工作队列。该第二计算机程序具有第二工作调度器用于第二工作队列。无需引起中断,一个消息或数据被从第一程序写入共享存储器供第二程序使用,而第二工作队列以一个工作项目进行更新,该工作项目指出用于第二程序的消息或数据。与更新步骤相关联,确定第二程序当前是否忙。如果是,则第二程序不会因为该消息或数据而被中断。当其后第二程序变为不忙时,该第二程序便无需中断而接收和执行该工作项目去接收该消息或数据。如果第二程序当前不忙,则第二程序被中断以处理它的工作队列上的该消息或数据。这给第二程序造成最小负担。
文档编号G06F9/455GK1497469SQ20031010177
公开日2004年5月19日 申请日期2003年10月23日 优先权日2002年10月24日
发明者S·S·舒尔茨, X·特卡特寿, S S 舒尔茨, ㄌ厥 申请人:国际商业机器公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1