(57)【要約】【課題】共有資源のプロセッサへの割当を効率的に行え、かつ、各プロセッサの負荷の低減も図りつつ、情報処理装置全体の処理効率の向上を図る。【解決手段】複数のＣＰＵ１１Ａ〜１１Ｄで実行されている複数のタスク処理に対し共有資源を排他的に割り当てる制御を行う情報処理装置１０において、各ＣＰＵ１１Ａ〜１１Ｄが実行しているタスク処理の優先度レベルをＣＰＵ１１Ａ〜１１Ｄ毎に記憶する優先度／タスクＩＤ記憶部１２Ａ〜１２Ｄと、いずれか複数のタスク処理から対応するＣＰＵを介して共有資源の割当要求を受け付けた場合に、優先度／タスクＩＤ記憶部１２Ａ〜１２Ｄに記憶されている各タスク処理の優先度レベルに基づいて、共有資源の割当要求を受け付けるべきタスク処理を定める排他制御部１３と、を備える。【選択図】図１
2009230466.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサに対し共有資源を排他的に割り当てる制御を行う情報処理装置におい
て、
前記プロセッサが実行している処理あるいは実行すべき処理の優先度レベルを前記処理
毎に記憶する優先度記憶部と、
いずれか複数の前記プロセッサを介して各プロセッサが実行している処理からの前記共
有資源の割当要求を受け付けた場合に、前記優先度記憶部に記憶されている各前記処理の
優先度レベルに基づいて、前記共有資源の割当要求を受け付けるべき前記処理を定める共
有資源管理部と、
を備えたことを特徴とする情報処理装置。
【請求項２】
請求項１記載の情報処理装置において、
前記共有資源管理部は、前記優先度記憶部に記憶されている各前記処理の優先度レベル
に基づいて、より優先度レベルの高い処理を、前記共有資源の割当要求を受け付けるべき
処理として定める、
ことを特徴とする情報処理装置。
【請求項３】
請求項２記載の情報処理装置において、
前記共有資源の割当要求が受け付けられなかった前記処理について、当該処理を行って
いた前記プロセッサを解放し、当該処理を休止させ待機状態とさせる処理割当部を備えた
ことを特徴とする情報処理装置。
【請求項４】
請求項３記載の情報処理装置において、
前記処理割当部は、前記共有資源の割当要求を受け付けるべき処理が休止状態にある場
合に、当該処理を処理すべきプロセッサを割り当て、前記待機状態を解除することを特徴
とする情報処理装置。
【請求項５】
請求項１ないし請求項４のいずれかに記載の情報処理装置において、
前記処理には、外部割込処理および通常タスク処理を含むことを特徴とする情報処理装
置。
【請求項６】
請求項１ないし請求項５のいずれかに記載の情報処理装置において、
前記要求受付部は、前記プロセッサから前記共有資源の解放要求を受け付けるものであ
り、
前記共有資源管理部は、前記共有資源を割り当てたプロセッサに前記外部割込処理及び
前記タスク処理より高い優先度レベルを割り当てて、前記処理優先度記憶部に記憶させる
とともに、前記要求受付部においていずれか複数の前記プロセッサを介して当該プロセッ
サが実行している処理からの前記共有資源の解放要求が受け付けられた場合に、前記処理
優先度記憶部に記憶されている各前記処理の優先度レベルを互いに比較し、より優先度レ
ベルの高い処理を、前記共有資源の解放要求を受け付けるべき処理として前記共有資源の
解放を行わせる、
ことを特徴とする情報処理装置。
【請求項７】
請求項１ないし請求項６のいずれかに記載の情報処理装置において、
前記共有資源の排他的割当情報の記憶手段として、セマフォを用いることを特徴とする
情報処理装置。
【請求項８】
請求項７記載の情報処理装置において、
前記セマフォは、ハードウェアとして実現されたハードウェアセマフォあるいはソフト
ウェアで実現されたソフトウェアセマフォであることを特徴とする情報処理装置。
【請求項９】
複数のプロセッサに対し共有資源を排他的に割り当てる制御を行う情報処理装置の制御
方法において、
前記プロセッサが実行している処理あるいは実行すべき処理の優先度レベルを前記処理
毎に記憶する優先度記憶過程と、
いずれか複数の前記プロセッサを介して各プロセッサが実行している処理からの前記共
有資源の割当要求を受け付けた場合に、前記優先度記憶部に記憶されている各前記処理の
優先度レベルに基づいて、前記共有資源の割当要求を受け付けるべき前記処理を定める共
有資源管理過程と、
を備えたことを特徴とする情報処理装置の制御方法。
【請求項１０】
各種情報を記憶する記憶部を有し、複数のプロセッサに対し共有資源を排他的に割り当
てる制御を行う情報処理装置をコンピュータにより制御するための制御プログラムにおい
て、
前記プロセッサが実行している処理あるいは実行すべき処理の優先度レベルを前記処理
毎に記憶させ、
いずれか複数の前記プロセッサを介して各プロセッサが実行している処理からの前記共
有資源の割当要求を受け付けた場合に、前記優先度記憶部に記憶されている各前記処理の
優先度レベルに基づいて、前記共有資源の割当要求を受け付けるべき前記処理を定め  さ
せる、
ことを特徴とする制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理装置の制御方法および制御プログラムに係り、特に
複数のプロセッサを有するマルチプロセッサ型の情報処理装置において、マルチタスク処
理時に各プロセッサにハードウェアやデータ等の共有資源を排他的に割り当てる技術に関
する。
【背景技術】
【０００２】
従来複数のプロセッサを備え、同時に複数のタスクを処理するマルチタスクプロセッサ
（マルチタスク情報処理装置）が知られている。
このようなマルチタスクプロセッサにおいては、排他制御を行う際には、たとえば、排
他制御を行いたいメモリ領域へのアクセス制限を行ったり、バスアクセス制限を行ったり
していた（たとえば、特許文献１あるいは特許文献２参照）。
このような場合に、並行して動作しているプロセス間で同期を取るための制御や割り込
み処理の制御を行なうための一手法として、たとえば、セマフォ（ｓｅｍａｐｈｏｒｅ）
があり、複数のプロセスでメモリ領域やディスク上のファイルを共有している場合に、同
時にアクセスして内容の破壊や不整合が起きるのを防ぐために使われている。
【特許文献１】特開平５−５４００５号公報
【特許文献２】特開２００１−１４２８６１号公報
【発明の開示】
【発明が解決しようとする課題】
【０００３】
特許文献１記載の技術においては、複数のプロセッサから同時にセマフォの獲得要求が
なされた場合に、単純にバス調停回路の判別に基づいてセマフォの獲得がなされることと
なり、必ずしも実行中の複数のタスクのうち、優先度が高いタスクを実行しているプロセ
ッサがセマフォを獲得できるものではなかった。
また、特許文献２記載の技術においても、各プロセッサが実行しているタスクの優先度
を考慮するものではなかった。
したがって、いずれの技術においても、優先度の高いタスクを実行しているプロセッサ
にセマフォ、すなわち、共有資源が割り当てられるとは限らないという不具合があった。
そこで、本発明の目的は、排他制御を行うに際し、効率的に共有資源の割当／解放を行
え、情報処理装置全体の処理効率の向上を図ることが可能な情報処理装置、情報処理方法
および制御プログラムを提供することにある。
【課題を解決するための手段】
【０００４】
上記課題を解決するため、本発明の第１の態様は、複数のプロセッサに対し共有資源を
排他的に割り当てる制御を行う情報処理装置において、前記プロセッサが実行している処
理あるいは実行すべき処理の優先度レベルを前記処理毎に記憶する優先度記憶部と、いず
れか複数の前記プロセッサを介して各プロセッサが実行している処理からの前記共有資源
の割当要求を受け付けた場合に、前記優先度記憶部に記憶されている各前記処理の優先度
レベルに基づいて、前記共有資源の割当要求を受け付けるべき前記処理を定める共有資源
管理部と、を備えたことを特徴としている。
【０００５】
上記構成によれば、優先度記憶部は、プロセッサが実行している処理あるいは実行すべ
き処理の優先度レベルを前記処理毎に記憶している。
これにより共有資源管理部は、いずれか複数のプロセッサを介して各プロセッサが実行
している処理からの前記共有資源の割当要求を受け付けた場合に、優先度記憶部に記憶さ
れている各処理の優先度レベルに基づいて、共有資源の割当要求を受け付けるべき処理を
定める。
したがって、実行されている処理の優先度レベルを考慮して、共有資源を割り当てるこ
とができ、効率的な共有資源の割り当てが行え、ひいては、情報処理装置全体の効率の向
上が図れる。
【０００６】
第２の態様は、第１の態様において、前記共有資源管理部は、前記優先度記憶部に記憶
されている各前記処理の優先度レベルに基づいて、より優先度レベルの高い処理を、前記
共有資源の割当要求を受け付けるべき処理として定める、ことを特徴としている。
したがって、より処理優先度が高い処理に対して優先的に共有資源を割り当てることが
でき、より一層効率的に共有資源を割り当てることができる。
【０００７】
第３の態様は、第２の態様において、前記共有資源の割当要求が受け付けられなかった
前記処理について、当該処理を行っていた前記プロセッサを解放し、当該処理を休止させ
待機状態とさせる処理割当部を備えたことを特徴としている。
これにより、各プロセッサは、共有資源の割当がなされないことにより、待機状態とな
ることなく、他の処理を実行できるので、プロセッサの稼働効率を向上し、ひいては、情
報処理装置全体の処理効率の向上が図れる。
【０００８】
第４の態様は、第３の態様において、前記処理割当部は、前記共有資源の割当要求を受
け付けるべき処理が休止状態にある場合に、当該処理を処理すべきプロセッサを割り当て
、前記待機状態を解除することを特徴としている。
したがって、共有資源が割当可能となった段階で、必要以上に待機させることなく、休
止状態にある処理を実行させることができ、処理の効率化が図れる。
【０００９】
第５の態様は、第１の態様ないし第４の態様のいずれかにおいて、前記処理には、外部
割込処理および通常タスク処理を含むことを特徴としている。
したがって、外部割込処理および通常タスク処理を考慮して、より効率的な共有資源割
り当てが行える。
【００１０】
第６の態様は、第１の態様ないし第５の態様のいずれかにおいて、前記要求受付部は、
前記プロセッサから前記共有資源の解放要求を受け付けるものであり、前記共有資源管理
部は、前記共有資源を割り当てたプロセッサに前記外部割込処理及び前記タスク処理より
高い優先度レベルを割り当てて、前記処理優先度記憶部に記憶させるとともに、前記要求
受付部においていずれか複数の前記プロセッサを介して当該プロセッサが実行している処
理からの前記共有資源の解放要求が受け付けられた場合に、前記処理優先度記憶部に記憶
されている各前記処理の優先度レベルを互いに比較し、より優先度レベルの高い処理を、
前記共有資源の解放要求を受け付けるべき処理として前記共有資源の解放を行わせること
を特徴としている。
したがって、すでに共有資源が割り当てられている処理は、共有資源の解放要求を優先
的に行えるため、情報処理装置全体で効率的に共有資源の再割当を行うことができ、効率
的に共有資源を割り当てて、利用することができる。
【００１１】
第７の態様は、第１ないし第４ないし第６の態様のいずれかにおいて、前記共有資源の
排他的割当情報の記憶手段として、セマフォを用いることを特徴としている。
したがって、確実に共有資源の排他的な割当が行える。この場合において、セマフォは
、ソフトウェアで実現するソフトウェアセマフォあるいはハードウェアで実現するハード
ウェアセマフォのいずれであっても構わない。
【００１２】
第８の態様は、第７の態様において、前記セマフォは、ハードウェアとして実現された
ハードウェアセマフォあるいはソフトウェアで実現されたソフトウェアセマフォであるこ
とを特徴としている。
したがって、複数のプロセッサから同時に共有資源の割り当て要求がなされたとしても
、迅速、かつ、確実に処理を行える。
第９の態様は、複数のプロセッサに対し共有資源を排他的に割り当てる制御を行う情報
処理装置の制御方法において、前記プロセッサが実行している処理あるいは実行すべき処
理の優先度レベルを前記処理毎に記憶する優先度記憶過程と、いずれか複数の前記プロセ
ッサを介して各プロセッサが実行している処理からの前記共有資源の割当要求を受け付け
た場合に、前記優先度記憶部に記憶されている各前記処理の優先度レベルに基づいて、前
記共有資源の割当要求を受け付けるべき前記処理を定める共有資源管理過程と、を備えた
ことを特徴としている。
上記構成によれば、実行されている処理の優先度レベルを考慮して、共有資源を割り当
てることができ、効率的な共有資源の割り当てが行え、ひいては、情報処理装置全体の効
率の向上が図れる。
また、第１０の態様は、各種情報を記憶する記憶部を有し、複数のプロセッサに対し共
有資源を排他的に割り当てる制御を行う情報処理装置をコンピュータにより制御するため
の制御プログラムにおいて、前記プロセッサが実行している処理あるいは実行すべき処理
の優先度レベルを前記処理毎に記憶させ、いずれか複数の前記プロセッサを介して各プロ
セッサが実行している処理からの前記共有資源の割当要求を受け付けた場合に、前記優先
度記憶部に記憶されている各前記処理の優先度レベルに基づいて、前記共有資源の割当要
求を受け付けるべき前記処理を定めさせる、ことを特徴としている。
上記構成によれば、実行されている処理の優先度レベルを考慮して、共有資源を割り当
てることができ、効率的な共有資源の割り当てが行え、ひいては、情報処理装置全体の効
率の向上が図れる。
この場合において、上記制御プログラムをコンピュータ読取可能な記録媒体に記録する
ようにしてもよい。
【発明を実施するための最良の形態】
【００１３】
次に本発明の好適な実施の形態について図面を参照して説明する。
図１は、実施形態の情報処理装置の概要構成ブロック図である。
情報処理装置１０は、マルチプロセッサシステムとして構成されており、大別すると、
実際の演算処理を行う４個のプロセッサとしてのＣＰＵ１１Ａ〜１１Ｄと、各ＣＰＵ１１
Ａ〜１１Ｄに対応し、各ＣＰＵ１１Ａ〜１１Ｄが実行しているタスク処理（外部割込処理
等の割込処理タスクも含む）の優先度レベルおよび当該タスク処理を特定するためのタス
クＩＤを記憶する優先度／タスクＩＤ記憶部１２Ａ〜１２Ｄと、ＣＰＵ１１Ａ〜１１Ｄの
共有資源の排他制御を含む排他制御を行う排他制御回路１３と、外部からの割込（外部割
込）の要求を受け付ける外部割込要求受付部１４と、外部割込要求受付部１４により受け
付けられた外部割込を各ＣＰＵ１１Ａ〜１１Ｄに割り当てる外部割込処理割当部１５と、
を備えている。
【００１４】
図２は、排他制御回路の機能ブロック図である。
本実施形態においては、排他制御回路１３は、ＣＰＵ制御、共有資源割当制御、共有資
源解放制御を含む共有資源管理制御などを行う専用ハードウエアで構成されている。なお
、排他制御回路１３をハードウェアで構成するのではなく、各種制御プログラムを予め格
納したＲＯＭ、各種データを一時的に記憶するＲＡＭなどを有するマイクロプロセッサユ
ニットとして構成するようにすることも可能である。
この排他制御回路１３は、排他制御においてＣＰＵ１１Ａ〜１１Ｄに対して、例えば、
数値演算プロセッサのように、コプロセッサ的な処理を行うものである。
この排他制御回路１３は、大別すると、優先度／タスクＩＤ記憶部１２Ａ〜１２Ｄを構
成する優先度値記憶レジスタ１６Ａ〜１６Ｄに記憶されている優先度レベルを比較し、比
較結果として最も優先度の高いタスク（最高優先度タスク）を行っているＣＰＵを特定し
、当該ＣＰＵに対応するタスクＩＤを優先度／タスクＩＤ記憶部１２Ａ〜１２Ｄを構成す
るタスクＩＤ記憶部１９Ａ〜１９Ｄのいずれかから読み出して出力するとともに、最も優
先度の高いいずれかのタスクが獲得あるいは解放しようとしている排他的使用権（共有資
源の排他的使用権）であるセマフォ（Ｓｅｍａｐｈｏｒｅ）を特定するためのＩＤ（以下
、セマフォＩＤという。）を出力する優先度比較回路２１と、共有資源の使用状態をセマ
フォＩＤに対応づけて記憶するセマフォレジスタ２２と、優先度比較回路２１の比較結果
およびセマフォレジスタ２２の記憶内容に基づいて、共有資源の各ＣＰＵ１１Ａ〜１１Ｄ
への割当制御および解放制御を行うとともに、制御結果に基づいてセマフォレジスタ２２
を更新するセマフォ操作回路２３と、を備えている。
【００１５】
ここで、セマフォレジスタ２２について説明する。
この場合において、本実施形態では、共有資源が８個あるものとする。
セマフォレジスタ２２は、大別すると、共有資源を特定するためのセマフォＩＤデータ
（＝１〜８）２２Ａと、セマフォＩＤデータにより特定される共有資源がすでにいずれか
のタスクにより獲得されている場合に“１”が格納され、セマフォＩＤデータにより特定
される共有資源をいずれのタスクも獲得していない場合に“０”が格納される有効データ
格納部２２Ｂと、有効データ格納部に“１”が格納されている場合に、対応する共有資源
を獲得しているタスクを特定するためのタスクＩＤが格納されるタスクＩＤ格納部２２Ｃ
と、を備えている。なお、有効データ格納部２２Ｂに“０”が格納されている場合に、対
応するタスクＩＤ格納部２２Ｃに格納されているタスクＩＤは、前回対応する共有資源を
獲得したタスクのタスクＩＤであり、実際の動作には影響を与えない。
より具体的に説明すると、図２の例の場合、セマフォＩＤデータ＝１に対応する共有資
源がタスクＩＤ＝３で特定されるタスクにより獲得されており、セマフォＩＤデータ＝５
、８に対応する二つの共有資源がタスクＩＤ＝２で特定されるタスクにより獲得されてい
る状態を示しており、他の共有資源は未割当状態（未使用状態）となっていることを示し
ている。また、セマフォＩＤデータ＝３に対応する共有資源がタスクＩＤ＝８で特定され
るタスクにより前回獲得されており、セマフォＩＤデータ＝７に対応する共有資源がタス
クＩＤ＝６で特定されるタスクにより前回獲得されていたことを示している。
【００１６】
この場合において、優先度値記憶レジスタ１６Ａは、優先度レベルとしての優先度値（
本実施形態では７ビット）を記憶するレジスタであり、共有資源獲得有無記憶部１７Ａ（
本実施形態では、最上位１ビット）と、対応するＣＰＵ１１Ａが実際に処理を行っている
外部割込処理の優先度レベル（割り込みレベル）あるいはタスク処理の優先度レベルを記
憶する処理優先度レベル記憶部１８Ａ（本実施形態では、下位６ビット）と、を備えてい
る。同様に、優先度値記憶レジスタ１６Ｂは、共有資源獲得有無記憶部１７Ｂと、処理優
先度レベル記憶部１８Ｂと、を備え、優先度値記憶レジスタ１６Ｃは、共有資源獲得有無
記憶部１７Ｃと、処理優先度レベル記憶部１８Ｃと、を備え、優先度値記憶レジスタ１６
Ｄは、共有資源獲得有無記憶部１７Ｄと、処理優先度レベル記憶部１８Ｄと、を備えてい
る。
【００１７】
ここで、優先度レベルについて説明する。
図１４は、タスク処理（含む、外部割込処理）の優先度レベル（処理優先度レベル）の
説明図である。
処理優先度レベルは、上述したように６ビットであるので、その値としては、０〜６３
までの６４の値を採ることができる。さらに、本実施形態では、外部割込処理の優先度レ
ベルをすべてのタスク処理の優先度レベルよりも高くなるように設定している。
すなわち、本実施形態では、通常タスク（Ｎｏｒｍａｌ  ｔａｓｋ）処理に対応する優
先度レベルは０〜３１の値、外部割込処理（含む、多段外部割込処理）に対応する優先度
レベルは３２〜６３の値を採ることとしており、単純に優先度レベルの値を比較するだけ
で外部割込処理であるかあるいは通常タスク処理であるかを考慮することなく、複数の処
理（タスク）のうち、いずれの処理が優先度が高いかを容易に判別することができるので
ある。
【００１８】
さらに共有資源を獲得している場合には、共有資源獲得有無記憶部１７Ａとしての最上
位ビット（ＭＳＢ）が“１”となっているので、共有資源を獲得しているタスク処理は、
共有資源の未獲得のタスク処理よりもより優先度レベルが高くなるようにされている。す
なわち、共有資源を獲得しているタスク処理の優先度レベルは、６４〜１２７の値を採る
こととなる。
したがって、優先度比較回路２１は、共有資源の獲得要求あるいは解放要求がなされた
場合に、優先度値記憶レジスタ１６Ａ〜１６Ｄに格納された優先レベルおよびセマフォレ
ジスタ２２を参照するだけで、容易にタスク処理のうち、いずれのタスク処理の共有資源
獲得要求あるいは共有資源解放要求を受け付けて処理を行うべきかを容易に判断すること
ができる。
【００１９】
次に概要動作を説明する。
以下の説明においては、説明の簡略化のため、セマフォレジスタ２２が図２に示した状
態となっている状況下にあるものとする。
まず、この状況下で、タスク処理ＴＡ（タスクＩＤ＝１，優先レベル＝「０００１１０
１」）が共有資源を必要として、当該タスク処理ＴＡを実行しているＣＰＵ１１Ａが共有
資源の獲得要求を行う場合について説明する。
ここで、ＣＰＵ１１Ｂにおいては、タスク処理ＴＢ（タスクＩＤ＝２，優先レベル＝「
１０１１１１１」）が実行されており、ＣＰＵ１１Ｃにおいては、タスク処理ＴＣ（タス
クＩＤ＝３，優先レベル＝「１０１０００１」）が実行されており、ＣＰＵ１１Ｄにおい
ては、タスク処理ＴＤ（タスクＩＤ＝４，優先レベル＝「００００１１１」）が実行され
ているものとする。すなわち、処理の優先レベルは、
（高）  タスク処理ＴＢ＞タスク処理ＴＣ＞タスク処理ＴＡ＞タスク処理ＴＤ
となっている。
【００２０】
まず、ＣＰＵ１１Ａにおいて実行されているタスク処理ＴＡがセマフォＩＤ＝２の共有
資源の獲得要求を行った場合について説明する。
タスク処理ＴＡの処理に伴ってＣＰＵ１１ＡがセマフォＩＤ＝２の共有資源の獲得要求
を行った場合には、セマフォＩＤ＝２の共有資源は、いずれのタスク処理も未獲得の資源
であるので、いずれか最も優先レベルの高いタスク処理がセマフォＩＤ＝２の共有資源を
獲得することとなる。
【００２１】
すなわち、タスク処理ＴＡと同時にセマフォＩＤ＝２の共有資源の獲得要求を行ったタ
スク処理がない場合、あるいは、同時に獲得要求を行ったタスク処理がタスク処理ＴＤで
ある場合には、優先度比較回路２１は、セマフォＩＤ＝２の共有資源の獲得要求を行って
いるタスク処理のうち、タスク処理ＴＡが最も優先レベルが高いと判別し、セマフォ操作
回路２３はセマフォレジスタ２２を参照し、セマフォＩＤ＝２の共有資源が未獲得である
ことを判別する。
これに伴い、優先度比較回路２１は、セマフォ操作回路２３に対し、最高優先度タスク
ＩＤとして、タスク処理ＴＡに対応するタスクＩＤ＝１を出力するとともに、獲得対象の
共有資源に対応するセマフォＩＤ＝２を出力する。
この結果、セマフォ操作回路２３は、セマフォＩＤ＝２の共有資源をタスク処理ＴＡに
割り当てるとともに、セマフォＩＤ＝２に対応する有効データを“１”とし、対応するタ
スクＩＤ＝“１”に更新する。
これと並行して、同時に獲得要求を行ったタスク処理がタスク処理ＴＤである場合には
、当該タスク処理ＴＤは、休止状態へと遷移されることとなる。
【００２２】
一方、同時に獲得要求を行ったタスク処理が、タスク処理ＴＢあるいはタスク処理ＴＣ
である場合には、優先度比較回路２１は、セマフォＩＤ＝２の共有資源の獲得要求を行っ
ているタスク処理のうち、タスク処理ＴＢあるいはタスク処理ＴＣが最も優先レベルが高
いと判別し、セマフォ操作回路２３は、セマフォレジスタ２２を参照し、セマフォＩＤ＝
２の共有資源が未獲得であることを判別する。
これに伴い、優先度比較回路２１は、セマフォ操作回路２３に対し、最高優先度タスク
ＩＤとして、タスク処理ＴＢに対応するタスクＩＤ＝２あるいはタスク処理ＴＣに対応す
るタスクＩＤ＝３を出力するとともに、獲得対象の共有資源に対応するセマフォＩＤ＝２
を出力する。
この結果、セマフォ操作回路２３は、セマフォＩＤ＝２の共有資源をタスク処理ＴＢあ
るいはタスク処理ＴＣに割り当てるとともに、セマフォＩＤ＝２に対応する有効データを
“１”とし、対応するタスクＩＤ＝“２”あるいは“３”に更新する。
これと並行して、同時に獲得要求を行ったタスク処理ＴＡは、休止状態へと遷移される
こととなる。
【００２３】
次に、ＣＰＵ１１Ｃにおいて実行されているタスク処理ＴＣが現在獲得しているセマフ
ォＩＤ＝１の共有資源の解放要求を行った場合について説明する。
ＣＰＵ１１Ｃにおいて実行されているタスク処理ＴＣがセマフォＩＤ＝１の共有資源の
解放要求を行った場合には、タスク処理ＴＣと同時に共有資源の獲得要求を行ったタスク
処理および共有資源の解放要求を行ったタスク処理がない場合には、タスク処理ＴＣが最
も優先レベルが高いと判別し、セマフォ操作回路２３は、セマフォレジスタ２２を参照し
、セマフォＩＤ＝１の共有資源がタスク処理ＴＣにより獲得済みであることを判別する。
これに伴い、優先度比較回路２１は、セマフォ操作回路２３に対し、最高優先度タスク
ＩＤとして、タスク処理ＴＣに対応するタスクＩＤ＝３を出力するとともに、解放対象の
共有資源に対応するセマフォＩＤ＝１を出力する。
この結果、セマフォ操作回路２３は、セマフォＩＤ＝１の共有資源を解放するとともに
、セマフォＩＤ＝１に対応する有効データを“０”として処理を終了する。
これにより、セマフォＩＤ＝１の共有資源の獲得を要求していて、休止状態へと遷移さ
れていた他のタスク処理の内、最も優先度の高いタスク処理にセマフォ、ひいては、共有
資源が割り当てられることとなる。
【００２４】
また、ＣＰＵ１１Ｃにおいて実行されているタスク処理ＴＣがセマフォＩＤ＝１の共有
資源の解放要求を行うのと同時に、共有資源の獲得要求あるいは共有資源の解放要求を行
ったタスク処理が、タスク処理ＴＡあるいはタスク処理ＴＤである場合には、優先度比較
回路２１は、これらのタスク処理のうち、タスク処理ＴＣが最も優先レベルが高いと判別
し、セマフォ操作回路２３は、セマフォレジスタ２２を参照し、セマフォＩＤ＝１の共有
資源がタスク処理ＴＣにより獲得済みであることを判別する。
これに伴い、優先度比較回路２１は、セマフォ操作回路２３に対し、最高優先度タスク
ＩＤとして、タスク処理ＴＣに対応するタスクＩＤ＝３を出力するとともに、解放対象の
共有資源に対応するセマフォＩＤ＝１を出力する。
この結果、セマフォ操作回路２３は、セマフォＩＤ＝１の共有資源を解放するとともに
、セマフォＩＤ＝１に対応する有効データを“０”に更新する。
これにより、セマフォＩＤ＝１の共有資源の獲得を要求していて、休止状態へと遷移さ
れていた他のタスク処理の内、最も優先度の高いタスク処理にセマフォ、ひいては、共有
資源が割り当てられることとなる。
【００２５】
以上の説明のように、本実施形態によれば、共有資源は、同時に獲得要求を行ったタス
ク処理ＴＡ〜ＴＤのうち、最も処理の優先度が高いタスク処理に割り当てられ、獲得され
ることとなるとともに、共有資源を獲得できなかったタスク処理については、休止状態に
遷移されて当該休止状態に遷移されたタスク処理を実行していたＣＰＵは、他のタスク処
理を実行することができ、ＣＰＵの稼働効率を高めて効率よく処理を行え、ひいては、情
報処理装置全体の処理効率を向上させることができる。
同様に共有資源の解放時には、同時に解放要求（あるいは獲得要求）を行ったタスク処
理ＴＡ〜ＴＤのうち、最も処理の優先度が高いタスク処理から優先的に受け付けられるの
で、共有資源の解放が遅れることによる処理の遅延を回避でき、効率的な処理が行える。
【００２６】
次により具体的な実施形態について説明する。
［１］情報処理システムの構成
図３は、より詳細な情報処理システムの構成ブロック図である。
情報処理システム１００は、大別すると、複数のプロセッサとしてのＣＰＵ（プロセッ
サ）１０１Ａ〜１０１Ｄと、複数のＣＰＵ１０１Ａ〜１０１Ｄにおけるタスク割当、共有
資源割り当てなどの調停を行う本実施形態の情報処理装置を構成するコプロセッサ（情報
処理装置）１０２と、を備えている。
【００２７】
ここで、コプロセッサ１０２について説明する。
本実施形態におけるＣＰＵ１０１Ａ〜１０１Ｄは、通常のＣＰＵバスを介して通信を行
うためのＣＰＵバスインタフェースを備えるとともに、コプロセッサ１０２とコプロセッ
サバスを介して通信を行うためのコプロセッサバスインタフェースを備えている。
これにより、各ＣＰＵ１０１Ａ〜１０１Ｄは、ＣＰＵバスインタフェースを介した通常
のデータ入出力と並行して、コプロセッサバスを介したコプロセッサ命令のコプロセッサ
１０２への出力およびコプロセッサバスを介したデータ入出力が可能となっている。
このような構成を採っているので、本実施形態のコプロセッサ１０２によれば、各ＣＰ
Ｕ１０１Ａ〜１０１Ｄが（標準で）備えていない機能をハードウェア及びソフトウェアの
両面で柔軟性を持って拡張できるという効果が得られている。
【００２８】
コプロセッサ１０２は、外部からのデバッグ割込要求を受け付け、デバッグ割込要求信
号を出力するデバッグ入力受付回路１１０と、外部からの割込要求を受け付け、外部割込
要求信号を出力する外部割込入力受付回路１１１と、複数のＣＰＵ、ひいては、複数のタ
スク処理からのコプロセッサに対する処理要求を受け付け、処理要求信号を出力する処理
要求受付回路１１２と、デバッグ割込要求信号、外部割込要求信号および処理要求信号が
入力され、要求信号別の優先度判定を行い、要求別優先度判定結果を後述の制御部に通知
する処理要求要因決定回路１１３と、後述する個別レジスタ部の内容に基づいて処理割当
対象（タスクスイッチ対象）のＣＰＵを決定する割当対象決定回路１１４と、割当対象決
定回路１１４の決定結果に基づいて、割込要求を行い各ＣＰＵ１１Ａ〜１１Ｄに割込処理
を行わせる割込要求発生回路１１５と、を備えている。
【００２９】
また、コプロセッサ１０２は、処理割当対象（タスクスイッチ対象あるいは外部割込み
処理割り当て対象）のＣＰＵを管理し、あるいは、外部割り込み状態を管理するための管
理用データを格納する共通レジスタを有する共通レジスタ部１１６と、処理優先度レベル
データおよび各ＣＰＵ１１Ａ〜１１Ｄの状態を記憶する個別のレジスタを有する個別レジ
スタ部１１７と、共有資源の割り当てなどの処理データの論理的な整合性を保つために排
他的に処理する必要がある場合に排他制御を行う排他制御部１１８と、ＣＰＵ１０１Ａ〜
１０１Ｄで動作しているＯＳ（ｏｐｅｒａｔｉｎｇ  ｓｙｓｔｅｍ）などからのコプロセ
ッサ命令をデコードするデコーダ１１９と、デコーダ１１９によりデコードされたコマン
ドのシーケンス制御を行うシーケンサ１２０と、シーケンサ１２０の制御下でデコードさ
れたコマンドに基づいて各部の制御を行うとともに、コプロセッサ１０２全体を制御する
制御部１２１と、を備えている。
共通レジスタ部１１６は、大別すると、タスクスイッチ対象ＣＰＵＩＤレジスタｔｔｃ
ｒと、外部割込ステータスレジスタｉｓｒと、不正操作検出レジスタｉｏｄｒと、セマフ
ォ委譲タスクＩＤレジスタｓｔｔｒと、を備えている。
個別レジスタ部１１７は、大別すると、ＣＰＵ１０１Ａに対応するデータを記憶する第
１レジスタ群１１７Ａと、ＣＰＵ１０１Ｂに対応するデータを記憶する第２レジスタ群１
１７Ｂと、ＣＰＵ１０１Ｃに対応するデータを記憶する第３レジスタ群１１７Ｃと、ＣＰ
Ｕ１０１Ｄに対応するデータを記憶する第４レジスタ群１１７Ｄと、を備えている。
【００３０】
［２］コプロセッサの入出力信号
ここで、コプロセッサの入出力信号について簡単に説明する。
図４は、コプロセッサの入出力信号の説明図である。
図４において、たとえば、ｃ３３＿ｃｏ＿ｄｉｎ＿ｉ信号は、３２ビットのビット幅を
有し、入出力方向は、出力方向（Ｏ）であり、ＣＰＵへのデータ出力信号線であることが
わかる。同様に、ｃｌｋｅｎ信号は、入出力方向は、入力方向（Ｉ）であり、コプロセッ
サのクロックイネーブル信号であることがわかる。また、ｃ３３＿ｉｎｔ＿ｌｖ＿ｉ信号
は、４ビットのビット幅を有し、入出力方向は、出力方向（Ｏ）であり、ＣＰＵへの割込
レベルを表す信号であることがわかる。以下、同様にして、出力信号が８系統、入力信号
が１４系統であることがわかる。
【００３１】
［３］共通レジスタ部の構成
ここで、共通レジスタ部を構成する各レジスタについて説明する。
［３．１］外部割込ステータスレジスタ
図５は、外部割込ステータスレジスタのビットフォーマットの説明図である。
外部割込ステータスレジスタ（Ｉｎｔｅｒｒｕｐｔ  Ｓｔａｔｕｓ  Ｒｅｇｉｓｔｅｒ
）ｉｓｒは、図５に示すように、３２ビットのレジスタである。
この外部割込ステータスレジスタｉｓｒの第１９ビット〜第１６ビットは、外部割り込
みレベルが格納されるフィールドであり、このフィールドの各ビットは、書き込み（図中
、ｗで示す。以下同様。）および読み込み（図中、ｒで示す。以下、同様）が可能である
。
【００３２】
外部割り込みレベルは、受理可能な外部割り込みレベルを示すものであり、設定可能な
値は、４ビットで表現可能な０〜１５である。コプロセッサは、このフィールドで指定さ
れたレベル以下の外部割り込みをマスクする。たとえば、設定されている外部割り込みレ
ベルの値が３の場合、４以上のレベルを持つ外部割り込みを受理し、３以下のレベルを持
つ外部割り込みをマスクして、受理しないこととなる。なお、本実施形態においては、外
部割り込みを受理した際に、コプロセッサ１０２がこのフィールドを更新しないこととし
ているので、ＣＰＵ１０１Ａ〜１０１Ｄが割り込み処理を開始するまでは外部割り込みレ
ベルの入力を一定に保つ必要がある。
また、外部割込ステータスレジスタｉｓｒの第８ビットは、外部割込許可状態フラグが
格納されるフィールドである。この第８ビットが“１”である場合には、割込を許可し、
“０”である場合には割込が禁止される。なお、いずれか任意のＣＰＵがデバッグモード
にある場合は、この外部割込許可状態フラグの設定にかかわらず、コプロセッサは外部割
り込みをマスクする。
【００３３】
また、外部割込ステータスレジスタｉｓｒの第０ビットは、いずれか任意のＣＰＵにお
いてｂｒｋ命令（ｂｒｅａｋ命令）が実行されてデバッグモードへ遷移した際に、他のＣ
ＰＵに対してデバッグ割り込みを発生させる方法を指定するためのハードウェアデバッグ
モードのオン／オフが指定されるフィールドである。この第０ビットが“１”である場合
には、ハードウェアデバッグモードがオンとされ、いずれか任意のＣＰＵがデバッグモー
ドへ遷移したことをコプロセッサが検出したら、コプロセッサが他ＣＰＵへデバッグ割り
込みを発生させる。また、この第０ビットが“０”である場合には、ハードウェアデバッ
グモードがオフとされ、いずれか任意のＣＰＵがデバッグモードへ遷移したことをコプロ
セッサが検出しても、コプロセッサは他ＣＰＵへデバッグ割り込みを発生させない。この
場合、デバッグモードへ遷移したＣＰＵは、他ＣＰＵに対してデバッグ割込を発生させる
ためのｆｂｒｋ命令（後に詳述する）を実行することによって他ＣＰＵをデバッグモード
へ遷移させる必要がある。
［３．２］ハードウェアセマフォレジスタ
図６は、ハードウェア（ＨＷ）セマフォステータスレジスタのビットフォーマットの説
明図である。
ハードウェア（ＨＷ）セマフォステータスレジスタ（Ｈａｒｄｗａｒｅ  Ｓｅｍａｐｈ
ｏｒｅ  Ｓｔａｔｕｓ  Ｒｅｇｉｓｔｅｒ）ｈｓｓｒは、３２ビットのレジスタである。
このハードウェアセマフォステータスレジスタｈｓｓｒの第７ビット〜第０ビットは、
各ビットが対応するハードウェアセマフォに割り当てられており、たとえば、第７ビット
が、セマフォＩＤ＝７のハードウェアセマフォに割り当てられ、第４ビットがセマフォＩ
Ｄ＝４のハードウェアセマフォに割り当てられる。そして、対応するハードウェアセマフ
ォがすでにいずれかのＣＰＵに割り当てられ、獲得されている場合には、当該ビットが“
１”とされ、使用中であることが容易に把握できるようになっている。
【００３４】
［３．３］タスクスイッチ対象ＣＰＵＩＤレジスタ
図７は、タスクスイッチ対象ＣＰＵＩＤレジスタのビットフォーマットの説明図である
。
タスクスイッチ対象ＣＰＵＩＤレジスタ（Ｔａｓｋｓｗｉｔｃｈ  Ｔａｒｇｅｔ  ＣＰ
ＵＩＤ  Ｒｅｇｉｓｔｅｒ）ｔｔｃｒは、図６に示すように、３２ビットのレジスタであ
る。
このタスクスイッチ対象ＣＰＵＩＤレジスタｔｔｃｒの第７ビット〜第０ビットは、タ
スクスイッチ対象のＣＰＵを特定するためのＣＰＵＩＤが格納されるフィールドであり、
このフィールドの各ビットは、読み込みのみが可能である。
タスクスイッチ対象のＣＰＵとは次の状態（１）、（２）を指している。
（１）  ＨＡＬＴ状態にあるＣＰＵ
（２）  次に外部割り込み処理が割り当てられるＣＰＵ（ＨＡＬＴ状態にあるＣＰＵ
が存在しない場合）
【００３５】
ここで、同じ条件に合致するＣＰＵが複数存在する場合は、そのうちひとつをコプロセ
ッサが判断してタスクスイッチ対象ＣＰＵＩＤを設定する。
上記状態のうち、ＨＡＬＴ状態にあるＣＰＵが存在する場合には、０〜１２６の値の範
囲で、ＨＡＬＴ状態にあるＣＰＵのＩＤを表す。
また、ＨＡＬＴ状態にあるＣＰＵが存在しない場合には、１２８〜２５４の値の範囲で
、次に外部割り込み処理を割り当てられるＣＰＵのＩＤを示すこととなり、この値は、対
象となるＣＰＵのＩＤに１２８を加えた値になっている（たとえば、ＣＰＵＩＤが“１”
の場合には、ＣＰＵＩＤとして“１２９”が設定される）。
なお、コプロセッサが適切なＣＰＵＩＤを設定できない場合には、エラーパターンとし
て、１２７あるいは２５５の値が設定される。
【００３６】
［３．４］不正操作検出レジスタ
図８は、不正操作検出レジスタのビットフォーマットの説明図である。
不正操作検出レジスタ（Ｉｌｌｅｇａｌ  Ｏｐｅｒａｔｉｏｎ  Ｄｅｔｅｃｔｉｏｎ  
Ｒｅｇｉｓｔｅｒ）ｉｏｄｒは、図８に示すように、３２ビットのレジスタである。
この不正操作検出レジスタｉｏｄｒの第２ビットは、内部割り込み系命令の実行の際、
対象となるＣＰＵが内部割り込み禁止のため内部割り込みを発生させられなかった場合に
“１”となる内部割込失敗フラグであり、書き込みおよび読み込みが可能である。
また、不正操作検出レジスタｉｏｄｒの第１ビットは、獲得していないハードウェアセ
マフォをハードウェアセマフォを解放するためのｆｒｓ命令によって解放した場合に“１
”となるハードウェアセマフォの不正解放フラグであり、書き込みおよび読み込みが可能
である。
また、不正操作検出レジスタｉｏｄｒの第０ビットは、コプロセッサで定義されていな
い命令コードを実行した場合に“１”となるコプロセッサ未定義命令実行フラグであり、
書き込みおよび読み込みが可能である。
［３．５］セマフォ委譲タスクＩＤレジスタ
図２７は、セマフォ委譲タスクＩＤレジスタのビットフォーマットの説明図である。
セマフォ委譲タスクＩＤレジスタ（Ｓｅｍａｐｈｏｒｅ  Ｔｒａｎｓｆｅｒ  Ｔａｓｋ
ＩＤ  Ｒｅｇｉｓｔｅｒ）ｓｔｔｒは、図２７に示すように３２ビットのレジスタである
。
このセマフォ委譲タスクＩＤレジスタｓｔｔｒの第７ビット〜第０ビットは、セマフォ
の移譲先のタスク処理のタスクＩＤが格納されるフィールドであり、このフィールドの各
ビットは、各ＣＰＵからは読み込みのみが可能である。
【００３７】
［４］個別レジスタ部
次に個別レジスタ部１１７を構成する各レジスタについて、再び図３を参照して説明す
る。
個別レジスタ部１１７の第１レジスタ群１１７Ａは、ＣＰＵ１０１Ａが処理を行ってい
るタスク処理あるいは外部割込処理の処理優先度レベルデータを記憶する優先度値保持レ
ジスタ１３１Ａと、ＣＰＵ１０１Ａの動作状態を表すＣＰＵ状態データを記憶するＣＰＵ
状態レジスタ１３２Ａと、を備えている。
第２レジスタ群１１７Ｂは、ＣＰＵ１０１Ｂが処理を行っているタスク処理あるいは外
部割込処理の処理優先度レベルデータを記憶する優先度値保持レジスタ１３１Ｂと、ＣＰ
Ｕ１０１Ｂの動作状態を表すＣＰＵ状態データを記憶するＣＰＵ状態レジスタ１３２Ｂと
、を備えている。
【００３８】
第３レジスタ群１１７Ｃは、ＣＰＵ１０１Ｃが処理を行っているタスク処理あるいは外
部割込処理の処理優先度レベルデータを記憶する優先度値保持レジスタ１３１Ｃと、ＣＰ
Ｕ１０１Ｃの動作状態を表すＣＰＵ状態データを記憶するＣＰＵ状態レジスタ１３２Ｃと
、を備えている。
第４レジスタ群１１７Ｄは、ＣＰＵ１０１Ｄが処理を行っているタスク処理あるいは外
部割込処理の処理優先度レベルデータを記憶する優先度値保持レジスタ１３１Ｄと、ＣＰ
Ｕ１０１Ｄの動作状態を表すＣＰＵ状態データを記憶するＣＰＵ状態レジスタ１３２Ｄと
、を備えている。
【００３９】
ここで、優先度値保持レジスタ１３１Ａ〜１３１Ｄとして機能するｔｉｓｒおよびＣＰ
Ｕ状態レジスタ１３２Ａ〜１３２Ｄとして機能するＣＰＵ状態レジスタｃｓｒの具体的構
成について説明する。
［４．１］タスク／割り込みステータスレジスタｔｉｓｒ
図９は、タスク／割り込みステータスレジスタのビットフォーマットの説明図である。
タスク／割り込みステータスレジスタ（Ｔａｓｋ／Ｉｎｔｅｒｒｕｐｔ  Ｓｔａｔｕｓ
Ｒｅｇｉｓｔｅｒ）ｔｉｓｒは、図（９）に示すように、３２ビットのレジスタである
。
このタスク／割り込みステータスレジスタｔｉｓｒの第３１ビット〜第１６ビットは、
ソフトウェア用制御ビットであり、ソフトウェアで任意に使用できるフィールドとして、
書き込みおよび読み込みが可能である。
また、タスク／割り込みステータスレジスタｔｉｓｒの第１２ビットは、ＲＵＮ／ＨＡ
ＬＴ状態フラグであり、対応するＣＰＵの状態を示すものであり、このフラグはコプロセ
ッサ１０２によってのみ更新され、ＣＰＵ側からは読み込みのみ可能である。なお、ＣＰ
ＵのＳＬＥＥＰ状態は反映されない。このフラグは、ＣＰＵがＨＡＬＴ状態の場合に“１
”にセットされる。
【００４０】
また、タスク／割り込みステータスレジスタｔｉｓｒの第８ビットは、内部割り込み許
可フラグであり、コプロセッサ１０２からＣＰＵへの割り込みを制御し、割込許可の場合
に“１”にセットされる。また、内部割込みを発生させた場合，コプロセッサ１０２は、
このフラグを割り込み禁止に設定するために“０”とする。さらに内部割込みの発生に失
敗した場合はフラグの更新を行わない。また外部割り込み処理の割り当て時には，コプロ
セッサ１０２がこのフラグを割り込み禁止に設定する．
また、タスク／割り込みステータスレジスタｔｉｓｒの第６ビットは、ＣＰＵがデバッ
グ状態であるか否かを示すフラグであり、ＣＰＵ側からは読み込みのみ可能である。この
フラグはコプロセッサ１０２によってのみ更新され、デバッグ状態で“１”にセットされ
る。
また、タスク／割り込みステータスレジスタｔｉｓｒの第５ビットは、ＣＰＵで実行さ
れている処理が割込処理かタスク処理であるかを示す割り込み／タスク状態フラグであり
、ＣＰＵで実行されている処理が割込処理である場合に“１”がセットされる。このフラ
グは、書き込みおよび読み込みが可能である。
そして、タスク処理を実行する際と，割込処理からタスク処理の実行へ復帰する際には
、ソフトウェアにより更新され，タスク処理を実行中のＣＰＵに割込処理を割り当てる場
合はコプロセッサ１０２により更新されることとなる。なお、内部割込みの場合は更新さ
れない。
【００４１】
また、タスク／割り込みステータスレジスタｔｉｓｒの第４ビット〜第１ビットは、Ｃ
ＰＵで実行されている処理の優先度（タスクの場合）あるいは割込レベル（外部割り込み
処理の場合）を示すフィールドである。このフィールドにおいて、取り得る値はタスク処
理あるいは割込処理のいずれの場合も、０〜１５の値である。
タスク処理を実行する際と、割込処理からタスク処理の実行へ復帰する際は、ソフトウ
ェアにより更新され、タスクを実行中のＣＰＵに割込処理を割り当てる場合は、コプロセ
ッサ１０２により更新される。なお、内部割込みの場合は更新されない。
また、タスク／割り込みステータスレジスタｔｉｓｒの第０ビットは、ＣＰＵで実行さ
れている割込処理が多重割り込みであるか否かを示す多重割込フラグであり、多重割込時
に“１”にセットされる。
なお、割り込み／タスク状態フラグが、タスク処理を示している時（“０”となってい
る）に、この多重割込フラグが“１”にセットされていても無効である。
また、この多重割込フラグは、多重割り込み処理から非多重割り込み処理へ復帰する際
あるいは、非多重割り込み処理状態のＣＰＵに多重割り込みを発生させる際にソフトウェ
アにより更新される。
【００４２】
［４．２］ＣＰＵステータスレジスタｃｓｒ
図１０は、ＣＰＵステータスレジスタのビットフォーマットの説明図である。
ＣＰＵステータスレジスタ（ＣＰＵ  Ｓｔａｔｕｓ  Ｒｅｇｉｓｔｅｒ）ｃｓｒは、図
（１０）に示すように、３２ビットのレジスタである。
このＣＰＵステータスレジスタｃｓｒの第３１ビット〜第２４ビットは，当該ＣＰＵが
実行中のタスクＩＤを示すフィールドであり、その取り得る値は、０〜２５５となってい
る。このフィールドは書き込みおよび読み込みが可能である。
また、ＣＰＵステータスレジスタｃｓｒの第２３ビット〜第１６ビットは、当該ＣＰＵ
が獲得に成功したハードウェアセマフォを示すフィールドであり、第２３ビットが“１”
となると、第７番目のハードウエアセマフォ（セマフォＩＤ＝７）を獲得していることを
示し、第２２ビットが“１”となると、第６番目のハードウエアセマフォ（セマフォＩＤ
＝６）を獲得していることを示し、以下同様にして、第１６ビットが“１”となると、第
０番目のハードウエアセマフォ（セマフォＩＤ＝０）を獲得していることを示す。
このフィールドは、後述するｔａｓ命令あるいは後述するｆｒｓ命令を実行した場合に
更新され、ハードウエアセマフォの獲得成功，あるいは獲得中に“１”にセットされる。
また、ＣＰＵステータスレジスタｃｓｒの第７ビット〜第０ビットは、各ＣＰＵ固有の
レジスタに対して操作（ロード／ストア）を行う場合に，対象となるＣＰＵＩＤを指定す
るフィールドであり、その取り得る値は、０〜１２６となっている。このフィールドは、
書き込みおよび読み込みが可能である。
【００４３】
［５］排他制御部
図１１は、排他制御部の概要構成ブロック図である。
排他制御部１１８は、大別すると、ハードウェアセマフォの状態を記憶するセマフォレ
ジスタ１４０と、セマフォが獲得できなかったタスク処理、ひいては、当該タスク処理を
実行しているＣＰＵ１０１Ａ〜１０１Ｄがセマフォの獲得を予約するための情報を記憶す
るセマフォ予約ブロック部１４１と、ハードウェアセマフォステータスレジスタｈｓｓｒ
およびセマフォ予約ブロック部１４１の状態に基づいてセマフォ操作を行うセマフォ操作
部１４２と、を備えている。
【００４４】
［５．１］セマフォレジスタ
図１２は、セマフォレジスタの概要構成ブロック図である。
セマフォレジスタ１４０は、８個の共有資源（セマフォＩＤ＝０〜７）にそれぞれ対応
した８個のセマフォ情報格納部１４３−０〜１４３−７を備えている。
各セマフォ情報格納部１４３−０〜１４３−７は、同一構成を採っており、セマフォＩ
Ｄに対応するセマフォが獲得されている場合に“１”となり、セマフォが未獲得である場
合に“０”となるセマフォ獲得中フラグ１４４Ａと、セマフォＩＤに対応するセマフォが
獲得され、セマフォ獲得中フラグ１４４Ａが“１”となっている場合に、当該セマフォを
獲得しているタスク処理を特定するためのタスクＩＤがセマフォ獲得中タスクＩＤとして
格納されるセマフォ獲得中タスクＩＤ格納部１４４Ｂと、を備えている。
【００４５】
［５．２］セマフォ予約ブロック部
図１３は、セマフォ予約ブロック部の概要構成ブロック図である。
セマフォ予約ブロック部１４１は、８個のセマフォにそれぞれ対応させた８個のセマフ
ォ予約キュー１４５−０〜１４５−７を有している。これら８個のセマフォ予約キュー１
４５−０〜１４５−７は、同一構成を採っており、それぞれ３個のＣＰＵがセマフォの予
約を行えるように、３段のＦＩＦＯ（Ｆｉｒｓｔ  Ｉｎ  Ｆｉｒｓｔ  Ｏｕｔ）型の予約
情報格納部１４６−１〜１４６−３を備えている。
各予約情報格納部１４６−１〜１４６−３は、同一構成を採っており、予約状態か否か
を判別するためのセマフォ予約フラグ１４７と、セマフォ獲得の予約を行っているタスク
処理を特定するためのタスクＩＤを格納するセマフォ予約タスクＩＤフィールド１４８と
、を備えている。この場合において、予約情報格納部１４６−ｘの個数については、少な
くともＣＰＵ数（本実施形態の場合、４個）分必要であり、一つのＣＰＵで複数のセマフ
ォを獲得する可能性がある場合を考慮すると、ＣＰＵ数の倍程度（本実施形態の場合、８
個）設ければ実用的には問題がない。
【００４６】
［５．３］処理優先度レベルデータ
次に、個別レジスタ２５に格納される処理優先度レベルデータについて説明する。
図１４は、処理優先度レベルデータのデータフォーマットの一例の説明図である。
処理優先度レベルデータ４０は、６ビットのデータであり、上位ビット（ＭＳＢ）側か
ら下位ビット（ＬＳＢ）側に向かって、１ビットの処理種別フラグＩ／Ｔ、４ビットの優
先度レベルフィールドＰＲ、１ビットの多重割込レベルフラグＩＮと、を備えている。
処理種別フラグＩ／Ｔは、処理対象が通常タスク処理なのか、外部割込処理なのかを表
すデータである。本実施形態の場合、処理対象が通常タスク処理であれば、処理種別フラ
グＩ／Ｔ＝０、外部割込処理であれば、処理種別フラグＩ／Ｔ＝１となっている。
優先度レベルフィールドＰＲは、処理の優先度を表すデータであり、０〜１５（０ｈ〜
Ｆｈ：ｈは１６進数を表す。以下同じ。）の値を持つ。優先度レベルデータ＝０が最も低
優先度であり、優先度レベルデータ＝１５が最も高優先度である。
多重割込レベルフラグＩＮは、割込処理中にさらに外部割込処理（多重割込処理）がな
されたか否かを表すデータである。多重割込レベルフラグＩＮ＝０の場合は、多重割込が
なされていないことを示し、多重割込レベルフラグＩＮ＝１の場合は、多重割込がなされ
ていることを示す。
【００４７】
［５．４］コプロセッサのメモリマップ
続いて、コプロセッサのメモリマップについて説明する。
図１５は、コプロセッサ１０２の第１の態様のメモリマップの説明図である。
これに加えてマルチプロセッサ構成時においては、デバッグ割り込みあるいはｂｒｋ命
令の実行によってＣＰＵがレジスタを退避させるためのスタック領域をＣＰＵ毎に設けて
いる。各スタックのサイズは２５６バイトとしている。これらの領域はメモリアドレスの
最上位から順にＣＰＵ１０１Ａ（図中、ＣＰＵ０と示す。）、ＣＰＵ１０１４Ｂ（図中、
ＣＰＵ１と示す。）、…とＣＰＵの数に応じ、アドレスの下位方向へ向かって割り当てら
れている。
各ＣＰＵ１０１Ａ〜１０１Ｄに割り当てられた領域は、図１５に示すように、アドレス
の下位８ビットが０ｘ００ｈ〜０ｘ０Ｆｈの領域は、予約済み領域（Ｒｅｓｅｒｖｅｄ）
となっており利用できず、アドレスの下位８ビットが０ｘ１０ｈ〜０ｘＦＦｈの領域は、
デバッグルーチン内で自由に利用できるようにされている。
【００４８】
図１６は、コプロセッサの第２の態様のメモリマップの説明図である。
第１の態様と比較して、予約済み領域が多くなっているが、確保するデバッグ領域は同
様である。
図１５および図１６のメモリマップに示すように、本実施形態では、ＣＰＵ毎にデバッ
グ用スタック領域を設けるが、ソフトウェアがスタック領域にアクセスする際はいずれの
ＣＰＵ１０１Ａ〜１０１Ｄからでも共通のアドレスによってアクセスできる必要がある。
そこで本実施形態では、ＣＰＵ１０１Ａ〜１０１Ｄから出力されるアドレスをＣＰＵに
応じてオフセットさせるハードウェアとしてのアドレスデコーダが設けられてい＾−る。
【００４９】
図１７は、第１の態様のメモリマップ時に４個のＣＰＵ１０１Ａ〜１０１Ｄに対応する
デバッグ用スタック領域のアドレスの説明図である。
図１７は、ＣＰＵのｄｂｂｒレジスタで指定されるデバッグベースアドレスが「０ｘ０
００６００００ｈ」、かつ、４ＣＰＵ構成時におけるＣＰＵ毎のデバッグ用スタック領域
のアドレスを示している。図１７中、破線円内に示したＣＰＵ１０１Ａに対応するアドレ
スは、他のＣＰＵ１０１Ｂ〜１０１Ｄの実際のアドレスに対応する代表アドレスとして各
ソフトウェアにより用いられる。これにより、アドレスデコーダは、ソフトウェアが生成
した代表値のアドレスを当該ソフトウェアを処理しているＣＰＵ１０１Ａ〜１０１Ｄに応
じたアドレスへ変換する機能をサポートしている。これにより、ソフトウェアはこのアド
レス代表値を指定することで、どのＣＰＵ１０１Ａ〜１０１Ｄで実行されても適切なアド
レスへ変換されることが保証されている。
【００５０】
一方、デバッグ例外処理ベクタは、全ＣＰＵ１０１Ａ〜１０１Ｄで共通であるので、こ
れについてはアドレスのオフセットを行わない。またＰＣとＲ０に対応するアドレスのデ
ータについては、ｂｒｋ命令実行時またはデバッグ割り込み発生時に、各ＣＰＵ１０１Ａ
〜１０１Ｄが各々備えるデバッグモジュールへ自動的に退避させるので、これらのアドレ
スについてもアドレスのオフセットを行わないようになっている。
【００５１】
［６］命令セット
次にコプロセッサの命令セットについて説明する。
本実施形態においては、コプロセッサの命令セットは、大別すると、ストア系命令、ロ
ード系命令、その他の命令の３つに分けられる。
ＣＰＵ１０１Ａ〜１０１Ｄがコプロセッサ１０２に対して未定義命令の実行を要求した
場合はエラーとなり、不正操作検出レジスタｉｏｄｒのコプロセッサ未定義命令実行フラ
グＵＩがセットされる。しかしエラーは発生するが例外とはならず、何ら他に影響を及ぼ
すことなくコプロセッサ処理を要求したＣＰＵに対してａｃｋ信号を返すこととなる。
【００５２】
［６．１］ストア系命令セット
図１８は、ストア系命令の命令フォーマットの説明図である。
ストア系の命令としては、図１７に示すように、以下の１１個の命令がある。なお、詳
細については後に述べる。
（１）ｓｔ．ｉｓｒ命令
（２）ｓｔ．ｓｔｉｓｒ命令
（３）ｓｔ．ｓｃｓｒ命令
（４）ｓｔ．ｐｔｉｓｒ命令
（５）ｓｔ．ｐｃｓｒ命令
（６）ｓｔ．ｉｏｄｒ命令
（７）ｃｓｗ命令
（８）ｉｖｋ命令
（９）ｈａｌｔｃｐｕ命令
（１０）ｔａｓ命令
（１１）ｆｒｓ命令
【００５３】
［６．２］ロード系命令セット
図１９は、ロード系のコプロセッサの命令フォーマットである。
ロード系の命令としては、以下の１０個の命令がある。なお、詳細については後に述べ
る。
（１）ｌｄ．ｉｓｒ命令
（２）ｌｄ．ｈｓｓｒ命令
（３）ｌｄ．ｓｔｉｓｒ命令
（４）ｌｄ．ｓｃｓｒ命令
（５）ｌｄ．ｐｔｉｓｒ命令
（６）ｌｄ．ｐｃｓｒ命令
（７）ｌｄ．ｉｏｄｒ命令
（８）ｌｄ．ｐｃｐｕｉｄ命令
（９）ｌｄ．ｔｔｃｒ命令
（１０）ｌｄ．ｓｔｔｒ命令
【００５４】
［６．３］その他命令セット
図２０は、その他のコプロセッサの命令フォーマットである。
その他の命令としては、以下の二つの命令がある。なお、詳細については後に述べる。
（１）ｆｂｒｋ命令
（２）ｉｉａｃｋ命令
【００５５】
［７］タスク優先度／割り込みレベル
ＣＰＵ毎に設けられたタスク／割り込みステータスレジスタｔｉｓｒには、現在実行し
ているタスクの優先度あるいは割り込みレベルが書き込まれる。
タスク優先度または割り込みレベルを表す優先度レベルフィールドＰＲは、４ビット幅
であり、０〜１５までの値を設定できる。
また、タスクと割り込み処理との区別を表すためには、Ｉ／Ｔ（Ｉｎｔｅｒｒｕｐｔ／
Ｔａｓｋ）フラグが用いている。
また割り込み処理の場合は、多重割り込みか否かを表すのにＩＮ（Ｉｎｔｅｒｒｕｐｔ
Ｎｅｓｔｉｎｇ）フラグを用いている。
【００５６】
ここで、再び図１４を参照して説明する。
図１４においては、通常タスク処理の最高優先度が０、最低優先度が１５、かつ、割り
込み処理の最高優先度が１５、最低優先度が０のとき、コプロセッサ内部においてタスク
と割り込みを一貫させて扱う場合のタスク優先度について示している。
この場合において、割り込みレベルが同じ場合、多重割り込みの方がコプロセッサ内部
における優先度が高い。また、Ｉ／Ｔフラグ＝０，ＩＮフラグ＝１という組み合わせはな
く、そのような場合には、Ｉ／Ｔフラグ＝０，ＩＮフラグ＝０として解釈するようにして
いる。
【００５７】
図２１は、内部割り込み命令に対応した，ＣＰＵのベクタテーブルの説明図である。
１６番〜１８番のこれら予約済み割り込みベクタ（ｖｅｃｔｏｒ）を、先に列挙した３
つの内部割り込み命令にそれぞれ割り当てる。
【００５８】
［８］コプロセッサのトラップ要因
次にコプロセッサ１０２のトラップ処理について説明する。
図２２は、コプロセッサのトラップ要因の説明図である。
複数のトラップ要因が同時に発生した場合、コプロセッサ１０２は、優先順位に基づい
てトラップ処理を行う。トラップ要因がリセット（Ｒｅｓｅｔ）の場合は、コプロセッサ
１０２がどのような状態であっても、即座にトラップ処理を受け付ける。リセット以外の
トラップ要因で最も優先度が高いのが内部割込処理要求（Ｉｎｔｅｒｎａｌ  Ｉｎｔｅｒ
ｒｕｐｔ）である。次に優先度が高いのが、コプロセッサからの要求（Ｃｏ−Ｐｒｏｃｅ
ｓｓｏｒ  Ｒｅｑｕｅｓｔ）である。
また、トラップ要因がデバッグ例外（Ｄｅｂｕｇ  ｅｘｃｅｐｔｉｏｎ）の場合、コプ
ロセッサで命令を実行中であっても即座にデバッグ割り込み信号の出力を行う。これは、
コプロセッサ１０２がコプロセッサ処理要求中は次の動作に移れないことを利用している
。
【００５９】
その他のトラップ要因（ＮＭＩおよびＭａｓｋａｂｌｅ  Ｉｎｔｅｒｒｕｐｔ）におい
ては、コプロセッサで命令が実行中の場合は終了するまで保留し、コプロセッサ命令の終
了後に要因の優先度を判断しトラップ処理へ移る。コプロセッサ命令が実行されていない
場合は即座にトラップ処理へ移ることとなる。
【００６０】
［９］割込処理
次に割込処理時の動作について説明する。
図２３は、割込処理の比較概要説明図である。
［９．１］マスカブル割込
まず、マスカブル割込（ＩＮＴ）について説明する。
マスカブル割り込み発生時に、各ＣＰＵ１０１Ａ〜１０１Ｄに割り込み処理を割り当て
る優先度条件（１）〜（４）を示す。
（１）  ＨＡＬＴ状態のＣＰＵ
（２）  より優先度の低いタスクを実行中のＣＰＵ
（３）  多重割り込みも含め、より割り込みレベルの低い割り込み処理を実行中のＣ
ＰＵ
（４）  ＣＰＵＩＤの小さい順（全ＣＰＵで実行中のタスク優先度が全て同じ場合）
【００６１】
割込処理の割り当て時には、割込処理を割り当てたＣＰＵのタスク／割込ステータスレ
ジスタｔｉｓｒの割込／タスク状態フラグＩ／Ｔと優先度レベルフィールドＰＲをコプロ
セッサ１０２が適切に更新する。
また、タスク／割込ステータスレジスタｔｉｓｒの内部割込許可フラグＩＩＥを禁止に
設定する。これは割込フラグＩＮの更新をソフトウェアが行うため、他要因による更新を
防ぐためである。割込フラグＩＮの更新後に内部割込許可フラグＩＩＥを許可に再設定す
る。この再設定は、割込処理ルーチンにおける入口処理の最後に行うことが望ましい。
【００６２】
一方、各ＣＰＵ１０１Ａ〜１０１Ｄにおいて割込処理を終え、タスクの実行に復帰する
場合には、ソフトウェア的にタスク／割込ステータスレジスタｔｉｓｒの下位６ビットを
適切に更新する。
さらに、割込／タスク状態フラグＩ／Ｔを、割込みからタスクへと更新する必要がある
。同様に、多重割込状態から出る場合は、割込フラグＩＮを多重割り込みから非多重割り
込みへと更新する必要がある。なお、多重割り込みの場合、多重割り込み回数は、ソフト
ウェア側で管理する必要がある。
また、次の条件（１）、（２）に合致するＣＰＵは、割込処理の割り当て対象から外し
ている。
（１）  ＨＷ  セマフォを獲得中であるＣＰＵ
（２）  内部割り込みを禁止しているＣＰＵ
【００６３】
なお、割込処理の割り当てが不能な状態が起こった場合には、タスクスイッチ対象ＣＰ
ＵＩＤレジスタｔｔｃｒにエラーパターンを設定する。特に全ＣＰＵ１０１Ａ〜１０１Ｄ
が内部割り込みを禁止している場合には、コプロセッサ１０２は、マスカブル割込をマス
クすることとなる。
次に割込処理の受理について説明する。
ＣＰＵ１０１Ａ〜１０１Ｄで実行される割込処理ルーチン内で、割込発生元（例えば外
部周辺機器など）へ割込処理を受理したことを直接通知する。
すなわち、割込処理要求を受けるＣＰＵが受理通知を行う→割込発生元が割り込み要求
取り下げ→コプロセッサ１０２へ割込処理の割り当て終了通知の順で通知がされる。
【００６４】
続いて、割込処理の終了について説明する。
各ＣＰＵ１０１Ａ〜１０１Ｄで実行される割込処理ルーチン内で、次に示す操作によっ
て割込処理の終了をコプロセッサ１０２へ通知する。
非多重割り込みから通常タスク処理へ復帰する場合には、自己のタスク／割込ステータ
スレジスタｔｉｓｒの割込／タスク状態フラグＩ／Ｔをタスクに更新し、優先度レベルフ
ィールドＰＲを割り込み発生前の通常タスク処理の優先度に戻す。
また、多重割り込みから非多重割り込みへ復帰する場合には、自己のタスク／割込ステ
ータスレジスタｔｉｓｒの割込フラグＩＮを非多重割り込みに更新し、優先度レベルフィ
ールドＰＲフィールドを多重割り込み前の割り込みレベルに戻す。
また、３回以上の多重割り込み状態から２回以上の多重割り込み状態へ復帰する場合に
は、自己のタスク／割込ステータスレジスタｔｉｓｒの優先度レベルフィールドＰＲをひ
とつ前の多重割り込みの割込レベルに戻す。
【００６５】
続いて、マスク条件について説明する。
発生した割込要因の割込レベルが、外部割込ステータスレジスタｉｓｒのＩＬフィール
ドで設定されている割込レベル未満で、かつ、以下に示すいずれかの条件（１）〜（５）
が成り立つ場合、外部割込ステータスレジスタｉｓｒのＩＥフラグの設定に関わらず割り
込みをマスクさせる。
（１）  ハードデバッグ状態にある。
（２）  全ＣＰＵ１０１Ａ〜１０１Ｄのタスク／割込ステータスレジスタｔｉｓｒ
の内部割込許可フラグＩＩＥが内部割り込み禁止に設定されている。
（３）  いずれかのＣＰＵ１０１Ａ〜１０１Ｄに対して割り込み信号ＩＮＴを出力
中である。
（４）  新規割り込み要因の割り込みレベルが現在処理中の割り込み要因の割り込
みレベル未満である。
（５）  ｔｔｃｒの値がエラーパターンである。
【００６６】
［９．２］ＮＭＩ
次にＮＭＩ（Ｎｏｎ−Ｍａｓｋａｂｌｅ  Ｉｎｔｅｒｒｕｐｔ）について説明する。
ＣＰＵの数によらずコプロセッサ１０２外部へは、ＮＭＩポートをひとつだけ設けてい
る。このため、コプロセッサ１０２外部からのＮＭＩ発生時には、コプロセッサ１０２か
ら全ＣＰＵ１０１Ａ〜１０１ＤへＮＭＩを同時に発生させる。本実施形態では、このよう
な特殊動作を行わせているため、ＮＭＩ発生時にはコプロセッサ１０２が外部割込ステー
タスレジスタｉｓｒの外部割込許可フラグＩＥを割り込み禁止に設定することによって、
外部割り込みを禁止している。
そして、本実施形態では、ＮＭＩ終了後に再度外部割り込みを許可するためには、ソフ
トウェアが外部割込許可フラグＩＥの再設定を行う必要がある。
またＮＭＩの場合は、マスカブル割込みの場合とは異なり、割込み処理を割り当てたＣ
ＰＵのタスク／割込ステータスレジスタｔｉｓｒの下位６ビットを更新しないようになっ
ている。
【００６７】
ＮＭＩの割込み処理を受理する場合には、マスカブル割り込みと同様、ＣＰＵで実行さ
れる割込処理ルーチン内で、割り込み発生元へ割り込みを受理したことを直接通知してい
る。
すなわち、割込処理要求を受けるＣＰＵが受理通知を行う→割込発生元が割り込み要求
取り下げ→コプロセッサ１０２へ割込処理の割り当て終了通知の順で通知がされる。
また、ＮＭＩの割込処理の終了時には、マスカブル割り込みの場合と異なり、割込処理
の終了の通知は行っていない。
また、ＮＭＩは本来マスクされない割り込みではあるが、以下に示す条件（１）、（２
）が成り立つ場合にのみ、これをマスクするようにしている。
（１）  ハードデバッグ状態である。
（２）  ＣＰＵに対してＮＭＩ信号を出力中である。
【００６８】
［９．３］内部割込処理
次に内部割込みについて説明する。
内部割り込み系命令の実行によって、対象となるＣＰＵに対して割り込みを発生させる
。コプロセッサ１０２からＣＰＵ１０１Ａ〜１０１Ｄへ割り込みを発生させる際は割り込
みレベルを最低に設定する。この場合には、ＮＭＩと同様に、タスク／割込ステータスレ
ジスタｔｉｓｒの下位６ビットは更新しない。またコプロセッサ１０２は、内部割り込み
の対象となるＣＰＵのタスク／割込ステータスレジスタｔｉｓｒの内部割込許可フラグＩ
ＩＥを禁止に設定する。
内部割込処理を終えると、所定の命令（ｃｓｗ命令、ｉｖｋ命令）によりタスクの実行
が再開されたり、ＣＰＵ１０１Ａ〜１０１Ｄが所定の命令（ｃｐｕｈａｌｔ命令）により
ＨＡＬＴ状態へ遷移したりする。
【００６９】
このため、内部割込処理の最後に、所定の命令により内部割込許可フラグＩＩＥを許可
に設定する必要がある。
また、内部割込処理を受理する場合には、割込処理ルーチン内で、内部割込受理命令ｉ
ｉａｃｋを実行する。
一方、内部割込処理を終了する場合には、内部割込受理命令ｉｉａｃｋを実行して内部
割り込みを受理したことを通知した後、内部割込許可フラグＩＩＥを許可に設定すること
で内部割り込み処理を終了したことを通知する。
また、内部割込み禁止の場合、すなわち、内部割込み系命令の対象となるＣＰＵが内部
割り込みを禁止していた場合には、コプロセッサ１０２は、内部割り込みの発生はさせず
に命令発行元のＣＰＵに対してａｃｋ信号を返す。また、コプロセッサ１０２は、不正操
作検出レジスタｉｏｄｒの内部割込失敗フラグＩＦをセットする。
また、いずれかのＣＰＵに対して割込信号ＩＮＴを出力中の場合は、内部割り込みをマ
スクするようにされている。
【００７０】
［９．４］割込処理におけるその他の動作
本実施形態においては、割込処理において、コプロセッサ命令実行中はＮＭＩを発生さ
せないようにしている。
また、割り込み処理割り当てと、コプロセッサ命令実行と、は同時に行わないようして
いる。
【００７１】
［１０］コプロセッサ処理要求
次にコプロセッサ処理要求について説明する。
各ＣＰＵ１０１Ａ〜１０１Ｄからのコプロセッサ処理要求が競合した場合、コプロセッ
サ１０２は、次の優先度条件（１）〜（３）に従って要求を受理するＣＰＵ１０１Ａ〜１
０１Ｄを決定する。
（１）  ハードウェアセマフォを獲得している
（２）  実行中のタスク／割り込み処理の優先度が高い
（３）  ＣＰＵＩＤの値が小さい
コプロセッサ処理要求が受理されたＣＰＵ１０１Ａ〜１０１Ｄに対しては、コプロセッ
サ１０２は、所定のポート（ｃ３３  ｃｏ  ａｃｋポート）を用いて終了通知を行う。Ｃ
ＰＵ間で処理要求が競合して要求が受理されなかったＣＰＵの要求はそのまま保留する。
現在のコプロセッサ処理が終了後、コプロセッサ１０２は、再度優先度条件に従って要求
を受理するＣＰＵ１０１Ａ〜１０１Ｄを決定する。
【００７２】
［１１］ハードウェアセマフォ
本実施形態では、上述したように、コプロセッサ１０２は、ＣＰＵ１０１Ａ〜１０１Ｄ
間で共有される資源（リソース）に対する排他的なアクセスを実現するための手段として
、ハードウェアセマフォを提供している。
本実施形態では、一般的にソフトウェアで実現されるセマフォをハードウェアで実現さ
せている。この理由は、マルチプロセッサ化に伴って時間的同時にセマフォの獲得要求が
発生する可能性があり、ソフトウェアでセマフォを実現した場合には、処理能力的に対応
できない場合が生じるのを防止するためである。
上述したように、本実施形態のコプロセッサ１０２は、８つ（０番〜７番）のハードウ
ェアセマフォを備えており、ハードウェアセマフォの獲得と解放にはそれぞれ専用の命令
を実行する。
【００７３】
［１１．１］ハードウェアセマフォの獲得
ハードウェアセマフォを各ＣＰＵ１０１Ａ〜１０１Ｄが獲得するには、ｔａｓ命令を実
行する。ｔａｓ命令は引数に獲得したいハードウェアセマフォ番号を指定する。たとえば
ハードウェアセマフォの３番を獲得したい時の操作は次のようになる。
＃ｍａｃｒｏ  ＴＡＳ  ＄１
ｌｄ．ｃ  １４、  ＄１
＃ｅｎｄｍ
ｌｄ．ｗ  ％ｒ０、  ０ｘ０３    ；レジスタｒ０＝３
ｔａｓ  ％ｒ０                  ；ＨＷセマフォ３番の獲得要求
ｔａｓ命令を実行したら、実際に要求したハードウェアセマフォが獲得できたか否かを
調べる必要がある。ｔａｓ命令の実行結果は自ＣＰＵのＣＰＵステータスレジスタｃｓｒ
に反映されるので、それを読み出す。
操作は、たとえば次のようになる。最後のｃｍｐ命令の結果が０ならばハードウェアセ
マフォの獲得失敗、０でなければ獲得成功を示す。
＃ｍａｃｒｏ  ＬＤ．ＰＣＳＲ  ＄１
ｌｄ．ｃ  ＄１、  ５
＃ｅｎｄｍ
ＬＤ．ＰＣＳＲ  ％ｒ１            ；ＣＰＵステータスレジスタｃｓｒの値を
レジスタｒ１に代入
ｌｄ．ｗ  ％ｒ２、  ０ｘ０８      ；ビット３が１のマスクパターン生成
ａｎｄ  ％ｒ１、  ％ｒ２          ；ｒ１＝ｒ１＆０ｘ０００００００８
ｃｍｐ  ％ｒ１、  ０ｘ００        ；ｒ１−０ｘ００００００００
コプロセッサ１０２は、引数で指定されたレジスタの下位３ビットのみを検査するので
、ハードウェアセマフォの番号として０〜７以外の数を指定した場合、エラーにはならず
下位３ビットのみが有効になる。
【００７４】
［１１．２］ハードウェアセマフォの解放
獲得しているハードウェアセマフォを解放するには、ｆｒｓ命令を実行する。ｆｒｓ命
令は、ｔａｓ命令と同様、解放したいハードウェアセマフォ番号を指定する。たとえばハ
ードウェアセマフォの４  番を解放する時の操作は次のようになる。
＃ｍａｃｒｏ  ＦＲＳ  ＄１
ｌｄ．ｃ  １５、  ＄１
＃ｅｎｄｍ
ｌｄ．ｗ  ％ｒ０、  ０ｘ０４      ；レジスタｒ０＝４
ＦＲＳ  ％ｒ０                    ；ＨＷセマフォ４番を解放
なお、自タスク処理、ひいては、自ＣＰＵで獲得していないハードウェアセマフォ番号
を指定してｆｒｓ命令を実行した場合、該当するハードウェアセマフォが未使用であると
ないとに関わらずエラーとなり、不正操作検出レジスタｉｏｄｒのハードウェアセマフォ
不正解放フラグ（ＨＲ）がセットされる。対象となったハードウェアセマフォが他のタス
ク処理（他ＣＰＵ）で獲得されていた場合は、解放されずにそのままの状態を維持する。
【００７５】
［１１．３］ハードウェアセマフォにおける制限
本実施形態では、ハードウェアセマフォに対して次の制限を設けている。
（１）ハードウェアセマフォを使用できるのは、ＯＳタスクのみである。
なお、コプロセッサ１０２側では、タスクの種類（ＯＳタスクであるか否か）を判断で
きないので、ソフトウェア設計者の責任でＯＳタスクのみが使用できる仕様とする必要が
ある。
（２）ハードウェアセマフォ獲得時は、セマフォ番号を指定し、獲得確認は、フラグで
行うようにしている。
【００７６】
［１１．４］ハードウェアセマフォの予約
上述したように、ハードウェアセマフォの獲得にはコプロセッサ１０２に対し、処理要
求（この場合ｔａｓ命令）を行うが、上述したように、コプロセッサ１０２は、その時点
における各条件の総合的な優先度が最も高いタスク処理を実行しているＣＰＵからの処理
要求を受け付けることとなっている。このため、ハードウェアセマフォの獲得は、各ＣＰ
Ｕ１０１Ａ〜１０１Ｄがｔａｓ命令を実行するタイミングによって左右されてしまい、場
合によっては、ハードウェアセマフォを獲得できないために長時間にわたって処理を先に
進めることができなくなる可能性がある。
【００７７】
そこで、本実施形態においては、各ハードウェアセマフォに対して獲得要求を行ったと
き、対象となるセマフォが他のＣＰＵによって既に獲得されている場合、獲得要求を行っ
たタスク処理（ＣＰＵ）は、このハードウェアセマフォを「予約」する。
そして、当該タスク処理は、休止状態に遷移され、当該タスク処理を実行していたＣＰ
Ｕは解放されて他のタスク処理が実行可能な状態となる。これにより、タスク処理が他タ
スクのハードウェアセマフォの解放をポーリングしながら待つことに起因するＣＰＵの利
用効率の低下を抑制することができる。
さらに、このハードウェアセマフォが解放された際に、その時点での優先度に関わらず
、先に予約していたタスク処理がそのハードウェアセマフォを獲得することとなる。
これによりハードウェアセマフォは、複数のタスク処理から獲得要求があっても要求が
早かった順に獲得されるので、偶然タイミング良く後から要求が発生したタスク処理（Ｃ
ＰＵ）にハードウェアセマフォが獲得され、要求した時期が早かったにも関わらずハード
ウェアセマフォをいつまでも獲得できないタスク処理が現れるという状況を防ぐことがで
きるようになっている。
【００７８】
［１１．４．１］ハードウェアセマフォ予約動作
次にハードウェアセマフォの予約動作について説明する。
ハードウェアセマフォを獲得しようとしてｔａｓ命令を実行したが、獲得対象のハード
ウェアセマフォが既に他のタスク処理（ＣＰＵ）に獲得されていた場合には、ハードウェ
アセマフォを獲得できなかったタスクを獲得対象ハードウェアセマフォの予約リスト（セ
マフォ予約ブロック部１４１）に登録する。なお、同じタスク処理の二重登録を防ぐため
、以下に示す条件（１）、（２）ではリストへの登録は行わない。
（１）既に同じタスク処理が登録されている場合
（２）獲得対象となるハードウェアセマフォを現在既に獲得している場合
【００７９】
［１１．４．２］ハードウェアセマフォ移譲動作
タスク処理からの予約があるハードウェアセマフォを現在獲得中のタスク処理（ＣＰＵ
）がｆｒｓ命令によってハードウェアセマフォを解放した場合、解放と同時に予約リスト
の先頭にある休止状態の他のタスク処理にハードウェアセマフォを獲得させる。
この時、ＣＰＵステータスレジスタｃｓｒのＴＡＳＲｅｓｕｌｔフィールドを適切に更
新する。すなわち、ｆｒｓ命令を実行したＣＰＵ（ハードウェアセマフォを解放したＣＰ
Ｕ）のＣＰＵステータスレジスタｃｓｒの対象ハードウェアセマフォのビットフィールド
をクリアし、予約リストの先頭にあってハードウェアセマフォを新たに獲得したタスク処
理を実行するＣＰＵのＣＰＵステータスレジスタｃｓｒの対象ハードウェアセマフォのビ
ットフィールドをセットする。なお、ハードウェアセマフォに対する不正解放操作を行っ
た場合は移譲動作を行わないことはもちろんである。
【００８０】
［１２］デバッグ
次にデバッグについて説明する。
本実施形態のマルチプロセッサシステムである情報処理システム１００では、全ＣＰＵ
１０１Ａ〜１０１Ｄが非デバッグモードにある状態から、任意のＣＰＵがデバッグモード
へ遷移した場合、全ＣＰＵ１０１Ａ〜１０１Ｄがデバッグモードへ遷移することが要求さ
れる仕様としている。
このため、本実施形態のコプロセッサ１０２においては、ハードウェアデバッグモード
およびソフトウエアデバッグモードの２つのデバッグモードを設けている。
この二つのデバッグモードの切り替えは、外部割込ステータスレジスタｉｓｒのハード
ウェアデバッグモードフラグＨＤの設定によって行っている。
ハードウェアデバッグモードでは、任意のＣＰＵがデバッグモードへ遷移したことをコ
プロセッサが検出すると、直ちに全ＣＰＵ１０１Ａ〜１０１Ｄに対してデバッグ割込みを
発生させる。
【００８１】
ソフトウエアデバッグモードでは、任意のＣＰＵがデバッグモードへ遷移してもハード
ウェア的なサポートは行わず、最初にデバッグモードへ遷移したＣＰＵが、デバッグ処理
ルーチン内でｆｂｒｋ命令（デバッグ割込発生命令）を発行することで、他のＣＰＵをデ
バッグモードへ遷移させる。
しかし、デバッグモードにおいて、たとえば、ステップ実行時のように制御の複雑さが
想定される動作状態においては、ハードウェアデバッグモードのみを用いることにしてい
る。
［１２．１］デバッグ割り込みの受理通知
本実施形態では、デバッグ割り込みによって、ＣＰＵ１０１Ａ〜１０１Ｄのｃ３３＿ｃ
ｐｕ＿ｄｂｇｍｄ信号がアクティブになる。コプロセッサではデバッグ割り込み発生後、
各ＣＰＵ１０１Ａ〜１０１Ｄから出力されるこのｃ３３＿ｃｐｕ＿ｄｂｇｍｄ信号をモニ
タし、非アクティブからアクティブへの変化を検出して、デバッグ割り込みの受理通知と
みなしている。
【００８２】
［１２．２］デバッグ割り込みの終了通知
ＣＰＵ１０１Ａ〜１０１Ｄが、デバッグモードから非デバッグモードへ遷移する際には
ｒｅｔｄ命令を実行する。このｒｅｔｄ命令の実行によってＣＰＵ内部の状態がデバッグ
モードから復帰し、ｃ３３＿ｃｐｕ＿ｄｂｇｍｄ信号に反映される。コプロセッサ１０２
では、このｃ３３＿ｃｐｕ＿ｄｂｇｍｄ信号がアクティブから非アクティブへ変化するこ
とを検出し、デバッグ割り込みの終了通知とみなしている。
［１２．３］デバッグモード時におけるコプロセッサの動作
本実施形態では、ハードウェアデバッグモード時に、任意のＣＰＵがデバッグモードに
ある時、コプロセッサ１０２もデバッグモードとなるようにしている。この場合、コプロ
セッサ１０２は、リセットとコプロセッサ処理要求以外のトラップ要因を全て受け付けな
い。同様に、全ＣＰＵ１０１Ａ〜１０１Ｄがデバッグモードから復帰することで、コプロ
セッサ１０２もデバッグモードから復帰する。
【００８３】
［１２．４］コプロセッサのデバッグ割り込み信号制御
任意のＣＰＵ１０１Ａ〜１０１Ｄがデバッグモードへ遷移した後、コプロセッサ１０２
が発生させるデバッグ割り込みによって全ＣＰＵ１０１Ａ〜１０１Ｄは、デバッグモード
へ遷移する。しかしデバッグモードからの復帰タイミングは、各ＣＰＵ１０１Ａ〜１０１
Ｄによって差異があるため、連続してデバッグ割り込みが発生するような場合（たとえば
ステップ実行）には、どのＣＰＵがデバッグ割込要因として機能しているのか判断がつか
なくなる。
そこで、本実施形態のコプロセッサ１０２では次の手順（１）〜（７）で対応するよう
にしている。
（１）  全ＣＰＵ１０１Ａ〜１０１Ｄが非デバッグモードである状態から任意のＣＰ
Ｕがデバッグモードへ遷移する。
（２）  コプロセッサ１０２は、最初にデバッグモードへ遷移したいずれかのＣＰＵ
のＣＰＵＩＤを記録する。
（３）  コプロセッサ１０２は、全ＣＰＵ１０１Ａ〜１０１Ｄに対してデバッグ割り
込みを発生させる。
（４）  全ＣＰＵ１０１Ａ〜１０１Ｄがデバッグモードへ遷移完了する。
（５）  コプロセッサ１０２は、全ＣＰＵ１０１Ａ〜１０１Ｄに対するデバッグ割り
込み要求を取り下げる。
（６）  （２）の処理において、ＣＰＵＩＤが記録されたＣＰＵがデバッグモードか
ら復帰する。
（７）  コプロセッサ１０２は、新たなデバッグ割り込みを受け付ける。
【００８４】
コプロセッサ１０２が、（５）の処理において、全ＣＰＵ１０１Ａ〜１０１Ｄへのデバ
ッグ割り込み要求を取り下げた後、各ＣＰＵ１０１Ａ〜１０１Ｄは、デバッグ処理ルーチ
ンを終えてデバッグモードから復帰する。デバッグ割り込み発生要因となったＣＰＵ以外
のＣＰＵがデバッグモードから復帰した後、ｂｒｋ命令を実行することにより新たなデバ
ッグ割り込み要因になり得る。コプロセッサ１０２は、最初のデバッグ割り込み要因とな
ったＣＰＵがデバッグモードから復帰するまで、この新たなデバッグ割り込み要因による
全ＣＰＵに対するデバッグ割り込み要求を保留することとなる。
【００８５】
図２４は、デバッグ割込要求の保留状態の説明図である。
具体的には、図２３に示すように、コプロセッサ１０２は、時刻ｔ１においてＣＰＵ１
０１Ｄ（ＣＰＵ３）が最初のデバッグ割り込み要因となり、時刻ｔ２においてデバッグモ
ードに移行した場合に、ＣＰＵ１０１Ｄ（ＣＰＵ３）が時刻ｔ３においてデバッグモード
から復帰したとしても、すべてのＣＰＵが時刻ｔ４においてデバッグモードから復帰する
までデバッグ割り込み要求を保留し、時刻ｔ３から時刻ｔ４の間がデバッグ割り込み保留
期間となる。
［１２．５］デバッグモードにおけるその他の動作
同時に複数のｂｒｋ命令実行がなされた場合には、ソフトウェアがハードウェアセマフ
ォを利用して同時にひとつのｂｒｋ命令実行を行うようにして、競合を防止している。
【００８６】
［１３］コプロセッサ命令
次に本実施形態のコプロセッサ１０２において定義している全命令について説明する。
［１３．１］ストア系命令
まず、ストア系命令から説明する。
［１３．１．１］ｓｔ．ｉｓｒ  ％ｒｓ
本命令の機能は、外部割込ステータスレジスタｉｓｒへの値のストア（格納）を行うも
のであり、クロックサイクルは、１サイクルである。
本命令の実行により、％ｒｓで指定したレジスタの値を外部割込ステータスレジスタｉ
ｓｒへストアする。
具体的使用例は、以下の通りである。
＃ｍａｃｒｏ  ＳＴ．ＩＳＲ  ＄１
ｌｄ．ｃ  ０、  ＄１
＃ｅｎｄｍ
ＳＴ．ＩＳＲ  ％ｒ０  ；コプロセッサ  ｉｓｒ  ＜−  ｒ０
【００８７】
［１３．１．２］ｓｔ．ｓｔｉｓｒ  ％ｒｓ
本命令の機能は、自ＣＰＵ以外のタスク／割込ステータスレジスタｔｉｓｒへのストア
を行うものであり、クロックサイクルは、１サイクルである。
本命令の実行により、自ＣＰＵのＣＰＵステータスレジスタｃｓｒのレジスタ操作対象
ＣＰＵＩＤフィールドＨＣＩＤで指定したＣＰＵのタスク／割込ステータスレジスタｔｉ
ｓｒに対して、％ｒｓで指定したレジスタの値をストアする。ＨＣＩＤが自ＣＰＵＩＤと
同じ場合、後述するｓｔ．ｐｔｉｓｒ命令と動作は等価になる。
またタスク／割込ステータスレジスタｔｉｓｒの未定義ビットフィールドであるビット
１５、１４を制御ビットとして用いることで、ＩＩＥフラグのみの更新を行うことが可能
である（内部割込許可フラグＩＩＥ以外のビットフィールドには影響を及ぼさない）。こ
れは、％ｒｓで指定したレジスタ値のビット１５、１４を設定することで実現できる。
ｂｉｔ１５      ｂｉｔ１４      動作
０              ０          全ビット更新
０              １          ＩＩＥのみ０にセット（内部割り込み禁止）
１              ０          ＩＩＥのみ１にセット（内部割り込み許可）
１              １          全ビット更新
【００８８】
ここで、制御ビットを用いた操作を行う必要があるのは、多重割込処理から復帰時にソ
フトウェアが割込／タスク状態フラグＩ／Ｔ、優先度レベルフィールドＰＲ、多重割込フ
ラグＩＮを更新する際である。新規外部割り込み処理の割り当て等によってこれらのフィ
ールドがコプロセッサ１０２によって自動更新されるのを防ぐために、制御ビットを用い
て内部割込許可フラグＩＩＥのみを禁止に設定する。
具体的使用例は、以下の通りである。
＃ｍａｃｒｏ  ＬＤ．ＰＣＳＲ  ＄１
ｌｄ．ｃ  ＄１、  ５
ＳＴ．ＳＴＩＳＲ  ＄２
ｌｄ．ｃ  ２、  ＄２
＃ｅｎｄｍ
ＬＤ．ＰＣＳＲ  ％ｒ０        ；コプロセッサ  ｒ０＜−（自ＣＰＵの）ｃｓｒ
ｌｄ．ｗ  ％ｒ１、  ０ｘ０２  ；ｒ１＝０ｘ０００００００２
ａｎｄ  ％ｒ１、  ％ｒ０          ；ｒ１＝ｒ１＆ｒ０
ＳＴ．ＳＴＩＳＲ  ％ｒ０          ；ｔｉｓｒ  ＜−  ｒ０
【００８９】
［１３．１．３］ｓｔ．ｓｃｓｒ  ％ｒｓ
本命令の機能は、自ＣＰＵ以外のＣＰＵステータスレジスタｃｓｒへのストアを行うも
のであり、クロックサイクルは、１サイクルである。
本命令の実行により、自ＣＰＵのＣＰＵステータスレジスタｃｓｒのレジスタ操作対象
ＣＰＵＩＤフィールドＨＣＩＤで指定したＣＰＵのＣＰＵステータスレジスタｃｓｒに対
して、％ｒｓで指定したレジスタの値をストアする。ＣＰＵＩＤフィールドＨＣＩＤが自
ＣＰＵＩＤと同じ場合、ｓｔ．ｐｃｓｒ命令と動作は等価になる。
具体的使用例は、以下の通りである。
＃ｍａｃｒｏ  ＬＤ．ＰＣＳＲ  ＄１
ｌｄ．ｃ  ＄１、  ５
ＳＴ．ＳＣＳＲ  ＄２
ｌｄ．ｃ  ３、  ＄２
＃ｅｎｄｍ
ＬＤ．ＰＣＳＲ  ％ｒ０        ；ｒ０  ＜−  （自ＣＰＵの）ｃｓｒ
ｌｄ．ｗ  ％ｒ１、  ０ｘ０２  ；ｒ１＝０ｘ０００００００２
ａｎｄ  ％ｒ１、  ％ｒ０      ；ｒ１＝ｒ１＆ｒ０
ＳＴ．ＳＣＳＲ  ％ｒ０        ；ｃｓｒ２  ＜−  ｒ０
【００９０】
［１３．１．４］ｓｔ．ｐｔｉｓｒ  ％ｒｓ
本命令の機能は、自ＣＰＵのタスク／割り込みステータスレジスタ（ｔｉｓｒ）  への
ストアを行うものであり、クロックサイクルは、１サイクルである。
本命令の実行により、自ＣＰＵのタスク／割込ステータスレジスタｔｉｓｒに対して、
％ｒｓ  で指定したレジスタの値をストアする。
またタスク／割込ステータスレジスタｔｉｓｒの未定義ビットフィールドであるビット
１５、１４を制御ビットとして用いることで、内部割込許可フラグＩＩＥのみの更新を行
うことが可能である（内部割込許可フラグＩＩＥ以外のビットフィールドには影響を及ぼ
さない）。これは％ｒｓで指定したレジスタ値のビット１５、１４を設定することで実現
できる。
ｂｉｔ１５      ｂｉｔ１４      動作
０              ０          全ビット更新
０              １          ＩＩＥのみ０にセット（内部割り込み禁止）
１              ０          ＩＩＥのみ１にセット（内部割り込み許可）
１              １          全ビット更新
【００９１】
制御ビットを用いた操作を行う必要があるのは、多重割り込み処理から復帰時にソフト
ウェアが割り込み／タスク状態フラグＩ／Ｔ、優先度レベルフィールドＰＲ、多重割り込
みフラグＩＮを更新する際である。新規外部割り込み処理の割り当て等によってこれらの
フィールドがコプロセッサによって自動更新されるのを防ぐために、制御ビットを用いて
ＩＩＥ  のみを禁止に設定する。
具体的使用例は、以下の通りである。
＃ｍａｃｒｏ  ＳＴ．ＰＴＩＳＲ  ＄１
ｌｄ．ｃ  ４、  ＄１
＃ｅｎｄｍ
ＳＴ．ＰＴＩＳＲ  ％ｒ０      ；コプロセッサ  ｔｉｓｒ  ＜−  ｒ０
【００９２】
［１３．１．５］ｓｔ．ｐｃｓｒ  ％ｒｓ
本命令の機能は、自ＣＰＵのＣＰＵステータスレジスタｃｓｒへのストアを行うもので
あり、クロックサイクルは、１サイクルである。
本命令の実行により、自ＣＰＵのＣＰＵステータスレジスタｃｓｒに対して、％ｒｓで
指定したレジスタの値をストアする。
具体的使用例は、以下の通りである。
＃ｍａｃｒｏ  ＳＴ．ＰＣＳＲ  ＄１
ｌｄ．ｃ  ５、  ＄１
＃ｅｎｄｍ
ｓｔ．ｐｃｓｒ  ％ｒ０  ／
【００９３】
［１３．１．６］ｓｔ．ｉｏｄｒ  ％ｒｓ
本命令の機能は、不正操作検出レジスタｉｏｄｒへのストアを行うものであり、クロッ
クサイクルは、１サイクルである。
本命令の実行により、不正操作検出レジスタｉｏｄｒに対して、％ｒｓで指定したレジ
スタの値をストアする。検出フラグをクリアする際に使用する。
具体的使用例は、以下の通りである。
＃ｍａｃｒｏ  ＳＴ．ＩＯＤＲ  ＄１
ｌｄ．ｃ  ８、  ＄１
＃ｅｎｄｍ
ＳＴ．ＩＯＤＲ  ％ｒ０        ；コプロセッサ  ｉｏｄｒ  ＜−  ｒ０
【００９４】
［１３．１．７］ｃｓｗ  ％ｒｓ
本命令の機能は、コンテキストスイッチ内部割り込みを発生させるものであり、クロッ
クサイクルは、２サイクルである。
本命令の実行により、％ｒｓで指定した番号を持つＣＰＵに対して、コンテキストスイ
ッチ内部割り込みを発生させる。％ｒｓで指定したＣＰＵがｔｉｓｒで内部割込許可フラ
グＩＩＥを禁止に設定していた場合は、不正操作検出レジスタｉｏｄｒの内部割込失敗フ
ラグＩＦがセットされる。
具体的使用例は、以下の通りである。
＃ｍａｃｒｏ  ＣＳＷ  ＄１
ｌｄ．ｃ  １１、  ＄１
＃ｅｎｄｍ
ｌｄ．ｗ  ％ｒ１、  ０ｘ０２      ；対象ＣＰＵを２番に設定
ＣＳＷ  ％ｒ１                    ；コプロセッサ  コンテキストスイッチ内部割
り込み発生
【００９５】
［１３．１．８］ｉｖｋ  ％ｒｓ
本命令の機能は、ＣＰＵ起動内部割り込みを発生させるものであり、クロックサイクル
は、２サイクルである。
本命令の実行により、％ｒｓで指定した番号を持つＣＰＵに対して、ＣＰＵ起動内部割
り込みを発生させる。％ｒｓで指定したＣＰＵがｔｉｓｒで内部割込許可フラグＩＩＥを
禁止に設定していた場合は、不正操作検出レジスタｉｏｄｒの内部割込失敗フラグＩＦが
セットされる。
既に非ＨＡＬＴ状態にあるＣＰＵに対してｉｖｋ命令を実行しても、効果はない（但し
内部割込失敗フラグＩＦはセットされない）。
【００９６】
コプロセッサは本命令実行後規定サイクル後に、対象ＣＰＵへのクロック供給を開始さ
せるかクロックイネーブル信号をアクティブにする。
具体的使用例は、以下の通りである。
＃ｍａｃｒｏ  ＩＶＫ  ＄１
ｌｄ．ｃ  １２、  ＄１
＃ｅｎｄｍ
ｌｄ．ｗ  ％ｒ１、  ０ｘ０２      ；  対象ＣＰＵを２番に設定
ＩＶＫ  ％ｒ１                    ；コプロセッサ  ＣＰＵ起動内部割り込み発生
【００９７】
［１３．１．９］ｈａｌｔｃｐｕ  ％ｒｓ
本命令の機能は、ＨＡＬＴ状態化内部割り込みを発生させるものであり、クロックサイ
クルは、２サイクルである。
本命令の実行により、％ｒｓで指定した番号を持つＣＰＵに対して、ＣＰＵＨＡＬＴ状
態化内部割り込みを発生させる。％ｒｓで指定したＣＰＵがｔｉｓｒで内部割り込み許可
フラグＩＩＥを禁止に設定していた場合は、不正操作検出レジスタｉｏｄｒの内部割込失
敗フラグＩＦがセットされる。
既にＨＡＬＴ状態にあるＣＰＵに対してｈａｌｔｃｐｕ命令を実行しても、効果はない
（但し、内部割失敗フラグＩＦはセットされない）。
【００９８】
コプロセッサ１０２は、本命令実行後規定サイクル後に、対象ＣＰＵへのクロック供給
を停止させるかクロックイネーブル信号を非アクティブにする。
具体的使用例は、以下の通りである。
＃ｍａｃｒｏ  ＨＡＬＴＣＰＵ＄１
ｌｄ．ｃ  １３、  ＄１
＃ｅｎｄｍ
ｌｄ．ｗ  ％ｒ１、  ０ｘ０２      ；対象ＣＰＵを２番に設定
ＨＡＬＴＣＰＵ％ｒ１              ；コプロセッサ  ＣＰＵ起動内部割り込み発生
【００９９】
［１３．１．１０］ｔａｓ  ％ｒｓ
本命令の機能は、ハードウェアセマフォの獲得要求を行うものであり、クロックサイク
ルは、２サイクルである。
本命令の実行により、％ｒｓ  で指定した番号のハードウェアセマフォの獲得要求を行
う。より具体的には、指定されたハードウェアセマフォが既に他のＣＰＵによって獲得さ
れているか否かを確認し、その結果どのＣＰＵからも獲得されていない空き状態であれば
獲得する。本命令の実行によりハードウェアセマフォの獲得に成功した場合、自ＣＰＵス
テータスレジスタｃｓｒのハードウェアセマフォ獲得フィールドＴＡＳＲｅｓｕｌｔのう
ち、指定したハードウェアセマフォ番号に該当するビットがセットされる。
【０１００】
したがって本命令の実行が指定されたハードウェアセマフォの獲得を保証するわけでは
ないので、本命令実行後に自ＣＰＵステータスレジスタｃｓｒのハードウェアセマフォ獲
得フィールドＴＡＳＲｅｓｕｌｔを参照し、指定されたハードウェアセマフォが獲得でき
たか否かを調べる必要がある。
具体的使用例は、以下の通りである。
＃ｍａｃｒｏ  ＴＡＳ  ＄１
ｌｄ．ｃ  １４、  ＄１
ＬＤ．ＰＣＳＲ  ＄２
ｌｄ．ｃ  ＄２、  ５
＃ｅｎｄｍ
ｌｄ．ｗ  ％ｒ１、  ０ｘ０２      ；ｒ１＝０ｘ０００００００２
ＴＡＳ  ％ｒ１                    ；コプロセッサ  ハードウェアセマフォ２番を
獲得要求
ＬＤ．ＰＣＳＲ  ％ｒ２            ；自ＣＰＵのｃｓｒをロード
【０１０１】
［１３．１．１１］ｆｒｓ  ％ｒｓ
本命令の機能は、獲得しているハードウェアセマフォの解放を行うものであり、クロッ
クサイクルは、４サイクルである。
本命令の実行により、％ｒｓで指定した番号のハードウェアセマフォの解放を行う。本
命令の実行により自ＣＰＵステータスレジスタ（ｃｓｒ）のハードウェアセマフォ獲得フ
ィールド（ＴＡＳＲｅｓｕｌｔ）のうち、指定したハードウェアセマフォ番号に該当する
ビットがクリアされる。
自ＣＰＵで獲得していないハードウェアセマフォ番号を指定して本命令を実行した場合
エラーとなり、不正操作検出レジスタｉｏｄｒのハードウェアセマフォの不正解放フラグ
ＨＲがセットされる。
【０１０２】
この場合、指定されたハードウェアセマフォの解放は行われない。このエラーは他タス
ク処理（ＣＰＵ）が獲得しているハードウェアセマフォの解放はもちろん、いずれのタス
ク処理（ＣＰＵ）からも獲得されていない空き状態のハードウェアセマフォを解放した場
合にも適用される。
具体的使用例は、以下の通りである。
＃ｍａｃｒｏ  ＦＲＳ  ＄１
ｌｄ．ｃ  １５、  ＄１
＃ｅｎｄｍ
ｌｄ．ｗ  ％ｒ１、  ０ｘ０２      ；  ｒ１＝０ｘ０００００００２
ＦＲＳ  ％ｒ１                    ；コプロセッサ  ハードウェアセマフォ２番を
解放
【０１０３】
［１３．２］ロード系命令
次にロード系命令について説明する。
［１３．２．１］ｌｄ．ｉｓｒ  ％ｒｄ
本命令の機能は、外部割込ステータスレジスタｉｓｒのロードを行うものであり、クロ
ックサイクルは、１サイクルである。
本命令の実行により、％ｒｄで指定したレジスタに外部割込ステータスレジスタｉｓｒ
の値をロードする。
具体的使用例は以下の通りである。
＃ｍａｃｒｏ  ＬＤ．ＩＳＲ  ＄１
ｌｄ．ｃ  ＄１、  ０
＃ｅｎｄｍ
ＬＤ．ＩＳＲ  ％ｒ０          ；コプロセッサ  ｒ０  ＜−  ｉｓｒ
【０１０４】
［１３．２．２］ｌｄ．ｈｓｓｒ  ％ｒｄ
本命令の機能は、ハードウェアセマフォステータスレジスタｈｓｓｒのロードを行うも
のであり、クロックサイクルは、１サイクルである。
本命令の実行により、％ｒｄで指定したレジスタにハードウェアセマフォステータスレ
ジスタｈｓｓｒの値をロードする。
具体的使用例は以下の通りである。
＃ｍａｃｒｏ  ＬＤ．ＨＳＳＲ  ＄１
ｌｄ．ｃ  ＄１、  １
＃ｅｎｄｍ
ＬＤ．ＨＳＳＲ  ％ｒ０          ；コプロセッサ  ｒ０  ＜−  ｈｓｓｒ
【０１０５】
［１３．２．３］ｌｄ．ｓｔｉｓｒ  ％ｒｄ
本命令の機能は、自ＣＰＵ以外のタスク／割込ステータスレジスタｔｉｓｒのロードを
行うものであり、クロックサイクルは１サイクルである。
本命令の実行により、自ＣＰＵのＣＰＵステータスレジスタｃｓｒのレジスタ操作対象
ＣＰＵＩＤフィールドＨＣＩＤで指定したＣＰＵのタスク／割込ステータスレジスタｔｉ
ｓｒを、％ｒｄで指定したレジスタにロードする。ＨＣＩＤが自ＣＰＵＩＤと同じ場合、
ｌｄ．ｐｔｉｓｒ命令と動作は等価になる。
具体的使用例は以下の通りである。
＃ｍａｃｒｏ  ＬＤ．ＳＴＩＳＲ  ＄１
ｌｄ．ｃ  ＄１、  ２
＃ｅｎｄｍ
ＬＤ．ＳＴＩＳＲ  ％ｒ０          ；コプロセッサ  ｒ０  ＜−  ｔｉｓｒ
【０１０６】
［１３．２．４］ｌｄ．ｓｃｓｒ  ％ｒｄ
本命令の機能は、自ＣＰＵ以外のタスク／割込ステータスレジスタｔｉｓｒのロードを
行うものであり、クロックサイクルは１サイクルである。
本命令の実行により、自ＣＰＵのＣＰＵステータスレジスタｃｓｒのレジスタ操作対象
ＣＰＵＩＤフィールドＨＣＩＤで指定したＣＰＵのＣＰＵステータスレジスタｃｓｒを、
％ｒｄで指定したレジスタにロードする。レジスタ操作対象ＣＰＵＩＤフィールドＨＣＩ
Ｄが自ＣＰＵＩＤと同じ場合、ｌｄ．ｐｃｓｒ命令と動作は等価になる。
具体的使用例は、以下の通りである。
＃ｍａｃｒｏ  ＬＤ．ＳＣＳＲ  ＄１
ｌｄ．ｃ  ＄１、  ３
＃ｅｎｄｍ
ＬＤ．ＳＣＳＲ  ％ｒ０          ；コプロセッサ  ｒ０  ＜−  ｃｓｒ
【０１０７】
［１３．２．５］ｌｄ．ｐｔｉｓｒ  ％ｒｄ
本命令の機能は、自ＣＰＵのタスク／割込ステータスレジスタｔｉｓｒのロードを行う
ものであり、クロックサイクルは、１サイクルである。
本命令の実行により、自ＣＰＵのタスク／割込ステータスレジスタｔｉｓｒを、％ｒｄ
で指定したレジスタにロードする。
具体的使用例は、以下の通りである。
＃ｍａｃｒｏ  ＬＤ．ＰＴＩＳＲ  ＄１
ｌｄ．ｃ  ＄１、  ４
＃ｅｎｄｍ
ＬＤ．ＰＴＩＳＲ  ％ｒ０          ；コプロセッサ  ｒ０  ＜−  ｔｉｓｒ
［１３．２．６］ｌｄ．ｐｃｓｒ  ％ｒｄ
本命令の機能は、自ＣＰＵのＣＰＵステータスレジスタｃｓｒのロードを行うものであ
り、クロックサイクルは、１サイクルである。
本命令の実行により、自ＣＰＵのＣＰＵステータスレジスタｃｓｒを、％ｒｄで指定し
たレジスタにロードする。
具体的使用例は、以下の通りである。
＃ｍａｃｒｏ  ＬＤ．ＰＣＳＲ  ＄１
ｌｄ．ｃ  ＄１、  ５
＃ｅｎｄｍ
ＬＤ．ＰＣＳＲ  ％ｒ０          ；コプロセッサ  ｒ０  ＜−  ｐｃｓｒ
【０１０８】
［１３．２．７］ｌｄ．ｉｏｄｒ  ％ｒｄ
本命令の機能は、不正操作検出レジスタｉｏｄｒのロードを行うものであり、クロック
サイクルは、１サイクルである。
本命令の実行により、不正操作検出レジスタｉｏｄｒを、％ｒｄで指定したレジスタに
ロードする。
具体的使用例は、以下の通りである。
＃ｍａｃｒｏ  ＬＤ．ＩＯＤＲ  ＄１
ｌｄ．ｃ  ＄１、  ８
＃ｅｎｄｍ
ＬＤ．ＩＯＤＲ  ％ｒ０          ；コプロセッサ  ｒ０  ＜−  ｉｏｄｒ
【０１０９】
［１３．２．８］ｌｄ．ｐｃｐｕｉｄ  ％ｒｄ
本命令の機能は、自ＣＰＵのＣＰＵＩＤのロードを行うものであり、クロックサイクル
は、１サイクルである。
本命令の実行により、自ＣＰＵのＣＰＵＩＤを％ｒｄで指定したレジスタにロードする
。
具体的使用例は、以下の通りである。
＃ｍａｃｒｏ  ＬＤ．ＰＣＰＵＩＤ  ＄１
ｌｄ．ｃ  ＄１、  ９
＃ｅｎｄｍ
ＬＤ．ＰＣＰＵＩＤ  ％ｒ０        ；コプロセッサ  ｒ０  ＜−  ＣＰＵＩＤ
【０１１０】
［１３．２．９］ｌｄ．ｔｔｃｒ  ％ｒｄ
本命令の機能は、タスクスイッチ対象ＣＰＵＩＤレジスタｔｔｃｒのロードを行うもの
であり、クロックサイクルは、１サイクルである。
本命令の実行により、タスクスイッチ対象ＣＰＵＩＤレジスタｔｔｃｒを、％ｒｄで指
定したレジスタにロードする。
具体的使用例は、以下の通りである。
＃ｍａｃｒｏ  ＬＤ．ＴＴＣＲ  ＄１
ｌｄ．ｃ  ＄１、  １０
＃ｅｎｄｍ
ＬＤ．ＴＴＣＲ  ％ｒ０          ；コプロセッサ  ｒ０  ＜−  ｔｔｃｒ
［１３．２．１０］ｌｄ．ｓｔｔｒ  ％ｒｄ
本命令の機能は、セマフォ移譲タスクＩＤ保持レジスタｓｔｔｒのロードを行うもので
あり、クロックサイクルは、１サイクルである。
本命令の実行により、セマフォ移譲タスクＩＤ保持レジスタｓｔｔｒの値を、％ｒｄで
指定したレジスタにロードする。
具体的使用例は、以下の通りである。
＃ｍａｃｒｏ  ＬＤ．ＳＴＴＲ  ＄１
ｌｄ．ｃ  ＄１、  １０
＃ｅｎｄｍ
ＬＤ．ＳＴＴＲ  ％ｒ０          ；コプロセッサ  ｒ０  ＜−  ｓｔｔｒ
【０１１１】
［１３．３］その他の命令
次にその他の命令について説明する。
［１３．３．１］ｆｂｒｋ
本命令の機能は、デバッグ割り込みを発生させるものであり、クロックサイクルは、１
サイクルである。
本命令の実行により、自ＣＰＵのＣＰＵステータスレジスタｃｓｒのレジスタ操作対象
ＣＰＵＩＤフィールドＨＣＩＤで指定したＣＰＵに対して、デバッグ割り込みを発生させ
る。指定したＣＰＵが既にデバッグモードである場合、コプロセッサ１０２がデバッグ割
り込みをマスクする。
コプロセッサ１０２が任意のＣＰＵに対してデバッグ割り込み信号出力中に、ｆｂｒｋ
命令の実行によって新規にデバッグ割り込み信号出力要求をしてもコプロセッサがマスク
するので、連続してｆｂｒｋ命令を実行する場合は注意が必要である。
具体的使用例は、以下の通りである。
＃ｄｅｆｉｎｅ  ＦＢＲＫ  ｄｏ．ｃ  ０
ＦＢＲＫ                        ；コプロセッサ  デバッグ割込みを発生
【０１１２】
［１３．２．１０］ｉｉａｃｋ
本命令の機能は、内部割り込みを受理したことを通知するものであり、クロックサイク
ルは、１サイクルである。
本命令の実行により、内部割り込みの対象となったＣＰＵがコプロセッサ１０２に対し
て内部割り込みを受理したことを通知する。本命令の実行によって、コプロセッサ１０２
は本命令の実行要求を行ったＣＰＵに対する内部割り込み信号の発生を止める。
コプロセッサ１０２からＣＰＵに対して内部割り込み信号が発生されていない状態で本
命令を実行しても何も起こらない。
具体的使用例は、以下の通りである。
＃ｄｅｆｉｎｅ  ＩＩＡＣＫ  ｄｏ．ｃ  １
ＩＩＡＣＫ  ／／  ［ＣＯＰＲＯ］  内部割り込みを受理
【０１１３】
次に実施形態の動作を説明する。
以下の説明においては、説明の簡略化のため、セマフォの獲得および解放については、
ＣＰＵ１０１Ａにより実行されているタスク処理ＴＡついて考慮するものとし、他のＣＰ
Ｕ１０１Ｂ〜１０１Ｄにより実行されている他のタスク処理ＴＢ〜ＴＤの状態については
、排他制御部１１８が把握しているものとする。この場合において、説明の簡略化のため
、以下の説明においては各ＣＰＵ１０１Ａ〜１０１Ｄが実行しているタスク処理を、タス
ク処理ＴＡ〜ＴＤと表記しているが、実際には、様々な処理状況によりその都度、変化し
ている。
【０１１４】
図２５は、セマフォ獲得時の処理タイミングチャートである。
まず、ＣＰＵ１０１Ａは、自己が処理しているタスク処理（通常タスク処理あるいは外
部割込処理など）において、共有資源の獲得が必要となった場合には、図１１に示したよ
うに、獲得しようとする共有資源に対応するセマフォを特定するためのセマフォＩＤをセ
ットして（ステップＳ１１）、コプロセッサ１０２に対しセマフォ獲得要求を行う（ステ
ップＳ１２）。
これにより、排他制御部１１８のセマフォ操作ブロック１４２は、セマフォレジスタ１
４０を参照し（ステップＳ１３）、ＣＰＵ１０１ＡによりセットされたセマフォＩＤに対
応するセマフォがいずれかのタスク処理ＴＢ〜ＴＤに既に獲得されているか否かを判別す
る（ステップＳ１４）。
【０１１５】
ステップＳ１４の判別において、ＣＰＵ１０１ＡによりセットされたセマフォＩＤに対
応するセマフォがいまだ獲得されていない場合には（ステップＳ１４；Ｎｏ）、いずれの
ＣＰＵで実行されているタスク処理ＴＢ〜ＴＤも当該セマフォを使用していないので、セ
マフォレジスタ１４０の対応するセマフォ獲得中フラグ１４４Ａをセットし（＝“１”）
、セマフォ獲得中タスクＩＤ格納部１４４Ｂに当該タスク処理ＴＡのタスクＩＤで更新す
るセマフォ割当処理を行う（ステップＳ１５）。
次にセットされたタスクＩＤに対応するタスク処理を実行しているＣＰＵのＣＰＵ状態
レジスタ（本例の場合、ＣＰＵ状態レジスタ１３２Ａ）の値をセマフォ獲得状態とする（
ステップＳ１７）。なお、この場合において、上述したように、同時に同一のセマフォの
獲得を要求している他のタスク処理（他のＣＰＵ）が存在するか否かを判別し、他のタス
ク処理が存在する場合には、現在実行中のタスク処理の優先度を比較して、最もタスク処
理の優先度が高いタスク処理のタスクＩＤがセマフォレジスタ１４０のＣＰＵＩＤ格納部
１４４Ｂにセットされ、当該タスク処理を実行しているＣＰＵのＣＰＵ状態レジスタが選
択されることとなる。また同時に他のセマフォの獲得あるいは解放を要求している他のタ
スク処理が存在するか否かを判別し、より処理の優先度が高い他のタスク処理が存在する
場合には、当該優先度が高い他のタスク処理に対応する処理（セマフォ獲得処理あるいは
セマフォ解放処理）が先に行われることとなる。
【０１１６】
これによりタスク処理ＴＡを実行しているＣＰＵ１０１Ａは、自己に対応するＣＰＵ状
態レジスタ１３２Ａを参照して確認を行い（ステップＳ１８）、ＣＰＵ状態レジスタ１３
２Ａ）の値をセマフォ獲得状態となっているか否かを判別する（ステップＳ１９）。
この場合には、ステップＳ１９の判別において、ＣＰＵ１０１Ａは、自己がセマフォを
獲得したことを知ることができるので（ステップＳ１９；Ｙｅｓ）、獲得したセマフォに
対応する共有資源を利用してタスク処理ＴＡを継続して実行することとなる。
【０１１７】
一方、ステップＳ１４の判別において、ＣＰＵ１０１ＡによりセットされたセマフォＩ
Ｄに対応するセマフォ獲得中フラグ１４４Ａが既にセット（＝“１”）状態である場合に
は（ステップＳ１４；Ｙｅｓ）、既に他のタスク処理（他のＣＰＵ）が当該セマフォＩＤ
に対応する共有資源を使用しているので、セマフォ操作ブロック１４２は、セットされた
セマフォＩＤに対応するセマフォ予約キューのセマフォ予約フラグ１４７をセット（＝“
１”）し、対応するセマフォ予約タスクＩＤフィールド１４８にタスクＩＤを格納するセ
マフォ予約処理を行う（ステップＳ１６）。
【０１１８】
次に対応するＣＰＵ状態レジスタ（本例の場合、ＣＰＵ状態レジスタ１３２Ａ）の値を
セマフォ未獲得状態とする（ステップＳ１７）。
これによりＣＰＵ１０１Ａは、自己に対応するＣＰＵ状態レジスタ１３２Ａを参照して
確認を行い（ステップＳ１８）、ＣＰＵ状態レジスタ１３２Ａ）の値をセマフォ獲得状態
となっているか否かを判別する（ステップＳ１９）。
この場合には、ステップＳ１９の判別において、ＣＰＵ１０１Ａは、自己がセマフォの
獲得に失敗したことを知ることができるので（ステップＳ１９；Ｎｏ）、現在実行してい
るタスク処理ＴＡを休止状態に遷移させるべく、タスクスケジューラを呼び出す（ステッ
プＳ２１）。
これにより他のいずれかのＣＰＵ１０１Ｂ〜１０１Ｄで実行されるタスクスケジューラ
は、セマフォの獲得に失敗したタスク処理ＴＡを休止状態に遷移させることとなる。
そして、タスクスケジューラは、今まで実行していたタスク処理ＴＡが休止状態に遷移
した結果、解放されたＣＰＵ１０１Ａに対し、新たなタスク処理を割り当てることとなる
。
【０１１９】
図２６は、共有資源（セマフォ）解放時の処理タイミングチャートである。
まず、ＣＰＵ１０１Ａは、共有資源を利用して自己のタスク処理（通常タスク処理、外
部割込処理など）を行っている場合に、当該共有資源の利用が終了し、解放が必要となっ
た場合には、図１１に示したように、獲得しようとするセマフォを特定するためのセマフ
ォＩＤをセットして（ステップＳ３１）、コプロセッサ１０２に対しセマフォ解放要求を
行う（ステップＳ３２）。
これにより、排他制御部１１８のセマフォ操作ブロック１４２は、セマフォレジスタ１
４０を参照し（ステップＳ３３）、ＣＰＵ１０１ＡによりセットされたセマフォＩＤに対
応するセマフォが当該ＣＰＵ１０１Ａに既に獲得されているか否かを判別する（ステップ
Ｓ３４）。
【０１２０】
ステップＳ３４の判別において、対応するセマフォが当該ＣＰＵ１０１Ａが既に獲得し
ているものではない場合には（ステップＳ３４；Ｎｏ）、不正操作とみなして各レジスタ
の値の更新は行わず、不正操作がなされた旨の通知を行うエラー処理を行って処理を終了
する（ステップＳ３５）。
一方、ステップＳ３４の判別において、ＣＰＵ１０１ＡによりセットされたセマフォＩ
Ｄに対応するセマフォが当該ＣＰＵ１０１Ａに既に獲得されている場合には（ステップＳ
３４；Ｙｅｓ）、セマフォ操作ブロック１４２は、セマフォレジスタ１４０のセマフォ獲
得中フラグ１４４Ａをリセットするセマフォ解放処理を行う（ステップＳ３６）。
【０１２１】
次に対応するＣＰＵ状態レジスタ（本例の場合、ＣＰＵ状態レジスタ１３２Ａ）の値を
セマフォ未獲得状態とする（ステップＳ３７）。なお、この場合において、上述したよう
に、同時にセマフォの獲得あるいは解放を要求している他のＣＰＵが存在するか否かを判
別し、他のＣＰＵが存在する場合には、処理の優先度を比較して、最も処理の優先度が高
いＣＰＵについてセマフォの獲得あるいは解放がなされることとなる。
これによりＣＰＵ１０１Ａは、自己に対応するＣＰＵ状態レジスタ１３２Ａを参照して
状態の確認を行う（ステップＳ３８）。
【０１２２】
状態確認の結果、ＣＰＵ１０１Ａは、自己が獲得していたセマフォの解放に成功した場
合には、通常処理に移行する（ステップＳ３９）。
一方、セマフォ操作ブロック１４２は、解放されたセマフォに対応するセマフォ予約キ
ュー１４５−ｙ（ｙ＝０〜７）を参照し、セマフォ獲得の予約がなされているか否かを判
別する（ステップＳ４０）。
ステップＳ４０の判別において、セマフォ獲得の予約がなされていない場合には（ステ
ップＳ４０；Ｎｏ ）、何も処理を行わずに待機状態となる。
ステップＳ４０の判別において、セマフォ獲得の予約がなされている場合には（ステッ
プＳ４０；Ｙｅｓ）、セマフォ操作ブロック１４２は、当該セマフォ予約キュー１４５−
ｙの先頭に格納されているセマフォ予約タスクＩＤでセマフォ委譲タスクＩＤレジスタｓ
ｔｔｒを更新する（ステップＳ４１）。
続いて、セマフォ操作ブロック１４２は、割込要求発生回路１１５に対してセマフォ委
譲割込要求を行う（ステップＳ４２）。
この場合において、割込要求発生回路１１５によりセマフォ委譲割込処理が割り当てら
れるＣＰＵは、各ＣＰＵが現在実行しているタスク処理のタスク優先度や、その他の条件
に基づいて、割当対象決定回路１１４によって決定される。
この結果、セマフォ委譲割込要求を受理し、セマフォ委譲割込処理が割り当てられたＣ
ＰＵ１０１Ｚ（＝ＣＰＵ１０１Ａ〜ＣＰＵ１０１Ｄのうち，その時点でセマフォ委譲割込
処理を実行するのに最も適切なＣＰＵ）」は、当該セマフォ委譲割込処理ルーチン内でセ
マフォ委譲タスクＩＤレジスタｓｔｔｒの値を読み出し（ステップＳ４３）、タスクスケ
ジューラーを呼び出す（ステップＳ４４）。
これと並行して、割当対象決定回路１１４は、現在各ＣＰＵ１０１Ａ〜１０１Ｄが実行
しているタスク処理のタスク優先度やその他の条件に基づいて、休止状態から復帰させ、
セマフォを獲得させるタスク処理を実際に実行させるＣＰＵをタスクスイッチ対象ＣＰＵ
として決定し、タスクスイッチ対象ＣＰＵに対応するＣＰＵＩＤをタスクスイッチ対象Ｃ
ＰＵＩＤレジスタｔｔｃｒにセットする。
これらの結果、タスクスケジューリング処理を実行するＣＰＵ１０１Ｙ（＝（ＣＰＵ１
０１Ａ〜ＣＰＵ１０１Ｄのうち，その時点でタスクスケジューリング処理を実行するのに
最も適切なＣＰＵ）は、タスクスイッチ対象ＣＰＵＩＤレジスタｔｔｃｒからＣＰＵＩＤ
を読み込み（ステップＳ４５）、タスクスイッチ対象ＣＰＵＩＤレジスタｔｔｃｒが示す
ＣＰＵＩＤに対応するＣＰＵのＣＰＵ状態レジスタのセマフォ取得状態フィールドを予約
していたセマフォを獲得したという値にセットする（ステップＳ４６）。
続いてタスクスケジューラとして機能するＣＰＵ１０１Ｙは、休止状態にあるタスク処
理の中から、対応するタスクＩＤを有するタスク処理を、タスクスイッチ対象ＣＰＵＩＤ
レジスタｔｔｃｒが示すＣＰＵＩＤに対応するＣＰＵに実行させ、当該ＣＰＵのＣＰＵ状
態レジスタのタスクＩＤフィールドを更新するタスク復帰処理を行うこととなる（ステッ
プＳ４７）。
【０１２３】
以上の説明のように、本実施形態によれば、マルチプロセッサを構成する各ＣＰＵ１０
１Ａ〜１０１Ｄに実行されているタスク処理ＴＡ〜ＴＤが共有資源の獲得あるいは解放を
行う場合に、各タスク処理ＴＡ〜ＴＤの処理の優先度に応じて共有資源を割り当てるべき
、あるいは、解放させるべきタスク処理を容易、かつ、迅速に判別することができ、ひい
ては、各タスク処理に対する共有資源の割り当てを効率的、かつ、迅速に行え、共有資源
の割り当て処理に起因する負荷および待合いにより処理効率の低下を抑制して、情報処理
装置全体で効率よく処理を行わせることができる。
さらに共有資源の獲得ができなかったタスク処理については、休止状態として、当該タ
スク処理を実行していたＣＰＵを解放し、他のタスク処理を実行させることができ、各Ｃ
ＰＵの稼働効率、ひいては、情報処理装置全体の処理効率の向上を図ることができる。
【０１２４】
以上の実施形態の説明では、プロセッサ（ＣＰＵ）が４つの場合および共有資源が８つ
の場合にについて説明したが、複数ある場合であれば同様に適用が可能である。
以上の説明においては、上記各機能を実現するための制御プログラムが、予めＲＯＭに
格納する場合について説明したが、制御プログラムを、コンピュータ読取可能な記録媒体
に記録するようにしてもよい。このような構成であれば、コンピュータによってプログラ
ムが記憶媒体から読み取られ、読み取られたプログラムに従ってコンピュータが処理を実
行すると、上記実施形態の画像情報処理装置と同等の作用および効果が得られる。
ここで、記憶媒体とは、ＲＡＭ、ＲＯＭ等の半導体記憶媒体、ＦＤ、ＨＤ等の磁気記憶
型記憶媒体、ＣＤ、ＣＤＶ、ＬＤ、ＤＶＤ等の光学的読取方式記憶媒体、ＭＯ等の磁気記
憶型／光学的読取方式記憶媒体であって、電子的、磁気的、光学的等の読み取り方法のい
かんにかかわらず、コンピュータで読み取り可能な記憶媒体であれば、どのような記憶媒
体であってもよい。
【図面の簡単な説明】
【０１２５】
【図１】実施形態の情報処理装置の概要構成ブロック図である。
【図２】排他制御回路の機能ブロック図である。
【図３】より詳細な情報処理システムの構成ブロック図である。
【図４】コプロセッサの入出力信号の説明図である。
【図５】外部割込ステータスレジスタのビットフォーマットの説明図である。
【図６】ハードウェア（ＨＷ）セマフォステータスレジスタのビットフォーマットの説明図である。
【図７】タスクスイッチ対象ＣＰＵＩＤレジスタのビットフォーマットの説明図である。
【図８】不正操作検出レジスタのビットフォーマットの説明図である。
【図９】タスク／割り込みステータスレジスタのビットフォーマットの説明図である。
【図１０】ＣＰＵステータスレジスタのビットフォーマットの説明図である。
【図１１】排他制御部の概要構成ブロック図である。
【図１２】セマフォレジスタの概要構成ブロック図である。
【図１３】セマフォ予約ブロック部の概要構成ブロック図である。
【図１４】処理優先度レベルデータのデータフォーマットの一例の説明図である。
【図１５】コプロセッサ１０２の第１の態様のメモリマップの説明図である。
【図１６】コプロセッサの第２の態様のメモリマップの説明図である。
【図１７】第１の態様のメモリマップ時に４個のＣＰＵ１０１Ａ〜１０１Ｄに対応するデバッグ用スタック領域のアドレスの説明図である。
【図１８】ストア系命令の命令フォーマットの説明図である。
【図１９】ロード系のコプロセッサの命令フォーマットである。
【図２０】その他のコプロセッサの命令フォーマットである。
【図２１】内部割り込み命令対応に対応したベクタテーブルの説明図である。
【図２２】コプロセッサのトラップ要因の説明図である。
【図２３】割込処理の比較概要説明図である。
【図２４】デバッグ割込要求の保留状態の説明図である。
【図２５】共有資源（セマフォ）獲得時の処理タイミングチャートである。
【図２６】共有資源（セマフォ）解放時の処理タイミングチャートである。
【図２７】セマフォ委譲タスクＩＤレジスタのビットフォーマットの説明図である。
【符号の説明】
【０１２６】
１１Ａ〜１１Ｄ…ＣＰＵ（プロセッサ）、１２Ａ…優先度／タスクＩＤ記憶部、１３…
排他制御回路（共有資源管理部）、１４…外部割込要求受付部、１５…外部割込処理割当
部、１６Ａ〜１６Ｄ…優先度値記憶レジスタ、１７Ａ〜１７Ｄ…共有資源獲得有無記憶部
、１８Ａ〜１８Ｄ…処理優先度レベル記憶部（優先度記憶部）、２１…優先度比較回路、
２２…セマフォレジスタ、２２Ｃ…タスクＩＤ格納部、２３…セマフォ操作回路、１００
…情報処理システム、１０１Ａ〜１０１Ｄ…ＣＰＵ、１０２…コプロセッサ、１１０…デ
バッグ入力受付回路、１１１…外部割込入力受付回路、１１２…処理要求受付回路、１１
３…処理要求要因決定回路、１１４…割当対象決定回路、１４２…セマフォ操作ブロック
、１１５…割込要求発生回路、１１６…共通レジスタ部、１１７…個別レジスタ部、１１
８…排他制御部（共有資源管理部）、１１９…デコーダ、１２０…シーケンサ、１２１…
制御部、１３１Ａ〜１３１Ｄ…優先度値保持レジスタ（優先度記憶部）、１３２Ａ〜１３
２Ｄ…ＣＰＵ状態レジスタ、１４０…セマフォレジスタ、１４１…セマフォ予約ブロック
部、１４２…セマフォ操作部、１４３…セマフォ情報格納部、１４４Ａ…セマフォ獲得中
フラグ、１４４Ｂ…セマフォ獲得中タスクＩＤ格納部、ｈｓｓｒ…ハードウェアセマフォ
ステータスレジスタ、ｓｔｔｒ…セマフォ委譲タスクＩＤレジスタ。
【図１】
2009230466.tif 000003
【図２】
2009230466.tif 000004
【図３】
2009230466.tif 000005
【図４】
2009230466.tif 000006
【図５】
2009230466.tif 000007
【図６】
2009230466.tif 000008
【図７】
2009230466.tif 000009
【図８】
2009230466.tif 000010
【図９】
2009230466.tif 000011
【図１０】
2009230466.tif 000012
【図１１】
2009230466.tif 000013
【図１２】
2009230466.tif 000014
【図１３】
2009230466.tif 000015
【図１４】
2009230466.tif 000016
【図１５】
2009230466.tif 000017
【図１６】
2009230466.tif 000018
【図１７】
2009230466.tif 000019
【図１８】
2009230466.tif 000020
【図１９】
2009230466.tif 000021
【図２０】
2009230466.tif 000022
【図２１】
2009230466.tif 000023
【図２２】
2009230466.tif 000024
【図２３】
2009230466.tif 000025
【図２４】
2009230466.tif 000026
【図２５】
2009230466.tif 000027
【図２６】
2009230466.tif 000028
【図２７】
2009230466.tif 000029