(57)【特許請求の範囲】
【請求項１】
共用プログラムのテキスト部と、上記テキスト部と静的にリンクされた上記共用プログラムのデータ部とを仮想記憶空間内に配置し、上記仮想記憶空間内で上記共用プログラムを実行する環境である実行体を１以上有するプログラムの共用装置であって、
上記共用プログラムのデータ部に対応する上記実行体毎の一次記憶上あるいは二次記憶上の仮想記憶の内容である実体に関する情報を保持するデータ部実体管理テーブルと、
上記仮想記憶空間内に新たな共用プログラムを配置するとき、上記データ部実体管理テーブルに上記仮想記憶空間内に存在する実行体毎にデータ部実体管理情報を構築し、また、上記仮想記憶空間内に新たに実行体を生成するとき、上記仮想記憶空間に配置されている共用プログラムのデータ部に対応する上記実行体のデータ部実体管理情報を構築するデータ部実体管理情報構築手段と、
上記共用プログラムが動作する実行体の切り替えに同期して上記データ部実体管理テーブルの示す上記実行体のデータ部実体管理情報に基づいて実体を切り替えるデータ部実体切替手段と、
を備えることを特徴とするプログラムの共用装置。
【請求項２】
ページングを制御するページング制御部が、共用プログラムのデータ部の実体に対するページイン要求あるいはページアウト要求を検出したとき、
上記共用プログラムのデータ部のデータ部実体管理情報をページング制御部に通知するページングインターフェース手段を備えることを特徴とする請求項１記載のプログラムの共用装置。
【請求項３】
共用プログラムのテキスト部と、上記テキスト部と静的にリンクされた上記共用プログラムのデータ部とを仮想記憶空間内に配置し、上記仮想記憶空間内で上記共用プログラムを実行する環境である実行体を１以上有する計算機システムにおけるプログラムの共用方法であって、
上記共用プログラムのデータ部に対応する上記実行体毎の一次記憶上あるいは二次記憶上の仮想記憶の内容である実体に関する情報を保持するデータ部実体管理テーブルを設け、
上記仮想記憶空間内に新たな共用プログラムを配置するとき、上記データ部実体管理テーブルに上記仮想記憶空間内に存在する実行体毎にデータ部実体管理情報を構築するステップと、
上記仮想空間内に新たに実行体を生成するとき、上記仮想記憶空間に配置されている共用プログラムのデータ部に対応する上記実行体のデータ部実体管理情報を構築するステップと、
上記共用プログラムが動作する実行体の切り替えに同期して上記データ部実体管理テーブルの示す上記実行体のデータ部実体管理情報に基づいて実体を切り替えるステップと、
を有するプログラムの共用方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明はアドレス変換機構によって主記憶と仮想記憶の対応付けを行う仮想記憶方式のコンピュータにおける同一仮想空間内のプログラムの共用方式に関する。
【０００２】
【従来の技術】
最初に、仮想記憶システムにおけるプログラムの実行環境についてどのようになっていたかについて説明しながら、本発明の説明に使用する用語についても紹介していくことにする。
〔プログラムの実行（実行体の生成とプログラムの配置）〕
端末からコマンドを入力するなど、オペレーティングシステムが処理を依頼されて、新たな実行可能な形式のプログラム（オブジェクトプログラム、以下単にプログラムと呼ぶ）を実行する場合、オペレーティングシステムは、仮想空間および、この仮想空間内でプログラムを動作させるための環境（タスク、スレッドなどと呼ばれるもので、以下、これを実行体と呼ぶ）を作成し、この実行体内で走行させるプログラムを上記仮想空間内に配置（プログラムを配置するとは、二次記憶上のプログラムライブラリに存在するプログラムを仮想空間内の仮想アドレスでアクセスできる様な状態にすることである）し、配置したプログラム内に存在する入口点（そのプログラムを呼び出すときに制御が渡る命令の位置）に制御を渡すことによりプログラムを動作させる。
〔仮想空間へのプログラムの配置〕
ある実行体で、あるプログラムから別のプログラムを呼び出して処理を行う場合、これらのプログラムの配置方法には、大きくわけて二通りの方法がある。ひとつは、仮想空間を作成し、プログラムの入口点に制御を渡す前に、必要なプログラムをすべて配置してしまう方法である。もうひとつは、仮想空間を作成するときには、オペレーティングシステムが制御を渡す入口点を持つプログラムのみを配置し、そのプログラムの走行中に他のプログラムの呼び出しが発生した時点で、呼び出されるプログラムを配置する方法である。
〔ダイナミックリンカ〕
上記ふたつの方法とも、あるプログラムから別のプログラムへの呼び出しを行う場合、どのプログラムへ制御を渡すかを検索する機能（動的にプログラムを配置するもので、配置されていないプログラムをアクセスしたときに、これを検出して、オペレーティングシステムがプログラムライブラリを検索する。通常、この機能をダイナミックリンカと呼ぶ）が必要である。
【０００３】
上記前者の配置方法の場合、プログラムはすべて配置されているので、この機能は仮想空間内に配置済のプログラムの中から必要な入口点を検索し、制御を渡す。
【０００４】
上記の後者の配置方法の場合、すでに仮想空間内に配置されているプログラムから必要な入口点を検索し、入口点が存在する場合は制御を渡すが、必要な入口点が存在しない場合、二次記憶上のライブラリに存在するプログラムから必要な入口点が存在するプログラムを検索し、見つかったプログラムを仮想空間内に配置し、入口点に制御を渡す。
〔マルチタスク（マルチスレッド）環境でのプログラムの配置〕
ひとつの仮想空間内に複数の実行体が走行する環境（いわゆる、マルチタスク環境や、マルチスレッド環境のこと）では、上記仮想空間内にプログラムを配置する場合、以下の二通りの方法がある。
【０００５】
ひとつは、あるプログラムが同一仮想空間内に存在する複数の実行体で走行する場合、上記プログラムをその実行体の数だけ仮想空間内に配置する方法である。もうひとつはあるプログラムが同一仮想空間内に存在する複数の実行体で走行する場合でも、上記プログラムは上記仮想空間内にひとつだけ配置し、これを共用する方法である。
【０００６】
通常、プログラム内に情報を保持する変数（外部変数など）を更新するようなプログラムの場合、前者の方法を採用する。なぜなら、後者を採用した場合、そのプログラム内で行うデータの値を実行体どうしで破壊しあい、データの値を実行体毎に保証することができないからである。
【０００７】
【発明が解決しようとする課題】
プログラムは、命令コードなどが格納されている部分（以下、これをテキスト部と呼ぶ）と変数などのデータが格納されている部分（以下、これをデータ部と呼ぶ）とに大別できる。
【０００８】
ＵＮＩＸなどで採用されているＥＬＦ形式のように、一般的には、プログラムの入口点がテキスト部の中に存在する。このような形式のプログラムは、オペレーティングシステムからテキスト部の中に存在する入口点に制御を渡され、テキスト部の中に存在する命令コードを実行する。このとき、動作している命令コードでは、データ部の中に存在する変数などを参照したり更新したりする。
【０００９】
このため、上記のように入口点がテキスト部に存在する形式のプログラムの場合、命令コードの位置と、変数が格納されている位置との相対的な位置関係（オフセットという）が、プログラムを実行可能な形式にするとき（すなわち、リンクするとき）に決まっていなければならない。リンク後、すなわち、実行体の生成時、プログラムの配置時、プログラムに制御を渡す時などを契機に、動的に変更することは現実的にできない（つまり、上記場面を契機に毎回プログラム内に存在するすべての位置関係の情報を変更しなければならないということになるからである）。
【００１０】
ひとつの仮想空間内に複数の実行体が走行する環境（いわゆる、マルチタスク環境やマルチスレッド環境のこと）で、上記のような形式のプログラムを走行させるためには、必要なプログラムを実行体単位に上記仮想空間内に配置する必要がある。言い換えれば、あるプログラムが同一仮想空間内に存在する複数の実行体で走行する場合、上記プログラムをその実行体の数だけ仮想空間内に配置しなければならない。
【００１１】
なぜなら、仮に、仮想空間内に上記プログラムをひとつだけ配置し、複数の実行体でこのプログラムを走行させた場合、このプログラム内で参照、更新を行うデータの値を実行体どうしで破壊しあい、データの値を実行体毎に保証することができないからである。
【００１２】
このため、複数の実行体が走行する環境で、上記の形式のプログラムを走行させる場合、仮想空間内に複数の実行体毎に複数の同一プログラムを配置するために利用可能な仮想空間の領域を圧迫することになる。
【００１３】
これによって、ハード性能が向上したことの恩恵を受けるために、走行させるプログラムの多重度（すなわち実行体の数）を増やして処理を並列に行い性能の向上を考えた場合にも、上記の仮想空間内の領域の圧迫が原因で実現できない場合があるという問題があった。
【００１４】
本発明はこのような点にかんがみて、入口点がテキストの中に存在するプログラムを、同一仮想空間内に同一のプログラムをただ一つだけ配置し、上記仮想空間内の複数の実行体で共用することで、仮想空間内の仮想領域の圧迫を防止する手段を提供することを目的とする。
【００１５】
【課題を解決するための手段】
上記の課題は下記の如くに構成されたプログラムの共用装置によって解決される。
【００１６】
図１は、本発明の原理説明図である。
共用プログラムのテキスト部２ｓと、上記テキスト部２ｓと静的にリンクされた上記共用プログラムのデータ部３とを仮想空間４内に配置し、
上記仮想空間４内で上記共用プログラムを実行する環境すなわち実行体１ｓを１ａ、１ｂ、１ｃ・・・のように１以上有するプログラムの共用装置であって、２ａは上記実行体１ａ、１ｂ、１ｃに共用に唯一配置された共用プログラムテキスト部２ｓの実体であり、ＤＲＡ９ａ、ＤＲＢ９ｂ、ＤＲＣ９ｃは上記共用プログラムのデータ部３に対応する上記実行体１ａ、１ｂ、１ｃ毎の一次記憶上の実体を表すものであり、ＤＦＡ８ａ、ＤＦＢ８ｂ、ＤＦＣ８ｃは上記共用プログラムのデータ部３に対応する上記実行体１ａ、１ｂ、１ｃ毎の二次記憶上の実体を表すものである。
【００１７】
ＰＴＡ７ａ、ＰＴＢ７ｂ、ＰＴＣ７ｃは上記実行体１ａ、１ｂ、１ｃ毎に上記共用プログラムのデータ部３の実体が一次記憶上あるいは二次記憶上のいずれにあるかなど実体の所在を保持するテーブルであり、不図示の上記したデータ部実体管理テーブルにより関連付けられている。
【００１８】
実行体切替手段５は上記共用プログラムが動作する実行体１ａ、１ｂ、１ｃを切り替えるものであり、データ部実体切替手段６は上記実行体切替手段５に同期して上記データ部３の実体の所在を保持するテーブルＰＴＡ７ａ、ＰＴＢ７ｂ、ＰＴＣ７ｃを切り替えるものである。
【００１９】
共用プログラムのテキスト部２ｓと、上記テキスト部２ｓと静的にリンクされた上記共用プログラムのデータ部３とが仮想空間４に配置されて実行するとき、共用プログラムのテキスト部２ｓは実行環境である実行体１ａ、１ｂ、１ｃに共用のテキスト部の実体２ａとして唯一存在する。
【００２０】
テキスト部２ｓが参照、更新するべく仮想領域のデータ部３をアクセスするとき、データ部３の実体として一次記憶上の内容９ａ、９ｂ、９ｃあるいは二次記憶上の内容８ａ、８ｂ、８ｃを参照、更新するようにするために仮想領域と実体の所在を管理するテーブル７ａ、７ｂ、７ｃによりアドレス変換が行われる。
【００２１】
このとき、データ部３の実体は実行体１ａ、１ｂ、１ｃに対応したものを対象とするように、実行体切替手段５による実行体の切り替えに同期してデータ部実体切替手段６を動作させるようになっている。
【００２２】
このようにして、共用プログラムのテキスト部２ｓは唯一の実体２ａを使用し、データ部３は実行体１ａ、１ｂ、１ｃ毎に備えられた実体９ａ、９ｂ、９ｃあるいは８ａ、８ｂ、８ｃを使用して実行体毎の独立した処理を行うプログラムの共用が実現できることになる。
【００２３】
【発明の実施の形態】
図２に本発明の実施の形態の構成図を示す。
仮想記憶装置を備えるコンピュータシステムにおいて、複数の実行体（マルチタスクあるいはマルチスレッド）が存在するようにし、共用するプログラムの命令部であるテキスト部は仮想空間内に各実行体に共通なものとして唯一つのみが実体として存在するようにし、上記テキスト部が実行に際して参照するデータ部も見かけ上は仮想空間に一つのみが配置してある。
【００２４】
テキスト部の命令が実行されるとき、データ部の操作はどの実行体が動作中であっても、仮想空間上では静的にリンクされているデータ部の仮想アドレスは変わらない。
【００２５】
しかし、複数の実行体が行う処理内容は当然別のデータを用いて、別の環境において行うものとなるので、プログラムの命令部であるテキスト部は唯一つの実体を用いても、データ部については各実行体毎に異なるデータの実体を扱い、異なる入力に対して異なる出力を得るようにしなければならない。
【００２６】
このために通常のプログラムの管理に加えて共用プログラムの管理を行うために図２の点線２５０で囲んだような幾つかの手段を追加して備えるようにしている。
【００２７】
まず全体の構成について説明する。
２１０はプログラム管理部であり、プログラムライブラリから仮想空間への配置、回収に関する管理を行うものである。プログラム管理テーブル２１１はプログラムの配置、回収に関する情報を保持する。プログラム配置手段２１２はプログラムライブラリから仮想空間上で仮想アドレスでアクセスできるような状態にする。すなわち、仮想空間へのローディングを行うものである。前記したように、プログラムのローディングはプログラムが呼び出される度に行われたり、まとめて必要なプログラムを一括して配置したりするが、いずれにしてもこのプログラム配置手段２１２によって行われる。
【００２８】
プログラム回収手段２１３は配置したプログラムが仮想空間に存在する必要が無くなったときに呼び出されて指定されたプログラムを仮想空間から回収するものである。
【００２９】
上記のプログラムの配置や回収について、本発明の実施の形態におけるプログラムの共用を実現するために追加された手段を説明する前に実行体管理部２２０、実行体制御部２３０および仮想記憶装置に必須なページング制御部２４０について説明する。
【００３０】
実行体は上述したように、プログラムが動作する環境であり、通常複数の環境で複数のプログラムが同時並行的に進行するように複数の実行体が同時に設定される。
【００３１】
実行体生成手段２２１と実行体回収手段２２２は実行体を新たに作り出し、また、不要になった実行体を回収するものである。すなわち、新たな情報処理を行うときにはプログラムを動作させる環境を整える必要があり、実行体の生成が行われ、その上でプログラムの配置を行う。その逆が回収である。
【００３２】
複数の実行体は処理装置の数により同時に実行できる数が決まるが、どの実行体を動作させるか、その切り替えを行うものが実行体切替手段２３１である。実行体の切り替えのきっかけにはいくつかあるが、例えば、割当時間経過、入出力完了待ち、排他制御待ちなどがある。
【００３３】
ページング制御部２４０は仮想記憶の実体が一次記憶装置あるいは二次記憶に存在し、一次記憶装置を必要に応じてページ単位で交代で使用する仮想記憶装置の仕組みであり、ページイン要求処理手段２４１はページインが要求されたとき一次記憶装置のページ枠単位に空きページを探し、無いときは利用されていないページをページアウトしてからページインするなどの処理を行うものである。ページイン完了処理手段２４３はページインに伴う入出力の完了を確認するものである。同様に、ページアウト要求処理手段２４２、ページアウト完了処理手段２４４もページアウトの要求を処理するものである。
【００３４】
次に、プログラム共用のための追加手段２５０について説明する。
テキスト部実体管理テーブル２５３はテキスト部の実体に関連する情報を保持するものであり、プログラム識別情報、プログラムを配置した仮想空間識別情報すなわち多重仮想記憶装置の仮想空間の識別に用いるもの、プログラムを配置した仮想空間内のテキスト部の仮想アドレスと大きさ、さらに共用している実行体の実行体識別情報が含まれる。
【００３５】
テキスト部実体管理情報構築手段２５１は上記プログラム配置手段２１２により起動されるもので、新たに配置されるプログラムのテキスト部について上記テキスト部実体管理テーブル２５３に情報を設定し構築するものである。
【００３６】
テキスト部実体管理情報回収手段２５２は上記プログラム回収手段２１３により起動され、指定のプログラムのテキスト部の実体管理情報を回収するものである。
【００３７】
データ部実体管理テーブル２５６はデータ部の仮想領域とデータ部に対応する実行体ごとに設定する実体管理用仮想領域（後述）のアドレス、プログラムの識別情報、大きさおよび対応する実行体識別情報をプログラムと実行体の全ての組み合わせについて情報を保持するものである。
【００３８】
データ部実体管理情報構築手段２５４、データ部実体管理情報回収手段２５５によってデータ部実体管理テーブル２５６の情報の登録削除を行う。
データ部実体切替手段２５７は上記実行体切替手段２３１に同期して起動され、テキスト部がアクセスするデータ部の実体を切り替えるものである。
【００３９】
ページングインターフェース手段２５８は前述のページイン、ページアウト処理が発生したときに、ページテーブルにある状態表示で内容が共用するプログラムのデータ部の実体であることがわかるとページング制御部２４０から制御が渡されるもので、非同期に発生する実行体の切り替えに関わらずページングのＩ／Ｏ動作が正常に完了するように、対象の仮想アドレスの調整を行うものである。
【００４０】
次に、各テーブルの構成についてそれぞれの図および全体の構成を示す図２によって説明する。
図３はプログラム管理テーブルの説明図である。
【００４１】
プログラム管理テーブル２１１は図３に示すように、プログラムＩＤ（識別番号）３１、配置された仮想空間ＩＤ３２、配置された仮想領域のアドレス（Ｓ−Ｐ−Ｄの形式でセグメント番号、ページ番号、ページ内変位を表す。以下同様）３３、領域の大きさ３４、プログラムの構成３６を含む。
【００４２】
図３には２つのプログラムＰＧ１、ＰＧ２が配置されている状態を示している。仮想領域アドレスはそれぞれ１１−０−０、１３−０−０となっておりセグメント番号１１と１３の先頭を示している。領域の大きさは８ＫＢ、７ＫＢを表している。
【００４３】
図４はテキスト部実体管理テーブルの説明図である。
上記と同様の形式であり、ＰＧ１とＰＧ２のテキスト部について記されている。テキスト部は実行体すべてに共通として使用するので実行体ＩＤの情報はないが、共用している実行体ＩＤのリストは後述の図６実行体管理テーブルに保持する。
【００４４】
図５はデータ部実体管理テーブルの説明図である。
上記に加えて対応する実行体ＩＤ５６と実体管理用仮想領域アドレス５７が項目として設定されている。複数の行が記入してあるが、これは、まず、実行体としてＴ０１、Ｔ０２、Ｔ０３が設定されていたときにプログラムＰＧ１がプログラム配置手段２１２により配置されて最初の３行の情報が設定されている。すなわち、ＰＧ１に対して実行体Ｔ０１、Ｔ０２、Ｔ０３が対応し、プログラムのデータ部仮想領域アドレス５３は４−０−０で同一の仮想領域アドレスを示している。
【００４５】
実体管理用仮想領域アドレス５７は各プログラムのデータ部の領域と同じ大きさの仮想領域をそれぞれ別セグメントにとっている。上記の例ではセグメント１、３、１４である。この実体管理用仮想領域はデータ部の実体を実行体毎に用意して各実行体が動作するときにデータ部の仮想領域アドレス５３が示す領域にプログラムのテキスト部の命令がアクセスすると実際はこの実体管理用仮想領域アドレス５７の示す領域に対応する実体にアクセスすることになるようにしている。
【００４６】
２番目に配置されたプログラムＰＧ２についても次の３行に同様に実行体Ｔ０１、Ｔ０２、Ｔ０３に対応して情報が記録されている。この様な状態のときに、新規に実行体Ｔ０４が生成されて最後の２行の情報が作られた。すなわち、存在していたプログラムＰＧ１、ＰＧ２について実行体Ｔ０４用に実体管理用仮想領域が確保されセグメント８、９として記録されている。
【００４７】
以上のようにプログラムＰＧ１、ＰＧ２と実行体Ｔ０１、Ｔ０２、Ｔ０３、Ｔ０４の組み合わせ全てについて情報が発生したことになる。
図６は実行体管理テーブルの説明図である。
【００４８】
仮想空間ＩＤ６１毎に１つのテーブルを設定し、現在設定されている実行体の個数６２と実行体ＩＤのリスト６３の情報を保持する。これは、例えば新規にプログラムを配置するとき存在する実行体の全てについてデータ部実体管理テーブル２５６に情報を構築する必要があるときに必要となるものである。
【００４９】
図７はセグメントテーブルとページテーブルの構成の説明図である。
（ａ）に示すセグメントテーブルは前段のテーブル７１から起点アドレスを示される。セグメント番号７２に対応して（ｃ）、（ｄ）に示すページテーブルのアドレス７３が示される。図５のデータ部実体管理テーブル２５６に示したプログラムＩＤ５１がＰＧ１の実行体Ｔ０１とＴ０２についてセグメントテーブルとページテーブルの関係を矢印７９ａ、７９ｂで示している。
【００５０】
ＰＧ１のデータ部仮想領域アドレス５３は４−０−０となっており領域のセグメント番号は４である。また、実体管理用仮想領域アドレス５７はプログラムＩＤがＰＧ１、実行体ＩＤがＴ０１に対して１−０−０でありセグメント番号は１である。さらに、Ｔ０２に対応した実体管理用仮想領域アドレス５７は３−０−０でセグメント番号は３である。
【００５１】
図７（ａ）のセグメントテーブルのセグメント番号４に示されているページテーブルアドレス７３ｚは本来７９ｚによりページテーブル７４が指し示されるものであるが、プログラムを共用するために本来のページテーブル７４は作られず、実行体切替手段２３１と同期してデータ部実体切替手段２５７が働き、７３ｚにはセグメント番号１に対応して図７（ｃ）またはセグメント番号３に対応して図７（ｄ）に示す実体管理用仮想領域ページテーブルを指し示すアドレスが書き込まれる。このように７３ｚからのポインタは７８ａまたは７８ｂのようになる。
【００５２】
上記のようにセグメントテーブルのデータ部のセグメント番号に対応するページテーブルのポインタを書き換えることによりデータ部の実体を示すページテーブルを切り替えるようにしている。
【００５３】
図８はページテーブルエントリの説明図である。
（ａ）、（ｂ）によりセグメントテーブルとページテーブルの関係を示している。ページは２つのエントリからなり、固定の間隔、ここでは１６進で１００番地の距離だけ離れて配置してある。エントリ１はハード関連情報、エントリ２にはソフト関連情報が格納してある。実体の存在場所に関する情報はエントリ１、エントリ２の双方の情報で判断する。
【００５４】
具体的にはエントリ１は図（ｃ）に示すように、仮想ページに対応する一次記憶上の実ページが存在するか否かの情報８６ａと存在する場合には実ページのページアドレス８７ａとその他の情報として属性Ｈ８８ａにアクセス権、参照、更新の状況を保持する。
【００５５】
（ｄ）のエントリ２には実体が二次記憶上に存在するか否かの情報８６ｂと存在する場合には媒体上のブロックアドレス８７ｂ、その他属性Ｈ８８ｂとしてページイン中、ページアウト中の状態表示や共用プログラムのデータ領域であることの表示などを保持する。
【００５６】
以上のようなテーブルを使用して如何に動作するかをフローチャートを用いて説明する。
図９はテキスト部実体管理情報の構築フローチャートである。
【００５７】
テキスト部実体管理情報構築手段２５１は上記したようにプログラム配置手段２１２から起動され、テキスト部実体管理テーブル２５３にテキスト部の実体に関する情報を記録するものであり、その動作を説明する。
【００５８】
ステップＳ９１では情報を記入する空行を探す。ステップＳ９２では、上記空行に与えられた情報として配置するプログラムのテキスト部の実体管理情報を図４のように設定する。
【００５９】
ステップＳ９３では図４の４４に記入したテキスト部の仮想領域の大きさに対応したページテーブルの領域を獲得してページテーブルを構築する。ページテーブルには実体情報を設定する。プログラムのテキスト部が配置されたときは最初は二次記憶上に存在するのでエントリ１には実ページが存在しないとしてブランクとし、エントリ２にはプログラム配置手段２１２から受け取ったテキスト部の格納ブロックアドレスを記録する。
【００６０】
ステップＳ９５においてはセグメントテーブルに、構築したページテーブルのアドレスを設定する。
図１０にはテキスト部実体管理情報の回収フローチャートを示す。
【００６１】
ステップＳ１ではテキスト部実体管理テーブル２５３をプログラムＩＤで検索して対応の記入行をさがす。
ステップＳ２で図４の仮想領域アドレス４３のセグメント番号からセグメントテーブルにあるページテーブルアドレスを得て、ステップＳ３でセグメントテーブルの標識を無効としてページテーブルが無いことを示し、ステップＳ４ではページテーブルの領域を返却する。ステップＳ５でテキスト部実体管理テーブル２５３の１行を空きに戻す。
【００６２】
図１１にはデータ部実体管理情報の構築フローチャート（その１）を示す。
データ部実体管理情報構築手段２５４がプログラム配置手段２１２から起動された場合の動作を示す。
【００６３】
ステップＳ１０１で図６の実行体管理テーブルのポインタを先頭に設定する。ステップＳ１０２で図５のデータ部実体管理テーブル２５６のポインタを空行の先頭に設定する。
【００６４】
ステップＳ１０３でデータ部実体管理テーブル２５６にプログラムＩＤ、仮想空間ＩＤなどの情報を設定する。ステップＳ１０４ではポインタで示される実行体管理テーブルの実行体ＩＤ用の実体管理用仮想領域をデータ部仮想領域の大きさ５４と同じ仮想領域を獲得し、ステップＳ１０５で実体管理用仮想領域アドレス５７に設定する。
【００６５】
ステップＳ１０６でデータ部の領域の大きさ５４に対応したページテーブルの領域を獲得し、ステップＳ１０７でエントリを初期値として二次記憶上に実体があるように設定する。
【００６６】
ステップＳ１０８では実体管理用仮想領域のセグメント番号に対応してセグメントテーブルにページテーブルアドレスを設定する。
ステップＳ１０９で、図６の実行体管理テーブルのポインタが示す実行体ＩＤをデータ部実体管理テーブルの５６に設定する。
【００６７】
ステップＳ１１０で全ての実行体について処理終了したかを確認する。まだ終了していないときはステップＳ１１１で実行体管理テーブルのポインタを進め、データ部実体管理テーブルのポインタを次の空行に進めてステップＳ１０３からくり返す。
【００６８】
図１２には実行体生成手段２２１から起動されたときのデータ部実体管理情報構築手段の動作のフローチャートを示してある。
ステップＳ２０１において図３のプログラム管理テーブル２１１についてポインタを先頭に設定し、データ部実体管理テーブル２５６のポインタを空行の先頭に設定する。
【００６９】
ステップＳ２０２では図３のプログラム管理テーブル２１１のポインタが示すプログラムについてプログラム管理テーブル２１１の情報をデータ部実体管理テーブル２５６に仮想空間ＩＤ、仮想領域アドレス、仮想領域の大きさをコピーする。
【００７０】
ステップＳ２０３は実行体生成手段２２１から受けた生成する実行体ＩＤを実行体ＩＤ５６に設定する。
ステップＳ２０４では上記実行体ＩＤに対応して実体管理用仮想領域を確保し、ステップＳ２０５で実体管理用仮想アドレス５７に設定する。
【００７１】
ステップＳ２０６ではデータ部の領域の大きさに対応したページテーブルを構築して、ステップＳ２０７でエントリの初期値を記入する。実体の初期値は二次記憶にあると設定する。
【００７２】
ステップＳ２０８においてセグメントテーブルに上記確保した実体管理用仮想領域のセグメント番号に対応して構築したページテーブルのアドレスを設定する。
【００７３】
ステップＳ２０９ではプログラム管理テーブルに存在するすべてのプログラムについて処理が終了したかを確認する。終了ではないときはポインタを進めステップＳ２０２から次のプログラムについて情報を構築する。
【００７４】
図１３はデータ部実体管理情報の回収フローチャート（その１）である。データ部実体管理情報回収手段２５５はプログラム回収手段２１３および実行体回収手段２２２から起動されるが、（その１）ではプログラム回収手段２１３から起動される場合の動作を説明する。
【００７５】
ステップＳ３１では呼出元から回収すべきプログラムのＩＤを得る。ステップＳ３２でデータ実体管理テーブル２５６の先頭にポインタを設定する。
ステップＳ３３で図５のデータ部実体管理テーブル２５６におけるポインタの示す行のプログラムＩＤ５１が上記プログラムＩＤと同じかを調べる。回収すべきプログラムＩＤであればステップＳ３４で図５における５７が示す実体管理用仮想領域アドレスのセグメント番号の指し示すページテーブルの領域を返却し、ステップＳ３５で上記実体管理用仮想領域を返却する。
【００７６】
ステップＳ３６とステップＳ３７ですべての行についてデータ部実体管理テーブルのプログラムＩＤを調べるようにしている。
図１４のデータ部実体管理情報の回収フローチャート（その２）ではデータ部実体管理情報回収手段２５５が実行体回収手段２２２から起動されたときの動作を示している。
【００７７】
ステップＳ４１で呼出元から指定された回収する実行体のＩＤを得る。ステップＳ４２でデータ部実体管理テーブル２５６の先頭にポインタを設定する。
ステップＳ４３でポインタの示す実行体ＩＤが上記ＩＤと一致するかを調べ、回収するものであるときはステップＳ４４で実体管理用仮想領域を返却、ステップＳ４５でページテーブルの領域を返却している。ステップＳ４６とステップＳ４７でデータ部実体管理テーブルの全行についての処理を行うように繰り返しを指定している。
【００７８】
図１５はデータ部実体切替手段のフローチャートを示している。
データ部実体切替手段２５７は実行体切替手段２３１が実行体を切り替えるときに同期して起動される。呼び出し元からの情報としてステップＳ５１で新たに切り替える実行体のＩＤを得る。ステップＳ５２でポインタをデータ部実体管理テーブル２５６の先頭に位置づける。
【００７９】
ステップＳ５３でポインタの示す行の実行体ＩＤ５６が新たに切り替わるＩＤと一致するものかを調べる。実行体ＩＤが一致したときにはステップＳ５４で、その行にある実体管理用仮想領域アドレス５７で示される領域はプログラムＩＤ５１で示されるプログラムが新たな実行体で使用するデータ部の実体に対応するものであるのでこれをプログラムがアクセスするようにするために、実体管理用仮想領域アドレス５７が示すアドレスのセグメント番号からセグメントテーブルにあるページテーブルのアドレスを得て、データ部の仮想領域アドレス５３の示すセグメント番号に対応するページテーブルアドレスを書き替える。
【００８０】
ステップＳ５５、ステップＳ５６で以上の処理をデータ部実体管理テーブル２５６に存在する全行について実行するようにしている。
図１６にはページングインタフェース手段のフローチャートを示す。
【００８１】
ページングインタフェース手段２５８は共用するプログラムのデータ部の実体に対してページングが発生することを検出したページ制御部２４０が起動するものである。
【００８２】
ステップＳ６１でインタフェース条件としてデータ部仮想領域アドレスと実行体ＩＤを得る。ステップＳ６２でポインタをデータ部実体管理テーブル２５６の先頭行に設定する。
【００８３】
ステップＳ６３とステップＳ６４で上記インタフェース条件が合うものかどうかを調べる。すなわち、データ部仮想領域アドレス５３と実行体ＩＤ５６について両方が一致する場合ポインタが示す実体管理用仮想領域アドレス５７をページング対象アドレスとして呼出元のページング制御部２４０に返す。
【００８４】
【発明の効果】
以上の説明から明らかなように本発明によれば、仮想記憶を使用したコンピュータにおいて並行して実行される共通の処理内容の情報処理を、仮想空間に配置した共通のプログラムを共用することが実現でき、特に大規模な処理を多数同時に実行させるようなオンライン処理、通信処理などに関して、より大量に処理することができるようになり、経済性の向上、処理能力の向上、という著しい工業的効果がある。
【図面の簡単な説明】
【図１】  本発明の原理説明図
【図２】  本発明の実施の形態の構成図
【図３】  プログラム管理テーブルの説明図
【図４】  テキスト部実体管理テーブルの説明図
【図５】  データ部実体管理テーブルの説明図
【図６】  実行体管理テーブルの説明図
【図７】  セグメントテーブルとページテーブルの構成の説明図
【図８】  ページテーブルエントリの説明図
【図９】  テキスト部実体管理情報の構築フローチャート
【図１０】  テキスト部実体管理情報の回収フローチャート
【図１１】  データ部実体管理情報の構築フローチャート（その１）
【図１２】  データ部実体管理情報の構築フローチャート（その２）
【図１３】  データ部実体管理情報の回収フローチャート（その１）
【図１４】  データ部実体管理情報の回収フローチャート（その２）
【図１５】  データ部実体切替手段のフローチャート
【図１６】  ページングインタフェース手段のフローチャート
【符号の説明】
１ｓ、１ａ、１ｂ、１ｃ  実行体
２ｓ、２ａ  共用プログラムテキスト部
３  共用プログラムデータ部
４  仮想空間
５  実行体切替手段
６  データ部実体切替手段
７ａ、７ｂ、７ｃ  実体の所在を保持するテーブル
８ａ、８ｂ、８ｃ  二次記憶上のデータ部の実体
９ａ、９ｂ、９ｃ  一次記憶上のデータ部の実体
【図１】
0003644078.tif 000002
【図２】
0003644078.tif 000003
【図３】
0003644078.tif 000004
【図４】
0003644078.tif 000005
【図５】
0003644078.tif 000006
【図６】
0003644078.tif 000007
【図７】
0003644078.tif 000008
【図８】
0003644078.tif 000009
【図９】
0003644078.tif 000010
【図１０】
0003644078.tif 000011
【図１１】
0003644078.tif 000012
【図１２】
0003644078.tif 000013
【図１３】
0003644078.tif 000014
【図１４】
0003644078.tif 000015
【図１５】
0003644078.tif 000016
【図１６】
0003644078.tif 000017