next up previous contents index
Next: 局所領域と共有領域 Up: 処理系の構成 Previous: 処理系の構成

   
共有変数オブジェクト

KLIC 逐次処理系は、 ユーザが独自に追加したい機能を拡張できる枠組み(ジェネリ ック・オブジェクト・インタフェース)を持っており、共有メモリ拡張でもジェネ リック・オブジェクトの枠組みにより拡張した。

逐次実装と共有メモリ実装とのもっとも大きな違いは、共有メモリ 変数の存在である。共有メモリ変数はその書換えの時に 特別な扱いを要する。具体化する場合にはロ ックが必要であるし、フックする時にもロックが必要である。共有メモリ上の共有 メモリ変数以外のデータ(具体値)へのロックは不要なので、共有メモリ変数はこれ らと異なった特別なデータタイプにする。

共有メモリ変数は SHVAR というジェネレータオブジェクトで実現される (このオブジェクトは、runtime/gg_shvar.cなるファイルで 定義されている)。 共有メモリ上のそれ以外の基本データタイプは逐次処理の対象データと同じであり、そ れらのデータに対しては、ロックのオーバヘッドは加わらず、局所メモリのデ ータにアクセスする場合と何等変わらない。

各ノードには固有の局所メモリを 持ち、ノード間で共有する1つのメモリ領域を持つ。局所メモリはその持ち主 のみがアクセスする。共有メモリ変数を局所データで具体化するときには、共有 メモリ変数に局所データへポインタ付けするのではなく、局所データを共有メモリ にコピーした上で、変数にポインタ付けする。


  
Figure 11.1: 局所ヒープと共有ヒープ
\begin{figure}
\begin{center}
\epsfile{file=shm-local-shared-data.eps,width=0.8\textwidth}
\end{center}\end{figure}



Sekita Daigo
1998-05-18