(57)【要約】  ハイパーバイザ（１１２）が、プロセッサ間通信を監視し、ソフトウェア割り込み要求を検出すると、検出したソフトウェア割り込み要求のソフトウェア割込ハンドラが優先度の高い処理であるか否かを判断する。ハイパーバイザ（１１２）は、ソフトウェア割り込みハンドラが優先度の高い処理であると判断すると、（５）スレーブＣＰＵ（１０２）に対して疑似ハードウェア割り込み要求を発生させる。スレーブＯＳ（１２２）が、（６）実行中のタスクＢをレディキュー（１４２）の先頭に退避させ、（７）タスクＢに優先してソフトウェア割り込みハンドラを実行する。
2011121730.tif 000002
【特許請求の範囲】
【請求項１】
マルチコアプロセッサのうちの一のコアへのソフトウェア割り込み要求の割り込み処理を待機させ、待機中の処理を待機順に前記一のコアで実行する第１の実行手段と、
前記一のコアへのハードウェア割り込み要求の割り込み処理を前記一のコアで実行中の処理に優先して実行する第２の実行手段と、
前記ソフトウェア割り込み要求が特定のソフトウェア割り込み要求であるか否かを判断する要求判断手段と、
前記要求判断手段により前記ソフトウェア割り込み要求が前記特定のソフトウェア割り込み要求であると判断された場合、前記ソフトウェア割り込み要求の割り込み処理を前記第１の実行手段により待機させず、前記第２の実行手段により優先して実行させる実行制御手段と、
を備えることを特徴とするマルチコアプロセッサシステム。
【請求項２】
前記特定のソフトウェア割り込み要求が、特定のハードウェア割り込み要求に連動するソフトウェア割り込み要求であることを特徴とする請求項１に記載のマルチコアプロセッサシステム。
【請求項３】
前記特定のハードウェア割り込み要求が、ユーザ操作によって発生するハードウェア割り込み要求であることを特徴とする請求項２に記載のマルチコアプロセッサシステム。
【請求項４】
前記要求判断手段により前記ソフトウェア割り込み要求が前記特定のソフトウェア割り込み要求であると判断された場合、前記実行中の処理が該実行中の処理に優先して前記ソフトウェア割り込み要求の割り込み処理を実行することを許可しているか否かを特定の基準に基づいて判断する優先判断手段と、を備え、
前記実行制御手段は、
前記優先判断手段により前記実行中の処理が前記実行中の処理に優先して前記ソフトウェア割り込み要求の割り込み処理を実行することを許可していないと判断した場合、前記一のコアで実行中の処理が終了後もしくは処理の切り替えを行う際に、前記ソフトウェア割り込み要求の割り込み処理を前記第２の実行手段により優先して実行させることを特徴とする請求項１〜３のいずれか一つに記載のマルチコアプロセッサシステム。
【請求項５】
マルチコアプロセッサのうちの一のコアへのソフトウェア割り込み要求の割り込み処理を待機させ、待機中の処理を待機順に前記一のコアで実行する第１の実行工程と、前記一のコアへのハードウェア割り込み要求の割り込み処理を前記一のコアで実行中の処理に優先して実行する第２の実行工程とを備える前記一のコアに、
前記ソフトウェア割り込み要求が特定のソフトウェア割り込み要求であるか否かを判断する要求判断工程と、
前記要求判断工程により前記ソフトウェア割り込み要求が前記特定のソフトウェア割り込み要求であると判断された場合、前記ソフトウェア割り込み要求の割り込み処理を前記第１の実行工程により待機させず、前記第２の実行工程により優先して実行させる実行制御工程と、
を実行させることを特徴とする制御プログラム。
【請求項６】
マルチコアプロセッサのうちの一のコアへのソフトウェア割り込み要求の割り込み処理を待機させ、待機中の処理を待機順に前記一のコアで実行する第１の実行工程と、前記一のコアへのハードウェア割り込み要求の割り込み処理を前記一のコアで実行中の処理に優先して実行する第２の実行工程とを備える前記一のコアが、
前記ソフトウェア割り込み要求が特定のソフトウェア割り込み要求であるか否かを要求判断する判断工程と、
前記要求判断工程により前記ソフトウェア割り込み要求が前記特定のソフトウェア割り込み要求であると判断された場合、前記ソフトウェア割り込み要求の割り込み処理を前記第１の実行工程により待機させず、前記第２の実行工程により優先して実行させる実行制御工程と、
を実行することを特徴とする制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、割り込み処理の実行を制御するマルチコアプロセッサシステム、制御プログラム、および制御方法に関する。
【背景技術】
【０００２】
従来、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）の割り込み要求は、大きくハードウェア割り込み要求とソフトウェア割り込み要求の２つに分類することができる。ハードウェア割り込み要求は、ＣＰＵの周辺機器からＣＰＵに対して発生する割り込み要求である。具体的には、たとえば、携帯電話で動画再生中にタッチパネルで利用者がタッチ操作により早送り操作を行った場合、タッチパネルからＣＰＵへのハードウェア割り込み要求となる。ソフトウェア割り込み要求は、実行中のプログラムに起因して発生する割り込み要求である。【０００３】
ハードウェア割り込み要求では、該ＣＰＵ上で動作するＯＳは、実行中のタスクを退避させ、該ハードウェア割り込み要求のハードウェア割り込みハンドラ（割り込み処理）をすぐに実行する。また、ハードウェア割り込みハンドラがソフトウェア割り込みを呼び出す場合がある。【０００４】
また、マルチコアプロセッサシステムにおいて、マスタＣＰＵにハードウェア割り込み要求が発生する場合、マスタＣＰＵはソフトウェア割り込み要求を発生させる。このときソフトウェア割り込み要求を受けるタスクがスレーブＣＰＵに割り当てられている場合がある。該タスクがスレーブＣＰＵに割り当てられている場合、プロセッサ間割り込み通信を用いてスレーブＣＰＵでソフトウェア割り込み要求のソフトウェア割り込みハンドラ（割り込み処理）を実行させる。
【先行技術文献】
【非特許文献】
【０００５】
【非特許文献１】高橋浩和、小田逸郎、山幡為佐久著  「Ｌｉｎｕｘ  カーネル  解読室  ２．６」  ソフトバンククリエイティブ株式会社出版  ２００６年１１月３０日  ｐ．６２−６３
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、プロセッサ間割り込み通信によりソフトウェア割り込み要求が発生すると、ソフトウェア割り込み要求のソフトウェア割り込みハンドラはレディキューにキューイングされることで実行を待機する。レディキューでは待機順に処理が実行されるため、レディキュー上にタスクが多く登録されていると、ソフトウェア割り込みハンドラの実行開始が遅くなるという問題点があった。【０００７】
すなわち、ソフトウェア割り込みハンドラが呼び出されてから実行開始されるまでは、ハードウェア割り込みハンドラが呼び出されてから実行開始されるまでに比べて遅いという問題点があり、割り込みの応答が遅いという問題点があった。【０００８】
本発明は、上述した従来技術による問題点を解消するため、優先度の高い割り込みの応答時間を高速化させることができるマルチコアプロセッサシステム、制御プログラム、および制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本実施形態の一観点によれば、マルチコアプロセッサのうちの一のコアへのソフトウェア割り込み要求の割り込み処理を待機させ、待機中の処理を待機順に前記一のコアで実行する第１の実行手段と、前記一のコアへのハードウェア割り込み要求の割り込み処理を前記一のコアで実行中の処理に優先して実行する第２の実行手段と、前記ソフトウェア割り込み要求が特定のソフトウェア割り込み要求であるか否かを要求判断する判断手段と、前記要求判断手段により前記ソフトウェア割り込み要求が前記特定のソフトウェア割り込み要求であると判断された場合、前記ソフトウェア割り込み要求の割り込み処理を前記第１の実行手段により待機させず、前記第２の実行手段により優先して実行させる実行制御手段と、を備えるマルチコアプロセッサシステムを提供する。
【発明の効果】
【００１０】
本マルチコアプロセッサシステム、制御プログラム、および制御方法によれば、優先度の高い割り込みの応答時間を高速化させることができるという効果を奏する。
【図面の簡単な説明】
【００１１】
【図１】動画再生中の一例を示す説明図である。
【図２】ハードウェア割り込み要求が発生した例を示す説明図である。
【図３】シーク処理が直ちに実行される例を示す説明図である。
【図４】マルチコアプロセッサシステムのハードウェアを示すブロック図である。
【図５】実施例１にかかるユースケーステーブルの一例を示す説明図である。
【図６】マルチコアプロセッサシステムを示すブロック図である。
【図７】実施例１を示す説明図である。
【図８】実施例１にかかるマルチコアプロセッサシステムによる制御処理手順を示すフローチャート（その１）である。
【図９】実施例１にかかるマルチコアプロセッサシステムによる制御処理手順を示すフローチャート（その２）である。
【図１０】実施例２にかかるユースケーステーブルの一例を示す説明図である。
【図１１】実施例２において割り込み可のタスクが実行状態を示す説明図である。
【図１２】実施例２において割り込み不可のタスクが実行状態を示す説明図（その１）である。
【図１３】実施例２において割り込み不可のタスクが実行状態を示す説明図（その２）である。
【図１４】実施例２にかかるマルチコアプロセッサシステムによる制御処理手順を示すフローチャートである。
【発明を実施するための形態】
【００１２】
以下に添付図面を参照して、マルチコアプロセッサシステム、制御プログラム、および制御方法の好適な実施の形態を詳細に説明する。なお、本実施の形態のマルチコアプロセッサシステムにおいて、マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００１３】
図１は、動画再生中の一例を示す説明図である。図１では、マルチコアプロセッサシステム１００が携帯電話の場合を例に挙げている。マスタＣＰＵ１０１ではプレーヤー処理が実行中であり、ＧＵＩ（Ｇｒａｐｈｉｃ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）処理がレディキュー１４１に登録されている。一方、スレーブＣＰＵ１０２では動画デコード処理が実行中である。
【００１４】
ここで、レディキュー１４１（またはレディキュー１４２）とは、周知のように実行可能状態のタスクを管理するためのデータ構造である。レディキュー１４１（またはレディキュー１４２）に登録されているタスクのコンテキスト情報を取り出すことで、タスクを実行することができる。コンテキスト情報はプログラムの内部状態やプログラムがメモリ上のどこに配置されたかを示す情報である。
【００１５】
図２は、ハードウェア割り込み要求が発生した例を示す説明図である。図２では、利用者が動画に対して早送りをしたため、Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）デバイス１０３（図２では液晶パネル）からハードウェア割り込み要求が発生する。マスタＣＰＵ１０１が該ハードウェア割り込み要求を検出すると、マスタＯＳ１２１が、プレーヤー処理をレディキュー１４２に退避させ、ハードウェア割り込みハンドラであるタッチパネルドライバを実行する。
【００１６】
つぎに、マスタＯＳ１２１がタッチパネルドライバからソフトウェア割り込み要求によりシーク処理を実行させようとすると、マスタＯＳ１２１が割り込み対象である動画デコード処理がどのＣＰＵに割り当てられているかを特定する。
【００１７】
ここで、動画デコード処理は、スレーブＣＰＵ１０２に割り当てられていると特定される。マスタＯＳ１２１は、動画デコード処理がスレーブＣＰＵ１０２に割り当てられているため、マスタＣＰＵ１０１が、プロセッサ間割り込み通信によりシーク処理を呼び出すソフトウェア割り込み要求をスレーブＣＰＵ１０２へ通知する。
【００１８】
ハイパーバイザ１１２はプロセッサ間通信を監視し、該ソフトウェア割り込み要求を検出する。ハイパーバイザ１１２は、該ソフトウェア割り込み要求を検出すると、該ソフトウェア割り込み要求のソフトウェア割り込みハンドラであるシーク処理が優先度の高い処理であるか否かを判断する。なお、ハイパーバイザ１１２は、シーク処理の優先度に基づいて、特定のソフトウェア割り込み要求であるか否かを判断する。ここでは、ハイパーバイザ１１２はシーク処理は優先度の高い処理であると判断する。その後ハイパーバイザ１１２は、スレーブＣＰＵ１０２に対して疑似ハードウェア割り込み要求を発生させる。具体的には、あらかじめ定められているシーク処理に対応するレジスタ値をスレーブＣＰＵ１０２内のハードウェア割り込みに関するレジスタに設定する。
【００１９】
図３は、シーク処理が直ちに実行される例を示す説明図である。スレーブＣＰＵ１０２は、スレーブＣＰＵ１０２内のハードウェア割り込みに関するレジスタに値が設定されると、該設定された値に対応するアドレスを特定する。そして、スレーブＣＰＵ１０２上で動作するスレーブＯＳ１２２が、実行中の動画デコード処理をレディキュー１４２の先頭に退避させ、該特定したアドレスにジャンプすることでシーク処理を実行する。
【００２０】
これにより、シーク処理が即座に実行され、優先度の高い処理に関する応答性を向上させることができる。なお、もしシーク処理が優先度の低い処理であれば、従来と同様にスレーブＯＳ１２２がレディキュー１４２に該シーク処理を積むことで待機させる。
【００２１】
（マルチコアプロセッサシステム１００のハードウェア）
図４は、マルチコアプロセッサシステム１００のハードウェアを示すブロック図である。図４において、マルチコアプロセッサシステム１００は、マスタＣＰＵ１０１と、スレーブＣＰＵ１０２と、共有メモリ１０４と、Ｉ／Ｏデバイス１０３と、を有している。また、各部は、バス１０５によって接続されている。図１ではマルチコアプロセッサシステム１００が携帯電話を例に挙げているが、これに限らず、マルチコアプロセッサシステム１００は携帯電話や電子ブックリーダーデバイスなどの携帯情報端末やパーソナルコンピュータが例として挙げられる。
【００２２】
マスタＣＰＵ１０１とスレーブＣＰＵ１０２とは、それぞれコアとレジスタとキャッシュとを有している。各ＣＰＵのレジスタには、ハードウェア割り込みに関するレジスタ（以下、「ハードウェア割り込みレジスタ」）を有している。ハードウェア割り込みレジスタが値を設定されると、該設定された値に基づいて割り込み処理に関するアドレスが特定され、ＣＰＵが該アドレスにジャンプすることで該割り込み処理をすぐに実行することができる。
【００２３】
各ＣＰＵには割り込みベクターテーブルを有し、該割り込みベクターテーブルにはレジスタの値と割り込み処理のアドレスとの対応関係が記述されている。ハードウェア割り込み要求では、ハードウェア割り込みレジスタに該ハードウェア割り込み要求に対応する値を設定する。各ＣＰＵは該ＣＰＵが有するハードウェア割り込みレジスタに値が設定されると、各ＣＰＵは割り込みベクターテーブルから設定された値を検索し、対応するアドレスを特定する。そして、該ＣＰＵは特定したアドレスにジャンプする。
【００２４】
また、本実施の形態では、割り込みベクターテーブルにハードウェア割り込み処理に関するアドレスだけでなく、ソフトウェア割り込み処理に関するアドレスも記述されている。そして、ハードウェア割り込み要求およびソフトウェア割り込み要求ごとにハードウェア割り込みレジスタに設定可能な値があらかじめ決定されている。
【００２５】
マスタＣＰＵ１０１はハイパーバイザ１１１とマスタＯＳ１２１を実行し、マルチコアプロセッサシステム１００の全体の制御を司る。マスタＯＳ１２１は、タスクをどのＣＰＵに割り当てるかを制御し、マスタＣＰＵ１０１でのタスクの切り替えを制御するスケジューラ１３１を備えている。スレーブＣＰＵ１０２はハイパーバイザ１１２とスレーブＯＳ１２２を実行する。スレーブＯＳ１２２は、スレーブＣＰＵ１０２でのタスクの切り替えを制御するスケジューラ１３２を備えている。
【００２６】
つぎに、ハイパーバイザ１１１とハイパーバイザ１１２とは、それぞれマスタＣＰＵ１０１とスレーブＣＰＵ１０２などのハードウェア上で直接動作するプログラムであり、該ハードウェア内のレジスタに記憶されているプログラムである。ハイパーバイザ１１１は、マスタＣＰＵ１０１を直接参照したり、マスタＣＰＵ１０１内のレジスタの情報を読み出したり、マスタＣＰＵ１０１内のレジスタの情報を書き換えたりする特権命令を実施することができる。ハイパーバイザ１１２は、スレーブＣＰＵ１０２内のレジスタを直接参照したり、スレーブＣＰＵ１０２内のレジスタの情報を読み出したり、スレーブＣＰＵ１０２内のレジスタの情報を書き換えたりする特権命令を実施することができる。
【００２７】
Ｉ／Ｏデバイス１０３は、ユーザが直接操作可能なデバイスや、ネットワークを介してユーザが操作可能なデバイスである。たとえば、キーボードやタッチ操作可能な液晶パネルやマウスなどが挙げられる。たとえば、キーボードであれば、文字、数字、各種指示などの入力のためのキーを備え、データの入力を行う。たとえば、タッチ操作可能な液晶パネルであれば、該データの入力を行い、文字、数字、画像などの出力を行う。
【００２８】
共有メモリ１０４は、マルチコアプロセッサに共有されるメモリであり、プロセステーブル１５１とユースケーステーブル５００とを記憶している。共有メモリ１０４は、具体的には、ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）と、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）と、フラッシュＲＯＭなどを備えている。
【００２９】
たとえば、フラッシュＲＯＭが各ＯＳのプログラムを記憶し、ＲＯＭがアプリケーションプログラムを記憶し、ＲＡＭがマスタＣＰＵ１０１とスレーブＣＰＵ１０２のワークエリアとして使用される。共有メモリ１０４に記憶されているプログラムは、各ＣＰＵにロードされることで、コーディングされている処理を該各ＣＰＵに実行させることとなる。
【００３０】
プロセステーブル１５１とは、タスクがどのＣＰＵに割り当てられているか、ＣＰＵがどのタスクを実行中であるかを示す情報である。各ＯＳは該ＯＳが起動後にプロセステーブル１５１を読み出して各ＣＰＵのキャッシュに記憶しておく。スケジューラ１３１はタスクを割り当てるとプロセステーブル１５１に登録する。各スケジューラはタスクスイッチが発生するとプロセステーブル１５１にどのタスクが実行状態になったかを登録する。また、各スケジューラはプロセステーブル１５１を書き換えると、スヌープ処理を実行することで、全ＣＰＵのキャッシュに記憶されているプロセステーブル１５１を更新する。つぎに、ユースケーステーブル５００について図５を用いて説明する。
【００３１】
図５は、実施例１にかかるユースケーステーブル５００の一例を示す説明図である。ユースケーステーブル５００は、関数ごとに割り込み時に強制的に処理を実行させるか否かを示す情報と、該関数が実行中に割り込みができるか否かを示す情報である。たとえば、ＦｕｎｃＡには「強制ジャンプ」と記述され、ＦｕｎｃＢには「ハンドラ処理」と記述されている。すなわち、ソフトウェア割り込みとしてＦｕｎｃＡが呼び出されると、マルチコアプロセッサシステム１００では、ＦｕｎｃＡを直ちに実行させる。一方、ソフトウェア割り込みとしてＦｕｎｃＢが呼び出されると、マルチコアプロセッサシステム１００では、ＦｕｎｃＢをレディキュー１４２に登録する。
【００３２】
本実施の形態では、「強制ジャンプ」と記述されている関数は優先度の高い処理であることを示し、「ハンドラ処理」と記述されている関数は優先度の高くない（優先度の低い）処理であることを示している。
【００３３】
優先度の高い割り込み処理としては、たとえば、特定のハードウェア割り込み要求に連動する割り込み処理が挙げられる。たとえば、図３で示したようなシーク処理はタッチパネルドライバに連動する割り込み処理である。特定のハードウェア割り込み要求とは、たとえば、ユーザ操作によって発生するハードウェア割り込み要求である。ここで、ユーザ操作とは、たとえば、タッチパネル操作、キーボードタッチ、マウス操作、などが挙げられる。
【００３４】
また、ユースケーステーブル５００はアプリケーションの設計者があらかじめ設計時に作成することとする。よって、設計者が優先度を高くしたい処理を優先度の高い処理としてユースケーステーブル５００に登録してもよい。
【００３５】
また、ユースケーステーブル５００で割り込み時に強制的に処理を実行させるか否かを示す情報が「強制ジャンプ」と記述されている関数のアドレスは上述の割り込みベクターテーブルに登録されていることとする。なお、ユースケーステーブル５００はマルチコアプロセッサシステム１００が起動されると共に各ＣＰＵのキャッシュに記憶させることとしてよい。
【００３６】
（マルチコアプロセッサシステム１００）
図６は、マルチコアプロセッサシステム１００を示すブロック図である。マルチコアプロセッサシステム１００の各ＣＰＵは、第１の実行部６０１と、第２の実行部６０２と、要求判断部６０３と、優先判断部６０４と、実行制御部６０５と、を含む。各部（第１の実行部６０１〜実行制御部６０５）は、たとえば、共有メモリ１０４に記憶されたプログラムを各ＣＰＵに実行させることができる。第１の実行部６０１と、第２の実行部６０２は、各ＣＰＵ上で動作するＯＳ（本実施の形態ではマスタＯＳ１２１およびスレーブＯＳ１２２）に備えられたプログラムである。要求判断部６０３と、優先判断部６０４と、実行制御部６０５は、各ＣＰＵ上で動作するハイパーバイザ（本実施の形態ではハイパーバイザ１１１およびハイパーバイザ１１２）に備えられたプログラムである。
【００３７】
第１の実行部６０１は、ソフトウェア割り込み要求のソフトウェア割り込みハンドラを待機させ、待機中の処理を待機順に実行する。
【００３８】
第２の実行部６０２は、ハードウェア割り込み要求のソフトウェア割り込みハンドラを実行中の処理に優先して実行する。
【００３９】
要求判断部６０３は、ソフトウェア割り込み要求が特定のソフトウェア割り込み要求であるか否かを判断する。本実施の形態では、ソフトウェア割り込み要求が特定のソフトウェア割り込み要求であるか否かについては、ソフトウェア割り込み要求のソフトウェア割り込みハンドラが、優先度の高い処理であるか否かを判断している。
【００４０】
実行制御部６０５は、要求判断部６０３によりソフトウェア割り込み要求が特定のソフトウェア割り込み要求であると判断された場合、ソフトウェア割り込み要求のソフトウェア割り込みハンドラを第１の実行部６０１により待機させず、第２の実行部６０２により優先して実行させる。
【００４１】
また、優先判断部６０４は、要求判断部６０３によりソフトウェア割り込み要求が特定のソフトウェア割り込み要求であると判断された場合、実行中の処理が該実行中の処理に優先してソフトウェア割り込み要求のソフトウェア割り込みハンドラを実行することを許可しているか否かを所定基準に基づいて判断する。
【００４２】
実行制御部６０５は、優先判断部６０４により実行中の処理が実行中の処理に優先してソフトウェア割り込み要求のソフトウェア割り込みハンドラを実行することを許可していないと判断した場合、実行中の処理が終了後もしくはタスクの切り替え時に、ソフトウェア割り込み要求のソフトウェア割り込みハンドラを第２の実行部６０２により優先して実行させる。
【００４３】
以上を踏まえて図を用いて実施例１および実施例２を詳細に説明する。まず、実施例１では、プロセッサ間割り込み通信により呼び出されるソフトウェア割り込みハンドラが優先度の高い関数であるか否かに基づいて該ソフトウェア割り込みハンドラを直ちに実行させるか、待機させるかについて説明する。つぎに、実施例２では、実行中のタスクが割り込みを許可しているか否かに基づいてソフトウェア割り込みハンドラを直ちに実行させるか、該実行中のタスクが終了またはタスクの切り替え時に該ソフトウェア割り込みハンドラを判断する例について説明する。
【００４４】
（実施例１）
図７は、実施例１を示す説明図である。まず、（１）Ｉ／Ｏデバイス１０３を介してハードウェア割り込みの要求がマスタＣＰＵ１０１に対して発生すると、マスタＯＳ１２１が（２）マスタＣＰＵ１０１で実行中のタスクＡを直ちに退避させる。
【００４５】
そして、マスタＯＳ１２１が、（３）該ハードウェア割り込み要求のハードウェア割り込みハンドラを実行する。そして、ハードウェア割り込みハンドラが呼び出すソフトウェア割り込みハンドラにより割り込みを受けるタスクが割り当てられているＣＰＵをマスタＯＳ１２１がプロセステーブル１５１を用いて特定する。ここで、該割り込みを受けるタスクをタスクＢとし、タスクＢが割り当てられているＣＰＵとしてスレーブＣＰＵ１０２が特定される。そして、マスタＯＳ１２１が、（４）プロセッサ間割り込み通信によりソフトウェア割り込み要求をスレーブＣＰＵ１０２へ通知する。
【００４６】
ハイパーバイザ１１２は、プロセッサ間通信を監視し、該ソフトウェア割り込み要求を検出する。ハイパーバイザ１１２は、ソフトウェア割り込み要求を検出すると、ユースケーステーブル５００から検出したソフトウェア割り込み要求のソフトウェア割り込みハンドラを検索し、該ソフトウェア割り込みハンドラが優先度の高い処理であるか否かを判断する。ここでは、ソフトウェア割り込みハンドラは優先度の高い処理であるとする。
【００４７】
ハイパーバイザ１１２は、ソフトウェア割り込みハンドラが優先度の高い処理であると判断すると、（５）スレーブＣＰＵ１０２に対して疑似ハードウェア割り込み要求を発生させる。疑似ハードウェア割り込み要求を発生させるとは、たとえば、ハイパーバイザ１１２がスレーブＣＰＵ１０２のレジスタ内でハードウェア割り込みレジスタにソフトウェア割り込みハンドラに対応する値を設定することを示している。スレーブＣＰＵ１０２は設定された値に対応するアドレスを割り込みベクターテーブルを用いて特定する。そして、スレーブＯＳ１２２が、（６）実行中のタスクＢをレディキュー１４２の先頭に退避させ、（７）特定されたアドレスにジャンプすることでソフトウェア割り込みハンドラを実行する。
【００４８】
（実施例１にかかるマルチコアプロセッサシステム１００による制御処理手順）
図８および図９は、実施例１にかかるマルチコアプロセッサシステム１００による制御処理手順を示すフローチャートである。ここでは、マスタＣＰＵ１０１にハードウェア割り込み要求が発生した場合を例に説明する。まず、マスタＣＰＵ１０１が、ハードウェア割り込み要求を検出し（ステップＳ８０１）、マスタＣＰＵ１０１上で動作するマスタＯＳ１２１が、実行中のタスクを中断してレディキュー１４１に退避させる（ステップＳ８０２）。そして、マスタＯＳ１２１が、ハードウェア割り込み要求のハードウェア割り込みハンドラを実行し（ステップＳ８０３）、プロセステーブル１５１を用いて割り込みを受けるタスクが割り当てられているＣＰＵを特定する（ステップＳ８０４）。
【００４９】
つぎに、マスタＯＳ１２１が、特定したＣＰＵがマスタＣＰＵ１０１であるか否かを判断し（ステップＳ８０５）、特定したＣＰＵがマスタＣＰＵ１０１であれば（ステップＳ８０５：Ｙｅｓ）、通常の割り込み処理を実行する（ステップＳ８０６）。一方、マスタＯＳ１２１が、特定したＣＰＵがマスタＣＰＵ１０１でないと判断した場合（ステップＳ８０５：Ｎｏ）、特定したＣＰＵへプロセッサ間割り込み通信を実施する（ステップＳ８０７）。ここで、プロセッサ間割り込み通信では、特定されたＣＰＵに呼び出す関数に関する情報を付与してソフトウェア割り込み要求を通知する。
【００５０】
一方、スレーブＣＰＵ１０２上で動作するハイパーバイザ１１２は、プロセッサ間通信を監視し、プロセッサ間割り込み通信を検出したか否かを判断する（ステップＳ８０８）。なお、ハイパーバイザ１１２は、スレーブＣＰＵ１０２へのプロセッサ間割り込み通信のみを検出している。ハイパーバイザ１１２が、プロセッサ間割り込み通信を検出していないと判断した場合（ステップＳ８０８：Ｎｏ）、ステップＳ８０８へ戻る。すなわち、ハイパーバイザ１１２は常時プロセッサ間通信を監視することにより、プロセッサ間割り込み通信を検出することができる。
【００５１】
ハイパーバイザ１１２が、プロセッサ間割り込み通信を検出したと判断した場合（ステップＳ８０８：Ｙｅｓ）、ユースケーステーブル５００を用いてソフトウェア割り込み要求のソフトウェア割り込みハンドラが優先度の高い処理であるか否かを判断する（ステップＳ８０９）。ハイパーバイザ１１２が、ソフトウェア割り込み要求のソフトウェア割り込みハンドラが優先度の高い処理であると判断した場合（ステップＳ８０９：Ｙｅｓ）、スレーブＣＰＵ１０２のハードウェア割り込みレジスタにソフトウェア割り込み要求に関する値を設定する（ステップＳ８１０）。
【００５２】
つぎに、スレーブＣＰＵ１０２が、ハードウェア割り込みレジスタに値が設定されることで、ハードウェア割り込み要求を検出する（ステップＳ８１１）。なお、実際にはソフトウェア割り込み要求であるが、スレーブＣＰＵ１０２は単にハードウェア割り込みレジスタに値が設定されることを検出するだけであるため、ハードウェア割り込み要求であるか否かに関しては判断していない。スレーブＣＰＵ１０２上で動作するスレーブＯＳ１２２が、実行中のタスクを中断してレディキュー１４２へ退避させる（ステップＳ８１２）。そして、スレーブＯＳ１２２が、ソフトウェア割り込み要求のソフトウェア割り込みハンドラを実行し（ステップＳ８１３）、ステップＳ８１７へ移行する。
【００５３】
一方、ハイパーバイザ１１２が、ソフトウェア割り込み要求のソフトウェア割り込みハンドラが優先度の高い処理でないと判断した場合（ステップＳ８０９：Ｎｏ）、ソフトウェア割り込み要求をスレーブＯＳ１２２へ通知する（ステップＳ８１４）。ここで、ハイパーバイザ１１２がソフトウェア割り込み要求を通知するとは、レディキュー１４２に積むことで待機させる指示を通知することを示している。スレーブＯＳ１２２は、該通知を受け付けると、ソフトウェア割り込みハンドラをレディキュー１４２へ登録し（ステップＳ８１５）、レディキュー１４２に登録されている順に処理を実行することにより、ソフトウェア割り込みハンドラを実行する（ステップＳ８１６）。
【００５４】
ステップＳ８１３またはステップＳ８１６のつぎに、スレーブＯＳ１２２が、該ソフトウェア割り込みハンドラが終了したか否かを判断する（ステップＳ８１７）。スレーブＯＳ１２２が、ソフトウェア割り込みハンドラが終了していないと判断した場合（ステップＳ８１７：Ｎｏ）、ステップＳ８１７に戻る。一方、スレーブＯＳ１２２が、ソフトウェア割り込みハンドラが終了したと判断した場合（ステップＳ８１７：Ｙｅｓ）、マスタＣＰＵ１０１にソフトウェア割り込みハンドラの完了を通知する（ステップＳ８１８）。
【００５５】
また、本実施の形態では、スレーブＣＰＵ１０２上で動作するハイパーバイザ１１２が常時プロセッサ間通信を監視することで、ハイパーバイザ１１２はプロセッサ間割り込み通信を検出している。また、たとえば、マスタＣＰＵ１０１上で動作するハイパーバイザ１１１がプロセッサ間割り込み通信を実施することを、実施直前にスレーブＣＰＵ１０２上で動作するハイパーバイザ１１２に通知し、その後、プロセッサ間割り込み通信を実施してもよい。これにより、スレーブＣＰＵ１０２上で動作するハイパーバイザ１１２は常時監視することなく、ハイパーバイザ１１２はプロセッサ間割り込み通信を検出することができる。
【００５６】
（実施例２）
実施例２では、実行中のタスクが割り込みを許可しているか否かに基づいて優先度の高いソフトウェア割り込みハンドラを直ちに実行させるか、該実行中のタスクが終了またはタスクの切り替えが発生する時に、該ソフトウェア割り込みハンドラを実行させるかを判断する例について説明する。
【００５７】
ここで、実施例２では、実行中のタスクが割り込みを許可していない場合において、実行中のタスクが終了したか否かまたはタスクの切り替えが発生するか否かを示すフラグをＰｒｏｃｅｓｓＩＤとする。ＰｒｏｃｅｓｓＩＤが０であれば、タスクが実行中であることを示し、ＰｒｏｃｅｓｓＩＤが１であれば実行中のタスクが終了したもしくはタスクの切り替えが発生することを示す。
【００５８】
図１０は、実施例２にかかるユースケーステーブルの一例を示す説明図である。ユースケーステーブル１０００では、関数ごとに割り込み時に強制的に処理を実行させるか否かを示す情報と、該関数が実行中に割り込みができるか否かを示す情報を有し、さらに、タスクごとに実行中に割り込みができるか否かを示す情報を有している。たとえば、ＦｕｎｃＡは、「強制ジャンプ」で、「割り込み不可」と記述され、ＦｕｎｃＢは、「ハンドラ処理」で、「割り込み可」と記述されている。
【００５９】
さらに、たとえば、タスクＡは、「−」で、「割り込み可」と記述され、タスクＢは、「−」で、「割り込み可」と記述され、タスクＣは、「−」で、「割り込み不可」と記述されている。なお、本実施の形態では、割り込みハンドラとして関数のみが呼び出されることとしているため、タスクＡ〜タスクＢには割り込み時に強制的に処理を実行させるか否かを示す情報が記述されていない。
【００６０】
たとえば、タスクＡが実行中にソフトウェア割り込みが発生したら、タスクＡに関する実行中に割り込みができるか否かを示す情報は「割り込み可」であるため、タスクＡを退避させてソフトウェア割り込みハンドラを呼び出して実行する。一方、タスクＣに関する実行中に割り込みができるか否かを示す情報が「割り込み不可」である。タスクＣが実行中にソフトウェア割り込みが発生した場合、タスクＣの実行が終了してからもしくはタスクの切り替えが発生するときに、ソフトウェア割り込みハンドラを呼び出して実行する。なお、実施例２においては、共有メモリ１０４にユースケーステーブル１０００が記憶されている。ユースケーステーブル１０００はマルチコアプロセッサシステム１００が起動されると共に各ＣＰＵのキャッシュに記憶させることとしてよい。
【００６１】
図１１は、実施例２において割り込み可のタスクが実行状態を示す説明図である。図１１では、ハードウェア割り込みハンドラが呼び出すソフトウェア割り込みを受けるタスクをタスクＢとする。まず、（１）マスタＣＰＵ１０１に対してハードウェア割り込み要求が発生すると、マスタＯＳ１２１が（２）タスクＡを中断してレディキュー１４１に退避させ、（３）ハードウェア割り込み要求のハードウェア割り込みハンドラを実行する。そして、マスタＯＳ１２１が、ハードウェア割り込みハンドラが呼び出すソフトウェア割り込みハンドラにより割り込みされるタスクＢがいずれのＣＰＵに割り当てられているかを特定する。ここでは、タスクＢがスレーブＣＰＵ１０２で実行中であるため、スレーブＣＰＵ１０２が特定される。
【００６２】
マスタＯＳ１２１が、（４）プロセッサ間割り込み通信によりソフトウェア割り込み要求をスレーブＣＰＵ１０２に通知する。ハイパーバイザ１１２はプロセッサ間通信を監視し、スレーブＣＰＵ１０２への該プロセッサ間割り込み通信を検出する。そして、ハイパーバイザ１１２がユースケーステーブル１０００を用いてソフトウェア割り込み要求のソフトウェア割り込みハンドラが優先度の高い処理であるか否かを判断する。ここでは、ソフトウェア割り込み要求のソフトウェア割り込みハンドラが優先度の高い処理であるとする。
【００６３】
つぎに、ハイパーバイザ１１２が、実行中のタスクを特定し、ユースケーステーブル１０００を用いて該実行中のタスクが該実行中のタスクに優先して割り込み処理を実行させることを許可しているか否かを判断する。ここで、タスクＢは割り込み可能なタスクであると判断される。
【００６４】
タスクＢが割り込み可能なタスクであると判断されると、ハイパーバイザ１１２が、（５）スレーブＣＰＵ１０２に対して疑似ハードウェア割り込み要求を発生する。すなわち、ハードウェア割り込みレジスタにソフトウェア割り込み要求に対応する値を設定する。そして、スレーブＣＰＵ１０２がハードウェア割り込みレジスタに値が設定されることを検出することにより、ハードウェア割り込み要求を検出し、スレーブＯＳ１２２が、（６）実行中のタスクＢをレディキュー１４２へ退避させ、（７）ソフトウェア割り込み要求のソフトウェア割り込みハンドラを実行する。
【００６５】
図１２は、実施例２において割り込み不可のタスクが実行状態を示す説明図（その１）である。図１２では、ハードウェア割り込みハンドラが呼び出すソフトウェア割り込みを受けるタスクをタスクＣとする。図１２の（１）〜（４）については図１１の（１）〜（４）と同一であるため、説明を省略する。
【００６６】
ハイパーバイザ１１２はプロセッサ間通信を監視し、スレーブＣＰＵ１０２への該プロセッサ間割り込み通信を検出する。そして、ハイパーバイザ１１２が実行中のタスクを特定し、ユースケーステーブル１０００を用いて該実行中のタスクＣが割り込み可能なタスクであるか否かを判断する。ここで、タスクＣは割り込み不可のタスクであると判断される。そして、ハイパーバイザ１１２が、（５）ＰｒｏｃｅｓｓＩＤを０に設定する。スレーブＯＳ１２２がプロセステーブル１５１を用いてタスクＣが終了したかもしくはタスクの切り替えが発生するか否かを判断する。
【００６７】
図１３は、実施例２において割り込み不可のタスクが実行状態を示す説明図（その２）である。（６）タスクＣが終了するもしくはタスクの切り替えが発生すると、スレーブＯＳ１２２は、タスクＣの終了を検出し、（７）ＰｒｏｃｅｓｓＩＤ＝１に設定する。ハイパーバイザ１１２は、（８）０から１へＰｒｏｃｅｓｓＩＤが変化したことを検出し、スレーブＣＰＵ１０２に対して疑似ハードウェア割り込み要求を発生させる。そして、該疑似ハードウェア割り込み要求が発生すると、スレーブＯＳ１２２が、（９）ソフトウェア割り込みハンドラを実行する。
【００６８】
（実施例２にかかるマルチコアプロセッサシステム１００による制御処理手順）
図１４は、実施例２にかかるマルチコアプロセッサシステム１００による制御処理手順を示すフローチャートである。マスタＣＰＵ１０１の処理については図８で示した実施例１にかかるマルチコアプロセッサシステム１００による制御処理手順と同一であるため、図示せず説明を省略する。ここでは、マスタＣＰＵ１０１からプロセッサ間割り込み通信をスレーブＣＰＵ１０２が受けた場合の処理について説明する。なお、マスタＣＰＵ１０１の処理についてはステップＳ１４０１〜ステップＳ１４０７（それぞれ図８のステップＳ８０１〜ステップＳ８０７と同一）とする。
【００６９】
まず、スレーブＣＰＵ１０２上で動作するハイパーバイザ１１２は、プロセッサ間通信を監視し、プロセッサ間割り込み通信を検出したか否かを判断する（ステップＳ１４０８）。ハイパーバイザ１１２が、プロセッサ間割り込み通信を検出していないと判断した場合（ステップＳ１４０８：Ｎｏ）、ステップＳ１４０８へ戻る。すなわち、ハイパーバイザ１１２は常時プロセッサ間通信を監視することにより、プロセッサ間割り込み通信を検出することができる。
【００７０】
一方、ハイパーバイザ１１２が、プロセッサ間割り込み通信を検出したと判断した場合（ステップＳ１４０８：Ｙｅｓ）、ユースケーステーブル１０００を用いてソフトウェア割り込み要求のソフトウェア割り込みハンドラは優先度の高い処理であるか否かを判断する（ステップＳ１４０９）。ハイパーバイザ１１２が、ソフトウェア割り込みハンドラは優先度の高い処理であると判断した場合（ステップＳ１４０９：Ｙｅｓ）、実行中のタスクは割り込み可能なプロセスか否かを判断する（ステップＳ１４１０）。
【００７１】
ハイパーバイザ１１２が、実行中のタスクは割り込み可能なプロセスでないと判断した場合（ステップＳ１４１０：Ｎｏ）、ＰｒｏｃｅｓｓｓＩＤ＝０とし（ステップＳ１４１１）、スレーブＯＳ１２２が、実行中のタスクが終了したか、またはタスクの切り替えが発生したか否かを判断する（ステップＳ１４１７）。スレーブＯＳ１２２が、該タスクが実行中であると判断した場合（ステップＳ１４１７：Ｎｏ）、ステップＳ１４１３に戻る。一方、スレーブＯＳ１２２が、実行中のタスクが終了した、またはタスクの切り替えが発生したと判断した場合（ステップＳ１４１７：Ｙｅｓ）、ＰｒｏｃｅｓｓＩＤ＝１とする（ステップＳ１４１８）。
【００７２】
また、ステップＳ１４１１のつぎに、ハイパーバイザ１１２が、ＰｒｏｃｅｓｓＩＤが１か否かを判断し（ステップＳ１４１２）、ＰｒｏｃｅｓｓＩＤが１でないと判断した場合（ステップＳ１４１２：Ｎｏ）、ステップＳ１４１２へ戻る。一方、ＰｒｏｃｅｓｓＩＤが１であると判断した場合（ステップＳ１４１２：Ｙｅｓ）、ハードウェア割り込みレジスタにソフトウェア割り込み要求に関する値を設定する（ステップＳ１４１３）。
【００７３】
スレーブＣＰＵ１０２が、ハードウェア割り込み要求を検出し（ステップＳ１４１４）、スレーブＯＳ１２２が、実行中のタスクを中断してレディキュー１４２に退避させる（ステップＳ１４１５）。つぎに、スレーブＯＳ１２２が、ソフトウェア割り込みハンドラを実行し（ステップＳ１４１６）、ステップＳ１４２０へ移行する。
【００７４】
一方、ステップＳ１４０９において、ハイパーバイザ１１２が、ソフトウェア割り込みハンドラは優先度の高い処理でないと判断した場合（ステップＳ１４０９：Ｎｏ）、ソフトウェア割り込み要求をスレーブＯＳ１２２に通知する（ステップＳ１４１９）。スレーブＯＳ１２２が、ソフトウェア割り込みハンドラをレディキュー１４２に積むことで、ソフトウェア割り込みハンドラを待機させ（ステップＳ１４２０）、待機中の処理を待機順に実行し、ソフトウェア割り込みハンドラを実行する（ステップＳ１４２１）。
【００７５】
ステップＳ１４１６またはステップＳ１４２１のつぎに、スレーブＯＳ１２２が、ソフトウェア割り込みハンドラが終了したか否かを判断する（ステップＳ１４２２）。スレーブＯＳ１２２が、ソフトウェア割り込みハンドラが終了していないと判断した場合（ステップＳ１４２２：Ｎｏ）、ステップＳ１４２０へ戻る。一方、スレーブＯＳ１２２が、ソフトウェア割り込みハンドラが終了したと判断した場合（ステップＳ１４２２：Ｙｅｓ）、マスタＣＰＵ１０１に完了を通知する（ステップＳ１４２３）。
【００７６】
以上説明したように、マルチコアプロセッサシステム、制御プログラム、および制御方法によれば、特定のソフトウェア割り込み要求の割り込み処理を待機させずに実行中の処理に優先して実行させることにより、割り込みの応答時間を高速化することができる。
【００７７】
また、特定のソフトウェア割り込み要求が特定のハードウェア割り込み要求に連動するソフトウェア割り込み要求であることにより、外部デバイスから割り込みの応答時間を高速化することができる。
【００７８】
また、特定のハードウェア割り込み要求がユーザ操作によるハードウェア割り込み要求であることにより、ユーザ操作による割り込みの応答時間を高速化することができ、ユーザが応答時間によるストレスを感じることなく操作することができる。
【００７９】
また、実行中の処理が該実行中の処理に優先してソフトウェア割り込み要求の割り込み処理を実行させることを許可していない場合、実行中の処理が終了後もしくはタスクの切り替えが発生するときに該割り込み処理を実行させる。これにより、優先度の高い実行中の処理を止めることなく、割り込みの応答時間を高速化できる。
【符号の説明】
【００８０】
１００  マルチコアプロセッサシステム
６０１  第１の実行部
６０２  第２の実行部
６０３  要求判断部
６０４  優先判断部
６０５  実行制御部
【図１】
2011121730.tif 000003
【図２】
2011121730.tif 000004
【図３】
2011121730.tif 000005
【図４】
2011121730.tif 000006
【図５】
2011121730.tif 000007
【図６】
2011121730.tif 000008
【図７】
2011121730.tif 000009
【図８】
2011121730.tif 000010
【図９】
2011121730.tif 000011
【図１０】
2011121730.tif 000012
【図１１】
2011121730.tif 000013
【図１２】
2011121730.tif 000014
【図１３】
2011121730.tif 000015
【図１４】
2011121730.tif 000016
【国際調査報告】
2011121730.tif 000017
2011121730.tif 000018
2011121730.tif 000019
2011121730.tif 000020