JPH10320203A - 共有メモリシステム - Google Patents
共有メモリシステムInfo
- Publication number
- JPH10320203A JPH10320203A JP13152597A JP13152597A JPH10320203A JP H10320203 A JPH10320203 A JP H10320203A JP 13152597 A JP13152597 A JP 13152597A JP 13152597 A JP13152597 A JP 13152597A JP H10320203 A JPH10320203 A JP H10320203A
- Authority
- JP
- Japan
- Prior art keywords
- virtual function
- shared
- address
- class
- pointer
- 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
- 230000006870 function Effects 0.000 claims abstract description 44
- 238000000034 method Methods 0.000 claims abstract description 24
- 238000010586 diagram Methods 0.000 description 2
- FFBHFFJDDLITSX-UHFFFAOYSA-N benzyl N-[2-hydroxy-4-(3-oxomorpholin-4-yl)phenyl]carbamate Chemical compound OC1=C(NC(=O)OCC2=CC=CC=C2)C=CC(=C1)N1CCOCC1=O FFBHFFJDDLITSX-UHFFFAOYSA-N 0.000 description 1
- 238000007796 conventional method Methods 0.000 description 1
- 230000001771 impaired effect Effects 0.000 description 1
Landscapes
- Memory System Of A Hierarchy Structure (AREA)
Abstract
(57)【要約】
【課題】 オブジェクト指向システムの仮想関数を持つ
クラスのオブジェクトを複数のアプリケーションプロセ
スが共有するには、仮想関数テーブルのアドレスが各プ
ログラムによって異なるため、仮想関数を使えない。 【解決手段】 プロセス1と2の仮想関数テーブルのア
ドレスをオブジェクトを共有するすべてのプログラムで
同じにする。
クラスのオブジェクトを複数のアプリケーションプロセ
スが共有するには、仮想関数テーブルのアドレスが各プ
ログラムによって異なるため、仮想関数を使えない。 【解決手段】 プロセス1と2の仮想関数テーブルのア
ドレスをオブジェクトを共有するすべてのプログラムで
同じにする。
Description
【0001】
【発明の属する技術分野】本発明は、オブジェクト指向
システムのオブジェクトのような複雑な参照関係を持つ
データを共有するための共有メモリシステムに係り、特
に仮想関数を持つクラスのオブジェクトを共有するため
の共有メモリシステムに関する。
システムのオブジェクトのような複雑な参照関係を持つ
データを共有するための共有メモリシステムに係り、特
に仮想関数を持つクラスのオブジェクトを共有するため
の共有メモリシステムに関する。
【0002】
【従来の技術】オブジェクト指向システムでは、複雑な
参照関係をもつオブジェクト構造を協調して働く複数の
プロセスから同時に参照・更新できることが求められ
る。
参照関係をもつオブジェクト構造を協調して働く複数の
プロセスから同時に参照・更新できることが求められ
る。
【0003】現在、このような共有オブジェクトは市販
のオブジェクト指向データベース管理システム(0bj
ect 0riented Data Base Ma
nagement System,OODBMS)を使
って実現されている。
のオブジェクト指向データベース管理システム(0bj
ect 0riented Data Base Ma
nagement System,OODBMS)を使
って実現されている。
【0004】オブジェクトの参照関係は、単純にはC+
+言語のポインタを用いて実現できる。しかし、市販の
OODBMSでは、図4に示すように、特別な参照構造
(レファレンス)を作って参照関係をアプリケーション
プロセスのアドレス空間から独立させている。
+言語のポインタを用いて実現できる。しかし、市販の
OODBMSでは、図4に示すように、特別な参照構造
(レファレンス)を作って参照関係をアプリケーション
プロセスのアドレス空間から独立させている。
【0005】この方法ではCPUのアドレス空間を超え
る大きなオブジェクト構造を作れるなどのメリットもあ
るが、内部的には参照をたどるたびにポインタを計算す
るような形になるのでオーバーヘッドが大きい。また、
使い慣れたポインタの代わりにOODBM特有のレファ
レンスを使用するのでコードが書きにくい問題もある。
る大きなオブジェクト構造を作れるなどのメリットもあ
るが、内部的には参照をたどるたびにポインタを計算す
るような形になるのでオーバーヘッドが大きい。また、
使い慣れたポインタの代わりにOODBM特有のレファ
レンスを使用するのでコードが書きにくい問題もある。
【0006】上記の欠点を補うため、参照構造を言語機
能に隠してポインタ同様に扱えるようにし、さらにOS
の仮想記憶機構を利用してポインタ計算をぺ一ジ(仮想
記憶の入れ替え単位)ごとに一括して行うようにしてい
るものもある(例:0bjectStore(T
M))。
能に隠してポインタ同様に扱えるようにし、さらにOS
の仮想記憶機構を利用してポインタ計算をぺ一ジ(仮想
記憶の入れ替え単位)ごとに一括して行うようにしてい
るものもある(例:0bjectStore(T
M))。
【0007】この場合は、図5に示すように、べ一ジの
ロード(実メモリへの読み込み)時にだけポインタ計算
が行われるのでアクセスごとに計算するよりは効率がよ
い。
ロード(実メモリへの読み込み)時にだけポインタ計算
が行われるのでアクセスごとに計算するよりは効率がよ
い。
【0008】現状のシステムでは、参照へのアクセスご
と、あるいはべ一ジのロードごとにポインタ計算が必要
で参照関係を利用するためのオーバーへッドが大きい。
頻繁に参無関係を追うシステムや性能を要求されるリア
ルタイムシステムではこのオーバーヘッドは無視できな
い。
と、あるいはべ一ジのロードごとにポインタ計算が必要
で参照関係を利用するためのオーバーへッドが大きい。
頻繁に参無関係を追うシステムや性能を要求されるリア
ルタイムシステムではこのオーバーヘッドは無視できな
い。
【0009】また、ページごとにポインタ計算をする方
法では、実メモリ上に存在するページの内容はプロセス
ごとにポインタ値が異なるものになるため、実メモリ上
のページ実体をプロセス間で共有するこどができず、実
メモリの利用効率が悪い。
法では、実メモリ上に存在するページの内容はプロセス
ごとにポインタ値が異なるものになるため、実メモリ上
のページ実体をプロセス間で共有するこどができず、実
メモリの利用効率が悪い。
【0010】これらの事情から、複数のアプリケーショ
ンプロセスから共有メモリのデータを参照するにおい
て、共有メモリをマッピングするアドレスを固定とし、
各アプリケーションプロセスによるデータの参照をポイ
ンタ値で行う共有オブジェクトシステムがある。
ンプロセスから共有メモリのデータを参照するにおい
て、共有メモリをマッピングするアドレスを固定とし、
各アプリケーションプロセスによるデータの参照をポイ
ンタ値で行う共有オブジェクトシステムがある。
【0011】このシステムでは、図6に示すように、プ
ロセス1及びプロセス2がディスクで示す共有メモリ3
のオブジェクトデータを共有するのに、固定アドレスで
参照できる。こうすることで、オブジェクトはすべての
プロセスから同じアドレスに見え、参照関係を単なるポ
インタで構築することができる。これにより、 (1)参照関係を作るのに特別なデータ構造(レファレ
ンス)を使う必要がなくなる。
ロセス1及びプロセス2がディスクで示す共有メモリ3
のオブジェクトデータを共有するのに、固定アドレスで
参照できる。こうすることで、オブジェクトはすべての
プロセスから同じアドレスに見え、参照関係を単なるポ
インタで構築することができる。これにより、 (1)参照関係を作るのに特別なデータ構造(レファレ
ンス)を使う必要がなくなる。
【0012】(2)アクセスのためにポインタ計算をす
る必要がなくなる。
る必要がなくなる。
【0013】(3)実メモリ上のべ一ジをプロセス間で
共有でき、実メモリの利用効率が良くなる。
共有でき、実メモリの利用効率が良くなる。
【0014】
【発明が解決しようとする課題】従来の固定アドレスに
よる参照を行う共有メモリシステムでは、下記の事情に
より、仮想関数を持つクラスのオブジェクトを共有する
場合に不都合がある。
よる参照を行う共有メモリシステムでは、下記の事情に
より、仮想関数を持つクラスのオブジェクトを共有する
場合に不都合がある。
【0015】C++の仮想関数は、基底クラスのメソッ
ド(仮想関数)を導出クラスで再定義(オーバライド)
している場合に、導出クラスのオブジェクトを参照する
基底クラスのポインタからメソッドを呼出したとき、導
出クラスで再定義した関数が呼出されるようにする機能
である。
ド(仮想関数)を導出クラスで再定義(オーバライド)
している場合に、導出クラスのオブジェクトを参照する
基底クラスのポインタからメソッドを呼出したとき、導
出クラスで再定義した関数が呼出されるようにする機能
である。
【0016】これを実現するために、コンパイラは仮想
関数を持つクラスのオブジェクトに(プログラマから)
隠れた変数を用意し、オブジェクトの所属クラスを識別
する情報を保持する。この情報は、通常、クラスの仮想
関数テーブル(仮想関数エントリを記述した配列)への
ポインタであり、クラスのコンストラクタ(構築子)の
中で正しく初期化される。そして、仮想関数呼出しは、
図7に示すように、aの参照→ポインタ*aの参照→隠
れた変数による仮想関数テーブルの参照→仮想関数のイ
ンデックス参照により、その仮想関数エントリへのジャ
ンプと、仮想関数実体へのジャンプになる二重ジャンプ
として実装される。
関数を持つクラスのオブジェクトに(プログラマから)
隠れた変数を用意し、オブジェクトの所属クラスを識別
する情報を保持する。この情報は、通常、クラスの仮想
関数テーブル(仮想関数エントリを記述した配列)への
ポインタであり、クラスのコンストラクタ(構築子)の
中で正しく初期化される。そして、仮想関数呼出しは、
図7に示すように、aの参照→ポインタ*aの参照→隠
れた変数による仮想関数テーブルの参照→仮想関数のイ
ンデックス参照により、その仮想関数エントリへのジャ
ンプと、仮想関数実体へのジャンプになる二重ジャンプ
として実装される。
【0017】問題は、仮想関数テーブルのアドレスが各
プログラムによって異なるという点にある。この関係
は、図8に示し、あるプログラムで生成されたオブジェ
クトのクラス情報は、他のプログラムから見ると実際の
仮想関数テーブルとは全く無関係のところを指すポイン
タに見える可能性がある。その結果は、システムダウン
から一見正常に見える動作まで何が起きてもおかしくな
い。したがって、共有オブジェクトに対して仮想関数は
全く使えないことになる。
プログラムによって異なるという点にある。この関係
は、図8に示し、あるプログラムで生成されたオブジェ
クトのクラス情報は、他のプログラムから見ると実際の
仮想関数テーブルとは全く無関係のところを指すポイン
タに見える可能性がある。その結果は、システムダウン
から一見正常に見える動作まで何が起きてもおかしくな
い。したがって、共有オブジェクトに対して仮想関数は
全く使えないことになる。
【0018】本発明の目的は、仮想関数を持った共有オ
ブジェクトを保存すること及び共有オブジェクトからの
仮想関数の呼出しも可能にした共有メモリシステムを提
供することにある。
ブジェクトを保存すること及び共有オブジェクトからの
仮想関数の呼出しも可能にした共有メモリシステムを提
供することにある。
【0019】
【課題を解決するための手段】本発明は、仮想関数テー
ブルのアドレスを固定することで共有オブジェクトの仮
想関数を使用可能にするもので、以下の構成を特徴とす
る。
ブルのアドレスを固定することで共有オブジェクトの仮
想関数を使用可能にするもので、以下の構成を特徴とす
る。
【0020】オブジェクト指向システムの仮想関数を持
つクラスのオブジェクトを複数のアプリケーションプロ
セスが共有する共有メモリシステムにおいて、前記仮想
関数を持つクラスのオブジェクトを参照するための前記
各アプリケーションプロセスの仮想関数テーブルのアド
レス空間を同じにしたことを特徴とする。
つクラスのオブジェクトを複数のアプリケーションプロ
セスが共有する共有メモリシステムにおいて、前記仮想
関数を持つクラスのオブジェクトを参照するための前記
各アプリケーションプロセスの仮想関数テーブルのアド
レス空間を同じにしたことを特徴とする。
【0021】また、前記共有オブジェクトのクラスを固
定アドレスの共有ライブラリで作成することにより各プ
ロセスのアドレス空間を同じにすることを特徴とする。
定アドレスの共有ライブラリで作成することにより各プ
ロセスのアドレス空間を同じにすることを特徴とする。
【0022】
【発明の実施の形態】本発明の実施形態では、図1に示
すように、プロセス1及び2の仮想関数テーブルのアド
レスをオブジェクトを共有するすべてのプログラムで同
じにする。
すように、プロセス1及び2の仮想関数テーブルのアド
レスをオブジェクトを共有するすべてのプログラムで同
じにする。
【0023】このためには、図2に示すように、共有オ
ブジェクトを作るクラスで仮想関数を持つものをロード
アドレスを固定にした共有ライブラリとして作成するこ
とで実現される。
ブジェクトを作るクラスで仮想関数を持つものをロード
アドレスを固定にした共有ライブラリとして作成するこ
とで実現される。
【0024】例えば、WindowsNTのMS−Vi
sual C++環境では、仮想関数を持つクラスをロ
ードアドレスを固定したDLL(DynamicLin
kLibrary)に記述すればよい。DLLは、プロ
ジェクトの設定で、リンク指定に/base:xxxx
xx(xxxxxxは具体的なアドレス)でベースアド
レスを指定し、/fixedでリロケーション(アドレ
ス再配置)を禁止する。
sual C++環境では、仮想関数を持つクラスをロ
ードアドレスを固定したDLL(DynamicLin
kLibrary)に記述すればよい。DLLは、プロ
ジェクトの設定で、リンク指定に/base:xxxx
xx(xxxxxxは具体的なアドレス)でベースアド
レスを指定し、/fixedでリロケーション(アドレ
ス再配置)を禁止する。
【0025】画面設定での設定方法は、図3に示すよう
にベースアドレスを設定し、リロケーション禁止(/f
ixed)は、画面の設定項目にないため、Commo
nオプションに直接に書込んで設定する。なお、設定対
象になるDebug及びReleaseの両方を選択し
たままでは書込めないため、個別に書込んで設定する。
にベースアドレスを設定し、リロケーション禁止(/f
ixed)は、画面の設定項目にないため、Commo
nオプションに直接に書込んで設定する。なお、設定対
象になるDebug及びReleaseの両方を選択し
たままでは書込めないため、個別に書込んで設定する。
【0026】
【発明の効果】以上のとおり、本発明によれば、仮想関
数テーブルのアドレスを固定することとしたため、共有
オブジェクトシステムにおけるポインタによる参照構
造、アドレス計算不要、実メモリの共有機能を損なうこ
となく、仮想関数を持った共有オブジェクトを保存する
こと及び共有オブジェクトからの仮想関数の呼出しも可
能になる。
数テーブルのアドレスを固定することとしたため、共有
オブジェクトシステムにおけるポインタによる参照構
造、アドレス計算不要、実メモリの共有機能を損なうこ
となく、仮想関数を持った共有オブジェクトを保存する
こと及び共有オブジェクトからの仮想関数の呼出しも可
能になる。
【図1】本発明の実施形態を示すアドレス一定の仮想関
数テーブル構造。
数テーブル構造。
【図2】実施形態における共有ライブラリによるテーブ
ル作成。
ル作成。
【図3】実施形態におけるDLL設定画面。
【図4】従来のレファレンスによる共有オブジェクトの
参照。
参照。
【図5】従来のロード時にポインタ計算をする方法。
【図6】従来の固定アドレス構造。
【図7】仮想関数の呼出しと仮想関数テーブルの説明
図。
図。
【図8】仮想関数テーブルのアドレス不明の説明図。
Claims (2)
- 【請求項1】 オブジェクト指向システムの仮想関数を
持つクラスのオブジェクトを複数のアプリケーションプ
ロセスが共有する共有メモリシステムにおいて、 前記仮想関数を持つクラスのオブジェクトを参照するた
めの前記各アプリケーションプロセスの仮想関数テーブ
ルのアドレス空間を同じにしたことを特徴とする共有メ
モリシステム。 - 【請求項2】 前記共有オブジェクトのクラスを固定ア
ドレスの共有ライブラリで作成することにより各プロセ
スのアドレス空間を同じにしたことを特徴とする請求項
1に記載の共有メモリシステム。
Priority Applications (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP13152597A JPH10320203A (ja) | 1997-05-22 | 1997-05-22 | 共有メモリシステム |
Applications Claiming Priority (1)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| JP13152597A JPH10320203A (ja) | 1997-05-22 | 1997-05-22 | 共有メモリシステム |
Publications (1)
| Publication Number | Publication Date |
|---|---|
| JPH10320203A true JPH10320203A (ja) | 1998-12-04 |
Family
ID=15060110
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP13152597A Pending JPH10320203A (ja) | 1997-05-22 | 1997-05-22 | 共有メモリシステム |
Country Status (1)
| Country | Link |
|---|---|
| JP (1) | JPH10320203A (ja) |
Cited By (6)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7246135B2 (en) * | 2001-01-08 | 2007-07-17 | Intel Corporation | Sharing classes between programs |
| US8495601B2 (en) | 2010-06-09 | 2013-07-23 | Lear Corporation | Shared memory architecture |
| US8539472B2 (en) | 2010-06-09 | 2013-09-17 | Lear Corporation | Method and system of updating shared memory |
| JP2013542497A (ja) * | 2010-09-24 | 2013-11-21 | インテル コーポレイション | 計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有 |
| JP2015038770A (ja) * | 2014-10-23 | 2015-02-26 | インテル コーポレイション | 計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有 |
| JP2016157445A (ja) * | 2016-03-10 | 2016-09-01 | インテル コーポレイション | 計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有 |
-
1997
- 1997-05-22 JP JP13152597A patent/JPH10320203A/ja active Pending
Cited By (11)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US7246135B2 (en) * | 2001-01-08 | 2007-07-17 | Intel Corporation | Sharing classes between programs |
| US8495601B2 (en) | 2010-06-09 | 2013-07-23 | Lear Corporation | Shared memory architecture |
| US8539472B2 (en) | 2010-06-09 | 2013-09-17 | Lear Corporation | Method and system of updating shared memory |
| US9195576B2 (en) | 2010-06-09 | 2015-11-24 | Lear Corporation | Shared memory architecture |
| DE102011007714B4 (de) * | 2010-06-09 | 2019-02-14 | Lear Corp. | Verfahren für die Verwendung mit einem Batterieüberwachungssystem, Batterieüberwachungssystem und Verwendung des Verfahrens |
| JP2013542497A (ja) * | 2010-09-24 | 2013-11-21 | インテル コーポレイション | 計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有 |
| KR20150006903A (ko) * | 2010-09-24 | 2015-01-19 | 인텔 코오퍼레이션 | 컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유 |
| US8997113B2 (en) | 2010-09-24 | 2015-03-31 | Intel Corporation | Sharing virtual functions in a shared virtual memory between heterogeneous processors of a computing platform |
| KR101534037B1 (ko) * | 2010-09-24 | 2015-07-08 | 인텔 코포레이션 | 컴퓨팅 플랫폼의 이종 프로세서들 간의 공유 가상 메모리에서의 가상 함수들의 공유 |
| JP2015038770A (ja) * | 2014-10-23 | 2015-02-26 | インテル コーポレイション | 計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有 |
| JP2016157445A (ja) * | 2016-03-10 | 2016-09-01 | インテル コーポレイション | 計算プラットフォームのヘテロジニアスプロセッサの間で共有されるバーチャルメモリにおけるバーチャル機能の共有 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| US5774722A (en) | Method for efficient external reference resolution in dynamically linked shared code libraries in single address space operating systems | |
| JP3314378B2 (ja) | 実行可能プログラムに対するメモリ割当を管理するシステムおよび方法 | |
| US6876996B2 (en) | Method and apparatus for using a shared library mechanism to facilitate sharing of metadata | |
| KR100518584B1 (ko) | 공유 라이브러리 시스템 및 상기 시스템 구축 방법 | |
| US5692183A (en) | Methods and apparatus for providing transparent persistence in a distributed object operating environment | |
| JP2986075B2 (ja) | ローカル・オブジェクト・アドレス及びグローバル・オブジェクト識別子を結合して単一オブジェクト・ポインタにするためのシステム | |
| US6052528A (en) | Process for managing the multiple inheritance of persistent and shared objects | |
| US20010011368A1 (en) | Implementation for an object oriented run-time extensible item | |
| US6397384B1 (en) | Run-time addition of interfaces | |
| CN114756296A (zh) | 可读写挂载启动方法、装置、存储介质及电子设备 | |
| US7028293B2 (en) | Constant return optimization transforming indirect calls to data fetches | |
| CN112650539B (zh) | 面向异构众核处理器的动态链接运行支撑方法 | |
| US5062039A (en) | Sharing of workspaces in interactive processing using workspace name tables for linking of workspaces | |
| US5875487A (en) | System and method for providing efficient shared memory in a virtual memory system | |
| JP3844801B2 (ja) | インターフェース継承を伴うオブジェクト上での呼出しのための方法および機構 | |
| JPH10320203A (ja) | 共有メモリシステム | |
| US20020066084A1 (en) | Coalescing properties, methods and events | |
| CN117056031B (zh) | 一种基于虚拟进程的跨容器动态库共享方法 | |
| US7246135B2 (en) | Sharing classes between programs | |
| US5805887A (en) | Universal pointer object | |
| US6408305B1 (en) | Access frontier for demand loading pages in object-oriented databases | |
| KR101140522B1 (ko) | 객체 관리 시스템 및 방법 | |
| US20070055644A1 (en) | Global dynamic variable storage for SQL procedures | |
| Corsini et al. | The implementation of abstract objects in a capability based addressing architecture | |
| JPS60241135A (ja) | アドレス生成方式 |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A131 | Notification of reasons for refusal |
Effective date: 20050816 Free format text: JAPANESE INTERMEDIATE CODE: A131 |
|
| A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20051213 |