(57)【特許請求の範囲】
【請求項１】
データ処理システムのプロセッサ内に設けられ、メモリスペースと、そのメモリスペース内のオブジェクトの位置を決めるのに使用するためにストアされたベース情報と長さ情報を有するオブジェクト記述子をストアする手段を有するプロセッサレジスタスペースと、
前記プロセッサ内に設けられ、前記メモリスペースと通信する手段と、
前記プロセッサ内に設けられ、命令で特定された演算子手段によってオペレーションを実行する手段と
を有するデータ処理システムにおいて、
前記プロセッサ内に設けられ、前記メモリスペース内にストアされた現在の即ち呼び出し側実行環境と前記メモリスペース内にストアされたターゲット即ち呼び出された側の実行環境との間で通信する第１手段と、
前記プロセッサ内に設けられ、前記第１手段に接続され、現在の実行環境を定義する第１オブジェクトをストアする第２手段と、
を有し、前記現在の実行環境は第２ドメインオブジェクトによってアクセス可能であり、さらに
前記プロセッサ内に設けられ、前記第１手段に接続され、第１ドメインオブジェクトによってアクセス可能なターゲット実行環境を定義する第２オブジェクトをメモリにストアする第３手段と、
前記プロセッサ内に設けられ、前記第１ドメインオブジェクトによってアクセス可能な第１環境テーブルオブジェクトを生成する第４手段と、
を有し、前記環境テーブルオブジェクトはサブシステムリンケージ情報を含む制御スタックを備え、その制御スタックは、サブシステム呼出しのターゲットである前記ターゲット実行環境からの戻りに再ストアされる現在の実行環境の状態を表している制御スタックエントリのアレイであり、さらに
前記プロセッサ内に設けられ、サブシステム呼出しのターゲットである前記ターゲット実行環境の静的データと専用変数のために使用される領域０を定義する領域０オブジェクトを参照する領域０アクセス記述子（AD）を前記第１ドメインオブジェクトにストアする第５手段と、
前記プロセッサ内に設けられ、サブシステム呼出しのターゲットである前記ターゲット実行環境の命令のために使用される領域１を定義する領域１オブジェクトを参照する領域1ADを前記第１ドメインオブジェクトにストアする第６手段と、
前記プロセッサ内に設けられ、前記環境テーブルオブジェクト内のサブシステムテーブルのエントリと、前記ターゲット実行環境のスタックフレームのために使用される領域２を定義する領域２オブジェクトを前記サブシステムテーブル内で指定するサブシステムエントリと、前記ターゲット実行環境の最上位置スタックフレームのフレームポインタとを指すサブシステムIDを前記第２ドメインオブジェクトにストアし、さらに、ユーザモードで現在のフレームのスタックポインタの代わりに新しいフレームの位置を指定するスーパバイザ呼出しを呼び出すときに用いられるスーパバイザスタック用の、リニアアドレスであるスーパバイザスタックポインタを前記第２ドメインオブジェクトにストアする第７手段と、
前記プロセッサ内に設けられ、前記第１ドメインオブジェクト内で、前記ターゲット環境のタイプとアドレスとを指定する手順エントリをストアする第８手段であって、その手順エントリのそれぞれは、少なくともスーパバイザ手順とサブシステム手順とを含む呼び出されるべき手順のタイプを示す手順エントリタイプフィールドと前記ターゲット実行環境の第１の命令を指定する前記ターゲット実行環境へのオフセットを含む第８手段と、
前記プロセッサ内に設けられ、前記第４手段と第７手段とに接続され、前記環境テーブルオブジェクトの前記サブシステムテーブルで新しい領域２のアクセス記述子を含むサブシステムエントリを見つけ、かつ新しいスタックの最上位置フレームポインタと最上位置スタックポインタとを見つけるために、前記第２ドメインオブジェクトの前記サブシステムIDを用いる第９手段と
を有するデータ処理システム。
【発明の詳細な説明】
［産業上の利用分野］
本発明はデータ処理システムに関し、特にメモリの記憶場所を許可なしのアクセスから保護するメモリアクセッシングシステムにおいて使用するためのサブシステム呼出しメカニズムに関する。
［従来の技術および発明が解決しようとする間題点］
最新のコンピュータシステムは、システム内の全ての情報がオブジェクトと呼ばれるハードウエアで認識される、メモリ常駐情報構造によって表わされるように編成されている。これはオブジェクト指向コンピュータアーキテクチャとして知られている。オブジェクトは、論理的に連続しているアドレス指定記億場所セットに維持された関連情報を表示するデータのパッケージである。
オブジェクト指向プログラミングシステムでは、オブジェクトのタイプ、すなわち各クラスは、そのクラスに属しているオブジェクトについて実行を許可された１組のオペレーションを有する。これはオブジユクトベースアクセスメカニズムとして知られている。オブジェクトの内部構造は、プログラマーにはわからない。プログラマーは許可されているオペレーションのみによってオブジェクトを操作することができる。オブジェクトに対するアクセスはアクセス記述子と呼ばれるオブジェクトへのポインタにより行われる。アクセス記述子は、そのオブジェクトに関してアクセス記述子のホルダーにより許可されるオブジェクトへの様々なタイプのアクセスを定義する表示（rep）権利（読み取り権利または書き込み権利など）のタイプを記述する。
関連する米国特許第5,075,842号に記載されているシステムにおいては、オブジェクト指向コンピュータシステムのプログラミングの複雑さは、保護メカニズムが通常データと、保護されているアクセス記述子とを識別できるように、メモリに記憶されるワードにタグ付けすることにより軽減される。この種の保護は、旧来の状態ベース保護メカニズムと区別して、能力ベース保護メカニズムと呼ばれる。状態ベース保護メカニズムは、スーパーバイザモードでのみ実行可能である特権命令を備えたスーパーバイザプログラム状態およびユーザー状態に依存する。旧来のタグなしオペレーティングシステムおよび新たなタグ付けオペレーティングシステムとの互換性を得るために、タグなしオペレーティングシステムのスーパーバイザ呼出しをタグ付げオペレーティングシステムにマッピングできることが望ましい。
従って、本発明の目的は、能力ベース保護メカニズムと、状態ベース保護メカニズムの双方と共に機能できる呼出し／復帰メカニズムを提供することである。
［問題点を解決するための手段］
簡単に言えば、上記の目的は、本発明に従って、第１のドメインオブジェクトと関連する第１の実行環境と、第２のドメインオブジェクトと関連する第２の実行環境とを定義する第１のプロセッサオブジェクトおよび第２のプロセスオブジェクトを設けることにより達成される。第１の環境テーブルオブジェクトは第１のブロセスと関連している。第１の環境テーブルオブジェクトはサブシステムリンケージ情報を記憶するための制御スタックを含み、この制御スタックは、第２の実行環境からの復帰時に再ストアすべき第１の呼び出し側実行環境の状態をセーブする制御スタックエントリのアレイである。
第１のドメインオブジュクトは、サブシステム呼び出しのターゲットである第２の（ターゲット）実行環境の領域０を定義するオブジェクトを参照する領域０アクセス記述子と、サブシステム呼び出しのターゲットである第２の（ターゲット）実行環境の領域１を定義するオブジェクトを参照する領域１のADと、第１のプロセスオブジェクト内で関連する第１の環境テーブル中のサブシステムテーブルの１つのエントリを指示するサブシステムIDとを含む。サブシステムテーブルのサブシステムエントリは、ターゲット実行環境の領域２を定義するオブジェクトと、ターゲット環境における最上位置のスタックフレームのフレームポインタおよびスタックポインタとを指定する。ユーザーモードで新たなフレームを位置決めするためにスーパーバイザ呼び出しを実行するときに（現在フレームのスタックポインタの代わりに）使用されるスーパーバイザスタックに関する線形アドレス（ワード単位）であるスーパーバイザスタツクポインタが設けられている。
第１のドメインオブジェクトは、ターゲット手順のタイプとアドレスを指定する手順エントリを更に含む。それぞれの手順エントリは、スーパーバイザ手順およびサブシステム手順を含むが、それらには限定されない呼び出すべき手順のタイプを指示する手順エントリタイプフィールドと、ターゲット実行環境へのオフセットとを含む。オフセットはターゲット手順の第１の命令を指定する。
本発明の１つの面によれば、環境テーブルオブジェクトはサブシステムテーブルと、制御スタックの２つのデータ構造を有する。サブシステムテーブルは、１つのプロセスに関連する全ての領域２スタックオブジェクトと、それらに対応する最上位置のフレームポインタおよびスタックポインタとを位置決めする。
本発明の別の面によれば、現在サブシステムIDは、第１のプロセスと関連するサブシステムテーブルの現在サブシステムエントリに関する現在サブシステムテーブルオフセットと共に第２のプロセスオブジェクトにセーブされ、最上位置のフレームポインタおよびスタックポインタの線形アドレスは、１つのサブシステムが別のサブシステムへの呼び出し時に励起されたという条件の下でサブシステムエントリにセーブされる。
本発明の上記の目的、特徴および利点と、その他の目的、特徴および利点とは、添付の図面に図示されるような本発明の好ましい１実施例の以下の詳細な説明から明白になるであろう。
［実施例］
オブジェクト指向アーキテクチャは、オブジェクトと呼ばれるハードウエアで認識され、メモリ常駐の情報構造によってシステム中の全ての情報が表わされるように編成されたコンピュータシステムである。オブジェクトは、連続してアドレスされる１組の記憶場所に維持されている関連情報を表示するデータのパッケージである。
オブジェクト指向プログラミングシステムにおいては、オブジェクトの各タイプすなわち各クラスは、そのクラスに含まれているオブジェクトについて実行を許されている１組のオペレーションを有する。これをオブジェクトベースアクセスメカニズムという。オブジェクトの内部構造はプログラマーにはわからない。プログラマーはオブジェクトに許可されているオペレーションによって操作できるだけである。オブジェクトへのアクセスは、そのオブジェクトに対するポインタであるアクセス記述子によって行われる。アクセス記述子は、そのオブジェクトに関するアクセス記述子のホルダーにより許可される様々な種類のそのオブジェクトに対するアクセスを定義する権利（読み取りの権利または書き込みの権利など）の種類を記述している。
１つのプロセスを記述するとき、演算子はオペランドに対して取るべきアクションを指示するものである。オペランドは、通常、命令のアドレス部により識別される。あらゆる命令は演算子と、いくつかのレファレンスとを指定する。演算子はどのようなオペレーションを実行すべきかをプロセッサに指定し、レファレンスは使用または操作すべきオペランドを選択する。命令の中で指定された演算子は、クラスフィールドと、OPコードフィールドの２つのフィールドで符号化される。クラスフィールドは演算子が属する演算子クラスを指定し、OPコードフィールドは、そのクラスの中から実行すべきハードウエアオペレーションを選択する。
実行環境
プロセスは平坦な線形アドレススペースを見て、そこからデータ、命令およびスタックスペースを割り当てる。呼び出し命令は新たなスタックフレームを（活動化レコード）順次割り当てられたスタックに発生させる。スタックフレームの詳細については、Myers他の、名称「Stack Framme Cache on a Microprocessor Chip」による米国特許第4,811,208号を参照のこと。
実行環境は、線形アドレススペースと、１組の大域レジスタおよび浮動小数点レジスタと、命令ポインタと、演算制御レジスタといったオブジェクトから構成される。
大域レジスタは、手順の境界を越えるときに影響を受けない。レジスタの中の１つは現在フレームポインタ（FP）を含み、その他は汎用レジスタである。FPは、現在（最上位置）のスタックフレームに関する現在実行環境に対する線形アドレス（ポインタ）を含む。プロセスと関連する大域レジスタは、そのプロセスが実行中でないときは、プロセス制御ブロックにセーブされる。
プロセスと関連している浮動小数点レジスタは、そのプロセスが実行中でないときは、プロセス制御ブロックにセーブされる。
実行環境は他のシステムにおけるプロセス幅のアドレススペースに相当する。システムはプロセスごとに複数の実行環境を支援するが、各プロセスで一度に活動状態になれる実行環境は１つだけである。
演算制御装置は、数値命令の算術特性および誤り発見特性を制御するとともに、条件コードを記憶するために使用される。プロセスが延期されているとき、演算制御情報はプロセス制御ブロックにセーブされる。新たなフレームに対して呼出しオペレーションが実行されると、現在線形アドレススペース内のスタックフレームに、戻りIPがセーブされる。
命令ポインタ
命令ポインタ（IP）は、現在命令の第１のバイトに対する現在線形アドレススペースへの線形アドレス（ポインタ）である。
レジスタモデルは、手順の境界を越えて保持される16個の大域レジスタおよび４個の浮動小数点レジスタと、それぞれ16個の局所（フレーム）レジスタからなる複数組のレジスタとから構成される。レジスタモデルは、1990年１月２日に許可されたBuddeらの「Register  Scoreboading  on  ａ  Microprocessor」という名称の米国特許第4,891,753号に更に詳細に説明されている。
どの時点でも、１つの命令はレジスタのうち36個を次のようにアドレスすることができる。
レジスタの種類 レジスタ名
大域レジスタ                            G0...G15
浮動小数点レジスタ                      EP0..FP8
スタ（浮動小数点オペランド）
局所レジスタ                            L0...L15
大域レジスタ
１つのプロセスと関連する16個の大域レジスタがあり、それらは、プロセスが実行中でないときは、プロセス制御ブロックにセーブされる。
16個の32ビットレジスタのうち、G15は現在フレームポインタ（FP）を含み、G0からG14は汎用レジスタである。FPは、現在（最上位置）のスタックフレームの線形アドレスを含む。スタックフレームはSALIGN＊16バイト境界（SALIGNは特定の実現形態によって決まる値である）にアライメントされているので、FPの下位のＮビットは無視され、常に０であると解釈される（ＮはSALIGN＊16＝２＊＊Ｎにより与えられる）。このレジスタは呼出し時に初期設定され、復帰時に再ストアされる。
32ビットより大きいオペランドとしてのレジスタへのレファレンスには、順次大きくなるレジスタ番号を持つレジスタを使用する。
浮動小数点レジスタ
１つのプロセスと関連する４個の浮動小数点レジスタがあり、それらは、プロセスが実行中でないときには、プロセス制御ブロックにセーブされる。
浮動小数点レジスタは、浮動小数点命令のオペランドとしてのみアクセスされる。
局所（フレーム）レジスタ
局所レジスタであるレジスタL0からL15は従来のタイプのレジスタではなく、手順の呼出し時に割り当てられ、復帰時にその割り当てを解除される。
手順の活動化ごとに１バンクずつ、複数の局所レジスタバンクが設けられており、プログラムはレジスタを明示してセーブし且つ再ストアする必要はない。
これらのレジスタをメモリにセーブする必要がないときには、レジスタは関連する手順のスタックフレームの初めの16ワードにセーブされる。それらはスタックフレームの初めの16ワードを表し、レジスタL0は線形アドレスFP＋０からFP＋３にマッピングされ、レジスタLiは線形アドレスFP＋4iからFP＋4i＋３にマッピングされることになる。その後も同様である。
命令はワード（４バイト）の境界で始まらなければならないので、IPの２つの下位ビットは常に０である。
演算制御装置
演算制御装置（AC）は数値命令の演算特性および誤り発見特性を制御するとともに、条件コードを記憶するために使用される。プロセスが延期されているとき、演算制御装置はプロセス制御ブロックにセーブされる。
演算制御装置（AC）は次のような情報を含む。
条件コード（ビット０から２）。比較（およびその他の）命令によりセットされ且つ条件付き分岐（およびその他の）命令により検査される１組のフラグ。
演算状態（ビット３から６）。このフィールドは標識としてある種の浮動小数点命令により変更される。
整数オーバーフローフラグ（ビット８）。整数オーバーフローが起こり且つマスクがセットされているときに必ずセットされるスティッキーフラグ。このフラグが暗黙にクリアされることはない。
整数オーバーフローマスク（ビット12）。セットされていれば、整数オーバーフローはARITHMETIC誤りを発生しない。Ｓが宛先サイズであれば、結果のＳ個の最下位ビットは特に指摘しない限り宛先に記憶される。
不明確な誤り無し（ビット15）。このNIFがセットされていれば、誤りは明確であることを要求される。NIFがクリアされている場合には、特定の誤りは不明確であっても良い。
浮動小数点オーバーフローフラグ（ビット16）。浮動小数点オーバーフローが起こり且つマスクがセットされているときに必ずセットされるスティッキーフラグ。このフラグが暗黙にクリアされることはない。
浮動小数点アンダーフローフラグ（ビット17）。浮動小数点アンダーフローが起こり且つマスクがセットされているときに必ずセットされるスティッキーフラグ。このフラグが暗黙にクリアされることはない。
浮動小数点無効opフラグ（ビット18）。浮動小数点無効動作が起こり且つマスクがセットされているときに必ずセットされるスティッキーフラグ。このフラグが暗黙にクリアされることはない。
浮動小数点０除算フラグ（ビット19）。０による浮動小数点除算が起こり且つマスクがセットされているときに必ずセットされるスティッキーフラグ。このフラグが暗黙にクリアされることはない。
浮動小数点不正確フラグ（ビット20）。不正確な浮動小数点結果が起こり且つマスクがセットされているときに必ずセットされるスティッキーフラグ。このフラグが暗黙にクリアされることはない。
浮動小数点オーバーフローマスク（ビット24）。セットされていれば、浮動小数点オーバーフローはREAL_ARITHMETIC誤りを発生しない。
浮動小数点アンダーフローマスク（ビット25）。セットされていれば、浮動小数点アンダーフローはREAL_ARITHMETIC誤りを発生しない。
浮動小数点無効opマスク（ビット26）。セットされていれば、浮動小数点無効動作はREAL_ARITHMETIC誤りを発生しない。
浮動小数点０除算マスク（ビット27）。セットされていれば、０による浮動小数点除算はREAL_ARITHMETIC誤りを発生しない。
浮動小数点不正確マスク（ビット28）。セットされていれば、不正確な浮動小数点結果はREAL_ARITHMETIC誤りを発生しない。
浮動小数点正規化モード（ビット29）。セットされていれば、実数、長精度実数または拡張精度実数の非正規化数は、演算実行前にまず正規化される。クリアされていれば、非正規化数はREAL_ARITHMETIC誤りを発生しない。
浮動小数点丸め制御（ビット31−32）。このフィールドは、浮動小数点計算に際してどの丸めモードが作用しているかを指示する。
00−最も近い数に丸める（端数はない）
01−（負の無限に向かって）下に丸める
10−（正の無限に向かって）上に丸める
11−切り捨てる（０に向かって丸める）
スタックフレーム
スタックフレームは現在線形アドレススペースの連続する部分であり、データをスタック状に含んでいる。スタックは下位アドレスから上位アドレスへ成長する。活動化される手順ごとに１つのスタックフレームがあり、これは局所変数と、パラメータと、リンケージ情報とを含む。呼出し動作により新たなスタックフレームが獲得され、復帰動作によりそのフレームは解放される。新たなフレームが獲得されると、そのフレームはSALIGN＊16バイト境界でアライメントされる。なお、SALIGNはあらかじめ決められている値である。
１つのフレームの初めの64のバイトがマッピングされているページ、すなわち、単純なオブジェクトは局所寿命を有していなければならない。ページ、すなわち、単純なオブジェクトの寿命は呼び出し中に検査される。この制約は、局所レジスタのADの効率よい操作を確保するために必要である。
フレームを局所ページ、すなわち、単純な局所オブジェクトにマッピングするという必要条件に加えて、ページまたはオブジェクト記述子の混合ビットは、タグビットがフレームに書き込まれないとしてもセットされる。この制約は、局所レジスタでの効率よい操作を確保するために必要である。
スタックフレーム内のフィールドは次のように定義される。
パディング領域。この領域はFPを次のSALIGN＊16バイト境界にアライメントするために使用される。この領域のサイズは０からSALIGN＊16バイトまで変わる。呼び出し動作が実行されると、このフレームに関するFPを形成するために、呼び出し側のSPを次の境界に丸める目的でパディング領域が加えられる。呼出し側のSPが既にアライメントされている場合には、パディング領域はない。
フレーム状態（L0）。フレーム状態は、呼出し後に、フレームからの復帰時に使用すべきフレームと関連する情報を記録する。フレーム状態のフィールドは次のように定義される。
復帰状態、RRR（ビット０−２）。この３ビットフィールドはこのフレームの生成に使用される呼出しメカニズムを記録し、復帰時に使用すべき復帰メカニズムを選択するために使用される。このフィールドは次のように符号化されている。
000  局所
001  誤り
010  スーパーバイザ、呼出し前にトレースはディスェーブルされている
011  スーパーバイザ、呼出し前にトレースはイネーブルされている
100  サブシステム（サブシステム内）
101  サブシステム（サブシステム間）
110  アイドル割り込み
111  割り込み
復帰前トレース、Ｐ（ビット３）。復帰前トレースビットが１であるときのフレームからの復帰に際しては、その復帰オペレーションに関連する何らかの動作が実行される前に復帰前トレース事象（イネーブルされているならば）が起こる。このビットは、呼出しトレース事象が起こっていた場合、呼出し時に０に初期設定される。そうでない場合には、ビットは１に初期設定される。
先行フレームポインタ、PFP（ビット４−31）。先行フレームの第１のバイトに対する線形アドレス。フレームは16個以上のバイトの境界にアライメントされているので、FPの最上位置の28ビットのみがセーブされる。
呼出し中、RRRフィールドは次のように初期設定される。
000  局所呼出し、またはスーパーバイザモードからのスーパーバイザ呼出し
001  誤り呼出し
01T  ユーザーモードからのスーパーバイザ呼出し
100  サブシステム内呼出し
101  サブシステム間呼出し
110  アイドル状態からの割り込み呼出し
111  実行中状態からの割り込み呼出し
Ｔはプロセス制御部からのトレース−イネーブルフラグである。
あらゆる復帰時に、PRRRビットは次のように解釈される。
1xxx  復帰前トレースを発生
0000  局所復帰を実行
0001  誤り復帰を実行
001T  スーパーバイザモードにおいて、スーパーバイザ復帰を実行。Ｔビットはプロセス制御部でトレースイネーブルビットに割り当てられ、実行モードビットはユーザーにセットされる。そうでない場合には、局所復帰を実行。
010x  サブシステム復帰を実行
0110  アイドル割り込み復帰を実行
0111  割り込み復帰を実行
スタックポインタ、SP（L1）。スタックの最初の自由バイトに対するアドレス。すなわち、スタックの最終バイトのアドレス＋１。SPは呼出し動作によりFP＋64を指示するように初期設定される。
復帰命令ポインタ、RIP（L2）。新たなフレームに対して呼出し動作が実行されるとき、復帰IPはここにセーブされる。プロセスが延期されているとき、次の命令の命令ポインタがここに記憶される。このポインタは、このフレームへの復帰後に制御が戻ってゆく32ビット線形アドレスである現在フレームのRIPの内容は定義されない。その実施は、手順呼出しがIPを現在フレームのレジスタにセーブすることである。暗黙の手順呼出しが（誤りや、割り込みを原因として）起こりうるので、プログラムはこのレジスタを別の目的に使用するべきではない。
線形アドレススペースの構造
各実行環境は32ビットの線形アドレススペースを定義する。第２図に示すように、線形アドレススペースは４つの領域（領域０から３）に分割される。実行環境の初めの３つの領域は現在プロセスに特有のものである（すなわち、プロセス制御ブロックにより定義される）。プロセス特有領域の構成を、サブシステム呼出し／復帰により変えることができる。実行環境の第４の領域は全てのプロセスが共用する領域（すなわち、プロセッサ制御ブロックにより定義される領域）。システムは、線形アドレススペースのどこに命令、スタックフレームまたはデータが配置されるかという点について何ら制眼を加えない。
16＃e000_0000＃から16＃efff_ffff＃までの線形アドレスの物理的アドレスマッピングまた16＃2000_0000＃から16＃2fff_ffff＃までの領域３オフセットの物理的アドレスマッピングはシステムにより予約される。それらの記憶場所は、領域３のオブジェクトについて米国特許第5,075,842号に記載されているオブジェクトアドレッシングメカニズムとは無関係に物理的アドレスにマッピングされても良い。
全ての領域が２ページであれば、領域境界が透明である静的線形アドレススペースが得られる。
４つの領域に対するADは、常に、読み取り−書き込みrep権利を有するものと解釈される。ADrep権利を使用してそれぞれの領域を異なるやり方で保護することは不可能である。ページレベル保護を使用して、更に高い保護を実行することができる。また、実施には、領域ADのタグビットを検査することを要求されない（すなわち、ADを要求するか、またはデータを領域ADとして解釈するかのオプションを有する）。
各領域のサイズを互いに独立して変更することができる。１つの領域を定義するために使用されるオブジェクトが1Gバイトより小さい場合、領域の終端にギャップが形成される。
512,1K,2Kまたは4Kバイトのサイズを持つオブジェクトであれば、単純なオブジェクトを使用して、領域を定義することができる。単純領域オブジェクトのベースアドレスは、そのサイズの倍数である物理的アドレス境界にアライメントされなければならない。領域を定義するために単純なオブジェクトを使用するとき、その単純なオブジェクトの長さとベースアドレスは上記の制約を満たすものと想定される。
プロセスの実行中、４つの領域は（それぞれの領域の領域記述子が異なる発生の仕方をしなければならないという意味で）全て一意でなげればならない。
仮想メモリ誤りに関する誤りハンドラがサブシステム誤りハンドラではない場合、次のようなことが起こる。あるプロセスが実行状態、準備完了状態またはブロック状態にあるとき、その領域の記述子は有効とマークされなければならない（すなわち、Ｖフラグがセットされなければならない）。
命令保護
プロセッサが命令を実行するためには、その命令を含む記憶場所に対する読み取り権利が必要である。
命令キャッシング
システムは命令ストリームの中のいずれかのバイトを非透過モードで読み取り専用キャッシングさせることができる。命令キヤッシングは、命令が位置しているページにあるキヤッシュ可能ビットとは無関係である。自己変更プログラムはシステムにより透過方式で支援されていない。
局所手順メカニズム
ーつの手順は線形アドレススペース中の任意のワードアドレスで始まる。手順呼出しおよび復帰は、第１図に示すように、その線形アドレススペース内の１つのスタックを使用する。
２つのパラメータ通過メカニズムが可能である。
大域レジスタ。呼出し後に、呼出し側によりパラメータを大域レジスタにコピーし、呼び出された側（被呼側）が大域レジスタからパラメータのコピーを取り出す。復帰または結果パラメータは、復帰後、呼出された側により大域レジスタにコピーされ、呼出し側は大域レジスタからパラメータのコピーを取り出す。これは手順に対して少数のパラメータにより最適化される。
引数リスト。スタックの引数リストに対する引数ポインタを使用する。これは、大域レジスタを使用して通過可能である数より多いパラメータが存在するときの拡張メカニズムとして設計されている。
大域レジスタを利用する方式は常に引数ポインタを利用する方式より速い。従って、引数ポインタによる方式は拡張メカニズムとしてのみ使用されるべきであり、唯一無二の方法ではない。
１つの手順が別の手順を全く呼び出さないときには、大域レジスタからスタックフレームへのパラメータのコピーを回避することができる。
命令
局所呼出し
CALL
CALL_EXTENDED
CALLおよびCALL_EXTENDEDは指定されたアドレスで手順を呼び出す。CALLは手順をIP＋24ビット符号付き変位として指定する。CALL_EXTENDEDは一般メモリ実行アドレスを使用して手順を指定する。
新たなスタックフレームが呼出し動作中に割り当てられ、制御の流れは指定された手順に移行する。
復帰命令復帰
RETURN命令は制御を呼出し手順に戻し、呼び出された側の手順のスタックフレームを解放する。呼出し側の手順のフレーム中の復帰命令ポインタ（RIP）により指示された命令で、命令の実行が継続される。
雑命令
MODIFY_AC
FLUSH_LOCAL_REGISTERS
CONVERT_ADDRESS
MODIFY_ACは現在演算制御装置を読み取るまたは変更するために使用される。FLUSH_LOCAL_REGISTERSは現在局所レジスタセットを除く全ての局所レジスタセットを関連するメモリ内フレームに書き込む。領域ADは直接にはアクセスできないので、線形アドレスを仮想アドレスに変換するためにCONVERT_ADDRESS命令を使用することができる。
本発明は米国特許第5,075,842に記載されているようなマイクロプロセッサにおいて具現化されても良い。このマイクロプロセッサは命令取り出し装置と、命令デコーダ／マイクロ命令シーケンサと、変換索引バッファと、局所バスシーケンサと、整数実行装置／浮動小数点装置という５つの主要な装置に論理的に細分割されている。
環境間移行
第１図を参照。環境間呼出し／復帰は実行環境間で同期通信を実行させる。２状態（ユーザー状態と、スーパーバイザ状態）保護メカニズムに加えて、システムはオブジェクト指向、サブシステムベース保護メカニズムを支援する。
本発明によれば、本来であればある１つの環境の専用であるようなデータ構造および手順に対するアクセスをプロセスに与えるために、環境の境界を越える手順呼出しを実行する。環境の「公用」インタフェースを表すために、ドメインオブジェクトを使用する。ドメインオブジェクトはドメインベースメカニズムと、スーパーバイザ呼出メカニズムの双方に対するインタフェースとしても使用される。ドメインオブジェクトは、全ての公用手順のアドレスおよびタイプ（サブシステムまたはスーパーバイザ）を内容とする手順テーブルを含む。
「サブシステム移行」という用語は、サブシステム保護メカニズムを表わすために使用される。「スーパーバイザ移行」という用語は、スーパーバイザ保護メカニズムを表すために使用される。
実行モード
ユーザーモードと、スーパーバイザモードの２つの実行モードが起こりうるので、従来のオペレーティングシステムをエミュレートすることができる。システムは特権命令の概念を定義しない。全ての命令をユーザーモードまたはスーパーバイザモードのいずれかで実行できる。プログラムはそのアクセス権利の性質と、それが実行中であるモードとによって特権を獲得する。アクセス権利は読み取り専用、読み取り／書き込みまたはアクセスなしなどの表示権利（rep権利）として表わされる。現在線形アドレススペースにおけるページrep権利の解釈は、実行モードによって異なる。オペレーティングシステムが使用する記憶装置は概してユーザーアクセスを許容しないページrep権利を有するが、スーパーバイザモードでは読み取り専用または読み取り／書き込みであっても良い。
先に挙げた米国特許第5,075,842号に記載されているように、タグ付けがディスエーブルされたシステムでは、データと、アクセス記述子（AD）と呼ばれるデータのポインタとを区別するためにタグを利用できない。全てのオペランドは０のタグビットを有するので、ユーザーモードではADを要求する命令またはオペランド規則子を実行しようとしても、誤りに終わる。スーパーバイザモードでは、誤りはディスエーブルされ、データはADとして処理される。スーパーバイザーモードは、ADを使用する命令をオペランドとして実行させることができる（例えば、SEND命令はポートオブジェクトに対するADを必要とする）。
タグ付けがイネーブルされたシステムにおいては、ユーザーモードとスーパーバイザモードとの唯一の相違点はベージrep権利の解釈である。スーパーバイザモードにおいてデータを自動的にADとして解釈する方式は支援されない。ADを要求する命令は指定されたオペランドがADである場合に実行可能である。
タグなしシステムでは、誤りを発生せずに実行モードをスーパーバイザモードに変更する唯一の方法は呼出しシステム命令である。システムドメインはオペレーティングシステムに関する１組のエントリ手順を含む。
スーパーバイザ手順メカニズム
スーパーバイザ手順呼出しは局所呼出しと同様である。ドメインオブジェクトの手順テーブルでスーパーバイザ手順が指定されると、ドメインオブジェクトは新たなスーパーバイザスタックポインタを指定する。プロセスがユーザーモードにあるとき、スーパーバイザスタックポインタは新たなフレームポインタとして使用される。プロセスが既にスーパーバイザモードである場合には、新たなフレームポインタを形成するために、現在フレームのスタックポインタを次の64ビット境界にアライメントする。これにより、１つのスーパーバイザ手順から複数のスーパーバイザ手順を呼び出すことができる。スーパーバイザスタックは凍結されることが必要である。これは、呼出しの一部としてプロセスの実行モード（およびトレースイネーブル）を変更できるという点を除いて、実行環境内移行である。
復帰状態フィールドは、フレームからの復帰時にスーパーバイザ復帰を報告するために使用される。スーパーバイザ復帰は、プロセスが命令の開始時にスーパーバイザモードにある場合にのみ実行される。さもなければ、局所復帰が実行される。これは、ユーザーモードにある手順によるトレース制御の変更および誤りまたは割り込み復帰の選択を阻止するものである。
スーパーバイザ手順メカニズムは、同じ線形アドレススペースを共用する２つのスタック（ユーザーズタックと、スーパーバイザスタック）と、２つの保護レベルのみを必要とするオペレーティングシステである単純タグなしオペレーティングシステムと共に使用するためのメカニズムである。
サブシステムベース保護
サブシステム転送メカニズムを示す第１図を参照する。実行環境はドメインベース保護メカニズムを使用する。サブシステム呼出しのターゲット実行環境はドメインオブジェクト（100）の内容により定義される。１つのドメインオブジェクトの手順テーブル（102）は同じ実行環境についての別のドメインの手順テーブルとは無関係である。そのため、ドメインで選択されている手順を別のドメインオブジェクトを採用して任意の順序で集合させることができる。この機能は手順変数をも支援する。
１つの環境と関連する公用情報または公用オブジェクトは、他の環境において実行中であるプログラムに対しアクセス可能であっても良い。それらのオブジェクトはドメインオブジェクトを介してアクセス可能であり、これは（他の実行環境による）アクセス可能性をパッケージの公用手順、公用定数および公用変数にのみ限定するために使用される。
１つの環境と関連する専用情報または専用オブジェクトは、他の実行環境からドメインオブジェクトを介して直接にはアクセスできない。ドメインオブジェクトを介してアクセス不可能なオブジェクトとデータをそのドメイン専用であるという。サブシステム呼出し動作の一部として、実行環境を定義するオブジェクトは実行環境の中でアクセス可能とされる。
ドメインオブジェクトを参照するAD（101）のrep権利は、公用読み取り専用情報に対するアクセスと、ドメインの公用変数を含むオブジェクトに対する間接アクセスと、公用手順に対するポインタとを可能にするために、読み取り専用にセットされる。ドメインオブジェクトタイプマネジャを除いて、ドメインオブジェクトAD（101）は書き込み権利を与えられない。さもなければ、ドメインオブジェクトを変更することにより保護をバイパスできるであろう。読み取り専用公用情報が別個のオブジェクトに位置している場合、余分な回り道レベルを回避するために、その情報をドメインオブジェクトで複製することができる。ドメイン実行環境と、ターゲット実行環境（104）の双方が読み取り一書き込み権利を持ってADを有する別個のオブジェクトに変更自在の公用変数が位置している。
ターゲット実行環境
ドメインオブジェクト（100）はサブシステム呼出しのターゲット環境（104）を指定するために使用される。サブシステム移行によって現在実行環境を定義するオブジェクトの中の１つ以上を変更しても良い。静的データ、スタックフレームおよび命令を３つの領域（データオブジェクト、命令オブジェクトおよびスタックオブジェクト）に適切に配置すれば、サブシステム移行が３つの領域全てを同時に変更する必要はない。この情報は３つの領域に次のように配置される。
データオブジェクト。領域０（110）は静的データおよび専用変数のために使用される。サブシステム呼出し／復帰は少なくとも領域０を変化させる。
命令オブジェクト。領域１は命令のために使用される。従って、ページテーブルを共用する必要なく、単一のADをコピーすることにより１つのドメインの命令分を共用することができる。実行環境が同じコンパイルユニット内にあるならば、この領域はサブシステム呼出し／復帰中に変化しないままであっても良い。
スタックオブジェクト。領域２（114）はスタックフレームのために使用される。この領域はプロセスに特有のものであり、プロセス間で共用することは不可能である。実行環境が同じ被保護サブシステム内にあるならばこの領域はサブシステム呼出し／復帰中に変化しないままであっても良い。
仮想メモリ誤りに関する誤りハンドラが誤りテーブルでサブシステムとして指定される場合、このサブシステムの領域のオブジェクトテーブルエントリ（OTE）を有効とマークしなければならない。そのようにしておかないと、システム誤りを招くか、もしくは誤りハンドラが呼び出されたときに不正確なフレームポインタまたはスタックポインタが得られることになる。
サブシステムIDとサブシステムテーブル
ドメイン（100）はターゲット環境（104）の領域２のADを直接指定するのではなく、サブシステムID（106）により間接的に指定する。サブシステムテーブル（108）はプロセスと関連する全ての領域２のスタックオブジェクトと、それに対応する最上位置のフレームポインタおよびスタックポインタとを位置決めする。プロセスの中では、サブシステムIDと領域２のADとは１対１で対応している。サブシステムIDを、それぞれ異なるプロセスと関連している複数の異なる領域２のADにマッピングすることができる。サブシステムIDは、現在プロセスと関連する環境テーブルオブジェクト（第５図）においてサブシステムテーブル（108）の１つのサブシステムエントリ（107）を選択するために使用される。サブシステムエントリ（第６図）自体は領域２のAD（109）と、領域内の最上位置のスタックフレームとを指定する。
サブシステムIDを含むワードはADまたはデータのいずれかである。サブシステムIDを表すためにADを使用する場合、ADのオブジェクトインデックスフィールドはシステム幅の、そのサブシステムにといって一意のIDを構成する。そうでない場合には、ソフトウエアが１つのプロセスの中の各サブシステムに一意のIDを割り当てる。サブシステムIDはサブシステムテーブルと共に次のような機能を実行する。
ドメイン間でのスタックオブジェクトの共用。同じ被保護サブシステムにあるドメインはスタックオブジェクトを共用できるように同じサブシステムIDを使用する。
スタックオブジェクトの再エントリ。別のサブシステムへの呼出し時にサブシステムを出るとき、最上位置のフレームの線形アドレスをサブシステムエントリにセーブする。これにより、サブシステムＡを呼び出すサブシステムＢをサブシステムＡから呼び出すときに、先にサブシステムＢに戻る必要はなくなる。
信用サブシステム。０サブシステムIDは、現在スタックオブジェクトが領域２のために使用されていることを示す。このとき、２つの互いに疑い合うサブシステムは同じ信用ライブラリモジュール（例えば、実行時間モジュール）を共用することができる。
保証スタックリソース。１つのサブシステムと関連するスタックリソースを他のサブシステムと共用する必要はないので、状況によっては、スタックリソースが決して使い尽くされることのないようにソフトウエアが保証することが可能である。これにより、いくつかの誤りを周期的に処理することができる。
プロセス間でのドメインオブジェクトの共用。サブシステムIDは異なるプロセスが同じドメインを使用することも可能にするが同じドメインは異なるプロセス特有スタックを使用して異なる領域２のADにマッピングされる。
制御スタック
サブシステム呼出し／復帰メカニズムはサブシステムリンケージ情報に対して制御スタックを（プロセスと関連する環境テーブルオブジェクトの中に）維持している。制御スタックは、復帰時に回復すべき実行環境の状態をセーブする制御スタックエントリのアレイである。
拡張サブシステム環境
サブシステムモデルを使用するとき、実行環境は次のものを含むように拡張される。
環境テーブルオブジェクト。これはサブシステムテーブルと、制御スタックの双方を含む。
現在サブシステムID。プロセスは、現在のサブシステムエントリに関する現在のサブシステムオフセットのような関連情報と共にプロセスオブジェクトにセーブされているサブシステムIDと関連する。
サブシステムモデルを使用しないときは、拡張環境内のフィールドは使用されず、それは存在しなくても良い。
割り込み／アイドル環境
プロセスが割り込み状態にあるとき、またはプロセッサがアイドル状態にあるとき、サブシステム呼出しで割り込み環境テーブルオブジェクトを使用する。割り込み環境テーブルは、ディフォルト割り込みサブシステムIDのための余分のシステム定義エントリを含む。
ドメインオブジェクト
ドメインオブジェクトを示す第３図を参照する。ドメインオブジェクトはアーキテクチャ定義システムタイプを有する。ドメインオブジェクトADにおけるタイプ権利は割り込みをされない。ドメインオブジェクトのフィールドは次のように定義されている。
領域0AD（バイト０から３）。このADは、サブシステム呼出しに当たりターゲット実行環境の領域０を定義するオブジェクトを参照する。タグビットが０であれば、CONSTRAINT.INVALID_AD誤りを起こす。
領域１のAD（バイト４から７）。このADは、サブシステム呼出しに当たりターゲット実行環境の領域１を定義するオブジェクトを参照する。タグビットが０であれば、COSTRAIN.INVAL1D_AD誤りを起こす。
サブシステムID（バイト８から11）。この混合値は、プロセスオブジェクト内の関連する環境テーブルのサブシステムテーブルの中の１つのエントリを選択するために使用されるサブシステムIDである。サブシステムテーブル内の１つのサブシステムエントリはターゲット実行環境の領域２と、環境内の最上位置のスタックフレームのフレームポインタとを定義するオブジェクトを指定する。このフィールドが０のデータワードである場合には、現在領域２が使用され、現在フレームは最上位置のスタックフレームである。サブシステムIDのビット６から31は、サブシステムテーブル内へのハッシュ値を発生するために使用される。
トレース制御、Ｔ（バイト12、ビット０）。このビットは、このオブジェクトを介するサブシステムまたはスーパーバイザ呼出し後のプロセストレースイネーブルビットを指定する。このビットを使用して新たな実行環境の内部で追跡をディスエーブルまたはイネーブルすることができる。スーパーバイザモードでスーパーバイザ手順を呼び出すときにはこのビットは無視される。このビットはプロセス制御部の符号化と同じ符号化を有する。
スーパーパイザスタックポインタ（バイト12から15、ビット２から31）。これはスーパーバイザスタックに関する線形アドレス（ワードの形態）である。このフィールドは、ユーザーモードでスーパーバイザ呼出しを実行するときに新たなフレームを位置決めするために（現在フレームのスタックポインタの代わりに）使用される。
プロセスはユーザースタック（ユーザーモードのとき）と、スーパーバイザスタック（スーパーバイザモードのとき）とを識別するだけである。異なるドメインのスーパーバイザスタックポインタが異なる値を有する場合、全てのスタックは全てのスーパーバイザ手順の要求を処理するのに十分なほど大きくなければならない。従って、１つのプロセスにより使用されるスーパーバイザスタックポインタは同じであるべきである。誤りテーブルはプロセッサと関連しているので、同じプロセッサを共用する全てのプロセスはスーパーバイザ誤り処理手順により指定されるスーパーバイザスタックを有していなければならない。そのため、スーパーバイザスタックポインタはシステム幅一定であるべきである。
手順エントリ（バイト48からオブジェクトの終端まで）。第４図に示す手順エントリはターゲット手順のタイプとアドレスを指定する。手順エントリのフィールドは次のように定義されている。
手順エントリタイプ（ビット０から１）。このフィールドは呼び出すべき手順のタイプを示す。このフィールドは次のように符号化されている。
00一局所手順
01一実施特有
10一スーパーバイザ手順
11−サブシステム手順
オフセット（ビット２−81）。この30ビットフィールドはターゲット手順の第１の命令に対するターゲット実行手順べのワードオフセットである。
環境テーブルオブジェクト
第５図に示す環境テーブルオブジェクトはサブシステムテーブル（111）と、制御スタック（113）の２つのデータ構造を含む。このオブジェクトは、１つのプロセスの中の全てのサブシステム移行に必要な情報を含む。すなわち、プロセスオブジェクトと環境テーブルオブジェクトとは１対１で対応している。
これは第５図に更に詳細に示されている。環境テーブルオブジェクトは定義されたシステムタイプを有していない。環境テーブルオブジェクトのフィールドは次のように定義されている。
サブシステムテーブル。この領域については、次の項で説明する。第１のエントリは現在制御スタックポインタと、制御スタック限界と、サブシステムテーブルサイズとを記憶するために使用される。
制御スタック。この領域については、以下の項で説明する。
サブシステムテーブル
サブシステム呼出し中、ドメインオブジェクトは、新たな実行環境を定義する３つのオブジェクトのうち２つのみを直接指定する。ドメインオブジェクトは、新たな実行環境の第３のオブジェクト（114）を間接的に指定するサブシステムID（106）を含む。サブシステムは、サブシステムID（106）を新たな環境の領域２のAD（109）にマッピングさせる環境テーブルオブジェクト内のデータ構造である。領域２は呼出し／復帰時のスタックフレーム割当てのために使用される。すなわち、このオブジェクトを異なるプロセス間で共用することはできない。
第５図のサブシステムテーブルの第１のエントリは次のように定義されたフィールドを有するダミーエントリである。
現在制御スタックポインタ、CCSP（バイト０から３、ビット４から31）。これは、このオブジェクトに関する次に利用可能な制御スタックエントリ（CSE）への４ワードインデックスである。このフィールドはサブシステム呼出し時に増分され、サブシステム復帰時に滅分される。
制御スタック限界、CSL（バイト４から７、ビット４から31）。これは、制御スタックオーバーフロー誤りハンドラのために予約された（すなわち、規則的に使用するためのものではない）第１のCSEに対するこのオブジェクトに関する４ワードインデックスである。第11図に示すように、サブシステム呼出し完了後にCCSP＝CSLであるとき、CONTR0L_STACK.OVERFLOW誤りが発生される。
サブシステムテーブルサイズ（バイト12−15、ビット４−29）。このフィールドは、サブシステムのサイズから１を減じたものを含む（サブシステムエントリ数単位）。このサブシステムテーブルのサイズは２の累乗でなければならない。すなわち、このフィールドは最下位ビットに１からなるビットマスクを含んでいる。そうでなければ、動作は予測不可能である。
サブシステムIDからサブシステムエントリへのマッピング
第９図に示すように、サブシステムIDはサブシステムテーブル内の対応するサブシステムエントリを次のように選択する。
指定されたサブシステムIDが０であるかまたは現在サブシステムIDと等しい場合、現在サブシステムIDを使用する。そうでない場合には、以下に指示するようにサブシステムテーブルを探索する。
指定されたサブシステムIDのビット６から31とサブシステムテーフルサイズとの論理積をとり、初期サブシステムエントリインデックスを形成する。
次の動作を繰り返す。
（１）選択したサブシステムエントリのサブシステムIDが０であれば、OPERAT10N_NOT_FOUND誤りを起動すれば良い。
（２）選択したサブシステムエントリが指定されたサブシステムIDと整合するならば（比較＿混合）、探索から出る。
（３）先行サブシステムエントリを選択する。すなわち、後戻りして探索する。エントリ０は、システムテーブルサイズにより指示される最終エントリに向かって循環する。
（４）これが初期サブシステムエントリであり且つプロセスが割り込み状態にない場合には、OPERAT1ON.SUBSYSTEM_NOT_FOUND誤りを起こす。プロセスが割り込み状態にあれば現在サブシステムを使用する。
サブシステムエントリ
サブシステムエントリの構造を第６図に示す。サブシステムエントリのフィールドは次のように定義されている。
最上位置フレームポインタ（バイト０から３、ビット６から31）。このフィールドは最上位置スタックフレームのフレームポインタを含む。この環境へのサブシステム呼出しの間、このフィールドは新たなフレームの先行フレームポインタとして使用される。この環境からのサブシステム呼出しの間には、ここに現在フレームポインタがセーブされる。この環境へのサブシステム復帰の間には、これはターゲットフレームポインタとして使用される。この環境からのサブシステム復帰の間には、ここに現在フレーム中の先行フレームポインタがセーブされる。
最上位置スタックポインタ（バイト４から７）。このフィールドは、最上位置のスタックフレームのスタックポインタを含む。この環境へのサブシステム呼出しの間、このフィールドは新たなフレームのフレームポインタを計算するために使用される。この環境からのサブシステム呼出しの間には、ここに現在スタックポインタがセーブされる。この環境からのサブシステム間の復帰の間、ここに現在フレームポインタ（すなわち、先行フレームの丸められたスタックポインタ）がセーブされる。この環境からの他のサブシステム間の復帰の間には、ここに現在フレームポインタから64を引いたもの（すなわち、先行フレームの丸められたスタックポインタ）がセーブされる。この環境への復帰の間には、このフィールドは無視される。
サブシステムID（バイト８から11）。このID（105）は、ターゲット実行環境が関連しているサブシステムを識別する。このIDはサブシステムID（106）を領域２オブジェクト（114）に整合させるためのキーとして使用される。すなわち、これは、サブシステムテーブル内で一意性を有する。０であるサブシステムID値は、このサブシステムエントリが割り当てを受けていないことを示す。全て１のサブシステムIDを伴なうサブシステムテーブルエントリ０は、制御スタック情報を記憶するために使用される。
事象−誤りディスエーブル（バイト８、ビット２）。このサブシステムに入ると、このフラグは事象−誤りディスエーブルビットの現在値を定義する。事象−誤りディスエーブルビットがセットされている場合、事象−誤り要求フラグがセットされていれば、事象・公報メッセージ誤りが起こされる。事象−誤りフラグを０変更するサブシステム間呼出し／復帰の時には、呼出し／復帰後に未決の事象／誤り要求を起こす。
領域２のAD（バイト12から15）。このAD（109）は、このエントリにより部分的に指定されるターゲット実行環境の領域２を定義するオブジェクトを参照する。このADは読み取り／書き込み権利を含んでいなければならない。そうでなければ、PROTECTION.AD_REP_RIGHTS誤りを起こしても良い。
制御スタック
制御スタック（113）の編成を第５図に示す。制御スタックエントリ（第７図）はサブシステム呼出し時に制御スタックに押し込まれ、サブシステム復帰時に制御スタックから飛び出す。制御スタックは予約制御スタックエントリにより下端部で境界限定される。制御スタックの上端部は、制御スタック限界に若干の予約エントリ（制御スタックオーバーフロー誤りハンドラのためのエントリ）を加えたものにより境界が決められる。スタックオーバーフロー誤りハンドラのために予約すべきエントリの数はソフトウェアで定義される。
対応するプロセスが実行中であるとき、制御スタックの一部または前部はプロセッサ内部に保持される（すなわち、メモリイメージは正確でなくとも良く、メモリイメージの読み取り／書き込みは制御スタックに何らかの影響を与えるとは限らない）。L0AD_CONTR0L_STACKポインタ命令を使用して、キャッシュ情報をフラッシュし且つ無効化することができる。
制御スタックエントリ
制御スタックエントリのフォーマットを第７図に示す。制御スタックエントリのフィールドは次のように定義されている。
領域０復帰AD（バイト０から３）。このADは、対応するサブシステム呼出しの呼出し側実行環境の領域０を定義するオブジェクトを参照する。サブシステム復帰時、領域０はこのオブジェクトに再ストアされる。このADは読み取り／書き込み権利を含んでいなければならず、そうでなければPROTECTION.AD_REP_RIGHTS誤りを起こしても良い。
領域１復帰AD（バイト４から７）。このADは、対応するサブシステム呼出しの呼出し側実行環境の領域１を定義するオブジェクトを参照する。サブシステム復帰時、領域１はこのオブジェクトに再ストアされる。このADは読み取り／書き込み権利を含んでいなければならず、そうでなければ、PROTECTION.AD_REP_RIGHTS誤りを起こしても良い。
トレース制御、Ｔ（バイト８、バイト０）。このビットは、対応する通常サブシステム呼出し中のプロセス制御部のトレースイネーブルビットを含む。サブシステム復帰中は、トレース制御はこのビットに再ストアされる。
復帰モード、MMM（バイト８、ビット１から３）。この３ビットフィールドはエントリのタイプを示す。このフィールドは次のように符号化されている。
000一正常サブシステム内
001一正常サブシステム間
010一予約（CONTROL_STACK.UNDERFL0W誤り）
011一予約（CONTROL_STACK.UNDERFLOW誤り）
100一誤りサブシステム内
101一誤りサブシステム間
110一予約（CONTROL_STACK.UNDERFLOW誤り）
111一予約（CONTR0L_STACK.UNDERFLOW誤り）
復帰サブシステムエントリオフセット（バイト８から11、ビット４から31）。このフィールドは、呼出し側実行環境の領域２を定義するサブシステムエントリに関する（環境テーブル内の）サブシステムテーブルへのエントリインデックスを含む。
サブシステムテーブルが拡張され且つ再ハッシュされると、サブシステムエントリオフセットは変化し、更新される必要がある。
呼び出された側のドメインAD（バイト12から15）。このAD（120）はこのサブシステム呼出しで使用されるドメインオブジェクトを参照する。これは呼出し中に初期設定されるが、復帰時には使用されない。
ドメイン間CALL/RETURN
CALL_DOMAIN命令
CALL_DOMAIN命令は指定されたドメインオブジェクトにおける手順番号により指定される手順を呼出し、実行環境をドメインオブジェクトにより指定される通りに変化させる。指定されたドメインADは読み取り権利を有していなければならない。手順番号は、手順エントリに関する指定されたドメインオブジェクトの手順テーブルへのワードインテックスとして使用される。
CALL_SYSTEM命令
CALL_SYSTEM命令はシステムドメインの手順を呼び出す。システムドメインはプロセッサ制御ブロックにより参照されるドメインである。タグなしシステムではスーパーバイザ呼出しを可能にすることが必要である。タグ付きシステムでは、システムドメインはタグなしオペレーテインクシステムのスーパーバイザ呼出しをタグ付きオペレーティングシステムにマッピングするために使用される。
第８図から第11図は、CALL_SYSTEM命令のフローチャートである。第10図は、システム呼出し命令のサブシステム間呼出しサブルーチンの詳細を示し、第11図は、システム呼出し命令のサブシステム内呼出しサブルーチンの詳細を示す。
RETURN命令
特定の復帰アクションは、現在フレーム中の先行フレームフィールドにある復帰状態フィールドにより確定される。これにより、異なるアクションを実行するとしても、手順をそれに関連するドメインの内側と、外側の双方から呼び出すことができるようになる。
LOAD_CONTR0L_STACK_POINTER命令
LOAD_CONTROL_STACK_POINTERはプロセスの現在制御スタックボインタを復帰させる。
本発明をその好ましい実施例に関連して特定して図示し且つ説明したが、本発明の形態および詳細の上細の変更とその他の変更が本発明の範囲から逸脱せずに実施可能であることは当業者には理解されるであろう。
【図面の簡単な説明】
第１図は、本発明が具現化されるブロセッサレジスタおよびシステムオブシムクトのブロック線図、
第２図は、第１図の実行環境の線形アドレススペース構造の更に詳細なフロック線図、
第３図は、第１図のドメインオブジェクトの更に詳細なブロック線図、
第４図は、第２図のドメインオブジェクトにおける手順エントリの更に詳細なブロック線図、
第５図は、第１図の環境テーブルオブジェクトの更に詳細なブロック線図、
第６図は、第５図の環境テーブルオブジェクトのサブシステムエントリの更に詳細なブロック線図、
第７図は、第５図の環境テーブルオブジェクトの制御スタックエントリの更に詳細なブロック線図、
第８図および第９図は、システム呼出し命令のフローチャート、
第10図は、第８図および第９図のシステム呼出し命令のサブシステム間呼出しサブルーチンのフローチャート、
第11図は、第８図および簸９図のシステム呼出し命令のサブシステム内呼出しサブルーチンのフローチャートである。
101……ドメインAD,102……手順テーブル、104……ターゲット実行環境、105,106……サブシステムID,107……サブシステムエントリ、108……サブシステムテーブル、109……領域２のAD,110……領域０オブジェクト、112……領域１オブジェクト、114……領域２オブジェクト、120……呼び出された側のドメインAD、122……呼び出された側のドメインオブジェクト。
【図１】
0003554320.tif 000002
【図２】
0003554320.tif 000003
【図３】
0003554320.tif 000004
【図４】
0003554320.tif 000005
【図６】
0003554320.tif 000006
【図９】
0003554320.tif 000007
【図５】
0003554320.tif 000008
【図７】
0003554320.tif 000009
【図８】
0003554320.tif 000010
【図１０】
0003554320.tif 000011
【図１１】
0003554320.tif 000012