(57)【要約】【課題】同期操作が頻繁に行われる状況下においても、動作効率の悪化を抑制する。【解決手段】本発明の情報処理装置は、同期操作に伴う待ち合わせ状態を管理するデータの配列であって、各プロセスに対応するデータの配列であるデータ配列６０２と、各プロセスに、自プロセスの待ち合わせ状態を更新した後、休眠する前に、所定の同期条件が満たされていることを条件に、再度自プロセスの待ち合わせ状態の確認および待ち合わせ状態であればその解除を不可分のメモリアクセスにより行わせた上で、休眠または復帰を行う待ち合わせ手段６０３と、各プロセスに、データ配列における各プロセスの待ち合わせ状態の確認およびその解除を不可分のメモリアクセスにより行わせた上で、プロセスを起床させる待ち合わせ解除手段６０４とを備える。【選択図】図７
2017182282.tif 000002
【特許請求の範囲】
【請求項１】
同期操作に伴う待ち合わせ状態を管理するデータの配列であって、各プロセスに対応するデータの配列であるデータ配列と、
所定の同期条件が満たされていないことにより休眠しようとするプロセスに、前記データ配列における自プロセスの待ち合わせ状態を更新した後、休眠する前に、所定の同期条件が満たされていることを条件に、再度前記データ配列における自プロセスの待ち合わせ状態を確認させ、確認の結果、待ち合わせ状態であれば該状態を解除した上で復帰させ、待ち合わせ状態でなければ休眠させる休眠処理を提供する待ち合わせ手段と、
前記所定の同期条件が満たされていないことにより休眠中のプロセスを起床しようとするプロセスに、前記データ配列における各プロセスの待ち合わせ状態の確認および待ち合わせ状態の解除を行わせ、待ち合わせ状態であったプロセスを起床させる起床処理を提供する待ち合わせ解除手段とを備え、
前記待ち合わせ手段および前記待ち合わせ解除手段は、前記データ配列における各プロセスの待ち合わせ状態の確認および待ち合わせ状態の解除を、不可分のメモリアクセスにより行う
ことを特徴とする情報処理装置。
【請求項２】
データ配列は、各プロセスに対応するフラグの配列であるフラグ配列である
請求項１に記載の情報処理装置。
【請求項３】
各プロセスは、休眠処理からの復帰後に、所定の同期条件が満たされていなければ、再び休眠処理を呼び出す
請求項１または請求項２に記載の情報処理装置。
【請求項４】
所定の同期条件がプロセスごとに異なる
請求項１から請求項３のうちのいずれかに記載の情報処理装置。
【請求項５】
データ配列を複数備える
請求項１から請求項４のうちのいずれかに記載の情報処理装置。
【請求項６】
同期操作に伴う待ち合わせ状態を管理するデータの配列であって、各プロセスに対応するデータの配列であるデータ配列と、
所定の同期条件が満たされていないことにより休眠しようとするプロセスに、前記データ配列における自プロセスの待ち合わせ状態を更新した後、休眠する前に、所定の同期条件が満たされていることを条件に、再度前記データ配列における自プロセスの待ち合わせ状態を確認させ、確認の結果、待ち合わせ状態であれば該状態を解除した上で復帰させ、待ち合わせ状態でなければ休眠させる休眠処理を提供する待ち合わせ手段と、
前記所定の同期条件が満たされていないことにより休眠中のプロセスを起床しようとするプロセスに、前記データ配列における各プロセスの待ち合わせ状態の確認および待ち合わせ状態の解除を行わせ、待ち合わせ状態であったプロセスを起床させる起床処理を提供する待ち合わせ解除手段とを備え、
前記待ち合わせ手段および前記待ち合わせ解除手段は、前記データ配列における各プロセスの待ち合わせ状態の確認および待ち合わせ状態の解除を、不可分のメモリアクセスにより行う
ことを特徴とする同期機構。
【請求項７】
情報処理装置が、
所定の同期条件が満たされていないことにより休眠しようとする第１のプロセスに、同期操作に伴う待ち合わせ状態を管理するデータの配列であって、各プロセスに対応するデータの配列であるデータ配列における自プロセスの待ち合わせ状態を更新した後、休眠する前に、所定の同期条件が満たされていることを条件に、再度前記データ配列における自プロセスの待ち合わせ状態の確認および待ち合わせ状態の解除を不可分のメモリアクセスにより行わせ、前記確認の結果に応じて休眠または復帰をさせ、
前記所定の同期条件が満たされていないことにより休眠中のプロセスを起床しようとする第２のプロセスに、前記データ配列において待ち合わせ状態を表しているデータの確認および待ち合わせ状態の解除を不可分のメモリアクセスにより行わせ、待ち合わせ状態であったプロセスを起床させる
ことを特徴とするプロセス制御方法。
【請求項８】
データ配列が、各プロセスに対応するフラグの配列であるフラグ配列である
請求項７に記載のプロセス制御方法。
【請求項９】
コンピュータに、
プロセスからの呼び出しに応じて、休眠処理および起床処理を実行させ、
前記休眠処理で、同期操作に伴う待ち合わせ状態を管理するデータの配列であって、各プロセスに対応するデータの配列であるデータ配列のうち自プロセスに対応するデータを待ち合わせ状態に更新した後、休眠させる処理の間に、前記所定の同期条件が満たされていることを条件に、再度前記データ配列における自プロセスの待ち合わせ状態の確認および待ち合わせ状態の解除を不可分のメモリアクセスにより行わせ、前記確認の結果に応じて休眠または復帰をさせ、
前記起床処理で、前記データ配列においての待ち合わせ状態を表しているデータの確認および待ち合わせ状態の解除を不可分のメモリアクセスにより行わせ、待ち合わせ状態であったプロセスを起床させる
ためのプロセス制御プログラム。
【請求項１０】
データ配列が、各プロセスに対応するフラグの配列であるフラグ配列である
請求項９に記載のプロセス制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、複数のプロセスが並列で実行される情報処理装置、同期機構、プロセス制御方法およびプロセス制御プログラムに関する。
【背景技術】
【０００２】
複数のプロセスが並行して実行されるように構成された情報処理装置では、プロセス間で同期をとる場合がある。典型的なプロセス間の同期方法の例としては、次のような方法が挙げられる。
【０００３】
まず、あるプロセス（ここでは、プロセスｐ−０１とする）が、ある他プロセス（ここではプロセスｐ−０２とする）と同期をとって処理すべき状態に達したときに、他プロセスであるプロセスｐ−０２がプロセスｐ−０１との同期が可能な所定の状態に到達しているかどうかを調べる。本例では、プロセスｐ−０２が上記所定の状態に達していることが、プロセスｐ−０１の同期条件とされている。
【０００４】
プロセスｐ−０１は、プロセスｐ−０２が上記所定の状態に到達している場合、そのまま現在の処理を継続する。一方、プロセスｐ−０１は、プロセスｐ−０２が上記所定の状態に到達していない場合、プロセスｐ−０２がその状態に到達するまで現在の処理を止めて待ち合わせる。
【０００５】
待ち合わせの方法としては、大きく分けてビジーループ方式とブロック方式とがある。ビジーループ方式は、待ち合わせる側のプロセスｐ−０１がＣＰＵ（より具体的にはＣＰＵにおいて制御主体となる権利およびその実行）を放棄せずに、同期可能状態に到達したかどうかを調べ続ける方法である。一方、ブロック方式は、待ち合わせる側のプロセスｐ−０１がＣＰＵを一旦放棄して休眠し、同期可能状態になった時またはその可能性がある場合に他のプロセスより起床してもらう方法である。
【０００６】
同期のための待ち合わせをブロック方式により行う場合、休眠しているプロセスを他のプロセスより起床する必要がある。したがって、複数のプロセスが並列で実行される情報処理装置では、このための制御手段を各プロセスに提供する必要がある。
【０００７】
以下は、同期のための待ち合わせをブロック方式により行う場合の制御手段（以下、単に同期機構という）の一例である。本例は、排他制御を行うためのｌｏｃｋ機構と、同期操作に伴う待ち合わせ状態を管理するためのリスト構造データとを用いた同期機構の例である。以下、ｌｏｃｋ機構とリスト構造データとを用いた上記のような同期機構を「第１の例の同期機構」と呼ぶ場合がある。ここで、ｌｏｃｋ機構は、プロセス間で排他制御を行うための排他機構の１つであり、指定された処理範囲（コードブロック）に対して常に１つだけのプロセスが実行されることを保証するものである。排他制御を行いたいプロセスは、対象とされる処理の開始時にｌｏｃｋを獲得し、対象とされる処理の終了時にｌｏｃｋを解放する。ｌｏｃｋが獲得されている間、他プロセスは、実行が制限される。例えば、ｌｏｃｋが獲得されている間に、他プロセスが、指定された処理範囲においてアクセスされる変数等の同期オブジェクトに対してアクセスした場合、待ち状態とされる。
【０００８】
図９は、第１の例の同期機構による待ち合わせ処理の一例を示す説明図である。図９には、既にプロセスｐ−０１とプロセスｐ−０２とが待ち合わせを行っている状態において、新たにプロセスｐ−０３が待ち合わせに加わる場合の待ち合わせ処理の例が示されている。ここで、“プロセスｐ−ｘ”の“ｘ”は、プロセスＩＤ（ｐｉｄ）を表している。また、図中の（１）〜（６）は、以下に示す処理手順に対応している。なお、本例の同期機構は、対象とされる同期操作における待ち合わせ状態を管理するリスト構造データ９１と、該リスト構造データ９１に対する排他機構としてのｌｏｃｋ機構９５とを含む。また、図中のｓｔａｔｅ９２は、対象とされる同期操作において同期条件に用いられるシステム状態を示す状態変数の例である。本例では、システム状態が同期可能状態になっていることが同期条件とされている。
【０００９】
本例の場合、プロセスｐ−０３は次のような処理手順により待ち合わせを行う。
【００１０】
（１）ｌｏｃｋ９５を獲得する。
（２）ｓｔａｔｅ９２を参照し、同期可能状態に到達していないかを再確認する。
（３）リスト構造データ９１に、自プロセス（プロセスｐ−０３）のエントリを追加する。
（４）ｌｏｃｋ９５を解放する。
（５）休眠手段９３を用いて休眠する。
【００１１】
なお、（２）の確認処理において、同期可能状態に達していることが判明した場合には、（４）の処理後、（５）の処理を省略してプロセス間同期における待ち合わせを完了する。その場合、プロセスｐ−０３は、その後の同期対象とした処理をそのまま実行すればよい。
【００１２】
また、図１０は、第１の例の同期機構による待ち合わせ解除処理の一例を示す説明図である。図１０には、プロセスｐ−０１、プロセスｐ−０２およびプロセスｐ−０３が待ち合わせを行っている状態において、上記以外のプロセス（ここでは、プロセスｐ−ｉとする）が、待ち合わせ状態を解除する場合の待ち合わせ解除処理の例が示されている。なお、本例においても、図中の（１）〜（６）が以下に示す処理手順に対応している。
【００１３】
本例の場合、プロセスｐ−ｉは、次のような処理手順により待ち合わせの解除を行う。
【００１４】
（１）ｌｏｃｋ９５を獲得する。
（２）リスト構造データ９１に含まれる全エントリを、ローカルのリスト構造データに繋ぎかえる。具体的には、全プロセスがアクセス可能な変数である、リスト構造データ９１の“ｌｉｓｔｈｅａｄ”の値を、プロセスｐ−ｉのみがアクセスできる局所的な変数“ｌｏｃａｌ”にコピーした後、リストが空であることを意味する“ＮＵＬＬ”値に書き換える。
（３）ｌｏｃｋ９５を解放する。
（４）“ｌｏｃａｌ”を参照し、リストに繋がれている全エントリに対応するプロセスを、起床手段９４を用いて起床する。
【００１５】
これにより、プロセスｐ−ｉが、待ち合わせを行っている休眠中の全てのプロセスを起床することができる。
【００１６】
休眠手段と起床手段の代表的な例は、セマフォである。セマフォの利点は、その動作が呼び出し順に依存しないことである。すなわち、上記のように、先にプロセスｐ−０３が休眠操作を行った後、プロセスｐ−ｉがプロセスｐ−０３に対する起床操作を行うというように、休眠→起床の呼び出し順で休眠中のプロセスｐ−０３が起床されるだけでなく、その逆も可能であるということである。より具体的には、プロセスｐ−ｉがプロセスｐ−０３に対する起床操作を行った後、プロセスｐ−０３が休眠操作を行うというように、起床→休眠の呼び出し順でもプロセスｐ−０３が起床されるということである。これは、そのような呼出し順でも、プロセスｐ−０３に対するプロセスｐ−ｉの起床操作が有効であることを意味している。
【００１７】
このように、セマフォでは、先に行われたプロセスｐ−ｉによる起床操作の効果が残り、後から実行されるプロセスｐ−０３の休眠操作で、上記効果が消化される。この場合、プロセスｐ−０３は、休眠状態に入ることなく処理の実行を継続できる。なお、上記効果の消化は、プロセスｐ−０３が休眠状態に入るが、その後直ちに起床されるとの解釈も可能である。
【００１８】
セマフォの欠点は、上記のように休眠と起床との間に呼出し順の依存関係がない代わりに、休眠操作と起床操作とが１対１に対応するように制御しなければならない点である。例えば、起床操作だけが行われ、対応する休眠操作が行われなかった場合、起床操作の効果がセマフォに残ってしまい、次に休眠が必要なときに不整合な状態を引き起こすこととなる。
【００１９】
セマフォにおける休眠操作と起床操作とが対応しないことによる不整合状態の防止技術に関して、特許文献１に記載の方法がある。特許文献１に記載の方法は、再始動させる待機スレッドに対して出された再起動シグナルの個数をカウントするシグナルカウンタと、待機スレッド数をカウントする待機カウンタとを比較して不整合状態を訂正する。
【先行技術文献】
【特許文献】
【００２０】
【特許文献１】特開平１１−２２４２０５号公報
【発明の概要】
【発明が解決しようとする課題】
【００２１】
課題は、同期操作が頻繁に行われる状況下では、処理性能が低下することである。
【００２２】
特に、プロセッサ数の多いマルチプロセッサ構成の情報処理装置の場合、同期操作に伴う休眠操作と起床操作とが頻繁に行われる。同期操作に伴う休眠操作と起床操作とが頻繁に行われると、待ち合わせ状態を管理するデータ構造にアクセスする際の排他制御がボトルネックとなり、動作効率が悪化し、処理性能が著しく低下してしまう。
【００２３】
なお、リスト構造に対するアクセスだけであれば、排他制御を利用することなく、無矛盾で要素の追加や削除を実施可能なアルゴリズムが考案されている。しかし、プロセスの待ち合わせを含む同期操作に伴う待ち合わせ状態を、排他制御なしにリスト構造だけで管理するのは困難である。その理由は、リスト要素を繋いでから休眠操作を行うまでの間にシステム状態が同期可能状態に変更されていないことを保証する手段がないためである。
【００２４】
また、特許文献１に記載の方法は、待ち合わせ状態を管理するためのカウンタが複数あり、処理が煩雑であるばかりでなく、これらカウンタを制御するため排他制御を行う必要がある。このため、特許文献１の方法は、同期操作が頻繁に行われる状況下で動作効率が悪化するため、第１の例の同期機構と同様の問題が生じる。
【００２５】
そこで、本発明は、同期操作が頻繁に行われる状況下においても、動作効率の悪化を抑制することができる情報処理装置、同期機構、プロセス制御方法およびプロセス制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【００２６】
本発明による情報処理装置は、同期操作に伴う待ち合わせ状態を管理するデータの配列であって、各プロセスに対応するデータの配列であるデータ配列と、所定の同期条件が満たされていないことにより休眠しようとするプロセスに、データ配列における自プロセスの待ち合わせ状態を更新した後、休眠する前に、所定の同期条件が満たされていることを条件に、再度データ配列における自プロセスの待ち合わせ状態を確認させ、確認の結果、待ち合わせ状態であれば該状態を解除した上で復帰させ、待ち合わせ状態でなければ休眠させる休眠処理を提供する待ち合わせ手段と、所定の同期条件が満たされていないことにより休眠中のプロセスを起床しようとするプロセスに、データ配列における各プロセスの待ち合わせ状態の確認および待ち合わせ状態の解除を行わせ、待ち合わせ状態であったプロセスを起床させる起床処理を提供する待ち合わせ解除手段とを備え、待ち合わせ手段および待ち合わせ解除手段は、データ配列における各プロセスの待ち合わせ状態の確認および待ち合わせ状態の解除を、不可分のメモリアクセスにより行うことを特徴とする。
【００２７】
また、本発明による同期機構は、同期操作に伴う待ち合わせ状態を管理するデータの配列であって、各プロセスに対応するデータの配列であるデータ配列と、所定の同期条件が満たされていないことにより休眠しようとするプロセスに、データ配列における自プロセスの待ち合わせ状態を更新した後、休眠する前に、所定の同期条件が満たされていることを条件に、再度データ配列における自プロセスの待ち合わせ状態を確認させ、確認の結果、待ち合わせ状態であれば該状態を解除した上で復帰させ、待ち合わせ状態でなければ休眠させる休眠処理を提供する待ち合わせ手段と、所定の同期条件が満たされていないことにより休眠中のプロセスを起床しようとするプロセスに、データ配列における各プロセスの待ち合わせ状態の確認および待ち合わせ状態の解除を行わせ、待ち合わせ状態であったプロセスを起床させる起床処理を提供する待ち合わせ解除手段とを備え、待ち合わせ手段および待ち合わせ解除手段は、データ配列における各プロセスの待ち合わせ状態の確認および待ち合わせ状態の解除を、不可分のメモリアクセスにより行うことを特徴とする。
【００２８】
また、本発明によるプロセス制御方法は、情報処理装置が、所定の同期条件が満たされていないことにより休眠しようとする第１のプロセスに、同期操作に伴う待ち合わせ状態を管理するデータの配列であって、各プロセスに対応するデータの配列であるデータ配列における自プロセスの待ち合わせ状態を更新した後、休眠する前に、所定の同期条件が満たされていることを条件に、再度データ配列における自プロセスの待ち合わせ状態の確認および待ち合わせ状態の解除を不可分のメモリアクセスにより行わせ、確認の結果に応じて休眠または復帰をさせ、所定の同期条件が満たされていないことにより休眠中のプロセスを起床しようとする第２のプロセスに、データ配列において待ち合わせ状態を表しているデータの確認および待ち合わせ状態の解除を不可分のメモリアクセスにより行わせ、待ち合わせ状態であったプロセスを起床させることを特徴とする。
【００２９】
また、本発明によるプロセス制御プログラムは、コンピュータに、プロセスからの呼び出しに応じて、休眠処理および起床処理を実行させ、休眠処理で、同期操作に伴う待ち合わせ状態を管理するデータの配列であって、各プロセスに対応するデータの配列であるデータ配列のうち自プロセスに対応するデータを待ち合わせ状態に更新した後、休眠させる処理の間に、所定の同期条件が満たされていることを条件に、再度データ配列における自プロセスの待ち合わせ状態の確認および待ち合わせ状態の解除を不可分のメモリアクセスにより行わせ、確認の結果に応じて休眠または復帰をさせ、起床処理で、データ配列においての待ち合わせ状態を表しているデータの確認および待ち合わせ状態の解除を不可分のメモリアクセスにより行わせ、待ち合わせ状態であったプロセスを起床させることを特徴とする。
【発明の効果】
【００３０】
本発明によれば、同期操作が頻繁に行われる状況下においても、動作効率の悪化を抑制することができる。
【図面の簡単な説明】
【００３１】
【図１】本発明による情報処理装置の例を示す構成図である。
【図２】データ管理機構１１の例を示す説明図である。
【図３】第１の実施形態のプロセス制御方法の例を示すフローチャートである。
【図４】第１の実施形態のプロセス制御方法の例を示すフローチャートである。
【図５】第１の実施形態のプロセス制御方法の例を示すフローチャートである。
【図６】第１の実施形態のプロセス制御方法の例を示すフローチャートである。
【図７】本発明による情報処理装置の概要を示すブロック図である。
【図８】本発明による情報処理装置の他の例を示すブロック図である。
【図９】第１の例の同期機構による待ち合わせ処理の一例を示す説明図である。
【図１０】第１の例の同期機構による待ち合わせ解除処理の一例を示す説明図である。
【発明を実施するための形態】
【００３２】
以下、本発明の実施形態を図面を参照して説明する。図１は、本発明の第１の実施形態の情報処理装置の例を示すブロック図である。図１に示すように、本実施形態の情報処理装置は、複数のプロセス（図中のプロセスｐ−０１〜プロセスｐ−０ｎやプロセスｐ−ｉ）が並列で実行するよう構成された情報処理装置であって、それらプロセスが使用する同期機構１と、状態変数（図中のｓｔａｔｅ）２と、休眠手段３と、起床手段４とを備えている。本実施形態の情報処理装置は、複数のプロセッサユニット（ＣＰＵ等）を備えるマルチプロセッサ構成の情報処理装置であってもよい。
【００３３】
同期機構１は、当該情報処理装置上で動作する各プロセスに対して、プロセス間同期に必要なプロセス制御を提供するものである。本例の同期機構１は、データ管理機構１１と、待ち合わせ手段１２と、待ち合わせ解除手段１３とを含む。
【００３４】
データ管理機構１１は、同期操作に伴うプロセスの待ち合わせ状態を管理するためのデータ配列１１１を含む。データ配列１１１は、各プロセスに対応するデータの集合（データ配列）であればよく、例えば、各プロセスに対応するフラグの配列であるフラグ配列であってもよい。また、データ管理機構１１は、データ配列１１１に対する制御手段として、データ配列１１１の任意のデータに対してＣＰＵ等により提供される不可分のメモリアクセスによる参照および更新を行う手段を提供してもよい。
【００３５】
データ管理機構１１は、例えば、後述する待ち合わせ手段１２が提供する休眠処理および待ち合わせ解除手段１３が提供する起床処理において、対応するデータ配列１１１のうち指定されたプロセスに対応するデータの参照および該データにおける待ち合わせ状態の解除を行うための制御手段として、不可分なメモリアクセスによるアクセス操作を提供してもよい。
【００３６】
図２は、データ配列１１１の例を示す説明図である。データ配列１１１は、例えば、各プロセスに対応するフラグの配列であるフラグ配列であってもよい。図２に示すように、フラグ配列は、複数のワードから構成されていてもよい。ここで、ワードは、ＣＰＵがメモリをアクセスする際の単位である。データ配列１１１がフラグ配列であれば、一度のアクセスでより多くのプロセスの待ち合わせ状態の参照および更新を行うことができる。
【００３７】
待ち合わせ手段１２は、同期操作に伴って待ち合わせを行うプロセスに、当該同期操作に対応づけられたデータ配列１１１における該当のプロセスの待ち合わせ状態の更新（設定）を含む休眠処理を少なくとも実行させる。
【００３８】
待ち合わせ手段１２は、例えば、次の処理ステップを含む休眠処理を、待ち合わせを行おうとするプロセス、より具体的には、所定の同期条件が満たされていないことにより休眠しようとするプロセスに提供してもよい。
【００３９】
＜待ち合わせ手段１２が提供する休眠処理の概要＞
（１）データ配列１１１のうち自プロセス（読み出し元のプロセス）に対応するデータを待ち合わせ状態に設定した上で、再度休眠すべき状態となっているか否かを確認する。
（２）上記確認の結果、休眠すべき状態のままである場合は、休眠手段３を用いて休眠する。
（３）上記確認の結果、休眠すべき状態ではなくなっている場合すなわち同期可能状態となっている場合には、データ配列１１１の自プロセスに対応するデータを参照する。
（４）上記参照の結果、待ち合わせ状態のままであれば待ち合わせ状態を解除させて、当該処理から復帰させる。
（５）上記参照の結果、待ち合わせ状態が解除されていれば、休眠手段３を用いて休眠させる。
【００４０】
このように、待ち合わせ手段１２が提供する休眠処理では、読み出し元のプロセスに、自プロセスの待ち合わせ状態を更新した後、休眠する前に、同期可能状態となっていることを条件に、再度自プロセスの待ち合わせ状態の確認および待ち合わせ状態であればその解除を行わせた上で、待ち合わせ状態に応じた休眠または復帰を行わせる。より具体的には、待ち合わせ状態であれば休眠せずに復帰させ、待ち合わせ状態でなければ休眠させる。これにより、待ち合わせ手段１２は、呼出し元のプロセスが、一旦自プロセスに対応するデータを待ち合わせ状態にした後で、システム状態が変化し、同期可能状態となった場合において、該データの待ち合わせ状態が解除されている場合には、該データを解除した他プロセスからの起床操作を受け取るために休眠させることができる。
【００４１】
また、待ち合わせ手段１２は、上記の休眠処理で、データ配列１１１の参照および待ち合わせ状態の解除を行う場合に、不可分のメモリアクセスにより行う。不可分のメモリアクセスは、例えば、ＣＰＵが提供するｃｏｍｐａｒｅ  ａｎｄ  ｓｗａｐ（ｃｏｍｐａｒｅ  ａｎｄ  ｅｘｃｈａｎｇｅと称することもある）命令によるメモリアクセスであってもよい。なお、待ち合わせ手段１２は、例えば、データ管理機構１１が提供するアクセス操作を利用して、上記参照および解除を行ってもよい。
【００４２】
また、待ち合わせ手段１２は、同期操作に伴う待ち合わせ処理の１つとして、上記の休眠処理の前段階に、同期可能状態か否かを判定する処理を追加した参照処理を提供してもよい。休眠処理および参照処理は、例えば、プログラムモジュールの形式で提供されてもよい。
【００４３】
待ち合わせ解除手段１３は、同期操作に伴い待ち合わせを行っているプロセスを解除したいプロセスに、対応する同期操作に対応づけられたデータ配列１１１における該当のプロセスの待ち合わせ状態の更新（解除）を含む起床処理を少なくとも実行させる。
【００４４】
待ち合わせ解除手段１３は、例えば、次の処理ステップを含む起床処理を、同期操作に伴い休眠中のプロセスを起床しようとするプロセスに提供してもよい。
【００４５】
＜待ち合わせ解除手段１３が提供する起床処理の概要＞
（１）データ配列１１１を参照する。
（２）上記参照の結果、待ち合わせ状態となっているプロセスがあれば、データ配列１１１上の該プロセスの該待ち合わせ状態を解除した上で、起床手段４を用いて該プロセスを起床する。
【００４６】
また、待ち合わせ解除手段１３は、上記の起床処理で、データ配列１１１の参照および待ち合わせ状態の解除を行う場合に、不可分のメモリアクセスにより行う。なお、待ち合わせ解除手段１３は、例えば、データ管理機構１１が提供するアクセス操作を利用して、上記の参照および解除を行ってもよい。
【００４７】
また、待ち合わせ解除手段１３は、同期操作に伴う待ち合わせを解除する待ち合わせ解除処理の１つとして、上記の起床処理の前段階に、同期条件に用いられるシステム状態を更新する処理を追加した更新処理を提供してもよい。起床処理および更新処理は、例えば、プログラムモジュールの形式で提供されてもよい。
【００４８】
状態変数２は、同期機構１が提供する同期操作において待ち合わせを行うプロセスの同期条件に用いられているシステム状態を保持する共有変数の例である。なお、状態変数２は、複数あってもよい。
【００４９】
休眠手段３は、プロセスを休眠させることができる手段であって、休眠と起床との間に呼出し順の依存関係のない手段であれば、特に問わない。休眠手段３は、例えば、セマフォを利用して実装できる。休眠手段３は、例えば、読み出し元のプロセスに、自プロセスに対応するセマフォを獲得させる処理、より具体的には自プロセスに対応するセマフォのカウンタをデクリメントする処理を提供する手段であってもよい。
【００５０】
また、起床手段４は、休眠中のプロセスを起床させることができる手段であって、休眠と起床との間に呼出し順の依存関係のない手段であれば、特に問わない。起床手段４は、例えば、セマフォを利用して実装できる。起床手段４は、例えば、読み出し元のプロセスその他任意の制御主体に、指定されたプロセスに対応するセマフォを解放させる処理、より具体的には指定されたプロセスに対応するセマフォのカウンタをインクリメントする処理を提供する手段であってもよい。
【００５１】
本実施形態において、データ管理機構１１の制御手段、待ち合わせ手段１２、待ち合わせ解除手段１３、休眠手段３および起床手段４は、ＣＰＵにより実現される。
【００５２】
次に、本実施形態の動作を説明する。図３〜図６は、本実施形態のプロセス制御方法の例を示すフローチャートである。
【００５３】
まず、図３および図４を参照して、待ち合わせ手段１２が提供する参照処理について説明する。図３は、待ち合わせ手段１２が提供する参照処理の処理フローの例を示すフローチャートである。また、図４は、待ち合わせ手段１２が提供する休眠処理の処理フローの例を示すフローチャートである。
【００５４】
図３に示す例は、状態変数２で表されるシステム状態がある状態となっていることを同期条件にして同期を行う場合の待ち合わせ処理の１つとして提供される参照処理の例である。また、図４に示す例は、その参照処理で呼び出される休眠処理の例である。待ち合わせを行う側のプロセスは、図３に示す参照処理を呼び出すことにより、同期操作を行ってもよい。なお、本例では、参照処理を行うプロセスがプロセスｐ−０１である場合を例に用いて説明するが、他のプロセスの場合も同様である。また、以下では、プロセスｐ−０１を主語にして、各ステップの動作を説明するが、これは、より具体的には、ＣＰＵが、待ち合わせ手段１２が提供する以下の処理に従い、読み出し元のプロセスであるプロセスｐ−０１をそのように動作させることを意味する。
【００５５】
また、本例では、ステップＳ２３およびステップＳ２４の処理を、ＣＰＵが提供する不可分のメモリアクセスを用いて行う。
【００５６】
まず、プロセスｐ−０１は、状態変数２を参照して、システム状態が同期可能状態か否かを判定する（ステップＳ１１）。ここで、プロセスｐ−０１は、例えば、状態変数２の値がある閾値Ｔと等しいかそれよりも大きくなることを同期条件とする場合、状態変数が閾値Ｔ以上か否かを判定すればよい。
【００５７】
同期可能状態でない場合（ステップＳ１１のＮｏ）、プロセスｐ−０１は、休眠処理を行う（ステップＳ１２）。一方、同期可能状態であれば（ステップＳ１１のＹｅｓ）、プロセスｐ−０１は、参照処理から復帰する。
【００５８】
次に、ステップＳ１２の休眠処理について、図４を参照して説明する。休眠処理では、まず、プロセスｐ−０１は、当該休眠処理に対応づけられたデータ配列１１１のうち、自プロセスに対応するデータを待ち合わせ状態に設定する（図４のステップＳ２１）。プロセスｐ−０１は、例えば、データ配列１１１がフラグ配列であれば、自プロセスに対応するフラグをセットする。
【００５９】
次に、プロセスｐ−０１は、再びシステム状態が同期可能状態であるか否かを判定する（ステップＳ２２）。プロセスｐ−０１は、システム状態が同期可能状態でない場合（ステップＳ２２のＮｏ）、休眠手段３を用いて休眠する（ステップＳ２５）。一方、プロセスｐ−０１は、システム状態が同期可能状態である場合（ステップＳ２２のＹｅｓ）、ステップＳ２３に進む。
【００６０】
ここで、ステップＳ２３に進む状況は、ステップＳ１１の時点では同期可能状態でなく休眠処理が呼び出されたが、ステップＳ２１で当該データ配列１１１の該当データを待ち合わせ状態にした後、ステップＳ２２で再度判定を行う時点までにシステム状態が同期可能状態に変更されたことを意味している。その場合には、待ち合わせ手段１２は、読み出し元のプロセスに対応するデータが待ち合わせ状態となっているかを再度確認させる。
【００６１】
ステップＳ２３では、プロセスｐ−０１は、当該データ配列１１１中の自プロセスに対応するデータが待ち合わせ状態となっているか否かを判定する。判定の結果、待ち合わせ状態となっている場合には（ステップＳ２３のＹｅｓ）、プロセスｐ−０１は、待ち合わせ状態を解除した上で（ステップＳ２４）、当該休眠処理から復帰する。
【００６２】
一方、ステップＳ２３の判定の結果、待ち合わせ状態が解除されている場合（ステップＳ２３のＹｅｓ）、プロセスｐ−０１は、ステップＳ２５に進み、休眠手段３を用いて休眠する。ここで、ステップＳ２５に進む状況は、システム状態を変更した他のプロセスが、当該プロセスｐ−０１がステップＳ２３の処理を行う前に、当該プロセスｐ−０１に対して起床操作を行ったことを意味している。このため、待ち合わせ手段１２は、読み脚元のプロセスがその起床操作の効果を受け取ることができるよう、該プロセスを休眠させる。
【００６３】
なお、プロセスｐ−０１は、休眠処理から復帰した後（図３のステップＳ１２の後）、ステップＳ１１に戻る。本例では、プロセスｐ−０１は、参照処理からの復帰を条件に、同期対象とした処理を開始すればよい。
【００６４】
次に、図５および図６を参照して、待ち合わせ解除手段１３が提供する更新処理について説明する。図５は、待ち合わせ解除手段１３が提供する更新処理の処理フローの例を示すフローチャートである。また、図６は、待ち合わせ解除手段１３が提供する起床処理の処理フローの例を示すフローチャートである。
【００６５】
図５に示す例は、状態変数２で表されるシステム状態がある状態となっていることを同期条件にして同期を行う場合の同期操作に対応して、当該同期操作に伴い休眠中となったプロセスを起床させるための待ち合わせ解除処理の１つとして提供される更新処理の例である。また、図６に示す例は、その更新処理で呼び出される起床処理の例である。なお、本例でも、状態変数２が示すシステム状態が同期条件として用いられている場合を例に用いて説明する。
【００６６】
本例では、状態変数２を更新するプロセスが、図５に示す更新処理を呼び出すことにより、状態変数２が示すシステム状態を同期条件として休眠しているプロセスを起床させる。なお、本例では、更新処理を行うプロセスがプロセスｐ−０２である場合を例に用いて説明するが、他のプロセスの場合も同様である。また、以下では、プロセスｐ−０２を主語にして、各ステップの動作を説明するが、これは、より具体的には、ＣＰＵが、待ち合わせ解除手段１３が提供する処理に従い、読み出し元のプロセスであるプロセスｐ−０２をそのように動作させることを意味する。
【００６７】
また、本例では、ステップＳ４２およびステップＳ４３の処理を、ＣＰＵが提供する不可分のメモリアクセスを用いて行う。
【００６８】
まず、プロセスｐ−０２は、状態変数２を更新する（ステップＳ３１）。
【００６９】
次に、プロセスｐ−０２は、状態変数２を同期条件とする同期操作に対応する起床処理を呼び出す（ステップＳ３２）。
【００７０】
次に、ステップＳ３２の起床処理について、図６を参照して説明する。起床処理では、まず、プロセスｐ−０２は、操作対象とするプロセスを指し示す変数ｉを初期化する（ステップＳ４１）。ここで、変数ｉは、ｐｉｄを指し示す変数であってもよいし、当該起床処理に対応づけられたデータ配列１１１において各データの識別子とされる添え字を指し示す変数であってもよい。ここでは、プロセスｐ−０１は、変数ｉがｐｉｄを指し示す変数であるとして、該変数ｉを０で初期化する。
【００７１】
次に、プロセスｐ−０２は、データ配列１１１において変数ｉが示すプロセスに対応するデータが待ち合わせ状態となっているか否かを判定する（ステップＳ４２）。
【００７２】
ステップＳ４２の判定で、対象としたデータが待ち合わせ状態となっている場合（ステップＳ４２のＹｅｓ）、プロセスｐ−０２は、対象としたデータの待ち合わせ状態を解除した上で（ステップＳ４３）、対象としたデータが対応しているプロセス（変数ｉが指すプロセス）を起床手段４を用いて起床させる（ステップＳ４４）。そして、ステップＳ４５に進む。
【００７３】
一方、ステップＳ４２の判定で、対象としたデータが待ち合わせ状態となっていない場合（ステップＳ４２のＹｅｓ）、そのままステップＳ４５に進む。
【００７４】
ステップＳ４５で、プロセスｐ−０２は、データ配列１１１において待ち合わせ状態が管理される全てのプロセスに対して、待ち合わせ状態の確認が完了したか否かを判定する。全てのプロセスの待ち合わせ状態の確認が完了していれば（ステップＳ４５のＹｅｓ）、プロセスｐ−０２は起床処理から復帰する。
【００７５】
全てのプロセスの待ち合わせ状態の確認が完了していなければ（ステップＳ４５のＮｏ）、プロセスｐ−０２は、変数ｉを次のプロセスを指し示すよう更新した上で（ステップＳ４６）、ステップＳ４２に戻る。
【００７６】
このように、本実施形態では、起床処理で、待ち合わせ状態の参照および解除を行うだけでなく、休眠処理でも、同期可能状態を再確認させた上で、同期可能状態であった場合に待ち合わせ状態の参照および解除を行わせている。かつ、本実施形態では、そのような休眠処理と起床処理における待ち合わせ状態の参照および解除を、不可分のメモリアクセスを用いて行うよう構成している。これにより、例えば、プロセスｐ−０１がステップＳ２３からステップＳ２４に進む間に、プロセスｐ−０２がステップＳ４２とステップＳ４３とを実行してしまうといった休眠操作と起床操作の間に齟齬をもたらすような動作を回避できる。
【００７７】
したがって、本実施形態によれば、各プロセスが、ｌｏｃｋ機構のようなソフトウェアによる排他制御を用いることなく、待ち合わせ状態を管理するためのデータ配列１１１へのアクセスを矛盾なく実施してプロセス間同期に必要なプロセス制御を行うことができる。さらに、待ち合わせ状態を管理するためのデータ配列１１１へのアクセスがボトルネックにならないため、同期操作が頻発に行われるような状況下でも動作効率の悪化を抑制できる。
【００７８】
なお、上記例では、待ち合わせ手段１２が参照処理を提供し、待ち合わせ解除手段１３が更新処理を提供する例を示したが、待ち合わせ手段１２が休眠処理のみを提供したり、待ち合わせ解除手段１３が起床処理のみを提供することも可能である。そのような場合は、同期操作を行う側のプロセスが、上記の参照処理で行ったような処理、すなわち同期可能状態の判定を行った上で、休眠処理を呼び出し、かつ休眠処理からの復帰後に再度同期可能状態の判定を行えばよい。同様に、同期操作により休眠中のプロセスを起床させたいプロセスが、上記の更新処理で行ったような処理、すなわちシステム状態を更新した上で、起床処理を呼び出せばよい。
【００７９】
また、上記例では、起床処理で、待ち合わせ状態の参照および解除を行う際に、各プロセスに対応するデータ単位で行う例を示したが、データ配列１１１がフラグ配列の場合には、ワード単位で待ち合わせ状態の参照および解除を行ってもよい。
【００８０】
また、図１では、データ管理機構１１が１つのデータ配列１１１を含む例を示しているが、データ管理機構１１は、複数のデータ配列１１１を含んでいてもよい。データ管理機構１１は、例えば、複数のプロセス間で同期対象とされた処理の単位である同期処理単位ごとや、同期条件に用いられる共有変数ごとにデータ配列１１１を有していてもよい。その場合、更新処理や参照処理を呼び出す際に、待ち合わせ状態を管理するデータ配列１１１を識別する識別子を引数等で渡せばよい。
【００８１】
また、１つのデータ配列１１１で待ち合わせ状態とされる各プロセスにおいて、同期条件は必ずしも同じでなくてもよい。すなわち、１つのデータ配列１１１で管理されるプロセス同士で同期条件はプロセスごとに異なっていてもよい。例えば、あるプロセスは、システム状態を表す状態変数２がＴ値以上の場合に同期可能状態であると判定するが、他のプロセスは、状態変数２がＴ＋１以上の場合に同期可能状態であると判定してもよい。本実施形態では、データ配列１１１が対応する状態変数が更新された際に、待ち合わせ状態にある全てのプロセスを一旦起床させ、起床された各プロセス側で、自プロセスの同期可能状態に達した可否かを再び判定して、到達していなければ再度休眠処理を行うように構成されている。このため、各プロセスが異なる同期条件を有していても特に問題にはならない。
【００８２】
また、他の例として、起床処理において、待ち合わせ状態を走査する際の開始位置を、毎回変更するような制御を加えて、起床させるプロセスの順番を毎回異ならせることも可能である。
【００８３】
次に、本発明による情報処理装置の概要を説明する。図７は、本発明による情報処理装置の概要を示すブロック図である。図７に示すように、本発明による情報処理装置は、同期機構６０１として、データ配列６０２と、待ち合わせ手段６０３と、待ち合わせ解除手段６０４とを備えていてもよい。
【００８４】
データ配列６０２は、同期操作に伴う待ち合わせ状態を管理するデータの配列であって、各プロセスに対応するデータの配列である。
【００８５】
待ち合わせ手段６０３は、所定の同期条件が満たされていないことにより休眠しようとするプロセスに、データ配列における自プロセスの待ち合わせ状態を更新した後、休眠する前に、所定の同期条件が満たされていることを条件に、再度データ配列における自プロセスの待ち合わせ状態を確認させ、確認の結果、待ち合わせ状態であれば該状態を解除した上で復帰させ、待ち合わせ状態でなければ休眠させる休眠処理を提供する。このとき、待ち合わせ手段６０３は、該休眠処理で、データ配列における各プロセスの待ち合わせ状態の確認および待ち合わせ状態の解除を、不可分のメモリアクセスにより行う。
【００８６】
待ち合わせ解除手段６０４は、所定の同期条件が満たされていないことにより休眠中のプロセスを起床しようとするプロセスに、データ配列における各プロセスの待ち合わせ状態の確認および待ち合わせ状態の解除を行わせ、待ち合わせ状態であったプロセスを起床させる起床処理を提供する。このとき、待ち合わせ解除手段６０４は、該起床処理で、データ配列６０２に対する待ち合わせ状態の確認および待ち合わせ状態の解除を不可分なメモリアクセスにより行わせる。
【００８７】
このような構成により、休眠操作と起床操作の間に齟齬をもたらすような動作を回避しつつ、同期操作が頻発に行われるような状況下でも動作効率の悪化を抑制できる。
【００８８】
なお、データ配列６０２は、各プロセスに対応するフラグの配列であるフラグ配列であってもよい。
【００８９】
また、各プロセスは、休眠処理からの復帰後に、所定の同期条件が満たされていなければ、再び休眠処理を呼び出すように構成されていてもよい。
【００９０】
また、所定の同期条件がプロセスごとに異なっていてもよい。
【００９１】
また、情報処理装置は、図８に示すように、データ配列６０２を複数備えていてもよい。なお、図８は、本発明による情報処理装置の他の例を示すブロック図である。
【産業上の利用可能性】
【００９２】
本発明は、複数のプロセスが並行して実行される情報処理装置に好適に適用可能である。
【符号の説明】
【００９３】
１、６０１  同期機構
１１  データ管理機構
１１１、６０２  データ配列
１２、６０３  待ち合わせ手段
１３、６０４  待ち合わせ解除手段
２  状態変数
３、９３  休眠手段
４、９４  起床手段
９１  リスト構造データ
９５  ｌｏｃｋ機構
【図１】
2017182282.tif 000003
【図２】
2017182282.tif 000004
【図３】
2017182282.tif 000005
【図４】
2017182282.tif 000006
【図５】
2017182282.tif 000007
【図６】
2017182282.tif 000008
【図７】
2017182282.tif 000009
【図８】
2017182282.tif 000010
【図９】
2017182282.tif 000011
【図１０】
2017182282.tif 000012