首页 / 通信处理装置及通信处理方法

通信处理装置及通信处理方法失效专利 发明

技术领域

[0001] 本发明一般性地涉及通信处理装置及通信处理方法,特别地涉及经由中间件连接至网络节点的通信处理装置以及该装置的控制方法。

相关背景技术

[0002] 在近年来的软件系统开发中,将软件划分为组件的方法正在得到推广。更具体地说,将软件划分为彼此依存度很小的组件(部件),并且将这些组件布置在具有各种通信信道的多个信息处理装置(节点)上。这些组件在相互通信的同时进行工作。此外,向组件间通信引入对通信进行集中控制的通信中间件。该通信中间件隐藏不同的通信信道,并集成通信接口。接口的这一集成,提高了系统的可维护性,并且通过组件的再利用提高了生产力。
[0003] 在该集成接口中,使用何种信息作为ID以将组件指定作为通信对方,是系统设计中的重要事项。这是因为,要使用的信息影响组件设计的灵活性以及系统的运行速度。
[0004] 一般而言,作为用于指定通信对方的ID,可以使用抽象度较低的物理ID,或是抽象度较高的逻辑ID。在前一种通信方法(以下称为“使用物理ID的通信方法”)中,通过使用包括如下信息的物理ID(以下简称“物理位置”)来执行通信,所述信息涉及诸如通信对方所在的节点等的物理位置、通信对方所属的处理、以及相关联的队列。后一种方法通过使用诸如组件名称等抽象度较高的逻辑ID,来指定通信对方。在后一种方法中,通信中间件管理组件名称与通信对方的物理信息之间的关系,并且在执行通信时将逻辑ID转换为物理信息(例如,物理ID)。(下文将该方法称为“使用逻辑ID的通信方法”。)[0005] 在“使用物理ID的通信方法”中,因为ID包含指定通信通路的信息,所以能够减少通信处理时间并执行高速通信。另一方面,该方法对于组件设计而言,降低了灵活性。
[0006] 此外,在“使用逻辑ID的通信方法”中,每次执行通信时,均必须执行将逻辑ID转换为物理信息的转换处理。在包括多个节点的系统中,对各个节点上的组件的物理信息进行集中管理。因此,在“使用逻辑ID的通信方法”中,需要大量的时间来从通信源组件访问通信目的地组件的物理信息,也就是说,将逻辑ID转换为物理信息的处理是耗时的。这增加了通信的计算成本。然而,也可以在执行操作时,将各组件布置在多个节点中的任意一者上,这提高了设计的灵活性。
[0007] 可以采用将物理ID和逻辑ID两者并用的方法,以便充分利用两者的优点。也就是说,仅在首次通信期间将逻辑ID转换为物理信息,而从第二次起,即使用所获得的物理信息来执行通信(以下将该方法称为“仅在首次使用逻辑ID的方法”)。该方法既能够实现高的设计灵活度,又能够实现快的通信速度。然而,在系统中,如果组件的物理位置在系统运行中发生改变,则必须通过某些方法,来校正通信目的地的物理信息。
[0008] 日本专利特开2009-009607号公报涉及如下的中间件,该中间件使用表格,来管理数据的物理位置信息与逻辑名称之间的对应关系,从而隐藏物理位置。当物理位置发生改变时,表格自动更新,因此位于访问源的程序不需要知道数据位置的改变。
[0009] 日本专利特开2007-281839号公报提出了如下的方法,即如果发生总线复位,则扫描网络结构以检查是否存在改变,如果存在改变,则更新物理位置信息与逻辑位置信息之间的对应关系表。
[0010] 在包括多个节点的系统中,有时在系统本身运行期间仅重新启动给定节点。如果重新启动了给定节点,则该节点上的组件所属的处理ID之类的信息,有时发生改变。
[0011] 例如,如果给定节点在被停止后重新启动,则布置在该节点上的组件被一度终止然后重新启动。在一般的计算机OS中,按启动顺序来分配处理ID。此外,在包括多个处理的系统中,处理的启动顺序不是严格唯一地确定的。
[0012] 也就是说,如果重新启动了给定结点,则布置在该结点上的组件,并不一定被分配与重新启动之前相同的处理ID。结果,由包含处理ID的物理ID所表示的物理位置,可能与重新启动之前不同。在这种情况下,“仅在首次使用逻辑ID的方法”不能再执行正常通信,因为通信目的地的物理信息发生了改变。为了获取通信对方的正确物理信息,在重新启动了给定节点之后,必须重新执行将逻辑ID转换为物理信息的转换处理。然而,如果在系统中存在大量的组件,则在所有组件中安装节点重新启动检测处理以及再转换处理的做法,使得成本提高并且效率下降。
[0013] 在日本专利特开2009-009607号公报的方法中,包括多个节点的系统必须集中管理各个节点上的组件的信息。如果每次执行操作时均访问用于管理该信息的表格,则可能增加通信负荷。
[0014] 此外,在日本专利特开2007-281839号公报中,每当信息由于总线复位而改变时,均通过扫描所有设备(通信端点)来更新位置信息。这增大了通信量,因为不必要地更新了例如在不重新启动的设备上运行的组件的信息。

