(57)【要約】【課題】共有メモリを有するマルチプロセッサシステムにおけるソフトウエアの不正なメモリアクセスを検出することが可能なプロセッサを提供すること。【解決手段】共有メモリを備えたマルチプロセッサシステムを構成するプロセッサ１０であって、前記共有メモリのアドレス情報であるブレーク発生メモリ領域を記憶する記憶手段４１と、前記ブレーク発生メモリ領域をアクセスした場合にメモリアクセスブレークを発生して当該プロセッサ１０をデバッグ状態にするブレーク発生手段４とを備え、前記ブレーク発生メモリ領域は、前記マルチプロセッサシステムを構成する他のプロセッサにおける前記共有メモリのアドレス情報を含む。【選択図】図１
2011180840.tif 000002
【特許請求の範囲】
【請求項１】
共有メモリを備えたマルチプロセッサシステムを構成するプロセッサであって、
前記共有メモリのアドレス情報であるブレーク発生メモリ領域を記憶する記憶手段と、
前記ブレーク発生メモリ領域をアクセスした場合にメモリアクセスブレークを発生して当該プロセッサをデバッグ状態にするブレーク発生手段とを備え、
前記ブレーク発生メモリ領域は、前記マルチプロセッサシステムを構成する他のプロセッサにおける前記共有メモリのアドレス情報を含む
ことを特徴とするプロセッサ。
【請求項２】
共有メモリと、当該共有メモリにアクセスする第１プロセッサと、当該共有メモリにアクセスする第２プロセッサとを備え、
前記第１プロセッサは、
前記共有メモリのアドレス情報である第１ブレーク発生メモリ領域を記憶する第１記憶手段と、
前記第１ブレーク発生メモリ領域をアクセスした場合にメモリアクセスブレークを発生して当該第１プロセッサをデバッグ状態にするブレーク発生手段とを備え、
前記第２プロセッサは、
前記共有メモリのアドレス情報である第２ブレーク発生メモリ領域を記憶する第２記憶手段と、
前記第２ブレーク発生メモリ領域をアクセスした場合にメモリアクセスブレークを発生して当該第２プロセッサをデバッグ状態にするブレーク発生手段とを備え、
前記第１ブレーク発生メモリ領域は、前記第２プロセッサにおける前記共有メモリのアドレス情報を含み、前記第２ブレーク発生メモリ領域は、前記第１プロセッサにおける前記共有メモリのアドレス情報を含む
ことを特徴とするマルチプロセッサシステム。
【請求項３】
前記第１ブレーク発生メモリ領域は、前記第１プロセッサ上で動作する第１タスクが利用を許可されていない前記共有メモリの領域を示すアドレス情報を含み、
前記第２ブレーク発生メモリ領域は、前記第２プロセッサ上で動作する第２タスクが利用を許可されていない前記共有メモリの領域を示すアドレス情報を含む
ことを特徴とする請求項２に記載のマルチプロセッサシステム。
【請求項４】
共有メモリと第１プロセッサと第２プロセッサを備えたマルチプロセッサシステムにおいて当該共有メモリへの不正アクセスを検出する方法であって、
前記第２プロセッサがアクセスする前記共有メモリのアドレス情報を第１ブレーク発生メモリ領域として指定する工程と、
前記第１プロセッサの前記共有メモリへのアクセスを監視する第１監視工程と、
前記第１監視工程により前記第１プロセッサが前記指定された第１ブレーク発生メモリ領域をアクセスした場合にメモリアクセスブレークを発生して当該プロセッサをデバッグ状態にする工程とを備える
ことを特徴とするメモリアクセス不正検出方法。
【請求項５】
前記第１プロセッサがアクセスする前記共有メモリのアドレス情報を第２ブレーク発生メモリ領域として指定する工程と、
前記第２プロセッサの前記共有メモリへのアクセスを監視する第２監視工程と、
前記第２監視工程により前記第２プロセッサが前記指定された第２ブレーク発生メモリ領域をアクセスした場合にメモリアクセスブレークを発生して当該プロセッサをデバッグ状態にする工程とをさらに備える
ことを特徴とする請求項４に記載のメモリアクセス不正検出方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、共有メモリマルチプロセッサシステムを構成するプロセッサ、マルチプロセッサシステム、及び共有メモリへのメモリアクセス不正検出方法に関する。
【背景技術】
【０００２】
近年、１チップで対称型マルチプロセッサ（ＳＭＰ：Symmetric Multiprocessing)により構成されたＬＳＩが一般的になりつつある。これは、単体ＭＰ性能向上が消費電力等の制約により向上率が鈍くなってきているのに対して、同一仕様のマイクロプロセッサ（ＭＰ）を複数集積してソフトウエアを並列に実行するほうが、消費電力あたりの全体処理性能で優位だからである。
組み込み用途のＳＭＰの場合、メインメモリはコストの観点から共有されることが多い。即ち、組み込み向けのマイクロプロセッサでは、１次キャッシュを持つが、下位の共有メモリとの間にコヒーレンシ機能を持たないものが存在する。
【０００３】
このように下位共有メモリを複数のプロセッサで共有利用する場合に問題となるのは、複数のソフトウエアが並列に実行される際に、共有するメモリを正しく排他的に管理しなければならないという点である。さらに、組み込み用途では、ソフトウエア自身がマルチタスクにより構成されているため、排他制御は１ソフトウエア内のタスク間でも実現されなければならない。すなわち、メモリを正しくアクセスしていないことを検出する、不正アクセス検出技術は、ソフトウエア開発のデバッグ効率向上において重要である。
【０００４】
システムで実行されるソフトウエアは、複数のタスクと1つのカーネルにより構成され、複数のマイクロプロセッサにより同時並列に実行される。プログラムの命令とデータは、共有メモリに格納され、キャッシュコヒーレンシの制約を受けつつ、不正なメモリアクセス、即ちメモリ破壊なく実行されなければならない。
【０００５】
一般的には、複数のタスクを共有メモリ上で実行する場合、ある一つのタスクにとって固有のメモリ領域を、他のタスクが動作することによる破壊から防ぐだけでなく、他のタスクと共有するメモリ内容も、そのタスクがプログラム上で占有を期待する時間内は、他のタスクからのメモリ内容の更新を禁止しなければならない。
シングルプロセッサの場合は、同時刻に実行できるタスクは１つなので、上記の時間内にタスクの切り替えを防止すれば、自動的に、共有メモリの占有は保障される。このことから、プログラムのデバッグは、ユーザーのプログラムミスによる自タスクに許されたメモリ領域外のアクセス（メモリアクセス不正）を監視して検出すれば可能になる。
【０００６】
シングルプロセッサの場合のタスク間のメモリ利用に関しては、ハードウェア的なメモリ保護機構がない場合でも利用できる技術が既に提案されている（例えば、特許文献１、及び２参照。）。
しかし、いずれもシングルプロセッサの観点でなされたものであり、同時並行動作するマルチプロセッサの場合は、複数のタスク間でデータの受け渡しのために共有するようなメモリ領域に関して、不正アクセスの検出は行えないという問題がある。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００７−３３４５４１号公報
【特許文献２】特開２００８−４０９６４号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
本発明は、共有メモリを有するマルチプロセッサシステムにおけるソフトウエアの不正なメモリアクセスを検出することが可能なプロセッサ、プロセッサシステム、及びメモリアクセス不正検出方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本願発明の一態様によれば、共有メモリを備えたマルチプロセッサシステムを構成するプロセッサであって、前記共有メモリのアドレス情報であるブレーク発生メモリ領域を記憶する記憶手段と、前記ブレーク発生メモリ領域をアクセスした場合にメモリアクセスブレークを発生して当該プロセッサをデバッグ状態にするブレーク発生手段とを備え、前記ブレーク発生メモリ領域は、前記マルチプロセッサシステムを構成する他のプロセッサにおける前記共有メモリのアドレス情報を含むことを特徴とするプロセッサが提供される。
【００１０】
また、本願発明の一態様によれば、共有メモリと、当該共有メモリにアクセスする第１プロセッサと、当該共有メモリにアクセスする第２プロセッサとを備え、前記第１プロセッサは、前記共有メモリのアドレス情報である第１ブレーク発生メモリ領域を記憶する第１記憶手段と、前記第１ブレーク発生メモリ領域をアクセスした場合にメモリアクセスブレークを発生して当該第１プロセッサをデバッグ状態にするブレーク発生手段とを備え、前記第２プロセッサは、前記共有メモリのアドレス情報である第２ブレーク発生メモリ領域を記憶する第２記憶手段と、前記第２ブレーク発生メモリ領域をアクセスした場合にメモリアクセスブレークを発生して当該第２プロセッサをデバッグ状態にするブレーク発生手段とを備え、前記第１ブレーク発生メモリ領域は、前記第２プロセッサにおける前記共有メモリのアドレス情報を含み、前記第２ブレーク発生メモリ領域は、前記第１プロセッサにおける前記共有メモリのアドレス情報を含むことを特徴とするマルチプロセッサシステムが提供される。
【００１１】
また、本願発明の一態様によれば、共有メモリと第１プロセッサと第２プロセッサを備えたマルチプロセッサシステムにおいて当該共有メモリへの不正アクセスを検出する方法であって、前記第２プロセッサがアクセスする前記共有メモリのアドレス情報を第１ブレーク発生メモリ領域として指定する工程と、前記第１プロセッサの前記共有メモリへのアクセスを監視する第１監視工程と、前記第１監視工程により前記第１プロセッサが前記指定された第１ブレーク発生メモリ領域をアクセスした場合にメモリアクセスブレークを発生して当該プロセッサをデバッグ状態にする工程とを備えることを特徴とするメモリアクセス不正検出方法が提供される。
【発明の効果】
【００１２】
本発明によれば、共有メモリを有するマルチプロセッサシステムにおけるプロセッサにおいてソフトウエアの不正なメモリアクセスを検出することが可能になるという効果を奏する。
また、本発明によれば、共有メモリを有するマルチプロセッサシステムにおいてソフトウエアの不正なメモリアクセスを検出することが可能になるという効果を奏する。
また、本発明によれば、共有メモリを有するマルチプロセッサシステムにおけるメモリアクセス不正検出方法においてソフトウエアの不正なメモリアクセスを検出することが可能になるという効果を奏する。
【図面の簡単な説明】
【００１３】
【図１】図１は、本発明の実施の形態にかかる共有メモリ型のマルチプロセッサシステムを構成するマイクロプロセッサの構成を示す図である。
【図２】図２は、本発明の実施の形態にかかる共有メモリ型のマルチプロセッサシステムの構成を示す図である。
【図３】図３は、本発明の実施の形態にかかるソフトウエアの構成を示す図である。
【図４】図４は、本発明の実施の形態にかかるＴＡＳＫ実行情報テーブルを示す図である。
【図５】図５は、本発明の実施の形態にかかるＴＡＳＫ起動待機キューテーブルを示す図である。
【図６】図６は、本発明の実施の形態にかかるユーザープログラムの動作のフローチャートである。
【図７】図７は、タスクの生成時及び起動時のカーネル動作のフローチャートである。
【図８】図８は、タスク起動時のカーネル動作のフローチャートである。
【図９】図９は、本発明の実施の形態にかかるユーザープログラムにおけるタスクの動作のフローチャートである。
【図１０】図１０は、１つのタスクが意図しているメモリアクセス領域を示す図である。
【図１１】図１１は、２つのタスクが共に意図しているメモリアクセス領域を含む共有メモリの利用の様子を示す図である。
【図１２】図１２は、本発明の実施の形態にかかるメモリ利用許可通知時のカーネル動作のフローチャートである。
【発明を実施するための形態】
【００１４】
以下に添付図面を参照して、本発明の実施の形態にかかるプロセッサ、マルチプロセッサシステム、及び共有メモリへのメモリアクセス不正検出方法を詳細に説明する。なお、以下の実施の形態により本発明が限定されるものではない。
図１は、本実施の形態にかかる共有メモリ型のマルチプロセッサシステムを構成するマイクロプロセッサ（ＭＰ）１０の構成を示す。マイクロプロセッサ１０は、命令実行部１、Ｌ１キャッシュ２、バスインタフェース３、及びメモリアクセスブレーク発生部４を備える。さらに、メモリアクセスブレーク発生部４は、検出領域定義部４１、アクセス検出部４２を備える。
【００１５】
マイクロプロセッサ１０は、他のマイクロプロセッサと共有する共有メモリに対してハードウェア的なメモリ保護機能を持たない。しかし、図１にその構成が示されているように、データアクセスのデバッグブレーク機能を有している。
マイクロプロセッサ１０は、命令実行部１のプログラムに従い、外部メモリに格納されたメモリデータに関して処理を行う。プログラム実行に必要なメモリデータのアクセス要求は、命令実行部１からＬ１キャッシュ２に伝達される。Ｌ１キャッシュ２は、メモリアクセス要求されたデータが格納されていない場合は、バスインタフェース３に対して外部メモリアクセス要求を行い、Ｌ１キャッシュ２へのメモリデータの格納を行う。
【００１６】
バスインタフェース３は、外部メモリアクセス要求があった場合、マイクロプロセッサ１０の外のバスに対してバスアクセスとしてメモリアクセス要求を行う。
メモリアクセスブレーク発生部４は、命令実行部１が行うメモリアクセスのうち、共有メモリの特定のメモリ領域に対してブレーク信号を発生させ、命令実行部１をブレーク（デバッグ状態）に遷移させる機能を持つ。
特定のメモリ領域とは、命令実行部１からは内部領域として、マイクロプロセッサ１０の外部からは外部領域として定義され、それぞれ検出領域定義部４１に記憶される。この領域情報は、検出領域情報としてアクセス検出部４２に供給される。
【００１７】
また、命令実行部１は、共有メモリを共有している他のプロセッサ（図示せず）の検出領域定義部に対して外部領域を定義することが可能になっている。
アクセス検出部４２は、命令実行部１が要求するメモリアクセス要求のメモリアクセス
情報を監視していて、検出領域定義部４１から与えられる検出領域情報と条件が合致する場合に命令実行部１に対してブレーク信号を発生させて、命令実行部１をブレーク（デバッグ状態）に遷移させる。
【００１８】
次に、本実施形態にかかる共有メモリマルチプロセッサシステムについて説明する。
複数のマイクロプロセッサにより構成される対称型共有メモリマルチプロセッサシステム(ＳＭＰ)の例として、図１のマイクロプロセッサを例えば２つ有する共有メモリマルチプロセッサシステムの構成を図２に示す。
【００１９】
本実施形態では、２個のマイクロプロセッサ（ＭＰ）１１、１２が各々、図１のマイクロプロセッサで構成されている。それぞれのマイクロプロセッサ外へのバスアクセス要求１１、１２は、グローバルバス１３を介して、共有メモリ１４にアクセスされる。
【００２０】
マイクロプロセッサ１１、１２相互のメモリ不正アクセスを検出するために、マイクロプロセッサ１１の内部領域定義はマイクロプロセッサ１２に伝達され、マイクロプロセッサ１２に外部領域定義として設定される。同様に、マイクロプロセッサ１２の外部領域定義はマイクロプロセッサ１１に接続され、マイクロプロセッサ１１により設定される。これにより、マイクロプロセッサ１１、１２との間で特定メモリ領域のアクセスに関し、相互検出が可能になる。
【００２１】
次に、上記ＳＭＰで実行され、本実施の形態においてメモリ破壊を検出するデバッグ機能の適用を受けるソフトウエア(ＳＷ)の構成例を図３に示す。
本実施の形態における不正アクセス検出対象になるソフトウエアは、アプリケーション、ＯＳ、ハードウェア（ＨＷ）リソースの３部により構成される。
アプリケーションであるユーザープログラム３０は、複数のタスクからなり、この例ではメインプログラムとＴＡＳＫ＿Ａ、ＴＡＳＫ＿Ｂにより構成されている。
【００２２】
ユーザープログラム３０は、ＯＳを構成するカーネル４０に対して、ＯＳが行うＨＷリソースへの制御も考慮したカーネルＡＰＩ呼び出しを伴って、マルチプロセッサで正しい動作を行うよう意図されたマルチタスクプログラムとして実行する。
【００２３】
ＯＳ内のカーネル４０は、アプリケーションからの要求を、ＨＷリソース内のマイクロプロセッサ１１、１２への実行可能タスク（プログラム）割り当へと変換する。タスク間で共有されている共有メモリ１４へのデータアクセスはマイクロプロセッサ１１、１２が行う。
この機構により、複数のタスクで構成されたユーザープログラム３０は、タスクの同時実行性（プロセッサの数）を隠蔽されたＯＳの基で実行される。
【００２４】
ＯＳ内では、ユーザープログラムからのタスク実行制御部に対するＡＰＩ呼び出しから以下の操作を行う。
タスク実行制御部は、タスク生成時には、タスクＩＤを割り当て、タスク情報としてカーネル内で管理下におかれているＴＡＳＫ実行情報テーブルに登録する。図４は、ＴＡＳＫ実行情報テーブルの一例であり、ＴＡＳＫＩＤ、ＴＡＳＫ状態、現在のＰＣ、メモリ領域、実行依存情報のデータを持つ。
タスク起動時には、上記タスクＩＤを実行可能タスクＩＤとしてカーネル内で管理下におかれているＴＡＳＫ起動待機キューテーブルへ登録する。図５は、ＴＡＳＫ起動待機キューテーブルの一例である。
タスク消去時には、該当するタスクＩＤがＴＡＳＫ起動待機キューテーブルに存在する場合は削除するのと同時に、ＴＡＳＫ実行情報テーブルからも消去する。
【００２５】
タスク実行途中で他の特定のタスク実行完了を待つＡＰＩ呼び出しを行い、その特定のタスクが実行を終了していなといった、タスクの実行権を失う条件となった場合は、タスクプロセッサ割り当て部が以下の操作を行う。
-タスクを実行していたプロセッサに記憶されたレジスタ値などのタスク情報をＴＡＳＫ実行情報テーブルに退避させる。
-該当タスクＩＤをＴＡＳＫ起動待機キューテーブルの末尾に登録する。
-ＴＡＳＫ起動待機キューテーブルの先頭から次の実行可能タスクＩＤを取得し、キューテーブルの先頭から除去する。
-ＴＡＳＫ実行情報テーブル内に退避されていたタスク情報を該プロセッサに復帰させてタスクを実行する。
【００２６】
図３のソフトウエアを例に、本発明の実施の形態にかかる不正メモリアクセスの検出方法について、以下で詳細に説明する。
マルチプロセッサの場合は同時に実行できるタスクが複数あるため、シングルプロセッサとは異なり同一時間での共有メモリ部分の同時アクセスが起こり得る。そのため、ある一つのプロセッサにとっては、自プロセッサで実行している自タスクの不正アクセスだけでなく、共有メモリの占有期間において他のプロセッサで実行される他タスクからの不正アクセスも検出しなければならない。
【００２７】
図３のユーザープログラム３０の動作のフローチャートの具体例を図６に示す。
まず、アプリケーションにおいてユーザープログラム３０を実行し、ＴＡＳＫ＿ＡとＴＡＳＫ＿Ｂの２つを生成する。ＴＡＳＫ＿Ａの利用するメモリ（Ａ許可領域）を確保（Ｓ６１）、ＴＡＳＫ＿Ａ及びＴＡＳＫ＿Ｂで共有するメモリ（ＡＢ許可領域）を確保（Ｓ６２）、Ａ許可領域及びＡＢ許可領域の情報と共にＴＡＳＫ＿Ａの生成をカーネルに依頼（Ｓ６３）、ＴＡＳＫ＿Ｂの利用するメモリ（Ｂ許可領域）を確保（Ｓ６４）、Ｂ許可領域及びＡＢ許可領域の情報と共にＴＡＳＫ＿Ｂの生成をカーネルに依頼（Ｓ６５）、が順次実行される。
【００２８】
即ち、Ｓ６１〜Ｓ６５において、ＴＡＳＫ＿Ａ及びＴＡＳＫ＿Ｂが独立して利用するそれぞれのメモリ領域の定義（Ｓ６１及びＳ６４）と、ＴＡＳＫ＿Ａ及びＴＡＳＫ＿Ｂで共有するメモリ領域の定義（Ｓ６２）を行い、ＴＡＳＫ＿Ａ及びＴＡＳＫ＿Ｂの生成情報としてカーネル４０に通知（Ｓ６３及びＳ６５）している。
【００２９】
ここで、タスクの生成時及び起動時のカーネル４０の動作のフローチャートを図７に示す。
ユーザープログラム３０におけるタスクの生成時には、カーネル４０は、許可メモリ領域情報と共にタスクをカーネルで生成し（Ｓ７１）、タスク実行情報をＴＡＳＫ実行情報テーブルに登録する（Ｓ７２）。また、カーネル４０は、ＴＡＳＫ実行情報テーブルおよびＴＡＳＫ起動待機キューテーブルを管理下に置く。
【００３０】
この後、ユーザープログラム３０において、ＴＡＳＫ＿Ａ及びＴＡＳＫ＿Ｂの起動要求をカーネルに依頼して（図６、Ｓ６６）、ソフトウエアのタスクを開始する。このとき、カーネル４０は、ＴＡＳＫＩＤをＴＡＳＫ起動待機キューテーブルに登録する（図７、Ｓ７３）。ユーザープログラム３０はこの後、ＴＡＳＫ＿Ａ及びＴＡＳＫ＿Ｂの終了を待つ（Ｓ６７）。
【００３１】
タスク起動時のカーネル内の動作のより詳細なフローチャートを図８に示す。
図８に示されるように、タスクが起動すると、まずＴＡＳＫ起動待機キューテーブルの先頭から、プロセッサを割り当てるタスクＩＤを決定し（Ｓ８１）、ＴＡＳＫ実行情報テーブルから、当該タスクＩＤを検索する（Ｓ８２）。そして、タスクを実行していない空いているプロセッサが有るかどうか判定し、空いているプロセッサが有ればＳ８４に進み、無ければＳ８１に戻る。
【００３２】
Ｓ８４では、ＴＡＳＫ起動待機キューテーブルの先頭にある上記タスクＩＤを削除する。そして、ＴＡＳＫ実行情報テーブルの当該タスクＩＤの実行状態（ＴＡＳＫ状態）を「実行中」に更新する（Ｓ８５）。さらに、ＴＡＳＫ実行情報テーブルに格納された割り当てプロセッサＩＤに基づき、当該タスクを実行するプロセッサが決定され（Ｓ８６）、同じくＴＡＳＫ実行情報テーブルに格納されているレジスタ情報を当該プロセッサに割り当てる（Ｓ８７）。
【００３３】
次に、ＰＣ（プログラム・カウンタ）を上記プロセッサにセットする（Ｓ８８）。ＰＣは、次に実行すべきメモリのアドレスであるが、タスクが中断していた場合は当該タスクの途中のアドレスである。最後に、Ｓ８６で決定されたプロセッサがこのＰＣに分岐することで実際のタスク実行（再開）を行う（Ｓ８９）。
【００３４】
図９は、ＴＡＳＫ＿Ａの具体的な処理内容例である。
まず、Ａ許可領域利用をカーネル４０に通知し（Ｓ９１）、Ａ許可領域へアクセス（Ｓ９２）する。
【００３５】
ここで、ＴＡＳＫ＿Ａのみが動作している場合のＴＡＳＫ＿Ａのアクセス領域を図１０に示す。
ＴＡＳＫ＿Ａの不正メモリアクセスは、図１０のＡ許可領域をアクセスする前に、図１のメモリアクセスブレーク発生部４に対して内部領域定義として図１０のアドレスＡ１〜Ａ２で示されたＡ許可領域（図４のＴＡＳＫ実行情報テーブル内のメモリ領域エントリに記憶されたＡ許可領域と同一）を除く範囲のアドレス情報を設定することで検出が可能となる。
【００３６】
ここで、ＴＡＳＫ＿ＡとＴＡＳＫ＿Ｂとの共有メモリ領域（ＡＢ許可領域）が存在し、ＴＡＳＫ＿ＡはＡＢ許可領域をＴＡＳＫ＿Ｂのアクセスを抑制して占有したいとする。図１１に、ＴＡＳＫ＿ＡとＴＡＳＫ＿Ｂが共に意図しているアクセス領域（ＡＢ許可領域）を含む共有メモリを示す。
ＡＢ許可領域のアクセス許可呼び出し前に、ＡＢ許可領域の占有確認を行う（Ｓ９３）。
【００３７】
所定の記憶領域にＡＢ許可領域が現在占有できるかどうかの情報が保持されており、ＡＢ許可領域が占有できる確認がとれた場合（Ｓ９３、ＹＥＳ）、ＡＢ許可領域利用をカーネルに通知する（Ｓ９４）。そして、ＴＡＳＫ＿Ａは、ＡＢ許可領域にアクセスし（Ｓ９５）、処理終了後、ＡＢ許可領域利用終了をカーネルに通知する（Ｓ９６）。占有できない場合（Ｓ９３、ＮＯ）は、Ｓ９７に進む。さらにＡ許可領域へアクセスする処理が継続する場合（Ｓ９７、ＹＥＳ）はＳ９２へ戻り、Ａ許可領域へアクセスする処理が終了する場合（Ｓ９７、ＮＯ）はＡ許可領域利用終了をカーネル４０に通知する（Ｓ９８）。
【００３８】
具体的には、ＡＢ許可領域がＴＡＳＫ＿ＡとＴＡＳＫ＿Ｂのいずれかによって占有されているかどうかが所定の記憶領域に保持されており、ＴＡＳＫ＿Ａの場合は、ＴＡＳＫ＿Ｂが占有していない場合にＡＢ許可領域が占有できる。一方、ＴＡＳＫ＿Ｂの場合には、ＴＡＳＫ＿Ａが占有していない場合にＡＢ許可領域が占有できる。
【００３９】
ＴＡＳＫ＿Ａ及びＴＡＳＫ＿Ｂによる共有メモリ領域の排他利用についての正しいプログラムは、タスク間の共有メモリに対する占有許可確認が全てのタスクで行われている事が必要となる。
【００４０】
このことから、ユーザーが犯す共有メモリ１４に関する不正アクセスエラーの原因として以下の２つケースが想定される。
（想定１）：ＴＡＳＫ＿Ａ（自タスク）は占有確認（Ｓ９３）を行っているが、ＴＡＳＫ＿Ｂ（他タスク）は行っていない。すなわち、他プロセッサのタスクが、ＡＢ許可領域を占有しているタスクを無視してメモリアクセスする。
（想定２）：ＴＡＳＫ＿Ａ（自タスク）が占有確認（Ｓ９３）を行っていない。すなわち、自タスクは、他プロセッサのタスクのＡＢ許可領域占有を無視してアクセスする。
【００４１】
これに対処する本実施の形態におけるメモリ利用許可通知時のカーネル４０の動作のフローチャートを図１２に示す。まず、メモリ利用許可がカーネル４０に通知されると、キャッシュの状態を更新し（Ｓ１２１）、実行プロセッサにメモリアクセスブレーク（内部領域定義）をセットする（Ｓ１２２）。
【００４２】
そして、他のプロセッサにメモリアクセスブレークをセットする（Ｓ１２３）。すなわち、ＴＡＳＫ実行情報テーブル内に示すメモリ領域エントリのＡＢ許可領域を外部領域定義として設定する。これにより、他プロセッサの領域定義を情報として持つため、占有確認を行うことにより、共有メモリ１４への不正アクセスを検出することが出来る。
【００４３】
即ち、本実施の形態において、共有メモリ１４のＡＢ許可領域が各マイクロプロセッサの検出領域定義部４１に記憶されているので、メモリアクセス情報を監視しているアクセス検出部４２が命令実行部１に対してブレーク信号を発生することにより上記（想定１）（想定２）のような不正アクセスを検出することが可能となる。
【００４４】
以上述べたように、本実施の形態は、プロセッサ間で共通に利用するメモリ領域のアクセスに関して相互の利用に関して矛盾の起こらないように、プログラム上でアプリケーションプログラムインタフェース（ＡＰＩ）を決定する。ユーザーはメモリ操作を行う前にこのＡＰＩをプログラム中で呼び出し、キャッシュのコヒーレンシを破綻なく利用することが可能となる。
【００４５】
なお、上記実施の形態においては、対称型の共有メモリマルチプロセッサシステムを例にとり説明したが、共有メモリを有するマルチプロセッサシステムであれば、対称型に限定されない。
【００４６】
また、プロセッサの数も２以上であっても構わない。即ち、複数のプロセッサ内の２つのプロセッサ上で実行される各タスクが、共通にアクセスする共有メモリ領域を一方のプロセッサがメモリアクセスブレーク機能を有する他方のプロセッサに外部領域定義として知らせれば、他方のプロセッサの不正アクセスを検出することが可能となる。従って、２つのプロセッサ同士が互いに外部領域定義として、各々のメモリアクセスブレーク発生部に知らせあう機能を有しているので、不正アクセスを互いに検出することが可能となる。
【００４７】
また、本発明の実施の形態において、マルチプロセッサで実行されるマルチタスクプログラムにおいて、マルチプロセッサカーネルにより各コアに割り当てられる複数タスク間のメモリ不正アクセスを検出する手段が提供される。
【００４８】
その方法は、各コアで実行されるユーザープログラムのタスクが、各コアが持つキャッシュの一貫性保つためのメモリアクセスプロトコルＡＰＩを発行した時点、即ち各タスクがカーネルＡＰＩを呼び出した時点で、マルチプロセッサカーネルが各タスクのメモリ利用が宣言されたことを認識する。
その時点で、プロセッサコアに備わるメモリ不正アクセス検出のためのメモリアクセスブレーク機能を、タスクが利用するメモリ領域外に対して設定する。これと同時に、そのタスクが他のタスクと共有する共有メモリ領域に対しては、他のプロセッサコアのメモリアクセスブレークとして、実行中のタスク間の共有メモリ領域を設定する。
【００４９】
これにより、あるプロセッサで実行中のあるタスクに着目すると、自タスクが利用を許可された領域外をアクセスした場合は、実行中のプロセッサコアでメモリアクセスブレークが発生する。また、他のプロセッサで実行中の他のタスクによる、許可領域外アクセスの他に、実行中タスク間の共有メモリ領域へのアクセスがあった場合、他タスクを実行しているプロセッサコアでメモリアクセスブレークが発生する。
【００５０】
従って、マルチプロセッサ間で複数タスクが実行される場合のメモリ不正アクセスを各コアで発生するメモリアクセスブレークとして検出することが可能となる。
本実施の形態のマルチプロセッサシステム及び不正アクセスの検出方法により、キャッシュシステムのキャッシュコヒーレンシ機構とメモリ保護機構を有さないマルチプロセッサシステムにおいて、低コストでタスク間の共有メモリ利用についての不正アクセスの検出が可能となる。
【００５１】
よって、マルチプロセッサシステム上で走行するマルチタスク・マルチプロセッサ向けカーネルソフトウエアであって、ユーザープログラムタスクが利用するメモリ領域を定義できる。そして、ユーザープログラムタスクからのカーネルに装備されたキャッシュ状態操作ＡＰＩの呼び出し、すなわち各ユーザープログラムタスクによるカーネルＡＰＩ呼び出しから、タスク間の共有メモリ利用に関しての矛盾、即ち不正メモリアクセスの可能性を検出するカーネルソフトウエアが実現可能となる。
【００５２】
また、ブレーク発生メモリ領域をメモリアクセスした際にメモリアクセスブレークを発生するマイクロプロセッサにおいて、カーネルが走行しているプロセッサが、静的に、即ちタスクが実行される前に共用メモリ領域を決定できる場合に、当該領域を不正メモリアクセス領域として定義し、ブレーク発生メモリ領域として指定することで、ユーザープログラムタスクによる、カーネルの利用するメモリ領域に対する不正アクセスを検出することが可能となる。
【００５３】
また、ブレーク発生メモリ領域をプロセッサ外部から指定することが出来るマイクロプロセッサによって、カーネルの走行しないプロセッサに対しても、不正メモリアクセス領域検出の手段を提供することが可能となる。即ち、カーネルＡＰＩを使用せずにカーネルを介在させなくても、ユーザープログラムによっても本実施の形態の動作は可能である。
【００５４】
また、カーネルに装備されたキャッシュ状態操作ＡＰＩ呼び出しの際に、呼び出したプロセッサに対してユーザープログラムタスクの利用するメモリ領域外にブレーク発生メモリ領域を設定するカーネルソフトウエアによって、アクセス禁止メモリ領域が動的に切り替わるユーザープログラムタスクの利用可能領域外に対する不正アクセス検出の手段を提供することが可能である。
【００５５】
さらに、カーネルソフトウエアが、カーネルに装備されたキャッシュ状態操作ＡＰＩ呼び出しの際に、呼び出したユーザープログラムタスクが他のユーザープログラムタスクと共有するメモリ領域に対して、呼び出したユーザープログラムタスクを実行しているマイクロプロセッサを除く他マイクロプロセッサのブレーク発生メモリ領域として設定するので、他タスクによるメモリ不正アクセスをハードウェア的に検出する事が可能となる。
【００５６】
以上説明したように、本発明にかかる実施の形態により、共有メモリマルチプロセッサシステムにおけるデバッグ効率の向上が図れると同時にコストの低減が可能となる。
さらに、本願発明は上記実施の形態に限定されるものではなく、実施段階ではその要旨を逸脱しない範囲で種々に変形することが可能である。また、上記実施の形態には種々の段階の発明が含まれており、開示される複数の構成要件における適宜な組み合わせにより種々の発明が抽出されうる。例えば、実施の形態に示される全構成要件からいくつかの構成要件が削除されても、発明が解決しようとする課題の欄で述べた課題が解決でき、発明の効果の欄で述べられている効果が得られる場合には、この構成要件が削除された構成が発明として抽出されうる。更に、異なる実施の形態にわたる構成要素を適宜組み合わせてもよい。
【符号の説明】
【００５７】
１  命令実行部、２  Ｌ１キャッシュ、３  バスインタフェース、４  メモリアクセスブレーク発生部、４１  検出領域定義部、４２  アクセス検出部、１０、１１、１２  マイクロプロセッサ、１３  グローバルバス、１４  共有メモリ、３０  ユーザープログラム、４０  カーネル。
【図１】
2011180840.tif 000003
【図２】
2011180840.tif 000004
【図３】
2011180840.tif 000005
【図４】
2011180840.tif 000006
【図５】
2011180840.tif 000007
【図６】
2011180840.tif 000008
【図７】
2011180840.tif 000009
【図８】
2011180840.tif 000010
【図９】
2011180840.tif 000011
【図１０】
2011180840.tif 000012
【図１１】
2011180840.tif 000013
【図１２】
2011180840.tif 000014