CN1042979C - 执行具有多个可调用过程的单线程计算机程序的方法 - Google Patents
执行具有多个可调用过程的单线程计算机程序的方法 Download PDFInfo
- Publication number
- CN1042979C CN1042979C CN92101822A CN92101822A CN1042979C CN 1042979 C CN1042979 C CN 1042979C CN 92101822 A CN92101822 A CN 92101822A CN 92101822 A CN92101822 A CN 92101822A CN 1042979 C CN1042979 C CN 1042979C
- Authority
- CN
- China
- Prior art keywords
- processor
- program
- agent
- call
- calling
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- 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
-
- 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/547—Remote procedure calls [RPC]; Web services
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Multi Processors (AREA)
- Executing Machine-Instructions (AREA)
- Stored Programmes (AREA)
Abstract
一个多处理器计算机系统执行一个在其程序模块里具有多个可调用过程的单线程序。每个处理器的局部存贮器包含一个程序栈、在该处理器上执行的每个模块的目标代码、以及一个包含链接信息的代理目标和数据结构。另外,此局部存贮器还包括在另一处理器上可执行的每个过程的C-备忘模块,以及可被在另一处理器上执行的过程调用的此局部存贮器内每个过程的S-备忘模块。
Description
本发明涉及数据处理软件的用法。更具体地,它涉及在多个处理器上有效地执行单线程计算机程序的方法。
一个现代计算机系统一般包括单个中央处理单元(CPU),和其它支持硬件,如系统存储器,通讯总线,输入/输出控制器,存储设备等。CPU是系统的心脏。它执行包括计算机程序的指令并指导其它系统部件工作。
在计算机发展初期,CPU是系统中最贵的部分。因此,人们围绕着CPU建造系统以优化其用法。能同时为多个用户服务执行各种任务的多任务系统就是这么产生的。多任务系统允许多个用户和任务共享CPU,虽然这种系统能够同时为多个用户服务执行各种任务,但是,在任何瞬间,CPU中正执行的任务只有一个。如果一特定任务需要CPU而CPU正忙,此任务必须等待。因此,多任务系统提高了CPU的使用效率,同时这也意味着CPU是整个系统运行的瓶颈。
随着集成电路的出现,处理器的成本相对其它系统部件下降了。因此,计算机设计为具有多个处理器。例如,数年来,在从属处理器如磁盘驱动控制器处理器,工作站控制器处理器等上执行特定的低级外围功能已成为标准。当这种外围处理器的相对成本下降了时,系统设计者扩充了它们的用途,减轻了CPU的工作负担。
最近几年,各种便宜的处理器导致并行和分布式处理系统,包括多处理器执行原来由单个CPU所执行的功能的发展。这种多处理器系统中的处理器具有独立的地址空间,可拥有自己的存储器和内部数据总线以及I/O。这些处理器可通过共享的总线和共享的存储器相连,或更松散地,经通讯网络或其它I/O控制器相连。
这种多处理器的一个特殊情况是采用了一个通用主处理器和一个面向数字的协处理器。这种面向数字的协处理器体系结构是为执行需大量计算(一般为浮点运算)的应用程序而优化的,而主处理器是为处理数据转移、比较、I/O等典型的混合指令而优化的。
这种多处理系统有一个问题:为在一个计算机系统上执行而设计的大多数程序本质上是单线程的。这时所用的“单线程”意指程序只包含单个控制流,从而在任意瞬间,都在执行单指令序列。这种序列可以循环或跳到编码中的另一点,但永远是单路径的。这种单线程程序和多线程控制不同。在多线程控制中,程序流可像岔口处的道路一样分开,同时在两条路径上继续进行。一个单线程程序不太适合在多处理器上执行。
当单线程程序在一个包含不同类型处理器的多处理器系统中执行时,必须把此程序的各个部分分配到不同的处理器上执行。一种方法是重写单线程代码以支持不同的控制流,实现多处理器优化,某些计算机语言支持这种多道处理,尽管只有小部分现有计算机程序是用这些语言写的。例如SIMULA语言支持使用联立程序,可执行联立的多线程程序。但是,这种方法不是永远可行;即使可行,重写现有编码也太贵。
另一种向多处理器分配程序各部分的方法是客户-服务器模型,它被广泛地用于分布式处理系统。每个程序部分在某个处理器(客户)上执行。当它需要具有与客户处理器不同能力的另一处理器(服务器)时,它发布一个请服务器为其服务的请求,服务器在工作结束时把控制连同工作结果一起(如果需要)返回客户。客户-服务器模型使不同的处理器在执行程序时相互合作,但合作程序有限。客户必须在执行开始以前,通常是在知道需要何种信息以前,向服务器提供所有需要的信息。现有客户-服务器模型本质上是单向的;服务器没有能力发布一个调用客户的命令。
在一个多处理器系统中向不同处理器分配程序的不同部分时对编码的改变最好不要很大。具体地,在具有通用主处理器和面向数字的协处理器的系统情形里,最好在协处理器上执行面向数字的过程,并在主处理器上执行其它过程。不辛的是,现有技术机制限制了系统以一种优化方式分配过程的能力。
因此本发明的一个目的是提供一种在多处理器计算机系统上执行程序的改进方法和装置。
本发明的另一目的是提供向多处理器计算机系统中的不同处理器分配程序各部分的改进方法和装置。
本发明的另一目的是增加向多处理器计算机系统中的不同处理器分配程序各部分的灵活性。
本发明的另一目的是增加在多处理器计算机系统上执行过程的效率。
本发明的另一目的是减少单线程程序所需改变量使其在一个多处理器计算机系统上有效地运行。
本发明的另一目的是减少在多处理器计算机系统上执行程序的成本。
本发明的另一目的是提供在具有通用处理器和面向数字的协处理器计算机系统上执行程序的改进方法和装置。
一个包括多个程序模块的计算机程序(每个模块具有一个或多个可调用过程)在一个多处理器系统上执行。每个程序模块在此系统的一个处理器上执行。而任一处理器都可以执行多个模块。每个处理器局部可导址存储器包含程序栈、在此处理器上执行的每个模块的目标代码、以及含有用来处理与其它处理器通讯的链接信息的代理目标程序(agent object)和数据结构。另外,局部存储器还包括可在另一处理器(能被局部处理器中某个过程调用)上执行的每个过程的C-备忘模块(c-stub module),以及局部存储器中可被一个在另一处理上执行的过程调用的每个过程的S-备忘模块。一个处理器的程序模块,备忘模块栈和代理程序的集合称为一个分区。
当在处理器A上执行的过程P1希望调用在处理器B中执行的过程P2时,它向对应于处理器A的局部可寻址存储器中P2的C-备忘程序发布一个局部调用命令。P2的C-备忘程序调用处理器A中的代理处理程序,此代理处理程序与处理器B中对应的代理处理程序通讯,处理器B中的代理处理程序使得对应于过程P2的处理器B中的S-备忘程序发出一个调用过程P2的局部调用命令。从一个过程返回按同一路线反过来即可。每个处理器独立地维护其自身的程序栈,其栈入口参照局部可执行过程,局部备忘程序或局部代理程序随着每次局部调用或返回,所述处理器的程序栈被适当地修改。我们称这种机制为“分布式栈”。
因为每个处理器参照局部过程,备忘程序和代理程序独立地维护其自身的栈,所以远程过程调用不像在典型的现有技术客户-服务器模型(单向的)的情形中那样,会受到一个处理程序过去调用历程的限制。处理器A中过程P1可以调用处理器B中的过程P2,处理器B中的过程P2又可调用处理器A中的过程P3。另一方面,过程P2可递归调用处理器A中的过程P1。
根据本发明,为在单处理器系统上执行而编写的常规单线程程序可转到在多处理器系统上操作,几乎或完全不需修改源代码。对每个程序模块都要作出应在系统的哪个处理器执行的决定。这个决定与对其它模块作出的决定无关。如果需要,备忘程序将自动生成。所有过程调用都局限于调用过程,因而对源程序不需作任何修改,而将事实上的局部过程调用与远程过程调用区别开来。如果需要,装载处理程序将自动启动远程处理器的分区,并返回必要的链接信息以建立不同处理器间的通讯。
在最佳实施例中,多处理器系统包含了一个连到IBM RISCSystem/6000系统处理器上的IBM ApplIcatIon System/400系统处理器。前面的处理器是为通用商务处理而设计的;后面的处理器是精减指令集(RISC)处理器,是为科学/工程应用而设计的。RISC处理器作为包含大量数字操作,特别是基本上为浮点操作的过程的加速器。在本最佳实施例中,支持通用商务的过程在通用处理器上执行;而包含大量数字操作的过程在RISC处理器上执行。
图1图示了根据本发明的最佳实施例执行单线程程序的多处理器的主要硬部件;
图2图示了一个常规程序是如何在单处理器计算机体系结构中执行一系列嵌套过程调用的;
图3图示了图2的常规程序是如何在根据最佳实施例的多处理器系统上执行的;
图4图示了根据最佳实施例的分区中参加一个远程过程调用的不同成分;
图5图示了根据最佳实施例的分布式栈;
图6图示了根据最佳实施例的一个代理状况栈的结构;
图7图示了根据最佳实施例的代理程序之间信息的结构;
图8图示了单个远程过程调用和返回的步骤中的控制转移;
图9是根据最佳实施例的单个远程过程调用和返回步骤中由C-备忘程序和S-备忘程序所执行步骤的流程图;
图10是根据最佳实施例的代理程序所执行步骤的流程图;
图11图示了根据最佳实施例,为远程过程调用保存路径信息的表格结构;
图12图示了根据最佳实施例的装载/启动程序机制。
图1图示了根据本发明最佳实施例的多处理器系统的主要硬部件示意图。多处理器系统100包含一个通用商务事务系统101,它连在专用数字加速器系统121上。通用系统101由常规复杂指令集(CISC)CPU102驱动。CPU102经存储器总线104与局部存储器103和处理器接口单元105通讯。处理器接口单元105处理存储器总线104和系统总线106之间的通讯。系统总线/I/O通道适配器107接到系统总线106上。附加总线接口设备108,109可接到系统总线106上,允许I/O设备(未示出)经I/O总线110,111与系统总线106通讯。数字加速器系统121由精减指令集(RISC)的CPU122驱动,这种CPU是为如科学/工程应用等需要大量数字计算的应用而设计的。RISC CPU122经存储器总线124与局部存储器123通讯。CPU122也连到系统总线125上,使它它能经总线接口126与I/O通道适配器127通讯。I/O通道128连在I/O通道适配器127和系统总线/I/O通道适配器107之间,因而连在通用系统101和数字加速器系统121之间。I/O通道128还能把许多I/O设备(未示出)经I/O设备适配器129,130连到系统121上。尽管在图中系统101只接有两条I/O总线110,111以及两个总线接口设备108,109;系统121只接有两个I/O设备适配器129,130,但是应当理解,接到系统上的这种设备的实际数字可多可少。
局部存储器103在CPU102的地址空间里;局部存储器123在CPU122的地址空间里。尽管在图中这些存储器是单个部件,但是应当理解,每个处理器的局部存储器实际上可以是分组存储器系统,如小型的相对快的高速缓冲存储器和慢而大型的主存储器。还应当理解,每个系统一般包括一个或多个如磁盘驱动器的局部大容量存储设备,并具有把数据从这种大容量存储设备装进局部存储器(如果需要)的机制。这种存储设备的使用同行皆知。对本发明来说,局部存储器可概念性地视为在相应处理器的地址空间中的单个部件。
在最佳实施例中,系统101是IBM ApplicatIon System/400系统,而系统121是IBM RISC System/6000系统。I/O通道128是IBM Micro-Charmel总线。系统121主要作为从属系统以改进主系统101的性能。在最佳实施例中,系统101和系统121物理地装在同一个单元里,接收来自公用电源的电能。把系统装在一起使得系统间的数据可高速传送。但是,应当理解,本发明可以用于其它结构的其它计算机系统,并且系统不一定要一起装在同一物理单元里。
一个常规单线程计算机程序包括多个可以嵌套或递归形式相调用的过程。图2图示了在常规单处理器计算机体系结构中这种程序的一系列嵌套过程的调用。在图2的例子中,过程A210向过程B202发布一个把控制转给过程B的调用命令211。过程B202然后向过程C203(在返回过程A之前)发布一个把控制转给过程C的调用命令212。过程C203向过程D204(在返回过程B之前)发布一个调用命令213。过程D在D执行完毕时把控制214返回给过程C。后来过程C在C执行完毕时把控制215返回给过程B,过程B在B执行完毕时把控制216返回给A。在这种常规系统中,过程调用一个先前已调用的过程是可能的,这种调用称为递归。例如,过程C可以调用过程B而不是过程D,或者可以调用它自身。在一个常规单处理器体系结构中,一种称为栈的数据结构保存一个过程返回到调用它的过程时在正确的位置恢复程序的执行时所必需的状态信息。一个栈包含一个或多个过程启动单元。每个单元含有某个过程的状态信息,如下一个要被执行的指令,局部变量状态等。当调用一个过程时,栈中新加一个启动单元,并且存入被调用过程的状态信息。当一个过程返回时,从此启动单元读出状态信息并取消栈中顶层启动单元。
根据本发明,组成程序的过程分在几个分区内,每个独立处理器有一个分区。一个程序的外层过程在其中执行的分区(即程序开始在其中执行的分区)被称为主分区,所有其它分区被称为次分区。图3概念性地图示了图2的程序如何在具有两个分区的计算机系统100上执行的。在这个例子中,分区1301是主分区分区Ⅱ302是次分区。过程A303和过程C305已被分到分区Ⅰ,而过程B304和过程D306已被分到分区Ⅱ。当过程A向过程B发布调用命令311时,调用经过分区界线,因而被称为“远程过程调用”,过程B然后向过程C发布远程过程调用命令312,而过程C又向过程D发布远程过程调用命令313。过程D在D执行完毕时把控制314返回到过程C,C返回315到B,B返回316到A。和单处理器系统的情形一样,经分区界线递归调用过程是可能的。例如,过程C可以调用过程B而不是过程D。
可根据各种性能或其它考虑把过程分到各个分区。在图3的例子中。过程B和D可能是面向数字的过程,这种过程被分配到包含一个RISC处理器的分区里以运用此处理器的能力进行复杂的计算。过程A和C可能是具有大量I/O或其它一般混合指令的过程。但是在分配过程时也可能有其它考虑。例如,在另一实施例中,一个分布式处理系统可包含多个相同的处理器,在各自的局部存储器中有不同的数据库。在这种情形里,可根据其存取的数据库把过程分到处处理器。
发布远程过程调用的过程起客户作用。被调用的过程起服务器作用。单个过程相对某些调用的客户,相对另外的调用是服务器。在图3的例子中,过程A在发布远程过程调用311时是客户,过程B相对此调用是服务器。但是,过程B在发布远程过程调用312时是客户,而过程C是服务器。
图4图示了一个分区的不同单元以及在最佳实施例的远程过程调用中它们是如何相互作用的。每个分区包含一个或多个过程代码单元402。412,一个或多个C-备忘程序403,413,一个或多个S-备忘程序404,414,以及一个代理程序405,415。过程代码单元402,412包含运行此过程的机器可执行指令。每个过程代码单元可以是一个独立的编译模块,或者在分区的单个模块里编译多个单元。一个编译模块永远包含在单个分区内,不管它具有一个还是多个过程。
参见图4,如果分区401内的过程X402发布一个调用分区411内的过程Y412的命令,分区401内过程Y的C-备忘程序403收到此调用命令。C-备忘程序403调用它的局部代理程序405,请求它启动远程服务器。代理程序405发布一个经分区界线调用代理程序415的命令。代理程序415然后调用过程Y的S-备忘程序414,S-备忘程序则向过程Y发布一个好像来自另一局部过程(从过程Y的角度来看)的局部调用命令。过程Y可经过C-备忘程序413,代理程序415,代理程序405和S-备忘程序404调用过程X。
备忘程序使得远程调用对调用过程来说好像是局部的。因此发布调用命令的过程不必知道被调用的过程是否在同一分区。它只须简单地发布一个标准的局部调用命令不用考虑其它因素。一个C-备忘程序接收来自同一分区内客户过程的局部过程调用与另一分区内代表服务器的C-备忘程序一样。一个S-备忘程序向同一分区内服务器过程发布的局部过程调用与另一分区内代表客户过程的S-备忘程序一样。对每个作为服务器的过程来说,在服务器所在分区内有一个独立的S-备忘程序;在每个其它分区内有一个独立的C-备忘程序。只有作为服务器的过程才需要备忘程序。
每个分区有一个代理程序,它处理与其它分区的连接。更精确地,代理程序负责经分区界线转移程序控制。不同分区的代理程序经一种通讯媒介相互通讯。在最佳实施例中,这种通讯媒介是系统101和系统121之间经I/O通道128的路径。在一给定的分区内,同一代理程序既处理发出的远程过程调用,又处理传来的远程过程调用。因此,代理程序是单线程控制离开和返回到这个局部分区的接点。每个代理程序具有有关局部调度哪个服务器以响应传来的远程调用命令的信息,以及有关怎样向其它分区的服务器发出远程调用命令的信息。
每个分区包含一个独立的局部栈,它具有此分区内过程,备忘程序和代理程序的启动单元。总的说来,分区内的独立局部栈包含所有维护程序流所需的程序状态信息。发明者称这种结构为“分布式栈”。
图5图示了这种分布式栈的例子以说明力不远程过程调用如何使用这种分布式栈。在此例中,分布式栈500包含两个局部栈501,531,分别位于图3的分区Ⅰ301和Ⅰ分区Ⅱ302内。因为分区Ⅰ是主分区,首先进入栈501底的是过程A的启动单元。当过程A执行时,且在它发布调用命令以前,栈501中只有这一个启动单元。栈531可能包含也可能不包含分区Ⅱ内代理程序Ⅱ的启动单元532,这取决于分区Ⅱ是否被启动(以后再讨论)。当过程A向过程B发布远程过程调用命令311时,它实际上向分区Ⅰ内过程B的C-备忘程序发布局部调用命令511。使得C-备忘程序启动单元503进入栈501。过程B的C-备忘程序然后调用512分区Ⅰ的代理程序(代理程序Ⅰ),使得代理程序Ⅰ的启动记录504进入栈501。代理程序Ⅰ然后与代理程序Ⅱ通讯(513)。如果分区Ⅱ还未启动,则装载/启动实用程序被启动以启动分区Ⅱ(以后详述)。装载/启动实用程序初始化栈531并在此栈的底部放入代理程序Ⅱ的启动单元。代理程序Ⅱ然后调用(541)过程B的S-备忘程序,使得S-备忘程序的启动单元533进入栈531。过程B的S-备忘程序调用(542)过程B,使得过程B的启动单元534放入栈531。因此,在图3中示为单个概念性远程调用的远程过程调用311事实上包含一系列局部调用511,512,541和542,以及代理程序之间的远程调用513。当过程B正在执行时,且在它调用其它过程以前,栈501包含过程A502,B的S-备忘程序503和代理程序Ⅰ504的启动单元,而栈531包含代理程序532,B的S-备忘程序533和过程B534的启动单元。
分布式栈500对图3中所剩远程过程调用按同样方式增长。过程B为了向过程C发布远程过程调用命令312,过程B调用分区Ⅱ内C的C-备忘程序,在栈531上加入启动单元535;C的C-备忘程序调用(544)代理程序Ⅱ,在栈531上加进启动单元536;代理程序Ⅱ与代理程序Ⅰ通讯(545);代理程序Ⅰ调用(514)分区Ⅰ内C的S-备忘程序,在栈501上加入启动单元505;且C的S-备忘程序调用(515)过程C,在栈501上加入启动单元506。当过程C向过程D发布远程过程调用命令313时,过程C调用(516)分区Ⅰ内D的C-备忘程序在栈501上加入启动单元507;D的S-备忘程序调用(517)代理程序Ⅰ,在栈501上加入启动单元508;代理程序Ⅰ调用(518)代理程序(Ⅱ);代理程序Ⅱ调用(546)分区Ⅱ内D的S-备忘程序在栈531上加入启动单元537;D的S-备忘程序调用(547)过程D,在栈531上加入启动单元538。在过程D执行时,分布式栈500包含了所有图5所示的启动单元。
从各过程返回,按同一序列返过来即可。当过程D执行完毕时,它是这样返回到过程C的(图3中示为单个返回314):返回(548)到D的S-备忘程序,从栈531上除掉D的启动单元538;D的S-备忘程序返回(549)到代理程序Ⅱ且从栈531上除掉启动单元537;代理程序Ⅱ与代理程序Ⅰ通讯(550);代理程序Ⅰ返回(519)到D的C-备忘程序且从栈501上除掉启动单元508;D的C-备忘程序返回(520)到过程C,从栈501上除掉单元507。注意在返回经过分区界线时,代理程序Ⅱ的启动单元536并未从栈中除掉,因为程序Ⅱ在控制重新经过分区界线时还要作为入口点。过程C通过顺序返回到C的S-备忘程序521、代理程序Ⅰ522、代理程序Ⅱ523、C的C-备忘程序551和过程B552,返回到过程B,其间启动单元506,505,536和535从它们各自的栈中被除去。过程B通过循序返回到B的S-备忘程序553、代理程序Ⅱ554、代理程序Ⅰ555、B的C-备忘程序524和过程A525,返回到过程A,其间启动单元534,533,504和503从它们各自的栈中被除去。
每个代理程序保持着一个内部代理状况栈。图6图示了代理状况栈的结构。代理状况栈601记录了代理状况,使得在调用或返回导致控制转移到代理程序时,代理程序能在合适的位置恢复执行。栈601包含一个或多个代理状况记录602,每个记录包含一个状态域611,特征域612,模块识别符613,过程识别符614和分区识别符615。状态域包含此代理程序的当前状态,如AGT-IN-SERVICE,AGT-CALL,AGT-RETURN等。特征域612是一位表示各种运行时间条件的向量。模块识别符613,过程识别符614和分区识别符615分别包含被此代理程序调用的过程模块、过程和分区标识数,不管这个调用是为了远程过程的局部调用还是为了局部过程的远程调用。在调用一个远程服务器(为了局部客户)时,当前的状况被下推进栈601并被修改以反应代理程序的新状态。当远程调用返回时,旧的状况被从栈的顶层复原(弹出)掉。在收到一个远程请求(为了局部服务器)时,当前的状况在局部服务启动以前被下推进栈601,并在服务完成时被从栈的顶层复原(弹出)掉。
图7图示了分区间信息的格式。动词域701包含信息所请求的动作,可以是AGT-CALLK,AGT-RELLY,AGT-RETURN,AGT-ERROR,AGT-DEBUC或AGT-TERMINATE。前三条信息将在下面解释;其余信息从字面上可以理解并且对本发明的意义不大。特征域702包含的信息与代理状况记录的特片域602相同。目标模块识别符域703和目标过程识别符域704分别包含信息目的地的模块和过程。原分区识别符705包含发送分区的识别符。编组参数域706包含被传递参数的编码。
在最佳实施例中,参数编码采用对分级数据结构进行递归下降测量直到识别出原始简单数据元素的方法。然后把这些数据以与机器无关的格式传到另一处理器上。这种操作被称为参数编组。参数解码时发生逆操作,这时把从与机器无关格式复原的原始数据元素建成分级数据结构。这种操作称为参数的非编组。参数编组/非编组技术同行皆知,其细节不在这里重复。同行所知任何其它参数编码/解码方案也可以采用。
现在详细描述远程过程调用步骤。图8概念性地图示了在单个远程过程调用和返回的步骤中客户、备忘程序、代理程序和服务器间的控制转移。图9图示了作为单个远程过程调用的一部分,客户和服务器备忘程序所执行步骤流程图。图10是代理程序所执行的流程图。
在开始一个远程过程调用之间,程序的状态如下。将要发出远程过程调用命令的分区正在执行发布此命令的客户过程。其它所有分区正在执行各自的代理程序,此时代理程序的状态是AGT-WAIT,等待远程分区出现的事件。这种状态在图8中由801表示。为响应远程调用,代理程序也可以是AGT-GET-REPLY或AGT-ACCEPT RETURN状态。但是,在下面解释中,AGT-WAIT状态代表所有这三种状态。
当客户过程准备启动远程服务器时,它向所述服务器的局部客户备忘程序发出一个局部过程调用(802),这个调用对此客户来说和其它任何局部过程调用一样。这个调用启动了运行901的C-备忘程序,此备忘程序然后用AGT-CALL信号向局部代理程序发出一个调用命令(803,902),请求它启动远程服务器。客户代理程序建立一个远程联系并把AGT-CALL信息传给正在AGT-WAIT状态下等待的服务器代理程序(804)。
图10A图示了客户代理程序在收到AGT-CALL信息以后采取的行动。客户代理程序首先检验状况(在现有状态下接收AGT-CALL是否合法)(1001)。如果状况合法,当前代理状况在步骤1002存进代理状况栈601。代理程序然后在步骤1003采用动词AGT-CALL、目标模块和过程识别符、原局部分区识别符构造一条信息。在步骤1004设置新代理状况,在步骤1005把信息送到目标分区。当服务器代理收到这条信息,客户代理将控制返回到C-备忘程序。
图10B图示了服务器代理收到来自客户代理的信息后所采取的行动。服务器代理在AGT-WAIT状态下收到任何信息以前初步设置它的状态为AGT-NULL-CODE(1011)。代理程序然后在其缓冲区收到信息(1012)并检查动词。如果动词不是AGT-CALL(1013)并且不是AGT-TERMINATE(1014),发出错误信号。如果动词是AGT-TERMINATE,代理处理程序结束其分区。如果动词是AGT-CALL,接收的代理程序把其当前状况压入代理状况栈(1015),设置来自信息头的新状况特征(1016),设置其状态为AGT-IN-SERVICE(1017),通过调用局部服务器备忘程序分派服务(1018,805),使得S备忘程序启动(911)。以后当服务器完成工作并返回时从代理状况栈复原其状况(1019)。
随着控制返回到客户分区的C-备忘程序和在服务器分区启动的S-备忘程序,C-备忘程序把输入参数送到S-备忘程序(903,806),S-备忘程序收到这些参数(912,807)。在所有输入参数被送出后,C-备忘程序调用客户代理,发生了AGT-GET-REPLY事件(904,808),示意它等待远程服务返回。客户代理然后进入AGT-WAIT状态(809)。在这种状态下,它可接收来自某个远程代理的两种信号:AGT-REPLY;或AGT-CALL。AGT-REPLY信号来自于服务器过程完成后当前正在进行的远程过程调用的服务器代理程序。AGT-CALL信号将作为新远程过程调用某个局部服务的一部分出现,它被嵌套于原远程过程调用里。这种调用可来自任何其它代理。
在服务器备忘程序收到所有输入参数后,它向服务器过程发出一个局部调用命令(810,913),以与任何局部调用相同的形式向它传送参数。服务器过程然后得以执行。服务器过程可发出调用其它局部或远程过程的嵌套调用命令,所用过程如上所述。但在此例中,只描述单个调用和返回。当服务器过程完成时,它返回到S-备忘程序(811)。
S-备忘程序用AGT-REPLY信号启动服务器代理程序(812,914),示意它提醒客户服务已经完成。图10c图示了服务器代理程序在发出AGT-REPLY信号以后(图8中813所示)所采取的行动。服务器代理程序首先检验状况(在当前状态下发出AGT-REPLY是否合法)(1021)。如果状况合法,代理程序在步骤1022用动词AGT-REPLY,目标模块和过程识别符,来自当前代理状况的原分区识别符构造一条信息。服务器代理程序然后把此信息送往客户分区(1023)设置其状况为AGT-IN-SERVICE(1024)。当信息收到时,服务器代理返回到S-备忘程序。
图10D图示了客户代理在接收来自服务器代理的AGT-REPLY信息以后所采取的行动(图8中814所示)。当客户代理完成启动服务器的工作时,它清除其输出数据(1031)并进入等待状态,等待前述的来自另一分区的信息。当信息到达时,它被放进代理程序的缓冲区内(1032)并检查动词。如果动词是AGT-REPLY(1033),它检验状况(1034)。如果AGT-REPLY信号在当前状况下是合法的,则代理程序返回到局部C-备忘程序(1035,904),如果动词是AGT-CALL(1036),表明有一个嵌套的远程过程调用。代理程序将把当前状况压入代理状况栈,重置来自信号信头数据的状态域,设置其状态为AGT-IN-SERVICE,通过启动适当的S-备忘程序分派服务(1037)。当局部服务完成时,它复原代理状况栈的先有状况(1038)并重新进入等待状态。
当控制从客户代理返回到局部C-备忘程序和从服务器代理返回到S-备忘程序时,S-备忘程序把输出参数送到接收它们(816,905)的C-备忘程序(815,915),在所有输出参数被接收后,C-备忘程序用AGT-ACCEPT-RETURN信号调用客户代理(817,906),示意它期望来自服务器代理的远程过程调用返回。几乎在同时,S-备忘程序用AGT-RETURN信号把控制返回到服务器代理(818,916),示意它把远程过程调用返回到客户代理。S-备忘程序完成了它的作用。
图10E图示了在发出示意自S-备忘程序返回的AGT-RETURN信号后,服务器代理所采取的行动。服务器代理检验状况(1041)。如果在当前状态下发布AGT-RETURN是合法的,此代理程序构造了一条发往客户代理的信息,把动词AGT-RETURN放进信息头,还采用了来自当前状况的原模块,过程和分区识别符(1042)。代理程序然后把信息送到客户代理(819,1043)。当信息传送完毕,服务器代理清洗它的输出缓冲区(1044)并把控制返回到S-备忘程序。S-备忘程序也执行完毕并把控制返回到其分配程序,即AGT-WAIT状态(正在执行AGT-WAIT,AGT-GET-REPLY,或AGT-ACCEPT-RETURN)下的代理程序。在这一时刻,代理程序正在等待另一调用。
图10F图示了在收到AGT-RETURN信息(图8中820所示)后客户代理所采取的行动。在客户代理收到来自C-备忘程序的示意它期望远程过程调用返回的调用命令后,客户代理处于等待状态。当信息收到时,信息被读进缓冲区(1015)且动词被检查。如果动词是AGT-RETURN,代理程序检验状况(1052)。如果接收这条信息是合法的,代理程序复原来自代理状况栈的状况(1053),并返回到C-备忘程序。在等待AGT-RETURN时,也有可能收到另一条(嵌套)AGT-CALL信息,如1054处所示在这种情形里,代理程序将把当前状况压入代理状况栈,重置来自信息头数据的状况域,设置其状态为AGT-IN-SERVICE,并通过启动适当的S-备忘程序分派服务(1055)。当局部服务完成时,它复原其来自代理状况栈的先有状况(1056)并重新进入等待状态。当局部C-备忘程序接收到代理程序的返回时,它把参数返回到(局部返回)客户过程(821)。
每个分区维护着几张表,它们包含执行远程调用的路径信息,如图11所示。它们包括模块到分区的映射表1101,模块分派表1111,和过程分派表1121。分区被标以数字0到n,其中共有n+1个分区。主分区被标为0,模块被标以数字0到m,共有m+1个模块。模块到分区表1101的入口数等于模块数,每个入口包含具有此模块的分区识别符,索引此入口。在每个分区都复制表1101,使得代理程序把远程过程调用送到正确的分区。模块分派表1111的入口数等于模块数,每个入口包含一特殊模块-备忘程序的局部地址。由于任一分区不包含所有的模块,模块分派表中包含了一个错误处理过程的局部地址以处理那些不在这局部分区内的模块。尽管每个分区有一个模块分派表1111,但是,每个分区的入口将不同。每个模块-备忘程序包含一个过程分派表1121。过程分派表的入口数等于此模块中服务过程之数,每个入口包含此过程S-备忘程序的局部地址。当代理程序收到一个调有远程分区服务的命令时,它从表1111中获得模块-备忘程序的地址,然后启动此模块-备忘程序,由此从表1121中获得S-备忘程序的地址,然后启动此模块-备忘程序,由此表1121中获得S-备忘程序的地址,然后启动这个S-备忘程序。
根据本发明,一个程序的不同部分将放于不同处理器的局部存储器里。当程序开始执行(在其主分区)时,必须具有某种机制确保在次分区的程序模块在需要时被装载。在本最佳实施例中,由单独的装载/启动处理程序完成此任务。
图12图示了此装载/启动程序机制。装载程序1205,启动程序1206,1207,主分区1203和次分区1208,1209每个都有一个主入口,在它执行时分配给它。主入口对分区间建立低级联系很有必要。每个启动程序1206,1207是操作系统处理程序,每个处理一个。装载程序知道它的主入口名。启动程序1206,1207在接到来自装载程序1205的命令后启动各自的分区。装载程序可含于主分区所在局部地址空间内,也可在另一处理器的地址空间内。当一个母处理程序1202启动了此程序。母处理程序把装载程序的主入口数(图12中的“M2011”)经环境1204传给主分区。“环境”意指任何用来传送入口数的机制。如一个环境变量,外部文件或其它装置。装载程序1205调用每个启动程序,传给它装载程序的主入口名。启动程序然后启动对应的次分区。启动分区需要为次分区建立程序栈,在此栈的底部有一个代理处理程序的启动单元。次分区的代理处理程序将在AGT-WAIT状态下被启动。主分区和次分区用先前提供的装载程序主入口名建立了与装载程序的联系,并向装载程序提供相应分区的主入口名。装载程序然后把入口名分给其它所有分区。
尽管在最佳实施例中,一个程序的所有分区在主分区被启动时都被装载并链接起来。但在另一实施例中,也可推迟装载直到一个远程过程调用启动包含在未装在分区的过程(要求装载)。在这个可选实施例中,每个分区将保存一个含以前被装载分区的主入口的向量。当开始一个远程过程调用时,客户分区首先检查此向量以检验目标分区是否已装载。如果目标分区设有装载,目标处理器的启动程序在来自调用分区内装载功能的命令发出后启动这个目标分区。一次只启动一个分区,但在别的方面,要求装载功能和最佳实施例中的预装载所有分区一样。
在最佳实施例中,基于性能或其它考虑把每个独立地编译代码模块分到一个处理器上。分配是在模块级而不是在过程级进行的,以避免修改源代码。如果希望在独立的过程级分配模块,则可以对每个过程独立地进行编译(在大部分计算机语言里)。在另一实施例中,编译程序指令可包含在源代码内,它允许单个模块内的不同过程可编译成用于不同分区的不同模块。
在最佳实施例中,本发明被用来帮助一个连在通用计算机系统上的面向数字的加速器系统,其中加速器主要作一个从属系统。但是,还有许多可能的系统构造和使用实施例。例如,所有处理器都相同,但每个处理器存取不同的局部数据库。通讯链接可比最佳实施例中所用的更远或更近。例如,不同的处理器可通过各处局域网技术链接。
虽然公开了一个特殊的本发明实施例和某些可选实施例,但是本领域技术人员将认识到在下述权利要求范围内可做一些形式上和细节上的修改。
Claims (5)
1、一个用于执行具有多个可调用过程的单线程计算机程序的方法,其特征在于包括以下步骤:
把所述程序中的所述多个可调用过程的每一个分配到多个可调用过程的集合之一;
在多处理器计算机系统的第一处理器的第一局部存储器中存入所述多个可调用过程集合的第一集合的可调用过程;
在所述多个处理器计算机系统的第二处理器的第二局部存储器中存入所述多个可调用过程集合的第二集合的可调用过程;
在所述多处理器系统上执行所述程序,其中所述执行步骤包括以下步骤:
(a)在所述第一处理器上执行包含在所述第一可调用过程集合内的可调用过程,其中至少有一个所述第一集合的过程调用所述第二集合的过程;
(b)在所述第二处理器上执行包含在所述第二可调用过程集合内的可调用集合,其中至少有一个所述第二集合的过程调用所述第一集合的过程。
2、根据权利要求1的方法,其中把所述程序中的所述多个可调用过程的每一个分配到多个可调用过程集合之一的步骤包括以下步骤:
对每个所述可调用过程,确定所述多处理器系统的哪个处理应当执行这个可调用过程,其中所述确定步骤的完成不用参考所述程序的调用历史。
3、根据权利要求2的方法,其特征在于:所述第一处理器比所述第二处理器更有效地执行第一类型的可调用过程,所述第二处理器比所述第一处理器更有效地执行第二类型的可调用过程,其中所述确定步骤确定所述第一类型的可调用过程应在所述第一处理器上执行,所述第二类型的可调用过程应在所述第二处理器上执行。
4、根据权利要求3的方法,其特征在于:所述第一处理器为通用商务处理器并且所述第二处理器为面向数字的处理器。
5、根据权利要求1的方法,其特征在于:在所述多处理器系统上执行所述程序的步骤包括:
调用所述程序的一个外层过程以开始在所述第一处理器内执行所述程序;
自动建立所述第一可调用过程集合的一个过程与所述第二集合的一个过程之间的联系,其中所述第一集合的过程自动启动对所述第二集合的过程的调用;
自动建立所述第二可调用过程集合的一个过程与所述第一集合的一个过程之间的联系,其中所述第一集合的过程自动启动对所述第二集合的过程的调用。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
IL97894A IL97894A0 (en) | 1991-04-17 | 1991-04-17 | Multi-processor computer system |
IL097894 | 1991-04-17 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1065942A CN1065942A (zh) | 1992-11-04 |
CN1042979C true CN1042979C (zh) | 1999-04-14 |
Family
ID=11062277
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN92101822A Expired - Fee Related CN1042979C (zh) | 1991-04-17 | 1992-03-18 | 执行具有多个可调用过程的单线程计算机程序的方法 |
Country Status (8)
Country | Link |
---|---|
EP (1) | EP0509946A3 (zh) |
JP (1) | JPH07306837A (zh) |
KR (1) | KR950014163B1 (zh) |
CN (1) | CN1042979C (zh) |
BR (1) | BR9201274A (zh) |
IL (1) | IL97894A0 (zh) |
TW (1) | TW253041B (zh) |
UY (1) | UY23398A1 (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8185734B2 (en) | 2002-03-29 | 2012-05-22 | Intel Corporation | System and method for execution of a secured environment initialization instruction |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CA2102883A1 (en) * | 1993-02-26 | 1994-08-27 | James W. Arendt | System and method for lazy loading of shared libraries |
US6470398B1 (en) | 1996-08-21 | 2002-10-22 | Compaq Computer Corporation | Method and apparatus for supporting a select () system call and interprocess communication in a fault-tolerant, scalable distributed computer environment |
US10631246B2 (en) | 2011-02-14 | 2020-04-21 | Microsoft Technology Licensing, Llc | Task switching on mobile devices |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0358620A2 (en) * | 1988-09-07 | 1990-03-14 | International Business Machines Corporation | Callback facilities for interpretive processors |
JPH1029938A (ja) * | 1996-07-17 | 1998-02-03 | Maruha Corp | 虚血性眼疾患の予防および/または治療剤 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US3548384A (en) * | 1967-10-02 | 1970-12-15 | Burroughs Corp | Procedure entry for a data processor employing a stack |
JPS61283955A (ja) * | 1985-06-11 | 1986-12-13 | Nec Corp | 密結合型マルチ・プロセツサ・システムのタスク制御方式 |
JP2518293B2 (ja) * | 1987-07-24 | 1996-07-24 | 日本電気株式会社 | デ−タフロ−プロセツサ |
CA2061117C (en) * | 1991-12-02 | 1998-09-29 | Neta J. Amit | Apparatus and method for distributed program stack |
-
1991
- 1991-04-17 IL IL97894A patent/IL97894A0/xx not_active IP Right Cessation
-
1992
- 1992-03-13 EP EP9292480040A patent/EP0509946A3/en not_active Withdrawn
- 1992-03-18 KR KR1019920004488A patent/KR950014163B1/ko not_active IP Right Cessation
- 1992-03-18 CN CN92101822A patent/CN1042979C/zh not_active Expired - Fee Related
- 1992-03-30 JP JP4074453A patent/JPH07306837A/ja active Pending
- 1992-04-07 UY UY23398A patent/UY23398A1/es not_active IP Right Cessation
- 1992-04-09 BR BR929201274A patent/BR9201274A/pt not_active Application Discontinuation
- 1992-04-16 TW TW081102993A patent/TW253041B/zh active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
EP0358620A2 (en) * | 1988-09-07 | 1990-03-14 | International Business Machines Corporation | Callback facilities for interpretive processors |
JPH1029938A (ja) * | 1996-07-17 | 1998-02-03 | Maruha Corp | 虚血性眼疾患の予防および/または治療剤 |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8185734B2 (en) | 2002-03-29 | 2012-05-22 | Intel Corporation | System and method for execution of a secured environment initialization instruction |
CN101833632B (zh) * | 2002-03-29 | 2013-11-06 | 英特尔公司 | 用于执行安全环境初始化指令的系统和方法 |
US8645688B2 (en) | 2002-03-29 | 2014-02-04 | Intel Corporation | System and method for execution of a secured environment initialization instruction |
US9361121B2 (en) | 2002-03-29 | 2016-06-07 | Intel Corporation | System and method for execution of a secured environment initialization instruction |
Also Published As
Publication number | Publication date |
---|---|
IL97894A0 (en) | 1992-06-21 |
JPH07306837A (ja) | 1995-11-21 |
KR920020337A (ko) | 1992-11-21 |
EP0509946A3 (en) | 1994-11-30 |
CN1065942A (zh) | 1992-11-04 |
EP0509946A2 (en) | 1992-10-21 |
KR950014163B1 (ko) | 1995-11-22 |
UY23398A1 (es) | 1992-04-21 |
TW253041B (zh) | 1995-08-01 |
BR9201274A (pt) | 1992-12-01 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US5659701A (en) | Apparatus and method for distributed program stack | |
CN1306399C (zh) | 用于网络处理器的虚拟机 | |
Subhlok et al. | Optimal latency-throughput tradeoffs for data parallel pipelines | |
US6256704B1 (en) | Task management for data accesses to multiple logical partitions on physical disk drives in computer systems | |
CN1794177A (zh) | 用于为虚拟机揭示处理器拓扑结构的系统和方法 | |
CN1271889A (zh) | 用于使用寄存器分配器建立调用约定序言和收尾程序代码的方法和装置 | |
CN104965689A (zh) | 一种cpu/gpu的混合并行计算方法及装置 | |
US20080301274A1 (en) | Block allocation times in a computer system | |
US11755370B2 (en) | System and method of scheduling and computing resource allocation optimization of machine learning flows | |
CN1096638C (zh) | 用于客户/服务器计算的方法 | |
CN100462956C (zh) | 用于在计算系统上加载程序的方法和系统 | |
Jain et al. | Charm++ and MPI: Combining the best of both worlds | |
US7454749B2 (en) | Scalable parallel processing on shared memory computers | |
CN1042979C (zh) | 执行具有多个可调用过程的单线程计算机程序的方法 | |
Watson et al. | Flagship computational models and machine architecture | |
Beynon et al. | Performance optimization for data intensive grid applications | |
CN103299277A (zh) | Gpu系统及其处理方法 | |
CN109783141A (zh) | 异构调度方法 | |
CN113220444A (zh) | Os优化的工作流分配 | |
CN1464415A (zh) | 一种多处理器系统 | |
WO2001016761A2 (en) | Efficient page allocation | |
CN1719416A (zh) | 嵌入式并行计算系统以及嵌入式并行计算方法 | |
CN103631648A (zh) | 一种任务处理方法及系统 | |
Fellipe Uller et al. | LWMPI: An MPI library for NoC‐based lightweight manycore processors with on‐chip memory constraints | |
Rosenkrantz et al. | Requirements of the Cornell Theory Center for resource management and process scheduling |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C06 | Publication | ||
PB01 | Publication | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
C15 | Extension of patent right duration from 15 to 20 years for appl. with date before 31.12.1992 and still valid on 11.12.2001 (patent law change 1993) | ||
OR01 | Other related matters | ||
C19 | Lapse of patent right due to non-payment of the annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |