Changes between Initial Version and Version 1 of CDLref_region


Ignore:
Timestamp:
Jan 16, 2016, 10:02:05 PM (8 years ago)
Author:
okuma-top
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • CDLref_region

    v1 v1  
     1== リージョン ==
     2
     3リージョンは、セルのレイアウトを制御するものです。
     4ネームスペースの役割、すなわち一般名前有効範囲に境界を設ける役割も併せ持ちます。
     5さらにリージョン間のアクセス制御も行います。
     6
     7【記述例】
     8{{{
     9[linkunit]                                            // リンク単位属性の指定
     10region rServer {                                      // リージョン
     11        cell    tSysLog ServerSysLog {
     12        };
     13        cell tCheckCode CheckCode {
     14      cCheckCode
     15         = rGuardedRegion::GuardedCell.eCheckCode;    // ネームスペース識別子によるセル指定
     16        };
     17    [in_through(GuardCheckPlugin,""), out_through()]  // スループラグインの指定
     18    region rGuardedRegion {                           // 子リージョン
     19        cell tGuardedCodeHolder GuardedCell {
     20           cSysLog = ServerSysLog.eSysLog;            // 外側のリージョンのセルの参照
     21        };
     22    };
     23};
     24}}}
     25
     26ここで region はキーワードであり、rServer はリージョン名です。'{', '}' で囲まれたセルを持ちます。
     27
     28慣習としてリージョン名は 'r' で始めます。
     29
     30同じリージョン名を持つリージョンを、繰り返し記述することができます。
     31ただし、リージョン指定子は、最初に現れたときに指定する必要があります。
     32リージョン名が同じリージョンが再び現れた場合、指定子を指定することはできません。
     33
     34リージョンは再帰的に設けることができます。
     35
     36異なるリージョンに存在するセルを参照する場合、ネームスペース識別子を用います。
     37
     38【補足説明】リージョンはセルのレイアウトだけでなく、セルタイプコードのレイアウトも制御します。
     39セルの所在するところに、セルを操作するコード、すなわちセルタイプコードが必要となるためです。
     40これが、セルはリージョンに置き、セルタイプはネームスペースに置く理由です。
     41ネームスペースには、セルタイプコードの所在を制御する機能はなく、もっぱら名前衝突の回避に用いられます。
     42
     43【補足説明】最初に指定する必要があるのは、他のリージョンのセルからリージョン内のセルが参照される前に、参照可能かどうか決定できる必要があるためです。
     44
     45【補足説明】前方参照ができないため最初にリージョン指定子リストを指定する必要がある。現在の仕様では2回目に現れたときには、リージョン指定子を指定できない。
     46
     47【補足説明】この文法のリージョンは、TECS CDL 記述では直観的にわかりやすくない。ただし、リージョンはむやみやたらに使えばよいものではなく、またリージョン境界を設けるところは何らかの理由により独立性を高くしたい箇所であり、リージョン間の結合はそれほど多くならないはずである。
     48
     49【補足説明】記述例で用いた GuardCheckPlugin の実装例はありません。
     50
     51=== リージョン指定子 ===
     52
     53リージョン指定子の凡例と指定内容を以下に示します。
     54
     55 ||= リージョン指定子の凡例                                    =||= 指定内容                  =||
     56 || in_through( プラグイン名, プラグイン引数 )   || リージョン内への結合の許可とプラグイン適用 ||
     57 || in_through()                      || リージョン内への結合の許可 ||
     58 || out_through( プラグイン名 , プラグイン引数 )   || リージョン外への結合の許可とプラグイン適用 ||
     59 || out_through()                                   || リージョン外への結合の許可 ||
     60 || to_through( リージョン名, プラグイン名, プラグイン引数 )   || リージョン間の結合の許可とプラグイン適用 ||
     61 || to_through()                                   || リージョン間の結合の許可 ||
     62 || node                                                  || ノード属性の指定        ||
     63 || linkunit                                              || リンク単位属性の指定    ||
     64 || domain( ドメインタイプ名, オプション文字列 )    || ドメイン単位属性の指定   ||
     65 || class( IDENTIFIER )                             || クラス単位属性の指定     ||
     66
     67以上のうち in_through, out_through, to_through をまとめて、リージョンスルー指定子と呼びます。
     68node, linkunit, domain, class をリージョン属性と呼びます。
     69
     70=== リージョンスルー指定子 ===
     71
     72リージョンスルー指定子は、リージョン外部のセルの呼び口からリージョン内部のセルの受け口へ、同様に内部から外部へ、リージョン から他のリージョンへの結合を許可します。
     73デフォルトでは、リージョンから他のリージョン(内側、外側を含む)への結合は、禁止されます。
     74
     75in_through は、リージョンの外部からリージョンの内部への結合を許可し、プラグイン(plugin)により挿入すべきスルーセルを生成させます。
     76in_through は第一引数としてプラグイン名、第二引数としてプラグイン引数を取ります。
     77これらの引数が省略された場合には、リージョン外部から内部への結合を(スルーセルを生成させることなく)許可するものです。
     78in_through は1つのリージョンに複数指定できます。
     79複数指定された場合、順にプラグインが(指定されていれば)呼び出され、スルーセルが(プラグインにより生成されれば)挿入されます。
     80
     81out_through は、リージョンの内部からリージョンの外部への結合を許可します。その他 in_through と同様です。
     82
     83to_through は、兄弟リージョン間での結合を許可します。
     84to_through は、第一引数に結合可能なリージョン名、第二引数にプラグイン名、第三引数にプラグイン引数を指定します。
     85第一引数のリージョン名は、前方参照が可能です。
     86親リージョン、子リージョン、甥リージョン、叔父リージョン、いとこリージョンなど兄弟関係にはないリージョンは指定できません。
     87このため第一引数は単一の識別子となります。
     88
     89in_through, out_through, to_through で生成されるスルーセルは、受け口側のセルおよびセルの受け口が同じである場合、共有されます。
     90
     91【補足説明】ジェネレータの実装として、共有可能なスルーセルを共有しないオプションを設けてもよい。
     92
     93=== スルー指定子オプションの文字列置換 ===
     94
     95スルー指定子のオプションは、以下の文字列置換が行われます。
     96
     97 ||= 置換文字列    =||= 置換後文字列   =||
     98 || $source$       || 呼び元のセル名     ||
     99 || $destination$  || 呼び先のセル名     ||
     100 || $SOURCE$       || 呼び元のセル名 (リージョン名を '_' で連結したグローバル名)     ||
     101 || $DESTINATION$  || 呼び先のセル名 (リージョン名を '_' で連結したグローバル名)     ||
     102 || $next$         || 次のセル名[[BR]] 複数の through がつながっている場合、すぐ後ろに来るもの     ||
     103 || $NEXT$         || 次のセル名 (リージョン名を '_' で連結したグローバル名)[[BR]] 複数の through がつながっている場合、すぐ後ろに来るもの     ||
     104 || $start_region$ || $source$ のセルの存在するリージョン (グローバル名)     ||
     105 || $end_region$   || $destination$ のセルの存在するリージョン (グローバル名)     ||
     106 || $preferred_region$  || 適切なリージョン (グローバル名), start_region または end_region  ||
     107 || $count$        || リージョン間の through 指定子の適用数     ||
     108 || $$             || $ に置換     ||
     109
     110=== リージョン属性 ===
     111
     112リージョン属性は、リージョンの特性を示すもので、ノード、リンク単位、ドメイン、クラスの 4 種類があります。
     113リージョン属性は、必ずしも指定する必要がない、一方、一つのリージョンには、いずれか一つのリージョン属性を指定できます。
     114
     115=== ノード(node) ===
     116
     117ノードは、通常一つのプロセッサとメモリから構成され、1つ以上のリンク単位を持ちます。
     118ノードを超えて直接結合することはできません。
     119
     120ノードを超えて、呼び口と受け口を直接結合することはできないが、コンポーネント図上、またコンポーネント記述言語においては、接続 (connect) することができます。
     121この場合リージョン間のスループラグインにより、呼び口側、受け口側、それぞれに直接結合することなく接続させるためのコンポーネントを挿入することで実現されます。
     122実際に接続がどのように行われるかは、プラグインの仕様に依存します。
     123
     124ノードが異なる場合、メモリ透過性がありません。
     125つまり、ポインタ値を渡したとしても、受け取った側では、ポインタ参照することができません。
     126このため引数がポインタ型である場合、ポインタの指すメモリ領域を渡す必要があります。
     127
     128例えばオペイク RPC プラグインでは、通信チャンネルを使用することで、接続することができます。
     129オーバーヘッドが、通常の呼び出しに比べ非常に大きいため、頻繁な呼出しは適さないこと、上述のようにポインタ値を渡す場合、直接結合とは異なる振る舞いになる可能性があることに注意します。
     130
     131TECS CDL においては、リージョンに node 指定子を指定することで、そのリージョンが一つのノードを構成することを示します。
     132node 指定されていないリージョンは、親リージョンのノードに属する。 ルートリージョンは、暗黙的に node が指定されます。
     133
     134=== リンク単位(linkUnit) ===
     135
     136リンク単位は、リンカーにより一つのモジュールとして生成される単位です。
     137リンク単位を超えて直接結合することはできません。
     138
     139ノードの場合と同様にリージョン間のスループラグインにより異なるリンク単位のセルに接続することができます。
     140
     141リージョンに linkUnit 指定子を指定することで、そのリージョンが一つのリンク単位を構成することを示します。
     142linkUnit 指定されていないリージョンは、親リージョンのリンクユニットに属します。
     143
     144ノードは、暗黙的にリンク単位と見なされます。
     145
     146=== ドメイン(domain) ===
     147
     148ドメインは、TOPPERS/HRP2 カーネルの保護ドメインに対応させて、 リージョンを保護ドメインとして扱うことを念頭に置いたものです。
     149保護がどのように行われるかは、TECS 仕様としては規定しません。
     150ドメインタイプごとに定義される、ドメインプラグインの仕様により規定します。
     151また、ドメインプラグインの実装により、TOPPERS/HRP2 の保護ドメイン以外の保護機能にも対応できます。
     152
     153TECS CDL においては、リージョンにドメイン指定子を指定することで、そのリージョンは、ドメインに属します。
     154リージョン名がドメイン名となる。 ドメイン指定されていないリージョンは、親リージョンのドメインに属します。
     155
     156ドメイン指定子の第一引数は、ドメインタイプ名 (文字列ではなく、識別子) です。
     157ドメインタイプ名により識別されるドメインタイプは、親リージョンに波及します。
     158ただし、子リージョンから親リージョンへのドメインタイプの伝播は、ノードを超えません。
     159一つのノードにおいては、一つのドメインタイプに制限されます。
     160ルートリージョンは、いずれのドメインにも属さない、ドメイン外 (OutOfDomain) として扱われます。
     161従って、ドメインタイプの親リージョンへの波及は、ルートリージョンの直下のリージョンまでです。
     162
     163ドメインタイプ名は、以下のようにドメインプラグイン名に変換されます。
     164
     165{{{
     166  (ドメインプラグイン名) = (ドメインタイプ名) + 'Plugin'
     167}}}
     168
     169TOPPERS/HRP2 カーネルの保護ドメインに対応させる場合、ドメインタイプを HRP2 とします。プラグイン名は HRP2Plugin となります。
     170
     171ドメイン指定子の第二引数は、オプション文字列です。
     172ドメインタイプ HRP2 では "trusted", "nontrusted" を指定します。
     173
     174【補足説明】HRP2 ドメインの扱いについては、本書では詳細を説明しません。
     175
     176=== クラス(class) ===
     177
     178仕様未定である。TOPPERS/FMP カーネルのクラスに相当するものとして、予約されている。
     179
     180T.B.W.
     181
     182=== リージョン内セル ===
     183
     184【補足説明】リージョン内部文リストとリージョン内部文に分離されていない。
     185
     186セル記述は、プロトタイプ宣言と定義のいずれも可能です。
     187ただし、セルのプロトタイプ宣言と定義の両方において、同じリージョンに属するように記述する必要があります。
     188
     189=== ビルド単位 ===
     190
     191ノード、または、リンク単位 属性を持つリージョンごとに、ビルドを行います。
     192これは、例えば分散システムで、ある部分システムのをビルドすることを想定したものです。
     193
     194 * ビルド単位をまたいでリージョンの境界をまたぐ結合がないこと
     195
     196ただし、以下のリージョン間をまたぐスルーセルを使用した接続を持つことは可能です。
     197
     198 * スルーセルの内部のセルが、呼び側、受け側のいずれかのリージョンに属していること
     199 * スルーセルの内部のセルが、リージョンをまたぐ結合を持たないこと
     200
     201=== 複数のシングルトンセルタイプのセル ===
     202
     203シングルトンセルタイプのセルは、リンク単位ごとに、最大1つ置くことができます。
     204
     205=== ルートネームスペースとルートリージョン ===
     206
     207ルートネームスペースは、いずれのネームスペース文の内側ではないところです。
     208ルートネームにのみ構造体 struct, 型定義 typedef, 定数変数 const の定義を置くことができます。
     209
     210ルートリージョンは、いずれのリージョン文の内側ではないところです。
     211ルートネームスペースとルートリージョンは、共通した名前の空間を持ちます。
     212
     213-----
     214[TECS リファレンスマニュアル [wiki:  トップページ]]・
     215[TECS CDL リファレンスマニュアル [wiki:CDLref トップページ]・[wiki:CDLref_index 目次]]