(57)【特許請求の範囲】
【請求項１】
複数のプロセッサ上でプロセッサ使用権を得る計算主体である複数のプロセスまたはスレッドが動作するシステムにおいて，
メモリのアドレス空間が，複数のプロセスまたはスレッドが共有する第１のアドレス空間と，プロセスまたはスレッド間で共有しない第２のアドレス空間とに分割して構成され，
前記各プロセッサは，
プロセッサ間で通信を行いながら，各プロセスまたはスレッドの実行制御およびプロセッサ間の移動制御を行うプロセスまたはスレッドの実行スケジュール制御手段と，
前記プロセッサまたはスレッドの実行時に，そのプロセスまたはスレッドが使用するスタックの先頭アドレスを保持するベース・レジスタと，
前記プロセスまたはスレッドからのメモリアクセス要求が前記スタックに対するものであるかどうかを判別する手段と，
アクセス要求が前記スタックに対するものである場合に，アクセス要求のアドレスに前記ベース・レジスタが保持する値を加算してアドレスを変換する手段とを備え，
前記プロセスまたはスレッドの実行スケジュール制御手段は，
他のプロセッサからのプロセスまたはスレッドの転送要求に対し，他のプロセッサから受信したスタックの内容を，前記第２のアドレス空間における他のプロセスまたはスレッドのスタックと競合しない領域にコピーし，そのコピーした領域の先頭アドレスを，前記各プロセスまたはスレッドごとに設定すべきベース・アドレスとして記憶する手段と，
前記プロセスまたはスレッドの実行開始時に，前記プロセスまたはスレッドごとに記憶したベース・アドレスを前記ベース・レジスタに設定する手段とを備えた
ことを特徴とするアドレス空間共有システム。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は，複数のプロセッサが協調して処理を進める並列分散処理システムにおいて，複数のプロセッサまたはスレッドがアドレス空間を共有して動作するアドレス空間共有システムに関する。
【０００２】
現在の並列分散処理の環境は，それ自身の複雑さおよび並列処理のためのプログラミングの困難さから一部の専門家の独占物となってしまっているが，単一のＣＰＵによる処理のボトルネックが顕在化している現在，一般の計算機ユーザにも容易で高性能な並列処理を可能とする環境の提供が急務となっている。
【０００３】
【発明が解決しようとする課題】
複数のプロセッサが協調して処理を進める並列処理分散システム，特に，ＬＡＮ，ＷＡＮ環境でヘテロジーニァスな複数のプロセッサを１クラスタとして協調させながら一つのタスクを並列分散処理させるようなシステム環境が考えられている。このような並列処理環境を一般ユーザに提供する際に問題となるのは，簡易性と習得のし易さとであるが，これは性能との間にトレードオフの関係を生ずる。
【０００４】
従来の技術水準では，性能のために簡易性をかなりの程度犠牲にするか，または簡易性のために大幅な性能の低下を甘受せざるを得ない。
性能に関し，プロセッサ間のデータ転送の遅延とスループットが問題になるが，これは，本質的にはデータ転送の遅延の問題に還元できる。並列度の高い計算では，転送するデータの単位が小さく，転送量に関係のない転送回数だけに依存する遅延が主だからである。転送回数に依存する遅延を全体として減らすためには，転送するデータをある程度バッファに蓄積しておいて，まとめて一度に転送する必要があるが，このバッファの大きさをどの程度にすると最適であるのかは，因子が複雑に絡み合っているため，事実上実験してみないことには分からない。
【０００５】
また，プログラムを並列実行するためには，それを並列実行の単位に分割しなければならない。しかし，より小さな単位に分割すればそれだけ多くのＣＰＵが利用可能になる代わりに，実行の単位が小さくなることによる同期のオーバヘッド，コンテキスト・スイッチの増加によるオーバヘッド，データの遅延，データ転送量の増加，メモリのフラグメンテーションによるページングの増加等を招くことになり，ここでもまた，トレードオフを生じる。
【０００６】
エンドユーザに対しても並列処理によるプログラムの高速化，大規模化のメリットを享受できるようにすることが望まれているが，現状では，ある程度の性能を得るためには，エンドユーザにもエキスパート・ユーザの持つ並列処理の煩雑なノウハウを獲得してプログラムのチューニングをしてもらわなければならないという矛盾に直面する。
【０００７】
これらの解決の手段として，従来，並列処理のための高級言語，例えば，手続き型として，Ｏｃｃａｍ（A.Burns, PROGRAMMING IN occam 2, Addison-Wesley,1988）, ＨＰＦ（High Performance Fortran Forum, High Performance Fortran Language Specification, 1994)，関数型として，ＣＬＥＡＮ（R.Plasmeijer and M.van Eekelen, Functional Programming and Parallel Graph Rewriting, Addison-Wesley,1993），論理型として，ＰＡＲＬＯＧ（T.Conlon, Programming in PARLOG, Addison-Wesley,1989）のような高級言語が開発されている。
【０００８】
また，高レベルのライブラリ・インタフェースとして，例えばＰＶＭ（A.Geist,A.Beguelin,J.Dongarra,W.Jiang,R.Manchek and V.Sunderam, PVM:Parallel Virtual Machine - A Users' Guide and Tutorial for Networked Parallel Computing -, MIT press,1994 ），ＭＰＩ（Message Passing Interface Forum, MPI: A Message-Passing Interface Standard, May 5,1994）が開発されている。
【０００９】
しかし，高級言語では十分な性能がでないか，性能を出すためにはエキスパート並みのノウハウが必要であり，また，高レベルのライブラリは，未だにエンドユーザが使えるようなレベルに達していない。
【００１０】
他の中間的な解決手段として，比較的低レベルの手続き型の逐次言語と並列処理のための命令言語を組み合わせる方法（I.Foster, R.Olson and S.Tuecke, Productive Parallel Programming, Scientific Programming, Vol.1,pp.51-66, 1992; L.A.Crowl and T.J.LeBlanc, Parallel Programming with Control Abstraction, ACM Transactions on Programming Languages and Systems, Vol.16,No.3,pp.524-576, 1994）が提案されている。
【００１１】
これらの方法は，全ての面にわたってエンドユーザであるのではなく，逐次処理のエキスパートであるが並列処理に関しては比較的エンドユーザに近い人を対象として，低レベルの逐次言語のチューニングと並列処理のチューニングとを分離し，並列処理のインタフェース部分だけに簡易で画一化されたチューニング・スタイルを導入するものである。
【００１２】
本発明が対象とするシステムは，後者の考え方にもとづくものであるが，並列処理インタフェース部分のさらなる画一化とエキスパート・ユーザのための汎用性とを推進し，逐次処理部分とのインタフェースに柔軟性を持たせるために，全体を手続き型言語の意味論で統一することを図っている。
【００１３】
例えば，以上のような並列分散処理システムのもとでの，ネットワーク上のワークステーション群，あるいは専用のマルチＣＰＵの並列計算機上で並列プログラムを実行するとき，共有メモリ機構（仮想共有メモリ機構を含む。以下同様。）を使用して全てのＣＰＵに共有するアドレス空間（実アドレス空間または論理アドレス空間）を構成する方法は，単一のＣＰＵを使用したプログラミングに最も近い並列プログラミングを可能とする方法として知られている。また，スタックその他，各種のバッファ等のアドレス空間は，他のＣＰＵと共有させる必要はないので，全てのアドレス空間を共有させるのではなく，アドレス空間の一部を各ＣＰＵにローカルになるようにする方法もある。
【００１４】
これらの方法の処理モデルは，複数のスレッドと呼ばれる計算主体が，それぞれ共有するアドレス空間の中で，ときに同期を取りながら相互に並列に処理を進めるものである。各スレッドは，自分専用のスタックを使用し，他のスレッドと共有するアドレス空間上で，ＣＰＵを排他的に使用して処理を進める。すなわち，スレッドは，自分専用のデータ領域あるいは一時的なデータをスタック上に確保してＣＰＵの演算に使用したり，他のスレッドにＣＰＵ使用権を明け渡す時にＣＰＵのレジスタの中身を自分のスタック上に退避し，次にＣＰＵ使用権が自分に明け渡された時に，退避しておいたレジスタの中身を元に戻すことにより，スレッド毎のＣＰＵの状態の一貫性を保持する。
【００１５】
このように，スタック空間は各スレッド毎の専用空間の集まりであるのに，全てのＣＰＵで共有されてしまうと，あるＣＰＵのスレッドが使用しているために他のＣＰＵには自分で使えないメモリのアドレス空間が多くできてしまうという問題が生じる。
【００１６】
また，ローカルなアドレス空間にスタックを置く方式の場合でも，スレッドを他のＣＰＵに移動させるときに，前と同じアドレス空間にスタックを配置しなければならないので，スレッドが移動可能である場合には，実際上，スタックを（仮想）共有アドレスに配置しなければならず，アドレス空間の利用効率が悪くなってしまう。
【００１７】
図５は，以上の従来技術の問題点説明図である。
図５（Ａ）に示すように，ＣＰＵｉで実行していたスレッドＡを他のＣＰＵｊに移動させて，ＣＰＵｊ上でスレッドＡの実行を継続する場合，ＣＰＵｊのアドレス空間においても，ＣＰＵｉのアドレス空間のスレッドＡ用スタックと同じ位置にスタックを配置する必要がある。しかし，すでに他のスレッドＣ用スタックがその位置にある場合には，アドレスの衝突が生じるので，スレッドの移動が不可となる。
【００１８】
スレッドＡを移動可能にするには，例えば図５（Ｂ）に示すように，あらかじめスタックのアドレス空間に全てのスレッド用のスタックが重なることのないように，領域をリザーブしておく必要が生じ，アドレス空間という重要な資源を無駄に使用することになってしまう。
【００１９】
本発明は上記問題点の解決を図り，共有メモリ・システムにおいて，スレッドまたはプロセスが移動しても，スタック等のアドレス衝突が起きないようにし，これによってアドレス空間の有効利用を可能にすることを目的とする。
【００２０】
【課題を解決するための手段】
本発明では，アドレス空間を共有空間と他のＣＰＵに共有されないローカル・アドレス空間に分け，さらにローカル・アドレス空間中にスタック・アドレス専用のスタック空間を構成する。そして，ＣＰＵからのスタック空間以外のアドレスへのメモリアクセスに対してはアドレス変換を行わず，スタック空間のアドレスのメモリへのアクセスに限り，自動的にアドレスを原点からのオフセットに変換して，専用のレジスタ（スタック・ベース・レジスタ：ｓｂｒ）の中身を足し合わせるようにする。
【００２１】
図１は，本発明の構成例を示す図である。
例えば，図１（Ａ）に示すように，ネットワーク１０で結合された複数のプロセッサ１１，１１’上でプロセッサ使用権を得る計算主体である複数のスレッド１３ａ〜１３ｄが動作するシステムにおいて，各プロセッサ１１，１１’のメモリのアドレス空間を，複数のスレッドが共有する第１のアドレス空間と，スレッド間で共有しない第２のアドレス空間とに分割して構成する。なお，ここでは，プロセッサ使用権を得る計算主体をスレッドとして説明するが，この計算主体がプロセスであっても，本発明を同様に適用することができる。
【００２２】
各プロセッサ１１，１１’は，スレッドがメモリにアクセスする際に指定したアドレス（これをＣＰＵアドレスという）の一部を，他のアドレス（これを論理アドレスという）に変換するＣＰＵアドレス／論理アドレス変換回路１２，１２’を備える。
【００２３】
ＣＰＵアドレス／論理アドレス変換回路１２，１２’は，例えば図１（Ｂ）に示すような，空間判別回路１４，ベース・レジスタ１５，加算回路１６，アドレスレジスタ１７からなる回路である。
【００２４】
空間判別回路１４は，スレッドからのメモリアクセス要求が，アドレス空間中の共有アドレス空間（例えばスタック空間以外の空間）に対するものであるか，またはスレッド間で共有しないアドレス空間（例えばスタック空間）に対するものであるかを判別する回路である。
【００２５】
ベース・レジスタ１５は，スレッド間で共有しない空間を相対アドレス空間とするためのベース・アドレスを保持する手段であって，例えばスレッドごとのスタックのオフセット値であるスタック・ベース・アドレスを保持する。加算回路１６は，アクセス要求がスタック空間等のスレッド間で共有しない空間に対するものである場合に，ベース・レジスタ１５に保持したベース・アドレスを，アクセス要求のアドレスに加算する回路である。
【００２６】
アドレスレジスタ１７は，ＣＰＵアドレスがスタック空間等の非共有空間を示すとき，加算回路１６でベース・アドレスを加算したアドレスを保持し，またＣＰＵアドレスが共有空間を示す場合には，そのＣＰＵアドレスをそのまま保持し，それを論理アドレスとして出力する。
【００２７】
このＣＰＵアドレス／論理アドレス変換回路１２，１２’によって，図１（Ｃ）に示すように，ＣＰＵアドレス空間での各スレッドのスタック空間の位置は，論理アドレス空間ではアドレスの原点からベース・レジスタ１５の値ｓｂｒが加算された位置へ移動可能となり，アドレスの衝突を回避することが可能となる。
【００２８】
【発明の実施の形態】
本システムでは，並列化が容易で高性能な実行環境を提供するために，例えばネットワーク化されたヘテロジーニァスなクラスタ上で，実行中の任意のスレッド（またはプロセス）を適度に移動（マイグレート）させながら全体の処理を進めることを可能にすることと，ネットワーク上のプロセス間を高速なストリーム通信で結び付けることを実現する。
【００２９】
すなわち，あるプロセスが通信の応答を待っている時間にＣＰＵを他のプロセスの処理に割り当てることで，ＣＰＵの利用効率を上げると共に他のプロセスの実行による通信をも時間的にオーバラップさせて全体として平均した場合の通信のレイテンシを低下させることを可能とするシステムの提供を図る。
【００３０】
このようなヘテロジーニァスな計算機環境での柔軟な対応のために計算機に依存しない仮想コード（中間コード）方式を採用するとともに，さらに，任意の時点でのスレッド（プロセス）・マイグレーションを可能とするために仮想共有メモリ機構を採用する。
【００３１】
（１）仮想コード方式
本システムでは，仮想コードとこの仮想コードのインタプリタとをネットワーク上に複数分散配置して，仮想共有メモリ上のリモート・メモリへのアクセスを高速な通信に変換しながら処理を進める。
【００３２】
仮想コードは，必要なときにサーバ間で転送することもできるが，仮想コードを予め各サーバに保持させて，移動の度の転送を不要とすることもできる。他のＣＰＵのヒープ領域へのアクセスは，プロセスの実行中に毎回トラップしてその都度データをセル単位で転送する。したがって，この場合には，スレッドの移動時に仮想コードとヒープ領域のデータを転送する必要がなく，プロセスのスタック領域と仮想コードのインタプリタが使用する数個のレジスタの中身だけを転送すればよい。
【００３３】
（２）仮想共有メモリ
ここで，スタック領域も仮想共有メモリの機構で管理すれば移動時に転送する必要はないが，スタックにアクセスできるのは，それを使用して処理を進めるプロセスだけであるので，仮想共有メモリを使用すると全てのサーバ上にメモリ空間をリザーブしてしまい，全サーバで利用可能なローカル・メモリ量が小さくなってしまう。また，仮想共有メモリのオーバヘッドもあるため効率が低下してしまう。
【００３４】
プロセスの実行途中での動的な移動を可能とするためには，仮想コードをネットワーク上でポジション・インデペンダントにしておく必要がある。そのためには，仮想コードに表れる全てのメモリ・アドレスを仮想的に全ての計算機で共有させることが必要である。オペレーティング・システム（ＯＳ）のレベルでサポートするためには，大掛かりな仕組みの仮想共有メモリ（D.Lenoski,J.Laudon,K.Gharachorloo,A.Gupta,J.Hennessy, The Directory-Based Cache Coherent Protocol for the DASH multiprocessor, IEEE Proceedings of the 17th Annual International Symposium on Computer Architecture, pp.148-159, 1990)を採用しなければならない。
【００３５】
本システムでは，任意の時点でサーバ間でスタックを移動できるようにするために，仮想コードの設計時に，仮想スタック・アドレス空間を仮想コードの内部レジスタであるスタック・ベース・レジスタ（ｓｂｒ）を用いて相対アドレス化する。つまり，実際の計算機上では任意の時点でスタックの中身を別のアドレスにコピーし，そのアドレスの先頭をスタック・ベース・レジスタにセットすることにより，矛盾なく実行が継続できるようにする。
【００３６】
すなわち，仮想コード領域は，各計算機上で最初のプロセスが動き出す直前にリザーブされたメモリ空間にオンデマンドで全体を一度にコピーすればよい。他のライトを伴うメモリ空間およびヒープ領域は，セルという可変長のライト・ワンスのメモリ単位で管理し，この限定されたセルへのアクセスに関してのみ仮想共有メモリを構築している。
【００３７】
したがって，インタプリタが内部的に利用するメモリ空間，プロセスのスタック空間，ストリームのバッファ等はすべてローカルな計算機上に取ることができるので，仮想共有メモリが扱わなければならない対象であるセル空間はかなり小さい。しかも，セルは，ライト・ワンスなので，セル・データのキャッシュのコヒーレンスを保つ仕組みが省略でき，一度作られたセルのキャッシュを恒久的なローカルなデータとして，キャッシュのコヒーレンスを保つ仕組みのコストなしに保持することができる。これにより，仮想共有メモリ機構を用いることによるオーバヘッドを減少させることができる。
【００３８】
図２は，ＣＰＵのアドレス空間を仮想メモリ機構が使用する論理アドレスに変換する処理を説明する図である。
図２において，スタック空間以外のＣＰＵアドレスｘであるＡは，そのまま論理アドレスｘのＡ’に変換され，スタック空間のＣＰＵアドレスであるＢは，一旦，原点からのオフセットｙに変換された後，スタック・ベース・レジスタ（ｓｂｒ）の値を足され，論理アドレス（ｓｂｒ＋ｙ）に変換される。
【００３９】
このように，ＣＰＵ／論理アドレス変換をＣＰＵレベルで実装するため，あらかじめアドレス変換のために最適化したアルゴリズムまたは回路を作り込むことができ，プログラムのレベルで明示的にアドレス変換を施す場合に比べ，非常に高速で，これによるオーバヘッドを非常に小さくすることができる。
【００４０】
しかも，この小さなオーバヘッドのコストを払うことにより，ＣＰＵの数が増加すればするほど，ＣＰＵが有効に使用することができるアドレス空間を全体的に見て大きくすることができるというスケーラビリティを確保できる。
【００４１】
【実施例】
図３は，本発明の実施例を示す図である。
ネットワーク上の複数のワークステーション（プロセッサ３０，３０’，…）で並列計算させるための言語を作り，そのインタプリタ用に本方式のスタック・ベース・レジスタを持つ仮想コードを設計し，それを実現している。この言語は，任意のスレッドが任意の時点で他のプロセッサに移動することが可能であるように設計されている。
【００４２】
オペレーティング・システム（ＯＳ）のスレッド・スケジューラ３３，３３’は，プロセッサ間で通信を行いながら，各スレッドの実行制御およびプロセッサ間の移動制御を行う手段である。スレッド・スケジューラ３３，３３’が管理するスレッド制御テーブル３４，３４’には，各スレッドの実行に関する制御情報として，例えば，スレッドを識別するスレッドＩＤ，スレッド実行時間，スレッド実行権，そのスレッドが割り当てられているプロセッサ（ＣＰＵ）番号，どのようなときにスレッドのマイグレーションを行うかについての移動条件，スタック・ベース・レジスタ（ｓｂｒ）の値，スタック・ポインタ（ｓｐ）の値等が格納されている。スレッド制御テーブル３４，３４’は，プロセッサ３０，３０’がスレッドの実行スケジューリングを行うとき，他のプロセッサへのスレッドの転送を行うときに，登録，更新，削除される。
【００４３】
図３は，プロセッサ３０のスレッドＡがプロセッサ３０’へ移動するところを示している。ここで，スレッドＡは，プロセッサ３０上ではアドレス空間３１のスレッド・スタックＡを使用しているが，移動先のプロセッサ３０’のアドレス空間３１’では，既にスレッドＣがスレッド・スタックＡのアドレスを使用しているので，従来の方式では，スレッド・スタックＡを移動させることができない状態である。
【００４４】
しかし，本方式の場合，プロセッサ３０上のスレッドＡは，ｓｂｒというスタック・ベース・レジスタの値を持っており，これによってスタック専用のアドレス空間を相対化している。したがって，スレッドＡをプロセッサ３０からプロセッサ３０’に移動させたときに，プロセッサ３０’上でスタック・ベース・レジスタの値をスレッド・スタックＣに重ならないようにｓｂｒ’に変えることにより，スレッドＡはプロセッサ３０’上でスレッド・スタックＡを問題なく使用することができる。
【００４５】
このように，アドレスの衝突時にスタック・ベース・レジスタの値の変更だけでよいのは，プロセッサのスタック空間のアドレスへのアクセスが，全てｓｂｒに関する相対値になっているためである。また，プロセッサ上で使用されるアドレス空間と仮想メモリのアドレス空間（論理アドレス空間）とが，ｓｂｒを用いたアドレス変換を介して間接的に対応付けられていることから，プロセッサ上でロード，ストアされるアドレス，およびその他の計算に表れるアドレスが，全てプロセッサのＣＰＵアドレスになっているためである。
【００４６】
つまり，スタック・ベース・レジスタ（ｓｂｒ）を使用した相対スタック・アドレス空間では，移動前と移動後とでアクセス要求元へ意識させることなく，スタックの場所を論理アドレス空間内で自由に平行移動させることができるので，ＯＳ間のネゴシエーションなしに，移動してきたスレッドのスタックを，空いている任意のスタック空間にコピーすることができる。
【００４７】
以上のように，スレッドＡをプロセッサ３０からプロセッサ３０’に移動させる場合に，スレッド・スケジューラ３３は，スレッドＡの移動により移動先のプロセッサ３０’のアドレス空間３１’でアドレスの衝突が発生するかどうかを判断することなく，スレッドＡの制御情報をプロセッサ３０’のスレッド・スケジューラ３３’に渡し，スレッドＡを移動させることができる。
【００４８】
移動先のスレッド・スケジューラ３３’は，スレッド・スタックＡをアドレス空間３１’における空きのスタック空間に割り当て，アドレス空間３１’の原点からの相対値であるｓｂｒ’をスレッドＡのスレッド制御情報へ設定し，実行スケジュールの契機にスレッドＡにプロセッサ使用権を与えて，スレッドＡを実行させる。
【００４９】
なお，ここで，スタックポインタ（ｓｐ）は，スタック・ベース・レジスタ（ｓｂｒ）からの相対値を保持し，スレッドの移動後もその値が保持される。
なお，図１（Ｂ）に示すＣＰＵアドレス／論理アドレス変換回路における空間判別回路１４において，受け取ったＣＰＵアドレスがスタック空間であるかそれ以外の空間であるかを判別する方法として，本実施例では，ＣＰＵアドレスの上位２ビットが“１１”の場合にスタック空間，上位２ビットが“１１”以外の場合にスタック空間以外の空間と判断し，上位２ビットが“１１”であって加算回路１６によりベース・レジスタ１５の値（ｓｂｒ）を加算する際には，ＣＰＵアドレスの上位２ビットをマスクし，上位２ビットを“００”にしてから，加算している。
【００５０】
この空間の判別をＣＰＵアドレスの一部を利用して行うのではなく，例えば命令コードから得られる制御信号等を利用して行うようにしてもよい。
図４は，図３に示すスレッド・スケジューラの処理を中心とした処理フローチャートである。この処理フローチャートは，各ＣＰＵ（プロセッサ）内のＯＳと各スレッドの処理の流れを示しており，他のＣＰＵ（ＯＳ）からのスレッドの受信（ステップＳ１〜Ｓ４），他のＣＰＵ（ＯＳ）へのスレッドの送信（ステップＳ５〜Ｓ８），自ＣＰＵ内のスレッドの実行制御（ステップＳ９〜Ｓ１５）の３つのループから構成されている。
【００５１】
ステップＳ１では，他のＣＰＵ（ＯＳ）からのスレッドの転送要求の有無を判定する。転送要求があれば，ステップＳ２の処理を行い，転送要求がなければステップＳ５の処理へ進む。
【００５２】
ステップＳ２では，他のＣＰＵ（ＯＳ）からスレッド・スタックを受信し，その内容をアドレス空間の空き領域にコピーする。
ステップＳ３では，スレッド・スタックをコピーしたアドレス空間の先頭を，そのスタック用のスタック・ベース・レジスタｓｂｒの退避領域に設定する。この移動したスレッドのｓｂｒの値の変更は，ＣＰＵがスタック用に確保したスタック制御テーブル上のｓｂｒ用領域に書き込むことで実行する。
【００５３】
ステップＳ４では，他のＣＰＵ（ＯＳ）から転送されたスタックを用いるスレッドの制御情報を受信し，スレッド制御テーブルに設定する。その後，ステップＳ１へ戻る。
【００５４】
ステップＳ５では，各スレッドについて，スレッド制御テーブルにおける移動条件をチェックし，移動するスレッドを決定する。
ステップＳ６では，移動条件を満足するスレッドが存在するかどうかを判定し，存在する場合にはステップＳ７の処理を行い，存在しない場合はステップＳ９の処理へ進む。
【００５５】
ステップＳ７では，他のＣＰＵ（ＯＳ）へ移動条件に合致したスレッドのスレッド・スタックを転送する。
ステップＳ８では，他のＣＰＵ（ＯＳ）へ転送したスタックのスレッドの制御情報をスレッド制御テーブルから転送し，スレッド制御テーブルにおけるその情報を消去する。その後，ステップＳ５へ戻る。
【００５６】
ステップＳ９では，実行するスレッドを決定する。
ステップＳ１０では，実行するスレッドが存在するかどうかを判定する。存在する場合にはステップＳ１１の処理を行い，実行可能な状態にあるスレッドが存在しない場合には，ステップＳ１へ戻る。
【００５７】
ステップＳ１１では，スタック・ベース・レジスタ（ｓｂｒ）の値を，実行するスタックのスタック制御テーブルから得て，スタック・ベース・レジスタに設定する。
【００５８】
ステップＳ１２では，スタックに退避してあったその他のレジスタの中身を戻し，そのスレッドへコンテキスト・スイッチを行ってＣＰＵ使用権を与える。
ステップＳ１３では，スレッドを実行する。
【００５９】
ステップＳ１４では，スレッドの実行を停止または中断する事象の発生により，レジスタのスタックへの退避とＯＳへのコンテキスト・スイッチを行う。
ステップＳ１５では，スレッド制御テーブルへのスタック・ベース・レジスタ（ｓｂｒ）の値を退避し，また，スレッド実行時間などのスレッド制御テーブルの更新を行う。
【００６０】
以上のように，本システムは，▲１▼ＣＰＵ内にスタックへのアクセスを，相対的なアドレスで行わせる専用のベース・レジスタを設けること，▲２▼ネットワーク上で結合された計算機群または並列計算機で，（仮想）共有メモリ機構を使うとき，（仮想）共有メモリの対象にならないローカル・メモリ空間にスタック専用の相対アドレス空間を作ること，▲３▼アドレス空間を分割し，一部に専用のベース・レジスタを使った相対アドレス空間を作ることにより，共有メモリあるいは仮想共有メモリ機構を用いるシステムにおけるローカル・メモリ空間の有効利用が可能になる。
【００６１】
【発明の効果】
以上説明したように，本発明によれば，スタック空間をプロセッサ（ＣＰＵ）間で独立に扱うことができるので，適切にスレッドを各プロセッサに分配すると，全体として，スタック空間を（仮想）共有させた場合に可能な最大のスレッド数にプロセッサ数を掛けた数に近いスレッドを動かすことができ，より大規模な計算が可能となる。また，スレッド１個当たりのスタックの大きさをより大きくして，大きなデータをスタック上に置くことができるようになる。
【図面の簡単な説明】
【図１】  本発明の構成例を示す図である。
【図２】  本発明のＣＰＵのアドレス処理を説明する図である。
【図３】  本発明の実施例を示す図である。
【図４】  スレッド・スケジューラの処理フローチャートである。
【図５】  従来技術の問題点を説明する図である。
【符号の説明】
１０  ネットワーク
１１，１１’  プロセッサ
１２，１２’  ＣＰＵアドレス／論理アドレス変換回路
１３ａ〜１３ｄ  スレッド
１４  空間判別回路
１５  ベース・レジスタ
１６  加算回路
１７  アドレスレジスタ
【図１】
0003639366.tif 000002
【図２】
0003639366.tif 000003
【図３】
0003639366.tif 000004
【図４】
0003639366.tif 000005
【図５】
0003639366.tif 000006