(57)【要約】【課題】多数のＣＰＵコアを有する計算機おいて、特定のＣＰＵコアを優先するとともに、高速に処理することができる計算機の排他制御方式を実現する。【解決手段】計算機１００は複数のＣＰＵコア１１１を備え、リソースロック情報４１１にリソースロック状態を設定しているＣＰＵコア１１１が、リソースロック情報４１１にリソースアンロック状態を設定する際に、該ＣＰＵコア１１１の優先コアＩＤを格納する優先コアＩＤ格納部４３２を備え、各ＣＰＵコア１１１は、リソースロック情報４１１にリソースロック状態を設定する際に、優先コアＩＤ格納部４３２に優先コアＩＤが格納されているか否かを判定し、優先コアＩＤが格納されていないと判定した場合に、ロック変数４３１をロック状態に設定する。【選択図】図１
2014182507.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサと、前記複数のプロセッサにより共有される共有リソースとを備える計算機において、
前記共有リソースがロックされているリソースロック状態であるか、あるいは、前記共有リソースがロックされていないリソースアンロック状態であるかが設定されるリソースロック情報を記憶装置に記憶するリソースロック情報記憶部と、
前記リソースロック情報に対するアクセスがロックされているアクセスロック状態であるか、あるいは、前記リソースロック情報に対するアクセスがロックされていないアクセスアンロック状態であるかが設定されるアクセスロック情報を記憶装置に記憶するアクセスロック情報記憶部と、
前記リソースロック情報に前記リソースロック状態を設定しているプロセッサが、前記リソースロック情報に前記リソースアンロック状態を設定する際に、前記プロセッサを識別する識別子がリソースアンロック用優先識別子として格納される優先識別子格納部と
を備え、
前記複数のプロセッサの各プロセッサは、
前記リソースロック情報に前記リソースロック状態を設定する際に、前記優先識別子格納部に前記リソースアンロック用優先識別子が格納されているか否かを判定し、前記リソースアンロック用優先識別子が格納されていないと判定した場合に、前記アクセスロック情報に前記アクセスロック状態を設定するアクセスロック設定部と、
前記アクセスロック設定部により前記アクセスロック情報に前記アクセスロック状態が設定されると、前記リソースロック情報に対して前記リソースロック状態を設定するリソースロック設定部と、
前記リソースロック設定部により前記リソースロック情報が前記リソースロック状態に設定されると、前記アクセスロック情報に前記アクセスアンロック状態を設定するアクセスロック解放部とを備えることを特徴とする計算機。
【請求項２】
前記アクセスロック設定部は、
前記リソースロック情報に前記リソースロック状態を設定する際に、前記優先識別子格納部に前記リソースアンロック用優先識別子が格納されていると判定した場合に、前記優先識別子格納部から前記リソースアンロック用優先識別子が削除されるまで待機し、前記優先識別子格納部から前記リソースアンロック用優先識別子が削除されると、前記アクセスロック情報に前記アクセスアンロック状態が設定されているか否かを判定し、前記アクセスロック情報に前記アクセスアンロック状態が設定されている場合に前記アクセスロック情報に前記アクセスロック状態を設定し、前記アクセスロック情報に前記アクセスアンロック状態が設定されていない場合には、前記アクセスロック情報が前記アクセスアンロック状態となるまで待機し、前記アクセスロック情報が前記アクセスアンロック状態になると、前記アクセスロック情報に前記アクセスロック状態を設定することを特徴とする請求項１に記載の計算機。
【請求項３】
前記アクセスロック設定部は、
前記リソースロック情報に前記リソースアンロック状態を設定する際に、前記アクセスロック情報に前記アクセスロック状態が設定されているか否かを判定し、前記アクセスロック情報に前記アクセスロック状態が設定されている場合には、前記優先識別子格納部に自プロセッサを識別する識別子を前記リソースアンロック用優先識別子として格納し、前記アクセスロック情報が前記アクセスアンロック状態となるまで待機し、前記アクセスロック情報が前記アクセスアンロック状態になると、前記アクセスロック情報に前記アクセスロック状態を設定し、
前記複数のプロセッサの各プロセッサは、さらに、
前記アクセスロック設定部により前記アクセスロック情報に前記アクセスロック状態が設定されると、前記リソースロック情報に対して前記リソースアンロック状態を設定するリソースロック解放部を備え、
前記アクセスロック解放部は、
前記リソースロック解放部により前記リソースロック情報が前記リソースアンロック状態に設定されると、前記アクセスロック設定部が格納した前記リソースアンロック用優先識別子を前記優先識別子格納部から削除するとともに、前記アクセスロック情報に前記アクセスアンロック状態を設定するとことを備えることを特徴とする請求項２に記載の計算機。
【請求項４】
前記優先識別子格納部は、前記複数のプロセッサの各プロセッサに対応するフラグを有し、前記フラグをオン状態とすることにより、前記オン状態の前記フラグに対応するプロセッサを前記リソースアンロック用優先識別子が格納されたプロセッサとすることを特徴とする請求項１〜３のいずれかに記載の計算機。
【請求項５】
記憶装置と、複数のプロセッサと、前記複数のプロセッサにより共有される共有リソースと、前記共有リソースがロックされているリソースロック状態であるか、あるいは、前記共有リソースがロックされていないリソースアンロック状態であるかが設定されるリソースロック情報を前記記憶装置に記憶するリソースロック情報記憶部と、前記リソースロック情報に対するアクセスがロックされているアクセスロック状態であるか、あるいは、前記リソースロック情報に対するアクセスがロックされていないアクセスアンロック状態であるかが設定されるアクセスロック情報を前記記憶装置に記憶するアクセスロック情報記憶部と、前記複数のプロセッサの各プロセッサを識別する識別子を格納する優先識別子格納部とを備える計算機の排他制御方法において、
前記リソースロック情報に前記リソースロック状態を設定しているプロセッサが、前記リソースロック情報に前記リソースアンロック状態を設定する際に、前記プロセッサを識別する識別子をリソースアンロック用優先識別子として格納する優先識別子格納ステップと、
前記複数のプロセッサの各プロセッサのアクセスロック設定部が、前記リソースロック情報に前記リソースロック状態を設定する際に、前記優先識別子格納部に前記リソースアンロック用優先識別子が格納されているか否かを判定し、前記リソースアンロック用優先識別子が格納されていないと判定した場合に、前記アクセスロック情報に前記アクセスロック状態を設定するアクセスロック設定ステップと、
前記複数のプロセッサの各プロセッサのリソースロック設定部が、前記アクセスロック設定部により前記アクセスロック情報に前記アクセスロック状態が設定されると、前記リソースロック情報に対して前記リソースロック状態を設定するリソースロック設定ステップと、
前記複数のプロセッサの各プロセッサのアクセスロック解放部が、前記リソースロック設定部により前記リソースロック情報が前記リソースロック状態に設定されると、前記アクセスロック情報に前記アクセスアンロック状態を設定するアクセスロック解放ステップと
を備えることを特徴とする排他制御方法。
【請求項６】
記憶装置と、複数のプロセッサと、前記複数のプロセッサにより共有される共有リソースと、前記共有リソースがロックされているリソースロック状態であるか、あるいは、前記共有リソースがロックされていないリソースアンロック状態であるかが設定されるリソースロック情報を前記記憶装置に記憶するリソースロック情報記憶部と、前記リソースロック情報に対するアクセスがロックされているアクセスロック状態であるか、あるいは、前記リソースロック情報に対するアクセスがロックされていないアクセスアンロック状態であるかが設定されるアクセスロック情報を前記記憶装置に記憶するアクセスロック情報記憶部と、前記複数のプロセッサの各プロセッサを識別する識別子を格納する優先識別子格納部とを備える計算機の排他制御プログラムにおいて、
前記リソースロック情報に前記リソースロック状態を設定しているプロセッサが、前記リソースロック情報に前記リソースアンロック状態を設定する際に、前記プロセッサを識別する識別子をリソースアンロック用優先識別子として格納する優先識別子格納処理と、
前記複数のプロセッサの各プロセッサのアクセスロック設定部が、前記リソースロック情報に前記リソースロック状態を設定する際に、前記優先識別子格納部に前記リソースアンロック用優先識別子が格納されているか否かを判定し、前記リソースアンロック用優先識別子が格納されていないと判定した場合に、前記アクセスロック情報に前記アクセスロック状態を設定するアクセスロック設定処理と、
前記複数のプロセッサの各プロセッサのリソースロック設定部が、前記アクセスロック設定部により前記アクセスロック情報に前記アクセスロック状態が設定されると、前記リソースロック情報に対して前記リソースロック状態を設定するリソースロック設定処理と、
前記複数のプロセッサの各プロセッサのアクセスロック解放部が、前記リソースロック設定部により前記リソースロック情報が前記リソースロック状態に設定されると、前記アクセスロック情報に前記アクセスアンロック状態を設定するアクセスロック解放処理と
を前記計算機に実行させることを特徴とする排他制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、計算機及び排他制御方法及び排他制御プログラムに関するものである。特に、マルチコアＣＰＵ（Ｃｅｎｔｒａｌ・Ｐｒｏｃｅｓｓｉｎｇ・Ｕｎｉｔ）を搭載した計算機におけるＣＰＵコア間の排他制御方法に関するものである。
【背景技術】
【０００２】
一般的に、ＣＰＵコア間の共有リソースの排他制御は、共有リソースが利用可能であるかどうかを示す排他フラグを共有メモリ領域に配置し、排他フラグのセット（これをロックの獲得という）に成功したＣＰＵコアのみに共有リソースのアクセス権を与えることで実現する。ロックの獲得に失敗したＣＰＵコアは、排他フラグのクリア（これをロックの解放という）を待つ必要がある。ロックの解放を待つ方式として、一般的に、スピンロックとセマフォの二つの方式がある。
【０００３】
スピンロックは、ロックの解放をビジーループで監視して待つ方式である。
セマフォは、ロックの獲得に失敗したタスクの実行を停止し、他のタスクへのコンテキストスイッチを行う。共有リソースの利用が完了したＣＰＵコアは、ロックを解放する際に、ロックの獲得に失敗したタスクが動作するＣＰＵコアに対してロックの解放を通知する。ロック解放の通知を受けたＣＰＵコアは、ロックの獲得に失敗したタスクの実行を再開し、該タスクが再びロックの獲得を試みる（例えば、特許文献１）。
【０００４】
スピンロックの待ち方式には、ビジーループでロック解放を監視するため、ＣＰＵ時間を占有してしまうというという問題点がある。一方で、セマフォの待ち方式は、ロック解放の通知を受けるまで他のタスクを実行することができるため、ＣＰＵ時間を有効活用できるという利点がある。しかし、セマフォの待ち方式には、ＯＳ（Ｏｐｅｒａｔｉｎｇ・Ｓｙｓｔｅｍ）によるコンテキストスイッチのオーバヘッドが発生するという問題点がある。
したがって、短時間（ＯＳによるコンテキストスイッチより短い時間）でロックが獲得できると予想される共有リソースに対しては、スピンロックによる排他制御が有効である。
【０００５】
しかし、多数のＣＰＵコアを有する計算機では、定常時は短時間でロックの獲得が可能であっても、突発的に多数のＣＰＵコアから同時にロック獲得要求が発生した場合において、スピンロックの待ち時間が設計時の想定より長くなるという問題点がある。
このようなスピンロックの競合が発生した場合、ロックの獲得の順番はバスアクセスなどのタイミングに依存する。しかし、優先すべき処理を行っているＣＰＵコアに対しては、優先的にロックを獲得させることが必要である。
【０００６】
特許文献２では、特定のＣＰＵコアを優先することが可能な排他制御装置が開示されている。特許文献２の排他制御装置は、ＣＰＵコア外部の専用ハードウェアとして実現され、複数のＣＰＵコアに対応付けて配置された優先度レジスタと、前記優先度レジスタごとに配置されたフラグ状態保持手段と、前記優先度レジスタに設定された優先度を比較し、最も高い優先度が設定された前記優先度レジスタに対応する前記フラグ状態保持手段にロック状態を設定する優先度比較回路を有する。そして、ロック状態になった前記フラグ状態保持手段に対応付けられたＣＰＵコアに、該フラグ状態保持手段を備えた排他制御装置に対応する共有リソースのロックを許可することによって、特定のＣＰＵコアを優先することが可能なスピンロックを実現していた。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開平１１−３０６０３５号公報
【特許文献２】特開２０１２−２２６７０９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
しかし、特許文献２の排他制御装置は、専用ハードウェアなので、コストが増加するという課題がある。また、特許文献２の排他制御装置は、共有リソースごとに配置する必要があり、例えばメモリ上の共有データのように一般的に数が多いリソースを排他制御対象とする場合に、特にコストが増加する。
【０００９】
また、ＣＰＵコアごとに優先度レジスタを配置するという特許文献２の排他制御装置の構成をソフトウェアで実現すると、自身のＣＰＵコアの優先度が最高であるかどうかを検査する処理によるオーバヘッドが発生するという課題がある。
図１２は、特許文献２の排他制御装置の構成をソフトウェアで実現した場合におけるロック獲得の処理の一例である。
ステップＳ１０１において、排他制御装置は、ビジーループの繰り返しごとに自身のＣＰＵコアの優先度が最高であるかどうかの検査を行うが、この処理はＣＰＵコア数に対してＯ（ｎ）の計算量であり、多数のＣＰＵコアを有する計算機システムでは特にこの処理のオーバヘッドが課題となる。
【００１０】
本発明は、上記のような課題を解決するためになされたもので、多数のＣＰＵコアを有する計算機において、特定のＣＰＵコアを優先することができるとともに、高速に処理することができる計算機を実現することを目的とする。
【課題を解決するための手段】
【００１１】
本発明に係る計算機は、
複数のプロセッサと、前記複数のプロセッサにより共有される共有リソースとを備える計算機において、
前記共有リソースがロックされているリソースロック状態であるか、あるいは、前記共有リソースがロックされていないリソースアンロック状態であるかが設定されるリソースロック情報を記憶装置に記憶するリソースロック情報記憶部と、
前記リソースロック情報に対するアクセスがロックされているアクセスロック状態であるか、あるいは、前記リソースロック情報に対するアクセスがロックされていないアクセスアンロック状態であるかが設定されるアクセスロック情報を記憶装置に記憶するアクセスロック情報記憶部と、
前記リソースロック情報に前記リソースロック状態を設定しているプロセッサが、前記リソースロック情報に前記リソースアンロック状態を設定する際に、前記プロセッサを識別する識別子がリソースアンロック用優先識別子として格納される優先識別子格納部と
を備え、
前記複数のプロセッサの各プロセッサは、
前記リソースロック情報に前記リソースロック状態を設定する際に、前記優先識別子格納部に前記リソースアンロック用優先識別子が格納されているか否かを判定し、前記リソースアンロック用優先識別子が格納されていないと判定した場合に、前記アクセスロック情報に前記アクセスロック状態を設定するアクセスロック設定部と、
前記アクセスロック設定部により前記アクセスロック情報に前記アクセスロック状態が設定されると、前記リソースロック情報に対して前記リソースロック状態を設定するリソースロック設定部と、
前記リソースロック設定部により前記リソースロック情報が前記リソースロック状態に設定されると、前記アクセスロック情報に前記アクセスアンロック状態を設定するアクセスロック解放部とを備えることを特徴とする。
【発明の効果】
【００１２】
本発明に係る計算機によれば、リソースロック情報にリソースロック状態を設定しているプロセッサが、前記リソースロック情報にリソースアンロック状態を設定する際に、前記プロセッサを識別する識別子がリソースアンロック用優先識別子として格納される優先識別子格納部を備え、前記複数のプロセッサの各プロセッサは、リソースロック情報に前記リソースロック状態を設定する際に、前記優先識別子格納部に前記リソースアンロック用優先識別子が格納されているか否かを判定し、前記リソースアンロック用優先識別子が格納されていないと判定した場合に、前記アクセスロック情報に前記アクセスロック状態を設定するアクセスロック設定部を備えているので、多数のプロセッサを有する計算機において、特定のプロセッサを優先することができるとともに、高速に処理することができるという効果を奏する。
【図面の簡単な説明】
【００１３】
【図１】実施の形態１における計算機１００のブロック構成図である。
【図２】実施の形態１に係る優先コアＩＤ格納部４３２の構成の一例を示す図である。
【図３】実施の形態１におけるＯＳ実行部１５０の詳細ブロック図である。
【図４】実施の形態１におけるＯＳ間セマフォ獲得部２１０がＯＳ間セマフォ４００の獲得を要求するセマフォ獲得要求処理Ｓ２００のフローチャートである。
【図５】実施の形態１における非優先スピンロック獲得部２５０がスピンロック４３０を獲得する非優先スピンロック獲得処理Ｓ４００のフローチャートである。
【図６】実施の形態１における非優先スピンロック解放部２６０がスピンロック４３０を解放する非優先スピンロック解放処理Ｓ５００のフローチャートである。
【図７】実施の形態１におけるＯＳ間セマフォ解放部２２０がＯＳ間セマフォ４００を解放するセマフォ解放処理Ｓ３００のフローチャートである。
【図８】実施の形態１における優先スピンロック獲得部２３０がスピンロック４３０を獲得する優先スピンロック獲得処理Ｓ６００のフローチャートであり、（ａ）は優先スピンロック獲得処理Ｓ６００のフローチャートであり、（ｂ）は優先スピンロック獲得処理の他の例である優先スピンロック獲得処理Ｓ６００ｂのフローチャートである。
【図９】実施の形態１における優先スピンロック解放部２４０がスピンロック４３０を解放する優先スピンロック解放処理Ｓ７００のフローチャートである。
【図１０】実施の形態１に係る優先コアＩＤ格納部４３２がない構成の場合のスピンロック４３０競合時のタイミングチャートである。
【図１１】実施の形態１に係る優先コアＩＤ格納部４３２がある構成の場合のタイミングチャートである。
【図１２】比較のための排他制御方法を示すフローチャートである。
【発明を実施するための形態】
【００１４】
実施の形態１．
図１は、本実施の形態における計算機１００のブロック構成図である。
図１において、計算機１００は、ＣＰＵ１１０、ＲＡＭ（Ｒａｎｄｏｍ・Ａｃｃｅｓｓ・Ｍｅｍｏｒｙ）１２０、ＲＯＭ（Ｒｅａｄ・Ｏｎｌｙ・Ｍｅｍｏｒｙ）１３０、Ｉ／Ｏ（Ｉｎｐｕｔ／Ｏｕｔｐｕｔ）１４０、共有リソース１６０を有する。
【００１５】
ＣＰＵ１１０は、複数のＣＰＵコア１１１−０〜１１１−Ｎ（複数のプロセッサ）を有するマルチコアＣＰＵである。
各ＣＰＵコア１１１は、Ｔｅｓｔ−ａｎｄ−ＳｅｔやＣｏｍｐａｒｅ−ａｎｄ−Ｓｗａｐ、Ｌｏａｄ−Ｌｉｎｋ／Ｓｔｏｒｅ−Ｃｏｎｄｉｔｉｏｎａｌなどのアトミック命令のいずれかを有し、ＣＰＵ１１０はこれらのアトミック命令を実現するための機構を有する。また、各ＣＰＵコア１１１は、他のＣＰＵコア１１１に対してコア間割込みを送信する機能を有する。
各ＣＰＵコア１１１は、ＯＳ実行部１５０を備える。
【００１６】
ＯＳ実行部１５０は、ＣＰＵコア１１１に割り当てられたＯＳ２００を動作させる。
ＯＳ（Ｏｐｅｒａｔｉｎｇ・Ｓｙｓｔｅｍ）２００は、シングルコアまたはマルチコア上で動作するＯＳである。各ＯＳ２００には一つ以上のＣＰＵコア１１１を割り当てる。
本実施の形態では、ＯＳ２００−０にＣＰＵコア１１１−０、ＯＳ２００−１にＣＰＵコア１１１−１、ＯＳ２００−ＮにＣＰＵコア１１１−Ｎというように、各ＯＳ２００に対してＣＰＵコア１１１を一つずつ割り当てる構成としている。
また、ＯＳ実行部１５０−０はＯＳ２００−０を動作させ、ＯＳ実行部１５０−１はＯＳ２００−１を動作させ、ＯＳ実行部１５０−ＮはＯＳ２００−Ｎを動作させる構成となっている。
【００１７】
以下において、「ＯＳ２００が動作する」などと記載した場合には、ＯＳ実行部１５０がＣＰＵコア１１１を用いてＯＳ２００を動作させることを意味するものとする。
また、以下において、例えば、ＯＳ実行部１５０と記載した場合には、ＯＳ実行部１５０−０〜１５０−Ｎの各々について、あるいはＯＳ実行部１５０−０〜１５０−Ｎの少なくともいずれかについて記載したことを意味するものとする。他の構成要素（ＣＰＵコア１１１、ＯＳ２００、アプリ３００）についても同様とする。
【００１８】
各ＯＳ２００の上では、シングルタスクまたはマルチタスクのアプリケーションプログラム（アプリ３００）が動作する。
例えば、アプリ３００−０はＯＳ２００−０上で動作し、アプリ３００−ＮはＯＳ２００−Ｎ上で動作する。
【００１９】
ＲＡＭ１２０上には、各ＯＳ実行部１５０（各ＯＳ２００）用のメモリ領域（ＯＳ用メモリ領域１２１−０〜１２１−Ｎ）と、コア間共有メモリ領域１２２が配置される。
ＯＳ用メモリ領域１２１には、各ＯＳ実行部１５０（各ＯＳ２００）のデータ領域、コード領域、スタック領域などが配置される。
コア間共有メモリ領域１２２は、各ＣＰＵコア１１１上の各ＯＳ実行部１５０（各ＯＳ２００）からリードおよびライトが可能なメモリ領域である。
【００２０】
コア間共有メモリ領域１２２には、ＯＳ間セマフォ４００（排他制御情報）が配置される。ＯＳ間セマフォ４００は、複数のＯＳ２００の間の共有リソースの排他制御を行うためのデータである。
ここで、共有リソース１６０は、複数のＣＰＵコア１１１の間で共有されるリソースであり、ＯＳ間セマフォ４００による排他制御の対象となる。共有リソース１６０は、コア間共有メモリ領域１２２上に配置されて複数のＯＳ２００の間でリードおよびライトされる共有データでもよいし、複数のＯＳ２００が共有して利用するＩ／Ｏ１４０でもよい。
なお、本実施の形態では、ＯＳ間セマフォ４００が一つのみの構成を示しているが、ＯＳ間セマフォ４００は共有リソースごとに配置するものであり、二つ以上存在してもよい。
【００２１】
ＯＳ間セマフォ４００は、リソースロック情報４１１、スピンロック４３０を有する。リソースロック情報４１１は、セマフォカウンタ４１０、セマフォ待ち行列４２０を有する。
セマフォカウンタ４１０は、ＯＳ間セマフォ４００に対応する共有リソースを同時に使用できるＯＳ２００の最大数を初期値とするカウンタである。セマフォカウンタ４１０は、ＯＳ間セマフォ４００の獲得時にデクリメントされ、解放時にインクリメントされる。
セマフォカウンタ４１０の値が１以上の場合、共有リソースを使用できるＯＳ２００の数が１以上であるため、ＯＳ間セマフォ４００の獲得要求は成功する。また、セマフォカウンタ４１０の値が０の場合、共有リソースを使用できるＯＳ２００の数が０であるため、ＯＳ間セマフォ４００の獲得要求は失敗する。
【００２２】
セマフォ待ち行列４２０は、ＯＳ間セマフォ４００の獲得要求に失敗したＯＳ２００の情報を格納する行列である。セマフォ待ち行列４２０に格納する情報は、一例として、ＯＳ２００が動作するＣＰＵコア１１１のうちＯＳ間セマフォ獲得要求を行ったＣＰＵコア１１１のＩＤとする。セマフォ待ち行列４２０は、リングバッファでもよいし、ＯＳ２００ごとに与えた優先度に従って並べ替える操作を容易化するために双方向リストとして実装してもよい。
【００２３】
セマフォカウンタ４１０及びセマフォ待ち行列４２０は、共有リソース１６０がロックされているリソースロック状態であるか、あるいは、共有リソース１６０がロックされていないリソースアンロック状態であるかが設定されるリソースロック情報４１１の一例であり、例えば、リソースロック情報記憶部によりＲＡＭ１２０に記憶される。
【００２４】
スピンロック４３０は、ＯＳ間セマフォ４００自体をＯＳ２００の間で排他制御するためのデータである。
例えば、セマフォカウンタ４１０をインクリメントまたはデクリメントする際や、セマフォ待ち行列４２０への登録または削除の際は、先にスピンロック４３０によるロックを獲得する。
スピンロック４３０は、リソースロック情報４１１へのアクセス権の獲得についての情報を記憶するアクセス権情報である。
【００２５】
スピンロック４３０は、ロック変数４３１と、優先コアＩＤ格納部４３２とを有する。
ロック変数４３１は、ロック状態とアンロック状態の二つの状態をとる変数である。ロック変数４３１をアンロック状態からロック状態に変更することに成功したＯＳ２００のみが、ＯＳ間セマフォ４００のデータにアクセス可能となり、その他のＯＳ２００はロック変数４３１がアンロック状態になるまでＯＳ間セマフォ４００のデータへのアクセスを待つ必要がある。
ロック変数４３１は、リソースロック情報４１１（セマフォカウンタ４１０及びセマフォ待ち行列４２０）に対するアクセスがロックされているアクセスロック状態であるか、あるいは、リソースロック情報に対するアクセスがロックされていないアクセスアンロック状態であるかが設定されるアクセスロック情報の一例であり、例えば、アクセスロック情報記憶部により記憶装置に記憶される。
【００２６】
優先コアＩＤ格納部４３２は、スピンロック４３０によるロックを優先して獲得することができるＣＰＵコア１１１のＩＤを格納するためのテーブルである。優先コアＩＤ格納部４３２は、各ＣＰＵコア１１１について、該ＣＰＵコアがスピンロック４３０によるロックの獲得において優先されるかどうかを示すフラグ（優先フラグ）を保持する。
【００２７】
優先コアＩＤ格納部４３２は、リソースロック情報（セマフォカウンタ４１０及びセマフォ待ち行列４２０）にリソースロック状態を設定しているＣＰＵコア１１１（プロセッサ）が、リソースロック情報にリソースアンロック状態を設定する際に、自ＣＰＵコアを識別する識別子がリソースアンロック用優先識別子として格納される優先識別子格納部の一例である。
具体的には、例えば、優先コアＩＤ格納部４３２は、複数のＣＰＵコア１１１のそれぞれに対応する優先フラグを有し、優先フラグをオン状態とすることにより、オン状態の優先フラグに対応するＣＰＵコア１１１をリソースアンロック用優先識別子が優先コアＩＤ格納部４３２に格納されたＣＰＵコア１１１であるものとする。
【００２８】
図２は、本実施の形態に係る優先コアＩＤ格納部４３２の構成の一例を示す図である。
図２に示すように、本実施の形態では、優先コアＩＤ格納部４３２を１ｗｏｒｄのビット列として構成し、ビット０をＣＰＵコア１１１−０の優先フラグ、ビット１をＣＰＵコア１１１−１の優先フラグ、ビットＮをＣＰＵコア１１１−Ｎの優先フラグとして割り当てる。
図２に示す優先コアＩＤ格納部４３２の一例では、ＣＰＵコア１１１−１がスピンロック４３０によるロックの獲得において優先されることを示している。
【００２９】
図３は、本実施の形態におけるＯＳ実行部１５０のブロック構成図である。
各ＯＳ実行部１５０は、ＯＳ間セマフォ獲得部２１０、ＯＳ間セマフォ解放部２２０、優先スピンロック獲得部２３０、優先スピンロック解放部２４０、非優先スピンロック獲得部２５０、非優先スピンロック解放部２６０を備える。
【００３０】
例えば、上記ＯＳ実行部１５０の各要素は、ＯＳ２００のソフトウェア構成と対応している。図示はないが、ＯＳ２００は、ＯＳ間セマフォ獲得手段２１０ａ、ＯＳ間セマフォ解放手段２２０ａ、優先スピンロック獲得手段２３０ａ、優先スピンロック解放手段２４０ａ、非優先スピンロック獲得手段２５０ａ、非優先スピンロック解放手段２６０ａを有する。
そして、ＯＳ間セマフォ獲得部２１０はＯＳ間セマフォ獲得手段２１０ａを動作させ、ＯＳ間セマフォ解放部２２０はＯＳ間セマフォ解放手段２２０ａを動作させ、優先スピンロック獲得部２３０は優先スピンロック獲得手段２３０ａを動作させ、優先スピンロック解放部２４０は優先スピンロック解放手段２４０ａを動作させ、非優先スピンロック獲得部２５０は非優先スピンロック獲得手段２５０ａを動作させ、非優先スピンロック解放部２６０は非優先スピンロック解放手段２６０ａを動作させるものとする。
【００３１】
例えば、ＯＳ実行部１５０の各要素であるＯＳ間セマフォ獲得部２１０、ＯＳ間セマフォ解放部２２０、優先スピンロック獲得部２３０、優先スピンロック解放部２４０、非優先スピンロック獲得部２５０、非優先スピンロック解放部２６０の機能をプログラムで実現することができる。
この場合、ＯＳ間セマフォ獲得部２１０、ＯＳ間セマフォ解放部２２０、優先スピンロック獲得部２３０、優先スピンロック解放部２４０、非優先スピンロック獲得部２５０、非優先スピンロック解放部２６０の機能を実現する各プログラムは、ＲＯＭ１３０等の外部記憶装置に記憶されており、内部記憶装置にロードされ各ＣＰＵコア１１１により実行される。
【００３２】
ＯＳ間セマフォ獲得部２１０は、ＯＳ間セマフォ４００の獲得を要求する手段（リソースロック設定部の一例）であり、ＯＳ間セマフォ解放部２２０は、ＯＳ間セマフォ４００の解放を行う手段（リソースロック解放部の一例）である。
優先スピンロック獲得部２３０は、スピンロック４３０によるロックを優先して獲得するための手段（アクセスロック設定部の一例）であり、優先スピンロック解放部２４０は、優先スピンロック獲得部２３０により獲得したロックを解放するための手段（アクセスロック解放部の一例）である。
非優先スピンロック獲得部２５０は、スピンロック４３０によるロックを優先せずに獲得するための手段（アクセスロック設定部の一例）であり、非優先スピンロック解放部２６０は、非優先スピンロック獲得部２５０により獲得したロックを解放するための手段（アクセスロック解放部の一例）である。
【００３３】
なお、本実施の形態では、複数のＯＳ実行部１５０（複数のＯＳ２００）の間で排他制御を行う例を示しているが、複数のＣＰＵコア１１１の間で排他制御を行うのであれば、構成は上記に限定されない。
例えば、複数のＣＰＵコア１１１上で動作するＳＭＰ（Ｓｙｍｍｅｔｒｉｃ・Ｍｕｌｔｉｐｒｏｃｅｓｓｉｎｇ）型のＯＳ２００上において、異なるＣＰＵコア１１１上で動作するタスク間で排他制御を行う際や、ＯＳ２００の内部データを排他制御する際にも、本実施の形態に係る排他制御方法が適用可能であることは容易に類推できる。
【００３４】
また、本実施の形態では、ＯＳ間セマフォ獲得部２１０、ＯＳ間セマフォ解放部２２０、優先スピンロック獲得部２３０、優先スピンロック解放部２４０、非優先スピンロック獲得部２５０、非優先スピンロック解放部２６０を各ＯＳ実行部（各ＯＳ２００）に配置し、ＯＳ２００の間で排他制御を行う例を示すが、これらを各アプリ３００に配置し、アプリ３００の間で排他制御を行うことも可能である。
【００３５】
また、計算機１００上で仮想マシンモニタやハイパーバイザが動作する構成の場合は、各ＣＰＵコア１１１上の各仮想マシンモニタあるいは各ハイパーバイザに上記手段（ＯＳ間セマフォ獲得部２１０、ＯＳ間セマフォ解放部２２０、優先スピンロック獲得部２３０、優先スピンロック解放部２４０、非優先スピンロック獲得部２５０、非優先スピンロック解放部２６０）を配置し、仮想マシンモニタあるいはハイパーバイザの間で排他制御を行うことも可能である。
【００３６】
また、同一のＯＳ２００内で動作する複数のタスクが、同一のＯＳ間セマフォ４００を使用する場合は、ＯＳ２００が提供するセマフォ機能を用いてＯＳ２００内の該複数のタスク間の排他制御を行い、該セマフォを獲得したタスクのみがＯＳ間セマフォ４００にアクセスできるように構成してもよい。
【００３７】
次に、本実施の形態における計算機１００のＯＳ実行部１５０の動作について説明する。
図４は、本実施の形態において、ＯＳ実行部１５０のＯＳ間セマフォ獲得部２１０がＯＳ間セマフォ４００の獲得を要求する処理（セマフォ獲得要求処理Ｓ２００）のフローチャートである。
【００３８】
まず、ステップＳ４００で、非優先スピンロック獲得部２５０は、非優先スピンロック獲得処理Ｓ４００を実行する。
図５は、本実施の形態における非優先スピンロック獲得部２５０がスピンロック４３０を獲得する非優先スピンロック獲得処理Ｓ４００のフローチャートである。
【００３９】
まず、ステップＳ４０１で、非優先スピンロック獲得部２５０は、優先コアＩＤ格納部４３２を参照し、優先コアＩＤ格納部４３２の中に、対応するスピンロック４３０のロックを優先して行うべきＣＰＵコア１１１が存在するかどうかを検査する。具体的には、非優先スピンロック獲得部２５０は、優先コアＩＤ格納部４３２の値をリードし、０であるかどうかを検査する。
【００４０】
ステップＳ４０１において、優先コアＩＤ格納部４３２の値が０であった場合（Ｓ４０１にてＮＯ）は、スピンロック４３０のロックを優先して行うべきＣＰＵコア１１１が存在しないことを示すので、ステップＳ４０２に進む。
【００４１】
次に、ステップＳ４０２で、非優先スピンロック獲得部２５０は、ロック変数４３１に対して、Ｔｅｓｔ−ａｎｄ−Ｓｅｔ命令により「ロック状態」をライトする。
【００４２】
次に、ステップＳ４０３で、非優先スピンロック獲得部２５０は、Ｔｅｓｔ−ａｎｄ−Ｓｅｔ命令により返された、ロック変数４３１の古い値を検査する。
ステップＳ４０３において、ロック変数４３１の古い値が「ロック状態」であった場合（Ｓ４０３にてＹＥＳ）は、ロック失敗であるので、ステップＳ４０１に戻り、優先コアＩＤ格納部４３２の検査からやり直す。
一方、ロック変数４３１の古い値が「アンロック状態」であった場合（Ｓ４０３にてＮＯ）は、ロック成功として非優先スピンロック獲得処理を終了する。
【００４３】
一方、ステップＳ４０１において、優先コアＩＤ格納部４３２の値が０でなかった場合は、スピンロック４３０のロックを優先して行うべきＣＰＵコア１１１が存在することを示すので、非優先スピンロック獲得部２５０は、優先コアＩＤ格納部４３２の値が０になるまでビジーループで待ち合わせる。
【００４４】
次に、図４に戻り、セマフォ獲得要求処理の説明を続ける。
ステップＳ２０１で、ＯＳ間セマフォ獲得部２１０は、ＯＳ間セマフォ４００のセマフォカウンタ４１０の値が１以上であり、かつ、セマフォ待ち行列４２０に登録されているＣＰＵコア１１１が存在していないかどうかを検査する。
ステップＳ２０１において、ＯＳ間セマフォ獲得部２１０は、セマフォカウンタ４１０の値が１以上であり、かつ、セマフォ待ち行列４２０への登録がなかった場合（Ｓ２０１にてＹＥＳ）は、ステップＳ２０２にて、セマフォカウンタ４１０の値をデクリメントする。
【００４５】
次に、ステップＳ５００で、非優先スピンロック解放部２６０により、非優先スピンロック解放処理を行う。
図６は、本実施の形態における非優先スピンロック解放部２６０がスピンロック４３０を解放する非優先スピンロック解放処理Ｓ５００のフローチャートである。
【００４６】
ステップＳ５０１で、非優先スピンロック解放部２６０は、ロック変数４３１に対して「アンロック状態」をライトし、非優先スピンロック解放処理を終了する。
【００４７】
再び、図４に戻り、セマフォ獲得要求処理の説明を続ける。
ステップＳ２０１において、セマフォカウンタ４１０の値が０であった場合、または、セマフォ待ち行列４２０に登録されているＣＰＵコア１１１が存在していた場合（Ｓ２０１にてＮＯ）は、ステップＳ２０３において、ＯＳ間セマフォ獲得部２１０は、ＯＳ間セマフォ４００の獲得を要求したＣＰＵコア１１１のＩＤを、セマフォ待ち行列４２０に登録する。
この際に、ＯＳ２００の間で優先度が別途定められている場合は、セマフォ待ち行列４２０を、その優先度に従って並べ替えてもよい。
【００４８】
次に、ステップＳ５００で、非優先スピンロック解放部２６０により、非優先スピンロック解放処理を行う。
【００４９】
次に、ステップＳ２０４で、ＯＳ間セマフォ獲得部２１０は、ＯＳ２００が提供するタスク管理機能を用いて、ＯＳ間セマフォ４００の獲得を要求したタスクを待ち状態に移行させる。該タスクが待ち状態に移行すると、ＯＳ２００のスケジューラにより、他の実行可能なタスクが実行される。
【００５０】
その後、該ＣＰＵコア１１１は、ＯＳ間セマフォ４００の解放を行った別のＣＰＵコア１１１からのＯＳ間セマフォの解放通知（ＯＳ間セマフォ解放通知）を受けると、ステップＳ２０５に進む。
ステップＳ２０５では、ＯＳ２００が提供するタスク管理機能を用いて、ＯＳ間セマフォ４００の獲得を要求したタスクを起床させる。起床した該タスクは、ステップＳ４００の非優先スピンロック解放処理から実行を再開する。
ＯＳ間セマフォ４００解放通知は、一例として、コア間割込みにより実現される。
【００５１】
図７は、本実施の形態におけるＯＳ間セマフォ解放部２２０がＯＳ間セマフォ４００を解放するセマフォ解放処理Ｓ３００のフローチャートである。
【００５２】
セマフォ解放処理Ｓ３００では、まず、ステップＳ６００で、優先スピンロック獲得部２３０により、ＯＳ間セマフォ４００のスピンロック４３０を獲得する優先スピンロック獲得処理（Ｓ６００）を行う。
図８は、本実施の形態における優先スピンロック獲得部２３０がスピンロック４３０を獲得する優先スピンロック獲得処理Ｓ６００のフローチャートであり、（ａ）は優先スピンロック獲得処理Ｓ６００の一例を示すフローチャートであり、（ｂ）は優先スピンロック獲得処理の他例である優先スピンロック獲得処理Ｓ６００ｂ（アクセスロック設定処理）のフローチャートである。
【００５３】
まず、図８（ａ）を用いて、優先スピンロック獲得処理Ｓ６００について説明する。
ステップＳ６０１で、優先スピンロック獲得部２３０は、優先スピンロック獲得部２３０を実行しているＣＰＵコア１１１のＩＤを、優先コアＩＤ格納部４３２に登録する。具体的には、優先スピンロック獲得部２３０は、該ＣＰＵコア１１１のＩＤに対応する優先コアＩＤ格納部４３２のビットをセットする。該ビットのセットは、優先コアＩＤ格納部４３２に対するＴｅｓｔ−ａｎｄ−Ｓｅｔ命令により行う。
【００５４】
次に、ステップＳ６０２で、優先スピンロック獲得部２３０は、ロック変数４３１に対して、Ｔｅｓｔ−ａｎｄ−Ｓｅｔ命令により「ロック状態」をライトする。
次に、ステップＳ６０３で、Ｔｅｓｔ−ａｎｄ−Ｓｅｔ命令により返された、ロック変数４３１の古い値を検査する。
ステップＳ６０３において、ロック変数４３１の古い値が「ロック状態」であった場合（Ｓ６０３にてＹＥＳ）は、ロック失敗であるので、ステップＳ６０２に戻り、ロックを再度試みる。
一方、ステップＳ６０３において、ロック変数４３１の古い値が「アンロック状態」であった場合（Ｓ６０３にてＮＯ）は、ロック成功となり、優先スピンロック獲得処理Ｓ６００は終了する。
【００５５】
なお、優先スピンロック獲得部２３０によるスピンロック４３０の獲得処理は、図８（ｂ）のような処理でも実現できる。
図８（ｂ）を用いて、優先スピンロック獲得処理Ｓ６００ｂ（アクセスロック設定処理）について説明する。
【００５６】
まず、ステップＳ６０１ｂにて、優先スピンロック獲得部２３０は、ロック変数４３１に対して、Ｔｅｓｔ−ａｎｄ−Ｓｅｔ命令により「ロック状態」をライトする。
次に、ステップＳ６０２ｂで、Ｔｅｓｔ−ａｎｄ−Ｓｅｔ命令により返された、ロック変数４３１の古い値を検査する。
一方、ステップＳ６０２ｂにおいて、ロック変数４３１の古い値が「アンロック状態」であった場合（Ｓ６０２ｂにてＮＯ）は、ロック成功となり、優先スピンロック獲得処理Ｓ６００ｂは終了する。
【００５７】
一方、ステップＳ６０２ｂにおいて、ロック変数４３１の古い値が「ロック状態」であった場合（Ｓ６０２ｂにてＹＥＳ）は、ロック失敗である。優先スピンロック獲得部２３０は、ロック失敗の場合に、ステップＳ６０３ｂにて優先コアＩＤ格納部４３２へ自ＣＰＵコアのＩＤを登録する。
そして、優先スピンロック獲得部２３０は、Ｓ６０４ｂにて再びロック変数４３１に「ロック状態」をライトし、Ｓ６０５ｂにてロック変数４３１の古い値をチェックし（Ｓ６０５ｂ）、ロックが成功するまで繰り返す。
【００５８】
これにより、図８（ａ）と比較して、競合が発生していない状況下におけるスピンロック４３０の獲得が高速化される。一方、図８（ａ）は、先に優先コアＩＤ格納部４３２への登録を行うので、競合が発生しやすい状況下において、スピンロック４３０を特に優先して獲得したい場合に有効である。
【００５９】
次に、図７に戻り、セマフォ解放処理Ｓ３００の説明を続ける。
ステップＳ３０１で、ＯＳ間セマフォ解放部２２０は、ＯＳ間セマフォ４００のセマフォカウンタ４１０をインクリメントする。
【００６０】
次に、ステップＳ３０２で、ＯＳ間セマフォ解放部２２０は、ＯＳ間セマフォ４００のセマフォ待ち行列４２０を参照し、セマフォ待ち行列４２０内の要素の有無を検査する。
ステップＳ３０２において、セマフォ待ち行列４２０の要素がなかった場合（Ｓ３０２にてＹＥＳ）は、ステップＳ７００において、優先スピンロック解放部２４０がスピンロック４３０の解放を行う優先スピンロック解放処理Ｓ７００を実行する。
【００６１】
一方、ステップＳ３０２において、セマフォ待ち行列４２０に要素があった場合（Ｓ３０２にてＮＯ）は、ステップＳ３０３に進む。
ステップＳ３０３において、ＯＳ間セマフォ解放部２２０は、セマフォ待ち行列４２０の先頭要素が示すＣＰＵコア１１１のＩＤを取得し、セマフォ待ち行列４２０の先頭要素を削除する。
次に、ステップＳ７００において、優先スピンロック解放部２４０がスピンロック４３０の解放を行う優先スピンロック解放処理Ｓ７００を実行する。
最後に、ステップＳ３０４において、ＯＳ間セマフォ解放部２２０は、ステップＳ３０３で取得したＩＤが示すＣＰＵコア１１１に対して、ＯＳ間セマフォの解放を通知するＯＳ間セマフォ解放通知を通知する。ＯＳ間セマフォ４００解放通知は、一例として、コア間割込みにより実現される。
【００６２】
図９は、本実施の形態における優先スピンロック解放部２４０がスピンロック４３０を解放する優先スピンロック解放処理Ｓ７００（アクセスロック解放処理）のフローチャートである。
ここで、図９を用いて、優先スピンロック解放部２４０が、優先スピンロック獲得部２３０により獲得したスピンロック４３０を解放する優先スピンロック解放処理Ｓ７００について説明する。
【００６３】
まず、ステップＳ７０１で、優先スピンロック解放部２４０は、優先スピンロック解放部２４０を実行しているＣＰＵコア１１１のＩＤを、優先コアＩＤ格納部４３２から削除する。具体的には、優先スピンロック解放部２４０は、該ＣＰＵコア１１１のＩＤに対応する優先コアＩＤ格納部４３２のビットをクリアする。該ビットのクリアは、優先コアＩＤ格納部４３２に対するＴｅｓｔ−ａｎｄ−Ｓｅｔ命令により行う。
最後に、ステップＳ７０２で、優先スピンロック解放部２４０は、ロック変数４３１に対して、「アンロック状態」をライトする。
以上で、優先スピンロック解放処理を終了する。
【００６４】
以上で、ＯＳ間セマフォ解放処理Ｓ３００の説明を終わる。
【００６５】
図１０は、本実施の形態に係る優先コアＩＤ格納部４３２がない構成の場合のスピンロック４３０競合時のタイミングチャートである。図１１は、本実施の形態に係る優先コアＩＤ格納部４３２がある構成の場合のタイミングチャートである。
図１０及び図１１を用いて、本実施の形態に係る優先コアＩＤ格納部４３２による効果について説明する。
【００６６】
図１０及び図１１は、セマフォカウンタ４１０の値が０であり、ＯＳ−０がＯＳ間セマフォ４００を獲得済みである状況において、ＯＳ−０によるＯＳ間セマフォ４００の解放処理と、ＯＳ−１、ＯＳ−２、ＯＳ−３によるＯＳ間セマフォ４００の獲得処理が同時に発生した場合のタイミングチャートである。
【００６７】
まず、図１０に示す優先コアＩＤ格納部４３２がない構成の場合について説明する。
時刻ｔ０において、ＯＳ−０は、ＯＳ間セマフォ４００の解放処理のためにスピンロック４３０を獲得しようとする。また、ＯＳ−１、ＯＳ−２、ＯＳ−３は、ＯＳ間セマフォ４００の獲得処理のためにスピンロック４３０を獲得しようとする。ここでは、ＯＳ−１によるスピンロック４３０の獲得が成功したと仮定する。これにより、ＯＳ−０、ＯＳ−２、ＯＳ−３はスピンロック４３０のビジーウェイトに入る。
ＯＳ−１は、時刻ｔ１でＯＳ間セマフォ４００の獲得に失敗し、該ＯＳ間セマフォ４００の獲得を試みたタスクを待ち状態に移行させた後、時刻ｔ２でスピンロック４３０を解放する。
【００６８】
時刻ｔ３において、ビジーウェイトに入っていたＯＳ−０、ＯＳ−２、ＯＳ−３のうち、ＯＳ−２によるスピンロック４３０の獲得が成功したと仮定する。
ＯＳ−２は、時刻ｔ４でＯＳ間セマフォ４００の獲得に失敗し、該ＯＳ間セマフォ４００の獲得を試みたタスクを待ち状態に移行させた後、時刻ｔ５でスピンロック４３０を解放する。
【００６９】
時刻ｔ６において、ビジーウェイトに入っていたＯＳ−０、ＯＳ−３のうち、ＯＳ−３によるスピンロック４３０の獲得が成功したと仮定する。
ＯＳ−３は、時刻ｔ７でＯＳ間セマフォ４００の獲得に失敗し、該ＯＳ間セマフォ４００の獲得を試みたタスクを待ち状態に移行させた後、時刻ｔ８でスピンロック４３０を解放する。
【００７０】
時刻ｔ９において、ビジーウェイトに入っていたＯＳ−０によるスピンロック４３０の獲得が成功する。
ＯＳ−０は、時刻ｔ１０でＯＳ間セマフォ４００を解放し、時刻ｔ１１でスピンロック４３０を解放する。そして、ＯＳ−０は、時刻ｔ１２で、ＯＳ間セマフォ４００のセマフォ待ち行列４２０の先頭要素であるＯＳ−１に対して、ＯＳ間セマフォ４００の解放を通知する。
【００７１】
解放通知を受けたＯＳ−１は、時刻ｔ１３以降で、ＯＳ間セマフォ４００の獲得に失敗して待ち状態に移行していたタスクを起床させ、該タスクがＯＳ間セマフォ４００の獲得を再び要求する。
ここで、図１０において、時刻ｔ１２から時刻ｔ１３までの間隔が他の時刻の間の間隔よりも長いのは、ＯＳ−０がコア間割込みを送信してからＯＳ−１によるタスク起床処理が完了するまでにかかる時間が、排他制御処理の各処理に係る時間と比較すると、長いことを意味する。
【００７２】
次に、図１１に示す優先コアＩＤ格納部４３２がある構成のタイミングチャートについて説明する。
時刻ｔ０において、ＯＳ−０は、ＯＳ間セマフォ４００の解放処理のためにスピンロック４３０を獲得しようとする。また、ＯＳ−１、ＯＳ−２、ＯＳ−３は、ＯＳ間セマフォ４００の獲得処理のためにスピンロック４３０を獲得しようとする。ここでは、ＯＳ−１がＯＳ−０よりわずかに早く動作したために、ＯＳ−１によるスピンロック４３０の獲得が成功し、次に、ＯＳ−０による優先コアＩＤ格納部４３２への登録が行われたと仮定する。これにより、ＯＳ−１によるスピンロック４３０の獲得が成功し、ＯＳ−０、ＯＳ−２、ＯＳ−３はビジーウェイトに入る。この際、ＯＳ−０により、優先コアＩＤ格納部４３２に対してＣＰＵコア０が登録される。つまり、優先コアＩＤ格納部４３２に対してＣＰＵコア０に対応するビットに１をセットする。
【００７３】
ＯＳ−１は、時刻ｔ１でＯＳ間セマフォ４００の獲得に失敗し、該ＯＳ間セマフォ４００の獲得を試みたタスクを待ち状態に移行させた後、時刻ｔ２でスピンロック４３０を解放する。
【００７４】
時刻ｔ３において、優先コアＩＤ格納部４３２に優先コアとしてＣＰＵコア０が登録されているため、ビジーウェイトに入っていたＯＳ−０、ＯＳ−２、ＯＳ−３のうち、ＯＳ−０によるスピンロック４３０の獲得が成功する。
【００７５】
ＯＳ−０は、時刻ｔ４でＯＳ間セマフォ４００を解放し、時刻ｔ５でスピンロック４３０を解放する。次に、時刻ｔ６で、ＯＳ間セマフォ４００のセマフォ待ち行列４２０の先頭要素であるＯＳ−１に対して、ＯＳ間セマフォ４００の解放を通知する。
【００７６】
解放通知を受けたＯＳ−１は、時刻ｔ１１以降で、ＯＳ間セマフォ４００の獲得に失敗して待ち状態に移行していたタスクを起床させ、該タスクがＯＳ間セマフォ４００の獲得を再び要求する。
なお、ＯＳ−２およびＯＳ−３によるスピンロック４３０の獲得と解放は、時刻ｔ６でＯＳ−０がＯＳ−１にＯＳ間セマフォ４００の解放を通知してから、時刻ｔ１１で該ＯＳ間セマフォ４００の獲得に失敗して待ち状態に移行していたタスクがＯＳ−１により起床するまでの間に行われる。
ＯＳ−２およびＯＳ−３による排他制御処理の時間は、ＯＳ−０がコア間割込みを送信してからＯＳ−１によるタスク起床処理が完了するまでにかかる時間と比較して、十分に短い。よって、時刻ｔ１２におけるＯＳ−１のスピンロック４３０の獲得処理が、ＯＳ−２およびＯＳ−３によるスピンロック４３０の獲得処理により遅延することはない。
【００７７】
図１０と図１１とを比較すると、本実施の形態に係る排他制御方式では、ＯＳ間セマフォ４００に対する獲得処理と解放処理が複数のＯＳ２００から突発的に同時に発生して競合した際に、ＯＳ間セマフォ４００の解放側であるＯＳ−０によるスピンロック４３０の獲得を優先させることにより、ＯＳ間セマフォ４００の獲得側であるＯＳ−１の待ち時間を短くすることができる。
これにより、ＯＳ間セマフォ４００の獲得処理と解放処理の競合時において、解放側のＯＳ２００の性能が向上するという利点がある。この利点は、ＣＰＵコア１１１の数が多いほど顕著となる。
【００７８】
また、優先コアＩＤ格納部４３２を１ｗｏｒｄのビット列として構成し、その各ビットを各ＣＰＵコア１１１の優先フラグとして割り当てることで、優先スピンロック獲得部２３０による優先コアＩＤ格納部４３２への登録処理と削除処理をＴｅｓｔ−ａｎｄ−Ｓｅｔ命令で実現することができ、また、非優先スピンロック獲得部２５０による優先コアＩＤ格納部４３２の検査を１ｗｏｒｄのメモリリードと一つのｉｆ文とで行えるので、ソフトウェアであっても高速に処理することが可能である。
【００７９】
上述したように、ＯＳ実行部１５０の各要素であるＯＳ間セマフォ獲得部２１０、ＯＳ間セマフォ解放部２２０、優先スピンロック獲得部２３０、優先スピンロック解放部２４０、非優先スピンロック獲得部２５０、非優先スピンロック解放部２６０の機能をプログラムで実現することができる。
この場合、ＯＳ間セマフォ獲得部２１０、ＯＳ間セマフォ解放部２２０、優先スピンロック獲得部２３０、優先スピンロック解放部２４０、非優先スピンロック獲得部２５０、非優先スピンロック解放部２６０の機能を実現する各プログラムは、ＲＯＭ１３０等の外部記憶装置に記憶されており、内部記憶装置にロードされ各ＣＰＵコア１１１により実行される。
【００８０】
また、上記の説明におけるフローチャートの矢印の部分は主としてデータや信号の入出力を示し、データや信号値は、ＲＡＭ１２０のメモリ、その他光ディスク等の記録媒体やＩＣチップに記録される。また、データや信号は、バスや信号線やケーブルその他の伝送媒体や電波によりオンライン伝送される。
また、上記の説明において「〜部」として説明するものは、「〜回路」、「〜装置」、「〜機器」、「〜手段」、「〜機能」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。また、「〜装置」として説明するものは、「〜回路」、「〜機器」、「〜手段」、「〜機能」であってもよく、また、「〜ステップ」、「〜手順」、「〜処理」であってもよい。すなわち、「〜部」として説明するものは、ＲＯＭ１３０に記憶されたファームウェアで実現されていても構わない。或いは、ソフトウェアのみ、或いは、素子・デバイス・基板・配線などのハードウェアのみ、或いは、ソフトウェアとハードウェアとの組合せ、さらには、ファームウェアとの組合せで実施されても構わない。ファームウェアとソフトウェアは、プログラムとして、ＲＯＭ１３０等の記録媒体に記憶される。プログラムはＣＰＵ１１０（各ＣＰＵコア１１１）により読み出され、ＣＰＵ１１０（各ＣＰＵコア１１１）により実行される。すなわち、プログラムは、上記で述べた「〜部」としてコンピュータ等を機能させるものである。あるいは、上記で述べた「〜部」の手順や方法をコンピュータ等に実行させるものである。
【００８１】
このように、ＯＳ実行部１５０の各機能は、ＣＰＵ１１０、ＲＯＭ１３０、Ｉ／Ｏ１４０、ＲＡＭ１２０などのハードウェア資源と協働して実現される。
【００８２】
以上で示したように、本実施の形態に係る排他制御方式によれば、特定のＣＰＵコアによるロック獲得を優先することが可能であり、かつ、それを高速に処理することが可能である。
【００８３】
上記実施の形態では、ＯＳ間セマフォ獲得部２１０、ＯＳ間セマフォ解放部２２０、優先スピンロック獲得部２３０、優先スピンロック解放部２４０、非優先スピンロック獲得部２５０、非優先スピンロック解放部２６０がそれぞれ独立した機能ブロックとして説明した。しかし、これに限られるわけではなく、例えば、ＯＳ間セマフォ獲得部２１０、ＯＳ間セマフォ解放部２２０をひとつの機能ブロックで実現し、優先スピンロック獲得部２３０、優先スピンロック解放部２４０をひとつの機能ブロックで実現しても良い。あるいは、これらの機能ブロックを、他のどのような組み合わせで構成しても構わない。
【００８４】
以上、本実施の形態について説明したが、本実施の形態を部分的に実施しても構わない。なお、本発明は、本実施の形態に限定されるものではなく、必要に応じて種々の変更が可能である。
【符号の説明】
【００８５】
１００  計算機、１１０  ＣＰＵ、１１１  ＣＰＵコア、１２０  ＲＡＭ、１２１  ＯＳ用メモリ領域、１２２  コア間共有メモリ領域、１３０  ＲＯＭ、１４０  Ｉ／Ｏ、１５０  ＯＳ実行部、２００  ＯＳ、２１０  ＯＳ間セマフォ獲得部、２２０  ＯＳ間セマフォ解放部、２３０  優先スピンロック獲得部、２４０  優先スピンロック解放部、２５０  非優先スピンロック獲得部、２６０  非優先スピンロック解放部、３００  アプリ、４００  ＯＳ間セマフォ、４１０  セマフォカウンタ、４１１  リソースロック情報、４２０  セマフォ待ち行列、４３０  スピンロック、４３１  ロック変数、４３２  優先コアＩＤ格納部。
【図１】
2014182507.tif 000003
【図２】
2014182507.tif 000004
【図３】
2014182507.tif 000005
【図４】
2014182507.tif 000006
【図５】
2014182507.tif 000007
【図６】
2014182507.tif 000008
【図７】
2014182507.tif 000009
【図８】
2014182507.tif 000010
【図９】
2014182507.tif 000011
【図１０】
2014182507.tif 000012
【図１１】
2014182507.tif 000013
【図１２】
2014182507.tif 000014