[PREV] [NEXT] [INDEX]

【8】仮想CPUの構造

プロセスは後述する仮想CPUによって実行されます. したがって各プロセ スは,それぞれ独立した仮想CPUの情報(レジスタとメモリ)を保持して います. 以下の記述は何らかのCPUのアーキテクチャに関する知識を前提としてい ます. 機械語に不慣れでも C++,Delphi等のOOP言語をご存知の方は本システ ムの場合,
プロセス = クラスインスタンス
レジスタ = データメンバ
命令 = メソッド
の対応が近いと思います.

仮想CPUの1プロセスは以下に示す19本の32ビットレジスタ とデータメモリ空間を持ちます.

プログラムカウンタ-
プロセスの実行する命令を示す(内部使用)

残り時間カウンター
命令の残り時間を保持(内部使用)

メッセージ
他プロセスより送られたメッセージ保持領域(内部使用)

スタックポインター
スタックエリアはデータメモリ空間を使用(内部使用)

ベースポインタ
スタックエリアを使用,ENTER, LEAVE命令で内部使用 引数と局所変数をLOADBP,STORBP命令を通してアクセス

フラグレジスタ
ゼロフラグ:演算結果が0, 符号フラグ:演算結果が負(内部使用)

プロセスID RQ
実行時にプログラムで指定します.
メッセージの送り先のプロセスIDとして使用
メッセージは他のプロセスのRQの値をチェックして送り先を 決定します. DISTNC,LOOK命令も同様にプロセスのRQの値を チェックして対象を検索します.

ル-プカウンタ RL
ループ命令の繰り返しカウンタとして使用
ループ命令外では汎用レジスタとしても使用できます.

レジスタ RX
X座標(前方)の設定, 取得に使用(汎用レジスタとして使用可)

レジスタ RY
Y座標(右)の設定, 取得に使用(汎用レジスタとして使用可)

レジスタ RZ
Z座標(下)の設定, 取得に使用(汎用レジスタとして使用可)

レジスタ RH
ヘッド角(左右)の設定, 取得に使用(汎用レジスタとして使用可)

レジスタ RP
ピッチ角(上下)の設定, 取得に使用(汎用レジスタとして使用可)

レジスタ RB
バンク角(時計回り)の設定, 取得に使用(汎用レジスタとして使用可)

汎用レジスタ R1, R2, R3, R4, R5, R6

            +----------------------------------+
            |  プログラムカウンター            |
            +----------------------------------+
            |  残り時間カウンター              |
            +----------------------------------+
            |  メッセージ                      |
            +----------------------------------+
            |  スタックポインター              |
            +----------------------------------+
            |  ベースポインタ  BP              |
            +----------------------------------+
            |  フラグレジスタ                  |    レジスタ番号
            +----------------------------------+
         1  |  プロセスID    RQ                |      1
            +----------------------------------+
         2  |  ル-プカウンタ  RL               |      2
            +----------------------------------+
         3  |  レジスタ        RX              |      3
            +----------------------------------+
         4  |  レジスタ        RY              |      4
            +----------------------------------+
         5  |  レジスタ        RZ              |      5
            +----------------------------------+
         6  |  レジスタ        RH              |      6
            +----------------------------------+
         7  |  レジスタ        RP              |      7
            +----------------------------------+
         8  |  レジスタ        RB              |      8
            +----------------------------------+
         9  |  汎用レジスタ    R1              |      9
            +----------------------------------+
        10  |  汎用レジスタ    R2              |      A
            +----------------------------------+
        11  |  汎用レジスタ    R3              |      B
            +----------------------------------+
        12  |  汎用レジスタ    R4              |      C
            +----------------------------------+
        13  |  汎用レジスタ    R5              |      D
            +----------------------------------+
        14  |  汎用レジスタ    R6              |      E
            +----------------------------------+
        プロセス固有のデータメモリ空間(スタックと共用)
            +----------------------------------+
            |  デ-タメモリ   0                 |
            +----------------------------------+
            |                1                 |
            +----------------------------------+
            |                2                 |
            +----------------------------------+
            |                :                 |
            |                :                 |
            +----------------------------------+
            | 最終メモリ番地( SPの初期値 - 1 ) |    ↑スタックの伸びる方向
            +----------------------------------+
            デ-タメモリ空間の大きさはプロセス生成時に指定可能
            プログラム起動時に生成される1つのプロセス(デフォルトプロセス)
            のデ-タメモリ空間の大きさは常に100です.

[PREV] [NEXT] [INDEX]
ご意見・ご感想は,水谷 純 <mizutani.jun@nifty.ne.jp>まで.