(57)【要約】      （修正有）【課題】安全かつプロセッサコアの並列利用性を高めたマルチコアプロセッサシステム及びその共有リソース制御方法ならびに制御装置を提供する。【解決手段】複数のプロセッサコアと、スレッドにより共有されうる複数のリソースと、リソース毎にセマフォを付与し、リソースのシーリング値に基づいてスレッドによるリソースの操作時の排他制御を行い、セマフォの組み合せに対して優先プロセッサコアを設定する。第２のプロセッサコア上で実行される第２スレッドが要求した第１のセマフォが、第１のプロセッサコアの第１スレッドにより取得済であり、第２のプロセッサコア上の任意のスレッドが第２のセマフォを取得済である場合、プロセッサコアが優先プロセッサコアでなければ、第２のセマフォを解放させる。【選択図】図６
2012178107.tif 000002
【特許請求の範囲】
【請求項１】
少なくとも第１プロセッサコア及び第２プロセッサコアを有する複数のプロセッサコアと、
前記第１及び第２プロセッサコアで実行されるスレッドにより共有されうる第１リソース及び第２リソースと、
前記第１リソースに第１セマフォを、前記第２リソースに第２セマフォを付与し、前記第１及び第２リソースのシーリング値に基づいたプライオリティ・シーリング方式でスレッドによる前記第１及び第２リソースの操作時の排他制御を行い、前記第１セマフォと前記第２セマフォとの組み合せに対して、前記第１及び第２プロセッサコアの中で優先してセマフォを取得することができる優先プロセッサコアを設定するスレッド制御部と、を備え、
前記スレッド制御部は、前記第２プロセッサコア上で実行される第２スレッドが要求した前記第１セマフォが、前記第１プロセッサコアの第１スレッドにより取得済であり、前記第２プロセッサコア上で実行される任意のスレッドが前記第２セマフォを取得済である場合に、前記第２プロセッサコアが前記優先プロセッサコアでなければ、前記第２セマフォを解放させる、
マルチコアプロセッサシステム。
【請求項２】
前記マルチコアプロセッサシステムは、更に第３リソースを備え、
前記スレッド制御部は、前記第３リソースに第３セマフォを付与し、前記第３セマフォと、前記第１又は第２セマフォとの組み合せに対して、前記第１及び第２のプロセッサコアの中で優先してセマフォを取得することができる優先プロセッサコアを設定する、
請求項１に記載のマルチコアプロセッサシステム。
【請求項３】
前記スレッド制御部は、前記第１セマフォと前記第２セマフォとの組み合せ及び前記第３セマフォと前記第１又は第２セマフォとの組み合せにそれぞれ対応付けた優先番号を保持し、
前記第２プロセッサコア上で実行される前記第２スレッドが要求した前記第１セマフォが、前記第１プロセッサコアの前記第１スレッドにより取得済であり、前記第２プロセッサコア上で実行される任意のスレッドが前記第２セマフォを取得済である場合に、該優先番号順に、前記第２セマフォがある組み合せを参照する、
請求項２に記載のマルチコアプロセッサシステム。
【請求項４】
前記スレッド制御部は、前記第２プロセッサコアが前記優先プロセッサコアであれば、前記第２スレッドを待ち状態にさせる、
請求項１ないし３のいずれか１項に記載のマルチコアプロセッサシステム。
【請求項５】
前記スレッド制御部は、前記第１又は前記第２セマフォを取得したプロセッサコアをセマフォ値として保持する、
請求項１ないし４のいずれか１項に記載のマルチコアプロセッサシステム。
【請求項６】
少なくとも第１プロセッサコア及び第２プロセッサコアを有する複数のプロセッサコアと、前記第１及び第２プロセッサコアで実行されるスレッドにより共有されうる第１リソース及び第２リソースと、を備えたマルチコアプロセッサシステムにおいて、前記第１及び第２リソースのシーリング値に基づいたプライオリティ・シーリング方式でスレッドによる前記第１及び第２リソースの操作時の排他制御を行う共有リソース制御方法であって、
前記第１リソースに第１セマフォを、前記第２リソースに第２セマフォを付与し、
前記第１セマフォと前記第２セマフォとの組み合せに対して、前記第１及び第２プロセッサコアの中で優先してセマフォを取得することができる優先プロセッサコアを設定し、
前記第２プロセッサコア上で実行される第２スレッドが前記第１セマフォを要求し、
前記第１セマフォが前記第１プロセッサコアの第１スレッドにより取得済であり、前記第２プロセッサコア上で実行される任意のスレッドが前記第２セマフォを取得済である場合に、前記第２プロセッサコアが前記優先プロセッサコアでなければ、前記第２セマフォを解放する、
共有リソース制御方法。
【請求項７】
少なくとも第１プロセッサコア及び第２プロセッサコアを有する複数のプロセッサコアと、前記第１及び第２プロセッサコアで実行されるスレッドにより共有されうる第１リソース及び第２リソースと、を備えたマルチコアプロセッサシステムにおいて、前記第１及び第２リソースのシーリング値に基づいたプライオリティ・シーリング方式でスレッドによる前記第１及び第２リソースの操作時の排他制御を行うスレッド制御装置であって、
前記第１リソースに第１セマフォを、前記第２リソースに第２セマフォを付与するリソース管理部と、
前記第１及び前記第２セマフォを取得したプロセッサをセマフォ値として保持するセマフォ管理部と、
前記第１セマフォと前記第２セマフォとの組み合せに対して、前記第１及び第２プロセッサコアの中で優先してセマフォを取得することができる優先プロセッサコアを設定する優先プロセッサ設定・管理部と、
前記第２プロセッサコア上で実行される第２スレッドが要求した前記第１セマフォが、前記第１プロセッサコアの第１スレッドにより取得済であり、前記第２プロセッサコア上で実行される任意のスレッドが前記第２セマフォを取得済である場合に、前記第２プロセッサコアが前記優先プロセッサコアでなければ、前記第２セマフォを解放させる制御実行部と、
を備える制御装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はマルチコアプロセッサシステム、共有リソース制御方法及びスレッド制御装置に関する。
【背景技術】
【０００２】
近年、組み込み用のマイクロプロセッサにおいて処理するソフトウェアの複雑化、高速化に伴い、リアルタイムシステムにおいてもマルチコアプロセッサが普及してきた。その流れの中で、プロセッサコア間を跨いだリソース処理（同期処理や排他制御など）が複雑化することにより、マルチコアプロセッサの排他制御（ロック）に起因するデッドロック問題、又はマルチコアプロセッサの実行効率が落ちる問題が発生しうる。そのため、マルチコアプロセッサの効率的な利用の必要性が高まってきた。
【０００３】
特許文献１では、共有リソースをセマフォ方式で排他制御を行うマルチコアプロセッサシステムの技術が開示されている。このマルチコアプロセッサシステムは、複数のプロセッサコアと、複数のスレッドにより共有されうる複数のリソースと、リソースを管理するリソース管理部と、バイナリ・セマフォ値を管理するバイナリ・セマフォ管理部とを備える。なお、マルチコアプロセッサシステムにおいて実行される逐次処理の単位を、以降では「スレッド」と記述する。
【０００４】
以降、図１０〜１３を用いて、特許文献１に開示されたマルチコアプロセッサシステムの技術を説明する。図１０は、特許文献１に示されたマルチコアプロセッサシステム１００の構成を示すブロック図である。マルチコアプロセッサシステム１００は、複数のプロセッサコアと、複数のリソースと、制御部１３０を備える。
【０００５】
前記複数のプロセッサコアとは、図１０においてプロセッサコア１２１及びプロセッサコア１２２の２個のプロセッサコアである。前記複数のリソースとは、これらのプロセッサコアで実行されるスレッドにより共有可能なリソースであり、図１０では、リソースＡ〜Ｆの６個のリソースを示している。制御部１３０は、スレッドのスケジューリング及びスレッドがリソースを操作する際の排他制御を担う。また、制御部１３０、プロセッサコア１２１及び１２２、リソースＡ〜Ｆは、バス１１０を介して接続されている。
【０００６】
図１１で、制御部１３０の全体構成を示す。制御部１３０は、制御実行部１３２と、リソース管理部１４０と、バイナリ・セマフォ管理部１５０を備える。リソース管理部１４０は、シーリング値管理部１４２とリンク１４４を有し、バイナリ・セマフォ管理部１５０は、セマフォ値管理部１５２と待ちスレッド・キュー１５４を有する。リンク１４４は、リソースと、セマフォ値管理部１５２に記憶された該リソースのセマフォ値と、待ちスレッド・キュー１５４に登録された、該リソースのセマフォを待っている待ちスレッドとを対応付けている。
【０００７】
制御部１３０は、マルチコアプロセッサシステム１００において、プライオリティ・シーリング方式とセマフォ方式を組み合せて、スレッドのスケジューリングとリソースの排他制御を行う。
【０００８】
プライオリティ・シーリング方式とは、共有リソースのセマフォを取得したスレッドの優先度を、該リソースのシーリング値に一時的に変更する手法である。なお、シーリング値は、該リソースを獲得する可能性のあるすべてのスレッドの優先度以上の優先度であり、予め設定されている。
【０００９】
また、制御部１３０は、グループ単位でのセマフォ方式を用いる。具体的には、制御部１３０は、同一のシーリング値を有するリソースが同一のグループに含まれるように、複数のリソースをグループ分けする。その上で制御部１３０は、各グループに１個のセマフォを付与する。
【００１０】
例として、図１０におけるマルチコアプロセッサシステム１００においては、リソースＡはシーリング値が「高」、リソースＢ、Ｃ、Ｄはシーリング値が「中」、リソースＥ、Ｆはシーリング値が「低」である。この場合、上述のグループ単位でのセマフォ方式により、シーリング値が「高」であるリソースＡにはセマフォ１が、「中」であるリソースＢ、Ｃ、Ｄにはセマフォ２が、シーリング値が「低」であるリソースＥ、Ｆにはセマフォ３が、それぞれ付与される。
【００１１】
更に、シーリング値が同一のリソースでも、あるリソース（例えばリソースＤ）を取得する可能性のあるスレッドが、シーリング値が同じその他のリソース（例えばリソースＢとリソースＣ）を獲得対象としない場合がある。その場合、制御部１３０は、該リソースをその他のリソースと別グループに分離し、別のセマフォを付与してもよい。
【００１２】
図１２は、以上で説明したグループ分けに基づいて、シーリング値を設定したリソースに対してセマフォを付与した状態を示す図である。図１２では、リソースＡはシーリング値が「高」であるグループに分けられ、セマフォ１が付与される。リソースＢ、Ｃはシーリング値が「中」であるグループに分けられ、セマフォ３が付与される。リソースＤは、シーリング値が「中」でありリソースＢ、Ｃとは別のグループに分けられ、セマフォ２が付与される。リソースＥは、シーリング値が「低」である１つのグループに分けられ、セマフォ４が付与される。リソースＦは、リソースＥとは別の、シーリング値が「低」であるグループに分けられ、セマフォ５が付与される。なお図１２では、「Ｈ」、「Ｍ」、「Ｌ」は優先度がそれぞれ「高」、「中」、「低」であることを示す。以下も同様に記述する。
【００１３】
図１２では、リソースＤを獲得する可能性のあるスレッドは、シーリング値が同じリソースＢとリソースＣを獲得対象とはしていない。また、リソースＦを獲得する可能性のあるスレッドは、シーリング値が同じリソースＥを獲得対象とはしていない。以上から、制御部１３０は、リソースＤをリソースＢ及びリソースＣとは別グループに、リソースＦをリソースＥとは別グループに分離し、別のセマフォを付与している。
【００１４】
こうすることにより、リソースＤの操作時に、同じシーリング値を有するリソースＢとリソースＣが排他対象にならない。同様に、リソースＥとリソースＦも互いに排他対象にならない。これにより、マルチコアプロセッサシステム１００は、排他待ちの発生率を抑制することができ、プロセッサコアをより効率良く利用できる。
【００１５】
以下、図１３を用いて、リソースの獲得要求が発行された場合の、制御実行部１３２の動作について説明する。制御実行部１３２は、リソースの獲得要求が発行されたとき、リンク１４４を介してセマフォ値管理部１５２を参照し、該リソースのセマフォが取得可能か否かを確認する（ステップＳ１００）。該リソースのセマフォ値が取得可能を示す「０」であれば（ステップＳ１００：Ｙｅｓ）、制御実行部１３２は、取得要求を発行したスレッドに該セマフォを取得させると共に、該セマフォの値を「１」に書き換える（ステップＳ１０２）。また、ステップＳ１０２においてセマフォを取得したスレッドに対して、制御実行部１３２は、その優先度を該リソースのシーリング値に変更する（ステップＳ１２０）。
【００１６】
一方、ステップＳ１００において、セマフォ値が取得不能を示す「１」であれば（ステップＳ１００：Ｎｏ）、制御実行部１３２は、該スレッドを排他待ちスレッドとして待ちスレッド・キュー１５４に登録する（ステップＳ１１２、Ｓ１１４）。なお、ステップＳ１００〜１１４までの処理は、バイナリ・セマフォ方式の処理であり、ステップＳ１２０の処理は、プライオリティ・シーリング方式の処理である。以上が、特許文献１に開示されたマルチコアプロセッサシステムに関する説明である。
【００１７】
また、コンピュータ上の情報処理に関連する技術として、特許文献２では、アクセスの要求発生源と共有のリソースとのアクセス調停方式において、制御線及び信号線をハードウェアとして省略するアクセス調停方式の技術が開示されている。特許文献３では、特定の情報処理部のみが頻繁に競合資源の獲得及び解放を行う場合に、競合資源の獲得の排他性を保証しつつ、競合資源の獲得を高速化する排他制御装置の技術が開示されている。
【先行技術文献】
【特許文献】
【００１８】
【特許文献１】特開２０１０−０２０６８３号公報
【特許文献２】特開平０６−２０５０４１号公報
【特許文献３】特開２００４−１５２１８５号公報
【発明の概要】
【発明が解決しようとする課題】
【００１９】
しかしながら、特許文献１に開示された技術では、あるプロセッサのスレッドが、同一のシーリング値をもつ複数のリソースのうちの一部のリソースを獲得する場合、別プロセッサコアのスレッドは、該複数のリソース中の他のリソースを並列して操作できないという問題がある。その理由は、同一シーリング値を持ち排他対象である複数のリソースが同じグループに分けられて、１つのセマフォが付与されているためである。例えば、図１０〜１３において、プロセッサコア１２１のあるスレッドがリソースＢを操作するためにセマフォ３を取得したとする。その場合、別のプロセッサコア１２２のスレッドが、リソースＢではない（排他制御の対象とならない）リソースＣを操作する場合であっても、セマフォ３の取得待ちが発生してしまう。
【課題を解決するための手段】
【００２０】
本発明にかかるマルチコアプロセッサシステムは、少なくとも第１プロセッサコア及び第２プロセッサコアを有する複数のプロセッサコアと、前記第１及び第２プロセッサコアで実行されるスレッドにより共有されうる第１リソース及び第２リソースと、前記第１リソースに第１セマフォを、前記第２リソースに第２セマフォを付与し、前記第１及び第２リソースのシーリング値に基づいたプライオリティ・シーリング方式でスレッドによる前記第１及び第２リソースの操作時の排他制御を行い、前記第１セマフォと前記第２セマフォとの組み合せに対して、前記第１及び第２プロセッサコアの中で優先してセマフォを取得することができる優先プロセッサコアを設定するスレッド制御部と、を備え、前記スレッド制御部は、前記第２プロセッサコア上で実行される第２スレッドが要求した前記第１セマフォが、前記第１プロセッサコアの第１スレッドにより取得済であり、前記第２プロセッサコア上で実行される任意のスレッドが前記第２セマフォを取得済である場合に、前記第２プロセッサコアが前記優先プロセッサコアでなければ、前記第２セマフォを解放させる。このような構成により、マルチコアプロセッサシステムは各リソースにセマフォを１個ずつ付与しつつデッドロックを防ぐ処理を行うため、安全性及びプロセッサコアの並列利用性を高めることができる。
【００２１】
本発明にかかる共有リソース制御方法は、少なくとも第１プロセッサコア及び第２プロセッサコアを有する複数のプロセッサコアと、前記第１及び第２プロセッサコアで実行されるスレッドにより共有されうる第１リソース及び第２リソースと、を備えたマルチコアプロセッサシステムにおいて、前記第１及び第２リソースのシーリング値に基づいたプライオリティ・シーリング方式でスレッドによる前記第１及び第２リソースの操作時の排他制御を行う共有リソース制御方法であって、前記第１リソースに第１セマフォを、前記第２リソースに第２セマフォを付与し、前記第１セマフォと前記第２セマフォとの組み合せに対して、前記第１及び第２プロセッサコアの中で優先してセマフォを取得することができる優先プロセッサコアを設定し、前記第２プロセッサコア上で実行される第２スレッドが前記第１セマフォを要求し、前記第１セマフォが前記第１プロセッサコアの第１スレッドにより取得済であり、前記第２プロセッサコア上で実行される任意のスレッドが前記第２セマフォを取得済である場合に、前記第２プロセッサコアが前記優先プロセッサコアでなければ、前記第２セマフォを解放する。このような構成により、共有リソース制御方法は各リソースにセマフォを１個ずつ付与しつつデッドロックを防ぐ処理を行うため、安全性及びプロセッサコアの並列利用性を高めることができる。
【００２２】
本発明にかかるスレッド制御装置は、少なくとも第１プロセッサコア及び第２プロセッサコアを有する複数のプロセッサコアと、前記第１及び第２プロセッサコアで実行されるスレッドにより共有されうる第１リソース及び第２リソースと、を備えたマルチコアプロセッサシステムにおいて、前記第１及び第２リソースのシーリング値に基づいたプライオリティ・シーリング方式でスレッドによる前記第１及び第２リソースの操作時の排他制御を行うスレッド制御装置であって、前記第１リソースに第１セマフォを、前記第２リソースに第２セマフォを付与するリソース管理部と、前記第１及び前記第２セマフォを取得したプロセッサをセマフォ値として保持するセマフォ管理部と、前記第１セマフォと前記第２セマフォとの組み合せに対して、前記第１及び第２プロセッサコアの中で優先してセマフォを取得することができる優先プロセッサコアを設定する優先プロセッサ設定・管理部と、前記第２プロセッサコア上で実行される第２スレッドが要求した前記第１セマフォが、前記第１プロセッサコアの第１スレッドにより取得済であり、前記第２プロセッサコア上で実行される任意のスレッドが前記第２セマフォを取得済である場合に、前記第２プロセッサコアが前記優先プロセッサコアでなければ、前記第２セマフォを解放させる制御実行部を備える。このような構成により、スレッド制御装置は各リソースにセマフォを１個ずつ付与しつつデッドロックを防ぐ処理を行うため、安全性及びプロセッサコアの並列利用性を高めることができる。
【発明の効果】
【００２３】
本発明により、安全性及びプロセッサコアの並列利用性を高めたマルチコアプロセッサシステム及びその共有リソース制御方法ならびにスレッド制御装置を提供することができる。
【図面の簡単な説明】
【００２４】
【図１】実施の形態１にかかるマルチコアプロセッサシステムの全体構成例を示すブロック図である。
【図２】実施の形態１にかかる制御部の全体構成例を示すブロック図である。
【図３】実施の形態１にかかるリソース管理部において記憶される、セマフォと共有リソースの組み合せを示す模式図である。
【図４】実施の形態１にかかるセマフォ値管理部の全体構成例を示すブロック図である。
【図５】実施の形態１にかかる優先プロセッサ設定・管理部の全体構成例を示すブロック図である。
【図６】実施の形態１にかかるリソースの取得要求が発行された場合の制御実行部の動作を示すフローチャートである。
【図７】実施の形態１にかかるスレッドによるリソースの操作時に行う排他制御を説明するための模式図である。
【図８】実施の形態１にかかるマルチコアプロセッサにおけるデッドロック回避処理について説明するための、スレッド実行の模式図である。
【図９】実施の形態１にかかるマルチコアプロセッサの並列利用性について説明するための、スレッド実行の模式図である。
【図１０】関連技術にかかるリアルタイムシステムの構成を示すブロック図である。
【図１１】関連技術にかかる制御部の構成を示すブロック図である。
【図１２】関連技術にかかるリアルタイムシステムにおけるリソースのグループ分けを説明するための図である。
【図１３】関連技術にかかるリソースの取得要求が発行された場合の制御実行部の動作を示すフローチャートである。
【発明を実施するための形態】
【００２５】
実施の形態１
以下、図面を参照して本発明の実施の形態について説明する。なお、以下の説明に用いられる図面に、様々な処理を行う機能ブロックとして記載される各要素は、ハードウェア的には、プロセッサ、メモリ、その他の回路で構成することができ、ソフトウェア的には、メモリに記録された、またはロードされたプログラムなどによって実現される。したがって、これらの機能ブロックは、ハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによって様々な形で実現でき、いずれかに限定されるものではない。
【００２６】
前述の通り、特許文献１のマルチコアプロセッサシステム１００では、図１２に示した通り、同じシーリング値をもつリソースＢ及びＣは同じグループに分けられ、同じセマフォを付与される。これにより、プロセッサコア１２１のあるスレッドがリソースＢを操作するためにセマフォ３を取得した場合、別のプロセッサコア１２２のスレッドはリソースＣを操作できず、セマフォ３の取得待ちが発生してしまう。
【００２７】
一方、本実施形態にかかるマルチコアプロセッサシステムにおいては、２つのセマフォの組み合せに対して優先プロセッサコアを設定し、優先プロセッサコアでないプロセッサコアの実行するスレッドが、セマフォを解放するようにしている。これにより、優先プロセッサコアであるプロセッサコアのスレッドが組み合せセマフォを要求した場合、組み合せセマフォを取得することが可能となり、デッドロックが発生しない効果を奏する。
【００２８】
以上により、１つのリソースに対して１つのセマフォを付与することが可能になり、マルチコアプロセッサの並列利用性を高めることができる。具体的には、マルチコアプロセッサにおける排他待ちの発生率を抑制することができる。
【００２９】
図１は、本実施形態にかかるマルチコアプロセッサシステムの全体構成例を示すブロック図である。図１に示されたマルチコアプロセッサシステム（リアルタイムシステム）２００は、複数のプロセッサコアであるプロセッサコア２２１及び２２２と、リソースＡ〜Ｆと、制御部（スレッド制御部、又はスレッド制御装置）２３０とを備えている。また、プロセッサコア２２１及び２２２、制御部２３０、リソースＡ〜Ｆはバス２１０を介して接続されている。
【００３０】
プロセッサコア２２１、２２２は、以降でＰｒ１、Ｐｒ２と略して表記することもあり、例えばＣＰＵで構成される。リソースＡ〜Ｆは、プロセッサコア２２１、２２２で実行されるスレッドにより共有可能な、複数の共有リソースである。制御部２３０は、スレッドのスケジューリング及びスレッドが共有リソースを操作する際の排他制御を担う。
【００３１】
次に図２を用い、制御部２３０の構成について説明する。図２は、制御部２３０の全体構成例を示すブロック図である。制御部２３０は、制御実行部２３２と、リソース管理部２４０と、セマフォ管理部２５０と、優先プロセッサ設定・管理部２６０とを備えている。なお制御部２３０は、ハードウェア的にはＩＣ（Ｉｎｔｅｇｒａｔｅｄ  Ｃｉｒｃｕｉｔ）等で実現され、ソフトウェア的にはセマフォを備えたＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）等で実現される。
【００３２】
また、本実施形態にかかる制御部２３０は、排他制御に際して、プライオリティ・シーリング方式を用いる。前述したように、プライオリティ・シーリング方式は、共有リソースのセマフォを取得したスレッドの優先度を該リソースのシーリング値に一時的に変更する手法である。以降では、スレッドの表記に「Ｈ」、「Ｍ」、「Ｌ」を付けることにより、該スレッドの優先度が「高」、「中」、「低」であることを示す。
【００３３】
制御実行部２３２は、セマフォを用いた下記のようなスケジューリングポリシに基づき、制御を行う。
１．現時点において、実行可能状態にあるスレッドを優先度順にプロセッサコアに割り当てる。例えば、実行可能状態にあるスレッドとして、スレッドＨ１、スレッドＭ１、スレッドＬ１がある場合、まず、スレッドＨ１とスレッドＭ１を、プロセッサコア２２１とプロセッサコア２２２でそれぞれ実行させる。その後、制御実行部２３２は、空いたプロセッサコアでスレッドＬ１を実行させる。
２．同一優先度の場合は先着順とする。「先着順」とは、スレッドが実行可能状態に遷移した順番を意味する。
３．優先度の低いスレッドが実行可能状態になっても、該スレッドの優先度以上の優先度を有するスレッドの実行は中断されない。
４．優先度の高いスレッドが実行可能状態になり、空きプロセッサコアが無い場合には、該スレッドより優先度が低い実行中のスレッドのうちの、最も優先度が低いスレッドの実行を中断してスレッドの切替えを行う。その上で、優先度の高いスレッドを実行させる。
５．リソースの獲得要求を発行したスレッドに対して、該リソースのセマフォが取得可能であることを条件に、該セマフォを取得させる。
６．リソースの解放要求が発行された際に、該リソースのセマフォ待ちをしている排他待ちのスレッドがあるとき、該排他待ちのスレッドをスケジューリングの対象に入れることで起床させる。
なお「実行可能状態」とは、プリエンプトされた他のスレッドが無いとき、またはプリエンプトされた他のスレッドがプロセッサコアの実行権を解放すれば実行できる状態を意味する。
【００３４】
リソース管理部２４０は、シーリング値管理部２４２とリンク２４４とを備える。シーリング値管理部２４２は、リソース毎にシーリング値を記憶している。ここでは、リソースＡに対して「高」優先度を示す「Ｈ」、リソースＢ〜Ｄに対して「中」優先度を示す「Ｍ」、リソースＥ〜Ｆに対して「低」優先度を示す「Ｌ」が記憶されている。
【００３５】
図３は、シーリング値管理部２４２において記憶されるセマフォと共有リソースの組み合せを示す模式図である。図３左側では、１つのリソースに対して、別々に１つのセマフォが付与されリンクされることが示されている。具体的には、シーリング値が「Ｈ」であるリソースＡにはセマフォ１(ＳＥ１)が、シーリング値が「Ｍ」であるリソースＢ、Ｃ、Ｄにはそれぞれセマフォ４(ＳＥ４)、セマフォ３(ＳＥ３)、セマフォ２(ＳＥ２)が、シーリング値が「Ｌ」であるリソースＥ、Ｆにはそれぞれセマフォ６(ＳＥ６)、セマフォ５(ＳＥ５)が付与される。以上のリソースとセマフォの関係に基づき、制御部２３０は排他制御を行う。
【００３６】
図３右側では、優先プロセッサ設定・管理部２６０により２つのセマフォの組み合せが複数設定され、その各々の組み合せに対して優先プロセッサコアが設定されることが示されている。優先プロセッサ設定・管理部２６０の構成は、図５にて詳細に説明する。
【００３７】
以下、図２に戻り説明を行う。リンク２４４は、リソースＡ〜Ｆと、セマフォ値管理部２５２に記憶された該リソースのセマフォと、待ちスレッド・キュー２５４に登録された該リソースのセマフォを待っている待ちスレッドとを対応付ける。
【００３８】
セマフォ管理部２５０は、セマフォ値管理部２５２と待ちスレッド・キュー２５４とを備え、セマフォ値管理部２５２は、セマフォ取得プロセッサ情報部２５６を備える。
【００３９】
図４は、セマフォ値管理部２５２の構成例である。セマフォ値管理部２５２中のセマフォ取得プロセッサ情報部２５６は動的なテーブル情報を有する。このテーブル情報は、複数のセマフォ番号とセマフォ値で構成され、セマフォがどのプロセッサコアにより取得されているかの情報を持っており、セマフォの取得状況によって変化する。ＳＥ１、ＳＥ２、ＳＥ３、ＳＥ４は、セマフォ番号を示しており、それぞれ、セマフォ１、セマフォ２、セマフォ３、セマフォ４のセマフォ番号である。この図ではセマフォの数は４個示されているが、この数は４個に限らない。
【００４０】
また、図４中のＰ０、Ｐ１、Ｐ２は、セマフォ値を示している。Ｐ０は、どのプロセッサコアからもセマフォが取得されていない状態を示し、Ｐ１、Ｐ２は、それぞれ、プロセッサコア２２１、プロセッサコア２２２のスレッドがセマフォを取得している状態を示すプロセッサ番号である。
【００４１】
本実施形態におけるセマフォは、以下のように使用される。
１．スレッドはクリティカルリージョンに入るときにセマフォを取得する（制御実行部２３２がセマフォの値を書きかえる）。ここで、スレッドが実行されているのがプロセッサコア２２１であればセマフォ値を「Ｐ１」に、プロセッサコア２２２であれば「Ｐ２」の値とする。
２．セマフォがいずれかのプロセッサコアにより取得されている（セマフォ値が「Ｐ１」又は「Ｐ２」の値をとっている）期間は、他のスレッドはクリティカルリージョンに入れない。
３．スレッドがセマフォを取得しようとする際、該セマフォが他のスレッドに取得されているときは、セマフォが戻るまで待つ。（ただし、他プロセッサのスレッドが該セマフォ取得済で、かつ、該セマフォとの組み合せセマフォが登録されていて、かつ、自プロセッサが、その組合せの優先プロセッサコアでない場合にはデッドロック回避処理を行う。）
４．スレッドは、クリティカルリージョンから出るときにセマフォを戻す（制御実行部２３２が、セマフォの値を「Ｐ０」の値に書きかえる）。
５．スレッドがセマフォを取得する期間は不可分に（スレッドが切り替わることがなく）実行される。
６．セマフォを戻す期間も不可分に実行される。
７．スレッドがセマフォを戻すときに該セマフォを待っている他のスレッドがあれば、該他のスレッドの待ち状態は解除される。具体的には、制御実行部２３２はそのスレッドを起床させ、待ちスレッド・キュー２５４から削除する処理を行う。
なお、スレッドがセマフォを待つことを「排他待ち」といい、排他待ちをしている区間を「排他待ち期間」という。また、リソースを操作するような、排他処理が必要な区間を「クリティカルリージョン」という。
【００４２】
以上の処理により、複数のスレッドが同時に共有リソースを操作することを回避することができる。なお、スレッドが共有リソースを獲得してから、共有リソースを解放するまでの期間は、「排他処理期間」または「ブロック期間」という。
【００４３】
セマフォ取得プロセッサ情報部２５６におけるテーブル情報は、セマフォ「ＳＥ１、ＳＥ２、ＳＥ３、ＳＥ４、・・・」がそれぞれセマフォ値として「Ｐ０、Ｐ１、Ｐ２」のいずれかの値をとることを示している。セマフォ値はセマフォの取得状態により動的に変更される。すべてのセマフォ値の初期値はＰ０である。
【００４４】
なお、本実施形態にかかるセマフォ取得プロセッサ情報部２５６ではセマフォ値（Ｐ０／Ｐ０以外）とセマフォ取得済プロセッサ番号（Ｐｒ１、Ｐｒ２）とを一緒に管理しているが、セマフォ取得プロセッサ情報部２５６は、バイナリ・セマフォ値（０／１）とセマフォ取得済プロセッサ番号（Ｐｒ１、Ｐｒ２）とを別々に管理するようにしても良い。
【００４５】
セマフォ管理部２５０における待ちスレッド・キュー２５４は、待ちスレッドを一時的に登録する役割を果たす。「待ちスレッド」は、実行可能状態にありながら、プロセッサコアが割り当てられておらず、実行待ちしているスレッドを意味する。本実施形態にかかるマルチコアプロセッサシステム２００において、スレッドの実行待ちは、すべてのプロセッサコアにおいて該スレッド以上の優先度を有するスレッドが動作している場合の通常実行待ちと、該スレッドが獲得しようとするセマフォが他のスレッドにより獲得されている場合の排他待ちがある。排他待ちしている待ちスレッドに対して、待ちスレッド・キュー２５４は、該スレッドが待っているセマフォの情報も登録する。
【００４６】
図５は、本実施形態にかかる優先プロセッサ設定・管理部２６０の全体構成例（セマフォ組み合せ設定部２６２と優先プロセッサ設定部２６４の設定例）を示すブロック図である。優先プロセッサ設定・管理部２６０は、セマフォ組み合せ設定部２６２と優先プロセッサ設定部２６４とを備える。
【００４７】
セマフォ組み合せ設定部２６２は、予め設定された静的なテーブル情報を有する。このテーブル情報は、スレッドにより同時に操作される可能性がある２つのセマフォの組み合せ情報を持つ。具体的には、セマフォ組み合せ設定部２６２は複数のセマフォの組み合せを設定できるように複数のテーブル（図５ではＺ個）を有し、各テーブルには、組み合せる２つのセマフォのセマフォ番号（ＳＥ１、ＳＥ２、ＳＥ３、・・・）が設定されている。つまり、セマフォ組み合せ設定部２６２は、セマフォ値管理部２５２に含まれるセマフォ（セマフォ１、セマフォ２、セマフォ３、・・・）のうち、同時に操作する２つのリソースに対応する２つのセマフォの組み合せを対応付ける。また、各テーブルには、１〜Ｚまでのテーブル番号（優先番号）が設定されている。
【００４８】
優先プロセッサ設定部２６４では、セマフォ組み合せ設定部２６２で設定された２つのセマフォの組み合せに対して、どのプロセッサコアが優先してセマフォを取得できるかが予め設定されている。以下、優先してセマフォを取得できるプロセッサコアを「優先プロセッサコア」と表記する。
【００４９】
優先プロセッサ設定部２６４は静的なテーブル情報を有する。具体的には、静的なテーブル情報は、優先プロセッサコアの番号を持ち、セマフォ組み合せ設定部２６２と同じ数のテーブル数を有する。つまり、優先プロセッサ設定部２６４のテーブル情報におけるテーブル番号（優先番号）は、セマフォ組み合せ設定部２６２のテーブル番号（１、２、・・・、Ｚ）と１対１に対応している。優先プロセッサ設定部２６４の各テーブル番号には、セマフォ組み合せ設定部２６２で設定された、２つのセマフォの組み合せに対応する優先プロセッサコアの番号（Ｐｒ１、Ｐｒ２、・・・）が設定されている。
【００５０】
例えば、セマフォ組み合せ設定部２６２のテーブル番号１では、セマフォ番号「ＳＥ２」と「ＳＥ３」との組み合せが設定されている。そのテーブル番号１に対応する優先プロセッサ設定部２６４のテーブル番号１には、その組み合せにおける優先プロセッサコアの番号「Ｐｒ１」が設定されている。セマフォ組み合せ設定部２６２のテーブル番号２には、セマフォ番号「ＳＥ３」と「ＳＥ４」との組み合せが設定され、対応する優先プロセッサ設定部２６４のテーブル番号２には、その組み合せにおける優先プロセッサコアの番号「Ｐｒ１」が設定されている。同様に、セマフォ組み合せ設定部２６２のテーブル番号３には、セマフォ番号「ＳＥ２」と「ＳＥ４」との組み合せが設定され、優先プロセッサ設定部２６４のテーブル番号３には、その組み合せにおける優先プロセッサコアの番号「Ｐｒ２」が設定されている。このように、優先プロセッサ設定部２６４のテーブル番号には、セマフォ組み合せ設定部２６２の同じテーブル番号のセマフォ組み合せに対応した、優先プロセッサコアの番号が設定されている。
【００５１】
前述の図３右側で示されているのは、以上に示したセマフォ組み合せ及びそれに対応する優先プロセッサコアの設定である。
【００５２】
また、他のリソースと組み合されて取得される可能性がないリソースのセマフォについて、組み合せの設定をする必要はない。例えば、図３右側において、シーリング値が「Ｈ」であるリソースＡのセマフォ１については、他のセマフォとの組み合せ設定はなされていない。
【００５３】
図６は、本発明の制御部２３０においてリソースの獲得要求が発行されたときの、制御実行部２３２の制御を示すフローチャートである。以下、図６を用い、共有リソースを操作する際の制御実行部２３２の処理を説明することで、本実施形態にかかるマルチコアプロセッサシステム２００のメカニズムと効果を説明する。なお、以降では図１〜５の設定を適宜用いる。
【００５４】
まず、スレッドはリソース獲得処理を開始する。ここでは、プロセッサコア２２２（第２プロセッサコア）上で実行されるスレッド（以降、第２スレッドとする）が、任意のリソース（以降、第１リソース）の獲得要求を発行することで、リソース獲得処理が開始される。なお、プロセッサコア２２２上では、第２スレッド以外にも、１又は複数のその他のスレッドが実行されていてもよい。
【００５５】
なお、第２スレッドは、第１リソースを取得済の場合、図６に示すリソース獲得処理を開始しないため、ここでは、第２スレッドは第１リソースを取得していないものとする。
【００５６】
次に制御実行部２３２は、第１リソースのセマフォ（第１セマフォ）が、既にプロセッサコア２２１上のスレッドで取得されているか否かを判定する（ステップＳ２００）。具体的には、制御実行部２３２はリンク２４４に設定されている情報から、要求されたリソースに対応するセマフォ（以降、要求セマフォとも記載。ここでは第１セマフォのこと）のセマフォ番号を求める。そのセマフォ番号に基づき、制御実行部２３２はセマフォ取得プロセッサ情報部２５６（図４）の対応するセマフォ番号のセマフォ値を参照することで、上述の判定を行う。
【００５７】
セマフォ取得プロセッサ情報部２５６（図４）において、要求セマフォに対応するセマフォ番号のセマフォ値が「Ｐ１」ではない場合、制御実行部２３２は、要求セマフォがプロセッサコア２２２上の要求されたスレッドで取得可能と判定する（ステップＳ２００：ＮＯ）。例えば、要求リソースがリソースＡ、リソースＣ、リソースＤのいずれかであり、対応する要求セマフォがセマフォ１、セマフォ２、セマフォ３のいずれかであるような場合である。この場合、図４のセマフォ取得プロセッサ情報部２５６において、要求セマフォのセマフォ値は「Ｐ０」又は「Ｐ２」である。このセマフォ値は、要求セマフォがどのプロセッサコアのスレッドからもセマフォ取得されていないためセマフォ取得可能であるか、又は、既にプロセッサコア２２２上における第２スレッド以外のスレッドが取得済であることを示している。なお、前述の通り、図６におけるリソース獲得処理においては、要求セマフォが第２スレッドによって取得されている場合は考慮しなくてよい。
【００５８】
この場合、制御実行部２３２は、要求セマフォのセマフォ値を参照して、要求セマフォがプロセッサコア２２２上のスレッドで取得されているか否かを判定する（ステップＳ２１０）。つまり、制御実行部２３２はセマフォ取得プロセッサ情報部２５６（図４）において、要求セマフォのセマフォ値が「Ｐ２」であるか否かを判定する。
【００５９】
要求セマフォのセマフォ値が「Ｐ２」である場合、要求セマフォは、既にプロセッサコア２２２上における第２スレッド以外のスレッドによって取得されている（ステップＳ２１０：ＹＥＳ）。例えば、要求リソースがリソースＣであり、対応する要求セマフォがセマフォ３であるような場合である。この場合、図４のセマフォ取得プロセッサ情報部２５６において、セマフォ３に対応するセマフォ値は「Ｐ２」である。要求セマフォが、プロセッサコア２２２上における第２スレッド以外のスレッドにより取得されている場合、制御実行部２３２は、プロセッサコア２２２上の第２スレッドを待ちスレッド・キュー２５４に登録する（ステップＳ２４０）。その後、第２スレッドを待ち状態へ遷移させ（ステップＳ２４２）、制御実行部２３２はリソース取得処理を終了する。
【００６０】
次に、要求セマフォのセマフォ値が「Ｐ０」であり、要求セマフォがどのプロセッサコアのスレッドでも取得されていない場合（ステップＳ２１０：ＮＯ）について説明する。その場合、制御実行部２３２は、プロセッサコア２２２上の第２スレッドに要求セマフォを取得させる処理を行う（ステップＳ２１２）。例えば、要求リソースがリソースＡであり、対応する要求セマフォがセマフォ１であるような場合である。その場合、制御実行部２３２は、図４のセマフォ取得プロセッサ情報部２５６におけるセマフォ１のセマフォ値を「Ｐ０」から、プロセッサコア２２２上のスレッドが取得済であることを示す「Ｐ２」に書き換える。以上のステップＳ２１２の処理は、制御実行部２３２が、取得要求を発行したプロセッサコア２２２上の第２スレッドに要求セマフォを取得させるために行う。
【００６１】
ステップＳ２１２の後、制御実行部２３２は、セマフォを取得した第２スレッドの優先度を要求リソースのシーリング値に変更する（ステップＳ２２０）。例えば、要求リソースがリソースＡ、要求セマフォがセマフォ１である場合、制御実行部２３２は図３のシーリング値管理部２４２を参照し、要求リソース（リソースＡ）のシーリング値がＨであることを検出する。ここで第２スレッドの優先度がＬである場合、制御実行部２３２は第２スレッドの優先度をＨに変更する。以上の処理は、プライオリティ・シーシング方式に基づいている。以上の処理の後、制御実行部２３２はリソース獲得処理を終了する。
【００６２】
なお、第２スレッドの優先度と要求リソースのシーリング値とが同じ値である場合、制御実行部２３２は第２スレッドの優先度変更を行わない。例えば、要求リソースがリソースＤ、要求セマフォがセマフォ２である場合、制御実行部２３２は図３のシーリング値管理部２４２を参照し、要求リソース（リソースＤ）のシーリング値がＭであることを検出する。ここで第２スレッドの優先度がＭである場合、要求リソースのシーリング値と第２スレッドの優先度は同一の値であることから、制御実行部２３２は第２スレッドの優先度を変更しない。
【００６３】
以下、ステップＳ２００の処理に戻って説明を行う。ステップＳ２００において、セマフォ取得プロセッサ情報部２５６（図４）において要求セマフォに対応するセマフォ番号のセマフォ値が「Ｐ１」であれば、制御実行部２３２は要求セマフォが取得可能ではないと判定する（ステップＳ２００：ＹＥＳ）。例えば、要求リソースがリソースＢであり、対応する要求セマフォがセマフォ４であるような場合である。この場合、図４のセマフォ取得プロセッサ情報部２５６において、セマフォ４のセマフォ値は、プロセッサコア２２１（第１プロセッサコア）のスレッド（以降、第１スレッドとする）が取得済である「Ｐ１」を示している。つまり、プロセッサコア２２２の第２スレッドはセマフォ４を取得できない。
【００６４】
以上の場合、制御実行部２３２は、セマフォ組み合せ設定部２６２（図５）において、要求セマフォ番号があるセマフォの組み合せが登録されているか否かを参照する（ステップＳ２３０）。例えば、要求セマフォがセマフォ４である場合、制御実行部２３２は図５のセマフォ組み合せ設定部２６２において設定されているテーブルを、テーブル番号順に（１番から順に）、セマフォ４のセマフォ番号（ＳＥ４）があるセマフォの組み合せが登録されているか否かを参照する。
【００６５】
セマフォ組み合せ設定部２６２に設定された全てのテーブルにおいて、要求セマフォ番号が登録されていない場合（ステップＳ２３０：ＮＯ）、制御実行部２３２はリソースの取得要求を発行したプロセッサコア２２２上の第２スレッドを排他待ちスレッドとして、待ちスレッド・キュー２５４に登録する（ステップＳ２４０）。例えば、図５のセマフォ組み合せ設定部２６２のテーブルには、ＳＥ１が登録されていない。そのため、プロセッサコア２２２上の第２スレッドがセマフォ１を要求セマフォとし、セマフォ１がプロセッサコア２２１上の第１スレッドにより取得済である場合、制御実行部２３２はプロセッサコア２２２上の第２スレッドを排他待ちスレッドとして、待ちスレッド・キュー２５４に登録する。その後、制御実行部２３２は第２スレッドを待ち状態（排他待ちの状態）へ遷移させて（ステップＳ２４２）、リソース取得処理を終了する。
【００６６】
ステップＳ２３０において、組み合せセマフォが登録されているテーブルがある場合（ステップＳ２３０：ＹＥＳ）を以下で説明する。つまり、その場合、制御実行部２３２は、セマフォ組み合せ設定部２６２において、要求セマフォがある最も上位の番号のテーブルを参照している。そして、制御実行部２３２は、要求セマフォと組み合せるセマフォ（以下、組み合せセマフォとも表記）の番号を調べ、セマフォ取得プロセッサ情報部２５６（図４）の対応する組み合せセマフォ番号のセマフォ値を参照する。以上により、制御実行部２３２は、組み合せセマフォがプロセッサコア２２２の任意のスレッド（第２スレッド、又はプロセッサコア２２２で実行されるその他のスレッド）により取得済であるか否かを判定する（ステップＳ２３２）。
【００６７】
例えば、要求セマフォがセマフォ４である場合、制御実行部２３２は図５のセマフォ組み合せ設定部２６２のテーブルをテーブル１から順番に参照することで、テーブル２に要求セマフォの組み合せがあることを検出する。テーブル２における組み合せセマフォはセマフォ３であることから、制御実行部２３２は、図４のセマフォ取得プロセッサ情報部２５６を参照し、組み合せセマフォがプロセッサコア２２２の任意のスレッドにより取得済であるか否かを判定する。
【００６８】
組み合せセマフォがプロセッサコア２２２上の任意のスレッドにより取得済でない場合（ステップＳ２３２：ＮＯ）、制御実行部２３２は、すべてのテーブルを参照したか否かを判定する（ステップＳ２３４）。
【００６９】
制御実行部２３２は、全てのテーブルを参照していない場合（ステップＳ２３４：ＮＯ）、ステップＳ２３０に戻って処理を行う。具体的には、前のステップＳ２３２において参照したテーブル番号のすぐ下のテーブル番号から、要求セマフォが登録されているテーブルの有無をテーブル番号順に参照する。このようにして、制御実行部２３２は、要求セマフォが登録されているテーブルを、テーブル番号順に参照する。
【００７０】
制御実行部２３２は、ステップＳ２３４において、要求セマフォが登録された全てのテーブルを参照したが、組み合せセマフォがプロセッサコア２２２上の任意のスレッドにより取得済でない場合（ステップＳ２３４：ＹＥＳ）、リソースの取得要求を発行したプロセッサコア２２２上の第２スレッドを排他待ちスレッドとして、待ちスレッド・キュー２５４に登録する（ステップＳ２４０）。例えば、全てのテーブル１〜Ｚのうち、要求セマフォを含むテーブルに対応するセマフォ値が「Ｐ０」又は「Ｐ１」であるような場合である。
【００７１】
その後、第２スレッドを待ち状態へ遷移させ（ステップＳ２４２）、制御実行部２３２はリソース取得処理を終了する。
【００７２】
制御実行部２３２が参照したセマフォ組み合せ設定部２６２のあるテーブルにおいて、組み合せセマフォの値が、プロセッサコア２２２の任意のスレッドが取得済であることを示す「Ｐ２」の場合（ステップＳ２３２：ＹＥＳ）を以下で説明する。例えば、要求セマフォがセマフォ４であり、図５のセマフォ組み合せ設定部２６２のテーブル２における組み合せセマフォがセマフォ３で、図４のセマフォ取得プロセッサ情報部２５６におけるセマフォ３のセマフォ値が「Ｐ２」であるような場合である。
【００７３】
その場合、制御実行部２３２は、要求セマフォと組み合せセマフォを組み合せた場合の優先プロセッサコア番号が、プロセッサコア２２２であるか否かを判定する（ステップＳ２３６）。例えば、制御実行部２３２は図５のセマフォ組み合せ設定部２６２のテーブル２（要求セマフォがセマフォ４、組み合せセマフォがセマフォ３）を参照している場合を考える。その場合、制御実行部２３２は、セマフォ組み合せ設定部２６２のそのテーブル番号と同じ番号（テーブル２）の、図５の優先プロセッサ設定部２６４のテーブルを参照して優先プロセッサコア番号を検出する。
【００７４】
優先プロセッサコアの値が「Ｐｒ１」である（プロセッサコア２２２が優先でない）場合（ステップＳ２３６：ＮＯ）、制御実行部２３２は、デッドロック回避処理として、組み合せセマフォを解放する（ステップＳ２３８）。例えば、制御実行部２３２は図５のセマフォ組み合せ設定部２６２のテーブル２を参照した場合、図５の優先プロセッサ設定部２６４のテーブル２において優先プロセッサコアの値は「Ｐｒ１」である。その場合、制御実行部２３２はデッドロック回避処理として、組み合せセマフォであるセマフォ３を解放する。また、このとき、制御実行部２３２は、待ちスレッド・キュー２５４の登録状態を参照し、セマフォ３を待つプロセッサコア２２１のスレッドとプロセッサコア２２２の任意のスレッドがともに登録されていた場合には、優先プロセッサコアであるプロセッサコア２２１のスレッドを優先するように待ちスレッド・キュー２５４を操作してもよい。制御実行部２３２は、以上でリソース獲得処理を終了する。
【００７５】
優先プロセッサコアの値が「Ｐｒ２」である（プロセッサコア２２２が優先である）場合（ステップＳ２３６：ＹＥＳ）、制御実行部２３２は、プロセッサコア２２２の第２スレッドを排他待ちスレッドとして、待ちスレッド・キュー２５４に登録する（ステップＳ２４０）。
【００７６】
ステップＳ２４０の後、制御実行部２３２は、リソースの獲得要求を発行したプロセッサコア２２２上の第２スレッドを待ち状態へ遷移（ステップＳ２４２）して、リソース獲得処理を終了する。
【００７７】
以上により、プロセッサコア２２２上の第２スレッドの要求セマフォがプロセッサコア２２１の第１スレッドにおいて取得済であり、かつ、組み合せセマフォがプロセッサコア２２２の任意のスレッドにおいて取得済である場合、プロセッサコア２２２が優先プロセッサコアでなければ、プロセッサコア２２２は組み合せセマフォを解放する。これにより、プロセッサコア２２１とプロセッサコア２２２のスレッド間でのデッドロックを防ぐことができる。
【００７８】
具体的に言えば、次の通りである。従来のように、プロセッサコア２２２上の第２スレッドの要求セマフォがプロセッサコア２２１の第１スレッドにおいて取得済であり、かつ、組み合せセマフォがプロセッサコア２２２の第２スレッドにおいて取得済である状態を放置したとする。その場合、プロセッサコア２２１の第１スレッドが組み合せセマフォを要求することにより、デッドロック状態が発生する。これは、プロセッサコア２２１及び２２２のどちらのスレッドも、相手が要求しているセマフォを解放していないためである。
【００７９】
一方、本実施形態にかかるマルチコアプロセッサシステム２００においては、優先プロセッサコアを設定し、優先プロセッサコアでないプロセッサコアの実行するスレッドが、組み合せセマフォを解放するようにしている。これにより、優先プロセッサコアであるプロセッサコアのスレッドが組み合せセマフォを要求した場合、組み合せセマフォを取得することが可能となり、デッドロックが発生しない効果を奏する。
【００８０】
なお、プロセッサコア２２１上のスレッドがセマフォの取得要求を発行した場合には、制御実行部２３２は、上記の説明の「プロセッサコア２２１」、「Ｐ１」及び「プロセッサコア２２２」、「Ｐ２」をそれぞれ逆にして同様の処理を行う。
【００８１】
また本実施形態にかかるマルチコアプロセッサシステム２００においてはプライオリティ・シーリング方式を用いているため、同一のプロセッサコアにおける複数のスレッド間では、デッドロックの問題は発生しない。
【００８２】
以下、図７〜９を用いて、各プロセッサにおけるスレッドの実行状況を説明することで、本実施形態にかかるマルチコアプロセッサシステム２００のメカニズムと効果を異なる観点から説明する。
【００８３】
図７は、スレッドによるリソースの操作時の排他制御を説明するための模式図である。図７では、プロセッサが実行中のスレッドが、あるリソースのセマフォを取得してから解放するまでのスレッドの状態が示されている。スレッドがセマフォを取得してから、そのセマフォを解放する期間（スレッドがリソースを獲得してから、そのリソースを解放するまでの期間）は排他処理期間であり、図７において太い矢印で示されている。排他処理期間中は、他のスレッドはリソースを操作することができない。スレッドは、リソースの操作完了後、セマフォ解放要求を発行してセマフォを解放する。これにより、複数のスレッドが同時に同じリソースを操作することを回避することができる。
【００８４】
図８は、本実施形態にかかるマルチコアプロセッサシステム２００におけるデッドロック回避処理について説明するための、スレッド実行の模式図である。なお、図８、図９におけるセマフォの組み合せ及びその優先プロセッサの設定については、図５における優先プロセッサ設定により、予め設定されている。また、図８の時刻ｔ２から時刻ｔ４におけるセマフォの取得状態は図４に示されている。
【００８５】
図８の時刻ｔ０（初期時刻）においては、優先度が「低」であるスレッドＬ１（第１スレッド）がプロセッサコア２２１（第１プロセッサコア）、優先度が「中」であるスレッドＭ２（第２スレッド）がプロセッサコア２２２（第２プロセッサコア）で、それぞれ実行されている。時刻ｔ０において、図５に示すセマフォ取得プロセッサ情報部２５６のセマフォ値は、すべて取得可能の状態「Ｐ０」である。
【００８６】
時刻ｔ１において、スレッドＬ１がリソースＢ（第１リソース）を要求すると、制御実行部２３２はリソースＢとリンクしているセマフォ４（第１セマフォ）の取得処理を行う。具体的には、図４に示されるセマフォ取得プロセッサ情報部２５６のセマフォ４のセマフォ値が「Ｐ０」であるため、制御実行部２３２はセマフォ４が取得可能と判定し、そのセマフォ値を「Ｐ１」に変更する。また、制御実行部２３２は、スレッドＬ１の優先度ＬをリソースＢのシーリング値であるＭに変更する。制御実行部２３２が以上の処理を行った上で、スレッドＬ１がセマフォ４を取得する。以上の制御実行部２３２の処理は、図６におけるステップＳ２００、２１０、２１２、２２０の処理に対応している。
【００８７】
時刻ｔ２において、スレッドＭ２がリソースＣ（第２リソース）を要求すると、制御実行部２３２はリソースＣとリンクしているセマフォ３（第２セマフォ）の取得処理を行う。図４に示されるセマフォ取得プロセッサ情報部２５６のセマフォ３のセマフォ値が「Ｐ０」であるため、制御実行部２３２はセマフォ４が取得可能と判定し、そのセマフォ値を「Ｐ２」に変更する。制御実行部２３２が以上の処理を行った上で、スレッドＭ２がセマフォ３を取得する。以上の制御実行部２３２の処理は、図６におけるステップＳ２００、２１０、２０２、２２０の処理に対応している。なお、スレッドＭ２の優先度Ｍは、リソースＣのシーリング値であるＭと同じであるため、制御実行部２３２はスレッドＭ２の優先度変更の処理を行わない。
【００８８】
時刻ｔ３において、スレッドＬ１がリソースＣを要求すると、制御実行部２３２はリソースＣとリンクしているセマフォ３の取得を試みる。しかし、図４に示されるセマフォ取得プロセッサ情報部２５６のセマフォ３のセマフォ値は「Ｐ２」であるため、制御実行部２３２はセマフォ３の取得ができない。そのため、制御実行部２３２は、要求されたセマフォ３の組み合せ対象である組み合せセマフォが登録されているか否かを、セマフォ組み合せ設定部２６２（図５）のテーブルを参照して確認する。以上の制御実行部２３２の処理は、図６におけるステップＳ２００、２３０の処理に対応している。
【００８９】
セマフォ組み合せ設定部２６２の、番号１のテーブルにはセマフォ２とセマフォ３の組み合せが登録されている。制御実行部２３２はまずその組み合せを参照して、要求セマフォ（セマフォ３）が登録されていることを判定する。次に制御実行部２３２は、組み合せセマフォ（セマフォ２）がプロセッサコア２２１により取得済であるか否かを判定するために、セマフォ取得プロセッサ情報部２５６のセマフォ２のセマフォ値を参照する。図４においては、セマフォ２のセマフォ値は未取得状態を示す「Ｐ０」である。また、制御実行部２３２は全ての組み合せを未だ参照していない。以上から、制御実行部２３２はテーブル番号２以降のテーブルを参照する。以上の制御実行部２３２の処理は、図６におけるステップＳ２３２、２３４の処理に対応している。
【００９０】
セマフォ組み合せ設定部２６２の番号２のテーブルには、セマフォ３とセマフォ４の組み合せが登録されており、制御実行部２３２はその組み合せを参照して、要求セマフォ（セマフォ３）が登録されていることを判定する。その上で、制御実行部２３２は組み合せセマフォであるセマフォ４が取得済であるか否かを判定するために、セマフォ取得プロセッサ情報部２５６のセマフォ４のセマフォ値を参照する。図４において、セマフォ４のセマフォ値は「Ｐ１」であるため、セマフォ４はプロセッサコア２２１により取得済である。以上の制御実行部２３２の処理は、図６におけるステップＳ２３２の処理に対応している。
【００９１】
セマフォ４はプロセッサコア２２１により取得済であるから、制御実行部２３２はこの組み合せに対する優先プロセッサがプロセッサコア２２１優先であるか否かを判定するために、優先プロセッサ設定部２６４のテーブル番号２の値を参照する。テーブル番号２の値は「Ｐｒ１」であり、プロセッサコア２２１が優先であるため、プロセッサコア２２１上のスレッドが待ち状態に遷移してもデッドロック発生の可能性はない。ここから、制御実行部２３２は、スレッドＬ１を、待つセマフォがセマフォ４であるという情報と関連付けて待ちスレッド・キュー２５４に登録し、スレッドＬ１はセマフォ取得待ち状態（排他待ち状態）に遷移する。以上の制御実行部２３２の処理は、図６におけるステップＳ２４０、２４２の処理に対応している。
【００９２】
時刻ｔ４において、スレッドＭ２がリソースＢを要求すると、制御実行部２３２はリソースＢとリンクしているセマフォ４の取得を試みる。しかし、セマフォ取得プロセッサ情報部２５６のセマフォ４(ＳＥ４)のセマフォ値が「Ｐ１」であるため（図４を参照）、制御実行部２３２はセマフォ４を取得できない。そのため、要求されたセマフォ４の組み合せ対象である組み合せセマフォが登録されているか否かを、制御実行部２３２は図５に示すセマフォ組み合せ設定部２６２のテーブルを参照して確認する。以上の制御実行部２３２の処理は、図６におけるステップＳ２００、２３０の処理に対応している。
【００９３】
セマフォ組み合せ設定部２６２の番号１のテーブルには、セマフォ２(ＳＥ２)とセマフォ３(ＳＥ３)の組み合せが登録されている。セマフォ２（第３セマフォ）はリソースＤ（第３リソース）のセマフォであり、要求セマフォ（セマフォ４）ではない。制御実行部２３２はまずこのテーブルを参照し、要求セマフォ（セマフォ４）が登録されていないことを判定して、次の番号のテーブルを参照する。
【００９４】
セマフォ組み合せ設定部２６２のテーブル番号２のテーブルには、セマフォ３(ＳＥ３)とセマフォ４(ＳＥ４)の組み合せが登録されている。制御実行部２３２はこのテーブルを参照し、要求セマフォ（セマフォ４）が登録されていることを判定する。ここから、組み合せ対象のセマフォ３がプロセッサコア２２２により取得済であるか否かを判定するため、制御実行部２３２はセマフォ取得プロセッサ情報部２５６のセマフォ３(ＳＥ３)のセマフォ値を参照する。図４において、セマフォ３のセマフォ値が「Ｐ２」であり、セマフォ３はプロセッサコア２２２により取得済である。このため、制御実行部２３２はこの組み合せに対する優先プロセッサがプロセッサコア２２２優先であるか否かを、図５に示す優先プロセッサ設定部２６４のテーブル番号２の値を参照し、確認する。以上の制御実行部２３２の処理は、図６におけるステップＳ２３２、２３６の処理に対応している。
【００９５】
優先プロセッサ設定部２６４のテーブル番号２の値は、プロセッサコア２２２が非優先であることを示す「Ｐｒ１」である。
【００９６】
以上から、時刻ｔ４〜ｔ５において、制御実行部２３２はデッドロック回避処理として、スレッドＭ２に対し、組み合せセマフォであるセマフォ３を解放させる。つまり、スレッドＭ２は、セマフォ３の解放要求を発行する。制御実行部２３２は図４に示すセマフォ取得プロセッサ情報部２５６のセマフォ３(ＳＥ３)のセマフォ値を「Ｐ０」に変更し、セマフォ３を解放する。以上の制御実行部２３２の処理は、図６におけるステップＳ２３８の処理に対応している。なお、セマフォ３の解放に関しては、図８では便宜上、時刻ｔ５で行われるように表記している。
【００９７】
時刻ｔ５において、制御実行部２３２は待ちスレッド・キュー２５４に、セマフォ３を待っている排他待ちスレッドの有無を確認する。該当する排他待ちスレッドとしてスレッドＬ１があるので、制御実行部２３２はこのスレッドを起床させると共に、待ちスレッド・キュー２５４から削除する。以上より、スレッドＬ１はセマフォ３の取得を要求する。制御実行部２３２は、図４に示されるセマフォ取得プロセッサ情報部２５６のセマフォ３(ＳＥ３)のセマフォ値を「Ｐ１」に変更し、スレッドＬ１はセマフォ３を取得する。
【００９８】
また、時刻ｔ５〜ｔ６において、スレッドＭ２はリトライ処理としてセマフォ３取得を再び要求する。
【００９９】
時刻ｔ６において、スレッドＬ１がセマフォ３の解放要求を行うと、制御実行部２３２は図４に示すセマフォ取得プロセッサ情報部２５６のセマフォ３(ＳＥ３)のセマフォ値を「Ｐ０」に変更し、セマフォ３を解放する。セマフォ３の解放により、制御実行部２３２はスレッドＭ２のリトライ処理（セマフォ３取得の再要求）に応じて、セマフォ取得プロセッサ情報部２５６のセマフォ３(ＳＥ３)のセマフォ値を「Ｐ２」に変更する。以上の処理の後、スレッドＭ２はセマフォ３を取得する。
【０１００】
時刻ｔ７において、スレッドＬ１がセマフォ４の解放要求を行うと、制御実行部２３２は図４に示すセマフォ取得プロセッサ情報部２５６のセマフォ４(ＳＥ４)のセマフォ値を「Ｐ０」に変更し、セマフォ４の解放処理を行う。また、制御実行部２３２はスレッドＬ１の優先度を、リソースＢのシーリング値であるＭから元の優先度Ｌに戻す。
【０１０１】
なお時刻ｔ７以降において、スレッドＭ２がセマフォ４の取得要求を行った場合に、スレッドＭ２はセマフォ４を取得することができる。（プロセッサコア２２２は非優先プロセッサコアであるため、スレッドＭ２は上記の過程で待ちスレッド・キュー２５４に登録されていない。）
【０１０２】
以上のように、本実施形態にかかるマルチコアプロセッサシステム２００は、セマフォ組み合せ設定部２６２および優先プロセッサ設定部２６４により、２つのセマフォの組み合せとその組み合せに対して優先プロセッサを設定する機能を有する。これにより、異なるプロセッサで実行されている２つのスレッドが、互いが取得しているリソースの取得要求を発行するようなデッドロックの問題を回避することができる。
【０１０３】
図９は、本実施形態にかかるマルチコアプロセッサシステム２００の並列利用性について説明するための、スレッド実行の模式図である。図９は、図８において示したマルチコアプロセッサシステム２００の状態及び処理動作を簡略化した図であり、制御実行部２３２等は図８と同じ処理を行っている。そのため、以下の説明では、図８と同内容の説明については適宜省略する。
【０１０４】
図９において、まずスレッドＬ１は時刻ｔ１から時刻ｔ３までリソースＢを使用する。スレッドＭ２は、時刻ｔ２におけるリソースＣの取得要求により、時刻ｔ２から時刻ｔ４までリソースＣを使用する。
【０１０５】
時刻ｔ４において、スレッドＭ２がリソースＢの取得要求を行う。制御実行部２３２は前述と同様の処理を行って、セマフォ３を解放する。
【０１０６】
スレッドＬ１は、時刻ｔ５におけるセマフォ３の取得要求により、時刻ｔ５から時刻ｔ６までリソースＣを使用する。また、時刻ｔ５から時刻ｔ７まで、リソースＢを使用する。スレッドＭ２はリトライ処理により、時刻ｔ６以降、リソースＣを使用する。
【０１０７】
このように、本実施形態にかかるマルチコアプロセッサシステム２００では、スレッドＬ１がリソースＢのセマフォ４を取得している時刻ｔ２から時刻ｔ７の間も、スレッドＭ２はセマフォ３を取得してリソースＣを操作することが可能な期間が生じる。つまり、スレッドＬ１とスレッドＭ２の並列実行は可能である。
【０１０８】
特許文献１のマルチコアプロセッサシステム１００では、図１２に示した通り、同じシーリング値をもつリソースＢ及びＣは同じグループに分けられ、同じセマフォを付与される。この方法では、時刻ｔ２でスレッドＭ２がリソースＣのセマフォ３を取得してから時刻ｔ７で解放するまでの間、セマフォ３は既に取得済の状態となっているため、制御実行部２３２はスレッドＭ２を並列実行することができなかった。前述の通り、本実施形態にかかるマルチコアプロセッサシステム２００では、時刻ｔ２から時刻ｔ７の間も、制御実行部２３２はスレッドＭ２を並列実行することができる。
【０１０９】
以上で説明したとおり、本実施形態にかかるマルチコアプロセッサシステム２００では、あるスレッドが同じシーリング値をもつ複数のリソース中の１個のリソースを操作する場合、別プロセッサのスレッドが、該複数のリソース中の別の１個のリソースを操作すること（並列実行）が可能である。具体的には、スレッドのセマフォ取得処理において、制御実行部２３２は、セマフォ取得プロセッサ情報部２５６と優先プロセッサ設定・管理部２６０を参照し、組み合せセマフォの取得状況と、その組み合せのセマフォに対する優先プロセッサを調べる。優先プロセッサがプロセッサコア２２１かプロセッサコア２２２かに応じて、制御実行部２３２は、スレッドを待ち状態に遷移させるか、組み合せセマフォを解放させてデッドロック回避処理をさせるかの処理を行う。以上により、１つのリソースに対して１つのセマフォを付与することが可能になり、マルチコアプロセッサの並列利用性を高めることができる。具体的には、マルチコアプロセッサにおける排他待ちの発生率を抑制することができる。
【０１１０】
なお、本発明は上記実施の形態に限られたものではなく、趣旨を逸脱しない範囲で適宜変更することが可能である。例えば、上記実施の形態のマルチコアプロセッサシステム２００においてプロセッサコアは２個としたが、３個以上あってもよい。例えば、プロセッサコアがプロセッサコア１、２、３の３個ある場合、優先プロセッサ設定は、プロセッサコア１をプロセッサコア２及び３よりも優先されるといったように設定される。あるいは、プロセッサコア３よりもプロセッサコア２が優先され、プロセッサコア２及び３よりもプロセッサコア１が優先されるといったように、３個のプロセッサコア中で優先順位を設定してもよい。その他の制御部の処理については、上述の通りである。
【符号の説明】
【０１１１】
２００  マルチコアプロセッサシステム
２１０  バス
２２１  プロセッサコア
２２２  プロセッサコア
２３０  制御部
２３２  制御実行部
２４０  リソース管理部
２４２  シーリング値管理部
２４４  リンク
２５０  セマフォ管理部
２５２  セマフォ値管理部
２５４  待ちスレッド・キュー
２５６  セマフォ取得プロセッサ情報部
２６０  優先プロセッサ設定・管理部
２６２  セマフォ組み合せ設定部
２６４  優先プロセッサ設定部
【図１】
2012178107.tif 000003
【図２】
2012178107.tif 000004
【図３】
2012178107.tif 000005
【図４】
2012178107.tif 000006
【図５】
2012178107.tif 000007
【図６】
2012178107.tif 000008
【図７】
2012178107.tif 000009
【図８】
2012178107.tif 000010
【図９】
2012178107.tif 000011
【図１０】
2012178107.tif 000012
【図１１】
2012178107.tif 000013
【図１２】
2012178107.tif 000014
【図１３】
2012178107.tif 000015