(57)【要約】【課題】従来の技術では、半導体装置の処理能力の利用効率が悪い問題があった。【解決手段】一実施の形態によれば、半導体装置は、プロセッサ１０上で実施されている複数の処理で共通して利用される共有リソース１３と、共有リソース１３の占有権を制御するセマフォ１２と、プロセッサ上で行われている処理の要求に応じてセマフォ１２に対して共有リソース１３の占有権の獲得処理を行うセマフォ管理部２１と、有し、セマフォ管理部２１は、複数の処理のうち第１の処理から共有リソース１３の占有権の獲得要求を受けた場合において、当該占有権の取得ができなかった場合にプロセッサ２０上で実施されている処理を第２の処理に切り替える制御を行うと共に、第１の処理により要求された占有権の獲得処理をセマフォに対して繰り返し行い。第１の処理に要求された占有権が獲得できた際には、プロセッサ上の処理を第２の処理から第１の処理に切り替える制御を行う。【選択図】図１
2019067289.tif 000002
【特許請求の範囲】
【請求項１】
第１の仮想マシンと第２の仮想マシンとが論理的に構築されるプロセッサと、
前記第１、第２の仮想マシンにより共有される共有リソースと、
前記共有リソースの占有権を前記第１の仮想マシンと前記第２の仮想マシンとのいずれか一方に与えるセマフォと、を有し、
前記プロセッサは、
前記第１、第２の仮想マシンとのいずれを動作状態とするかを切り替える仮想マシン管理部と、
セマフォ管理部と、を有し、
前記セマフォ管理部は、
前記第１、第２の仮想マシンの一方の仮想マシンが前記共有リソースの前記占有権の獲得に失敗した場合には、動作状態となる前記仮想マシンを前記一方の仮想マシンから他方の仮想マシンに切り替えることを前記仮想マシン管理部に指示すると共に、前記一方の仮想マシンによる前記共有リソースの前記占有権の獲得処理を繰り返し、
前記一方の仮想マシンに関する前記共有リソースの前記占有権の獲得状態が失敗から成功した変化したことに応じて、前記仮想マシン管理部に動作状態となる前記仮想マシンを前記他方の仮想マシンから一方の仮想マシンに切り替えることを指示する半導体装置。
【請求項２】
前記セマフォ管理部は、
前記セマフォが前記占有権を与えている前記仮想マシンに関する第１のセマフォ情報を格納するセマフォ比較データレジスタを有し、
前記セマフォ比較データレジスタに格納された前記第１のセマフォ情報と、前記セマフォに対して前記占有権の獲得を要求している前記仮想マシンが前記セマフォに対して発した第２のセマフォ情報と、を比較して２つの情報が不一致であれば前記第２のセマフォ情報を用いたセマフォの獲得を周期的に繰り返す請求項１に記載の半導体装置。
【請求項３】
前記第２のセマフォ情報には、前記第２のセマフォ情報を発した仮想マシンを識別する仮想マシン識別子、前記仮想マシン上で処理されているアプリケーションソフトを識別するアプリケーション識別子、及び、前記仮想マシン上で処理されているアプリケーションソフトのコード上のステップを識別するステップ識別子の少なくとも１つが含まれる請求項２に記載の半導体装置。
【請求項４】
前記占有権の獲得を要求した前記仮想マシンは、前記セマフォ管理部に設けられるスピンロック状態レジスタを参照して、自信が要求した前記占有権を獲得できたか否かを判断する請求項１に記載の半導体装置。
【請求項５】
前記セマフォ管理部は、前記第１の仮想マシンと前記第２の仮想マシンのいずれか一方の仮想マシンに関する前記占有権の獲得処理を前記セマフォに対して行っている場合に、他方の仮想マシンから前記占有権の獲得処理が要求された場合には前記他方の仮想マシンにビジー状態であることを通知する請求項１に記載の半導体装置。
【請求項６】
少なくとも一方が前記プロセッサと同一の構成を備える第１、第２のプロセッサを有し、
前記セマフォは前記第１、第２のプロセッサのいずれのプロセッサに対しても前記共有リソースの前記占有権を与え、
前記セマフォ管理部は、前記第１の仮想マシンと前記第２の仮想マシンのいずれか一方の仮想マシンに関する前記占有権の獲得処理を前記セマフォに対して行っている場合に、他方の仮想マシンから前記占有権の獲得処理が要求された場合には前記他方の仮想マシンにビジー状態であることを通知する請求項１に記載の半導体装置。
【請求項７】
複数のプロセッサと、
前記複数のプロセッサにより共有される共有リソースと、
前記複数のプロセッサで行われている処理の単位毎に前記共有リソースに関する占有権を与えるセマフォと、を有し、
前記複数のプロセッサの少なくとも１つは、セマフォ管理部を有し、
前記セマフォ管理部は、
自プロセッサで行われている第１の処理による前記共有リソースの前記占有権の獲得が失敗した場合には、処理を前記第１の処理から第２の処理に切り替えると共に、前記第１の処理による前記共有リソースの前記占有権を獲得できるまで前記セマフォに対して前記占有権の獲得処理を繰り返し、
前記第１の処理による前記共有リソースの前記占有権の獲得状態が失敗から成功した変化したことに応じて、自プロセッサで行われる処理を前記第２の処理から前記第１の処理に切り替える半導体装置。
【請求項８】
前記第１の処理と前記第２の処理を行うプロセッサは、第１の仮想マシンと第２の仮想マシンと、前記第１の仮想マシンと前記第２の仮想マシンとを切り替えながら動作を制御する仮想マシン管理部と、を有する請求項７に記載の半導体装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は半導体装置に関し、例えば複数の処理プロセスにより共通に用いられる共有リソースを有する半導体装置に関する。
【背景技術】
【０００２】
近年、プログラムを実行するプロセッサ等の半導体装置では、処理速度の向上を図るために複数の演算コアを用いる、１つの演算コア上に論理的に仮想マシンを構築する等の手法を用いて処理の並列化を行っている。このような並列処理を行う半導体装置では、１つのリソース（例えば、メモリ、ＤＡＣ、タイマー等）を複数の処理で共通して用いる場合がある。このように共通して用いられるリソースを共有リソースと称す。共有リソースを利用する場合、複数の処理で共有リソースを制限なく利用すると１つの処理に起因して発生した処理結果が他の処理により破壊される、或いは、１つの処理の処理結果に基づき他の処理が動作して誤動作を発生するおそれがある。そこで、共有リソースを利用する場合には、処理間での動作干渉を避けるために共有リソースの排他制御が行われる。この供給リソースの排他制御の例が特許文献１に開示されている。
【０００３】
特許文献１では、１つのプロセッサ上に２つの仮想マシンを構築し、１つの共有リソースに対して２つの仮想マシンからアクセスを行う。そして、特許文献１では、共有リソースの排他制御を行うセマフォを用いてこの共有リソースに対する排他制御を行う。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国特許第６７９２４９７号明細書
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１に記載の技術では、共有リソースに対する排他制御は行うことができるもの、排他的なアクセスが行われるように設定された共有リソースの利用効率が低く、半導体装置の処理能力を十分に発揮できない問題がある。
【０００６】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【０００７】
一実施の形態によれば、半導体装置は、プロセッサ上で実施されている複数の処理で共通して利用される共有リソースと、
当該共有リソースの占有権を制御するセマフォと、プロセッサ上で行われている処理の要求に応じてセマフォに対して共有リソースの占有権の取得処理を行うセマフォ管理部と、有し、セマフォ管理部は、複数の処理のうち第１の処理から共有リソースの占有権の獲得要求を受けた場合において、当該占有権の取得ができなかった場合にプロセッサ上で実施されている処理を第２の処理に切り替える制御を行うと共に、第１の処理により要求された占有権の獲得処理をセマフォに対して繰り返し行い。第１の処理に要求された占有権が獲得できた際には、プロセッサ上の処理を第２の処理から第１の処理に切り替える制御を行う。
【発明の効果】
【０００８】
前記一実施の形態によれば、仮想マシンの処理効率を高めて半導体装置の処理能力を高めることができる。
【図面の簡単な説明】
【０００９】
【図１】実施の形態１にかかる半導体装置のブロック図である。
【図２】実施の形態１にかかる半導体装置の動作を説明するタイミングチャートである。
【図３】実施の形態１にかかるセマフォ管理部の動作を説明するフローチャートである。
【図４】実施の形態１にかかるセマフォ管理部のスピンロック処理を説明するフローチャートである。
【図５】実施の形態２にかかる半導体装置のブロック図である。
【図６】実施の形態２にかかる半導体装置の動作を説明するタイミングチャートである。
【発明を実施するための形態】
【００１０】
説明の明確化のため、以下の記載及び図面は、適宜、省略、及び簡略化がなされている。また、様々な処理を行う機能ブロックとして図面に記載される各要素は、ハードウェア的には、ＣＰＵ、メモリ、その他の回路で構成することができ、ソフトウェア的には、メモリにロードされたプログラムなどによって実現される。したがって、これらの機能ブロックがハードウェアのみ、ソフトウェアのみ、またはそれらの組合せによっていろいろな形で実現できることは当業者には理解されるところであり、いずれかに限定されるものではない。なお、各図面において、同一の要素には同一の符号が付されており、必要に応じて重複説明は省略されている。
【００１１】
また、上述したプログラムは、様々なタイプの非一時的なコンピュータ可読媒体（ｎｏｎ−ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）を用いて格納され、コンピュータに供給することができる。非一時的なコンピュータ可読媒体は、様々なタイプの実体のある記録媒体（ｔａｎｇｉｂｌｅ  ｓｔｏｒａｇｅ  ｍｅｄｉｕｍ）を含む。非一時的なコンピュータ可読媒体の例は、磁気記録媒体（例えばフレキシブルディスク、磁気テープ、ハードディスクドライブ）、光磁気記録媒体（例えば光磁気ディスク）、ＣＤ−ＲＯＭ（Ｒｅａｄ  Ｏｎｌｙ  Ｍｅｍｏｒｙ）ＣＤ−Ｒ、ＣＤ−Ｒ／Ｗ、半導体メモリ（例えば、マスクＲＯＭ、ＰＲＯＭ（Ｐｒｏｇｒａｍｍａｂｌｅ  ＲＯＭ）、ＥＰＲＯＭ（Ｅｒａｓａｂｌｅ  ＰＲＯＭ）、フラッシュＲＯＭ、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ））を含む。また、プログラムは、様々なタイプの一時的なコンピュータ可読媒体（ｔｒａｎｓｉｔｏｒｙ  ｃｏｍｐｕｔｅｒ  ｒｅａｄａｂｌｅ  ｍｅｄｉｕｍ）によってコンピュータに供給されてもよい。一時的なコンピュータ可読媒体の例は、電気信号、光信号、及び電磁波を含む。一時的なコンピュータ可読媒体は、電線及び光ファイバ等の有線通信路、又は無線通信路を介して、プログラムをコンピュータに供給できる。
【００１２】
実施の形態１
図１に実施の形態１にかかる半導体装置１のブロック図を示す。図１に示すように、実施の形態１にかかる半導体装置１は、プロセッサユニット１０、クロスバスイッチ１１、セマフォ１２、共有リソース１３を有する。なお、図１では、共有リソースとして、１つの共有リソースを示したが、共有リソースは複数設けられていても良い。
【００１３】
プロセッサユニット１０は、例えば、内蔵メモリ（不図示）或いは外部の記憶装置（不図示）に格納されたプログラムを実行する演算部である。クロスバスイッチ１１は、プロセッサユニット１０、セマフォ１２、共有リソース１３の間のデータ、制御信号等の送受信先を切り替える。セマフォ１２は共有リソース１３の占有権を制御する。共有リソース１３は、例えば、メモリ、タイマー、アナログデジタル変換回路、デジタルアナログ変換回路、コプロセッサ等の特定の機能を有する回路である。共有リソース１３は、プロセッサユニット１０上で実行される複数の処理が共通して用いるハードウェアリソースである。
【００１４】
実施の形態１にかかる半導体装置１では、プロセッサユニット１０がプロセッサコア２０、セマフォ管理部２１を有する。そして、プロセッサコア２０には、仮想マシン管理部３０、第１の仮想マシン（例えば、仮想マシン３１）、第２の仮想マシン（例えば、仮想マシン３２）が構成される。仮想マシン管理部３０及び仮想マシン３１、３２は、プロセッサコア２０で実行されるオペレーティングシステム（Operating System）等の基本ソフトの機能によりプロセッサコア２０上に論理的に構成されるものである。
【００１５】
プロセッサコア２０では、仮想マシン３１、仮想マシン３２が別々の処理を行う。また、プロセッサコア２０では、仮想マシン管理部３０が仮想マシン３１を動作させるか、仮想マシン３２を動作させるかを時分割で切り替える。また、仮想マシン管理部３０は、後述するセマフォ管理部２１から発せられる割込信号に応じて動作させる仮想マシンを切り替える。また、以下の説明では、仮想マシン３１が処理する内容を第１の処理、仮想マシン３２が処理する内容を第２の内容と称す。そして、仮想マシン３１、３２は、それぞれ処理内容に応じてセマフォ１２に対して処理に必要な共有リソースに関する占有権を獲得する際には、セマフォ１２に占有権獲得要求を発する。
【００１６】
実施の形態１にかかる半導体装置１では、セマフォ１２に対する占有権獲得要求を行う場合、占有権獲得要求を発した仮想マシンを特定する識別子を占有権獲得要求のための命令中にセマフォ情報として含める。占有権獲得要求は、アプリケーションソフト単位、或いは、ソフトウェアを構成するコードのステップ単位等、様々な単位で行うこともできる。
【００１７】
アプリケーションソフト単位で占有権獲得要求を行う場合、セマフォ情報にはアプリケーションソフトを特定するための識別子が含まれる。なお、アプリケーションソフトを特定するための識別子を利用した場合、アプリケーションソフトと仮想マシンとの対応付けを行うことが好ましい。
【００１８】
また、ソフトウェアを構成するコードのステップ単位で占有権獲得要求を行う場合、セマフォ情報にはアプリケーションソフトを特定するための識別子が含まれる。例えば、処理０〜処理３までを順番に処理させたい場合、処理０実行中の識別子の値は０に設定し、処理０完了後にセマフォ１２内のカウンタのカウント値をインクリメントする。そして、仮想マシンは、セマフォのカウント値が１になったことに応じて処理１を開始する。仮想マシンは、以降、同様の処理を繰り返すことで処理３までの処理を実行する。なお、ステップ毎に識別子を設定する場合、仮想マシンとステップとの対応付けを行う必要がある。
【００１９】
セマフォ管理部２１は、スピン制御部４０、レジスタ４１を有する。スピン制御部４０は、仮想マシン３１又は仮想マシン３２から発せられた占有権獲得要求に基づきセマフォ１２に対して占有権獲得処理を行う。レジスタ４１には、スピン制御部４０が行う占有権獲得処理で利用する各種情報が格納される。図１に示す例では、スピンロック制御レジスタ５１、スピンロック状態レジスタ５２、セマフォアドレスレジスタ５３、セマフォ比較データ５４、セマフォロックデータ５５を有する。なお、レジスタ４１には図示しないレジスタも設けられ、スピン制御部４０の処理では図１に示していない情報も利用する。例えば、スピン制御部４０は、占有権獲得処理において各種タイマーを利用するが、そのタイマーでどれだけの時間を計測するかの設定値を格納するレジスタがレジスタ４１に設けられる。スピン制御部４０の動作を含むセマフォ管理部２１の具体的な動作については後述する。
【００２０】
スピンロック制御レジスタ５１には、スタートフラグが格納される。共有リソース１３の獲得要求を行う仮想マシンは、このスタートフラグを”１”とする。そしてスタートフラグが“１”となったことに応じてスピン制御部４０が動作を開始する。なお、スタートフラグが”１”となっていた場合、セマフォ管理部２１がビジー状態であることを示すため、仮想マシンは、占有権獲得要求を行う時点でスタートフラグが“１”となっている場合は、占有権獲得要求は失敗したものとして動作する。
【００２１】
スピンロック状態レジスタ５２には、共有リソース１３の占有権の獲得状態或いはスピンロック処理の結果を示す値が格納される。例えば、スピンロック状態レジスタ５２に格納される値は、共有リソース１３の占有権の獲得に成功した場合にはサクセス値となり、共有リソース１３の占有権の獲得に失敗した場合にはフェイル値となり、共有リソース１３の占有権を獲得するために占有権獲得処理を繰り返し行うスピンロック処理を規定時間以上行っても占有権の獲得に成功しなかった場合にはタイムアウト値となる。
【００２２】
セマフォアドレスレジスタ５３には、セマフォ１２のアドレス値が格納される。なお、セマフォ１２が複数個ある場合には、セマフォ毎にスピンロック制御レジスタ５１、スピンロック状態レジスタ５２、セマフォアドレスレジスタ５３、セマフォ比較データ５４、セマフォロックデータ５５のセットが設けられる。
【００２３】
セマフォ比較データ５４には、セマフォ１２が占有権をいずれの処理又は仮想マシンにも与えていない状態を示す値が期待値として格納される。例えば、セマフォ１２が共有リソース１３の占有権をいずれの処理或いは仮想マシンにも与えていない場合にはセマフォ比較データ５４には値”０”が格納される。
【００２４】
セマフォロックデータ５５には、スピンロック処理の実行することになった処理或いは仮想マシンの識別子の情報（例えば、セマフォロックデータ）が格納される。
【００２５】
セマフォ１２は、プロセッサユニット１０から占有権獲得要求があった場合において、共有リソース１３をいずれの処理（例えば、仮想マシン）にも占有権を割り当ていなければ、占有権獲得要求を発した仮想マシンに対して共有リソース１３の占有権を与える。また、セマフォ１２は、プロセッサユニット１０から占有権獲得要求があった場合において、共有リソース１３をいずれかの処理（例えば、仮想マシン）に占有権を割り当てているときは、占有権獲得要求を発した仮想マシンに対して共有リソース１３の占有権の付与を拒否する。なお、セマフォ１２は、共有リソース１３の占有権を与えた処理又は仮想マシンを認識する識別情報を格納するレジスタを有する。この識別情報を、セマフォ情報（例えば、セマフォロックデータ）と称す。また、実施の形態１にかかる半導体装置１では、セマフォ１２への占有権獲得要求の発行はセマフォ管理部２１が処理又は仮想マシンに代わって行う。セマフォ情報の詳細は、セマフォ管理部２１に関する詳細な説明の中で説明する。
【００２６】
ここで、セマフォ管理部２１の動作について詳細に説明する。セマフォ管理部２１は、仮想マシン３１、３２から共有リソース１３に関する占有権の獲得要求があった場合に、セマフォ１２に対してその獲得処理を実施する。そして、共有リソース１３の占有権が獲得できた場合には、スピンロック状態レジスタ５２に獲得が成功したことを示すサクセス値を格納する。
【００２７】
一方、セマフォ管理部２１は、仮想マシン３１、３２から共有リソース１３に関する占有権の獲得要求に応じてセマフォ１２に獲得処理を実施した結果、共有リソース１３の占有権の獲得に失敗した場合には、スピンロック状態レジスタ５２に獲得が失敗したことを示すフェイル値を格納する。ここで、フェイル値とは、例えば、セマフォ管理部２１がスピンロック処理を行っている状態を示す値である。また、セマフォ管理部２１は、共有リソース１３の占有権に失敗した場合には、占有権の獲得処理を繰り返し行うスピンロック処理を行う。
【００２８】
さらに、セマフォ管理部２１は、仮想マシン３１、３２の一方の仮想マシンが共有リソース１３の占有権の獲得に失敗した場合には、動作状態となる仮想マシンを一方の仮想マシンから他方の仮想マシンに切り替えることを仮想マシン管理部３０に指示すると共に、一方の仮想マシンによる共有リソース１３の占有権の獲得処理を繰り返す。また、セマフォ管理部２１は、一方の仮想マシンに関する共有リソースの占有権の獲得状態が失敗から成功した変化したことに応じて、仮想マシン管理部に動作状態となる仮想マシンを他方の仮想マシンから一方の仮想マシンに切り替えることを指示する。
【００２９】
続いて、実施の形態１にかかる半導体装置１の動作について説明する。そこで、図２に実施の形態１にかかる半導体装置１の動作を説明するタイミングチャートを示す。図２に示す例では、仮想マシン管理部３０をＶＭＭ、仮想マシン３１をＶＭ１、仮想マシン３２をＶＭ２と示した。
【００３０】
また、図２に示す例では、仮想マシン３１が共有リソース１３の占有権を獲得している状態で、動作する仮想マシンが仮想マシン３１から仮想マシン３２に切り替えられて共有リソース１３の占有権が仮想マシン３１に取得された状態が維持されてしまった場合を示すものである。
【００３１】
図２を参照して実施の形態１にかかる半導体装置１の動作の詳細について説明する。図２に示す例では、まず、仮想マシン３１がセマフォ１２に共有リソース１３の占有権を要求する占有権獲得要求（図２のロック要求ＬＲ（ＶＭ０））を発する。このロック要求に応じてセマフォ管理部２１は、排他的ロード命令（Load Link）をセマフォ１２に与え、現時点でセマフォ１２に格納されているセマフォロックデータを読み込む。また、セマフォ管理部２１は、仮想マシン３１から受け取ったロック要求に含まれる仮想マシン３１の識別子であるセマフォ情報をセマフォロックデータとしてセマフォロックデータ５５に格納する。そして、図２に示す例では、セマフォ１２は、この時点ではいずれの仮想マシンにも共有リソース１３の占有権を与えていないため排他的ロード命令に応じて値“０”を返信する。これにより、セマフォ管理部２１は、セマフォ１２がいずれの仮想マシンにも供給リソース１３の占有権を与えていないことを認識し、排他的ストア命令（Store Conditional）を用いて仮想マシン３１から与えられたセマフォ情報をセマフォ１２に書き込む。この排他的ストア命令が成功したことを図２では成功応答ＳＲと示した。そして、セマフォ管理部２１は、応答要求ＳＲに基づきスピンロック状態レジスタ５２にサクセス値を書き込む。仮想マシン３１はこのサクセス値を参照して、共有リソース１３の占有権を獲得したことを認識する。これにより、仮想マシン３１を共有リソース１３を利用した処理を継続する。
【００３２】
その後、予め決められた仮想マシン切り替えタイミングが来たタイミングで仮想マシン管理部３０が動作させる仮想マシンを仮想マシン３１から仮想マシン３２に切り替える（図２のＴ＿ＳＣＨ）。そして、仮想マシン３２が処理内容に応じて共有リソース１３に関して占有権獲得要求を発する（図２のロック要求ＬＲ（ＶＭ１））。このとき、セマフォ管理部２１は、仮想マシン３２から受け取ったロック要求に含まれる仮想マシン３１の識別子であるセマフォ情報をセマフォロックデータとしてセマフォロックデータ５５に格納する。そして、このロック要求ＬＲ（ＶＭ１）に応じてセマフォ管理部２１は、排他的ロード命令をセマフォ１２に与え、現時点でセマフォ１２に格納されているセマフォロックデータを読み込む。このとき、図２に示す例では、セマフォ１２が仮想マシン３１に共有リソース１３の占有権を与えているため、セマフォ１２は排他的ロード命令に応じて仮想マシン３１に独占権を与えていることを示すセマフォロックデータをセマフォ管理部２１に返信する。これにより、セマフォ管理部２１は、セマフォ１２が仮想マシン３１供給リソース１３の占有権を与えていることを認識する。図２に示す例では、排他的ストア命令を用いて仮想マシン３１から与えられたセマフォ情報をセマフォ１２に書き込む。この排他的ストア命令が成功したことを図２では、セマフォ１２は仮想マシン３１に独占権を与えていることを示すセマフォロックデータ返信したことを失敗応答ＦＲと示した。
【００３３】
セマフォ管理部２１では、スピン制御部４０が失敗応答ＦＲを受け取ったことに応じてスピンロック状態レジスタ５２にフェイル値を格納する。また、スピン制御部４０は、失敗応答ＦＲに受け取ったことに応じて仮想マシン管理部３０に割込信号（セマフォ割込Ｓ＿ＩＮＴ）を発する。仮想マシン管理部３０は、セマフォ割込Ｓ＿ＩＮＴが通知されたことに応じて動作させる仮想マシンを仮想マシン３２から仮想マシン３１に切り替える（図２中のＳ＿ＳＣＨ）。これにより、仮想マシン３１が動作を再開する。また、スピン制御部４０は、スピンロック状態レジスタ５２にフェイル値を書き込んだことに応じてスピンロック処理を開始する。このスピンロック処理では、セマフォ管理部２１がセマフォ１２に対して仮想マシン３２が発した占有権獲得要求に基づく共有リソース１３の占有権の獲得処理を周期的に行う。
【００３４】
そして、図２に示す例では、セマフォ管理部２１がスピンロック処理を継続している期間に動作を再開した仮想マシン３１が占有権開放要求（図２のアンロック要求ＵＬＲ（ＶＭ０））をセマフォ管理部２１を介してセマフォ１２に対して発する。より具体的には、案ロック要求ＵＬＲ（ＶＭ０）を受け取ったセマフォ管理部２１は、セマフォ１２のセマフォロックデータを値“０”に書き換える排他的ストア命令をセマフォ１２に発する。これにより、セマフォ１２は仮想マシン３１に与えていた共有リソース１３の占有権を開放する。そして、その後のスピンロック処理で、セマフォ管理部２１が共有リソース１３に関する占有権の取得に成功すると、セマフォ１２から成功応答ＳＲが返信される。より具体的には、セマフォ管理部２１は、セマフォロックデータ５５に格納されているセマフォロックデータを排他的ストア命令によりセマフォ１２に書き込み、その書き込みが成功したことに応じて、仮想マシン３２が共有リソース１３の占有権を獲得できたことを認識する。図２では、セマフォ管理部２１がセマフォロックデータの書き込みに成功したことを成功応答ＳＲと示した。
【００３５】
そして、セマフォ管理部２１では、スピン制御部４０が成功応答ＳＲを受け取ったことに応じてスピンロック状態レジスタ５２にサクセス値を格納する。また、スピン制御部４０は、成功応答ＳＲに受け取ったことに応じて仮想マシン管理部３０に割込信号（セマフォ割込Ｓ＿ＩＮＴ）を発する。仮想マシン管理部３０は、セマフォ割込Ｓ＿ＩＮＴが通知されたことに応じて動作させる仮想マシンを仮想マシン３１から仮想マシン３２に切り替える（図２中のＳ＿ＳＣＨ）。これにより、仮想マシン３２が共有リソース１３を利用可能な状態で動作を再開する。また、スピン制御部４０は、スピンロック状態レジスタ５２にサクセス値を書き込んだことに応じてスピンロック処理を開始する。さらに、スピン制御部４０は、スピンロック制御レジスタ５１のスタートフラグの値を“１”から“０”書き換えた後にスピンロック処理を終了させて待機状態に移行する。
【００３６】
続いて、セマフォ管理部２１の動作をフローチャートを用いて詳細に説明する。そこで、図３に実施の形態１にかかるセマフォ管理部２１の動作を説明するフローチャートを示す。なお、図３及び図４の説明においては、共有リソース１３に関する占有権を取得することをセマフォ獲得と表す。
【００３７】
図３に示すように、セマフォ管理部２１は、仮想マシンからロック要求を受信したことに応じて処理を開始する。セマフォ管理部２１では、スピン制御部４０が処理を開始するにあたり、スピンロック制御レジスタ５１のスタートフラグの値を“０”から“１”に書き換える（ステップＳ０）。また、図示を省略したが、ステップＳ０では、セマフォ管理部２１は、セマフォロックデータにロック要求を発した仮想マシンに関するセマフォ情報を格納する。次いで、スピン制御部４０は、セマフォ１２からセマフォ１２が保持しているセマフォ情報（例えば、セマフォロックデータ）を取得する（ステップＳ１）。ステップＳ１では、スピン制御部４０が排他的ロード命令（Load Link）を用いた読み出し処理を行う。そして、スピン制御部４０は、セマフォ１２から取得したセマフォ情報とセマフォ比較データ５４に格納されているセマフォ情報とを比較する（ステップＳ２）。図３及び図４に示す例では、セマフォ比較データ５４には、セマフォ管理部２１が共有リソース１３の占有権をいずれの仮想マシンにも与えていないときの値（例えば、値“０”）が設定されている。
【００３８】
そして、ステップＳ２の比較処理において２つの情報が一致した場合、スピン制御部４０は、排他的ストア命令（Store Conditional）を用いて、仮想マシンから与えられたセマフォ情報（例えば、セマフォロックデータ５５に格納されているセマフォロックデータ）をセマフォ１２に書き込むことでセマフォ獲得処理を行う（ステップＳ３）。そして、スピン制御部４０は、セマフォの獲得に成功したことに応じてスピンロック状態レジスタ５２の値（例えば、スピンロックステータス情報）をサクセス値とする（ステップＳ４、Ｓ５）。
【００３９】
一方、ステップＳ２の比較処理において２つの情報が不一致だった場合、又は、ステップＳ４でセマフォの獲得に失敗したと判断された場合、スピン制御部４０は、スピンロック状態レジスタ５２の値（例えば、スピンロックステータス情報）をフェイル値で更新する（ステップＳ６）。なお、ステップＳ４でのセマフォ獲得が失敗する例としては、ステップＳ２のセマフォ１２のセマフォロックデータ確認後からステップＳ４のセマフォ獲得処理前の期間に何らかの処理又は仮想マシンがセマフォを獲得したことにより生じる。また、スピン制御部４０は、セマフォ割込Ｓ＿ＩＮＴをプロセッサコア２０に出力する（ステップＳ７）。これにより、プロセッサコア２０上で動作する仮想マシンが仮想マシン３２から仮想マシン３１に切り替えられる。その後、スピン制御部４０はスピンロック処理を行う（ステップＳ８）。
【００４０】
ここで、ステップＳ８のスピンロック処理について詳細に説明する。図４に実施の形態１にかかるセマフォ管理部２１のスピンロック処理を説明するフローチャートを示す。図４に示すように、スピンロック処理では、スピン制御部４０が予め決められたリトライサイクル時間が経過するまで、共有リソース１３の占有権の獲得処理を待機する（ステップＳ１１）。そして、リトライサイクル時間が経過するとスピン制御部４０は、共有リソース１３の占有権の獲得処理を開始する。
【００４１】
セマフォ獲得処理では、まず、スピン制御部４０が、排他的ロード命令（Load Link）を用いてセマフォ１２からセマフォ１２が保持しているセマフォ情報を取得する（ステップＳ１２）。そして、スピン制御部４０は、セマフォ１２から取得したセマフォ情報とセマフォ比較データ５４に格納されている値“０”とを比較する（ステップＳ１３）。
【００４２】
そして、ステップＳ１３の比較処理において２つの情報が一致した場合、スピン制御部４０は、排他的ストア命令（Store Conditional）を用いて、仮想マシンから与えられたセマフォ情報（例えば、セマフォロックデータ５５に格納されているセマフォロックデータ）をセマフォ１２に書き込むことでセマフォ獲得処理を行う（ステップＳ１４）。そして、スピン制御部４０は、セマフォの獲得に成功したことに応じてスピンロック状態レジスタ５２の値（例えば、スピンロックステータス情報）をサクセス値とする（ステップＳ１５、Ｓ１６）。また、スピン制御部４０は、セマフォ割込Ｓ＿ＩＮＴをプロセッサコア２０に出力する（ステップＳ１７）。これにより、プロセッサコア２０上で動作する仮想マシンが仮想マシン３１から仮想マシン３２に切り替えられる。
【００４３】
一方、ステップＳ１３の比較処理において２つの情報が不一致だった場合、又は、ステップＳ１５でセマフォの獲得に失敗したと判断された場合、スピン制御部４０は、予め設定されたタイムアウト時間が経過するまでステップＳ１１からステップＳ１５までの処理を繰り返す（ステップＳ１８）。このタイムアウト時間は、処理が進まなくなることを防止するものであり、他の仮想マシンがセマフォ獲得状態を解除すると考えられる時間よりも十分に長くすることが好ましい。そして、タイムアウト時間が経過してもセマフォ管理部２１がセマフォを獲得できなかった場合、スピン制御部４０は、スピンロック状態レジスタ５２の値（例えば、スピンロックステータス情報）をタイムアウト値で更新する（ステップＳ１９）。また、スピン制御部４０は、セマフォ割込Ｓ＿ＩＮＴをプロセッサコア２０に出力して、仮想マシンにセマフォの獲得に失敗したことを通知する（ステップＳ２０）。ステップＳ２０、又は、ステップＳ１７の処理が完了したことに応じてセマフォ理部２１はスピンロック処理を終了させる。
【００４４】
上記説明より、実施の形態１にかかる半導体装置１は、仮想マシン（又は所定の処理単位）によって共有リソース１３の占有権の獲得ができなかった場合、プロセッサコア２０上の処理を占有権獲得要求を発した仮想マシン以外の仮想マシンに切り替えると共に、セマフォ管理部２１を用いて本来仮想マシンが行うスピンロック処理を行う。そして、実施の形態１にかかる半導体装置１は、セマフォ管理部２１の動作により共有リソース１３の占有権の獲得に成功した場合には、プロセッサコア２０上の処理をその時点で動作状態となっている仮想マシンから占有権獲得要求を発した仮想マシンに切り替える。
【００４５】
このような処理により、実施の形態１にかかる半導体装置１は、仮想マシンがスピンロック処理を行うことにより仮想マシンの処理が停滞することを防止して、半導体装置の処理効率を高めることができる。
【００４６】
例えば、特許文献１の技術では、仮想マシンは所定の時間間隔で切り替えられながら交互に動作状態となる。そのため、特許文献１の技術では、一方の仮想マシンがセマフォから占有権を取得している場合に一方の仮想マシンから他方の仮想マシンに処理が切り替わった場合、他方の仮想マシンがセマフォから共有リソースの占有権を取得できず、排他権の取得処理を繰り返すスピンロック処理を行う。このようなことから、特許文献１の技術では、一方の仮想マシンにより占有権の開放が行われるまで他方の仮想マシンのスピンロック処理が継続されて他方の仮想マシンの処理が進まなくなる問題がある。しかしながら、実施の形態１にかかる半導体装置１では、特許文献１に記載の技術のように仮想マシンの処理が進まなくなる問題は解消される。
【００４７】
実施の形態２
実施の形態２では、実施の形態１にかかる半導体装置１の別の形態となる半導体装置２について説明する。図５に実施の形態２にかかる半導体装置２のブロック図を示す。なお、実施の形態１で説明した構成要素と同じ構成要素については実施の形態１と同じ符号を付して説明を省略する。
【００４８】
図５に示すように、実施の形態２にかかる半導体装置２は、実施の形態１にかかる半導体装置１にプロセッサユニット１０ｂを追加したものである。また、図５では、図１に示したプロセッサユニット１０の符号をプロセッサユニット１０ａとした。プロセッサユニット１０ｂは、プロセッサユニット１０と同じように仮想マシンが論理的に構成されるものでも良く、仮想マシンが構築されない１つの動作を行うプロセッサユニットであっても良い。つまり、実施の形態２にかかる半導体装置２では、プロセッサユニット１０ａとプロセッサユニット１０ｂの少なくとも一方がプロセッサユニット１０と同じ構成を有していれば良い。
【００４９】
続いて、実施の形態２にかかる半導体装置２の動作について説明する。図６に実施の形態２にかかる半導体装置の動作を説明するタイミングチャートを示す。図６に示す例では、プロセッサユニット１０ｂ（図６のＣＰＵ＿Ｂ）が共有リソース１３の占有権を獲得して、共有リソース１３を利用した処理を行う。
【００５０】
その後、プロセッサユニット１０ａ（図６のＣＰＵ＿Ａ）の仮想マシン３１がセマフォ１２に対して占有権獲得要求（図６のロック要求ＬＲ（ＶＭ０））を発する。しかしながら、共有リソース１３の占有権はすでにプロセッサユニット１０ｂに獲得されてしまっているため、セマフォ管理部２１がセマフォ割込Ｓ＿ＩＮＴを発してプロセッサコア２０上で動作する仮想マシンを仮想マシン３１から仮想マシン３２に切り替える。また、セマフォ管理部２１は、スピンロック処理を開始する。
【００５１】
その後、プロセッサユニット１０ｂが共有リソース１３の占有権を開放した後に、セマフォ管理部２１が共有リソース１３の占有権の獲得に成功したことに応じて、セマフォ管理部２１はセマフォ割込Ｓ＿ＩＮＴを出力し、セマフォ割込Ｓ＿ＩＮＴに基づき仮想マシン管理部３０がプロセッサコア２０上で動作する仮想マシンを仮想マシン３２から仮想マシン３１に戻す。これにより、仮想マシン３１は共有リソース１３を利用した処理を継続することができる状態となる。
【００５２】
上記説明より、実施の形態２にかかる半導体装置２では、セマフォ管理部２１が設けられるプロセッサユニット１０ａとは別のプロセッサユニット１０ｂが設けられる。このような場合においてもプロセッサユニット１０ａにセマフォ管理部２１が設けられていることで、実施の形態２にかかる半導体装置２は、仮想マシン３１、３２の処理の停滞を防止して、半導体装置の処理効率を高めることができる。
【００５３】
実施の形態２にかかる半導体装置２の構成をまとめると、半導体装置は、複数のプロセッサ１０ａ、１０ｂと、複数のプロセッサにより共有される共有リソース１１と、複数のプロセッサで行われている処理の単位毎に共有リソース１３に関する占有権を与えるセマフォ１２と、を有する。そして、半導体装置において、複数のプロセッサの少なくとも１つが、セマフォ管理部２１を有する。そして、セマフォ管理部２１は、自プロセッサで行われている第１の処理による共有リソース１３の占有権の獲得が失敗した場合には、処理を第１の処理から第２の処理に切り替えると共に、第１の処理による共有リソース１３の占有権を獲得できるまでセマフォに対して占有権の獲得処理を繰り返す。また、セマフォ管理部２１は、第１の処理による共有リソースの占有権の獲得状態が失敗から成功した変化したことに応じて、自プロセッサで行われる処理を第２の処理から第１の処理に切り替える。
【００５４】
また、第１の処理と第２の処理を行うプロセッサは、第１の仮想マシンと第２の仮想マシンと、第１の仮想マシンと第２の仮想マシンとを切り替えながら動作を制御する仮想マシン管理部と、を有する。
【００５５】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は既に述べた実施の形態に限定されるものではなく、その要旨を逸脱しない範囲において種々の変更が可能であることはいうまでもない。
【符号の説明】
【００５６】
１  半導体装置
２  半導体装置
１０  プロセッサユニット
１０ａ  プロセッサユニット
１０ｂ  プロセッサユニット
１１  クロスバスイッチ
１２  セマフォ
１３  共有リソース
２０  プロセッサコア
２１  セマフォ管理部
３０  仮想マシン管理部
３１  仮想マシン
３２  仮想マシン
４０  スピン制御部
４１  レジスタ
５１  スピンロック制御レジスタ
５２  スピンロック状態レジスタ
５３  セマフォアドレスレジスタ
５４  セマフォ比較データ
５５  セマフォロックデータ
【図１】
2019067289.tif 000003
【図２】
2019067289.tif 000004
【図３】
2019067289.tif 000005
【図４】
2019067289.tif 000006
【図５】
2019067289.tif 000007
【図６】
2019067289.tif 000008