具体实施方式

[0032] <第一实施例>
[0033] 图12是示出根据第一实施例的通信处理装置的结构示例的图。参照图12,节点01及02均是根据该实施例的通信处理装置。在图12中,节点01和02能够经由通信通路
12相互通信。下面,将详细说明节点01的结构。节点02具有与节点01相同的结构。因此将省略节点02的详细说明。
[0034] 节点01包括通过系统总线04相互连接的CPU 13、网络控制器03及存储器05。通过CPU 13的存储器保护机制,针对各处理来划分存储器05。在图12中所示的示例中,通信中间件(第一通信单元)以及组件A及B在节点01上运行。因此,在存储器05中,存在通信中间件存储空间06、组件A存储空间07及组件B存储空间08。
[0035] 存储空间06至08各自独立地保持逻辑ID与物理ID之间的转换表。也就是说,转换表09、10及11分别存在于通信中间件存储空间06、组件A存储空间07及组件B存储空间08中。如上所述,节点01经由通信通路12连接至节点02。节点01的通信中间件经由网络控制器03与节点02通信。
[0036] 图1是示出通信组件通过网络相互通信的通信处理系统的概要的图。该通信处理系统包括作为通信处理装置的节点01及02(信息处理装置)。该通信处理系统还包括用于提供通信功能的通信中间件103,以及多个组件A及B。通信中间件103具有使节点之间、组件之间的通信抽象化的功能。正如上面参照图12所说明的,通信中间件在节点01及02中的各个上运行。这些通信中间件通过相互协作,来实现图1中所示的通信中间件103。更具体地说,通信中间件103包括ID管理单元104及节点监视单元105。节点监视单元105监视构成系统的各节点的状态,并对节点当前在运行中还是停止中的状态进行管理。各自作为通信端点的多个软件组件A及B在通信中间件103上运行(参见图4)。组件A在节点01上运行,组件B在节点02上运行。在作为通信组件(第二通信单元)的组件A中,布置了ID转换表108(存储单元)、节点鉴别器109及ID无效化单元110。通信中间件103具有如下的功能,即解释表示通信组件的物理位置的物理ID,以及独立于组件位置的逻辑ID。
[0037] 通信中间件103还可以包括目的地节点鉴别器111。目的地节点鉴别器111与节点鉴别器109协作,并且从作为消息的目的地的物理ID,鉴别目的地组件所属的节点。
[0038] 图2示出了表示第一实施例中的通信组件在网络上的物理位置的物理ID的示例。物理ID 201具有四位的数值。物理ID 201是两个ID的组合,其中一者是用于识别组件所位于的节点的两位节点ID 202,另一者是用于识别组件所位于的处理的两位处理ID 203。
[0039] 图3示出了用于通信的各组件中安装的ID转换表108的具体示例。ID转换表108被保持在各组件中。结果,与例如“使用逻辑ID的通信方法”相比,能够进行高速处理,因为在所述“使用逻辑ID的通信方法”中,每次执行通信时都使用通信中间件提供的转换功能。如图3所示,针对通信对方(通信目的地)组件的标识信息包括条目编号305、逻辑ID306及物理ID 307,并且,物理ID 307包含节点及处理的信息。
[0040] 图3示出了组件A保持的ID转换表108。在ID转换表108中,登记了作为通信对方的三个组件即组件B、C及D的信息。ID转换表108针对登记的各组件,使条目编号305、逻辑ID以及表示物理位置的物理ID 201彼此相关联。更具体地说,条目编号305是能够在ID转换表108中识别目的地的顺序编号,逻辑ID 306通过字符串来表示目的地组件,物理ID 307表示目的地组件的物理信息。在图3中所示的示例中,组件B、C及D的物理ID分别是0101、0201及0202。这些物理ID意味着组件B、C及D分别位于节点01的处理01、节点02的处理01以及节点02的处理02上。如上所述,该ID转换表存储表示组件(处理)的处理ID与预先指定给组件(处理)的逻辑ID之间的对应关系的对应关系信息。
[0041] 首先,将就现有技术的“使用物理ID的通信方法”、“使用逻辑ID的通信方法”以及“仅在首次使用逻辑ID的通信方法”,来说明相应的系统结构以及使用通信中间件的消息发送的操作。下面的说明将阐明与本发明的第一实施例的不同之处。
[0042] 图4及5是用于说明一般的“使用物理ID的通信方法”的图。如图4所示,在包括两个节点01及02的系统中,安装了通信中间件403。多个软件组件A、B、C及D在通信中间件403上运行。组件A位于节点01上,组件A所属的处理ID是01。类似地,组件B、C及D分别属于节点01上的处理02、节点02上的处理01以及节点02上的处理02。代表组件A、B、C及D的物理ID分别是0x0101、0x0102、0x0201及0x0202。
[0043] 下面,将参照图5中所示的流程图,来说明“使用物理ID的通信方法”的操作。在S501中,给定组件接收发送指令,并且开始消息发送处理。在S502中,通信中间件从目的地的物理ID,指定目的地组件的物理ID。在“使用物理ID的通信方法”中,通信组件通过物理ID来指定目的地。物理ID包含如图2所示的目的地组件的物理信息,因此该指定处理的负荷是小的。
[0044] 在S503中,通信中间件通过使用指定的目的地物理ID,来执行实际的消息发送处理。在S504中,依照目的地是否存在,而获得发送结果。如果到目的地的通信是成功的,即如果目的地存在,则通信成功,并且处理进入到S505。如果在S504中,发生诸如目的地不存在等的错误,则通信失败,并且,处理进入到S506。
[0045] 图6及7是用于说明“使用逻辑ID的通信方法”的图。参照图6,在包括两个节点01及02的系统中,安装了通信中间件603。通信中间件603包括ID管理单元604。多个软件组件A、B、C及D在通信中间件603上运行。组件A位于节点01上,组件A所属的处理ID是01。同样,组件B、C及D分别属于节点01上的处理02、节点02上的处理01以及节点02上的处理02。代表组件A、B、C及D的物理ID分别是0x0101、0x0102、0x0201及0x0202。
[0046] 下面,将参照图7中所示的流程图,来说明“使用逻辑ID的通信方法”的操作。在S701中,通信组件接收发送指令,并且开始消息发送处理。在该时刻,通信组件已接收到目的地的逻辑ID。在S702中,通信组件向通信中间件603进行询问。通信中间件603的ID管理单元604将逻辑ID转换为物理ID。在“使用逻辑ID的通信方法”中,通信组件通过逻辑ID来指定目的地。作为该逻辑ID,通信组件指定例如代表组件名称的字符串。此外,通信中间件的ID管理单元604必须对多个节点中的各个上的组件的信息,来进行动态和统一的管理。
[0047] 在S703中,已接收到询问的通信中间件中的ID管理单元604,确定系统中是否存在具有指定逻辑ID的组件。如果系统中不存在相应的组件,则在S704中,将表示目的地不存在的错误,发送给发送源组件。
[0048] 如果系统中存在相应的组件,则执行将逻辑ID转换为物理ID的处理。之后的过程与参照图5所述的“使用物理ID的通信方法”相同。也就是说,在S705中,ID管理单元604根据物理ID指定目的地组件。
[0049] 在S706中,ID管理单元604针对指定的目的地组件,来执行实际的发送处理。在S707中,ID管理单元604确定通信是否成功。如果最终找到目的地,则通信成功,并且处理进入到S708;如果没有,则认为存在错误,从而处理进入到S709。
[0050] 图8是用于说明现有技术“仅在首次使用逻辑ID的通信方法”的图。该现有技术的系统结构与图6中所示的“使用逻辑ID的通信方法”相同。在S801中,通信组件开始消息发送处理。在S802中,通信组件确定这是否是向相应目的地的首次发送。
[0051] 如果通信组件确定这是首次发送,则处理进入到S803。在S803中,通信组件向通信中间件603进行询问,并且,ID管理单元604将逻辑ID转换为物理ID。在“仅在首次使用逻辑ID的通信方法”中,首次通信中通过逻辑ID来指定目的地。
[0052] 在S804中,正如在“使用逻辑ID的通信方法”中一样,通信中间件603中的ID管理单元604确定系统中是否存在具有指定逻辑ID的组件。该步骤与S703中的过程相同。如果系统中不存在相应的组件,则在S805中,ID管理单元604返回表示目的地不存在的错误。该步骤与S704相同。
[0053] 如果系统中存在相应的组件,并且ID管理单元604将逻辑ID成功转换为物理ID,则处理进入到S806,并且,ID管理单元604将转换后的物理ID存储在组件的内部存储器(即组件所属的处理的存储空间,未示出)中。由于存储了物理ID,因此从第二次发送起,没有必要再执行需要高成本的S803。
[0054] 在存储了物理ID之后,或者如果通信组件在S802中确定这是第二次或之后的通信,则ID管理单元604通过使用物理ID来执行通信。之后的过程与图7中所示的“使用逻辑ID的通信方法”相同。也就是说,从S807到S811的步骤分别对应于图7中的从S705到S709的步骤,因此将省略重复的说明。
[0055] 下面,将说明本发明的实施例。图9是示出该实施例中发送消息的组件的操作的流程图。图10是示出该实施例中当节点停止被检测到时通信中间件的操作的流程图。该实施例的系统结构与参照图1所述的相同。
[0056] 在S901中,通信组件开始消息发送处理。在S902中,通信组件参照组件中的ID转换表108,并且确定表格中是否存在与发送目的地相对应的条目。在该实施例中,正如图3中的ID转换表108的结构所示,目的地既可以通过逻辑ID来指定,又可以通过ID转换表中的条目编号来指定。
[0057] 如果在ID转换表108中找到了条目,则处理进入到S903,并且,组件确定该条目是否被无效化了。(下文中将参照图10来描述对ID转换表108中的条目进行无效化的处理。)
[0058] 如果条目已经被无效化了,则处理进入到S904,并且,组件获取来自ID转换表108的条目中包含的逻辑ID。此外,在S905中,通信组件向通信中间件103进行询问。ID管理单元104执行将逻辑ID转换为物理ID的处理。该处理与“使用逻辑ID的通信方法”中的S702相同,并且,发生向通信中间件103的询问。
[0059] 如果在S902中,不存在与发送目的地相对应的条目,则通信组件通过使用被指定作为目的地的逻辑ID,来类似地向通信中间件103进行询问(询问单元)。在S905中,ID管理单元104将逻辑ID转换为物理ID。ID管理单元104具有集中ID表,在该集中ID表中,集中登记了网络上的所有组件的物理ID。ID管理单元104通过参照该集中ID表,将被指定作为目的地的逻辑ID转换为相应的物理ID。也就是说,在集中ID表中,存储了表示各组件(处理)的处理ID与逻辑ID之间的对应关系的对应关系信息。
[0060] 然后,在S906中,通信中间件103通过使用通信中间件103中的ID管理单元104,来确定系统中是否存在具有指定逻辑ID的组件,正如在“使用逻辑ID的通信方法”的S703中一样。如果相应的组件未被登记而不存在,则处理进入到S907,并且,通信中间件向通信组件返回表示目的地不存在的错误。该处理与S704相同。
[0061] 如果在S906中,ID管理单元104将逻辑ID成功地转换为物理ID,则处理进入到S908,并且,通信组件将作为转换的结果而获得的物理ID与逻辑ID的组合,追加登记在ID转换表108中(登记单元)。更具体地说,如果在S902中,不存在发送目的地条目,则组件生成新条目,并将其追加登记在ID转换表108中。或者,如果在S903中确定条目被无效化了,则通信组件通过将在S905中重新获取到的物理ID用作正确的物理ID,来对该条目进行更新。
[0062] 如果在S903中确定作为发送目的地的条目未被无效化,而是有效的,则在S909中,通信组件从条目中获取物理ID。该处理是例如从如下的ID转换表108中提取ID的处理,所述ID转换表108与图3中所示的ID转换表108相对应,并且保持在发送源组件中。因此,不会发生如同在S905中一样向通信中间件进行询问的处理。
[0063] 如果在S909中获取到物理ID,或者如果在S908中完成向ID转换表108的追加登记,则通信组件通过使用获得的物理ID,来执行通信。之后的过程与图7中所示的“使用逻辑ID的通信方法”相同。也就是说,步骤S910至S914对应于图7中所示的步骤S705至S709,因此将省略重复的说明。如上所述,在图9中所示的步骤S902至S906及S908中,转换表108被重新构造。
[0064] 下面,将参照图10,来说明可能由于节点的部分重新启动而发生的、对ID转换表108中的条目进行无效化的处理。在S1001中,通信中间件103监视构成系统的所有节点的运行状态。在S1002中,通信中间件103检测是否存在停止的节点。如果检测出停止的节点,则在S1003中,通信中间件103将停止的节点的信息通知给所有组件。在该步骤中,通信中间件103中的节点监视单元105实际检测节点的停止,并且执行通知。接收到通知的所有组件执行以下处理。
[0065] 在S1004中被通知了停止的各组件在S1005中,首先扫描保持在组件中的ID转换表108。更具体地说,组件对表格中包含的所有条目执行以下的处理(S1006)。在S1007中,组件从条目中保持的物理ID获取节点编号。节点鉴别器109识别与物理ID相对应的节点。该识别由节点鉴别器109来执行,并且对应于提取物理ID的前两位的处理,正如前面参照图2所述的。
[0066] 随后,在S1008中,接收到通知的组件将在S1007中提取出的节点,与在S1002中通知的停止的节点进行比较,并且确定两个节点是否匹配。如果两个节点匹配,则处理进入到S1009。在S1009中,组件确定该条目与停止的节点相关,并且,ID无效化单元110对该条目进行无效化。更具体地说,可以向该条目添加标志,或者用无效的值来更新物理ID。在S903中,无效化的条目用于在发送消息时,来确定ID是否无效。以上处理针对所有条目来执行,并且在S1010中终止。
[0067] 下面,将参照图13,来说明在节点重新启动前后组件及通信中间件的操作。参照图13,节点01包括组件1301及1302,以及通信中间件1303。节点02包括通信中间件1304及组件1305。
[0068] 首先,将说明在节点02被重新启动之前由组件1301执行的通信。假设期望令组件1301与逻辑ID已知的组件1305通信。同时,假设在组件1301的ID转换表中,未登记组件1305的物理ID。
[0069] 在S 1306中,组件1301向与组件1301位于相同的节点上的通信中间件1303,询问组件1305的物理ID。更具体地说,组件1301将作为通信目标的组件1305的逻辑ID,发送给通信中间件1303,并且请求发送组件1305的物理ID。在获取组件1305的物理ID之后,在S1307中,组件1301将数据发送给组件1305(执行单元)。此外,如前所述,组件1301将包含组件1305的逻辑ID及物理ID的信息,登记在ID转换表中。
[0070] 假设节点02已停止。在S1308中,节点01的通信中间件1303检测到节点02的停止。可以通过各种方法来检测节点02的停止。例如,节点01的网络控制器能够检测通信通路的中断。或者,如果通信中间件1303与通信中间件1304之间的周期性通信发生中断,则通信中间件可以确定通信通路已断开。
[0071] 在S1309中,中间件1303向位于节点01上的组件1301及1302,通知节点02的停止。正如前面参照图10所述的,接收到该通知的组件1301及1302各自检查其自身的ID转换表,并且对位于节点02上的组件1305的条目进行无效化。
[0072] 假设节点02被重新启动。在S1310中,重新启动的节点02的通信中间件1304向其他节点通知节点02的重新启动。更具体地说,通信中间件1304向通信中间件1303通知节点02的重新启动。
[0073] 假设位于节点02上的组件1305随后也被重新启动。在这种情况下,节点02的控制器(例如,操作系统(未示出))向组件1305分配处理ID。在该实施例中,物理ID包括节点ID及处理ID,并且,节点ID通常是固定。因此,当处理ID被分配时,组件1305即知道了其物理ID。然而,节点02的控制器也可以直接将物理ID通知给组件1305。
[0074] 在S 1311中,组件1305将组件1305的物理ID,通知给组件1305所位于的节点02的通信中间件1304。通信中间件1304将组件1305的物理ID和逻辑ID,以相互关联的方式存储在通信中间件1304的ID转换表中。
[0075] 在S1312中,节点01的通信中间件1303和节点02的通信中间件1304同步它们的ID转换表。在图13中所示的示例中,在S1312中,组件1305的物理ID和逻辑ID以相互关联的方式,被存储在由节点01的通信中间件1303保持的ID转换表中。也可以每隔预定时间,执行一次1D转换表的该同步,或者,可以作为对关于新启动的组件的信息被添加至给定节点上的通信中间件的响应,来执行ID转换表的该同步。
[0076] 假设期望令组件1301在该状态下与组件1305通信。如上所述,在S1309中,从组件1301的ID转换表中,删除组件1305的信息。因此,在S1313中,组件1305向通信中间件1303进行询问,正如在S1306一样。
[0077] 最后,在S1314中,组件1301将数据发送给组件1305,正如在S1307中一样。因此,在S1313中,组件1301向通信中间件1303询问组件1305的物理ID。因此,尽管因为节点02被重新启动,组件1305的物理ID可能已随之发生改变,但是数据仍会被正确地发送给组件1305。
[0078] 在本实施例中,在从S910中目的地组件的物理位置被指定的定时、到S911中发送被实际执行的定时期间,通信组件能够确定目的地组件所属的节点的运行状态。如果节点已被停止,则可以禁止该发送。通过该确定,能够防止在针对停止的节点执行发送处理的情况下,发生发送错误或发送超时。
[0079] 下面,将参照图11来说明该添加处理。在S1101中,从目的地组件的物理ID,来指定目的地的物理信息(这相当于S910中的处理)。在S1102中,确定目的地组件所属的节点是否已被停止。由于在S1101中指定了目的地组件的物理信息,因此,能够唯一地确定作为确定目标的节点。
[0080] 如果确定相应的节点在运行中,则在S1103中执行实际的发送(这相当于S911中的处理)。如果相应的节点未在运行中,则在S1104中,通过生成错误来禁止实际的发送。当然,如果是在节点未在运行中的情况下,也可以对图10中所示的条目进行无效化。
[0081] 通过如上所述的控制,能够使用逻辑ID来实现灵活的组件设计,并且使用物理ID来实现高速的通信。还能够应对当构成系统的给定节点被停止和重新启动时物理ID的改变。此外,该实施例的结构能够抑制组件安装的复杂化。
[0082] <其他实施例>
[0083] 以上通过假设各组件位于节点的处理中,对上述实施例进行了说明。也就是说,与节点的组件的通信意思是指与节点的处理的通信。此外,在上述实施例中,逻辑ID是表现目的地组件的字符串。然而,逻辑ID不局限于字符串,并且还可以是数值等。各组件可以被预先分配唯一的逻辑ID。例如,可以将不同的逻辑ID,分配给在能够与节点01通信的节点上运行的各组件。
[0084] 在上述实施例中,中间件具有ID转换表,并且将其与另一节点的中间件的ID转换表同步。然而,中间件不需要具有任何的ID转换表。例如,管理节点(未示出)能够将各组件的逻辑ID与物理ID相互关联地进行存储。在这种情况下,当组件向中间件来询问与逻辑ID相对应的物理ID时,中间件可以通过向该管理节点进行询问,来获取物理ID。
[0085] 在图12中所示的示例中,通过利用诸如个人计算机等的节点执行程序,来实现通信中间件及组件。然而,对于本领域的专业技术人员而言,显然也可以通过专用硬件,来构造根据本发明的通信处理装置。也就是说,也可以通过作为通信中间件工作的电路,以及作为通信处理装置中的组件工作的电路,来构造根据本发明的通信处理装置。
[0086] 还可以由读出并执行记录在存储设备上的程序来执行上述实施例的功能的系统或装置的计算机(或诸如CPU或MPU等的设备),来实现本发明的各方面;并且可以利用由通过例如读出并执行记录在存储设备上的程序来执行上述实施例的功能的系统或装置的计算机来执行各步骤的方法,来实现本发明的各方面。为此,例如经由网络或从充当存储设备的各种类型的记录介质(例如,计算机可读介质)将程序提供给计算机。
[0087] 虽然参照示例性实施例对本发明进行了描述,但是应当理解,本发明并不局限于所公开的示例性实施例。应当对所附权利要求的范围给予最宽的解释,以使其涵盖所有的这类变型例及等同结构和功能。

当前第1页 第1页 第2页 第3页