CN103368848A - 信息处理设备、算术装置和信息传递方法 - Google Patents
信息处理设备、算术装置和信息传递方法 Download PDFInfo
- Publication number
- CN103368848A CN103368848A CN2012103646416A CN201210364641A CN103368848A CN 103368848 A CN103368848 A CN 103368848A CN 2012103646416 A CN2012103646416 A CN 2012103646416A CN 201210364641 A CN201210364641 A CN 201210364641A CN 103368848 A CN103368848 A CN 103368848A
- Authority
- CN
- China
- Prior art keywords
- pointer
- cpu
- message
- address
- data
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F15/00—Digital computers in general; Data processing equipment in general
- G06F15/16—Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
- G06F15/163—Interprocessor communication
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/546—Message passing systems or structures, e.g. queues
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computer Hardware Design (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Multi Processors (AREA)
- Information Transfer Systems (AREA)
Abstract
本发明公开了信息处理设备、算术装置和信息传递方法。该信息处理设备(1)包括多个节点(10至10m)。每个节点(10至10m)包括处理器(12至15)、存储装置(17至24)和存储多个指针组的存储单元(78),在每个指针组中,写入指针与读取指针相关联,该写入指针表示在从其他节点接收到的数据存储在存储装置(17至24)中时所使用的地址,该读取指针表示在从存储装置(17至24)中读取数据时所使用的地址。每个节点(10至10m)包括将表示指针组的指针标识符通知与数据的发送源对应的节点的通知单元(40至40b)。每个节点(10至10m)包括根据由指针标识符所表示的指针组中的写入指针表示的地址将所接收到的数据保持在存储装置(17至24)中的保持单元(58)。
Description
技术领域
本文中所述的实施例涉及一种信息处理设备、算术单元和信息传递方法。
背景技术
被称为进程间通信(IPC)的传统技术是公知,进程间通信用于在每个软件与多个软件协作执行进程时发送和接收多个软件使用的数据。作为进程间通信的示例性技术,已知用于使用队列来执行进程间通信的技术。
以下,将参照图40至图43描述用于使用队列执行进程间通信的技术的示例。图40是示出通过传统软件执行的进程间通信的概念的示意图。例如,在图40所示的示例中,用户进程A至C中的每个用户进程将要发送到用户进程D的数据存储在通过软件实现的先进先出(FIFO)系统中的队列中。此外,用户进程D按存储在FIFO系统中的队列中的数据到达的顺序获取该数据。
以下,将参照图41描述在用户进程A至C通过使用队列将消息A至C分别发送到用户进程D时所执行的处理。图41是示出作为使用传统软件的进程间通信来执行的处理的示意图。在图41所示的示例中,存储器将被用作队列的存储区的基地址、表示数据的读取地址的读取指针以及表示数据的写入地址的写入指针存储在其中。在下文所述的示例中,假设读取指针和写入指针各自的初始值均为“0x0120”。
例如,用户进程A参考写入指针并从由写入指针表示的地址“0x0120”开始存储32字节的消息A。然后,用户进程A将“0x0020”与作为写入指针的值的“0x0120”相加,并且将其更新为“0x0140”。当用户进程A更新写入指针时,用户进程A发布基本指令(诸如比较和交换(CAS)指令或者取得和添加(FAD)指令),或者执行获得例如写入指针的互斥锁的互斥存取控制。
随后,类似于用户进程A,用户进程B参考写入指针;从由写入指针表示的地址“0x0140”开始存储32字节消息B;并且将写入指针的值从“0x0140”更新为“0x0160”。此外,类似地,用户进程C将消息C存储在由写入指针表示的地址“0x0160”中,并将写入指针的值从“0x0160”更新为“0x0180”。
相反,与用户进程A至C不同步地,用户进程D确定读取指针的值是否与写入指针的值匹配。如果这两个值不匹配,则用户进程D确定新消息存储在队列中。如果用户进程D确定新消息存储在队列中,则用户进程D从由读取指针表示的地址读取该消息。
例如,由于读取指针的值是“0x0120”且写入指针的值是“0x0160”,因此,用户进程D从“0x0120”读取消息A并将读取指针的值从“0x0120”更新为“0x0140”。通过重复该进程直到读取指针的值与写入指针的值匹配为止,用户进程D读取存储在队列中的消息A至C中的每个消息。
此外,用于多个CPU执行不同进程的多节点系统的技术是公知的。作为这样的多节点系统的示例,已知一种信息处理系统,该多节点系统包括对数据进行高速缓存的多个中央处理单元(CPU),其中各CPU同时执行不同进程。此外,用于共享存储器系统的技术也是公知的,在该共享存储器系统中,每个CPU运行独立OS并且在CPU之间共享存储器区域的一部分。采用该配置,可以改进性能,而且,由于每个OS在每个节点中独立地进行操作,所以可以防止错误;因此,能够改进系统的可用性。
图42是示出使用共享存储器的多节点系统的概念的示意图。如图42所示,信息处理系统包括分别包括CPU#0至#3的多个节点#0至#3。节点#0至#3中的每一个均包括本地存储器、管理程序(HPV)软件、操作系统(OS)和装置驱动程序,并且同时分别地执行不同的用户进程A至D。HPV软件是管理由节点#0至#3中的每个节点操作的虚拟机的软件。上述的信息处理系统通过将写入指针和读取指针存储在由各节点#0至#3共享的共享存储器中来实现队列,并且执行用户进程A至D之间的进程间通信。
以下,将参照图43描述在用户进程A至C分别将消息A至C发送到用户进程D时各CPU#0至#3执行的处理的示例。图43是示出每个节点对写入指针进行高速缓存的处理的示意图。例如,执行用户进程A的CPU#0将写入指针高速缓存到共享存储器中并从由写入指针表示的地址“0x0120”开始将消息A存储在其中(在图43的(1)中)。此外,CPU#0将所高速缓存的写入指针的值更新为“0x0140”(在图43的(2)中),并存储表示写入指针的高速缓存行处于更新状态(即,修改)的信息。
随后,由于写入指针的高速缓存行处于更新状态,因此,执行用户进程B的CPU#1从CPU#0高速缓存经CPU#0更新的写入指针(在图43的(3)中)。然后,如果CPU#1从由所高速缓存的写入指针表示的地址“0x0140”开始存储消息B,则CPU#1将写入指针的值更新为“0x0160”(图43的(4)中)。类似地,执行用户进程C的CPU#2从CPU#1高速缓存经CPU#1更新的写入指针(在图43的(5)中),并从由所高速缓存的写入指针表示的地址“0x0160”开始存储消息C。然后,CPU#2将写入指针的值更新为“0x0180”(在图43的(6)中)。
此时,执行用户进程D的CPU#3从共享存储器高速缓存读取指针(在图43的(7)中)。此外,由于写入指针的高速缓存行处于更新状态,因此,CPU#3从CPU#2高速缓存经CPU#2更新的写入指针(在图43的(8)中)。由于读取指针“0x0120”的值与写入指针“0x0160”的值不匹配,因此,CPU#3从由读取指针表示的地址读取消息并更新读取指针的值。此后,CPU#3读取消息并更新读取指针,直到读取指针的值与写入指针的值匹配为止,然后,获得分别通过用户进程A至C发送的消息A至C。
专利文献1:第2703417号日本专利
专利文献2:第2003-216592号日本早期公开专利公布
专利文献3:第07-200506号日本早期公开专利公布
然而,在用于将读取指针和写入指针存储在共享存储器中的技术中,在数据发送侧的节点高速缓存写入指针并更新所高速缓存的写入指针的值。相应地,如果在高速缓存写入指针的节点发生故障,则由于另一节点没有获得写入指针的最新值,所以不执行数据传输。因此,存在故障传播到其他节点的问题。
以下,将参照图44给出对如下问题的描述:当在正高速缓存写入指针的节点发生了故障时,故障被传播到另一节点。图44是示出当在节点发生了故障时故障被传播到另一节点的流程的示意图。
例如,CPU#0将写入指针高速缓存到共享存储器中,存储消息A,并将所高速缓存的写入指针的值更新为“0x0140”。随后,如果CPU#1从CPU#0高速缓存经CPU#0更新的写入指针,则CPU#1从由所高速缓存的写入指针表示的地址“0x0140”开始存储消息B,并将写入指针的值更新为“0x0160”。
在这种状态下,假设在节点#1发生了错误并且假设CPU#1异常停止。为了发送消息,CPU#2尝试高速缓存已经由CPU#1更新的写入指针;然而,由于CPU#1已停止,因此,CPU#2没有高速缓存写入指针,如图44的(A)所示。相应地,CPU#2异常停止而不使进程继续。
此外,CPU#3尝试高速缓存写入指针以便确定是否发送新消息。然而,由于CPU#1已停止,因此,CPU#3没有从CPU#1高速缓存写入指针,并因而异常停止,如图44的(B)中所示。此外,如果CPU#3异常停止,则由于没有执行由消息A指定的进程,因此,CPU#0可能由于例如超时而异常停止。
因此,本发明的实施例的一方面的目的是当在使用多节点系统的技术的进程间通信中在节点发生故障时防止故障传播到其他节点。
发明内容
根据实施例的一方面,一种信息处理设备包括多个节点。每个节点均包括处理器和存储装置。每个节点均包括存储单元,该存储单元存储有将多个×指针组,在每个指针组中,表示在将从其他节点接收到的数据存储在存储装置中时所使用的地址的写入指针与表示从存储装置读取数据时所使用的地址的读取指针相关联。每个节点均包括通知单元,该通知单元将表示指针组的指针标识符通知与数据的发送源对应的节点。每个节点均包括保持单元,该保持单元在从与数据的发送源对应的节点接收到数据和由通知单元通知的指针标识符时,根据由指针标识符表示的指针组中的写入指针表示的地址来将所接收到的数据保存在存储装置中。
附图说明
图1是示出根据第一实施例的信息处理系统的示意图;
图2是示出根据第一实施例的节点的功能配置的示意图;
图3是示出根据第一实施例的存储器的分配的示意图;
图4是示出根据第一实施例的信息处理系统映射到每个存储器上的存储器映射的示意图;
图5是示出根据第一实施例的信息处理系统中的硬件与软件之间的关系的示意图;
图6是示出根据第一实施例的由CPU执行的进程的概念的示意图;
图7是示出根据第一实施例的进程间通信的流程的示意图;
图8是示出根据第一实施例的CPU的功能配置的示意图;
图9是示出根据第一实施例的发送控制单元的功能配置的示意图;
图10是示出提供给每个寄存器的地址的示例的示意图;
图11是示出MSGQ-ID的格式的示例的示意图;
图12是示出MSGQ-ID中的每个字段内所存储的信息的示意图;
图13是示出包格式的示例的示意图;
图14是示出应答包格式的示例的示意图;
图15是示出根据第一实施例的接收控制单元的功能配置的示意图;
图16是示出RAM中的字段的示例的示意图;
图17是示出RAM中的字段内所存储的数据内容的示意图;
图18是示出从软件侧观察的接收控制单元中的寄存器的地址示例的示意图;
图19是示出存储器写入地址的示例的示意图;
图20是示出RAM中的字段根据操作类型分类的更新的示意图;
图21是示出消息存储区域的示意图;
图22是示出将程序错误纳入考虑的地址映射的示意图;
图23是示出将程序错误纳入考虑的地址映射中的地址配置的示意图;
图24是示出在发送以及接收消息时所执行的操作的序列图;
图25是示出用于通过使用中断指令向用户进程发布到达通知的处理的流程的序列图;
图26是示出在发送侧节点发生上下文切换时所执行的处理的流程的序列图;
图27是示出在传统的无限带宽(InfiniBand)中的队列对的功能的示意图;
图28是示出在进程之间共享队列对时所执行的处理的示意图;
图29是示出在获取新消息队列时所执行的处理的流程的流程图;
图30是示出用于通过驱动程序获取新消息队列的处理的流程的流程图;
图31是示出在发送侧CPU中的消息发送处理的流程的流程图;
图32是示出在接收侧CPU中的管理接收处理的流程的流程图;
图33是示出根据第二实施例的接收控制单元的功能配置的示意图;
图34是示出根据第二实施例的定义RAM中的字段的示意图;
图35是示出根据第二实施例的在RAM中的字段内所存储的数据内容的示意图;
图36是示出从软件侧观察的根据第二实施例的接收控制单元中的地址示例的示意图;
图37是示出根据第二实施例的用于更新RAM中的字段的处理的示意图;
图38是示出第二实施例中在发生溢出时所执行的处理的流程的序列图;
图39是示出在发生溢出时由根据第二实施例的CPU执行的处理的流程的流程图;
图40是示出通过传统软件执行的进程间通信的概念的示意图;
图41是示出通过使用传统软件,作为进程间通信所执行的处理的示意图;
图42是示出使用共享存储器的多节点系统的概念的示意图;
图43是示出每个节点高速缓存写入指针的处理的示意图;以及
图44是示出当在一个节点发生了故障时故障传播到另一节点的流程的示意图。
具体实施方式
将参照附图说明本发明的优选实施例。
[a]第一实施例
在第一实施例中,以下将参照图1描述信息处理系统的示例。图1是示出根据第一实施例的信息处理系统的示意图。在图1所示的示例中,信息处理系统1包括客户终端2、客户终端2a、局域网(LAN)交换机3、管理终端4、LAN交换机5、双重的全局交叉开关(global crossbar)6以及多个节点10至10m。全局交叉开关6包括服务处理器7。
在第一实施例中,节点是单个独立操作系统(OS)运行的单元,并且包括运行OS所需的最少的装置。如稍后将描述的,节点包括一个或多个CPU、存储器以及硬盘驱动器(HDD)或替代HDD的外部存储装置。节点还可以是单个物理装置或者还可以是由通过使用例如线缆连接的多个装置物理构成的。
节点10至10m经由服务LAN分别连接到LAN交换机3以及客户终端2和2a。此外,节点10至10m经由内部LAN连接到LAN交换机5。此外,节点10至10m经由管理LAN连接到管理终端4。此外,节点10至10m经由互连连接到双重的全局交叉开关6且彼此相连。
各客户终端2和2a经由服务LAN从各节点10至10m获得服务。尽管图1中未示出,但是信息处理系统1还可以包括任意数量的附加客户终端。
节点10包括服务处理器11、CPU 12以及局部XB(交叉开关)16。类似于节点10,其他节点10a至10m也均包括服务处理器、CPU和局部XB。在以下描述中,节点10a至10m具有与由节点10执行的功能相同的功能;因此,将省略对其的描述。
服务处理器11经由管理LAN连接到管理终端4,并执行管理控制,诸如管理每个节点10中的电源。全局交叉开关6中所包括的服务处理器7作为服务处理器11的母机(master)进行操作,并且执行总体管理控制。由各服务处理器7和11执行的管理控制的示例包括电源管理、重置、操作模式的改变、对节点的添加或删除的设置、错误日志的收集以及退化的操作控制。
此外,节点10至10m独立地运行操作系统(OS)。尽管图1中未示出,节点10包括除了CPU 12外的多个CPU。每个CPU均经由局部XB16连接到全局交叉开关6。
节点10中的CPU 12将作为对存储器进行存取的请求的存储器存取请求输出到局部XB 16,从而CPU 12将存储器存取请求传递到另一节点。然后,当节点10中的CPU 12获得存储器存取请求时,CPU 12以与在CPU 12对连接到CPU 12的存储器进行存取时所执行的存储器存取类似的方式执行存储器存取。具体地,在信息处理系统1中使用非均匀存储器存取(NUMA)技术;因此,各节点10至10m通过共享相应的存储器来执行处理。
以下,将参照图2描述节点10的功能配置。图2是示出根据第一实施例的节点的功能配置的示意图。在图2所示的示例中,节点10包括服务处理器11、多个CPU 12至15、局部XB 16、多个存储器17至24以及外围组件互连快速(PCIe)开关25。此外,节点10还包括用于连接到服务LAN的LAN适配器26、用于连接到管理LAN的LAN适配器27、串行连接SCSI(SAS)28以及硬盘驱动器(HDD)29。
存储器17和存储器18连接到CPU 12,并且为接收由CPU 12执行的存储器存取的存储装置。存储器19和存储器20连接到CPU 13,并且为接收由CPU 13执行的存储器存取的存储装置。存储器21和存储器22连接到CPU 14,并且为接收由CPU 14执行的存储器存取的存储装置。
存储器23和存储器24连接到CPU 15,并且为接收由CPU 15执行的存储器存取的存储装置。在图2所示的示例中,节点10包括HDD 29;然而,实施例不限于此。例如,HDD 29还可以通过使用诸如存储区域网络(SAN)技术的技术而设置在节点10外。
服务处理器11执行对节点10的管理控制。具体地,服务处理器11包括执行处理的现场可编程门阵列和处理器,并且经由管理LAN从管理终端4接收执行管理控制的指令。然后,服务处理器11根据从管理终端4接收到的指令执行各种管理控制。
PCIe开关25是对例如经由PCIe插槽连接到各CPU 12至15的I/O装置的存取进行控制的开关。LAN适配器26是将服务LAN连接到节点10的LAN适配器。LAN适配器27是将管理LAN连接到节点10的LAN适配器。SAS 28是用于LAN的适配器或者安装于PCIe插槽的SAS,并且中继HDD 29与各CPU 12至15之间的连接。
以下,将描述CPU 12至15。CPU 12至15相互连接,并且可以相互发送和接收存储器存取请求和应答。以下将描述CPU 12。CPU 12与CPU13至15相互连接。CPU 13至15具有与CPU 12执行的功能相同的功能;因此,将省略描述。
CPU 12具有执行对存储器19和存储器20两者的存储器存取的存储器接口的功能;高速缓存存储器19或存储器20中所存储的数据;以及通过使用所高速缓存的数据执行算术处理。此外,CPU 12具有通过使用HDD 29、内部LAN或者管理LAN来经由PCIe开关25控制存取的PCIe接口功能。
此外,CPU 12通过互联而经由局部XB 16和全局交叉开关6连接到包括在其他节点10a至10m中的CPU,并且具有相互发送和接收存储器存取请求的互联路由器功能。当通过要执行的进程对存储器19或存储器20发布例如存储器存取请求时,具有这样的配置的CPU 12执行以下处理。具体地,CPU 12对存储器19或20进行存取并高速缓存要存取的数据。
此外,当通过要执行的进程向除了存储器19和存储器20外的存储器发布存储器存取请求时,CPU 12标识连接到作为用于存储器存取的目标的存储器的CPU,并将存储器存取请求发送到所标识的CPU。具体地,CPU 12具有使要存取的存储器地址与唯一表示CPU的信息相关联的节点映射,所述CPU对由存储器地址表示的存储区域进行存取。
然后,如果进程发布存储器存取请求,则CPU 12参考节点映射,并标识与作为用于存储器存取的目标的存储器地址相关联的CPU。此后,CPU 12生成目的地为所标识出的CPU的包,将存储器存取请求存储在所生成的包中,并将该包输出到相互连接的CPU 12至15或输出到局部XB16。如果该包被输出到局部XB 16,则局部XB 16将该包经由全局交叉开关6发送到与该包的目的地对应的CPU。
如果CPU 12执行到存储器19或存储器20上的存储器存取,则CPU12执行用于保持由存储器19或存储器20高速缓存的数据的一致性的处理。例如,CPU 12将监听(snoop)发送到已从存储器19或存储器20高速缓存数据的CPU,并执行所高速缓存的数据的回写。
局部XB 16是如下开关:其将在包括在节点10中的CPU 12至15与包括在其他节点10a至10m中的CPU之间交换的包传递到指定的目的地。例如,局部XB 16将要发送到包括在节点10a中的CPU的、由CPU12发布的包经由全局交叉开关6发送到包括在节点10a中的CPU。
存储器17至存储器24是将由OS或应用程序使用的数据存储在其中的存储器,并且例如是双列直插式存储器模块(DIMM)。此外,存储器17至24被映射到同一存储器地址空间。
此外,存储器17至24均具有仅同一节点中的CPU 12至15可以存取的区域,即,作为包括CPU 12至15的节点所专用的区域的局部区域。此外,存储器17至24均具有可由包括在信息处理系统1中的任意CPU存取的区域,即,全部节点都可以使用的共享存储器区域。此外,用于存储器17至24的共享存储器区域被划分成多个段。每个段均是存储器令牌(token)执行存取控制的保护区域或存储器令牌不执行存取控制的非保护区域。
以下,将参照图3和图4描述由存储器17至24映射的存储器地址。图3是示出根据第一实施例的对存储器进行分配的示意图。例如,在连接到每个CPU的两个存储器之间,信息处理系统1使用一个存储器作为仅用于局部区域的存储器,并使用其他存储器作为仅用于共享存储器区域的存储器。具体地,如图3的(a)中所示,存储器17、存储器19、存储器21和存储器23用作节点专用的存储器,以及如图3的(b)中所示,存储器18、存储器20、存储器22和存储器24用作共享存储器。
图4是示出根据第一实施例的信息处理系统对每个存储器进行映射的存储器映射的示意图。图4示出准备了总共128百万兆字节存储器地址空间、将128百万兆字节之中的64百万兆字节分配给局部区域并将128百万兆字节之中的64百万兆字节分配给共享存储器区域的示例。
例如,信息处理系统1在节点10至10m中所包括的存储器中用作局部区域的区域中分配“0”至“246-1”的存储器地址。此外,信息处理系统1在节点10至10m中所包括的存储器中用作共享存储器区域的区域中分配“246”至“247-1”的存储器地址。
具体地,在图3和图4所示的示例中,信息处理系统1将图4的(c)中所示的区域中的存储器地址映射到图3的(a)中所示的存储器17、存储器19、存储器21和存储器23上。此外,信息处理系统1将图4的(d)中所示的区域中的存储器地址映射到图3的(b)中所示的存储器18、存储器20、存储器22和存储器24上。图4中所示的地址“247”至“248-1”是用作不可高速缓存(UC)区域的地址范围,并且是用于例如I/O装置(诸如,HDD 29)使用的I/O空间的地址范围。
如上所述,信息处理系统1将单一的存储器地址空间映射到各节点10至10m中所包括的存储器上。因此,任意CPU可以直接存取任意节点中的共享存储器区域。图4中所示的存储器映射仅作为示例;因此,还可以执行任意分配。
具体地,不必将全部存储器地址基于存储器映射分配给存储器。例如,还可以存在存储器空洞。此外,存储器映射还可以被设置成使得OS使用的局部区域存在于信息处理系统1中所包括的每个节点中并且共享存储器区域存在于一个或多个节点中。
如果信息处理系统1将连续的存储器地址映射到包括在单个节点中的存储器(例如,存储器17和存储器18)上,则信息处理系统1可以删除控制资源。此外,信息处理系统1分配存储器地址以使段区域至少对准。
以下,将参照图5描述各CPU 12至15中的硬件与由各CPU 12至15执行的软件之间的关系。图5是示出根据第一实施例的信息处理系统中的硬件与软件之间的关系的示意图。在图5所示的示例中,CPU 12中所包括的硬件被定义为硬件30,并且CPU 13中所包括的硬件被定义为硬件30a。在图5所示的示例中,假设CPU 14中所包括的硬件是硬件30b并且CPU 15中所包括的硬件是硬件30c。
例如,CPU 12包括硬件30,并对作为CPU 12专用的本地存储器的存储器17进行存取,并且对形成共享存储器的存储器18、20、22和24进行存取。此外,CPU 12对硬件30、管理程序31、操作系统32、驱动程序33和中间件34进行操作。此外,CPU 12对中间件34执行由各CPU12至15协作地操作的应用程序35。
此外,类似地与CPU 12,其他CPU 13至15分别包括硬件30a至30c,并且操作管理程序31a至31c、操作系统32a至32c、驱动程序33a至33c以及中间件34a至34c。
以下,将参照图6描述根据第一实施例的由CPU 12至15执行的处理的概况。在以下描述中,CPU 13至15具有与CPU 12执行的功能相同的功能;因此,将省略对其的描述。
图6是示出根据第一实施例的由CPU执行的处理的概念的示意图。图6示出由CPU 12执行的多个发送进程#1至#6将消息发送到由设置在接收侧的CPU 13执行的接收进程#1至#n的处理的概况。例如,CPU 12包括多个核心(core)和与这些核心相关联的多个发送缓冲器。CPU 13包括与要执行的进程相关联的接收队列#1至#n。
例如,每个核心对在OS 32上操作的多个发送进程#1至#6当中的一个发送进程进行操作。例如,在图6所示的示例中,每个核心操作发送进程#2至#5。如果正执行的发送进程将消息发送到CPU 13,则每个核心将要发送的消息存储在相应的发送缓冲器中。
此外,如果每个发送缓冲器均将每个相应的核心执行的进程的消息存储在其中,则每个发送缓冲器根据接收消息的接收进程将该消息存储在CPU 13中所包括的接收队列#1至#n之一中。然后,当CPU 13执行进程时,各接收进程#1至#n获得存储在相应的接收队列中的消息。
如果单个核心可以同时执行多个线程,则CPU 12具有用于每个线程的发送缓冲器寄存器。然后,当上下文切换发生时,CPU 12保存或恢复发送缓冲器寄存器中所存储的数据,从而,CPU 12像CPU 12实际上具有数量与存在的发送进程相同的发送缓冲器一样进行操作。
以下,将参照图7描述通过信息处理系统1中的每个CPU执行的处理执行进程间通信的流程。图7是示出根据第一实施例的进程间通信处理的流程的示意图。在图7所示的示例中,将给出对在硬件30和30a上进行操作的发送进程#A和#B分别将消息发送到在硬件30c上进行操作的接收进程的处理流程的描述。
例如,在图7所示的示例中,硬件30和硬件30a中的每一个均包括将要发送的消息临时存储在其中的发送寄存器。此外,接收消息的硬件30c包括多个寄存器组以及接收消息的接收缓冲器,在每个寄存器组中,读取指针与写入指针相关联。
如图7的(a)中所示,由硬件30c执行的接收进程在共享存储器或本地存储器中预先设置用于将消息存储在其中的区域。然后,如图7的(b)所示,接收进程调用驱动程序33c,获得寄存器组资源,并且执行初始化。然后,如图7的(c)所示,接收进程向发送进程#A和发送进程#B通知唯一表示所获得的寄存器组的各个寄存器ID。
然后,发送进程#A生成包含由接收进程通知的寄存器ID和发送消息#A这两者的消息#A,并且将消息#A存储在硬件30中所包括的发送寄存器中,如图7的(d)所示。此外,发送进程#B生成包含由接收进程通知的寄存器ID和发送消息#B这两者的消息#B,并将消息#B存储在硬件30中所包括的发送寄存器中,如图7的(e)所示。
当消息#A和消息#B存储在各个发送寄存器中时,硬件30和30a对相应的消息进行分包。然后,如图7的(f)所示,硬件30和30a将各个消息经由节点之间的互连存储在硬件30c中所包括的接收缓冲器中。然后,硬件30c标识包含在所接收到的每个包中的寄存器ID,并将消息存储在由所标识的寄存器ID所表示的寄存器组中的写入指针表示的存储区域中。例如,如图7的(g)所示,硬件30c将消息#A和消息#B顺序地存储在由相应的寄存器组中的写入指针表示的存储区域中。
此时,如图7(h)所示,通过使用利用轮询的监视或者通过使用中断处理,接收进程检测消息的入呼叫(incoming call)。然后,通过使用由分别向发送进程#A和发送进程#B通知的寄存器ID表示的寄存器组中的读取指针,接收进程读取消息#A和消息#B,如图7的(i)所示。
如上所述,在根据第一实施例的进程间通信中,在消息接收侧的CPU包括多个寄存器组,并将标识寄存器组的寄存器标识符发送到在消息发送侧的CPU。然后,在消息发送侧的CPU将消息连同寄存器标识符一起发送到在消息接收侧的CPU。此后,在消息接收侧的CPU通过使用由所接收到的寄存器标识符表示的寄存器组中的写入指针来将所接收到的消息存储在其中。
结果,各CPU 12至15可使用队列来实现进程间通信,而不高速缓存读取指针或写入指针。因此,即使当在一个CPU中发生故障时,各CPU12至15可以读取该读取指针或写入指针;因此,可以防止故障传播。
此外,各CPU 12至15均具有寄存器组,寄存器组的数量大于将消息同时发送到相应CPU的进程的数量。具体地,各CPU 12至15均具有寄存器组,寄存器组的数量与同时接收消息的进程的数量相同。因此,各CPU 12至15可以防止如下情况:当正执行任意进程时,由于寄存器组不足而没有执行进程间通信。
以下,将参照图8描述CPU 12的功能配置。图8是示出根据第一实施例的CPU的功能配置的示意图。在图8所示的示例中,CPU 12连接到局部XB 16、存储器17、存储器18和PCIe开关25。此外,CPU 12包括多个核心40至40b、L1高速缓存器标记41至41b、L1高速缓存器42至42b以及转换后备缓冲器(TLB)43至43b。
此外,CPU 12包括L2高速缓存器存取控制器44、L2高速缓存器标记45、LC高速缓冲器46、地址映射器(address map)47、设置寄存器群48、PCI控制单元49、目录控制单元50、高速缓存器一致性事务控制单元51以及消息队列(MSGQ)控制单元56。此外,MSGQ控制单元56包括发送控制单元57和接收控制单元58。
地址映射器47、PCI控制单元49,目录控制单元50、高速缓存器一致性事务控制单元51以及MSGQ控制单元56经由存储器R/W(读/写)总线53相连。此外,各核心40至40b、地址映射器47、设置寄存器群48、PCI控制单元49、目录控制单元50、高速缓存器一致性事务控制单元51以及MSGQ控制单元56经由寄存器R/W总线54相连。
核心40a和核心40b具有与核心40执行的功能相同的功能;因此,这里将省略对其的描述。此外,L1高速缓存器标记41a和L1高速缓存器标记41b具有与L1高速缓存器标记41执行的功能相同的功能;并且L1高速缓存器42a和L1高速缓存器42b具有与L1高速缓存器42执行的功能相同的功能;因此,这里将省略对其的描述。此外,TLB 43a和TLB 43b具有与TLB 43执行的功能相同的功能;因此,这里将省略对其的描述。
核心40是通过使用存储在L1高速缓存器42中的数据来执行算术处理的算术单元,并且包括指令执行单元和算术单元。此外,当核心40将消息发送到由除了CPU 12外的CPU执行的进程时,核心40执行以下处理。
首先,核心40从与消息的目的地对应的CPU执行的进程获得表示寄存器组的寄存器ID。此外,核心40生成MSGQ-ID,该MSGQ-ID包含从目的地CPU接收到的寄存器ID和表示与消息的目的地对应的CPU的CPU-ID这两者。然后,核心40将要发送的消息和MSGQ-ID发送到MSGQ控制单元56中的发送控制单元57。此外,核心40将与消息的目的地对应的CPU的地址和发送请求的命令这两者发送到发送控制单元57。
此外,如果核心40从除了CPU 12外的CPU执行的进程接收到消息,则核心40获取存储在MSGQ控制单元56中的寄存器组,并获得表示所获取的寄存器组的寄存器ID。然后,核心40向作为消息发送源的CPU执行的进程通知所获得的寄存器ID。核心40还可以通过使用任意方法向除了CPU 12外的CPU执行的进程通知寄存器ID。
经由寄存器R/W总线54执行由核心40执行的用于将消息和MSGQ-ID这两者发送到MSGQ控制单元56中的发送控制单元57的处理。具体地,通过发布用于将要发送的消息和MSGQ-ID写入包括在发送控制单元57中的寄存器中的存储请求,核心40将消息和MSGQ-ID这两者发送到发送控制单元57。
L1高速缓存器标记41是L1高速缓存器42的标记数据并将存储在L1高速缓冲器42的高速缓存行中的数据地址、状态、用于替代的最近最少使用(LRU)信息等存储在其中。L1高速缓存器42是可以被高速地存取的高速缓存存储器,并且高速缓存存储在存储器17、存储器18和L2高速缓存器46中的数据的一部分。
此外,L1高速缓存器42是核心40专用的一级高速缓存器。例如,L1高速缓存器42的容量为用于指令区域和数据区域中的每一个的64千字节。TLB 43通过使用转换表将核心40输出的虚拟地址转换为物理地址。
L2高速缓存器存取控制器44是用于L2高速缓存器标记45或L2高速缓存器46的存取控制器,并且是用于对L2高速缓存器标记45或LC高速缓存器46进行存取的管线。此外,L2高速缓存器存取控制器44具有串行化相同地址的功能。
L2高速缓存器标记45是关于L2高速缓存器46的标记数据,并且将与存储在L1高速缓存器标记41中的信息类似的信息存储在其中。此外,L2高速缓存器46是各核心40至40b共享的二级高速缓存存储器。地址映射器47将要请求的物理地址和存取由物理地址表示的存储区域的CPU的标识符以相关联的方式存储在其中,并且将物理地址转换为CPU的标识符。
具体地,如果CPU 12发布用于对连接至除了CPU 12外的CPU的存储器进行存取的请求,则地址映射器47根据要存取的物理地址识别与请求的目的地对应的CPU的标识符。然后,地址映射器47向目录控制单元50和高速缓存器一致性事务控制单元51通知CPU的标识符。
设置寄存器群48是执行CPU 12的各种设置的多个寄存器,并且通过从核心40至40b接收到的存储请求而经由寄存器R/W总线54将数据存储在其中。PCI控制单元49是相对于用于CPU连接的PCI快速较复杂的根。
目录控制单元50使用NUMA技术来控制存储器存取。此外,如果目录控制单元50使用例如直接存储器存取(DMA)来获得存储器请求,则目录控制单元50通过使用存储在存储器17和存储器18中的目录信息来保持高速缓存器一致性。例如,通过使用高速缓存器一致性事务控制单元51,目录控制单元50向其他CPU发布监听或者对另一CPU发布的监听作出响应。
当高速缓存器一致性事务控制单元51经由局部XB 16从除了CPU 12外的CPU接收监听时,高速缓存器一致性事务控制单元51检查L2高速缓存器46并发送检查结果作为响应。此外,如果高速缓存器一致性事务控制单元51从目录控制单元50接收对监听的发布请求,则高速缓存器一致性事务控制单元51将监听发送到除了CPU 12外的CPU。例如,如果要监听且存储在L2高速缓存器46中的数据的状态是“M”,则高速缓存器一致性事务控制单元51发送高速缓存器数据作为对监听的响应。
MSGQ控制单元56控制其他CPU 13至15或者其他节点10a至10m执行的进程与CPU 12执行的进程之间的进程间通信。具体地,MSGQ控制单元56将多个寄存器组存储在其中,其中多个寄存器组是一组表示写入消息的起始位置的写入指针和表示读取消息的起始位置的读取指针。
此外,如果核心40至40b之一执行的进程从除了CPU 12外的CPU执行的进程接收到消息,则MSGQ控制单元56获取未使用的寄存器组。然后,MSGQ控制单元56向核心40至40b之一执行的进程通知表示所获取的寄存器组的寄存器ID。然后,如果MSGQ控制单元56接收到从核心40至40b之一发送的消息和寄存器标识符这两者,则MSGQ控制单元56生成包含所接收到的消息和MSGQ-ID这两者的包并经由局部XB16发送包。
此外,MSGQ控制单元56将多个寄存器组存储在其中。如果MSGQ控制单元56从其他CPU 13至15或其他节点10a至10m接收到包,则从包含在所接收到的包中的MSGQ-ID提取寄存器ID。然后,MSGQ控制单元56标识由所提取的寄存器ID表示的寄存器组。然后,MSGQ控制单元56将包含在所接收到的包中的消息存储在由所标识的寄存器组中的写入指针表示的存储区域中。如果MSGQ控制单元56存储消息,则MSGQ控制单元56将消息经由存储器R/W总线53传递到目录控制单元50。在这样的情况下,目录控制单元50将所接收到的消息存储在存储器17或18中。
局部XB 16是用于互连的路由器,并且将请求发送到与CPU的标识符相关联的目的地。此外,局部XB 16对要发送的请求进行分包或者附加循环冗余校验(CRC)值。
以下,将参照图9描述发送控制单元57的功能配置。图9是示出根据第一实施例的发送控制单元的功能配置的示意图。在图9所示的示例中,发送控制单元57包括地址解码器59、多个控制资源60至60c、选择器69和读取数据选择器70。此外,各控制资源60至60c均包括消息数据寄存器61、MSGQ-ID寄存器62、发布请求标志寄存器63、发送包生成单元64、选择器65、应答状态寄存器66、读取数据选择器67以及应答接收标志寄存器68。
控制资源60是用于核心40的控制资源,其他控制资源60a和60b是分别用于核心40a和40b的核心资源,以及控制资源60c是用于图8中未示出的另一核心的控制资源。在图9所示的示例中,仅示出控制资源60的功能配置;然而,假设其他控制资源60a至60c具有与通过控制资源60实现的功能配置相同的功能配置。此外,在图9所示的示例中,示出了用于核心40a至40b的控制资源;然而,假设CPU 12包括数量与同时执行的进程相同的控制资源60至60c。
以下,将首先描述包括在控制资源60中的每个寄存器。在该阶段,将地址提供给消息数据寄存器61、MSGQ-ID寄存器62、发布请求标志寄存器63、应答状态寄存器66和应答接收标志寄存器68中的每一个。然后,各核心40至40b发送要存储在每个寄存器中的数据,并发布存储有数据的寄存器的地址和写入请求这两者,从而将数据存储在每个寄存器中。此外,各核心40至40b发布每个寄存器的地址和读取请求者两者,从而对每个寄存器进行读取。
图10是示出提供给每个寄存器的地址的示例的示意图。图10示出了提供给寄存器的地址、可以向寄存器发布的命令、存储在寄存器中的数据的大小、存储在寄存器中的数据的含义以及在上下文切换时保存/恢复的状态。在核心40执行的进程中,可以通过发布图10所示的地址以及读取请求或写入请求来操作包括在控制资源60中的每个寄存器的值。
例如,消息数据寄存器61是将要发送的消息存储在其中的寄存器。在图10所示的示例中,消息数据寄存器61是如下寄存器:其中,提供地址“0x00”至“0x3F”,将执行读取请求或写入请求,并且存储32字节或64字节数据。此外,消息数据寄存器61是在上下文切换时要执行保存/恢复的寄存器。
MSGQ-ID寄存器62是将MSGQ-ID存储在其中的寄存器。在图10所示的示例中,MSQG-ID寄存器62是如下寄存器:其中,提供地址“0x40”至“0x47”,将执行读取请求或写入请求,并且存储32位数据。此外,MSGQ-ID寄存器62是在上下文切换时要执行保存/恢复的寄存器。
以下,将参照图11描述存储在MSGQ-ID寄存器62中的数据的示例。图11是示出MSGQ-ID的格式的示例的示意图。如图11所示,MSGQ-ID具有将与消息的目的地对应的CPU的CPU号码、寄存器组号码、用于确定对寄存器组的存取性的存取密钥以及消息大小存储在其中的字段。
以下,将参照图12描述存储在MSGQ-ID中的每个字段中的信息内容。图12是示出存储在MSGQ-ID中的每个字段中的信息的示意图。例如,CPU-ID[7:0]是表示与消息的目的地对应的CPU的8位信息。
寄存器ID是表示寄存器组的11位号码,并且通过将其与CPU-ID组合来表示整个信息处理系统1中的唯一目的地。存取密钥是由在消息接收侧的进程任意确定的用于确定可存取性的12位密钥信息,并且是被发送到在消息发送侧的进程的信息。图12中所示的M大小是表示要发送的消息的大小的信息。例如,如果值为“0”,则这表示要发送的消息的大小为32字节,而如果值为“1”,则这表示要发送的消息的大小为64字节。
这里将通过返回参照图10来给出描述。发布请求标志寄存器63是在核心40请求发送消息时将标志存储在其中的寄存器。在图10所示的示例中,发布请求标志寄存器63是如下寄存器:其中,提供了地址“0x48”至“0x4F”,将执行写入请求,并将1位数据(即,标志)存储在其中。当核心40将“1”存储在发布请求标志寄存器63中时,稍后将描述的发送包生成单元64将包含消息和MSGQ-ID这两者的包发送到目的地。发布请求标志寄存器63是在上下文切换时不执行保存/恢复的寄存器。
应答状态寄存器66是将表示是否正常接收到来自发送了信息的CPU的应答的应答状态存储在其中的寄存器。在图10所示的示例中,应答状态寄存器66是如下寄存器:其中,提供了地址“0x50”至“0x57”,将执行读取请求或写入请求,并且存储2位数据(即,PROT位和OVFL位)。这里提到的PROT位是表示对密钥信息的可存取性的确定结果的位,而OVFL位是表示是否发生了溢出的确定的结果的位。尽管图10中未示出,但是应答接收标志寄存器68是将表示是否接收到对消息的响应的标志存储在其中的寄存器。
为了易于从软件进行存取,即使数据的有效长度小于8字节(64位),图10中所示的各寄存器也占用以8字节边界对准的地址区域。此外,在每个寄存器占用的地址区域中,除了与数据的有效长度对应的值外的值不具有任何含义。核心40至40b可以仅针对各自控制资源60至60b中的寄存器来进行读取和写入,而针对与主体核心不相关联的其他控制资源既不进行读取也不进行写入。
这里,通过返回参照图9来给出描述。当地址解码器59经由寄存器R/W总线54从核心40接收地址和命令时,地址解码器59对所接收到的地址和命令进行解码,并将其存储在控制资源60中所包括的寄存器中。例如,当地址解码器59从核心40接收命令和地址时,地址解码器59对所接收到的命令和地址进行解码,并向控制资源60通知解码后的命令和地址。然后,控制资源60读取或写入与由从地址解码器59接收到的地址表示的寄存器相关的数据。
当值“1”存储在发布请求标志寄存器63中时,发送包生成单元64获得存储在消息数据寄存器61中的消息和存储在MSGQ-ID寄存器62中的MSGQ-ID。然后,发送包生成单元64生成包含所获得的消息和MSGQ-ID的包,并将所生产的包输出到选择器69。
图13是示出包格式的示例的示意图。如图13所示,发送包生成单元64生成包含格式、目的地CPU号码、操作码、发送源CPU号码、条目ID、MSGQ-ID和数据的包。格式包含表示包的格式类型的4位信息。
在目的地CPU号码中,存储了表示目的地CPU的ID,即8位目的地ID(DID)。发送包生成单元64从存储在MSGQ-ID寄存器62中的MSGQ-ID获得对应于目的地的CPU-ID,并使用所获得的CPUID作为目的地CPU号码。
操作码将表示存取请求的内容的4位信息存储在其中。发送源CPU号码将表示发送源CPU(即,CPU 12)的8位ID存储在其中。条目ID将唯一表示请求源的进程的8位条目ID存储在其中。MSGQ-ID将已存储在MSGQ-ID寄存器62中的MSGQ-ID存储在其中。数据包含具有根据MSGQ-ID的M大小的值的大小的消息。如果发送包生成单元64发布包含32字节或64字节消息的包,则存储包的条目ID。
这里,将通过返回参照图9来给出描述。当核心40读取存储在应答状态寄存器66中的信息时,选择器65将寄存器R/W总线54连接到应答状态寄存器66。此外,选择器65经由局部XB16从除了CPU 12外的CPU接收具有图14所示的格式的包作为应答。
图14是示出应答包格式的示例的示意图。如图14所示,在应答包中,表示是否正常接收到消息的2位信息被存储作为状态。当选择器65接收到应答时,选择器65通过使用条目ID确定所接收到的应答是否是对发送包生成单元64发送的包的应答。如果选择器65确定所接收到的包是对发送包生成单元64发送的包的应答,则选择器65从所接收到的应答中提取状态并将所提取的状态存储在应答状态寄存器66中。
根据经由寄存器R/W总线54由核心40发布的目标读取请求的地址,读取数据选择器67输出存储在消息数据寄存器61、MSGQ-ID寄存器62和应答状态寄存器66中的数据。
在与选择器65接收到应答的同时,应答接收标志寄存器68将表示已接收到应答的标志“1”存储在其中。当应答接收标志寄存器68将标志“1”存储在其中时,应答接收标志寄存器68将表示已发送请求的信号发送到核心40。具体地,核心40执行的进程仅在标志“1”存储在应答接收标志寄存器68中之后确定已发送消息。
在此阶段,在发送了消息之后、在接收到应答之前,核心40等待进程的操作。具体地,在“1”已存储在发布请求标志寄存器63中之后、在“1”存储在应答接收标志寄存器68和请求完成通知被发送到核心之前,停止核心执行的程序的操作。通过这样做,即使在发送消息时发生了上下文切换,核心40也可以如同消息已在单个步骤中发送到进程一样起作用。
当选择器69获得各控制资源60至60c要获得的包时,选择器69将所获得的包输出到局部XB 16并将包发送到目的地CPU。根据来自相应核心40至40b的读取请求,读取数据选择器70将控制资源60至60c中的寄存器读取的数据经由寄存器R/W总线54分别发送到核心40至40b。
以下,将参照图15描述接收控制单元58的功能配置。图15是示出根据第一实施例的接收控制单元的功能配置的示意图。在图15所示的示例中,接收控制单元58包括包接收单元71、存储器请求控制单元74、随机存取存储器(RAM)外围装置78和命令执行单元89。
包接收单元71包括请求队列72和执行寄存器73。存储器请求控制单元74包括存储器请求生成单元75、存储器请求寄存器76和写入数据寄存器77。RAM外围装置78包括RAM地址选择电路79、写入数据生成单元80、RAM 81和临时寄存器群82。
临时寄存器群82包括基地址(BADRS)寄存器83、存储器密钥(MKEY)寄存器84、写入指针(WDP)寄存器85和读取指针(RDP)寄存器86。此外,临时寄存器群82包括Q大小/M大小寄存器87和中断屏蔽(INTMASK)寄存器88。命令执行单元89包括不匹配检查单元90、匹配检查单元91、相加值生成单元92、加法器93、应答包生成单元94、应答命令寄存器95和中断生成单元96。
以下,将首先描述包括在接收控制单元58中的RAM外围装置78。在以下描述中,将描述RAM 81和临时寄存器群82。然后,将描述包括在RAM外围装置78中的每个单元。
RAM 81将存储在临时寄存器群82中的信息被关联的多个条目存储在其中。具体地,RAM 81将多个寄存器组存储在其中。各核心40至40b发布RAM 81的地址、写入请求和读取请求,从而读取或处理存储在RAM81中的值。
具体地,RAM 81将存储在各寄存器83至88中的信息被关联的多个条目存储在其中。以下,将参照图16描述存储在RAM 81中的各条目中所存储的信息。图16是示出RAM中的字段的示例的示意图。在图16所示的示例中,RAM 81包括包含82位的条目。具体地,RAM 81从包括在条目中的第81位到第79位保持Q大小,在第78位保持M大小,并在第77位保持INTMASK。
此外,RAM 81从包括在条目中的第76位到第36位保持基地址,并从包括在条目中的第34位到第24位保持存储器密钥。此外,RAM 81从包括在条目中的第23位到第16位保持写入指针,从包括在条目中的第15位到第8位保持读取指针,并从包括在条目中的第7位到第0位保持校验位。
以下,将参照图17描述存储在RAM 81的条目中的信息内容。图17是示出存储在RAM的字段中的数据内容的示意图。Q大小是表示消息存储区域的大小的信息,其中该消息存储区域是存储有所接收到的消息的存储区域。在Q大小中,如果值为“000”,则这表示主题条目无效,而如果值为“001”,则这表示消息存储区域的大小为128字节。另外,在Q大小中,如果值为“010”,则这表示消息存储区域的大小为256字节,而如果值为“011”,则这表示消息存储区域的大小为512字节。
此外,在Q大小中,如果值为“100”,则这表示消息存储区域的大小为1千字节,而如果值为“101”,则这表示消息存储区域的大小为2千字节。此外,在Q大小中,如果值为“110”,则这表示消息存储区域为4千字节,而如果值为“111”,则这表示消息存储区域的大小为8千字节。
M大小是表示消息的大小的信息。如果值为“0”,则这表示消息的大小为32字节,而如果值为“1”,则这表示消息的大小为64字节。这里提到的INTMASK是用于在接收到消息时指示是否要产生中断的信息。在INTMASK中,如果值为“0”,则这表示不产生中断,而如果值为“1”,则这表示要产生中断。
基地址是用作消息存储区域(即,将消息存储在其中的存储区域)的参考的41位地址信息。此外,基地址表示用于读取指针和写入指针这两者的消息存储区域的地址。基地址的数据大小根据消息存储区域的大小而变化。消息存储区域从与由相加值表示的区域大小匹配的地址边界开始,这将稍后描述。
存储器密钥是用于确定是否允许对消息存储区域进行存取的密钥信息,即,是用于保护消息存储区域的存储器密钥的值。写入指针是表示在消息写入消息存储区域中时开始写入的地址的8位地址。另外,读取指针是表示在从消息存储区域读取消息时开始读取的地址的8位地址。
写入指针和读取指针的数据大小的值根据消息存储区域的大小而变化。此外,校验位是用于根据包含在同一条目中的信息检测并校正错误的冗余位,并且是用于错误检测和校正(ECC)的位。
以下,将描述包括在临时寄存器群82中的寄存器83至88。各寄存器83至88均是将包含在RAM 81中所存储的每个条目中的信息存储在其中的寄存器。具体地,当从核心40执行的进程观察时,地址被提供给各寄存器83至88。然后,核心40执行的进程可以通过指定地址来写入或读取存储在各寄存器83至88中的信息。
下面,参照图18描述提供给临时寄存器群82中的各寄存器83至88的地址的示例。图18是示出从软件测观察的接收控制单元中的寄存器的地址的示例的示意图。图18的示例示出了提供给各个寄存器的地址、可以向寄存器发布的命令和存储在寄存器83至88中的数据的大小。此外,在图18所示的示例中,存储在Q大小/M大小寄存器87中的信息分别以Q大小和M大小示出。
Q大小/M大小寄存器87是在其中存储Q大小和M大小的寄存器。在图18所示的示例中,将“0x00”至“0x07”作为用于存储Q大小的地址提供给Q大小/M大小寄存器87,并且将“0x08”至“0x0F”作为用于存储M大小的地址提供给Q大小/M大小寄存器87。此外,Q大小/M大小寄存器87是要执行写入请求和读取请求并且存储3位Q大小数据和1位M大小数据的寄存器。
INTMASK寄存器88是在其中存储INTMASK的寄存器。在图18所示的示例中,INTMASK寄存器88是“0x10”至“0x17”被提供作为用于存储INTMASK的地址并且要执行写入请求和读取请求的寄存器。
BADRS寄存器83是在其中存储基地址的寄存器。在图18所示的示例中,BADRS寄存器83是“0x18”至“0x1F”被提供作为用于存储基地址的地址并且要执行写入请求和读取请求的寄存器。MKEY寄存器84是在其中存储存储器密钥的寄存器。在图18所示的示例中,MKEY寄存器84是“0x20”至“0x27”被提供作为用于存储存储器密钥的值的地址并且要执行写入请求和读取请求的寄存器。
WDP寄存器85是在其中存储写入指针的寄存器。在图18所示的示例中,WDP寄存器85是“0x28”至“0x2F”被提供作为用于存储写入指针的地址并且要执行写入请求和读取请求的寄存器。RDP寄存器86是在其中存储读取指针的寄存器。在图18所示的示例中,RDP寄存器86是“0x30”至“0x37”被提供作为用于存储读取指针的地址并且要执行写入请求和读取请求的寄存器。
此外,图18中所示的更新寄存器是用于在读取消息时通过进程来指示对读取指针的值进行更新的虚拟寄存器。具体而言,如果向更新寄存器发布写入请求,则不执行写入数据的输入,而仅写入更新后的读取指针的值。在图18所示的示例中,更新寄存器是“0x38”至“0x3F”被提供作为用于存储相加值的地址的寄存器。
与图10所示的每个寄存器类似,为了易于从软件进行存取,即使数据的有效长度小于8字节(64位),图18所示的每个寄存器也均占据与8字节边界对齐的地址区域。此外,在图18所示的每个寄存器所占据的地址区域中,除与数据的有效长度对应的值以外的值没有任何意义。
下面,再次参照图15来描述RAM地址选择电路79。RAM地址选择电路79经由寄存器R/W总线54从核心40获得寄存器地址和命令。接着,通过使用所接收到的寄存器地址的高位地址,RAM地址选择电路79从存储在RAM 81中的条目中选择待存取的条目。
接着,RAM地址选择电路79通过使用所接收到的寄存器地址的低位地址来标识要存取的存储区域。此后,RAM地址选择电路79根据所接收到的命令读取或写入所标识的存储区域。此外,当RAM地址选择电路79从包接收单元接收寄存器ID时,RAM地址选择电路79将由所接收到的寄存器ID表示的条目中的各信息之中除校验位以外的信息存储在临时寄存器群82的各寄存器83至88中。具体而言,RAM地址选择电路79将由寄存器ID表示的寄存器组的值存储在临时寄存器群82的寄存器83至88中。
当从由核心40执行的进程观察时,看似提供给临时寄存器群82的地址实际上是RAM 81的低位地址。具体而言,由核心40执行的进程对存储在RAM 81中的条目进行识别,以使不同的寄存器群存储条目。接着,在用于选择寄存器群的状态地址中,即,在用于选择存储在RAM 81中的条目的高位地址中,由核心40执行的进程生成寄存器地址,其中提供给每个寄存器的地址被提供作为低位地址。
此后,通过将所生成的寄存器地址输出至接收控制单元58,如同存储在RAM 81中的各信息存储在不同寄存器中一样,由核心40执行的进程选择要存取的且存储在RAM 81中的信息。
当写入数据生成单元80从核心40经由寄存器R/W总线54获得写入数据时,写入数据生成单元80将从核心40获得的数据存储在由RAM地址选择电路79选择的存储区域中。此外,写入数据生成单元80将由加法器93(将在后文中描述)生成的新的写入指针或新的读取指针存储在RAM 81中。
如果由核心40发布的命令指示写入到RAM 81中,则RAM外围装置78执行以下处理。即,从由寄存器地址的高位地址(upper address)表示的条目当中,RAM外围装置78对由低位地址(lower address)表示的信息重写数据,相对于写入数据来计算冗余位,并且存储新的校验位。
此外,在读取存储在RAM 81中的信息时,将已读取的读取数据经由寄存器R/W总线54发送至核心40,并且写入数据生成单元80接收已读取的数据。接着,写入数据生成单元80将读取数据再次写入RAM 81中。
下面,对由包括在接收控制单元58中的包接收单元71、存储器请求控制单元74和命令执行单元89执行的处理进行描述。当包接收单元71经由局部XB 16接收到由另一CPU发送的包时,包接收单元71将所接收到的包存储在请求队列72中。此外,包接收单元71与RAM 81的更新时间同步地从请求队列72的开头取出单个包,并且将所取出的包存储在执行寄存器73中。
接着,包接收单元71从存储在执行寄存器73中的包提取MSGQ-ID,并且从所提取的MSGQ-ID中获得寄存器ID。此后,包接收单元71将所获得的寄存器ID输出至RAM外围装置78中的RAM地址选择电路79,从而由寄存器ID表示的寄存器组的值存储在临时寄存器群82的寄存器83至88中。此外,包接收单元71从存储在执行寄存器73中的包提取数据(即,消息),并且将所提取的消息存储在存储器请求控制单元74中所包括的写入数据寄存器77中。
接着,包接收单元71从所提取的MSGQ-ID中获得存取密钥的值,并且将所获得的存取密钥值输出至命令执行单元89中的不匹配检查单元90。接着,不匹配检查单元90确定存储在MKEY寄存器84中的存储器密钥的值与从包接收单元71接收到的存取密钥值是否匹配。如果存储器密钥的值与存取密钥值匹配,则不匹配检查单元90通知存储器请求生成单元75、应答包生成单元94和中断生成单元96允许存取。反之,如果存储器密钥的值与存取密钥值不匹配,则不匹配检查单元90通知存储器请求生成单元75、应答包生成单元94和中断生成单元96不允许存取。
此外,在不匹配检查单元90执行上述处理的同时,匹配检查单元91、相加值生成单元92和加法器93执行以下处理。首先,相加值生成单元92根据存储在Q大小/M大小寄存器87中的M大小的值来生成相加值。此外,加法器93通过将由相加值生成单元92生成的相加值与存储在RDP寄存器86中的写入指针相加来计算写入指针的更新值。
接着,匹配检查单元91确定由加法器93计算出的写入指针的更新值与存储在RDP寄存器86中的读取指针的值是否匹配。如果匹配检查单元91确定写入指针的更新值与读取指针的值匹配,则匹配检查单元91确定发生溢出。然后,匹配检查单元91将溢出的发生输出至存储器请求生成单元75、应答包生成单元94和中断生成单元96。
反之,如果匹配检查单元91确定写入指针的更新值与读取指针的值不匹配,则匹配检查单元91将写入存储器的许可输出至存储器请求生成单元75、应答包生成单元94和中断生成单元96。
此时,存储器请求控制单元74中的存储器请求生成单元75从不匹配检查单元90获得表示允许存取的通知,并且如果存储器请求生成单元75从匹配检查单元91获得表示允许写入存储器的通知,则存储器请求生成单元75执行以下处理。即,存储器请求生成单元75获得存储在BADRS寄存器83中的基地址的值、存储在WDP寄存器85中的写入地址的值以及存储在Q大小/M大小寄存器87中的Q大小和M大小的值。
接着,存储器请求生成单元75通过使用所获得的基地址、写入地址、Q大小和M大小的值来生成存储器写入地址,并且将所生成的存储器写入地址存储在存储器请求寄存器76中。接着,存储器请求控制单元74通过将存储在存储器请求寄存器76中的存储器写入地址和存储在写入数据寄存器77中的消息这两者都输出至存储器R/W总线53来将消息存储在存储器17或18中。
如果存储器请求生成单元75从不匹配检查单元90获得表示不允许存取的通知或者从匹配检查单元91获得表示发生了溢出的通知,则存储器请求生成单元75结束处理,而不生成存储器请求。在这样的情况下,包接收单元71丢弃存储在执行寄存器73中的包,从请求队列72中取出新的包,并且将包存储在执行寄存器73中。
下面,将参照图19描述由存储器请求生成单元75生成的存储器写入地址的示例。图19是示出存储器写入地址的示例的示意图。在图19所示的示例中,如果Q大小的代码值为“001”且M大小的值为“0”,则存储器请求生成单元75生成以下存储器写入地址。即,存储器请求生成单元75通过联结基地址的第47位到第7位、写入地址的第0位和地址“0b000000”来生成48位存储器写入地址。
此外,例如,如果Q大小的代码值为“001”且M大小的值为“1”,则存储器请求生成单元75生成以下存储器写入地址。即,存储器请求生成单元75通过联结基地址的第47位到第7位、写入地址的第1位到第0位和地址“0b00000”来生成48位存储器写入地址。
此外,例如,如果Q大小的代码值为“010”且M大小的值为“0”,则存储器请求生成单元75生成以下存储器写入地址。即,存储器请求生成单元75通过联结基地址的第47位到第8位、写入地址的第1位到第0位的和地址“0b000000”来生成48位存储器写入地址。
此外,例如,如果Q大小的代码值为“010”且M大小的值为“1”,则存储器请求生成单元75生成以下存储器写入地址。即,存储器请求生成单元75通过联结基地址的第47位到第8位、写入地址的第2位到第0位的和地址“0b00000”来生成48位存储器写入地址。
换句话说,如图19所示,随着Q大小的代码值增大,存储器请求生成单元75减少用作存储器写入地址的基地址的位数。此外,随着Q大小的代码值增大,存储器请求生成单元75增加用作存储器写入地址的写入指针的位数。
下面,再次参照图15来给出描述。应答包生成单元94生成图14中所示的应答,并且作为应答,存储根据不匹配检查单元90和匹配检查单元91所处理的结果的状态。在该阶段,应答包生成单元94在目的地CPU号码中存储表示对应于消息发送源的CPU的CPU号码。
接着,应答包生成单元94将所生成的应答存储在应答命令寄存器95中。例如,应答包生成单元94从不匹配检查单元90获得表示允许存取的通知,并且如果应答包生成单元94从匹配检查单元91获得表示允许写入存储器的通知,则应答包生成单元94存储以下状态。即,通过将OVFL位设置为“0”并将PROT设置为“0”,应答包生成单元94存储表示正常接收到消息的状态。
反之,如果应答包生成单元94从不匹配检查单元90接收到表示不允许存取的通知,则应答包生成单元94将PROT位设置为“1”。此外,如果应答包生成单元94从匹配检查单元91获得表示发生了溢出的通知,则应答包生成单元94将OVFL为设置为“1”。将状态中的每一位存储在目的地CPU中所包括的应答状态寄存器中,然后,由目的地CPU所执行的进程读取。如果应答命令寄存器95从应答包生成单元94获得应答,则应答命令寄存器95暂时保持所获得的应答,然后,将应答经由局部XB 16发送至CPU,即消息发送源。
当中断生成单元96从不匹配检查单元90获得表示允许存取的通知并且从匹配检查单元91获得表示允许写入存储器的通知时,中断生成单元96执行以下处理。首先,中断生成单元96确定存储在INTMASK寄存器88中的INTMASK的值是为“1”还是为“0”。如果INTMASK的值为“1”,则中断生成单元96将用于请求执行中断处理的中断请求信号经由寄存器R/W总线54输出至核心40至40b。
反之,如果INTMASK的值为“0”,则中断生成单元96不输出中断请求信号。此外,如果中断生成单元96从不匹配检查单元90获得表示不允许存取的通知,或者从匹配检查单元91获得表示发生了溢出的通知,则中断生成单元96不输出中断请求信号。
此时,如果输出中断请求信号,则核心40至40b中的一个执行已由于上下文切换而等待的消息接收进程。接着,核心40至40b中的每一个均通过使用由寄存器ID表示的寄存器组来读取存储在存储器17或存储器18中的消息,其中该寄存器ID被发送至由对应于消息发送源的CPU执行的进程。
如果RAM外围装置78执行诸如初始化存储在RAM 81中的条目、改变中断屏蔽、写入消息以及读取消息的操作,则RAM外围装置78根据图20所示的操作更新存储在RAM 81中的信息。图20是示出RAM中的字段按操作类型分类的更新的示意图。
例如,如果核心40由于关于各寄存器83至88的读取请求或写入请求而初始化条目,则RAM外围装置78如下更新每个字段的值。首先,RAM外围装置78将Q大小、M大小、基地址和存储器密钥的值更新为由进程指定的值。此外,RAM外围装置78将INTMASK的值更新为“0”,并且将写入指针和读取指针的值更新为“全0”。此外,RAM外围装置78将校验位的值更新为根据每条更新后的信息所生成的值。
此外,如果核心40改变中断屏蔽,则RAM外围装置78不改变Q大小、M大小、基地址、存储器密钥、写入指针和读取指针的值,并且RAM外围装置78将INTMASK的值更新为由进程指定的值。此外,如果RAM外围装置78接收到消息并将所接收到的消息写入至存储器17或存储器18,则RAM外围装置78仅更新写入指针的值。此外,如果核心40从存储器17或存储器18读取消息,则RAM外围装置78仅更新读取指针的值。
上述接收控制单元58在RAM 81中保持多个寄存器组;然而,实施例并不限于此。例如,每个寄存器组还可以通过使用触发器(FF)等来保持。此外,接收控制单元58将从RAM 81读取的寄存器组存储在临时寄存器群82中。这考虑了在从RAM 81读取寄存器组时所发生的延时;然而,实施例并不限于此。例如,只要接收控制单元58可以存储多个寄存器组,并且可以根据由所接收到的寄存器ID表示的寄存器组将消息存储在存储器17或存储器18中,则还可以使用其它配置。
下面,将参照图21描述驱动程序33保留在存储器18和19中的消息存储区域和每个地址指针的有效位长度。图21是示出消息存储区域的示意图。例如,为了降低硬件成本,RAM 81仅保持物理地址中用作写入指针和读取指针的一些位。因此,如图21所示,驱动程序33根据Q大小和M大小而保留消息存储区域。
例如,如果Q大小为“001”且M大小为“1”,则驱动程序33将消息存储区域的大小设置为128字节,以使驱动程序33能够在其中存储单个64字节消息。在这样的情况下,基地址的有效位长度从第47位到第7位,并且写入指针和读取指针中的每一个的有效位长度仅在第0位。
此外,如果Q大小为“001”且M大小为“0”,则驱动程序33将消息存储区域的大小设置为128字节,以使驱动程序33能够在其中存储三个32字节消息。在这种情况下,基地址的有效位长度从第47位到第7位,并且写入指针和读取指针中的每一个的有效位长度从第1位到第0位。
此外,如果Q大小为“010”且M大小为“1”,则驱动程序33将消息存储区域的大小设置为256字节,以使驱动程序33能够在其中存储三个64字节消息。在这样的情况下,基地址的有效位长度从第47位到第8位,并且写入指针和读取指针中的每一个的有效位长度从第1位到第0位。
随后,驱动程序33根据Q大小和M大小的值来设置具有图21所示大小的消息存储区域。具体而言,驱动程序33为消息存储区域保留具有由2的幂的值所表示的区域的连续物理地址。此外,随着Q大小的值增大,驱动程序33设置按指数规律地变大的消息存储区域。
由于M大小是表示消息大小的信息,因此存储在消息存储区域中的消息的数量根据Q大小和M大小而改变。因此,随着消息存储区域增大,基地址的有效位长度变短,而随着所存储的消息的数量增加,写入指针和读取指针的有效位长度变长。此外,由于接收控制单元58通过使用加法器93和匹配检查单元91来检测溢出,因此所存储的消息的数量与通过从消息存储区域的大小除以消息大小所获得的值中减去1而获得的值对应。
CPU 12在存储器18和19中保留用于存储消息的消息存储区域。然而,存储器18和19不仅是管理程序(诸如,OS 32的内核或驱动程序33),而且是从在用户模式下运行的软件(诸如,应用程序35)能够直接使用的资源。因此,如果在用户模式下运行的软件对存储器18、19中所保留的消息存储区域进行存取,则可以重写消息。
因此,通过使用存储器密钥、地址密钥和分配给消息存储区域的存储器地址,由CPU 12至CPU 15执行的进程控制对消息存储区域的存取并且防止消息通信资源被破坏。下面,将描述用于防止消息通信源被破坏的方法。
下面,对通过使用存储器密钥和地址密钥来防止消息通信源被破坏的方法进行描述。首先,在消息发送侧的进程生成包含由在消息接收侧的进程通知的存取密钥的值的MSGQ-ID,并且将所生成的MSGQ-ID连同消息一起发送至在消息接收侧的进程。
此外,在消息接收侧的进程确定包含在MSGQ-ID中的存取密钥的值与存储器密钥的值是否匹配。如果存取密钥的值与存储器密钥的值不匹配,则在消息接收侧的进程不写入消息,也不更新写入指针。存储器密钥的值由在消息接收侧的进程来任意地确定,并且可以发送至在消息发送侧的进程;因此,可以防止其它消息通信资源由于在发送侧的进程所产生的错误而被破坏。
下面,将参照图22和图23对用于通过使用在消息存储区域中所分配的存储器地址来防止消息接收区域被破坏的方法进行描述。图22是示出将程序错误纳入考虑的地址映射的示意图。图23是示出在将程序错误纳入考虑的地址映射中的地址配置的示意图。
例如,如图22的(j)中所示,驱动程序33通过使用存储器映射输入/输出(MMIO)方法从存储器映射中的不可高速缓存(NC)的区域定义图18所示的每个寄存器。在该阶段,如图22的(k)中所示,驱动程序33在8千字节的物理页区域中定义单个寄存器组,即与存储在RAM 81中的单个条目对应的寄存器。此外,驱动程序33在不同的8千字节的物理页区域中定义另一个寄存器组。此时,每个寄存器组仅以物理地址定义,并因而与每个虚拟地址不相关;因此,每个寄存器组不是由在用户模式下运行的软件来进行存取。
如果请求驱动程序33从用户进程#1分配消息通信源,则驱动程序33分配寄存器ID并且将MSGQ-ID通知用户进程#1。此时,驱动程序33将物理页地址与任意虚拟地址相关联并将其登记在TLB 43中,该物理页地址与NC区域中的寄存器ID相关联。驱动程序33将与物理页地址相关联的虚拟地址通知用户进程#1。接着,通过存取所通知的虚拟地址,用户进程#1可以存取与所通知的MSGQ-ID相关联的寄存器资源。
如上所述,由于除由驱动程序33分配的驱动程序组以外的驱动程序组的虚拟地址未登记在TLB 43中,因此用户进程#1不存取寄存器资源。因此,例如,用户进程#1没有错误地破坏由用户进程#2使用的消息通信源。此外,通过执行与对寄存器组执行的处理相同的处理,驱动程序33能够防止用户进程#1存取分配给用户进程#2的消息存储区域。因此,驱动程序33能够防止消息通信资源由于程序错误而被破坏。
此外,例如,驱动程序33将具有图23所示的地址配置的物理地址提供给寄存器。例如,驱动程序33在从第47位到第24位的地址位中存储用于NC空间的24位唯一地址。此外,驱动程序33在从第23位到第13位的地址位中存储11位寄存器ID。此外,驱动程序33在从第12位到第0位的地址位中存储提供给图18中所示的每个寄存器的13位唯一地址。接着,驱动程序33将包含各个位的地址位提供给每个寄存器。
发送控制单元57、地址解码器59、选择器65、发送包生成单元64、读取数据选择器67、选择器69和读取数据选择器70是电子电路。此外,RAM地址选择电路79、写入数据生成单元80、存储器请求生成单元75、不匹配检查单元90、匹配检查单元91、相加值生成单元92、加法器93、应答包生成单元94和中断生成单元96是电子电路。电子电路的示例包括集成电路(诸如,专用集成电路(ASIC)或现场可编程门阵列(FPGA))、中央处理单元(CPU)或微处理单元(MPU)。
下面,将参照图24描述当发送和接收消息时由设置在消息发送侧的节点和设置在消息接收侧的节点执行的处理的流程。图24是示出在发送和接收消息时所执行的操作的时序图。在图24所示的示例中,将给出对在通过轮询来监视消息的接收时所执行的处理流程的描述,其中该轮询通过接收侧节点所执行的用户进程#2来执行。
首先,由接收侧节点执行的用户进程#2监视临时寄存器群82(步骤S101和S103),并且通过将写入指针的值与读取指针的值相比较来检测消息的接收。在图24所示的示例中,由于在步骤S102和S104中未接收到消息,因此未检测到消息的接收(步骤S102和S104)。
此时,用户进程#1将标志“1”存储在发布请求标志寄存器63中,用户进程#1指示CPU 12发送消息(步骤S105)。接着,CPU 12将包含消息的包发送至接收侧节点(步骤S106)。此外,包括在接收侧节点中的CPU将所接收到的消息存储在消息存储区域中(步骤S107)。此时,包括在接收侧节点中的CPU更新写入指针的值。此外,包括在接收侧节点中的CPU将完成应答发送至CPU 12(步骤S108)。
接着,CPU 12将标志“1”存储在应答接收标志寄存器68中,从而CPU 12通知用户进程#1消息发送完成。接着,用户进程#1读取应答状态寄存器66的值(步骤S109)。
相比之下,用户进程#2监视临时寄存器群82(步骤S110)并且将写入指针的值与读取指针的值相比较。由于写入指针的值与读取指针的值不同,因此,用户进程#2检测消息(步骤S111)。接着,用户进程#2读取消息(步骤S112),并且结束处理。
下面,将参照图25给出对用于使用中断处理来接收消息的处理流程的描述,其中该中断处理由设置在消息接收侧的、已接收到消息的节点来执行。具体而言,将描述当将“1”存储在INTMASK寄存器88中时由在消息发送侧的节点和在消息接收侧的节点所执行的处理流程。图25是示出用于通过使用中断指令来向用户进程发布到达通知的处理流程的时序图。
在这样的情况下,通过将标志“1”存储在发布请求标志寄存器63中,用户进程#1指示CPU 12发送消息(步骤S201)。接着,CPU 12将包含消息的包发送至接收侧节点(步骤S202)。此外,包括在接收侧节点中的CPU将所接收到的消息存储在消息存储区域中(步骤S203)。此时,包括在接收侧节点中的CPU更新写入指针的值。此外,包括在接收侧节点中的CPU将完成应答发送至CPU 12(步骤S204)。
接着,通过将标志“1”存储在应答接收标志寄存器68中,CPU 12通知用户进程#1消息发送完成。接着,用户进程#1读取应答状态寄存器66的值(步骤S205)。
由接收侧节点在该步骤中执行的用户进程#2处于休眠状态(步骤S206)。因此,如果接收侧节点中的CPU将应答发送至CPU 12,则CPU发布中断请求信号作为到达通知(步骤S207)。接着,接收侧节点中的驱动程序执行上下文切换(步骤S208)并且运行处于休眠状态的用户进程#2。然后,用户进程#2读取消息(步骤S209),并且结束处理。
下面,将参照图26描述当用户进程#1发送消息#1时在发送侧节点发生上下文切换的情况下所执行的处理流程。图26是示出当在发送侧节点发生上下文切换时所执行的处理流程的时序图。
例如,在发送侧节点的用户进程#1将消息#1存储在消息数据寄存器61中(步骤S301)。此时,发生上下文切换,因而,驱动程序33对用户进程#1执行保存/应答处理(步骤S302)。此时,还对存储在消息数据寄存器61中的消息#1执行保存/应答处理。
随后,由于上下文切换而执行的用户进程#2将消息#2存储在消息数据寄存器61中(步骤S303)。接着,通过将“1”存储在发布请求标志寄存器63中(步骤S304),用户进程#2允许CPU 12发送包含消息#2的包(步骤S305)。
接着,接收侧节点中的CPU将消息#2存储在消息存储区域中(步骤S306)。接着,接收侧节点中的CPU发布中断请求信号(步骤S307),并且将应答发送至CPU 12(步骤S308)。当CPU 12接收到应答时,由于“1”存储在应答接收标志寄存器68中,因此用户进程#2读取存储在应答状态寄存器66中的状态(步骤S309)。此后,发生上下文切换,从而,驱动程序33对用户进程#2执行保存/恢复处理(步骤S310)。
相比之下,当接收侧节点中的驱动程序接收到消息#2时,发布中断请求信号(步骤S307);因此,驱动程序向用户进程#3发布中断通知(步骤S311)。接着,用户进程#3读取消息#2(步骤S312)。
在该阶段,由于上下文切换而执行的用户进程#1将在步骤S301中发送的消息#1存储在消息数据寄存器61中。因此,用户进程#1将“1”存储在发布请求标志寄存器63中(步骤S313),从而将包含消息#1的包发送至CPU 12(步骤S314)。
接着,接收侧节点中的CPU将消息#1存储在消息存储区域中(步骤S315)。接着,接收侧节点中的CPU发布中断请求信号(步骤S316)并且将应答发送至CPU 12(步骤S317)。在该阶段,当CPU 12接收到应答时,“1”被存储在应答接收标志寄存器68中,用户进程#1读取存储在应答状态寄存器66中的状态(步骤S318)。
相比之下,当接收侧节点中的驱动程序接收到消息#1时,发布中断请求信号(步骤S316);因此,驱动程序向用户进程#3发布中断通知(步骤S319)。接着,用户进程#3读取消息#1(步骤S320)。
在该阶段,CPU 12在由图26中的(a)所示的时期内等待用户进程#1的执行。具体而言,从进程已发布消息发送命令直到将状态存储在应答状态寄存器66中并将标志“1”存储在应答接收标志寄存器68中的时期内,CPU 12等待消息发送命令的执行的完成。因此,即使当紧接在进程发布了消息发送命令之后发生上下文切换时,紧接在发布消息发送命令之后也似乎从进程侧接收到应答。相应地,即使在发生上下文切换时,CPU 12也能够正常停止并且重新开始执行进程。
如上所述,CPU 12包括存储有多个寄存器组的RAM 81,并将表示寄存器组的寄存器ID通知作为消息发送源的CPU,在每个寄存器组中,写入指针与读取指针相关联。接着,当CPU 12获得寄存器ID以及消息时,CPU 12将所接收到的消息存储在由寄存器组中的写入指针表示的消息存储区域中,其中该寄存器组由所获得的寄存器ID来表示。此外,其他CPU 13至15执行相同的处理。因此,CPU 12至15可以通过发送侧CPU执行进程间通信而无需高速缓存写入指针;因此,当其他CPU中的一个发生故障时,可以防止故障扩展到其他CPU。
CPU 12具有控制资源60至60c,该控制资源60至60c的数量与可以同时执行的进程的数量的相同。具体而言,CPU 12具有发送队列,该发送队列的数量与可以同时执行的进程的数量相同。此外,CPU 12中存储有寄存器组,其中寄存器组的数量与对某一进程同时发送消息的进程的数量相同。具体而言,CPU 12具有接收队列,该接收队列的数量与对正执行的进程同时发送消息的进程的数量相同。因此,CPU 12可以减少进程间通信的等待时间,同时防止电路的尺寸根据进程间通信增加。
顺便提及,在传统的无限带宽技术中,进程间通信通过使用作为在发送侧硬件中所准备的发送队列与在接收侧硬件中所准备的接收队列的组合的队列对来执行。具体而言,当发送进程与接收进程进行通信时,发送进程保留在进程之间预先达成协议的队列对,然后,发送侧进程#1至#3将消息写入所保留的各个队列对中。接着,接收侧进程#1至#3从所保留的各个队列对获得消息。
然而,采样传统的无限带宽技术,需要为发送进程与接收进程的每个组合准备队列对。图27是示出传统的无限带宽中的队列对的功能的示意图。图27示出了多个发送进程#1至#3将消息分别发送至多个接收进程#1至#3的示例。
在图27所示的示例中,由于发送进程#1至#3和接收进程#1至#3执行进程间通信,因此发送侧主机通道适配器(HCA)硬件和接收侧HCA硬件需要准备九个队列对。因此,采用传统的无限带宽技术,实现进程间通信所需的资源数量增加。
此外,可以想到在不增加资源数量的情况下通过共享多个进程的单个队列对来执行进程间通信的方法。图28是示出在进程之间共享队列对时所执行的处理的示意图。如图28所示,发送进程#1至#3经由装置驱动程序软件来共享队列对中的发送队列。此外,接收进程#1至#3经由装置驱动程序软件来共享队列对中的接收队列。
例如,发送进程#1呼叫发送侧装置驱动程序软件并且请求其将待发送至接收进程#2的消息写入发送队列中。在这样的情况下,发送侧装置驱动程序软件将消息写入发送队列中。通过这样做,接收侧装置驱动程序软件读取到达接收队列的消息并且将所读取的消息通知作为目的地的接收进程#2。
然而,采用用于共享单个队列对的技术,发送侧进程#1至#3读取装置驱动程序软件并且请求发送消息,而接收侧进程#1至#3经由装置驱动程序软件获得消息。因此,每当发送和接收消息时都发生上下文切换,当执行进程间通信时延迟时间增加。
相比之下,由于CPU 12具有数量与可以同时执行的进程的数量相同的发送队列,因此,当每个进程发送消息时不会出现缺少队列。此外,由于CPU 12具有数量与对正执行的进程同时发送消息的进程的数量相同的接收队列,因此在接收消息时不会出现缺少队列。相应地,CPU 12可以执行进程间通信,而不会出现在未准备在所有进程中所使用的队列对的情形下执行进程间通信时所出现的延迟时间增加。
下面,参照图29至图32描述由CPU 12执行的处理所进行的处理的流程。首先,参照图29描述由已获取新消息队列的进程所执行的处理的流程。图29是示出在获取新消息队列时所执行的处理的流程的流程图。
首先,进程指定M大小和Q大小,并且呼叫用于获取消息队列的驱动程序33(步骤S401)。接着,进程确定是否已获取消息队列(步骤S402)。如果未获取消息队列(在步骤S402为否),则进程发布异常结束通知。
相反,如果已获取消息队列(在步骤S402为是),则进程将MSGQ-ID通知由发送侧节点执行的进程(步骤S403)。随后,进程确定进程是否由于中断而等待接收消息(步骤S404)。如果进程由于中断而等待接收消息(在步骤S404为是),则进程将INTMASK设置为“1”(步骤S405),并且结束处理。相反,如果进程没有由于中断而等待接收消息(在步骤S404为否),则进程通过使用轮询来监视消息的接收(步骤S406),并且结束处理。
下面,将参照图30描述用于通过驱动程序33获取消息队列的处理。图30是示出用于由驱动程序获取新消息队列的处理的流程的流程图。图30中所示的处理是由在图29所示的步骤S401中所呼叫的驱动程序所执行的处理。
例如,驱动程序33检查表示存储在RAM 81中的寄存器组相对于进程的分配的寄存器组管理表(步骤S501)。寄存器组管理表存储在例如存储器18和19中。接着,驱动程序33确定是否存在没有被分配进程的空闲寄存器组(步骤S502)。
如果存在空闲寄存器组(在步骤S502为是),则驱动程序33获取空闲寄存器组,并且根据所指定的M大小和Q大小来计算消息存储区域所需的容量(步骤S503)。接着,驱动程序33确定是否可以获取具有所计算出的容量的存储器(步骤S504)。如果驱动程序33可以获取所述存储器(在步骤S504为是),则驱动程序33确定存储器密钥的值(步骤S505)。
随后,驱动程序33初始化所获取的空闲寄存器组(步骤S506),根据由所获取的寄存器组表示的寄存器ID和存储器密钥的值来生成MSGQ-ID,将MSGQ-ID通知作为呼叫源的进程(步骤S507),并且结束处理。相反,如果不存在空闲寄存器组(在步骤S502为否)或者没有获取存储器(在步骤S504为否),则驱动程序33向作为呼叫源的进程通知没有获取消息队列,然后,异常地结束处理。
下面,将参照图31描述由发送消息的CPU 12执行的处理的流程。图31是示出发送侧CPU中的消息发送处理的流程的流程图。首先,CPU12确定待发送的消息的长度是否大于预定位长(步骤S601)。
如果消息的长度大于预定位长(在步骤S601为是),则CPU 12将发送消息存储在共享存储器中(步骤S602)。接着,CPU 12将包含消息的存储器地址和消息的长度这两者存储在消息数据寄存器61中(步骤S603)。相反,如果CPU 12确定消息的长度不大于预定位长(在步骤S601为否),则CPU 12将消息存储在消息数据寄存器61中(步骤S604)。
接着,CPU 12设置MSGQ-ID并发送消息(步骤S605)。随后,CPU12读取应答状态寄存器66(步骤S606),并且确定OVFL是否为“1”(步骤S607)。具体而言,CPU 12确定是否发生溢出。接着,如果CPU 12确定OVFL为“1”(在步骤S607为是),则CPU 12再次执行步骤S605。相反,如果CPU 12确定OVFL不为“1”(在步骤S607为否),则CPU 12确定PROT是否为“1”(步骤S608)。
具体而言,CPU 12确定存储器密钥的值与存取密钥的值是否匹配。如果CPU 12确定PROT为“0”(在步骤S608为否),则CPU 12正常结束处理。如果CPU 12确定PROT为“1”(在步骤S608为是),则CPU 12向正执行的进程发布异常结束通知,然后,结束处理。
下面,将参照图32描述在CPU 12接收消息时所执行的处理的流程。图32是示出在接收侧CPU中的消息接收处理的流程的流程图。图32示出了通过使用轮询来等待消息的接收的情况和由于中断请求而识别出消息的接收的情况的示例,两种情况并排示出。
例如,如果通过使用轮询来等待消息的接收,则CPU 12读取读取指针和写入指针(步骤S701)。接着,CPU 12确定读取指针与写入指针是否匹配(步骤S702)。如果CPU 12确定读取指针与写入指针匹配(在步骤S702为是),则在步骤S701中CPU 12再次执行处理。相反,如果CPU12确定读取指针与写入指针不匹配(在步骤S702为否),则CPU 12根据读取指针从存储器读取消息(步骤S703)。
接着,CPU 12更新读取指针的值(步骤S704),并且分析所接收到的消息(步骤S705)。接着,根据所接收到的消息是否包含存储器地址,CPU 12确定所接收到的消息是否较长(步骤S706)。如果CPU 12确定所接收到的消息较长(在步骤S706为是),则CPU 12通过使用消息中的地址,从共享存储器读取长消息(步骤S707),并且结束处理。相反,如果CPU 12确定所接收到的消息不长(在步骤S706为否),则CPU 12结束处理。
此外,如果CPU 12由于中断通知而识别出消息的接收,则CPU 12读取在发布中断请求时所触发的读取指针和写入指针(步骤S708)。接着,CPU 12确定读取指针与写入指针是否匹配(步骤S709)。如果CPU 12确定读取指针与写入指针匹配(在步骤S709为是),则CPU 12发布异常结束通知,并且结束处理。相反,如果CPU 12确定读取指针与写入指针不匹配(在步骤S709为否),则在步骤S703中CPU 12结束处理。
第一实施例的优点
如上所述,CPU 12存储有多个寄存器组并且将用于标识寄存器组的寄存器ID通知设置在消息发送侧的节点,在每个寄存器组中,写入指针与读取指针相关联。接着,如果CPU 12接收到消息和寄存器ID,则CPU12根据所接收到的寄存器ID表示的寄存器组中的写入指针,将所接收到的消息存储在存储器17或18中。
因此,在使用多节点系统技术的进程间通信中,当节点出现故障时,CPU 12可以防止故障传播到其他节点,其中该多节点系统技术使用共享存储器。具体而言,当CPU 12发送消息时,CPU 12可以适当地发送消息,而无需高速缓存写入指针。因此,CPU 12可以防止以下情况:当CPU12发生故障时,故障传播到其他CPU 13至CPU 15。
此外,CPU 12具有控制资源60至60c,控制资源的数量与可以同时执行的进程的数量的相同。因此,当进程保留队列时,CPU 12可以在不增加延迟时间的情况下传递消息。
此外,如果正执行的进程将消息发送至其他节点,则CPU 12使正在运行的进程的程序停止进行,直到接收到对该消息的应答为止。例如,如果CPU 12将消息存储在存储器17或18中,则CPU 12具有将应答发送至消息的发送源的功能。接着,在从进程将“1”存储在发布请求标志寄存器63中直到将“1”存储在应答接收标志寄存器68中的时期内,CPU 12停止核心中所执行的程序,并且请求完成通知被发送至核心。因此,当进程读取应答状态寄存器66时,进程读取关于由CPU 12发送的消息的应答状态。
此外,CPU 12中存储有指针组,指针组的数量与将消息发送至CPU12所执行的进程的进程的数量相等,或者指针组的数量大于将消息发送至CPU 12所执行的进程的进程的数量。因此,CPU 12可以实现进程间通信,而无需为待执行的进程的所有组合准备队列。相应地,CPU 12可以在不增加电路尺寸的情况下防止在进程间通信中延迟时间的增加。
此外,对于CPU 12,进程将消息直接写入消息数据寄存器61中。此外,当接收到消息时,CPU 12将消息直接写入消息存储区域,而无需呼叫装置驱动程序。因此,由于在执行用于呼叫装置驱动程序的上下文切换时没有发生因开销导致的延迟,因此在进程间通信中CPU 12可以令人满意地维持等待时间性能。
此外,如果消息较长,则CPU 12将消息存储在共享存储器18、存储器20、存储器22或存储器24中,并且发送包含较长消息的存储器地址而不是发送消息。接着,当CPU 12接收到存储器地址而不是消息时,CPU12从存储器18、存储器20、存储器22或存储器24之中由所接收到的存储器地址表示的存储区域获取长消息。因此,即使当消息长度大于预定阈值时,CPU 12也可以在不增加等待时间的情况下执行进程间通信。
此外,CPU 12将存取密钥通知在消息发送侧所设置的节点。接着,CPU 12确定从在消息发送侧所设置的节点与消息一起接收到的存取密钥与由CPU 12存储的存储器密钥是否匹配。如果CPU 12确定它们匹配,则CPU 12将消息存储在消息存储区域中。因此,CPU 12能够防止由于恶意程序而导致的程序错误和消息的破坏。
此外,CPU 12将多个寄存器组存储在RAM 81中。接着,CPU 12将由与消息一起接收到的寄存器ID表示的寄存器组暂时存储在临时寄存器群82中。相应地,由于CPU 12不需要具有存储有寄存器组的很多寄存器,因此能够在不增加电路的尺寸的情况下实现进程间通信。
此外,当CPU 12存储消息时,CPU 12更新写入指针的值。此外,CPU 12确定写入指针的值与读取指针的值是否匹配。如果CPU 12确定值不匹配,则CPU 12根据读取指针从存储器17或18读取消息。因此,CPU 12可以等待消息的接收而不执行复杂的处理。
[b]第二实施例
在上述第一实施例中,如果存储在应答状态寄存器中的OVFL为“1”,则CPU 12所执行的进程确定发生了溢出,并且重新发送消息;然而,实施例不限于此。
具体而言,对于根据第一实施例的CPU 12,如果进程连续执行消息的发送,则CPU 12可能会浪费处理时间。例如,如果接收侧节点长时间执行某一进程,则CPU 12无法识别何时释放接收侧消息队列。因此,CPU12继续发送消息,直到释放接收侧消息队列为止。
相应地,当根据第二实施例的CPU 12a发送消息时,如果CPU 12a接收表示溢出状态的应答,则CPU 12a通过停止发送消息的进程并执行另一进程来排除处理时间的浪费。
下面,将参照附图描述根据第二实施例的CPU 12a。图33是示出根据第二实施例的接收控制单元的功能配置的示意图。图33中所示的功能与第一实施例中的单元相同的单元被分配了图15中所示的相同附图标记;因此,将省略对其的描述。CPU 12a具有与第一实施例中的CPU 12相同的配置。在图33所示的示例中,CPU 12a包括接收控制单元58a。
接收控制单元58a具有与根据第一实施例的接收控制单元58执行的功能相同的功能, 并且包括类似于RAM 81且存储有多个寄存器组的RAM 81a。此外,在接收控制单元58a中,使用INTMASK/溢出寄存器88a,而不是接收控制单元58中所包括的临时寄存器群82中的INTMASK寄存器88。
下面,将参照图34和图35描述存储在RAM 81a中的寄存器组。图34是示出根据第二实施例的RAM中的字段的定义的示意图。如图34中所示,除了存储在根据第一实施例的RAM 81中的寄存器组以外,RAM81a还存储有溢出位(OVFL位)。具体而言,RAM 81a使用83位条目中的第77位作为OVFL位,并且将与根据第一实施例存储在寄存器组中的信息相同的信息存储在其他82位中。
图35是示出根据第二实施例的存储在RAM中的字段内的数据内容的示意图。如图35所示,RAM 81a存储有表示在接收到消息时是否发生队列的溢出的1位OVFL位。如图35所示,存储在RAM 81a中的其他信息与存储在RAM 81中的信息相同;因此,将省略对其的描述。
下面,将参照图36描述INTMASK/溢出寄存器88a。图36是示出从软件侧观察根据第二实施例的接收控制单元中的地址示例的示意图。例如,INTMASK/溢出寄存器88a为以下寄存器:除INTMASK以外,其还存储有表示在接收到消息时是否发生队列的溢出的OVFL位。
如图36所示,类似于其他寄存器83至87,当从另一软件观察时,地址被提供给INTMASK/溢出寄存器88a。在图36所示的示例中,类似与第一实施例,地址“0x10”至“0x17”被提供给INTMASK/溢出寄存器88a存储INTMASK的区域。此外,地址“0x40”至“0x47”被提供给INTMASK/溢出寄存器88a存储OVFL位的区域。
下面,通过返回参照图33,描述由接收控制单元58a执行的处理。例如,当接收控制单元58a从局部XB 16接收到消息时,接收控制单元58a通过使用匹配检查单元91来确定新消息是否可以存储在存储有所接收到的消息的消息存储区域中。具体而言,当接收控制单元58a接收到消息时,接收控制单元58a确定是否发生了溢出。
如果发生了溢出,则接收控制单元58a通过将应答OVFL位定义为“1”来向在消息发送侧的节点通知发生了溢出。此外,从存储在RAM 81a中的多条信息当中,接收控制单元58a将条目中由寄存器ID表示的且与消息一起接收到的OVFL位定义为“1”。
此外,当通过针对更新寄存器的写入请求而更新读取指针时,如果OVFL位为“1”,则接收控制单元58a通过使用中断生成单元96来输出中断请求信号。在这样的情况下,驱动程序33将空闲空间可用通知发送至消息发送源节点,该消息发送源节点由于溢出而未将消息存储在消息存储区域中。
图37是示出根据第二实施例的用于更新RAM中的字段的处理的示意图。如图37所示,当RAM外围装置78初始化条目时,RAM外围装置78将OVFL位更新为“0”,而当RAM外围装置78写入消息时,RAM外围装置78将OVFL位的值更新为更新值。具体而言,如果在写入消息时发生了溢出,则RAM外围装置78存储“1”,而如果未发生溢出,则RAM外围装置78存储“0”。此外,当RAM外围装置78改变中断屏蔽或读取消息时,RAM外围装置78使OVFL位的值不变。此外,RAM外围装置78对除图37所示的OVFL位以外的字段中所表示的信息执行与图20所示处理相同的处理;因此,将省略对其的描述。
下面,将参照图38描述在发生了溢出时由CPU 12a所执行的处理的操作。图38是示出在第二实施例中发生溢出时所执行的处理的流程的时序图。
例如,通过将标志“1”存储在发布请求标志寄存器63中,用户进程#1指示CPU 12a发送消息(步骤S801)。接着,CPU 12a将包含消息的包发送至接收侧节点(步骤S802)。此外,由于包括在接收侧节点中的CPU中的消息存储区域处于FULL(满)状态(被填满)(步骤S803),因此检测到溢出(步骤S804)。
接着,包括在接收侧节点中的CPU将OVFL位为“1”的应答发送至CPU 12a(步骤S805)。此外,包括在接收侧节点中的CPU将与出现在RAM 81a中的所发送的消息相关的溢出位设置为“1”(步骤S806)。接着,用户进程#1读取应答状态寄存器66的值,并且检测OVFL位(步骤S807)。此后,用户进程#1将用于将用户进程#1添加到等待列表的请求发送至由接收侧节点执行的驱动程序(步骤S808)。
接着,由接收侧节点执行的驱动程序将用户进程#1添加到等待列表(步骤S809)。接着,由接收侧节点执行的驱动程序将对登记在等待列表中的完成通知发送至用户进程#1(步骤S810)。接着,用户进程#1将其状态转变为等待状态(休眠)(步骤S811)。在该时期内,CPU 12a还可以执行除用户进程#1以外的进程。
以下,由接收侧节点执行的用户进程#2读取消息(步骤S812)。接着,接收侧节点中的CPU确定消息存储区域具有空闲空间(步骤S813);检测到由于发送侧进程根据RAM 81a中的溢出位为“1”的状态检测到溢出而处于休眠状态的发送侧进程;并且将中断进程通知驱动程序(步骤S814)。接着,接收侧节点中的驱动程序检查等待列表(步骤S815)并且确定用户进程#1已登记在等待列表中。
因此,接收侧节点中的驱动程序将空闲空间可用通知发送至驱动程序33(步骤S816)。接着,驱动程序33执行上下文切换(步骤S817)并且操作用户进程#1。因此,用户进程#1将消息#1存储在消息数据寄存器61中,并且将标志“1”存储在发布请求标志寄存器63中(步骤S818)。接着,CPU 12a重新发送消息#1(步骤S819)。
下面,将参照图39描述在发生溢出时由CPU 12a所执行的处理的流程。图39是示出在发生溢出时根据第二实施例由CPU执行的处理的流程的流程图。图39中所示的步骤S901至S908中所执行的处理与图31中所示的步骤S601至S608中所执行的处理相同;因此,将省略对其的描述。
例如,如果OVFL位为“1”,则CPU 12a将空闲空间等待请求发送至驱动程序33(步骤S909)。接着,驱动程序33将用于将进程添加到等待列表的请求发送至作为消息目的地的节点。接着,CPU 12a允许执行进程直到休眠,并且结束处理。相比之下,当CPU 12a从作为消息目的地的节点接收到空闲空间可用通知时,在步骤S905中,CPU 12a允许进程从休眠状态重新开始其操作,并且执行处理。所执行的除上述处理以外的其他处理与图31中所示的所执行的处理相同;因此,将省略对其的描述。
第二实施例的优点
如上所述,在接收侧节点的CPU发送包含OVFL位的应答,并且设置存储在RAM 81a中的溢出位。接着,如果包含在由消息目的地节点通知的应答中的OVFL位表示未接收到新消息,则CPU 12a执行以下处理。即,CPU 12a将用于将进程添加到等待列表的请求发送至消息目的地节点,停止用于发送消息的进程,并且执行另一进程。
接着,如果CPU 12a从消息目的地节点接收到空闲空间可用通知,则CPU 12a执行所停止的进程并且重新发送消息。因此,CPU 12a可以消除处理时间的浪费。
[c]第三实施例
在以上说明中,给出了根据本发明的实施例的描述;然而,实施例不限于此,并且本发明可用除上述实施例以外的多种实施例来实现。因此,下面,将描述本发明中所包括的另一个实施例作为第三实施例。
(1)存储在RAM中的信息
上述CPU 12和12a分别包括存储有寄存器组的RAM 81和81a;然而,实施例不限于此。例如,CPU 12和12a实际上还可以包括存储有各寄存器组的寄存器。此外,CPU 12和12a还可以将从RAM 81和81a读取的寄存器组分别存储在诸如FF等的缓冲器中,而不是存储在临时寄存器群82。
(2)消息存储区域
上述CPU 12和12a在存储器17或18中设置消息存储区域;然而,实施例不限于此。例如,CPU 12和12a还可以在由其他CPU 13至15共享的共享存储器区域中设置消息存储区域。
(3)控制资源
上述CPU 12包括分别用于核心40至40b的控制资源60至60c。然而,实施例不限于此。例如,如果核心40至40b中的每一个均可以通过使用超线程技术来执行两个进程,则核心40至40b中的每一个还可以包括两个控制资源。此外,例如,当通过限制由核心40b执行的进程来使核心40b仅执行没有与其他进程进行进程间通信的进程时,CPU 12没有使用包括在核心40b中的控制资源。
根据本发明的特征,在使用多节点系统技术的进程间通信中,当节点中发生故障时,防止了故障传播到其他节点。
Claims (10)
1.一种信息处理设备(1),包括多个节点(10至10m),其中每个所述节点(10至10m)均包括:
处理器(12至15);
存储装置(17至24);
存储单元(78),在其中存储有多个指针组,在每个指针组中,写入指针与读取指针相关联,所述写入指针表示在从其他节点接收到的数据存储在所述存储装置(17至24)中时所使用的地址,所述读取指针表示在从所述存储装置(17至24)读取所述数据时所使用的地址;
通知单元(40至40b),将表示指针组的指针标识符通知与所述数据的发送源对应的节点;以及
保持单元(58),当从与所述数据的发送源对应的节点接收到所述数据和由所述通知单元(40至40b)通知的指针标识符时,根据由所述指针标识符所表示的指针组中的写入指针表示的地址将所接收到的数据保持在所述存储装置(17至24)中。
2.根据权利要求1所述的信息处理设备(1),其中,每个所述节点(10至10m)还包括:
多个发送单元(60至60c),所述多个发送单元的数量与所述处理器(12至15)能够同时执行的进程的数量相同,每个所述发送单元将由对应于目的地的节点通知的指针标识符和所述数据发送至所述对应于目的地的节点;以及
停止单元(40至40b),当正执行的进程将所述数据发送至所述对应于目的地的节点时,使所述进程的程序停止进行,直到接收到对所述数据的应答为止。
3.根据权利要求1或2所述的信息处理设备(1),其中,每个所述节点(10至10m)还包括:
应答单元(89),当所述保持单元(58)将所述数据保持在对应的所述存储装置(17至24)中时,将应答发送至与所述数据的发送源对应的节点;其中
所述存储单元(78)存储有所述指针组,所述指针组的数量等于或大于从由每个对应节点(10至10m)执行的进程之中同时接收所述数据的进程的数量。
4.根据权利要求1所述的信息处理设备(1),还包括由每个所述节点(10至10m)共享的共享存储器,其中
所述发送单元(60至60c)将所述数据存储在所述共享存储器中,并且将所述指针标识符和存储有所述数据的所述共享存储器的存储器地址发送至与所述数据的目的地对应的节点,
在接收到所述指针标识符和所述存储器地址时,所述保持单元(58)根据由所述指针标识符所表示的指针组中的写入指针表示的地址来保持所接收到的存储器地址,并且
由与所述数据的目的地对应的节点执行的进程(35)根据由所述保持单元(58)保持在所述存储装置(17至24)中的所述存储器地址来从所述共享存储器获得所述数据。
5.根据权利要求2所述的信息处理设备(1),其中
所述存储单元(78)针对每个指针组存储有密钥信息,
所述通知单元(40至40b)将所述指针标识符和与由所述指针标识符表示的指针组有关的密钥信息通知与所述数据的发送源对应的节点,
所述发送单元(60)发送所述指针标识符、所述数据和所述密钥信息,并且
当从与存储在所述存储单元(78)中的所述数据的发送源对应的节点接收到的所述指针标识符所表示的指针组的密钥信息与连同所述指针标识符一起接收到的密钥信息匹配时,所述保持单元(58)根据由所述指针组中的写入指针表示的地址来将所接收到的数据保持在其中。
6.根据权利要求2所述的信息处理设备(1),其中
所述应答单元(89)发送所述应答和溢出位,所述溢出位表示所述对应节点是否能够接收新数据,并且
当由所述对应于目的地的节点通知的溢出位表示所述新数据不被接收时,所述发送单元(60)请求与所述数据的目的地对应的节点在能够存储所述新数据时发送通知,并且在接收到所述通知以前停止用于发送所述数据的进程。
7.根据权利要求1所述的信息处理设备(1),其中,所述存储单元(78)包括:
存储器(81),在其中存储有所述多个指针组,
获取单元(79),从所述存储器获取由从与所述数据的发送源对应的节点接收到的指针标识符表示的指针组,以及
寄存器(82),临时保持由所述获取单元获取的指针组。
8.根据权利要求1所述的信息处理设备(1),其中,每个所述节点(10至10m)还包括:
更新单元(93),当所述保持单元(58)保持所述数据时,对由与所述数据一起接收到的指针标识符表示的指针组中的写入指针的值进行更新;
确定单元(91),确定所述写入指针的值与所述读取指针的值是否匹配;以及
读取单元(74),当所述确定单元确定所述写入指针的值与所述读取指针的值不匹配时,根据由所述读取指针表示的地址从所述存储装置(17至24)读取所述数据。
9.一种算术装置(10),包括:
存储单元(78),在其中存储有多个指针组,在每个指针组中,写入指针与读取指针相关联,所述写入指针表示在从其他算术装置接收到的数据存储在存储装置(17至24)中时所使用的地址,所述读取指针表示在从所述存储装置(17至24)读取数据时所使用的地址;
通知单元(40至40b),将表示指针组的指针标识符通知与所述数据的发送源对应的其他算术装置;以及
保持单元(58),当从所述其他算术装置接收到所述数据和由所述通知单元(40至40b)通知的所述指针标识符时,根据由所述指针标识符所表示的指针组中的写入指针表示的地址将所接收到的数据保持在所述存储装置(17至24)中。
10.一种信息传递方法,包括:
在节点(10至10m)的存储装置(17至24)中存储多个指针组,在每个指针组中,写入指针与读取指针相关联,所述写入指针表示在从其他节点接收到的数据存储在所述存储装置(17至24)中时所使用的地址,所述读取指针表示在从所述存储装置(17至24)读取所述数据时所使用的地址;
将表示指针组的指针标识符通知与所述数据的发送源对应的节点;以及
当从所述其他节点接收到所述数据和在所述通知时所通知的所述指针标识符时,根据由所述指针标识符表示的指针组中的写入指针表示的地址将所接收到的数据保持在所述存储装置(17至24)中。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP2012-083281 | 2012-03-30 | ||
JP2012083281A JP5598493B2 (ja) | 2012-03-30 | 2012-03-30 | 情報処理装置、演算装置および情報転送方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN103368848A true CN103368848A (zh) | 2013-10-23 |
Family
ID=47044808
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2012103646416A Pending CN103368848A (zh) | 2012-03-30 | 2012-09-26 | 信息处理设备、算术装置和信息传递方法 |
Country Status (6)
Country | Link |
---|---|
US (1) | US9003082B2 (zh) |
EP (1) | EP2645248A1 (zh) |
JP (1) | JP5598493B2 (zh) |
KR (1) | KR20130111167A (zh) |
CN (1) | CN103368848A (zh) |
TW (1) | TW201339836A (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108694078A (zh) * | 2017-03-31 | 2018-10-23 | 慧与发展有限责任合伙企业 | 基于最近中断请求指示符和工作确认的中断 |
CN112118163A (zh) * | 2019-06-19 | 2020-12-22 | 贝克霍夫自动化有限公司 | 在自动化系统中进行能量传输和数据传输的系统和方法 |
CN112395220A (zh) * | 2020-11-18 | 2021-02-23 | 海光信息技术股份有限公司 | 共享存储控制器的处理方法、装置、系统及存储控制器 |
CN115113931A (zh) * | 2022-07-22 | 2022-09-27 | 瀚博半导体(上海)有限公司 | 数据处理系统、方法、人工智能芯片、电子设备和介质 |
CN116107763A (zh) * | 2023-04-12 | 2023-05-12 | 北京燧原智能科技有限公司 | 一种数据发送方法、装置、设备及存储介质 |
Families Citing this family (29)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10069779B2 (en) * | 2013-03-25 | 2018-09-04 | Ge Aviation Systems Llc | Method of hybrid message passing with shared memory |
KR101827936B1 (ko) * | 2013-08-29 | 2018-02-09 | 세이코 엡슨 가부시키가이샤 | 송신 시스템, 송신 장치 및, 데이터 송신 방법 |
US9547553B1 (en) | 2014-03-10 | 2017-01-17 | Parallel Machines Ltd. | Data resiliency in a shared memory pool |
US9781027B1 (en) | 2014-04-06 | 2017-10-03 | Parallel Machines Ltd. | Systems and methods to communicate with external destinations via a memory network |
US9529622B1 (en) | 2014-12-09 | 2016-12-27 | Parallel Machines Ltd. | Systems and methods for automatic generation of task-splitting code |
US9690713B1 (en) | 2014-04-22 | 2017-06-27 | Parallel Machines Ltd. | Systems and methods for effectively interacting with a flash memory |
US9594688B1 (en) | 2014-12-09 | 2017-03-14 | Parallel Machines Ltd. | Systems and methods for executing actions using cached data |
JP6354387B2 (ja) | 2014-06-30 | 2018-07-11 | 富士通株式会社 | 情報処理装置、情報処理システム及び割込装置制御方法 |
US9639473B1 (en) | 2014-12-09 | 2017-05-02 | Parallel Machines Ltd. | Utilizing a cache mechanism by copying a data set from a cache-disabled memory location to a cache-enabled memory location |
US9781225B1 (en) | 2014-12-09 | 2017-10-03 | Parallel Machines Ltd. | Systems and methods for cache streams |
US9753873B1 (en) | 2014-12-09 | 2017-09-05 | Parallel Machines Ltd. | Systems and methods for key-value transactions |
US9632936B1 (en) | 2014-12-09 | 2017-04-25 | Parallel Machines Ltd. | Two-tier distributed memory |
US10732865B2 (en) * | 2015-09-23 | 2020-08-04 | Oracle International Corporation | Distributed shared memory using interconnected atomic transaction engines at respective memory interfaces |
US11334368B2 (en) | 2015-09-24 | 2022-05-17 | Hewlett Packard Enterprise Development Lp | Process and thread launch features |
EP3353659A4 (en) * | 2015-09-25 | 2019-05-01 | Intel Corporation | SYSTEMS AND METHODS FOR CONTROLLING INPUT / OUTPUT COMPUTER RESOURCES |
JP6579916B2 (ja) | 2015-10-28 | 2019-09-25 | 株式会社日立製作所 | 仮想計算機間の通信経路制御方法および計算機システム |
JP6390748B1 (ja) * | 2017-04-19 | 2018-09-19 | 富士通株式会社 | 情報処理装置、情報処理方法および情報処理プログラム |
JP6414269B1 (ja) * | 2017-04-19 | 2018-10-31 | 富士通株式会社 | 情報処理装置、情報処理方法および情報処理プログラム |
US10620955B2 (en) | 2017-09-19 | 2020-04-14 | International Business Machines Corporation | Predicting a table of contents pointer value responsive to branching to a subroutine |
US11061575B2 (en) * | 2017-09-19 | 2021-07-13 | International Business Machines Corporation | Read-only table of contents register |
US10713050B2 (en) | 2017-09-19 | 2020-07-14 | International Business Machines Corporation | Replacing Table of Contents (TOC)-setting instructions in code with TOC predicting instructions |
US10896030B2 (en) * | 2017-09-19 | 2021-01-19 | International Business Machines Corporation | Code generation relating to providing table of contents pointer values |
US10884929B2 (en) | 2017-09-19 | 2021-01-05 | International Business Machines Corporation | Set table of contents (TOC) register instruction |
US10705973B2 (en) | 2017-09-19 | 2020-07-07 | International Business Machines Corporation | Initializing a data structure for use in predicting table of contents pointer values |
US10725918B2 (en) | 2017-09-19 | 2020-07-28 | International Business Machines Corporation | Table of contents cache entry having a pointer for a range of addresses |
US10853168B2 (en) * | 2018-03-28 | 2020-12-01 | Samsung Electronics Co., Ltd. | Apparatus to insert error-correcting coding (ECC) information as data within dynamic random access memory (DRAM) |
JP7010129B2 (ja) * | 2018-04-19 | 2022-01-26 | 富士通株式会社 | プロセッサ及び情報処理装置 |
US11094296B2 (en) | 2018-12-05 | 2021-08-17 | Google Llc | Varying display refresh rate |
US11915065B2 (en) * | 2022-01-20 | 2024-02-27 | Vmware, Inc. | Brokerless reliable totally ordered many-to-many interprocess communication on a single node that uses shared memory and multicast |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0444376A1 (en) * | 1990-02-27 | 1991-09-04 | International Business Machines Corporation | Mechanism for passing messages between several processors coupled through a shared intelligent memory |
CN1834947A (zh) * | 2005-03-17 | 2006-09-20 | 富士通株式会社 | 数据传输装置 |
CN101346692A (zh) * | 2005-12-29 | 2009-01-14 | 英特尔公司 | 多处理器系统中的高性能队列实现 |
Family Cites Families (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2703417B2 (ja) | 1991-04-05 | 1998-01-26 | 富士通株式会社 | 受信バッファ |
EP0614139A3 (en) | 1993-03-04 | 1995-05-03 | Ibm | External procedure call for a distributed processing environment. |
JPH07200506A (ja) | 1994-01-10 | 1995-08-04 | Fujitsu Ltd | メッセージ通信コントローラ |
JP3471913B2 (ja) * | 1994-09-19 | 2003-12-02 | 株式会社東芝 | コンピュータシステム |
JP3327723B2 (ja) * | 1995-03-27 | 2002-09-24 | キヤノン株式会社 | データ受信装置とその制御方法及びそれを用いた印刷装置 |
JP3303045B2 (ja) * | 1995-06-09 | 2002-07-15 | 日本電信電話株式会社 | ネットワーク分散処理システム |
JP2924783B2 (ja) * | 1996-03-30 | 1999-07-26 | 日本電気株式会社 | リモートリード処理方法およびその装置 |
JPH1098524A (ja) | 1996-09-20 | 1998-04-14 | Nippon Telegr & Teleph Corp <Ntt> | 分散型ネットワーク |
US6526491B2 (en) | 2001-03-22 | 2003-02-25 | Sony Corporation Entertainment Inc. | Memory protection system and method for computer architecture for broadband networks |
US20030058875A1 (en) | 2001-09-24 | 2003-03-27 | International Business Machines Corporation | Infiniband work and completion queue management via head only circular buffers |
JP2005234617A (ja) * | 2004-02-17 | 2005-09-02 | Sony Corp | マルチプロセッサデバッガおよびデバッグ方法 |
-
2012
- 2012-03-30 JP JP2012083281A patent/JP5598493B2/ja active Active
- 2012-08-30 US US13/599,114 patent/US9003082B2/en active Active
- 2012-09-21 TW TW101134705A patent/TW201339836A/zh unknown
- 2012-09-24 EP EP12185664.5A patent/EP2645248A1/en not_active Withdrawn
- 2012-09-26 CN CN2012103646416A patent/CN103368848A/zh active Pending
- 2012-09-27 KR KR1020120108256A patent/KR20130111167A/ko not_active Application Discontinuation
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0444376A1 (en) * | 1990-02-27 | 1991-09-04 | International Business Machines Corporation | Mechanism for passing messages between several processors coupled through a shared intelligent memory |
CN1834947A (zh) * | 2005-03-17 | 2006-09-20 | 富士通株式会社 | 数据传输装置 |
CN101346692A (zh) * | 2005-12-29 | 2009-01-14 | 英特尔公司 | 多处理器系统中的高性能队列实现 |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN108694078A (zh) * | 2017-03-31 | 2018-10-23 | 慧与发展有限责任合伙企业 | 基于最近中断请求指示符和工作确认的中断 |
CN108694078B (zh) * | 2017-03-31 | 2022-12-09 | 慧与发展有限责任合伙企业 | 计算资源和用于处理中断的系统和方法 |
CN112118163A (zh) * | 2019-06-19 | 2020-12-22 | 贝克霍夫自动化有限公司 | 在自动化系统中进行能量传输和数据传输的系统和方法 |
CN112118163B (zh) * | 2019-06-19 | 2022-05-31 | 贝克霍夫自动化有限公司 | 在自动化系统中进行能量传输和数据传输的系统和方法 |
CN112395220A (zh) * | 2020-11-18 | 2021-02-23 | 海光信息技术股份有限公司 | 共享存储控制器的处理方法、装置、系统及存储控制器 |
CN112395220B (zh) * | 2020-11-18 | 2023-02-28 | 海光信息技术股份有限公司 | 共享存储控制器的处理方法、装置、系统及存储控制器 |
CN115113931A (zh) * | 2022-07-22 | 2022-09-27 | 瀚博半导体(上海)有限公司 | 数据处理系统、方法、人工智能芯片、电子设备和介质 |
CN115113931B (zh) * | 2022-07-22 | 2023-02-14 | 瀚博半导体(上海)有限公司 | 数据处理系统、方法、人工智能芯片、电子设备和介质 |
CN116107763A (zh) * | 2023-04-12 | 2023-05-12 | 北京燧原智能科技有限公司 | 一种数据发送方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
US9003082B2 (en) | 2015-04-07 |
JP5598493B2 (ja) | 2014-10-01 |
EP2645248A1 (en) | 2013-10-02 |
KR20130111167A (ko) | 2013-10-10 |
TW201339836A (zh) | 2013-10-01 |
US20130262783A1 (en) | 2013-10-03 |
JP2013214168A (ja) | 2013-10-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN103368848A (zh) | 信息处理设备、算术装置和信息传递方法 | |
EP2904500B1 (en) | Memory bus protocol to enable clustering between nodes of distinct physical domain address spaces | |
JP5646750B2 (ja) | 周辺機器のページフォルト(pagefault)を処理する機構 | |
CN100583046C (zh) | 用于单根无状态虚拟功能迁移的系统和方法 | |
EP2610755A2 (en) | Information processing apparatus and unauthorized access prevention method | |
EP0563623A2 (en) | Communicating messages between processors and a coupling facility | |
CN111431757B (zh) | 虚拟网络的流量采集方法及装置 | |
CN110119304B (zh) | 一种中断处理方法、装置及服务器 | |
CN101206622A (zh) | 基于指定的有效功能组合配置端点的系统和方法 | |
CN101206632A (zh) | 用套接字连接和共享存储器在主机系统间通信的系统和方法 | |
CN113454590A (zh) | 定向中断虚拟化 | |
CN113867993B (zh) | 虚拟化的rdma方法、系统、存储介质及电子设备 | |
EP4357901A1 (en) | Data writing method and apparatus, data reading method and apparatus, and device, system and medium | |
CN112698909A (zh) | 用于经由虚拟总线编码传送遥测信息的系统、装置和方法 | |
CN101421791B (zh) | 用于主机和外围设备之间通信的队列深度管理的方法 | |
CN103092676A (zh) | 虚拟机集群的模拟输入输出方法、装置及系统 | |
CN117312229A (zh) | 一种数据传输装置、数据处理设备、系统、方法及介质 | |
JP6663108B2 (ja) | 物理演算処理装置、情報処理装置及び情報処理装置の制御方法 | |
US11093405B1 (en) | Shared mid-level data cache | |
Banikazemi et al. | Comparison and evaluation of design choices for implementing the virtual interface architecture (via) | |
US20140280674A1 (en) | Low-latency packet receive method for networking devices | |
US20230153153A1 (en) | Task processing method and apparatus | |
CN116755902A (zh) | 数据通信方法及装置、处理系统、电子设备、存储介质 | |
EP3286637B1 (en) | Memory register interrupt based signaling and messaging | |
CN114969851A (zh) | 一种基于fpga的数据处理方法、装置、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C02 | Deemed withdrawal of patent application after publication (patent law 2001) | ||
WD01 | Invention patent application deemed withdrawn after publication |
Application publication date: 20131023 |