(57)【要約】  【課題】  レジスタ相対アドレッシングモードによるメモリアクセス機能を備えたマルチタスクシステムにおいて、メモリアクセスのためのプログラムサイズの増加を防ぐ。  【解決手段】  相対アドレッシングによるアドレス計算で用いられるインデックス値として、タスク毎に固有のものを用意する。即ち、タスクＡに対してはインデックス値「0x00008000」を、タスクＢに対してはインデックス値「0x00014000」を、各タスクのコンテキスト情報として夫々保持させておく。ＯＳは、タスクの切り替えを行う際、切り替え先のタスクに対応したインデックス値をインデックスレジスタに格納する。一方、プログラム（実行ファイル）を生成する際は、与えられたタスク毎の固有のインデックス値を用いてアドレス解決を行うようなリンカを用意し、リンケージを行う。これにより、タスク毎に固有の相対アドレッシング空間を持つことができる。【選択図】  図５
2006164061.tif 000002
【特許請求の範囲】
【請求項１】
内部に複数のレジスタを有し、オペレーティングシステムによる管理の下で複数のタスクを実行可能なマイクロプロセッサと、
前記複数のタスクで用いられる変数がタスク毎に格納されるメモリと、
を備え、
前記複数のレジスタのいずれか一つは、前記メモリ上の特定のアドレスが基準アドレスとして格納される基準アドレス格納レジスタとして指定されており、
前記マイクロプロセッサは、前記メモリ内の変数にアクセスするためのアドレッシングモードとして、前記基準アドレス格納レジスタに格納された基準アドレスからの相対値で示されるアドレスへアクセスするレジスタ相対アドレッシングモードを備えることにより、前記タスク実行時、前記メモリへアクセスすべき旨の命令コードに含まれる前記基準アドレス格納レジスタを示すデータ及び前記相対値に基づいて前記メモリへアクセスできるよう構成され、
前記基準アドレスとして、前記タスク毎に異なる固有のアドレスが設定されており、
前記命令コードに含まれる前記相対値は、対応するタスクに対して設定された前記基準アドレスと該命令コードによってアクセスすべき実際のアドレスとの差分であり、
前記オペレーティングシステムは、実行タスクの切り替えの際、切り替え前のタスクの実行終了後から切り替え先のタスクの実行開始までの間に、その切り替え先のタスクに対応した前記基準アドレスを前記基準アドレス格納レジスタへ格納する機能を備えている
ことを特徴とするマルチタスクシステム。
【請求項２】
請求項１記載のマルチタスクシステムであって、
前記基準アドレスは、それぞれ、前記メモリにおいて対応するタスクで用いられる変数が格納される領域内の特定のアドレスであることを特徴とするマルチタスクシステム。
【請求項３】
請求項１又は２記載のマルチタスクシステムであって、
前記各タスクで用いられる変数は、前記メモリ内の所定の領域に連続して格納されることを特徴とするマルチタスクシステム。
【請求項４】
請求項１〜３いずれかに記載のマルチタスクシステムとしての機能をコンピュータに実現させるためのプログラム。
【請求項５】
請求項４記載のプログラムを生成するプログラム生成方法であって、
前記各タスクと前記基準アドレスとの対応関係を設定する第１ステップと、
高水準言語で表現された前記各タスクのソースコードをそれぞれ中間言語形式のオブジェクトコードに変換する第２ステップと、
前記各オブジェクトコード及び前記オペレーティングシステムを前記対応関係に基づいてリンクさせることにより、前記マイクロプロセッサが直接解釈可能な実行形式コードを生成する第３ステップと
を有し、
前記第３ステップで行われる処理の一つとして、前記オブジェクトコードから前記各タスクで用いられる変数を抽出し、該抽出した各変数それぞれに対し、タスク毎に、対応する前記基準アドレスに基づいて前記マイクロプロセッサが前記レジスタ相対アドレッシングモードにてアクセス可能なメモリ領域内のアドレスを指定する、アドレス指定処理を有する
ことを特徴とするプログラム生成方法。
【請求項６】
請求項５記載のプログラム生成方法であって、
前記第１ステップでは、前記タスク毎に固有の前記基準アドレスを直接設定することを特徴とするプログラム生成方法。
【請求項７】
請求項５記載のプログラム生成方法であって、
前記第１ステップでは、前記タスク毎に、該タスクで用いられる変数が配置されるメモリ領域の先頭アドレスからの相対値を設定することにより前記対応関係の設定を行い、
前記第３ステップにおける前記アドレス指定処理では、前記タスク毎に、該タスクで用いられる変数を配置する領域の先頭アドレスを定め、その先頭アドレスに前記相対値を加えたアドレスを該タスクに対応した前記基準アドレスとして定める
ことを特徴とするプログラム生成方法。
【請求項８】
請求項５〜７いずれかに記載のプログラム生成方法であって、
前記第１ステップでは、前記対応関係の設定に加え、更に、前記各タスクと該各タスクで用いられる変数との対応関係を示すテーブルも生成し、
前記第３ステップにおける前記アドレス指定処理では、前記オブジェクトコードから抽出した各変数がそれぞれどのタスクで用いられるものであるかを、前記テーブルに基づいて識別する
ことを特徴とするプログラム生成方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、オペレーティングシステムの管理下で複数のタスクが実行されるマルチタスクシステムと、そのシステムを実現するためのプログラム、及びそのプログラムの生成方法に関する。
【背景技術】
【０００２】
従来より、自動車、家電、ＯＡ機器、通信機器など様々な分野で組み込みシステムが適用されている。組み込みシステムでは、制約されたリソースの中で高レベルの信頼性・リアルタイム性が要求されるため、システムの規模によっては、複数タスクのリアルタイム処理能力に優れたリアルタイムオペレーティングシステム（以下「リアルタイムＯＳ」という）の搭載が不可欠となっている。
【０００３】
特に、自動車の分野では、制御の広範囲化・高度化・高精度化が進むにつれて制御ソフトウェアの規模も増加の一途を辿っており、そういった大規模な制御システムの信頼性向上や開発コスト削減等のために、リアルタイムＯＳが導入されている。自動車制御用のリアルタイムＯＳとしては、ＯＳＥＫ／ＶＤＸ仕様のＯＳがよく知られており、この仕様に準拠したＯＳや各種開発ツールなども数多く知られている（例えば、非特許文献１参照。）。
【０００４】
ところで、自動車内の電子制御装置（ＥＣＵ）に搭載されるマイクロプロセッサは、ＭＭＵ（メモリ・マネージメント・ユニット）による仮想アドレス機構を持たないＲＩＳＣ（Reduced Instruction Set Computer）方式のものが主流である。そして、ＲＩＳＣ方式のマイクロプロセッサにおける、メモリへアクセスする際のアドレッシングモードとして、レジスタ相対アドレッシングモードが知られている。このレジスタ相対アドレッシングモードは、プロセッサ内部の汎用レジスタのうち特定のレジスタをインデックスレジスタとして指定し、このインデックスレジスタに、メモリ上の特定のアドレスをインデックス値として格納しておき、メモリアクセス時にはこのインデックス値からの相対値で示されるアドレスにアクセスするというものである。
【０００５】
レジスタ相対アドレッシングモードを備えることで、ＲＩＳＣ方式プロセッサのように命令長が固定であって一つの命令コードでアドレスを直接指定できないものであっても、一つの命令コードでアドレスを指定（計算）することができるようになり、メモリアクセス時のプログラムサイズの削減、延いては実行時間の削減が可能となる。
【非特許文献１】リアルタイムＯＳ（ＯＳ）ベースのアプリケーション作成サポートツール“ＲＴＡ−ＯＳＥＫ  ｆｏｒ  Ｍｏｔｏｒｏｌａ  ＭＰＣ５６ｘ（Ｄｉａｂコンパイラ対応） ”の製品カタログ、［online］、ＥＴＡＳ  ＧｍｂＨ、［平成１６年１１月１９日検索］、インターネット＜URL：http://www.etasgroup.com/downloads/rta#osek#datasheet#mpc56x#diab.pdf＞
【発明の開示】
【発明が解決しようとする課題】
【０００６】
しかしながら、ＯＳＥＫ／ＶＤＸ仕様に代表されるＥＣＵ向けリアルタイムＯＳを搭載したマイクロプロセッサがインデックスレジスタを利用してアクセスできるメモリアドレス空間（相対アドレッシング空間）は、上述した非特許文献１（第１頁右欄第１４−１６行参照）にも記載されているようにシステムで一つのみである。
【０００７】
ここで、ソースコードをマイクロプロセッサが直接解釈可能な実行形式コード（機械語）に変換する過程を図９に基づいて概略説明する。図９に示す如く、Ｃ言語等の高水準言語で記述されたソースコード１０１は、コンパイラ１０２によってオブジェクトコード１０３に変換される。この状態ではまだアドレス解決されておらず、命令コード中の相対値は未定である。
【０００８】
そして、このオブジェクトコード１０３が、リンカ１０４によりリンクされることにより、実行形式コードからなる実行ファイルが生成される。リンカ１０４によりリンクさせる際には、インデックス値（例えば「0x00008000」）をリンカ１０４に与え、これによりリンカ１０４は、与えられたインデックス値に基づく相対アドレッシング空間内に各変数を順次配置してアドレス解決を行う。そして、生成された実行ファイルはターゲットとなるシステムに搭載（ROM或いはフラッシュメモリ等に書き込み）され、マイクロプロセッサにより実行されることとなる。
【０００９】
このように、従来のリンカ１０４では、全ての変数が一つのインデックス値に基づく一つの相対アドレッシング空間内に配置されるようにアドレス解決を行っていたため、メモリに配置すべき変数の総量が相対アドレッシング空間のサイズを超えると、相対アドレッシング空間内に配置できない変数についてはその空間外に配置せざるを得ないことになる。そうなると、その空間外に配置される変数については一命令でのアドレス指定ができず、二つの命令コードによってアドレスを指定せざるを得ない状態となっていた。
【００１０】
より具体的には、図１０に示すように、３２ビットＲＩＳＣプロセッサにおいて例えばインデックス値として「0x00008000」がインデックスレジスタに格納されている場合、このインデックス値を用いてレジスタ相対アドレッシングにより一命令で参照（アクセス）可能な空間、即ち相対アドレッシング空間は、最大で0x00000000〜0x0000FFFFの６４ＫＢである。このように相対アドレッシング空間が一定の領域に制限されるのは、３２ビットＲＩＳＣプロセッサの命令コード中の相対値（以下「オフセット」ともいう）が１６ビット（うち１ビットは符号ビット）であることによる。そのため、この空間内に全ての変数を配置できれば、全ての変数につき、レジスタ相対アドレッシングモードによるアクセスが可能となる。このとき、例えば、
lw  $3,0x0100（$28）
といった命令コードがある場合、マイクロプロセッサは、内部のインデックスレジスタ（＄２８）に格納されたインデックス値「0x00008000」にオフセット「0x0100」を加えることによりアドレスを計算し、得られたアドレスに格納されている変数をロードして別のレジスタ（＄３）に格納する、といった処理を実行することとなる。つまり、４バイト長の一命令によりアドレスを指定できるのである。
【００１１】
ところが、図示のように、二つのタスクＡ，Ｂのうち、タスクＡで用いられる変数について４８ＫＢ分の領域を必要とし、タスクＢで用いられる変数について３２ＫＢ分の領域を必要とする場合、タスクＡで用いられる４８ＫＢ分の変数については、0x00000000〜0x0000BFFFの領域に配置することにより、レジスタ相対アドレッシングモードによるアクセスが可能であるものの、タスクＢで用いられる３２ＫＢ分の変数については、その半分の１６ＫＢ分を相対アドレッシング空間の外側に配置せざるを得ないこととなる。つまり、タスクＢで用いられる変数のうち、0x00010000〜0x00013FFFの領域に配置される変数に対しては、インデックス値を用いてアクセスできず、例えば、
lui   $1,0x0001
lw    $3,0x1234（$1）
といった二つの命令コードにてアクセスすることとなり、一つの変数にアクセスするためのプログラム量が８バイト必要となる。なお、上記二つの命令コードはよく知られたものであるが、概略説明すると、まず指定すべきアドレスの上位２バイト分を「0x0001」とし、これに下位２バイト分の「0x1234」を加えて、アクセスすべきアドレス「0x00011234」を得る。そして、メモリ上のアドレス「0x00011234」に格納されたデータをロードしてレジスタ（$3）に格納する。
【００１２】
このように、各タスクで用いられる変数の総量が相対アドレッシング空間のサイズを超えると、相対アドレッシング空間内に配置できない変数については一命令でのアドレス指定ができず二つの命令コードによってアドレスを指定せざるを得なくなり、その分、プログラムサイズの増加、延いては実行時間の増加を招いていた。
【００１３】
本発明は上記課題に鑑みなされたものであり、レジスタ相対アドレッシングモードによるメモリアクセス機能を備えたマルチタスクシステムにおいて、メモリアクセスのためのプログラムサイズの増加を防ぐことを目的とする。
【課題を解決するための手段】
【００１４】
上記課題を解決するためになされた請求項１記載のマルチタスクシステムは、内部に複数のレジスタを有し、オペレーティングシステムによる管理の下で複数のタスクを実行可能なマイクロプロセッサと、その複数のタスクで用いられる変数がタスク毎に格納されるメモリとを備えており、マイクロプロセッサ内部の複数のレジスタのいずれか一つは、基準アドレス格納レジスタとして指定され、メモリ上の特定のアドレスが基準アドレスとして格納される。
【００１５】
マイクロプロセッサは、メモリ内の変数にアクセスするためのアドレッシングモードとして、基準アドレス格納レジスタに格納された基準アドレスからの相対値で示されるアドレスへアクセスするレジスタ相対アドレッシングモードを備えることにより、タスク実行時、メモリへアクセスすべき旨の命令コードに含まれる基準アドレス格納レジスタを示すデータ及び相対値に基づいてメモリへアクセスできるよう構成されている。
【００１６】
また、基準アドレスとして、タスク毎に異なる固有のアドレスが設定されており、命令コードに含まれる相対値は、対応するタスクに対して設定された基準アドレスと該命令コードによってアクセスすべき実際のアドレスとの差分である。
【００１７】
そして、オペレーティングシステムは、実行タスクの切り替えの際、切り替え前のタスクの実行終了後から切り替え先のタスクの実行開始までの間に、その切り替え先のタスクに対応した基準アドレスを基準アドレス格納レジスタへ格納する機能を備えている。
【００１８】
即ち、請求項１記載のマルチタスクシステムは、アドレッシングモード自体は従来と同様、レジスタ相対アドレッシングモードを備えているが、メモリアクセス時に用いられる基準アドレスを、各タスクそれぞれ固有のものとしている。そして、オペレーティングシステムがタスクの切り替えを行う際に、切り替え先のタスクに対応した固有の基準アドレスを基準アドレス格納レジスタに格納するようにしている。
【００１９】
そのため、メモリアクセス時のマイクロプロセッサの動作自体は、基準アドレス格納レジスタに格納されている基準アドレスと命令コード中の相対値とを加算し、その結果得られるアドレスへアクセスするものであるが、実行するタスクが異なれば、基準アドレス格納レジスタに格納されている基準アドレスも異なるものとなる。つまり、タスク毎に固有の相対アドレッシング空間が用意されることとなり、タスク毎に、対応する基準アドレスに基づいてアクセス可能な領域を確保できるのである。
【００２０】
従って、請求項１記載のマルチタスクシステムによれば、タスク毎に基準アドレスが与えられ、各タスクそれぞれ固有の相対アドレッシング空間を確保することが可能となる（つまり一つのシステムが複数の相対アドレッシング空間を持つことができる）ため、レジスタ相対アドレッシングモードによりアクセス可能なメモリ空間を広げることができ、メモリアクセスのためのプログラムサイズの増加を防ぐことが可能となる。延いては、プログラムの実行時間の増加を防ぐことが可能となる。
【００２１】
ここで、各基準アドレスは、その基準アドレスに基づいて対応するタスクの変数を指定できる範囲内で任意に設定することができ、必ずしも対応するタスクの変数が格納される領域内のアドレスとする必要はない。しかし、例えば、基準アドレスを適当に定めることによってあるタスクの基準アドレスが他のタスクの変数格納領域内のアドレスになってしまうと、その基準アドレスに基づいてアドレス指定可能な領域のうち、他のタスクの変数格納領域と重複する部分は実質使用できないため、その分、実際に使用できる相対アドレッシング空間が減少してしまうことになる。
【００２２】
そのため、例えば請求項２に記載のように、基準アドレスは、それぞれ、メモリにおいて対応するタスクで用いられる変数が格納される領域内の特定のアドレスにするとよい。このようにすれば、各タスクそれぞれが相対アドレッシング空間を十分に確保することが可能となる。
【００２３】
更に、例えば請求項３に記載のように、請求項１又は２記載のマルチタスクシステムにおいて、各タスクで用いられる変数が、メモリ内の所定の領域に連続して格納されるようにするとよい。このようすれば、変数格納領域がタスク毎にランダムに配置されるのに比べ、メモリを有効に利用することができる。
【００２４】
そして、請求項１〜３いずれかに記載のマルチタスクシステムを実現するオペレーティングシステムや各タスクは、ハードウェアで実現することも可能であるが、請求項４に示すように、コンピュータに実行させるためのプログラムとして構成するのが一般的である。即ち、マイクロプロセッサ及びメモリを有するコンピュータを、請求項１〜３いずれかに記載のマルチタスクシステムとして機能させるためのプログラムを構成することができる。
【００２５】
このようなプログラムは、例えば、フロッピー（登録商標）ディスク、光磁気ディスク、ＣＤ−ＲＯＭ、ハードディスク、ＲＯＭ、ＲＡＭ等のコンピュータ読み取り可能な記録媒体に記録し、必要に応じてコンピュータにロードして起動することにより用いることができる。また、ネットワークを介してロードして起動することにより用いることもできる。
【００２６】
次に、請求項５に記載の発明は、請求項４記載のプログラムを生成するプログラム生成方法であって、各タスクと基準アドレスとの対応関係を設定する第１ステップと、高水準言語で表現された各タスクのソースコードをそれぞれ中間言語形式のオブジェクトコードに変換する第２ステップと、各オブジェクトコード及びオペレーティングシステムを上記対応関係（第１ステップで設定）に基づいてリンクさせることにより、マイクロプロセッサが直接解釈可能な実行形式コードを生成する第３ステップとを有する。
【００２７】
そして、第３ステップで行われる処理の一つとして、オブジェクトコードから各タスクで用いられる変数を抽出し、該抽出した各変数それぞれに対し、タスク毎に、対応する基準アドレスに基づいてマイクロプロセッサがレジスタ相対アドレッシングモードにてアクセス可能なメモリ領域内のアドレスを指定する、アドレス指定処理を有する。
【００２８】
つまり、タスク毎の基準アドレスに関する情報（上記対応関係）を用意しておき、各タスクのソースコードをオブジェクトコードに変換した後、これらをリンクさせる際に、その情報に基づいて各変数のアドレスを指定（アドレス解決）していくのである。こうすることによって、各変数はそれぞれ対応するタスク固有の基準アドレスに基づいてアドレス指定がなされる。つまり、タスク毎に相対アドレッシング空間が形成されることとなる。
【００２９】
従って、請求項５記載のプログラム生成方法によれば、タスク毎に異なる相対アドレッシング空間が設定されたプログラム（実行形式コード）が生成されるため、請求項４記載のプログラムを生成できる。換言すれば、コンピュータを請求項１〜３いずれかに記載のマルチタスクシステムとして機能させるためのプログラムの提供が可能となる。
【００３０】
ここで、第１ステップにおける対応関係の設定は、具体的には、例えば請求項６のように、タスク毎に固有の基準アドレスを直接設定するようにしてもよいし、また例えば、請求項７に記載のように、タスク毎に、該タスクで用いられる変数が配置されるメモリ領域の先頭アドレスからの相対値を設定するようにしてもよい。このとき、第３ステップにおけるアドレス指定処理では、タスク毎に、該タスクで用いられる変数を配置する領域の先頭アドレスを定め、その先頭アドレスに相対値を加えたアドレスを該タスクに対応した基準アドレスとして定める。
【００３１】
前者（請求項６）の場合、第３ステップにおけるアドレス指定処理では、タスク毎に直接設定された基準アドレスに基づいてアドレスの指定がなされることとなる。また、後者（請求項７）の場合は、基準アドレスそのものが第１ステップで指定されず、第３ステップのアドレス指定処理において、あるタスクの変数につきアドレス指定を行うときに、そのタスクの変数が配置される先頭のアドレスに相対値を加えたものが基準アドレスとして設定されることとなる。
【００３２】
請求項６，請求項７いずれによっても、タスク毎に基準アドレスが設定され、それに基づいて各変数のアドレス指定をタスク毎に行うことができるが、特に請求項７記載の方法によれば、ユーザ（プログラマ等）側でタスク毎の基準アドレスを予め決める必要がないため、その分ユーザ側の負担を軽減することができる。
【００３３】
請求項８記載の発明は、請求項５〜７いずれかに記載のプログラム生成方法であって、第１ステップでは、上記対応関係の設定に加え、更に、各タスクと該各タスクで用いられる変数との対応関係を示すテーブルも生成し、第３ステップにおけるアドレス指定処理では、オブジェクトコードから抽出した各変数がそれぞれどのタスクで用いられるものであるかを、上記テーブルに基づいて識別する。
【００３４】
このように、各変数がどのタスクで用いられるものであるかという情報を予めテーブル化しておくことで、第３ステップにおけるアドレス指定処理を容易かつ確実に行うことができる。
【発明を実施するための最良の形態】
【００３５】
以下に、本発明の好適な実施形態を図面に基づいて説明する。以下の説明では、大きく分けて、パワートレインＥＣＵ１の構成・動作（より詳しくはマイクロコンピュータ３の構成・動作）と、マイクロコンピュータ３を動作させるための実行プログラムを生成するプロセスとについて、それぞれ説明する。
【００３６】
＜パワートレインＥＣＵの構成・動作＞
図１は、本発明のマルチタスクシステムが適用された実施形態のパワートレインＥＣＵ１の概略構成を表すブロック図である。パワートレインＥＣＵ１は、内燃機関（エンジン）により駆動される車両に搭載され、燃料噴射や点火などの各種エンジン制御やトランスミッション制御など、車両における重要な制御を担うものである。
【００３７】
図１に示す如く、パワートレインＥＣＵ１は、主として、制御の中枢を担うマイクロコンピュータ（以下「マイコン」と略す）３と、車両の水温（冷却水温度）やバッテリ電圧、スロットル開度などの各種アナログ信号が入力され、フィルタやアナログスイッチ等を介してマイコン３内のＡ／Ｄ変換器（ＡＤＣ）１７へ出力するためのアナログ入力部５と、自動変速機の出力軸回転数やクランク角などの各種デジタル信号が入力され、波形整形等の信号処理を施してマイコン３内のＩ／Ｏ１９へ出力するための入力処理回路７と、マイコン３から出力される各種制御信号に基づいて、インジェクタやイグナイタ、トランスミッション制御用アクチュエータなどへ駆動信号を出力する出力処理回路９とを備えている。
【００３８】
このうちマイコン３は、本発明のマルチタスクシステムとしての機能を実現するものであって、主としてマイクロプロセッサ１１と、各種プログラム・データ等が格納されたフラッシュメモリ１３と、マイクロプロセッサ１１による各種演算処理の際のワークエリアなどとして用いられるＲＡＭ１５と、Ａ／Ｄ変換器（ＡＤＣ）１７と、Ｉ／Ｏ１９とを備え、これらがバス２０を介して接続されている。
【００３９】
本実施形態のマイクロプロセッサ１１は、ＭＩＰＳ（登録商標）プロセッサに代表される周知の３２ビットＲＩＳＣプロセッサであり、内部に複数のレジスタ２１を備える。本実施形態では３２個のレジスタ（$0〜$31）が備えられ、複数の汎用レジスタのうち一つ（$28）が、インデックスレジスタ２２に指定されている。このインデックスレジスタ２２には、マイクロプロセッサ１１がレジスタ相対アドレッシングモードにてメモリにアクセスする際に用いられるインデックス値が格納される。なお、ここでいう「メモリ」とは、フラッシュメモリ１３及びＲＡＭ１５のいずれか又は両方を示すものとする。
【００４０】
即ち、マイクロプロセッサ１１は、メモリへアクセスするためのアドレッシングモードとして、インデックスレジスタ２２に格納されたインデックス値と、命令コード中にベースレジスタ番号と共に含まれるオフセット（相対値）とを加えることによりアドレスを計算してアクセスするレジスタ相対アドレッシングモードを備えている。つまり、ある基準となるアドレスをレジスタに格納しておき、その基準となるアドレスからの相対値としてアドレスが指定されるのである。
【００４１】
なお、ＲＩＳＣプロセッサのアドレッシングモードを説明する際、命令セット上は、この基準となるアドレスを「ベースアドレス」（ベースポインタ）と称し、この基準となるアドレスの格納先レジスタを「ベースレジスタ」と称するが、システム上では、この基準となるアドレスを「インデックス値」と称し、その格納先レジスタを「インデックスレジスタ」と称するようにしている。そのため本実施形態でも、それに従って説明することとする。
【００４２】
ＲＩＳＣプロセッサの命令フォーマットのうち、ロード命令を図３に示す。このフォーマットは周知のものであり、図中左側より、命令内容を示すオペコードとして６ビット、続いてベースアドレス（システム上のインデックス値）が格納されるベースレジスタを示すベースレジスタ番号（本実施形態では$28 ；システム上のインデックスレジスタ２２）として５ビット、続いてロードした変数を格納するレジスタを示す格納先レジスタ番号として５ビット、ベースアドレス（インデックス値）からの相対値を示すオフセットとして１６ビットの、計３２ビット（４バイト）からなる。このように、ＲＩＳＣプロセッサの命令長は３２ビット固定長である。
【００４３】
このフォーマットの命令に対し、マイクロプロセッサ１１は、ベースレジスタ（システム上のインデックスレジスタ２２）に格納されているベースアドレス（インデックス値）で示されるアドレス（３２ビット）に、オフセット（１６ビット）を加えることにより、アクセスすべきアドレスを得る。そして、その得られたアドレスに格納されているデータをロードして、格納先レジスタ番号で示されるレジスタに格納する。つまり、レジスタ相対アドレッシングモードによるアドレス計算・メモリアクセスが行われるのである。
【００４４】
一方、フラッシュメモリ１３には、ＯＳＥＫ／ＶＤＸ仕様のリアルタイム・マルチタスクオペレーティングシステムであるＯＳ２３、外部からの割り込み発生時に起動してＯＳ２３へタスクスケジューリング等を要請する割り込みハンドラ２５、ＯＳ２３の管理の下で実行されるタスク２７などの各種プログラムが格納されている。このうちタスク２７は、詳細には図２に示すように複数のタスク（タスクＡ，タスクＢ，・・・）からなる。マイクロプロセッサ１１は、これら各プログラムに従って動作することにより、パワートレインＥＣＵ１として要求される様々な制御処理を実行する。なお、以下の説明では、タスクＡをエンジン制御タスク、タスクＢをトランスミッション制御タスクとする。
【００４５】
そして、本実施形態では、インデックスレジスタ２２に格納されるインデックス値が固定された唯一のものではなく、タスク毎に異なる固有の値が設定されている。具体的には、タスク毎のインデックス値は、図２に示すように、各タスクにつき個々に用意されるＴＣＢ（タスク・コントロール・ブロック）３３の中に、そのタスクに関するコンテキスト情報の一つとして保持される。
【００４６】
図２は、マイクロコンピュータ３に構築されるマルチタスクシステムの動作を機能的に表した機能ブロック図である。図示の如く、本実施形態のマルチタスクシステムでは、ＯＳ２３が備えるタスク制御部３１がタスク２７（タスクＡ，タスクＢ・・・）を管理すると共に、同じくＯＳ２３が備えるメモリ制御部３５がインデックスレジスタ２２内のインデックス値の設定（格納）を行う。
【００４７】
各タスクＡ，Ｂ・・・に対しては、タスク毎にそれぞれ上述したＴＣＢ３３が用意されている。具体的には、タスクＡに対してはタスクＡ用ＴＣＢ３３ａが用意され、タスクＢに対してはタスクＢ用ＴＣＢ３３ｂが用意されている。図示しない他のタスクについても、それぞれ専用のＴＣＢが用意されている。
【００４８】
各ＴＣＢには、対応するタスクに関するコンテキスト情報やそのタスクの優先度などの各種情報が保存されている。コンテキスト情報としては、プログラムカウンタやスタックポインタなどのタスクの実行状態に関する情報がある。ＯＳ２３はこれらの各ＴＣＢの内容を参照してタスクスケジューリング処理を行うのである。
【００４９】
リアルタイム・マルチタスクＯＳとしてのＯＳ２３が行う、ＴＣＢ３３の情報に基づくタスクスケジューリング処理や割り込みハンドラ２５からの要請に基づくタスクスケジューリング処理、タスク切り替え（ディスパッチ）などの各種処理の基本的な部分は既によく知られているため、ここでは詳細は省略するが、本実施形態のマルチタスクシステムが従来のシステムと大きく異なるのが、各ＴＣＢに格納されるコンテキスト情報として、各タスク毎に固有に設定されているインデックス値を含んでいることである。即ち、タスクＡ用ＴＣＢ３３ａにはタスクＡ固有のインデックス値Ａが、タスクＢ用ＴＣＢ３３ｂにはタスクＢ固有のインデックス値Ｂが、それぞれコンテキスト情報の一つとして保存されるのである。
【００５０】
そして、ＯＳ２３では、メモリ制御部３５が、実行タスクを切り替える際、切り替え前のタスクの実行終了後から切り替え先のタスクの実行開始までの間に、その切り替え先のタスクに対して設定されているインデックス値をインデックスレジスタ２２に格納するのである。
【００５１】
また、各タスクで用いられるデータ（変数）は、メモリ上の所定のアドレスに配置されるわけだが、本実施形態では、タスク毎に固有の相対アドレッシング空間を有している。即ち、タスク毎に、そのタスク固有のインデックス値に基づいてアドレス指定（レジスタ相対アドレッシング）可能なメモリ領域を有している。
【００５２】
図４に、メモリマップの一例を示す。図４は、タスクＡに対応した固有のインデックス値Ａが「0x00008000」、タスクＢに対応した固有のインデックス値Ｂが「0x00018000
」である場合を示している。この場合、タスクＡ用の変数を配置可能な相対アドレッシング空間の最大幅、即ちエンジン制御タスクがインデックスレジスタ２２を用いて一命令で変数を参照できる空間の最大幅は、インデックス値Ａ「0x00008000」を中心とする前後３２ＫＢの計６４ＫＢの領域（アドレスでいえば0x00000000〜0x0000FFFF）である。また、タスクＢ用の変数を配置可能な相対アドレッシング空間の最大幅、即ちトランスミッション制御タスクがインデックスレジスタ２２を用いて一命令で変数を参照できる空間の最大幅は、インデックス値Ｂ「0x00018000」を中心とする前後３２ＫＢの計６４ＫＢの領域（アドレスでいえば0x00010000〜0x0001FFFF）である。
【００５３】
このように、タスク毎に固有のインデックス値を設定していることにより、タスク毎に固有の相対アドレッシング空間を持つことが可能となっている。但し、図４の例では、各タスクＡ，Ｂの変数の総量がいずれも４８ＫＢの場合を示しており、そのため、タスクＡ用の変数については0x00000000〜0x0000BFFFの領域に配置され、タスクＢ用の変数については0x00010000〜0x0001BFFFの領域に配置されている。
【００５４】
一方、図４のようにタスクＡで用いられる変数の総量が４８ＫＢであるということが予め（プログラムの開発・コーディング段階などで）わかっていれば、「0x00000000」を先頭として変数を配置したときに「0x0000BFFF」で配置完了することも予めわかる。そのような場合は、タスクＡ用の変数配置領域の直後（上記例では「0x0000C000」）からタスクＢ用の変数を配置できるようにタスクＢ用のインデックス値を設定してもよい。
【００５５】
この場合のメモリマップの一例を、図５に示す。タスクＡのインデックス値Ａは図４の例と同じであるが、タスクＢについては、タスクＢ用の変数を「0x0000C000」から配置できるよう、インデックス値Ｂを「0x00014000」に設定している。これにより、図示の如く、タスクＡ用の変数とタスクＢ用の変数が連続して配置されることとなる。このように、メモリ内の所定の領域に各タスクの変数を連続して格納するようにすれば、メモリを有効に利用することができる。
【００５６】
インデックスレジスタ２２に格納されるインデックス値の切り替えをＯＳ２３が行うことは既に述べたが、その具体的な例を図６に示す。図６は、タスクＡ，Ｂのインデックス値がそれぞれ図４に例示した値に設定されている場合を想定したものである。図示の如く、パワートレインＥＣＵ１が搭載された車両において、エンジン始動前の状態では、タスクＡ，Ｂいずれも実行されておらず、ＯＳ２３のみが動作している。そして、イグニション（ＩＧ）スイッチがオンされ、続いてスタータモータが始動してクランク角が−３３０°（即ち点火前の状態）になると、ＯＳ２３は、エンジン制御タスク（タスクＡ）を起動する。このときＯＳ２３は、タスクＡ用ＴＣＢ３３ａの内容に基づき、インデックスレジスタ２２へタスクＡ用のインデックス値Ａ「0x00008000」を格納する。これにより、タスクＡ実行中のレジスタ相対アドレッシングによるメモリアクセスは、インデックス値Ａ「0x00008000」を用いて行われることになる。
【００５７】
そして、タスクＡ実行によるエンジン点火後、クランク角が０°になると、ＯＳ２３はタスクＡの実行を終了する。ただしこのとき、他に実行開始されるタスクがないため、インデックスレジスタ２２内のインデックス値はそのままにしておく。
【００５８】
そして、運転者の操作等によりシフトアップ（変速）要求がなされると、ＯＳ２３は、トランスミッション制御タスク（タスクＢ）を起動する。このとき、ＯＳ２３は、タスクＢ用ＴＣＢ３３ｂの内容に基づき、インデックスレジスタ２２へタスクＢ用のインデックス値Ｂ「0x00018000」を格納する。これにより、タスクＢ実行中のレジスタ相対アドレッシングによるメモリアクセスは、インデックス値Ｂ「0x00018000」を用いて行われることになる。その後、シフトアップが終了すると、ＯＳ２３はタスクＢの実行を終了させる。
【００５９】
なお、図６に示した各タスクＡ，Ｂの起動・終了は、いずれも割り込みハンドラ２５からの割り込み発生通知によってＯＳ２３がタスクスケジューリング処理、タスクディスパッチ処理を行うことで実現される。また、複数のタスクについて同時に起動要求がなされた場合は、ＴＣＢ３３に格納されているタスク毎の優先度に関する情報に基づいてＯＳ２３がタスクスケジューリング処理を行う。
【００６０】
このように、タスク切り替え時にＯＳ２３がその切り替え先のタスクに対応したインデックス値をインデックスレジスタ２２に格納するため、あるタスクの実行中に例えば、
lw  $3,0x1234（$28）
といった命令コードが実行されるとき、その実行中のタスクが仮にタスクＡであったならば、インデックス値Ａ「0x00008000」にオフセット「0x1234」を加算して得られるアドレス「0x00009234」に格納された変数をロードしてレジスタ（$3）に格納する処理が行われる。逆に、実行中のタスクが仮にタスクＢであったならば、インデックス値Ｂ「0x00018000」にオフセット「0x1234」を加算して得られるアドレス「0x00019234」に格納された変数がロードされることになる。
【００６１】
つまり、インデックスレジスタ２２に格納された値とアクセスすべき実際のアドレスとの差分「0x1234」がオフセットとして指定されているものの、タスク毎にそれぞれ固有のインデックス値が設定され、固有の相対アドレッシング空間が存在しているため、見かけ上は同じ命令コードであっても、アクセス先のアドレスはタスクによって異なってくるのである。
【００６２】
なお、例えば車速信号やエンジン回転数などのような、エンジン制御タスク及びトランスミッション制御タスクの両方で用いられる変数については、一般に数が少ないため、上記相対アドレッシング空間とは別の領域に「共通データ」としてまとめて格納している。そして、これらの共通データへアクセスする場合は、レジスタ相対アドレッシングモードによらず、従来と同様、二つの命令コードによりアドレス計算・メモリアクセスするようにしている。
【００６３】
＜実行ファイルの生成プロセス＞
ところで、マイコン３を上述したマルチタスクシステムとして動作させるための、ＯＳ２３・割り込みハンドラ２５・タスク２７といった各種プログラムは、実行形式コード（機械語）からなる実行ファイルとしてフラッシュメモリ１３に書き込まれている。この実行ファイルは、プログラマが直接作成することも不可能ではないが、通常は、高水準言語で記述されたソースコードをコンパイル、リンク等の過程を経て生成される。以下、マイコン３に搭載される実行ファイルの生成プロセスについて説明する。
【００６４】
まず、ソースコードから実行ファイルを生成するためのハード環境の一例として、パーソナルコンピュータ（以下「ＰＣ」という）４１の概略構成を図７に示す。ＰＣ４１は、そのハード構成自体は、よく知られている一般的なＰＣと同様であり、ＣＰＵ５１、ＲＯＭ５３、ＲＡＭ５５、ハードディスク５７、画像出力インターフェイス５９、入力インターフェイス６１、通信インターフェイス６３などがバス７０を介して接続されている。
【００６５】
ＰＣ４１による処理内容は画像出力インターフェイス５９を介してディスプレイ４３に表示される。また、プログラマ等のユーザがキーボード４５やマウス４７にて入力した情報は、入力インターフェイス６１を介してＰＣ４１内に取り込まれ、処理される。通信インターフェイス６３は、ＰＣ４１をＬＡＮ等の外部ネットワークに接続するためのものである。
【００６６】
ハードディスク５７には、ＰＣ５７の動作全体を管理するＯＳや各種アプリケーションソフトが搭載されているほか、図示の如く、プログラマ等がＣ言語等の高水準言語によるソースコードを入力・作成するためのソフトウェアであるエディタ６６、ソースコードをオブジェクトコードに変換するためのソフトウェアであるコンパイラ６７、オブジェクトコードや他の必要なコード・ライブラリ等をリンクさせて実行ファイル（即ちマイクロプロセッサ１１が直接解釈可能な形式のコード群）を生成するソフトウェアであるリンカ６８が搭載されている。
【００６７】
そして更に、ハードディスク５７には、ソースコード中の変数とタスクとの対応関係およびタスクとインデックス値との対応関係をテーブル化したタスクマッピングデータ６９（図８参照。詳細は後述。）も搭載される。このタスクマッピングデータ６９は、実際には、ユーザがＰＣ４１へ必要な情報を入力することにより生成されるものである。
【００６８】
このように構成されたＰＣ４１を用いて、ユーザは、各タスクＡ，Ｂ，・・・のソースコードを入力・作成すると共に、タスクマッピングデータ６９を作成し、最終的に所望の実行ファイルを得ることができる。
【００６９】
次に、ソースコードから実行ファイルが生成される過程について、図８に基づいて説明する。図示の如く、タスクマッピングデータ６９は、各タスクで用いられる変数とタスクとの対応関係を示すタスク・変数対応テーブル７３と、タスクとインデックス値との対応関係を示すタスク・インデックス対応テーブル７５を有する。
【００７０】
タスク・変数対応テーブル７３では、タスクＡで用いられる変数として、変数Ａａ（水温）、変数Ａｂ（バッテリ電圧）、変数Ａｃ（クランク角）などがリストアップされて対応付けられると共に、タスクＢで用いられる変数として、変数Ｂａ（出力軸回転数）などがリストアップされて対応付けられている。
【００７１】
タスク・インデックス対応テーブル７５では、タスクＡに対応したインデックス値Ａが「0x00008000」として対応付けられ、タスクＢに対応したインデックス値Ｂが「0x00018000」として対応付けられている。つまり、タスク毎に固有のインデックス値が直接設定されている。このようにして、ユーザは、リンカ６８によるリンク処理に先立ち、前もってタスクマッピングデータ６９を用意しておくのである。
【００７２】
一方、Ｃ言語等の高水準言語で記述された各タスクのソースコード７１は、コンパイラ６７でコンパイルすることにより、中間言語形式のオブジェクトコードに変換される。なお、コンパイラ６７では、変数毎にアドレッシング方法を指定できるため、コンパイラ６７に対し、タスクＡ，Ｂの双方で用いられる変数については相対アドレッシングモードとは異なるアドレッシングモードでアクセスされるように指定しておき、他の変数については相対アドレッシングモードでアクセスされるように指定しておく。また、各タスク用にそれぞれ特定のベースアドレスを使用することも指定しておく。
【００７３】
このようにして生成されたオブジェクトコード７７は、まだアドレス解決されていない状態となっており、そのままではマイクロプロセッサ１１にて実行させることはできない。そこで、このオブジェクトコード７７と、タスクマッピングデータ６９と、リアルタイムＯＳ７８（詳細にはカーネルライブラリ）とをリンカ６８にてリンクさせ、実行形式コードからなる実行ファイルを生成する。
【００７４】
リンカ６８は、オブジェクトコード７７から各タスクで用いられる変数をタスク毎に抽出する。この際、どの変数がどのタスクのものであるかを、タスク・変数対応テーブル７３に基づいて識別する。そして、抽出した各変数それぞれに対し、タスク毎に、対応するインデックス値を選択してアドレス指定処理を行う。
【００７５】
即ち、タスクＡの変数に対しては、タスクマッピングデータ６９に基づいてインデックス値Ａ「0x00008000」を選択する。そして、この「0x00008000」よりも３２ＫＢ分さかのぼったアドレス（つまり、0x00008000−0x00008000で得られるアドレス）である「0x00000000」を、タスクＡ用の変数を配置する先頭アドレスとする。そして、その先頭アドレス「0x00000000」を起点としてタスクＡ用の変数を順次配置（指定）していくのである。
【００７６】
タスクＢの変数に対しても同様であり、タスクマッピングデータ６９に基づいてインデックス値Ｂ「0x00018000」を選択する。そして、この「0x00018000」よりも３２ＫＢ分さかのぼったアドレス（つまり、0x00018000−0x00008000で得られるアドレス）である「0x00010000」を、タスクＢ用の変数を配置する先頭アドレスとする。そして、その先頭アドレス「0x00010000」を起点としてタスクＢ用の変数を順次配置（指定）していくのである。
【００７７】
このようなアドレス指定処理により各変数を配置することで、各変数につき、対応するインデックス値と実際のアドレスとの差分、即ちオフセットが得られることとなり、これにより全ての変数のアドレス解決がなされるのである。なお、上述したアドレス指定処理において選択されたインデックス値に基づいて、各タスクのＴＣＢにおけるコンテキスト情報に対応するインデックス値が含まれるようになる。
【００７８】
以上説明したように、本実施形態では、従来のようにシステム全体で一つのインデックス値を持つと共にそのインデックス値に基づく唯一の相対アドレッシング空間を持つのではなく、タスク毎に固有のインデックス値を持ち、タスク毎に固有の相対アドレッシング空間を持つようにしている。つまり一つのシステム中に複数の相対アドレッシング空間を持つようにしている。
【００７９】
そのため、レジスタ相対アドレッシングモードによりアクセス可能なメモリ空間を広げることができ、メモリアクセスのためのプログラムサイズの増加を防ぐことが可能となる。延いては、プログラムの実行時間の増加を防ぐことが可能となる。
【００８０】
また、各インデックス値は、それぞれ、対応するタスクの変数が配置されるメモリ領域の範囲内におけるアドレスとなっているため、各タスクそれぞれが相対アドレッシング空間を十分に確保することが可能となる。
【００８１】
更に、実行ファイル生成プロセスにおいては、ユーザが予めタスクマッピングデータ６９を用意し、このタスクマッピングデータ６９を、オブジェクトコード７７やＯＳ７８のカーネルライブラリ７８などと共にリンクさせるようにしているため、リンカ６８は、各変数とタスクとの対応関係を用意に識別でき、各変数のアドレスを適切なインデックス値（タスクに対応したインデックス値）に基づいて確実に指定することができる。
【００８２】
ここで、本実施形態の構成要素と本発明の構成要素の対応関係を明らかにする。本実施形態において、インデックス値は本発明の基準アドレスに相当し、インデックスレジスタ２２は本発明の基準アドレス格納レジスタに相当する。また、図８の実行ファイル生成過程において、タスクマッピングデータ６９を生成する過程が本発明の第１ステップに相当し、ソースコード７１をコンパイラ６７がコンパイルする過程が本発明の第２ステップに相当し、タスクマッピングデータ６９、オブジェクトコード７７およびリアルタイムＯＳ（カーネルライブラリ）７８をリンクさせて実行ファイルを生成する過程が本発明の第３ステップに相当し、タスクマッピングデータ６９を構成するタスク・変数対応テーブル７３が本発明のテーブルに相当する。
【００８３】
［変形例］
尚、本発明の実施の形態は、上記実施形態に何ら限定されるものではなく、本発明の技術的範囲に属する限り種々の形態を採り得ることはいうまでもない。
【００８４】
例えば、上記実施形態の実行ファイル生成プロセスでは、タスクマッピングデータ６９を構成するタスク・インデックス対応テーブル７５として、タスク毎のインデックス値を直接設定するようにしたが、これに限らず、各タスクにつき、そのタスクの変数が配置される領域の先頭アドレスからの相対値を設定するようにしてもよい。即ち、各タスクそれぞれにつき、いずれも、インデックス値を例えば「先頭アドレス＋0x00008000」として設定し、これをタスク・インデックス対応テーブルとするのである。
【００８５】
この場合、リンカ６８は、例えばタスクＡ用の変数のアドレスを指定する際に、先頭アドレスが「0x00000000」の場合、インデックス値として0x00008000を求め、得られたこのインデックス値を用いて各変数のアドレス指定を行う。そして、タスクＡの変数配置がアドレス「0x0000BFFF」で終了した場合、続いて配置するタスクＢ用の変数の先頭アドレスは「0x0000C000」となる。そこで、この先頭アドレスに「0x00008000」を加えることにより、タスクＢ用のインデックス値「0x00014000」を得る。そして、得られたこのインデックス値を用いて、タスクＢ用の各変数のアドレス指定を行う。
【００８６】
このように、タスクマッピングデータ６９におけるタスク・インデックス対応テーブル
７５として、インデックス値を直接設定せず単に先頭アドレスからの相対値を設定するようにすれば、ユーザ（プログラマ等）側でタスク毎のインデックス値を予め決める必要がなくなるため、その分、ユーザ側の負担を軽減することができる。
【００８７】
また、上記実施形態では、タスクマッピングデータ６９として、タスク・変数対応テーブル７３を用意するようにしたが、ソースコード７１中に関数とタスクとの対応関係を記述するようにし、コンパイラ６７がこれをコンパイルする際に、各変数がどのタスクに対応しているのかがわかるような形式のオブジェクトコードを生成するようにしてもよい。
【００８８】
このようにすれば、リンカ６８は、コンパイル後のオブジェクトコードから、どの変数がどのタスクのものであるかを識別できるようになり、ユーザ（プログラマ等）側で各変数につき逐一どのタスクのものであるかを設定する必要がなくなるため、その分、ユーザ側の負担を軽減することができる。
【００８９】
更に、上記実施形態では、各タスクの変数が配置されるメモリ領域において、その先頭アドレスとインデックス値との差が「0x00008000」となるようにしたが、これに限定されないことはいうまでもなく、例えば、先頭アドレスをインデックス値として、そのインデックス値と実際の配置アドレスとの差分をオフセットとするようにしてもよい。
【００９０】
更にまた、上記実施形態では、エンジン制御タスク（タスクＡ）とトランスミッション制御タスク（タスクＢ）の２つのタスクを例に挙げて説明したが、２つに限らず、３つ以上のタスクをリアルタイム制御するようなマルチタスクシステムであっても本発明を適用できることはいうまでもない。
【図面の簡単な説明】
【００９１】
【図１】本実施形態のパワートレインＥＣＵ１の概略構成を表すブロック図である。
【図２】マイクロコンピュータ３に構築されるマルチタスクシステムの動作を機能的に表した機能ブロック図である。
【図３】ＲＩＳＣプロセッサのロード命令のフォーマットを表す説明図である。
【図４】本実施形態の、相対アドレッシング空間を有するメモリマップを表す説明図である。
【図５】本実施形態の、相対アドレッシング空間を有するメモリマップを表す説明図である。
【図６】タスク切り替えとインデックス値との関係を表す説明図である。
【図７】マイクロコンピュータ３をマルチタスクシステムとして機能させるソフトウェア（実行ファイル）を生成するためのパーソナルコンピュータの概略構成を示すブロック図である。
【図８】本実施形態の、ソースコードから実行ファイルが生成される過程を表す説明図である。
【図９】従来の、ソースコードから実行ファイルが生成される過程を表す説明図である。
【図１０】従来の、相対アドレッシング空間を有するメモリマップを表す説明図である。
【符号の説明】
【００９２】
１…パワートレインＥＣＵ、３…マイクロコンピュータ、５…アナログ入力部、７…入力処理回路、９…出力処理回路、１１…マイクロプロセッサ、１３…フラッシュメモリ、１５，５５…ＲＡＭ、１７…Ａ／Ｄコンバータ、１９…Ｉ／Ｏ、２０，７０…バス、２１…レジスタ、２２…インデックスレジスタ、２３…ＯＳ、２５…割り込みハンドラ、２７…タスク、３１…タスク制御部、３３…ＴＣＢ、３３ａ…タスクＡ用ＴＣＢ、３３ｂ…タスクＢ用ＴＣＢ、３５…メモリ制御部、４１…パーソナルコンピュータ、４３…ディスプレイ、４５…キーボード、４７…マウス、５１…ＣＰＵ、５３…ＲＯＭ、５７…ハードディスク、５９…画像出力インターフェイス、６１…入力インターフェイス、６３…通信インターフェイス、６６…エディタ、６７…コンパイラ、６８…リンカ、６９…タスクマッピングデータ、７１…ソースコード、７３…タスク・変数対応テーブル、７５…タスク・インデックス対応テーブル、７７…オブジェクトコード、７８…リアルタイムＯＳ（カーネルライブラリ）
【図１】
2006164061.tif 000003
【図２】
2006164061.tif 000004
【図３】
2006164061.tif 000005
【図４】
2006164061.tif 000006
【図５】
2006164061.tif 000007
【図６】
2006164061.tif 000008
【図７】
2006164061.tif 000009
【図８】
2006164061.tif 000010
【図９】
2006164061.tif 000011
【図１０】
2006164061.tif 000012