(57)【要約】【課題】高い並列処理性能を有する排他制御装置等を提供する。【解決手段】  排他制御装置１０１は、排他制御命令に関連付けされた第２期間５０１を表す情報に基づき、排他制御命令に関する計算機リソースを使用しない第１期間を算出する算出部１０２と、第１期間に基づき、第１期間において実行する処理５０２を決める制御部１０３とを有する。【選択図】      図１
2016004508.tif 000002
【特許請求の範囲】
【請求項１】
排他制御命令に関連付けされた第２期間を表す情報に基づき、前記排他制御命令に関する計算機リソースを使用しない第１期間を算出する算出手段と、
前記第１期間に基づき、前記第１期間において実行する処理を決める制御手段と
を備えることを特徴とする排他制御装置。
【請求項２】
前記制御手段は、割り込み処理に関連付けされた第４期間と、前記第１期間とに基づき、前記処理を決める
ことを特徴とする請求項１に記載の排他制御装置。
【請求項３】
前記算出手段は、前記排他制御命令に関する計算機リソースを使用する第１処理、及び、前記排他制御命令に関する計算機リソースが使用可能になるのを待つ第２処理に関して、前記第２期間の総和を算出することにより、前記第１期間を算出する
ことを特徴とする請求項１または請求項２に記載の排他制御装置。
【請求項４】
前記算出手段は、前記排他制御命令に関する計算機リソースを使用する経過時間が、前記第２期間よりも長いと判定する場合に、前記第２処理に関して、前記第２期間の総和を算出し、前記経過時間が、前記第２処理よりも短いと判定する場合に、前記第１処理及び前記第２処理に関して、前記第２期間の総和を算出し、算出した総和から前記経過時間を引くことにより、前記第１期間を算出する
ことを特徴とする請求項１乃至請求項３のいずれかに記載の排他制御装置。
【請求項５】
前記制御手段は、前記第１期間において実行する処理として、前記第１期間が前記第４期間よりも長いと判定する場合に、前記割り込み処理を実行し、前記第１期間が前記第４期間よりも短く、さらに、スリープウェイトに要する第３期間よりも長い場合に、前記スリープウェイトする処理を実行し、前記第１期間が、前記第３期間よりも短い場合に、ビジーウェイトする処理を実行することを決める選択処理を実行する
ことを特徴とする請求項２乃至請求項４のいずれかに記載の排他制御装置。
【請求項６】
前記制御手段は、複数の前記割り込み処理のうち、前記処理期間が最短の割り込み処理に関連付けされた前記第４期間に基づき、前記選択処理を実行する
ことを特徴とする請求項５に記載の排他制御装置。
【請求項７】
実行待ち状態である第３処理がある場合に、前記スリープウェイトに応じてスリープ状態となったプロセッサに、前記第３処理に関する処理を命令し、前記第３処理がない場合に、前記プロセッサに、前記第４期間が最長の前記割り込み処理を命令する第２制御部
をさらに備えることを特徴とする請求項２乃至請求項６のいずれかに記載の排他制御装置。
【請求項８】
請求項１乃至請求項７のいずれかに記載の排他制御装置と、
前記排他制御装置が決める処理に従い、コンピュータシステムを制御する処理手段と
を備えることを特徴とするオペレーティングシステム。
【請求項９】
情報処理装置を用いて、排他制御命令に関連付けされた第２期間を表す情報に基づき、前記排他制御命令に関する計算機リソースを使用しない第１期間を算出し、前記第１期間に基づき、前記第１期間において実行する処理を決めることを特徴とする排他制御方法。
【請求項１０】
排他制御命令に関連付けされた第２期間を表す情報に基づき、前記排他制御命令に関する計算機リソースを使用しない第１期間を算出する算出機能と、
前記第１期間に基づき、前記第１期間において実行する処理を決める制御機能と
をコンピュータに実現させることを特徴とする排他制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プロセス等を制御する排他制御装置等に関する。
【背景技術】
【０００２】
ハイパフォーマンスコンピューティング（ＨＰＣ）等の分野においては、大規模かつ並列（あるいは、擬似並列）に処理を行うプログラムが実行される。該プログラムを効率よく、かつ、並列に処理するためには、同期待ちや、計算機資源（計算機リソース、リソース）が使用可能になるのを待つことを表すロック待ちに起因するオーバーヘッドを、可能な限り減らすことが必要である。
【０００３】
ここで、同期待ちは、たとえば、並列に処理するプロセス（スレッド等でもよい）が、お互いに、処理するタイミングに関して同期することを表す。また、ロック待ちは、たとえば、あるリソースに関する処理を排他的に実行する場合に、あるプロセスが該リソースに関する処理を完了するのを、他のプロセスが待つことを表す。このように、同期待ち、及び、ロック待ちは、並列処理に関する性能を低下する原因の一つである。
【０００４】
たとえば、排他的に処理する処理量（粒度、ロック粒度）を減らすことは、１回あたりの待ち時間を減らすことにつながる。しかし、ロックする処理自体（ロックプリミティブ、ロック機構）にも処理は必要である。このため、ロック粒度を小さくするにつれ、ロック機構に関する処理オーバーヘッドが顕著になる。
【０００５】
特許文献１乃至特許文献７は、効率よく並列処理を行う装置等を開示する。
【０００６】
特許文献１に開示された装置は、プロセスがリソースに関してロック及びアンロックするのに応じて、ロック粒度の大きさに関する情報を収集する。次に、該装置は、ロック待ちが生じる場合に、収集した情報に基づき、プロセスがビジーウェイトするのか、または、スリープウェイトするのかを決める。
【０００７】
特許文献２は、ビジーウェイトするプロセスの個数を制限する装置を開示する。ある個数個のプロセスがビジーウェイトする状況において、さらに、ロックが解放されるのを待つプロセスが生じる場合に、該装置は、該プロセスにスリープウェイトする命令を送信する。該装置がプロセスをスリープウェイトすることにより、中央演算処理装置（ＣＰＵ）は、該ビジーウェイトに関する一部の処理を実行する必要がなくなる。この結果、該装置は、メモリアクセス等のオーバーヘッドを低減する。
【０００８】
特許文献３は、マルチプロセッサシステムに関する排他制御装置を開示する。該排他制御装置は、プロセスがリソースに関する処理を排他的に実行する期間（ロック期間）に関する履歴に基づき、プロセスがリソースに関する処理を排他的に開始するまでの期間を推定する。次に、該排他制御装置は、推定した期間と、該リソースに関する閾値とを比較し、比較した結果に基づき、プロセスがビジーウェイトするのか、または、スリープウェイトするのかを決める。たとえば、該排他制御装置は、推定した期間が、閾値（たとえば、ロック期間の平均）よりも短い場合に、ビジーウェイトを選択し、さもなければ、スリープウェイトを選択する。
【０００９】
特許文献４は、マルチプロセッサシステムにおける、排他制御方式を開示する。該排他制御方式は、リソースに関する処理を排他的に実行しているか否かを表す状態と、該リソースに関するロックが解放されるのを待つプロセスの数とに基づき、ビジーウェイトするのか、または、スリープウェイトするのかを決める。
【００１０】
特許文献５は、まず、ビジーウェイトすることによりロックが解放されるのを待ち、一定期間内に、ロックが解放されなければスリープウェイトするロック方式を開示する。
【００１１】
特許文献６は、送信プロセスから受信プロセスにデータを転送する際の待ち合わせ処理において、ビジーウェイトと、スリープウェイト（サスペンド）とを選択する通信システムを開示する。該通信システムは、プロセスごとに、待ち合わせ処理において生じる同期待ち間隔を測定し、測定した間隔に基づき、同期待ちが生じる頻度を算出する。該通信システムは、算出した頻度が、所定の閾値よりも小さければ、ビジーウェイト方式を選択し、そうでなければ、スリープウェイト方式を選択する。
【００１２】
特許文献７は、マルチプロセッサコンピュータシステムに関する、ロック排他制御方式を開示する。該ロック排他制御方式は、リソースに関する処理を排他的に実行できない場合に、原則、ビジーウェイトする。該ロック排他制御方式においては、リソースに関する処理を排他的に実行しているプロセスが、割り込み処理に応じて、該処理を中断する場合のみに、該プロセスをスリープウェイトする。
【先行技術文献】
【特許文献】
【００１３】
【特許文献１】特開２００１−８４２３５号公報
【特許文献２】特開平６−１２３９４号公報
【特許文献３】特開２０１０−１９１５７５号公報
【特許文献４】特開平７−３１９７１６号公報
【特許文献５】特開平５−２２５１４９号公報
【特許文献６】特開２００１−１１７７８７号公報
【特許文献７】特開平１−２６１７７１号公報
【発明の概要】
【発明が解決しようとする課題】
【００１４】
マルチプロセッサを有するコンピュータシステムにおいて、オペレーティングシステムに関する処理性能は、上述したオーバーヘッドの影響を受ける。このため、高い処理性能を達成するためには、コンピュータシステムにおいて、オーバーヘッドを低減、または、隠蔽する必要がある。
【００１５】
しかし、たとえば、特許文献３に開示される排他制御装置は、履歴において、ロック期間のばらつき（分散）が大きな場合に、効率のよい処理方式を選択することができない。この理由は、分散が大きな場合に、必ずしも、平均値が適切な閾値を与えるとは限らないからである。すなわち、該排他制御装置は、ロック期間の履歴に基づき、ロック方式を決めるので、必ずしも、効率のよい処理方式を決めるとは限らない。
【００１６】
そこで、本発明の主たる目的は、高い並列処理性能を有する排他制御装置等を提供することである。
【課題を解決するための手段】
【００１７】
前述の目的を達成するために、本発明の一態様において、排他制御装置は、以下の構成を備える。
【００１８】
すなわち、排他制御装置は、
排他制御命令に関連付けされた第２期間を表す情報に基づき、前記排他制御命令に関する計算機リソースを使用しない第１期間を算出する算出手段と、
前記第１期間に基づき、前記第１期間において実行する処理を決める制御手段と
を備える。
【００１９】
また、本発明の他の見地として、排他制御方法は、
情報処理装置を用いて、排他制御命令に関連付けされた第２期間を表す情報に基づき、前記排他制御命令に関する計算機リソースを使用しない第１期間を算出し、前記第１期間に基づき、前記第１期間において実行する処理を決める。
【００２０】
さらに、同目的は、係る排他制御装置プログラム、および、そのプログラムを記録するコンピュータ読み取り可能な記録媒体によっても実現される。
【発明の効果】
【００２１】
本発明に係る排他制御装置等によれば、高い並列処理性能が得られる。
【図面の簡単な説明】
【００２２】
【図１】本発明の第１の実施形態に係る排他制御装置が有する構成を示すブロック図である。
【図２】第１の実施形態に係る排他制御装置における処理の流れを示すフローチャートである。
【図３】本発明の第２の実施形態に係るオペレーティングシステムを含むコンピュータシステムが有する構成を示すブロック図である。
【図４】ロック構造体が有する構造の一例を概念的に表す図である。
【図５】割り込み処理に関する構成の一例を概念的に表す図である。
【図６】コンピュータシステムにおける処理の流れの一例を表すシーケンス図である。
【図７】ロック命令を受信する場合における、第２の実施形態に係る排他制御装置における処理を表すフローチャートである。
【図８】アンロック命令を受信する場合における、第２の実施形態に係る排他制御装置における処理を表すフローチャートである。
【図９】アップデート命令を受信する場合における、第２の実施形態に係る排他制御装置における処理を表すフローチャートである。
【図１０】格納命令を受信する場合における、第２の実施形態に係る排他制御装置における処理を表すフローチャートである。
【図１１】実行命令を受信する場合における、第２の実施形態に係る排他制御装置における処理を表すフローチャートである。
【図１２】アイドル命令を受信する場合における、第２の実施形態に係る排他制御装置における処理を表すフローチャートである。
【図１３】本発明の各実施形態に係る排他制御装置等を実現可能な計算処理装置のハードウェア構成例を、概略的に示すブロック図である。
【図１４】ビジーウェイト方式における処理の流れの一例を表すシーケンス図である。
【図１５】スリープウェイト方式における処理の流れの一例を表すシーケンス図である。
【図１６】併用方式における処理の流れの一例を表すシーケンス図である。
【発明を実施するための形態】
【００２３】
まず、発明の理解を容易にするため、本発明が解決しようとする課題を詳細に説明する。
【００２４】
上述したように、並列処理性能が低下する要因は、同期する待ち時間、及び、ロックが解放されるのを待つ待ち時間等である。したがって、待ち時間を減らしたり、または、プロセッサが待ち時間に他のプロセスを処理したりする（すなわち、待ち時間を隠蔽する）ことにより、高い並列処理性能を達成することができる。
【００２５】
まず、課題を説明するにあたり、本発明の各実施形態において用いる用語について説明する。
【００２６】
図１４乃至図１６を参照しながら、排他制御等において、ロックが解放される（すなわち、排他制御に関する計算機資源が使用可能になる）のを待つ方式について処理について説明する。図１４は、ビジーウェイト方式における処理の流れの一例を表すシーケンス図である。図１５は、スリープウェイト方式における処理の流れの一例を表すシーケンス図である。図１６は、ビジーウェイト方式及びスリープウェイト方式を併用する方式（以降、「併用方式」と表す）における処理の流れの一例を表すシーケンス図である。図１４乃至図１６は、矢印の方向に時間が進むことを表す。
【００２７】
ビジーウェイト方式の場合に、プロセッサは、ロックが解放されるのを待つ期間に、たとえば、ｔ１、ｔ２、及び、ｔ３にて、ビジーウェイトに応じた処理を実行する。プロセッサは、ｔ４にて、ロックを取得することにより、ｔ５にて、リソースに関する処理を排他的に開始する。その後、プロセッサは、ｔ６にて、該処理を完了し、その後、ロックを解放する。
【００２８】
ここで、ロックは、セマフォ（ｓｅｍａｐｈｏｒｅ）等において、計算機資源を排他的に使用する場合に使用され、計算機資源が使用されているのか否かを表す情報である。本願明細書において、「ロックを取得する」なる記載は、あるプロセッサが計算機資源を排他的に使用することが可能になることを表す。また、「ロックを解放する」なる記載は、計算機資源を使用しなくなるので、他のプロセッサが該計算機資源を使用することができることを表す。
【００２９】
ビジーウェイト命令は、たとえば、所定の間隔（ビジーウェイト間隔）にて、発せられる。この場合に、ｔ１からｔ２までの時間と、ｔ２からｔ３までの時間と、ｔ３からｔ４までの時間とは、略同じである。
【００３０】
また、排他制御装置は、ビジーウェイト命令に応じて、メモリが記憶するロックワードを参照する。このため、ビジーウェイト命令に応じて、メモリアクセスが生じる。ここで、ロックワードは、たとえば、あるプロセッサが排他制御に係るリソースに関して、排他的に処理を行っているか否かに関する情報等を記憶することができる。
【００３１】
一方、スリープウェイト方式の場合に、プロセッサは、ｔ８にてスリープ状態を設定する処理（スリープ処理）を開始し、ｔ９にてスリープ状態を設定する処理を完了する。プロセッサは、ｔ９からｔ１０までの期間において、スリープ状態である。次に、プロセッサは、ｔ１０にて、実行待ち状態を設定する処理（ウェイクアップ処理）を開始し、ｔ１１にてウェイクアップ処理を完了する。次に、プロセッサは、ｔ１１にて、ロックを取得することにより、ｔ１２にて、リソースに関する処理を排他的に開始する。その後、プロセッサは、ｔ１３にて、該処理を完了し、その後、ロックを解放する。
【００３２】
スリープウェイト方式には、スリープ処理と、ウェイクアップ処理とが含まれる。これら２つの処理をまとめて、スリープコスト（以降、「準備期間」）と表す。さらに、スリープウェイト間隔は、上述した、スリープ処理を開始してから、ウェイクアップ処理を完了するまでの時間間隔を表すとする。
【００３３】
図１５に示す例において、準備期間は、ｔ８からｔ９までの時間と、ｔ１０からｔ１１までの時間を合計した時間である。また、スリープウェイト間隔は、ｔ８からｔ１１までの時間である。
【００３４】
さらに、併用方式の場合に、プロセッサは、ビジーウェイト及びスリープウェイトを実行する。図１６に示す例において、プロセッサは、ｔ１５、及び、ｔ１６にて、ビジーウェイト命令に応じた処理を実行し、ｔ１７からｔ２０までの期間において、スリープウェイトする。次に、プロセッサは、ｔ２０にて、ロックを取得することにより、ｔ２１にて、リソースに関する処理を排他的に開始する。その後、プロセッサは、ｔ２２にて、該処理を完了し、その後、ロックを解放する。
【００３５】
以降、プロセッサが、ロックを取得するのを待ち始めてから、スリープウェイトに関する処理を開始するまでの期間を、「スリープに移行するまでの期間」と表す。図１６に示す例において、スリープに移行するまでの期間は、ｔ１５からｔ１７までの期間である。
【００３６】
次に、課題について説明する。
【００３７】
たとえば、特許文献２が開示する装置によれば、ある個数個のプロセスは、ビジーウェイトする可能性がある。したがって、該装置は、ビジーウェイトにおけるメモリアクセスに関する負荷は高いという問題を有する。
【００３８】
また、特許文献３が開示する装置は、メモリアクセスに関する負荷が高いという問題を有する。この理由は、推定した期間がロック期間の平均よりも短い場合に、該装置がビジーウェイトを選び続けるからである。さらに、該装置は、ビジーウェイト間隔を決める機能を有さないので、所定の間隔にてビジーウェイトすることを選ぶ。したがって、該装置によれば、所定の間隔が短い場合に、メモリアクセスが頻繁になる可能性がある。
【００３９】
さらに、特許文献４に開示される排他制御方式は、特許文献２に類似する方式であるので、ビジーウェイトにおけるメモリアクセスに関する負荷は高いという問題を有する。
【００４０】
また、特許文献５に開示されるロック方式は、メモリアクセスに関する負荷が高いという問題を有する。この理由は、特許文献５に開示される方式において、一定期間内にビジーウェイトを繰り返すのに応じて、メモリアクセスが必要となるからである。さらに、特許文献５に開示されるロック方式は、ロック粒度が多様な状況において、オーバーヘッドを低減するのが難しい。これは、該ロック方式において、一定期間が固定であるので、該方式がロック粒度に基づき処理を決めることができないからである。
【００４１】
特許文献７に開示されるロック排他制御方式は、原則ビジーウェイトするので、メモリアクセスに関する負荷が高いという問題を有する。
【００４２】
すなわち、上述した装置は、共通して、ビジーウェイトする処理に伴い、メモリアクセスに関する負荷が高いという問題を有する。
【００４３】
ここで、各ウェイト方式について、考察する。
【００４４】
また、ビジーウェイト方式においては、ビジーウェイト間隔を短く設定することにより、ロックが解放されるのを早く検知できるので、ロック待ち時間を低減することができる。しかし、ビジーウェイト間隔を短く設定することは、上述したように、頻繁なメモリアクセスの原因となる。逆に、ビジーウェイト方式においては、ビジーウェイト間隔を長く設定することにより、メモリアクセスに関する負荷を低減できるものの、ロックが解放されるのを検知できない期間が長くなる。これは、待ち時間を長くするので、中央演算処理装置（ＣＰＵ）における処理効率が低下する原因となる。
【００４５】
一方、スリープウェイト方式においては、上述したように、スリープコストが存在する。したがって、ロックを確保するまでの時間が、スリープコストよりも短いにもかかわらず、スリープウェイトを選ぶことは、待ち時間を長くする原因となる。したがって、の場合には、ＣＰＵにおける処理時間が長くなるという問題がある。
【００４６】
また、たとえば、ロック粒度を小さくすることは、待ち時間を低減する。しかし、粒度を小さくするにつれ、排他制御における処理は、相対的に大きくなる。排他制御は、処理対象とは異なるため、オーバーヘッドである。したがって、ロック粒度を小さくする場合には、排他制御に関する処理のオーバーヘッドが大きくなるという問題がある。
【００４７】
さらに、ロック粒度の分散が大きい場合に、たとえば、ロック粒度に関する履歴に基づき、正確にロック粒度を予測することは難しい。ロック粒度の分散が大きい一例として、通信ネットワークや、入出力チャネル等のリソースがある。これらのリソースは、リソースの外部の影響を受ける。この結果、ロック粒度は、分散が大きくなる。この場合に、排他制御装置は、ロック粒度に基づき排他制御を実行する場合であっても、処理効率が低下するという問題を有する。
【００４８】
本出願人は、上述したような問題（課題）を見出すとともに、係る課題を解決する手段を導出するに至った。以降、このような課題を解決可能な、本発明を実施する実施形態について、図面を参照しながら詳細に説明する。
【００４９】
＜第１の実施形態＞
本発明の第１の実施形態に係る排他制御装置１０１が有する構成と、排他制御装置１０１が行う処理とについて、図１と図２とを参照しながら詳細に説明する。図１は、本発明の第１の実施形態に係る排他制御装置１０１が有する構成を示すブロック図である。図２は、第１の実施形態に係る排他制御装置１０１における処理の流れを示すフローチャートである。
【００５０】
第１の実施形態に係る排他制御装置１０１は、算出部１０２と、制御部１０３とを有する。
【００５１】
排他制御装置１０１は、さらに、ロック部１５１と、アンロック部１５２と、アップデート部１５３とを有してもよい。
【００５２】
たとえば、プロセスは、排他制御を実行する対象となる計算機リソース（資源、以降、「リソース」と表す）に関する制御を取得（確保）する命令（以降、「ロック命令」と表す）を、排他制御装置１０１に送信する。この場合に、ロック命令は、たとえば、該リソースを制御する期間５０１に関する情報を含む。すなわち、プロセスは、該ロック命令とともに、ロック命令に関連付けされた期間５０１（たとえば、リソースに関する処理を排他的に実行する時間）を、排他制御装置１０１に送信する。
【００５３】
まず、算出部１０２は、プロセス等から、ロック命令（すなわち、排他制御命令）とともに、排他制御命令に関連付けされた期間（時間、便宜上、「第２期間」とも表す）５０１を受信する。次に、算出部１０２は、受信した期間５０１を表す情報に基づき、該排他制御命令に関する計算機リソースを使用しない期間（便宜上、「第１期間」と表す）を算出する（ステップＳ１０１）。
【００５４】
ロック命令は、たとえば、「Ｌｏｃｋ（Ｒ，Ｔ）」と表される。すなわち、「Ｌｏｃｋ（Ｒ，Ｔ）」は、リソースＲにするロックを取得する命令であるとともに、リソースＲに関連付けされた期間Ｔを送信する命令である。たとえば、期間Ｔは、プロセッサがリソースＲに関する処理を排他的に実行する期間、あるいは、該期間の推定値を表す。ロック命令は、必ずしも、上述したフォーマットに限定されない。
【００５５】
算出部１０２は、たとえば、期間５０１に関する情報を含むロック命令を受信し、期間５０１を表す情報に基づき、受信したロック命令に関するリソースを使用しない（使用できない）第１期間を算出する（ステップＳ１０１）。
【００５６】
たとえば、第１期間は、該プロセスが、受信したロック命令に関して、リソースに関する処理を排他的に実行することができない期間を表す。たとえば、算出部１０２は、複数のプロセスから受信した期間５０１に関して総和を取ることにより、第１期間を算出する。算出部１０２は、たとえば、受信した期間５０１を２倍することにより算出した値に関して総和を算出することにより、第１期間を算出してもよい。第１期間を算出する方法は、受信した期間５０１に関する総和を算出する手順を含んでいればよいので、上述した例に限定されない。
【００５７】
すなわち、算出部１０２は、たとえば、排他制御命令に関するリソースを使用しているプロセス、及び、排他制御命令に関するリソースが使用可能になるのを待つプロセスに関して、受信した期間５０１の総和を算出することにより、第１期間を算出する。
【００５８】
尚、排他制御装置１０１は、ロック命令を受信するのに応じて、上述した処理に加え、さらに、リソースＲに関する排他制御に係る処理を実行する。排他制御装置１０１は、排他制御が可能であるプロセッサに、リソースＲに関する処理を命じる。また、排他制御装置１０１は、排他制御が不可能であるプロセッサに、不可能である情報を送信する。すなわち、ロック命令を送信したプロセッサは、リソースＲに関する処理を排他的に実行するプロセッサであるか、または、リソースＲに関する排他的な処理が可能になるのを待つプロセッサである。
【００５９】
次に、制御部１０３は、算出部１０２が算出した第１期間に基づき、該第１期間において実行する処理５０２を決定する（ステップＳ１０２）。この場合に、処理５０２は、排他制御命令に関するリソースを使用しない処理である。
【００６０】
たとえば、制御部１０３は、第１期間が、プロセスをスリープする処理、及び、スリープしたプロセスをウェイクアップする処理に要する時間（以降、これらの処理を「準備期間」と表す）よりも短い場合に、ビジーウェイトする処理５０２を決める（決定する）。また、制御部１０３は、第１期間が、準備期間よりも長い場合に、スリープウェイトする処理５０２を決定する。
【００６１】
さらに、制御部１０３は、第１期間が、割り込み処理（スレッド）に関連付けされた時間（期間、便宜上、「第４期間」とも表す）よりも長い場合に、処理５０２として、該割り込み処理を選んでもよい。この場合に、該割り込み処理は、たとえば、該割り込み処理に要する時間（以降、「実行時間」と表す）に関連付けされている。または、制御部１０３は、複数の割り込み処理のうち、実行時間が最短の特定の割り込み処理を選び、第１期間が、該特定の割り込み処理に関連付けされた実行時間よりも長い場合に、該特定の割り込み処理を選んでもよい。
【００６２】
尚、上述した説明において、割り込み処理に関連付けされた時間は、実行時間であるとしたが、必ずしも、実行時間である必要はない。たとえば、割り込み処理に関連付けされた時間は、実行時間を推定した時間であってもよい。以降の説明においても、同様である。
【００６３】
たとえば、プロセッサ（または、中央演算処理装置、ＣＰＵ）は、割り込み処理を記憶可能な割り込み記憶部に割り込み処理に関する情報を格納する命令（以降、「格納命令」と表す）を、排他制御装置１０１を含むオペレーティングシステムに送信する。たとえば、格納命令は、ｉｎｔｑ＿ｓｅｔ（ｉ，ｉＦｕｎｃ，ｉＴ，ｉＥＰＳＢ）と表すことができる。
【００６４】
該格納命令は、割り込み処理において実行する一連の処理ｉＦｕｎｃと、割り込み処理に関連付けされた時間ｉＴ（たとえば、割り込み処理に要する時間）とに関する情報を含む。さらに、該格納命令は、上述した情報と、拡張コンテキスト退避領域ｉＥＰＳＢとを、割り込み処理ｉとして設定する命令である。それとともに、該格納命令は、設定した割り込み処理ｉに関する上述した情報を、割り込み記憶部に格納する命令である。格納命令は、必ずしも、上述したフォーマットに限定されない。
【００６５】
制御部１０３は、割り込み記憶部が記憶する割り込み処理の中から、特定の割り込み処理を、複数個、選んでもよい。この場合に、制御部１０３は、特定の割り込み処理に関連付けされた時間ｉＴに関して総和を算出し、算出した値と、第１期間とを比較する。制御部１０３は、第１期間が、算出した値よりも長い場合に、特定の割り込み処理を、処理５０２として決める。
【００６６】
制御部１０３は、特定の割り込み処理を決めた後に、上述した処理を繰り返してもよい。この場合に、制御部１０３は、たとえば、第１期間から割り込み処理に要する時間を引き算することにより算出される値を、新たに、第１期間として記憶する。
【００６７】
次に、第１の実施形態に係る排他制御装置１０１に関する効果について説明する。
【００６８】
本実施形態に係る排他制御装置１０１によれば、たとえば、受信したロック命令に関して、排他制御命令に関するリソースを使用しない第１期間をより正確に推定できる。この結果、制御部１０３が、第１期間に実行する処理５０２を適切に決めることができるので、本実施形態に係る排他制御装置１０１によれば、高い並列処理性能を達成することができる。
【００６９】
この理由は、該排他制御に関連付けされた期間５０１が、該排他制御に関するリソースを使用する期間等を反映しているからである。算出部１０２は、プロセスが排他制御に関するリソースを使用する期間に基づき、排他制御に関するリソースを使用できない第１期間を算出する。したがって、算出される第１期間は、正確な値である。この結果、制御部１０３は、該第１期間に基づき、上述したように適切な処理５０２を決めることができる。すなわち、制御部１０３が、たとえば、処理５０２として特定の割り込み処理を決めることにより、プロセッサが排他制御に関するリソースが使用可能になるのを待つ時間を隠蔽することができる。
【００７０】
一方、特許文献１に開示された装置は、必ずしも、排他制御に関するリソースを使用できない期間を正確に推定するとは限らない。この理由は、該装置が、排他制御に関するリソースを使用する期間の平均に基づき、処理を選ぶからである。たとえば、該期間が、プロセスにより、大きく異なる場合に、該期間の平均は、必ずしも、排他制御に関するリソースを使用できない期間を推定する根拠として適切であるとは限らない。
【００７１】
また、特許文献２に開示された装置は、必ずしも、排他制御に関するリソースを使用できない期間を精緻に推定するとは限らない。この理由は、共有計算資源（リソース）が解放されるのを待つプロセスの個数が、必ずしも、排他制御に関するリソースを使用できない期間と高い相関関係があるとは限らないからである。
【００７２】
特許文献３に開示された排他制御装置１０１は、必ずしも、排他制御に関するリソースを使用できない期間を正確に推定するとは限らない。この理由は、排他制御に関するリソースを使用する期間に関する履歴が、必ずしも、新たに排他制御に関するリソースを使用する期間を推定する根拠とはならないからである。たとえば、履歴における期間と、新たに推定する対象である期間とが類似しない場合に、該推定は、誤差を含む推定である可能性が高い。
【００７３】
したがって、特許文献１乃至特許文献３等に開示された装置は、たとえば、ロック粒度がプロセスによって大きく異なる場合に、高い並列処理性能を得ることができない。
【００７４】
＜第２の実施形態＞
次に、上述した第１の実施形態を基本とする本発明の第２の実施形態について説明する。
【００７５】
以降の説明においては、本実施形態に係る特徴的な部分を中心に説明すると共に、上述した第１の実施形態と同様な構成については、同一の参照番号を付すことにより、重複する説明を省略する。
【００７６】
図３を参照しながら、第２の実施形態に係るオペレーティングシステム（以降、「ＯＳ２０５」と表す）が有する構成と、ＯＳ２０５が行う処理とについて説明する。図３は、本発明の第２の実施形態に係るＯＳ２０５を含むコンピュータシステムが有する構成を示すブロック図である。
【００７７】
コンピュータシステムは、システムタイマー２０３と、複数のプロセッサ２０１と、主記憶装置（以降、「メモリ」と表す）２０４とを有する。メモリ２０４は、本実施形態に係るＯＳ２０５を記憶することができる。ＯＳ２０５は、排他制御装置１０１と、割り込み処理部２０６と、プロセススイッチ２０７と、アイドル処理部２０８とを有する。
【００７８】
以降において、プロセッサは、複数のプロセッサ２０１に含まれる特定のプロセッサを表すとする。
【００７９】
ＯＳ２０５は、単一のカーネルを含む。ここで、カーネルは、メモリ２０４において実行される処理を表す。また、カーネルは、ユーザプロセスを実行するメモリ空間と異なるカーネルメモリ空間において実行される。ＯＳ２０５は、カーネルに従い、複数のユーザプロセスを処理する。
【００８０】
ユーザプロセスは、該ユーザプロセスに固有のメモリ空間と、拡張コンテキストと含む。
【００８１】
ＯＳ２０５は、たとえば、プロセススイッチ２０７を用いて、プロセッサが処理するプロセスを他のプロセスに切り替える。また、ＯＳ２０５は、たとえば、ユーザプロセスに関する制御を実行する。ＯＳ２０５は、割り込み処理、システムコールに関する処理、及び、プロセスの生成及び終了に関する処理等の処理を実行する。また、ＯＳ２０５は、割り込み処理に関する制御、または、拡張コンテキストを切り替える処理、及び、メモリ空間を切り替える処理等を実行することにより、プロセッサが実行しているプロセスを切り替える。
【００８２】
さらに、ＯＳ２０５は、図４に例示するロック構造体に従い記述されるロック情報に基づき、リソースに関する排他制御を実行する。図４は、ロック構造体が有する構造の一例を概念的に表す図である。
【００８３】
ロック情報（ロック構造体）は、リソースに関連付けされた情報であり、ロックワードＬＷと、開始タイミングＬＴと、待ち時間Ｗと、ロック時間Ｄとに関する情報を含む。また、ロック情報は、さらに、経過時間Ｅに関する情報を含んでもよい。
【００８４】
ロックワードＬＷは、アトミックにアクセス（すなわち、一度に処理）され、プロセスがロックを取得しているか否かを表す情報（フラグ）である。開始タイミングＬＴは、ロックが取得される場合における、システムタイマー２０３が示す値を記憶することができる。ロック時間Ｄは、ロックに関連付けされた期間を記憶することができ、たとえば、プロセッサがロックし続ける期間を記憶することができる。該ロック時間Ｄにおける値は、推定値であってもよいし、実際にリソースに関する処理を排他的に実行する期間であってもよい。待ち時間Ｗは、たとえば、１つ以上のプロセッサに関するロック時間Ｄの総和を記憶することができる。待ち時間Ｗは、リソースが解放されるのを待つプロセッサがない場合に０を記憶する。
【００８５】
経過時間Ｅは、たとえば、プロセッサが排他制御を開始するタイミングから、システムタイマー２０３が示す時刻までの時間を記憶することができる。
【００８６】
また、ＯＳ２０５は、割り込み処理をプロセッサに命令する等、割り込み処理に関する制御等を実行する。
【００８７】
排他制御装置１０１は、上述した処理を行うことにより、リソースに関して排他制御を実行する。また、排他制御装置１０１は、上述した構成の他に、ロック部１５１と、アンロック部１５２と、アップデート部１５３とを有してもよい。
【００８８】
ロック部１５１は、プロセスからロック命令を受信し、受信したロック命令に応じて、ロック命令に記述されたリソースに関するロック情報を読み取る。次に、ロック部１５１は、読み取ったロック情報に基づき、他のプロセスがリソースを取得しているか否かを判定する。ロック部１５１は、他のプロセスがリソースを取得していないと判定する場合に、受信したロック命令に従い、ロックワードＬＷを更新する等の処理を実行することによりロック情報を更新する。これにより、プロセスは、該リソースに関する処理を排他的に実行することができる。
【００８９】
アンロック部１５２は、プロセスから受信するアンロック命令に応じて、ロック情報を更新する。これにより、アンロック部１５２は、リソースに関する処理を排他的に実行するプロセスから、ロックを解放する。この結果、該ロックは、解放される。
【００９０】
たとえば、アンロック命令は、「Ｕｎｌｏｃｋ（Ｒ，Ｔ）」と表される。アンロック命令は、プロセッサがリソースＲに関するロックを解放する命令である。たとえば、期間Ｔを指定する場合に、期間Ｔは、対応する「Ｌｏｃｋ（Ｒ，Ｔ）」において指定した期間Ｔと同じである必要がある。尚、アンロック命令は、リソースＲに関するロックを解放する命令であればよいので、必ずしも、上述した例に限定されない。
【００９１】
アップデート部１５３は、プロセスから受信するアップデート命令に応じて、システムタイマー２０３を参照することにより、特定のプロセスがリソースに関する処理を排他的に実行する時間を表すロック時間Ｄを更新する。
【００９２】
たとえば、アップデート命令は、「Ｕｐｄａｔｅ（Ｒ，ＡＴ）」と表される。アップデート命令は、ロック時間Ｄを再設定する命令である。たとえば、プロセッサは、補正時間（正数または負数）ＡＴを設定することにより、ロック時間Ｄを再設定する。すなわち、アップデート部１５３は、アップデート命令を受信するのに応じて、ロック時間Ｄに補正時間ＡＴを加えることにより、リソースＲに係るロック時間Ｄを再設定する。
【００９３】
アップデート部１５３が、アップデート命令に応じて期間Ｔを再設定することにより、第１期間を算出する基となるロック時間Ｄは、最新の値となる。この結果、算出部１０２は、さらに正確に、第１期間を算出することができる。
【００９４】
排他制御装置１０１における算出部１０２は、ロック部１５１が受信するロック命令に基づき、本発明の各実施形態に示す処理を実行する。
【００９５】
また、排他制御装置１０１における制御部１０３は、第１期間に実行する処理としてビジーウェイトを選ぶ場合に、プロセッサに、一定の期間ビジーループする命令を送信する。プロセッサは、該命令を受信し、受信した命令に応じて、一定の期間、ビジーループする。
【００９６】
割り込み処理部２０６は、割り込みが発生するのに応じて、該割り込みに関する割り込み処理に関して、ハンドリング（制御）を実行する。たとえば、ハンドリングは、割り込み処理に関する情報を割り込み記憶部（スレッドキュー、不図示）に格納する、割り込み処理を実行する、または、割り込み処理に関する情報を割り込み記憶部から消去する等処理を含む。
【００９７】
たとえば、割り込み処理部２０６は、上述した格納命令を受信するのに応じて、割り込み処理に関する情報を、割り込み記憶部に格納する。
【００９８】
また、割り込み処理部２０６は、割り込み処理を実行する実行命令を受信するのに応じて、該割り込み処理を実行する。
【００９９】
たとえば、実行命令は、たとえば、割り込み処理ｉを実行する命令を表す「ｉｎｔｑ＿ｒｕｎ（ｉ）」と表される。
【０１００】
割り込み処理は、図５に例示するように、処理ｉＦｕｎｃと、時間ｉＴと、退避領域ｉＥＰＳＢとを含む。図５は、割り込み処理に関する構成の一例を概念的に表す図である。処理ｉＦｕｎｃは、割り込みが発生するのに応じて実行する一連の処理である。時間ｉＴは、割り込み処理に関連付けされた時間である。退避領域ｉＥＰＳＢは、割り込み処理に拡張コンテキストが必要な場合に、拡張コンテキストを格納する記憶領域として使用される。
【０１０１】
割り込み処理部２０６は、実行命令を受信するのに応じて、割り込み処理ｉに関する情報を、割り込み記憶部から読み取り、読み取った情報を割り込み記憶部から削除する。次に、割り込み処理部２０６は、読み取った情報が退避領域ｉＥＰＳＢを含む場合に、拡張コンテキストを退避領域ｉＥＰＳＢに格納する。次に、割り込み処理部２０６は、処理ｉＦｕｎｃに関する命令をプロセッサに送信する。プロセッサは、該命令を受信し、受信した命令に応じて、処理ｉＦｕｎｃに応じた処理を実行する。さらに、割り込み処理部２０６は、読み取った情報が退避領域ｉＥＰＳＢを含む場合に、退避領域ｉＥＰＳＢに退避した情報を拡張コンテキストに格納する。
【０１０２】
また、制御部１０３が、最短の処理時間である割り込み処理に関して判定する場合に、割り込み処理部２０６は、割り込み記憶部から、処理時間が最短の割り込み処理を選んでもよい。あるいは、割り込み処理部２０６は、割り込み記憶部から、処理時間が第１期間以下であり、かつ、最長である割り込み処理を選んでもよい。すなわち、割り込み処理部２０６は、割り込み記憶部から、特定の割り込み処理を選んでもよい。
【０１０３】
アイドル処理部２０８は、実行する処理がない場合に処理を開始し、すなわち、処理が発生するのを待つ。
【０１０４】
アイドル処理部２０８は、割り込み記憶部が割り込み処理を記憶するか否かを判定する。アイドル処理部２０８は、割り込み処理が存在する場合に、たとえば、最長の処理時間である割り込み処理を選ぶ。次に、アイドル処理部２０８は、割り込み処理部２０６に、選んだ割り込み処理を実行する実行命令を送信する。割り込み処理部２０６は、該実行命令を受信し、受信した実行命令に応じて、上述したような処理を実行する。
【０１０５】
さらに、アイドル処理部２０８は、割り込み処理が存在しない場合に、ユーザプロセスの中から、実行待ち状態にあるプロセスを選び、選んだプロセスに関する情報を、プロセススイッチ２０７に送信する。プロセススイッチ２０７は、該情報を受信し、受信した情報に基づき、プロセッサに該プロセスを実行することを命令する。この処理により、プロセッサは、ユーザプロセスを実行する。また、アイドル処理部２０８は、ユーザプロセスが、実行可能なプロセスを含まない場合に、プロセッサを一定時間ウェイトする。その後、アイドル処理部２０８は、再度、上述した処理を繰り返す。
【０１０６】
また、プロセススイッチ２０７は、プロセッサが処理しているプロセスを、別のプロセスに切り替える。プロセススイッチ２０７は、たとえば、プロセスをスリープ状態に設定する。アイドル処理部２０８は、上述したように、プロセスがスリープ状態に設定されるのに応じて、ユーザプロセスの中から、実行待ち状態に設定されたプロセスを探索する。アイドル処理部２０８が実行待ち状態に設定されたプロセスを見つける場合に、プロセススイッチ２０７は、プロセッサにおけるメモリ空間を、該プロセスに関するメモリ空間に切り替える。プロセススイッチ２０７は、ユーザプロセスに実行待ち状態に設定されたプロセスがない場合に、アイドル命令をプロセッサに送信することにより、プロセッサにおけるメモリ空間をアイドルプロセスに関するメモリ空間に切り替える。アイドル命令は、アイドルプロセスを実行する命令であり、たとえば、「ｉｄｌｅ＿ｐｒｏｃ（）」と表される。
【０１０７】
プロセススイッチ２０７は、たとえば、スリープ状態に設定されたプロセスを、実行待ち状態に設定する。プロセススイッチ２０７は、アイドル状態にてリソースが解放されるのを待つプロセッサがあれば、プロセッサ間通信等を介して、該プロセッサを実行待ち状態に設定することにより、実行待ち状態にあるプロセスを実行する命令を送信する。ここで、アイドル状態にてリソースが解放されるのを待つプロセッサは、アイドルプロセスにおいて、ウェイト命令を実行しているプロセッサである。
【０１０８】
プロセススイッチ２０７は、さらに、メモリ空間を切り替える処理を実行する。拡張コンテキストは、メモリ空間に配置される。このため、拡張コンテキストを退避・復帰する処理は、メモリ空間を切り替える機能の一部であると考えることもできる。さらに、プロセススイッチ２０７は、退避領域ｉＥＰＳＢに退避した情報を拡張コンテキストに格納する。
【０１０９】
次に、図６を参照しながら、ＯＳ２０５及び排他制御装置１０１に係る処理について説明する。図６は、コンピュータシステムにおける処理の流れの一例を表すシーケンス図である。図６は、矢印の方向に時間が進むことを表す。
【０１１０】
図６に示す例において、プロセッサＰ１乃至プロセッサＰ４は、リソースＲに関する処理を排他的に実行するとする。また、この場合に、プロセッサＰ１乃至プロセッサＰ４は、それぞれ、プロセスを処理し、さらに、システムコール、または、割り込み処理を用いて、ＯＳ２０５に処理を命令するとする。
【０１１１】
まず、図６に示す例においては、プロセッサＰ１は、たとえば、ｔ５１に、「Ｌｏｃｋ（Ｒ，Ｔ１）」を、ロック部１５１に送信することにより、リソースＲに関する処理を排他的に実行することが可能になる。すなわち、プロセッサＰ１は、ｔ５１に、リソースＲをロックする。ロック部１５１が、「Ｌｏｃｋ（Ｒ，Ｔ１）」を受信するのに応じて、算出部１０２は、開始タイミングＬＴにｔ５１（すなわち、システムタイマーの値）を格納し、ロック時間ＤにＴ１を格納し、さらに、待ち時間Ｗに０を格納する。この場合に、算出部１０２は、経過時間Ｅに０（＝Ｔ１−Ｔ１）を格納してもよい。また、ロック部１５１は、ロックワードＬＷにＰ１を格納する。
【０１１２】
次に、プロセッサＰ２は、たとえば、ｔ５２に、「Ｌｏｃｋ（Ｒ，Ｔ２）」をロック部１５１に送信する。ロック部１５１は、プロセッサＰ２が送信した「Ｌｏｃｋ（Ｒ，Ｔ２）」を受信する。しかし、ロック部１５１は、リソースＲに関するロックワードＬＷがＰ１を格納しているので、プロセッサＰ２にリソースＲをロックできない情報を送信する。
【０１１３】
次に、算出部１０２は、経過時間Ｅにｔ５２−ｔ５１（＝ｔ５２−ＬＴ）を格納し、第１期間として、たとえば、Ｔ１−ｔ５２＋ｔ５１（＝Ｄ＋Ｗ−Ｅ）を算出する。すなわち、この例において、第１期間は、プロセッサＰ１が、ｔ５２以降に、リソースＲに関する処理を排他的に実行する時間を表す。その後、算出部１０２は、プロセッサＰ２がリソースＲをロックできないので、待ち時間ＷにＴ２を設定する。制御部１０３は、算出した第１期間に基づき、プロセッサＰ２が実行する処理を決める。
【０１１４】
プロセッサＰ３は、たとえば、ｔ５３に、「Ｌｏｃｋ（Ｒ，Ｔ３）」をロック部１５１に送信する。ロック部１５１は、プロセッサＰ３が送信した「Ｌｏｃｋ（Ｒ，Ｔ３）」を受信する。しかし、ロック部１５１は、リソースＲに関するロックワードＬＷがＰ１を格納しているので、プロセッサＰ３にリソースＲをロックできない情報を送信する。
【０１１５】
算出部１０２は、経過時間Ｅにｔ５３−ｔ５１（＝ｔ５３−ＬＴ）を格納し、第１期間として、たとえば、Ｔ１＋Ｔ２−ｔ５３＋ｔ５１（＝Ｄ＋Ｗ−Ｅ）を算出する。すなわち、この例において、第１期間は、プロセッサＰ１が、ｔ５３以降に、リソースＲに関する処理を排他的に実行する時間と、プロセッサＰ２がリソースＲに関する処理を排他的に実行する時間とを合わせた値である。その後、算出部１０２は、プロセッサＰ３がリソースＲをロックできないので、待ち時間Ｗに（Ｔ２＋Ｔ３）の値を格納する。制御部１０３は、算出した第１期間に基づき、プロセッサＰ３が実行する処理を決める。
【０１１６】
その後、プロセッサＰ１は、ｔ５４に、「Ｕｎｌｏｃｋ（Ｒ，Ｔ１）」をアンロック部１５２に送信する。アンロック部１５２は、「Ｕｎｌｏｃｋ（Ｒ，Ｔ１）」を受信するのに応じて、ロックワードＬＷを０（すなわち、どのプロセッサもロックを取得していない）に設定する。この例において、アンロック部１５２は、待ち時間Ｗを読み取り、待ち時間Ｗが０よりも大きいと判定するので、スリープ状態にあるプロセスをウェイクアップしない。
【０１１７】
説明の便宜上、ｔ５４において、「Ｌｏｃｋ（Ｒ，Ｔ２）」に関する処理が開始されるものとする。尚、必ずしも、あるプロセッサがリソースを解放するタイミングと、他のプロセッサがロックを確保するタイミングとが同じである必要はない。
【０１１８】
ロック部１５１は、ｔ５４において、「Ｌｏｃｋ（Ｒ，Ｔ２）」に関する処理を開始する。算出部１０２は、開始タイミングＬＴにｔ５４（すなわち、システムタイマーの値）を格納し、ロック時間ＤにＴ２を格納し、さらに、待ち時間ＷにＴ３（Ｔ２＋Ｔ３−Ｔ２）を格納する。この場合に、算出部１０２は、経過時間Ｅに０を格納してもよい。また、ロック部１５１は、ロックワードＬＷにＰ２を格納する。
【０１１９】
プロセッサＰ４は、たとえば、ｔ５５に、「Ｌｏｃｋ（Ｒ，Ｔ４）」をロック部１５１に送信する。ロック部１５１は、プロセッサＰ４が送信した「Ｌｏｃｋ（Ｒ，Ｔ４）」を受信する。しかし、ロック部１５１は、リソースＲに関するロックワードＬＷがＰ２を格納しているので、プロセッサＰ４にリソースＲをロックできない情報を送信する。
【０１２０】
算出部１０２は、経過時間Ｅにｔ５５−ｔ５４（＝ｔ５５−ＬＴ）の値を格納し、第１期間として、たとえば、Ｔ２＋Ｔ３−ｔ５５＋ｔ５４（＝Ｄ＋Ｗ−Ｅ）を算出する。その後、算出部１０２は、プロセッサＰ４がリソースＲをロックできないので、待ち時間Ｗに（Ｔ３＋Ｔ４）の値を設定する。制御部１０３は、算出した第１期間に基づき、プロセッサＰ４が実行する処理を決める。
【０１２１】
その後、プロセッサＰ２は、ｔ５６に、「Ｕｎｌｏｃｋ（Ｒ，Ｔ２）」をアンロック部１５２に送信する。アンロック部１５２は、「Ｕｎｌｏｃｋ（Ｒ，Ｔ２）」を受信するのに応じて、ロックワードＬＷを０（すなわち、どのプロセッサもロックを取得していない）に設定する。この例において、アンロック部１５２は、待ち時間Ｗを読み取り、待ち時間Ｗが０よりも大きいと判定するので、スリープ状態にあるプロセスをウェイクアップしない。
【０１２２】
説明の便宜上、ｔ５６において、「Ｌｏｃｋ（Ｒ，Ｔ３）」に関する処理が開始されるものとする。尚、必ずしも、あるプロセッサがリソースを解放するタイミングと、他のプロセッサがロックを確保するタイミングとが同じである必要はない。
【０１２３】
ロック部１５１は、ｔ５６において、「Ｌｏｃｋ（Ｒ，Ｔ３）」に関する処理を開始する。算出部１０２は、開始タイミングＬＴにｔ５６（すなわち、システムタイマーの値）を格納し、ロック時間ＤにＴ３を格納し、さらに、待ち時間ＷにＴ４（Ｔ３＋Ｔ４−Ｔ３）を格納する。この場合に、算出部１０２は、経過時間Ｅに０を格納してもよい。また、ロック部１５１は、ロックワードＬＷにＰ３を格納する。
【０１２４】
その後、プロセッサＰ３は、ｔ５７に、「Ｕｎｌｏｃｋ（Ｒ，Ｔ３）」をアンロック部１５２に送信する。アンロック部１５２は、「Ｕｎｌｏｃｋ（Ｒ，Ｔ３）」を受信するのに応じて、ロックワードＬＷを０（すなわち、どのプロセッサもロックを取得していない）に設定する。この例において、アンロック部１５２は、待ち時間Ｗを読み取り、待ち時間Ｗが０よりも大きいと判定するので、スリープ状態にあるプロセスをウェイクアップしない。
【０１２５】
説明の便宜上、ｔ５７において、「Ｌｏｃｋ（Ｒ，Ｔ４）」に関する処理が開始されるものとする。尚、必ずしも、あるプロセッサがリソースを解放するタイミングと、他のプロセッサがロックを確保するタイミングとが同じである必要はない。
【０１２６】
ロック部１５１は、ｔ５７において、「Ｌｏｃｋ（Ｒ，Ｔ４）」に関する処理を開始する。算出部１０２は、開始タイミングＬＴにｔ５７（すなわち、システムタイマーの値）を格納し、ロック時間ＤにＴ４を格納し、さらに、待ち時間Ｗに０（Ｔ４−Ｔ４）を格納する。この場合に、算出部１０２は、経過時間Ｅに０を格納してもよい。また、ロック部１５１は、ロックワードＬＷにＰ４を格納する。
【０１２７】
その後、プロセッサＰ４は、「Ｕｎｌｏｃｋ（Ｒ，Ｔ４）」をアンロック部１５２に送信する。アンロック部１５２は、「Ｕｎｌｏｃｋ（Ｒ，Ｔ４）」を受信するのに応じて、ロックワードＬＷを０（すなわち、どのプロセッサもロックを取得していない）に設定する。この例において、アンロック部１５２は、待ち時間Ｗを読み取り、待ち時間Ｗが０であると判定するので、スリープ状態にあるプロセスをウェイクアップする。スリープ状態プロセスは、ウェイクアップシグナルを受信し、受信したウェイクアップシグナルに応じてウェイクアップする。すなわち、該プロセスは、スリープ状態から実行待ち状態に設定される。
【０１２８】
ここで、プロセッサは、スリープ状態に設定される前に実行していたプロセスを、ウェイクアップ後に実行するとは限らない。
【０１２９】
次に、ケース１及びケース２の場合において、制御部１０３が、第１期間に基づき、処理を選ぶ処理について説明する。以降の説明においては、制御部１０３は、第１期間、スリープウェイトするのに要する準備期間等に基づいて、プロセッサが第１期間において実行する処理を選ぶ。
【０１３０】
ケース１：割り込み記憶部が割り込み処理を格納する場合。
【０１３１】
割り込み処理部２０６は、割り込み記憶部が格納する割り込み処理のうち、割り込み処理に関連付けされた時間（たとえば、「実行時間」）ｉＴ２が最短の割り込み処理ｉ２を選ぶ。
【０１３２】
ここで、説明の便宜上、この例においては、第１期間が、時間ｉＴ２よりも長いと仮定する。
【０１３３】
制御部１０３は、第１期間が、時間ｉＴ２よりも長いと判定するので、プロセッサに割り込み処理ｉ２を実行する実行命令を送信する。プロセッサは、該実行命令を受信し、受信した命令に応じて、割り込み処理ｉ２を実行する。
【０１３４】
次に、割り込み処理部２０６は、割り込み記憶部が格納する割り込み処理のうち、時間ｉＴ１が最短の割り込み処理ｉ１を選ぶ。制御部１０３は、時間ｉＴ１と、（第１期間−ｉＴ２）（新たに、第１期間とする）とを比較する。
【０１３５】
ここで、説明の便宜上、この例においては、第１期間が、時間ｉＴ１よりも長いと仮定する。
【０１３６】
制御部１０３は、第１期間が時間ｉＴ１よりも長いと判定するので、プロセッサに割り込み処理ｉ１を実行する実行命令を送信する。
【０１３７】
プロセッサは、該実行命令を受信する。
【０１３８】
ここで、たとえば、割り込み処理ｉ１は、拡張コンテキストを退避領域ｉＥＰＳＢに格納する処理を含むとする。
【０１３９】
この場合に、割り込み処理部２０６は、拡張コンテキストを退避領域ｉＥＰＳＢに格納する。次に、プロセッサは、受信した実行命令に応じて、割り込み処理ｉ１を実行する。次に、割り込み処理部２０６は、退避領域ｉＥＰＳＢから拡張コンテキストに格納する。
【０１４０】
次に、割り込み処理部２０６は、割り込み記憶部が格納する割り込み処理のうち、時間ｉＴ３が最短の割り込み処理ｉ３を選ぶ。制御部１０３は、時間ｉＴ３と、（第１期間−ｉＴ１）（新たに、第１期間とする）とを比較する。
【０１４１】
ここで、説明の便宜上、この例においては、第１期間が、時間ｉＴ３よりも長いと仮定する。
【０１４２】
制御部１０３は、第１期間が時間ｉＴ３よりも長いと判定するので、プロセッサに割り込み処理ｉ３を実行する実行命令を送信する。
【０１４３】
プロセッサは、該命令を受信し、受信した実行命令に応じて、割り込み処理ｉ３を実行する。
【０１４４】
次に、割り込み処理部２０６は、割り込み記憶部が格納する割り込み処理のうち、時間ｉＴ４が最短の割り込み処理ｉ４を選ぶ。制御部１０３は、時間ｉＴ４と（、第１期間−ｉＴ３）（新たに、第１期間とする）とを比較する。
【０１４５】
ここで、説明の便宜上、この例において、第１期間は、時間ｉＴ４よりも短いと仮定する。さらに、第１期間は、準備期間よりも短いと仮定する。
【０１４６】
制御部１０３は、第１期間が時間ｉＴ４及び準備期間よりも短いと判定するので、プロセッサに、ビジーウェイトする命令を送信する。プロセッサは、該命令を受信し、受信した命令に応じて、ビジーウェイトする。
【０１４７】
ケース２：割り込み記憶部が、第１期間に実行可能な割り込み処理を格納しない場合。
【０１４８】
制御部１０３は、第１期間と、準備期間とを比較する。制御部１０３は、第１期間が準備期間よりも長いと判定する場合に、プロセッサにスリープウェイトする命令を送信する。プロセッサは、該命令を受信し、受信した命令に基づきスリープウェイトする。
【０１４９】
プロセッサがスリープウェイトする場合に、プロセススイッチ２０７は、該プロセッサに、実行待ち状態にあるプロセスを実行する命令を送信する。プロセッサは、該命令を受信し、受信した命令に応じて、該プロセスを実行する。また、プロセススイッチ２０７は、実行待ち状態にあるプロセスがないと判定する場合に、プロセッサに、アイドルプロセスを実行する命令を送信する。プロセッサは、該命令を受信し、受信した命令に応じて、該アイドルプロセスを実行する。すなわち、プロセッサは、アイドル状態に設定される。
【０１５０】
制御部１０３は、割り込み記憶部が第１期間において実行可能な割り込み処理を含まず、さらに、第１期間が準備期間よりも短い場合に、プロセッサに、ビジーウェイト間隔（たとえば、Ｄ＋Ｗ−Ｅ）にてビジーウェイトする命令を送信する。プロセッサは、該命令を受信し、受信した命令に応じてビジーウェイトする。
【０１５１】
次に、図７乃至図１２を参照しながら、本実施形態に係る排他制御装置１０１における処理について説明する。図７は、ロック命令を受信する場合における、第２の実施形態に係る排他制御装置１０１における処理を表すフローチャートである。図８は、アンロック命令を受信する場合における、第２の実施形態に係る排他制御装置１０１における処理を表すフローチャートである。図９は、アップデート命令を受信する場合における、第２の実施形態に係る排他制御装置１０１における処理を表すフローチャートである。図１０は、格納命令を受信する場合における、第２の実施形態に係る排他制御装置１０１における処理を表すフローチャートである。図１１は、実行命令を受信する場合における、第２の実施形態に係る排他制御装置１０１における処理を表すフローチャートである。図１２は、アイドル命令を受信する場合における、第２の実施形態に係る排他制御装置１０１における処理を表すフローチャートである。
【０１５２】
まず、図７を参照しながら、排他制御装置１０１がロック命令に応じて行う処理について説明する。
【０１５３】
ロック部１５１は、ロック命令を受信するのに応じて、あるプロセッサに対してロックワードＬＷを排他的にロック状態に設定できるか否かを判定する（ステップＳ７０１）。ロック部１５１は、設定できると判定する場合（ステップＳ７０１にてＹＥＳと判定）に、開始タイミングＬＴに、システムタイマー２０３が示す値を格納する（ステップＳ７０２）。ロック部１５１は、ロックワードＬＷを排他的にロック状態に設定できないと判定する場合に（ステップＳ７０１にてＮＯと判定）、該プロセッサをロック待ち状態に移行する。
【０１５４】
次に、算出部１０２は、システムタイマー２０３が示す値から開始タイミングＬＴを引き、算出した結果を経過時間Ｅに格納する。算出部１０２は、さらに、ロック時間Ｄと経過時間Ｅとのうち大きな値を、ロック時間Ｄとして格納してもよい。
【０１５５】
次に、算出部１０２は、式１に従い、第１期間を算出する（ステップＳ７０３）。
【０１５６】
（第１期間）＝Ｄ−Ｅ＋Ｗ・・・（式１）。
【０１５７】
すなわち、算出部１０２は、実行している排他制御に関して、ロック時間Ｄと、経過時間Ｅとを比較する。算出部１０２は、経過時間Ｅがロック時間Ｄよりも長いと判定する場合に、リソースが使用可能になるのを待つプロセスに関して、該排他制御に関連付けされた期間の総和し、算出した値を第１期間とする。また、算出部１０２は、経過時間Ｅがロック時間Ｄよりも短いと判定する場合に、リソースが使用可能になるのを待つプロセス及び排他制御に関する処理を実行するプロセスに関して、該期間の総和を算出する。次に、算出部１０２は、算出した総和から、経過時間Ｅを引くことにより、第１期間を算出する。
【０１５８】
この処理により、排他制御に関するリソースを使用できない第１期間をさらに正確に推定できる。この理由は、算出部１０２が、たとえば、排他制御に関するリソースを使用する推定時間であるロック時間Ｄを、実際に該排他制御に関する処理を実行する経過時間Ｅに基づき修正した後に、第１期間を算出するからである。
【０１５９】
次に、算出部１０２は、待ち時間Ｗに受信したロック命令に応じた期間を加え、算出した値を待ち時間Ｗに格納する（ステップＳ７０４）。
【０１６０】
次に、制御部１０３は、割り込み記憶部に割り込み処理ｉが存在し、かつ、時間ｉＴが最短の割り込み処理に関して、時間ｉＴが第１期間よりも短い場合（ステップＳ７０５にてＹＥＳと判定）に、プロセッサに、割り込み処理ｉを命令する（ステップＳ７０７）。
【０１６１】
次に、算出部１０２は、待ち時間Ｗから受信したロック命令に応じた期間を引き、算出した値を待ち時間Ｗに格納する（ステップＳ７１０）。次に、ロック部１５１は、ロックが取得できるか否かを調べる。以降、排他制御装置１０１は、ロックが取得できるまで上述した処理を繰り返し実行する。
【０１６２】
また、制御部１０３は、割り込み記憶部が第１期間において実行可能な割り込み処理を記憶しない場合（ステップＳ７０５にてＮＯと判定）に、第１期間と、準備期間とを比較する（ステップＳ７０６）。制御部１０３は、第１期間が準備期間よりも長いと判定する場合（ステップＳ７０５にてＹＥＳと判定）に、プロセッサに、スリープウェイトする命令を送信する（ステップＳ７０８）。制御部１０３は、第１期間が準備期間よりも短いと判定する場合（ステップＳ７０５にてＮＯと判定）に、プロセッサに、ビジーウェイト間隔（たとえば、Ｄ＋Ｗ−Ｅ）にてビジーウェイトする命令を送信する（ステップＳ７０９）。
【０１６３】
次に、図８を参照しながら、排他制御装置１０１がアンロック命令に応じて行う処理について説明する。
【０１６４】
算出部１０２は、ロック時間Ｄに０を格納する（ステップＳ８０１）。次に、アンロック部１５２は、ロックワードＬＷをアンロック状態に設定する（ステップＳ８０２）。次に、アンロック部１５２は、スリープ状態のプロセスが存在し、さらに、待ち時間Ｗが０であると判定する場合（ステップＳ８０３にてＹＥＳと判定）に、該プロセスにウェイクアップシグナルを送信することにより、該プロセスをウェイクアップする（ステップＳ８０４）。
【０１６５】
上述した処理により、アンロック部１５２は、ロックが解放されるのを待つプロセスがない場合に、スリープしているプロセスをウェイクアップする。この結果、アンロック部１５２によれば、ウェイクアップする回数を低減することができる。
【０１６６】
次に、図９を参照しながら、排他制御装置１０１がアップデート命令に応じて行う処理について説明する。
【０１６７】
アップデート命令は、リソースＲをロックしているプロセッサが、ロック時間Ｄを再設定する命令である。たとえば、プロセッサは、「Ｕｐｄａｔｅ（Ｒ，ＡＴ）」に、補正時間（正数または負数）ＡＴを設定することにより、ロック時間Ｄを再設定する。アップデート部１５３は、アップデート命令を受信するのに応じて、（Ｄ＋ＡＴ）を算出し、算出した結果をロック時間Ｄに格納する（ステップＳ９０１）。
【０１６８】
次に、図１０を参照しながら、排他制御装置１０１が格納命令に応じて行う処理について説明する。
【０１６９】
格納命令は、処理ｉＦｕｎｃと、割り込み処理に関連付けされた時間ｉＴ（たとえば、実行時間）と、退避領域ｉＥＰＳＢとを割り込み処理ｉとして設定し、設定した割り込み処理ｉに関する情報を、割り込み記憶部に格納する命令である。割り込み処理部２０６は、受信した格納命令に応じて、割り込み処理ｉに関する情報を割り込み記憶部に格納する（ステップＳ１００１）。
【０１７０】
次に、図１１を参照しながら、排他制御装置１０１が実行命令に応じて行う処理について説明する。
【０１７１】
実行命令は、割り込み処理ｉを実行する命令である。割り込み処理部２０６は、割り込み処理ｉに関する情報を、割り込み記憶部から読み取り、割り込み記憶部から読み取った情報を削除する（ステップＳ１１０１）。次に、割り込み処理部２０６は、読み取った情報が退避領域ｉＥＰＳＢを含む場合（ステップＳ１１０２にてＹＥＳと判定）に、プロセススイッチ２０７に信号を送信する。プロセススイッチ２０７は、該信号を受信し、受信した信号に基づき、拡張コンテキストを退避領域ｉＥＰＳＢに格納する（ステップＳ１１０５）。割り込み処理部２０６は、読み取った情報が退避領域ｉＥＰＳＢを含まない場合（ステップＳ１１０２にてＮＯと判定）に、上述した処理を実行しない。
【０１７２】
次に、割り込み処理部２０６は、処理ｉＦｕｎｃに関する命令をプロセッサに送信する。プロセッサは、該命令を受信し、受信した命令に応じて、処理ｉＦｕｎｃに応じた処理を実行する（ステップＳ１１０３）。割り込み処理部２０６は、読み取った情報が退避領域ｉＥＰＳＢを含む場合（ステップＳ１１０４にてＹＥＳと判定）に、プロセススイッチ２０７に信号を送る。プロセススイッチ２０７は、該信号を受信し、受信した信号に基づき、退避領域ｉＥＰＳＢに退避した情報を拡張コンテキストに格納する（ステップＳ１１０６）。割り込み処理部２０６は、読み取った情報が退避領域ｉＥＰＳＢを含まない場合（ステップＳ１１０４にてＮＯと判定）に、上述した処理を実行しない。
【０１７３】
次に、図１２を参照しながら、排他制御装置１０１がアイドル命令に応じて行う処理について説明する。
【０１７４】
割り込み処理部２０６は、まず、割り込み記憶部が割り込み処理を含むか否かを判定する（ステップＳ１２０１）。割り込み処理部２０６は、割り込み記憶部が割り込み処理を含むと判定する場合（ステップＳ１２０１にてＹＥＳと判定）に、割り込み記憶部に含まれる割り込み処理のうち、割り込み処理に関連付けされた時間が最長の割り込み処理を選ぶ（ステップＳ１２０４）。
【０１７５】
割り込み処理部２０６が、割り込み記憶部が割り込み処理を含まないと判定する場合（ステップＳ１２０１にてＮＯと判定）に、アイドル処理部２０８は、ユーザプロセスに、実行待ち状態であるプロセスがあるか否かを判定する（ステップＳ１２０２）。アイドル処理部２０８は、実行待ち状態であるプロセスがあると判定する場合（ステップＳ１２０２にてＹＥＳと判定）に、該実行待ち状態であるプロセスのうち、最も高い優先度に関連付けされたプロセスに関する情報をプロセススイッチ２０７に送信する。プロセススイッチ２０７は、該情報を受信し、受信した情報に基づき、プロセッサに該プロセスを実行することを命じる（ステップＳ１２０５）。
【０１７６】
アイドル処理部２０８は、ユーザプロセスに、実行待ち状態であるプロセスがないと判定する（ステップＳ１２０２にてＮＯと判定）場合に、プロセッサを一定時間ウェイトする（ステップＳ１２０３）。その後、該プロセッサは、上述した処理を繰り返してもよい。
【０１７７】
尚、上述した説明において、アンロック部１５２、ロック部１５１、または、アップデート部１５３等の構成要素を用いて説明を行ったが、たとえば、算出部１０２、及び、制御部１０３が、上述した構成要素が実行する処理と同等の処理を行ってもよい。
【０１７８】
次に、第２の実施形態に係るＯＳ２０５に関する効果について説明する。
【０１７９】
本実施形態に係るＯＳ２０５によれば、第１の実施形態に係る排他制御装置１０１が有する効果に加え、さらに、排他制御に要する期間を短縮するという効果を有する。
【０１８０】
この理由は、理由１及び理由２である。すなわち、
（理由１）第２の実施形態に係るＯＳ２０５が有する構成は、第１の実施形態に係る排他制御装置１０１が有する構成を含むからである、
（理由２）算出部１０２は、第１の実施形態に係る排他制御装置１０１が有する算出部１０２よりも、簡便な手順に従い、第１期間を算出するからである。すなわち、第１の実施形態に係る算出部１０２は、命令において指示された期間（時間）に対して、様々な演算を適用したのに対し、本実施形態に係る算出部１０２は、該期間に関する総和を算出することにより第１期間を算出する。このため、演算数は、第１の実施形態に係る算出部１０２に比べ少ない。
【０１８１】
本実施形態に係るＯＳ２０５が有する効果は、後述のようにも説明することができる。
【０１８２】
本実施形態に係るＯＳ２０５によれば、排他制御に関するロック粒度が多様な場合であっても、高い並列処理性能を得ることができる。この理由は、リソースに関して、該リソースに関する排他制御に関連付けされた時間（期間）を指定することができるからである。排他制御装置１０１は、排他制御に関するロック粒度として、該時間を読み取る。これにより、排他制御装置１０１は、ロック粒度が多様な場合であっても、高い並列処理性能を得ることができる。
【０１８３】
また、本実施形態に係るＯＳ２０５によれば、排他制御において、メモリアクセスを低減することができる。この理由は、ＯＳ２０５が、上述した期間に基づき算出される第１期間に基づきロックワードＬＷを読み取るタイミングを算出する結果、ロックワードＬＷを読み取る回数が低減するからである。
【０１８４】
また、本実施形態に係るＯＳ２０５によれば、単位時間あたりに処理可能なスループットを改善できる。この理由は、割り込み処理において、該割り込み処理に関連付けされた時間（期間）を指定することができるからである。制御部１０３は、たとえば、該時間が短い割り込み処理から順にプロセッサに割り当てる。この結果、単位時間あたりに処理可能な処理数が増えるので、スループットは向上する。
【０１８５】
尚、本発明は、上述したオペレーティングシステムの他に、共有並列プログラム内のユーザプロセス間における排他制御や同期制御、及び、大規模マルチノードシステムにおけるノード間の共有資源に対する排他制御や同期制御等に適用することができる。
【０１８６】
（ハードウェア構成例）
上述した本発明の各実施形態における排他制御装置またはオペレーティングシステムを、１つの計算処理装置（情報処理装置、コンピュータ）を用いて実現するハードウェア資源の構成例について説明する。但し、係る排他制御装置またはオペレーティングシステムは、物理的または機能的に少なくとも２つの計算処理装置を用いて実現してもよい。また、係る排他制御装置及びオペレーティングシステムは、専用の装置として実現してもよい。
【０１８７】
図１３は、第１の実施形態及び第２の実施形態に係る排他制御装置またはオペレーティングシステムを実現可能な計算処理装置のハードウェア構成例を概略的に示す図である。計算処理装置２０は、中央処理演算装置（Ｃｅｎｔｒａｌ＿Ｐｒｏｃｅｓｓｉｎｇ＿Ｕｎｉｔ、以降「ＣＰＵ」と表す）２１、メモリ２２、ディスク２３、及び、不揮発性記録媒体２４を有する。計算処理装置２０は、さらに、入力装置２５、出力装置２６、及び、通信インターフェース（以降、「通信ＩＦ」と表す。）２７を有する。計算処理装置２０は、通信ＩＦ２７を介して、他の計算処理装置、及び、通信装置と情報を送受信することができる。
【０１８８】
不揮発性記録媒体２４は、コンピュータが読み取り可能な、たとえば、コンパクトディスク（Ｃｏｍｐａｃｔ  Ｄｉｓｃ）、デジタルバーサタイルディスク（Ｄｉｇｉｔａｌ＿Ｖｅｒｓａｔｉｌｅ＿Ｄｉｓｃ）、ブルーレイディスク（Ｂｌｕ−ｒａｙ  Ｄｉｓｃ。登録商標）、ユニバーサルシリアルバスメモリ（ＵＳＢメモリ）、ソリッドステートドライブ（Ｓｏｌｉｄ  Ｓｔａｔｅ  Ｄｒｉｖｅ）等である。不揮発性記録媒体２４は、電源を供給しなくても係るプログラムを保持し、持ち運びを可能にする。不揮発性記録媒体２４は、上述した媒体に限定されない。また、不揮発性記録媒体２４の代わりに、通信ＩＦ２７を介して、通信ネットワークを介して係るプログラムを持ち運びしてもよい。
【０１８９】
すなわち、ＣＰＵ２１は、ディスク２３が記憶するソフトウェア・プログラム（コンピュータ・プログラム：以下、単に「プログラム」と称する）を、実行する際にメモリ２２にコピーし、演算処理を実行する。ＣＰＵ２１は、プログラム実行に必要なデータをメモリ２２から読み取る。表示が必要な場合には、ＣＰＵ２１は、出力装置２６に出力結果を表示する。外部からプログラムを入力する場合、ＣＰＵ２１は、入力装置２５からプログラムを読み取る。ＣＰＵ２１は、上述した図１、または、図３に示す各部が表す機能（処理）に対応するところのメモリ２２にある処理プログラム（図２、または、図７乃至図１２）を解釈し実行する。ＣＰＵ２１は、上述した本発明の各実施形態において説明した処理を順次行う。
【０１９０】
すなわち、このような場合、本発明は、係る処理プログラムによっても成し得ると捉えることができる。更に、係る処理プログラムが記録されたコンピュータ読み取り可能な不揮発性の記録媒体によっても、本発明は成し得ると捉えることができる。
【符号の説明】
【０１９１】
１０１    排他制御装置
１０２    算出部
１０３    制御部
１５１    ロック部
１５２    アンロック部
１５３    アップデート部
５０１    期間
５０２    処理
２０１    プロセッサ
２０３    システムタイマー
２０４    メモリ
２０５    ＯＳ
２０６    割り込み処理部
２０７    プロセススイッチ
２０８    アイドル処理部
２０    計算処理装置
２１    ＣＰＵ
２２    メモリ
２３    ディスク
２４    不揮発性記録媒体
２５    入力装置
２６    出力装置
２７    通信ＩＦ
【図１】
2016004508.tif 000003
【図２】
2016004508.tif 000004
【図３】
2016004508.tif 000005
【図４】
2016004508.tif 000006
【図５】
2016004508.tif 000007
【図６】
2016004508.tif 000008
【図７】
2016004508.tif 000009
【図８】
2016004508.tif 000010
【図９】
2016004508.tif 000011
【図１０】
2016004508.tif 000012
【図１１】
2016004508.tif 000013
【図１２】
2016004508.tif 000014
【図１３】
2016004508.tif 000015
【図１４】
2016004508.tif 000016
【図１５】
2016004508.tif 000017
【図１６】
2016004508.tif 000018