次に、本発明の実施形態について図面を参照して説明する。
なお、各図面は、本発明の実施形態を説明するものである。そのため、本発明は、各図面の記載に限られるわけではない。また、各図面の同様の構成には、同じ番号を付し、その繰り返しの説明は、省略する場合がある。
なお、情報処理装置においてリソースを排他的に管理(ロック)する処理の単位は、いろいろなレベルで行われ、呼称もいろいろとある(例えば、プロセス、スレッド、タスク、ジョブ)。本発明の実施形態では、特に制限はない。以下の説明では、処理の単位の一例として「プロセス」を用いて説明する。
(第1の実施形態)
図1は、本発明のおける第1の実施形態に係る情報処理装置10の機能の構成の一例を示すブロック図である。
情報処理装置10は、処理プロセス100aと、処理プロセス100bと、ロック関連情報格納部200と、監視プロセス300とを含む。
なお、処理プロセス100a及び処理プロセス100bをまとめて処理プロセス100と言う。また、図1に記載した処理プロセス100の数は、説明の便宜のためであり、処理プロセス100の数を限定するものではない。本実施形態の情報処理装置10が含む処理プロセス100の数は、動的又は静的に、1つ又は3つ以上に変化しても良い。
処理プロセス100(処理プロセス100aと処理プロセス100b)は、図示しないCPU(Central Processing Unit)、メモリ、外部装置などの資源(リソース)を割り当てられ処理を実行する処理の単位である。処理プロセス100a及び処理プロセス100bは、独立して動作しても良く、相互に関連しながら動作しても良い。ただし、処理プロセス100a及び処理プロセス100bは、共有のリソースを使用する場合、リソースのロックを取得して使用する。ここで共通のリソースとは、各処理プロセス100に割り当てられたリソースとは異なる、複数の処理プロセス100で共通に使用するロック(排他制御)の対象となるリソースである。
また、処理プロセス100a及び処理プロセス100bは、処理に用いる空間(以下、プロセス空間と言う)に対して、仮想メモリの手法が適用されるとする。そのため、処理プロセス100a及び処理プロセス100bは、プロセス空間に常駐を設定しない場合、一部又は全部のプロセス空間が、図示しない外部記憶装置にページアウトされることがある。なお、プロセス空間は、仮想メモリとして処理されるデータなどのためのメモリの空間であるが、メモリ空間に割り当てられた外部記憶装置などIO(Input/Output)空間を含んでも良い。
ロック関連情報格納部200は、プロセスが使用するリソースの排他的状態(ロック状態)を示す情報を保存(格納)する。本実施形態のロックは、セマフォ(semaphore)やミューテックス(Mutex)などいろいろな排他的機構(排他機構部)を用いることができ、特に制限はない。以下は、一例として、セマフォを用いて説明する。つまり、以下の説明では、ロック関連情報格納部200は、リソースのロックのためのセマフォと、ロックに関連する情報を保持(格納)する。処理プロセス100は、ロック関連情報格納部200を用いてリソースのロック状態を確認し、ロックを取得及び解除する。
監視プロセス300は、処理プロセス100やメインメモリの状態を監視し、必要に応じて、処理プロセス100が使用するプロセス空間を図示しないメインメモリにページインし、図示しない外部記憶装置にページアウトする。また、監視プロセス300は、プロセス空間の常駐の設定や常駐解除を管理する。
より具体的に説明すると、監視プロセス300は、所定の時間間隔(インターバル、このインターバルを、以下、「監視インターバル」と言う。)毎に、以下、図2を用いて説明する監視の処理を繰り返す。なお、監視インターバルは、情報処理装置10の管理者などが、予め監視プロセス300に設定しておく。
なお、以下の説明において、現在動作している監視の処理を「今回の監視の処理」、今回の監視の処理の後、監視インターバルを経過して再開する監視の処理を「次回の監視の処理」と言う。
図2は、監視プロセス300の監視動作の一例を示すフローチャートである。
監視プロセス300は、メインメモリ(主記憶)の空き状態、つまり、メインメモリの負荷状態(以下、「メモリ負荷」と言う)を確認する(ステップ1001)。
メモリ負荷が高くない場合(ステップ1002でNO)、監視プロセス300は、ステップ1004に進む。
メモリ負荷が高い場合(ステップ1002でYES)、監視プロセス300は、次回の監視の処理(インターバル経過後の次回の監視の処理)までロック待ちが続く(ロック継続の)処理プロセス100のプロセス空間をページアウトする(ステップ1003)。ここで、監視プロセス300がページアウトする処理プロセス100の数は、制限はなく、1つでも2つ以上の複数でもよい。監視プロセス300は、ステップ1003において、メモリ負荷の状態を基に、ページアウトするプロセス空間の数を決めても良い。
また、後ほど説明するステップ1006において、監視プロセス300は、次回の監視の処理までにロック取得する処理プロセス100のプロセス空間をページインして常駐設定する。つまり、監視プロセス300は、ステップ1006において、次回の監視の処理までにページインが必要なプロセス空間をページインする。そのため、監視プロセス300は、現在プロセス空間に常駐を設定しているが次回の監視の処理までロック待ちが続く処理プロセス100のプロセス空間をページアウトしても、ロックネックの発生を抑制できる。
なお、監視プロセス300は、次回の監視の処理までロック待ちが続く処理プロセス100を、各処理プロセス100から取得した情報及びロック関連情報格納部200に格納した情報を基に判定する。あるいは、監視プロセス300は、次回の監視の処理までロック待ちが続く処理プロセス100を、各処理プロセス100から取得した情報及びロック関連情報格納部200に格納された情報を基に予測する。
次に、監視プロセス300は、次回の監視の処理までに、ロック待ちが解除される処理プロセス100を確認する(ステップ1004)。
なお、監視プロセス300は、ロック待ちが解除される処理プロセス100を、各処理プロセス100から取得した情報及びロック関連情報格納部200に格納した情報を基に判定する。あるいは、監視プロセス300は、ロック待ちが解除される処理プロセス100を、各処理プロセス100から取得した情報及びロック関連情報格納部200に格納された情報を基に予測する。
解除される処理プロセス100がない場合(ステップ1005でNO)、監視プロセス300は、処理を終了する。
解除される処理プロセス100がある場合(ステップ1005でYES)、監視プロセス300は、その処理プロセス100のプロセス空間にメインメモリへの常駐を設定する(ステップ1006)。なお、プロセス空間がページアウトされている場合、監視プロセス300は、プロセス空間をページインし、常駐を設定する。
そして、監視プロセス300は、監視インターバルの間、監視処理を停止する。そして、監視プロセス300は、監視インターバル後、処理(次回の監視の処理)を再開する。
なお、本実施形態の説明において、監視プロセス300を1つとして説明したが、本実施形態はこれに限らない。例えば、情報処理装置10に含まれる処理プロセス100を複数のグループに分け、それぞれのグループが、監視プロセス300を備えても良い。あるいは、情報処理装置10が、複数のロック関連情報格納部200を含み、それぞれのロック関連情報格納部200に対応する監視プロセス300を含んでも良い。
本実施形態の情報処理装置10は、メモリネックを発生しないでロック時間を短縮する効果を得ることができる。
その理由は、次のとおりである。
情報処理装置10の監視プロセス300は、次回の監視の処理までロック待ちが継続する処理プロセス100のプロセス空間をページアウトして、メインメモリの領域を解放する。そのため、情報処理装置10は、メモリネックの発生を抑えることができる。
また、監視プロセス300は、次回の監視の処理までに、つまり所定の監視インターバル後までにロックを取得する(ロック待ちが解除される)処理プロセス100のプロセス空間をページインして常駐を設定する。そのため、ロック待ちが解除される処理プロセス100は、プロセス空間のミッシングが発生しないためである。
なお、本実施形態の情報処理装置10の構成は、図1に限られるわけではない。例えば、情報処理装置10は、CPUを含むコンピュータを用いて実現できる。
図3は、本実施形態に係る情報処理装置60のCPUを含むコンピュータを用いた物理的な構成の一例を示すブロック図である。
情報処理装置60は、CPU610と、ROM(Read Only Memory)620と、RAM(Random Access Memory)630と、IO(Input/Output)−インターフェース(IF:Interface)640と、記憶装置650と、キーボード660と、マウス670と、ディスプレイ680とを含み、コンピュータを構成している。
CPU610は、ROM620からプログラムを読み込み。あるいは、CPU610は、IO−IF640を介して記憶装置650からプログラムを読み込んでも良い。そして、CPU610は、読み込んだプログラムに基づいて、既に説明した本実施形態の情報処理装置10の各機能を実現する。CPU610は、各機能を実現する際に、RAM630及び記憶装置650を一時記憶として使用する。また、CPU610は、長期保存する情報を記憶装置650に保存する。さらに、CPU610は、IO−IF640を介して、キーボード660及びマウス670などの入力部から入力データを受け取り、ディスプレイ680に情報を表示する。
なお、CPU610は、コンピュータで読み取り可能にプログラムを記憶した記憶媒体690が含むプログラムを、図示しない記憶媒体読み取り装置を用いて読み込んでも良い。
このように構成された情報処理装置60は、情報処理装置10と同様の効果を得ることができる。
その理由は、情報処理装置60のCPU610が、ROM620又は記憶装置650のプログラムに基づいて情報処理装置10と同様の動作を実現できるためである。
(第2の実施形態)
第2の実施形態は、第1の実施形態の各構成をより詳細に構成した実施形態である。ただし、第2の実施形態は、各構成の一例である。
図4は、第2の実施形態の情報処理装置20の構成の一例を示すブロック図である。
なお、図4において、図1と同様に情報処理装置20が含む、処理プロセス100と、ロック関連情報格納部200と、監視プロセス300とに加え、説明を明確にするため、プロセス空間400を示している。また、図4において、構成の明確にするため、処理プロセス100を1つで示した。
ロック関連情報格納部200は、ロック情報格納部210と、セマフォ220とを含む。
ロック情報格納部210は、ロックを監視するメモリなどのリソースのロックに関連する情報(以下、「ロック情報」と言う)を格納(保存)する。ロック情報は、ロックの手法に対応した情報であり、本実施形態は、特に制限はない。
図5は、ロック情報の一例を示す。なお、以下の説明においても、図5に示すロック情報を用いて説明する。以下、各ロック対象となるリソース毎のロック情報をまとめて「エントリ」と言う。
図5に示すロック情報は、エントリを表形式で示している。エントリは、エントリを識別するための情報(エントリ識別子)と、ロック対象のリソースに関する情報(例えば、リソースのアドレスを示すロックアドレス)と、ロックを取得した処理プロセス100に関する情報と、ロックの状態に関する情報とを含む。
ロックを取得した処理プロセス100に関する情報は、処理プロセス100を識別するプロセス番号と、処理プロセス100が使用するプロセス空間400のアドレス(例えば、先頭アドレスと空間の大きさ、又は、先頭アドレスと終了アドレス)とを含む。
ロックの状態に関連する情報は、次の情報を含む。ロック回数は、リソースを排他的に確保したロックの累積回数である。ミッシング発生回数は、処理プロセス100のプロセス空間400のアクセスにおいて発生したミッシング(消失)の累積回数である。ロック取得時間は、リソースを排他的に確保した(ロックを取得した)累積時間である。ロック取得時刻は、リソースを排他的に確保した(ロックを取得した)時刻である。
図4を用いた説明に戻る。
セマフォ220は、リソースの排他制御のための情報、具体的にはリソースを所得してロックを設定した処理プロセス100、及び、ロックの取得を待っている処理プロセス100の情報を保持する排他機構部である。セマフォ220は、リソース毎に設けられる。本実施形態のセマフォ220は、特に制限はない。一例として、本実施形態は、図6に示すセマフォ220を使用するとして説明する。
図6は、本実施形態の説明に用いるセマフォ220の一例を示す図である。
図6に示すセマフォ220は、ロックを取得した処理プロセス100の情報(ロック取得プロセス情報710)、及び、ロック取得を待つ処理プロセス100の情報(ロック待ちプロセス情報720a及びロック待ちプロセス情報720b)を、待ち行列(キュー)として保存する。
なお、ロック待ちプロセス情報720a及びロック待ちプロセス情報720bをまとめて、ロック待ちプロセス情報720と言う。
また、図6において、1つのロック取得プロセス情報710と、2つのロック待ちプロセス情報720aとロック待ちプロセス情報720bを示しているのは、例示である。本実施形態のセマフォ220は、待ち行列(キュー)に保存するプロセス情報の数に制限はない。セマフォ220は、1つもロック待ちプロセス情報720を含まない場合もあり、1つ又は3つ以上のロック待ちプロセス情報720を含む場合もある。さらに、ロックを取得している処理プロセス100がない場合、セマフォ220は、ロック取得プロセス情報710を含まない、又は、空のロック取得プロセス情報710を含む。また、リソースが複数の処理プロセス100からの占有が可能な場合、セマフォ220は、複数のロック取得プロセス情報710を含んでも良い。
図6に示す各プロセス情報は、ロックを取得又はロックを待っている処理プロセス100の「プロセス番号」と、処理プロセス100が使用するプロセス空間400が常駐設定であるか否かを示す情報(常駐設定フラグ)と、プロセス空間400がページアウトされているか否かを示す情報(ページアウトフラグ)とを含む。さらに、各プロセス情報は、次のロックを取得するロック待ちプロセス情報720の位置(アドレス)を示す「次プロセス情報アドレス」を含む。
ロック取得プロセス情報710は、ロックを取得したプロセスに関する情報である。ロック取得プロセス情報710のプロセス番号は、ロックを取得した処理プロセス100のプロセス番号である。常駐設定フラグ及びページアウトフラグは、ロックを取得した処理プロセス100のプロセス空間400の常駐設定及びページアウトの状態を示す。また、ロック取得プロセス情報710の「次プロセス情報アドレス」は、次にロックを取得するロック待ちプロセス情報720(図6では、ロック待ちプロセス情報720a)のアドレスである。なお、ロック取得プロセス情報710の次にロックを取得するロック待ちプロセス情報720aは、ロック待ち待ち行列(キュー)に含まれる先頭のロック待ちプロセス情報720となる。
図6の中央のロック待ちプロセス情報720aは、先頭のロック待ちプロセス情報720である。このロック待ちプロセス情報720aは、ロック取得プロセス情報710と同様に、プロセス番号と、常駐設定フラグと、ページアウトフラグとを含む。また、ロック待ちプロセス情報720aは、次にロックを取得するロック待ちプロセス情報720bのアドレスである「次プロセス情報アドレス」を含む。
図6の下段のロック待ちプロセス情報720bも、ロック待ちプロセス情報720aと同様の情報を含む。
図4を用いた説明に戻る。
プロセス空間400は、処理プロセス100が実行時にアクセスする空間である。プロセス空間400は、図示しないOSに基づき、仮想メモリとして動作する。そのため、処理プロセス100がプロセス空間400にアクセスする場合、プロセス空間400は、情報処理装置20の図示しないメインメモリにページインされ、適宜、図示しない外部記憶装置にページアウトされる。
処理プロセス100は、ロック登録部110と、ロック取得部120と、ロック開始部130と、ロック解除部140と、積算部150と、常駐解除部160と、ミッシング解決部170と、カウント部180とを含む。処理プロセス100は、情報処理装置20の各処理を実行する処理単位である。図4は、以下の本実施形態の説明に関係する構成を示し、他の構成の記載を省略した。
ロック登録部110は、処理プロセス100の起動など初期化時に、処理プロセス100に呼び出される。ロック登録部110は、処理プロセス100が使用するリソースに対応するエントリをロック情報格納部210に登録する。
図5に示すエントリを使用する場合、ロック登録部110は、ロック情報格納部210にエントリを登録するためのエントリ領域を要求する。ロック情報格納部210は、エントリ識別子を設定して、エントリの領域のロック登録部110に通知する。ロック登録部110は、エントリのロックアドレスにリソースのアドレスを、プロセス番号に処理プロセス100のプロセス番号を、プロセス空間アドレスに処理プロセス100が使用するプロセス空間400のアドレスを設定する。また、ロック登録部110は、他の情報を初期化(クリア)する。
なお、ロック登録部110が、ロック情報格納部210のエントリ領域を確保しても良い。この場合、ロック登録部110が、エントリ識別子を設定する。
ロック取得部120は、リソースのロック取得時に処理プロセス100に呼び出される。ロック取得部120は、リソースのセマフォ220を確認し、リソースを取得した他の処理プロセス100があるか否かを確認する。例えば、ロック取得部120は、セマフォ220のロック取得プロセス情報710のプロセス番号が登録されているか否かを確認する。
リソースのロックを取得した処理プロセス100がない場合、ロック取得部120は、ロック取得プロセス情報710のプロセス番号に、自分の処理プロセス100の番号を設定する。さらに、ロック取得部120は、自分の処理プロセス100で使用するプロセス空間400の常駐の状態とページアウトの状態を、常駐設定フラグとページアウトフラグに設定する。さらに、ロック取得部120は、「次プロセス情報アドレス」をクリア、又は、後続がない状態に設定する。そして、ロック取得部120は、ロック開始部130を呼び出す。ロック開始部130については後ほど説明する。
ロックを取得した処理プロセス100がある場合、ロック取得部120は、自分の処理プロセス100に対応するロック待ちプロセス情報720(例えば、ロック待ちプロセス情報720b)を作成して、セマフォ220のキューの最後尾に追加する。例えば、ロック取得部120は、次のような動作する。ロック取得部120は、ロック待ちプロセス情報720のための領域をセマフォ220から取得する。そして、ロック取得部120は、取得したロック待ちプロセス情報720の領域のプロセス番号に自分の処理プロセス100のプロセス番号を設定し、プロセス空間400の常駐の状態とページアウトとの状態を、常駐設定フラグとページアウトフラグとに設定する。さらに、ロック取得部120は、「次プロセス情報アドレス」をクリア、又は、後続がない状態に設定する。
そして、ロック取得部120は、セマフォ220の待ち行列(キュー)の最後に作成したロック待ちプロセス情報720を追加する。具体的には、ロック取得部120は、次のように動作する。
ロック取得プロセス情報710の「次プロセス情報アドレス」にアドレスの登録がない場合、ロック取得部120は、作成したロック待ちプロセス情報720のアドレスをロック取得プロセス情報710の「次プロセス情報アドレス」に設定する。(例えば、ロック待ちプロセス情報720aを作成した場合、ロック取得部120は、ロック取得プロセス情報710の「次プロセス情報アドレス」にロック待ちプロセス情報720aのアドレスを登録(設定)する。)
アドレスが登録されている場合、ロック取得部120は、登録されているアドレスのロック待ちプロセス情報720の「次プロセス情報アドレス」を確認する。ロック待ちプロセス情報720の「次プロセス情報アドレス」にアドレスの登録がない場合、ロック取得部120は、作成したロック待ちプロセス情報720のアドレスをロック待ちプロセス情報720の「次プロセス情報アドレス」に設定する。(例えば、ロック待ちプロセス情報720bを作成した場合、ロック取得部120は、ロック待ちプロセス情報720aの「次プロセス情報アドレス」にロック待ちプロセス情報720bのアドレスを登録(設定)する。)
アドレスが登録されている場合、ロック取得部120は、同様に、「次プロセス情報アドレス」が登録されていないロック待ちプロセス情報720が現れるまで、ロック待ちプロセス情報720を順番に確認する。
アドレスが登録されていないロック待ちプロセス情報720が見つかると、ロック取得部120は、作成したロック待ちプロセス情報720のアドレスをロック待ちプロセス情報720の「次プロセス情報アドレス」に設定する。
そして、ロック取得部120は、後ほど説明するように、再開指示が届くまで、ロック解除を待つ。再開指示を受けると、ロック取得部120は、ロック開始部130を呼び出す。
ロック開始部130は、ロック取得部120から呼び出されて動作を開始する。ロック開始部130は、ロック情報格納部210に登録されているエントリのロックの開始に関する情報を設定する。例えば、ロック開始部130は、エントリのロック取得時刻に、現在の時刻を設定する。
ロック解除部140は、ロック解除時に、処理プロセス100に呼び出される。ロック解除部140は、まず、積算部150を呼び出し、後ほど説明するようにエントリの情報を更新する。
次に、ロック解除部140は、セマフォ220のロック取得プロセス情報710の常駐設定フラグを保持する。
続いて、ロック解除部140は、セマフォ220にロック待ちプロセスがあるか否かを確認する。例えば、ロック解除部140は、ロック取得プロセス情報710の「次プロセス情報アドレス」にアドレスが登録されているか否かを確認する。
ロック待ちプロセスがある場合、ロック解除部140は、ロック待ちプロセス情報720の先頭のプロセス情報(例えば、図6のロック待ちプロセス情報720a)をロック取得プロセス情報710に複製(コピー)する。そして、ロック解除部140は、複製後、不要となったセマフォ220のロック待ちプロセス情報720の領域を解放(空きエントリに)する。つまり、ロック解除部140は、セマフォ220のキューを1つ進める。そして、ロック解除部140は、ロック取得プロセス情報710にコピーしたプロセス番号の処理プロセス100、つまり、ロックを取得した処理プロセス100のロック取得部120に再開の指示を送る。
なお、ここまでの説明において、ロック解除部140が、セマフォ220の情報を処理したが、本実施形態は、これに限られる必要はない。例えば、ロック解除部140がセマフォ220に指示を送り、セマフォ220が、キューを1つ進めても良い。さらに、キューを1つ進めたセマフォ220が、ロックを取得した処理プロセス100に再開指示を送っても良い。
ロック待ちプロセスがない場合、ロック解除部140は、ロック取得プロセス情報710の領域を初期化(空きエントリに)する。なお、ロック解除部140から指示を受けたセマフォ220が、初期化しても良い。
続いて、ロック解除部140は、先ほど保持した常駐設定フラグを確認する。常駐設定フラグが常駐の場合、ロック解除部140は、後ほど説明する常駐解除部160を呼び出し、プロセス空間400の常駐を解除する。常駐解除部160を呼び出し後、又は、常駐設定でない場合、ロック解除部140は、処理を終了する。
積算部150は、ロック解除部140から呼び出されて動作する。積算部150は、ロック解除に伴うロック情報格納部210のエントリの情報を更新する。例えば、積算部150は、エントリのロック取得時刻と、現在時刻とから、今回のロックを取得していた時間を算出し、エントリのロック取得時間に加算する。また、積算部150は、エントリのロック回数を1つ増やす。
常駐解除部160は、ロック解除部140から指示されたプロセス空間400の常駐設定を解除する。なお、常駐解除部160は、図示しないOSの機能を利用して常駐設定を解除しても良い。
ミッシング解決部170は、処理プロセス100の処理において、ページアウト(ミッシング)されたプロセス空間400へのアクセスが発生した場合、処理プロセス100に呼び出される。ミッシング解決部170は、ページアウトされたプロセス空間400をページインする。なお、メインメモリにページインする領域がない場合、ミッシング解決部170は、ページアウトできるプロセス空間400をページアウトした後、自分の処理プロセス100のプロセス空間400をページインする。なお、ミッシング解決部170は、図示しないOSの機能を利用して、ページイン又はページアウトしても良い。その後、ミッシング解決部170は、カウント部180を呼び出す。
カウント部180は、ミッシング解決部170に呼び出されて動作する。カウント部180は、ロック情報格納部210に自分の処理プロセス100のエントリがあるか否かを確認する。エントリがある場合、カウント部180は、エントリのミッシング発生回数を1つ増やす。
監視プロセス300は、監視部310と、ページアウト部320と、常駐設定部330とを含む。
監視部310は、監視インターバルの間隔で監視の動作を繰り返し、ページアウトするプロセス空間400と常駐設定するプロセス空間400とを判定する。そのため、監視部310は、ページインサイズ計算部311と、ページアウト空間決定部312と、常駐設定空間決定部313とを含む。
図7は、監視部310の構成の一例を示すブロック図である。
ページインサイズ計算部311は、監視インターバルと、ロック情報格納部210が格納する情報と、セマフォ220の情報とを基に、次回の監視の処理までにページインが必要なプロセス空間400の大きさの合計量(ページインサイズ)を計算する。ページインサイズ計算部311が用いるロック情報格納部210が格納する情報は、例えば、ロック発生回数、ロック取得時間である。なお、ページインサイズ計算部311は、ページインが必要なプロセス空間400として、他の条件のプロセス空間400を含めても良い。例えば、ページインサイズ計算部311は、ミッシング発生回数が多いプロセス空間400をページインが必要であるプロセス空間400に含めても良い。(なお、以下、ページインサイズ計算部311が次回の監視の処理までにページインが必要と判定したプロセス空間400を「第1のプロセス空間」と言う。)
ページアウト空間決定部312は、ページインサイズ計算部311が算出したページインサイズと、情報処理装置20のメモリの量と、監視インターバルと、ロック情報格納部210が格納する情報と、セマフォ220の情報とを基に、ページアウトするプロセス空間400を決定する。より具体的には、ページアウト空間決定部312は、次回の監視の処理までにロックを取得しない処理プロセス100のプロセス空間400を求め、ページアウトするプロセス空間400を決定する。そして、ページアウト空間決定部312は、決定したプロセス空間400をページアウト部320に通知する。ページアウト空間決定部312は、使用するメモリの量として、例えば、メインメモリの使用量、メインメモリの全容量を用いる。また、ロック情報格納部210が格納する情報は、例えば、ロック回数、ロック取得時間である。なお、ページアウト空間決定部312は、他の条件のプロセス空間400をページアプトするプロセス空間400に含めても良い。例えば、ページアウト空間決定部312は、ロック取得時間が短いプロセス空間400を、ページアウトするプロセス空間400に含めても良い。(なお、以下、ページアウト空間決定部312がページアウトすると決定したプロセス空間を「第2のプロセス空間」と言う。)
常駐設定空間決定部313は、ページインサイズ計算部311が算出したページインサイズと、情報処理装置20のメモリの量と、監視インターバルと、ロック情報格納部210が格納した情報と、セマフォ220の情報とを基に、常駐設定するプロセス空間400を決定する。より具体的には、常駐設定空間決定部313は、次回の監視の処理までにロックを取得する処理プロセス100を求め、ページインするプロセス空間400を決定する。なお、空きメモリの量が十分ある場合、常駐設定空間決定部313は、ページインサイズ計算部311がページインする判定した「第1のプロセス空間」を全て常駐設定するプロセス空間400と決定する。しかし、ページアウト空間決定部312が決定したプロセス空間400をページアウトしても、メモリに「第1のプロセス空間」をページインする容量が確保できない場合、常駐設定空間決定部313は、所定の順番(例えばロック解除が早い順番)で常駐設定するプロセス空間400を決定する。そして、常駐設定空間決定部313は、決定したプロセス空間400を、常駐設定部330に通知する。なお、メモリの量は、例えば、メインメモリの使用量、メインメモリの全容量である。また、ロック情報格納部210が格納する情報は、例えば、ロック回数、ロック取得時間である。なお、常駐設定空間決定部313は、ページインするプロセス空間400に他の条件のプロセス空間400を含めても良い。例えば、常駐設定空間決定部313は、ミッシング発生回数が多いプロセス空間400を常駐するプロセス空間400に含めても良い。(なお、以下、常駐設定空間決定部313が決定したページインするプロセス空間を「第3のプロセス空間」と言う。)
ページアウト部320は、監視部310からページアウトするプロセス空間400の情報を受け取り、指定されたプロセス空間400をページアウトする。なお、ページアウト部320は、図示しないOSの機能を利用してページアウトしても良い。
常駐設定部330は、監視部310から常駐設定するプロセス空間400の情報を受け取り、指定されたプロセス空間400を常駐に設定する。なお、指定されたプロセス空間400がページアウトされている場合、常駐設定部330は、プロセス空間400をページインしてから、常駐設定する。常駐設定部330は、図示しないOSの機能を利用して、ページイン及び常駐を設定しても良い。
次に、本実施形態の情報処理装置20のロックに関係する動作について図面を参照してさらに説明する。
まず、ロックの取得の動作について説明する。
図8は、ロック取得動作の一例を示すフローチャートである。
なお、ロック情報格納部210のエントリは、既に登録済みとする。
リソースのロックが必要な場合、処理プロセス100のロック取得部120は、セマフォ220の情報を基に、ロックを取得するリソースがロック状態(ロック取得済み)であるか否かを確認する(ステップ2001)。本実施形態のロック取得部120のロック取得状態の確認は、特に制限はない。例えば、ロック取得部120は、図6に示したロック取得プロセス情報710のプロセス番号に、プロセス番号が登録されているか否かを確認しても良い。
ロック済みでない場合(ステップ2001でNO)、ロック取得部120は、セマフォ220のロック取得プロセス情報710に自分の処理プロセス100の情報を設定し、ロックを取得する(ステップ2002)。例えば、図6に示すセマフォ220の場合、ロック取得部120は、ロック取得プロセス情報710のプロセス番号に自分の処理プロセス100のプロセス番号を設定する。また、ロック取得部120は、プロセス空間400の状態を常駐設定フラグとページアウトフラグに設定する。そして、ロック取得部120は、「次プロセス情報アドレス」を初期化(クリア)する。
その後、処理プロセス100は、エントリの情報の設定(ステップ2006)に進む。
ロック済みの場合(ステップ2001でYES)、ロック取得部120は、セマフォ220にロック待ちプロセス情報720を作成する(ステップ2003)。例えば、図6ロック待ちプロセス情報720aに設定する場合、ロック取得部120は、空きのロック待ちプロセス情報720を確保し、自プロセスのプロセス番号を、ロック待ちプロセス情報720のプロセス番号に設定する。また、ロック取得部120は、プロセス空間400の状態を常駐設定フラグとページアウトフラグに設定する。そして、ロック取得部120は、「次プロセス情報アドレス」を初期化(クリア)する。
次に、ロック取得部120は、作成したロック待ちプロセス情報720をセマフォ220の待ち行列(キュー)の最後の接続する(ステップ2004)。例えば、図6のロック待ちプロセス情報720aを使用する場合、ロック取得部120は、ロック取得プロセス情報710の「次プロセス情報アドレス」に、作成したロック待ちプロセス情報720aのアドレスを設定する。また、図6のロック待ちプロセス情報720bを作成した場合、ロック取得部120は、ロック待ちプロセス情報720aの「次プロセス情報アドレス」に、作成したロック待ちプロセス情報720bのアドレスを設定する。
ロック待ち取得情報の設定終了後、処理プロセス100は、ロックの取得(再開)まで待つ(ステップ2005)。
ロックを取得後、処理プロセス100は、ロック情報格納部210が格納するロック情報のエントリの情報を設定する(ステップ2006)。具体的には、ロック取得部120は、ロック開始部130を呼び出す。呼び出されたロック開始部130は、ロック情報格納部210のエントリにロック開始に関する情報(例えば、ロック取得時刻)を設定する。
図9は、図8のステップ2006の動作の一例を示すフローチャートである。
呼び出されたロック開始部130は、取得したロックのエントリがロック情報格納部210に登録されているか否かを確認する(ステップ3001)。
登録されていない場合(ステップ3001でNO)、ロック開始部130は、エントリを操作しないで終了する。
登録されている場合(ステップ3001でYES)、ロック開始部130は、エントリのロック取得時刻に現在時刻を設定する(ステップ3002)。
ロック取得動作が完了すると、処理プロセス100は、ロック取得したリソースを用いた処理を開始する。
次に、監視プロセス300のロック監視の動作について説明する。
図10は、監視プロセス300のロック監視の動作の概要を示すフローチャートである。
監視プロセス300の監視部310は、ロック待ちプロセス情報720の中で、ページインが必要な処理プロセス100のプロセス空間400を求める。そして、監視部310は、求めたプロセス空間400に必要なサイズ(ページインサイズ)を計算する(ステップ4001)。
次に、監視部310は、メインメモリにステップ4001で計算したページインに必要なサイズを確保するため、ページアウトするプロセス空間400(ページアウト空間)を決定する(ステップ4002)。監視部310は、決定したページアウトするプロセス空間400の情報をページアウト部320に出力する。ページアウト部320は、受け取った情報で示されるプロセス空間400をページアウトする。
続いて、監視部310は、ページインするプロセス空間400の情報を常駐設定部330に出力する(ステップ4003)。常駐設定部330は、受け取った情報で示されるプロセス空間400をページインして常駐を設定する。
なお、監視部310は、ステップ4001でページインが必要と判断された処理プロセス100のプロセス空間400を全てページインできることが望ましい。しかし、ステップ4002を行っても、全てのプロセス空間400のページイン必要な容量を確保できない場合がある。そのため、監視部310は、所定の規則に基づいて、可能な範囲で、ページインするプロセス空間400を決定する。例えば、監視部310は、各リソースのセマフォ220の待ち行列(キュー)の前から、可能な範囲で、ページインするプロセス空間400を決定する。
ステップ4003の後、監視部310は、所定の時間(監視インターバル)を待ち(ステップ4004)、ステップ4001から処理を再開する。つまり、監視部310は、監視インターバル毎に、ステップ4001からステップ4003を繰り返し、不要なプロセス空間400をページアウトしてメインメモリを確保し、必要なプロセス空間400をページインして、ロック処理時間を削減する。
続いて、各動作についてより詳細に説明する。
まず、ページインサイズの計算について説明する。
図11は、ページインサイズの計算の動作の一例を示すフローチャートである。
監視部310のページインサイズ計算部311は、処理するエントリを示す変数とページインサイズを保存する変数を初期化する(ステップ5001)。本実施形態の説明では、一例として、処理するエントリを表す変数をエントリの順番を示す変数sとし、ページインするページサイズを保存する変数を変数pとする。そして、本実施形態の説明では、初期化の一例として、ページインサイズ計算部311は、変数s=1、変数p=0を設定するとして説明する。以下、図11の説明において、変数sで示されるエントリを「対象エントリ」と言う。
ページインサイズ計算部311は、対象エントリが、ロック待ちか否かを判定する。本実施形態のページインサイズ計算部311は、ロック待ちか否かを、対象エントリのプロセスが、セマフォ220のロック待ちプロセス情報720に含まれるか否かで判定する。さらに、ページインサイズ計算部311は、対象エントリのロックが発生したか否かを判定する。本実施形態のページインサイズ計算部311は、ロックの発生を、対象エントリのロック回数が1以上(0でない)か否かで判定する。まとめると、ページインサイズ計算部311は、対象エントリが、「ロック待ち」、且つ、「ロックが発生した」であるか否かを判定する(ステップ5002)。
対象のエントリが、ロック待ちでない、又は、ロックが発生していない場合(ステップ5002でNO)、対象エントリのプロセス空間400は、ページインが不要である。そのため、ページインサイズ計算部311は、次のエントリについて処理するため、ステップ5009に進む。
一方、対象エントリが、ロック待ち且つロックが発生した場合(ステップ5002でYES)、対象エントリのプロセス空間400は、ページインが必要である。
そのため、ページインサイズ計算部311は、ページインのサイズ(p)を修正する。まず、ページインサイズ計算部311は、ページインのサイズ(p)を修正するために用いる変数を初期化する(ステップ5003)。本実施形態の説明では、次回の監視の処理までにロックを取得するプロセス数を示す変数mと確認するロック待ちプロセス情報720を示す変数nを用いるとする。なお、次回の監視の処理までにロックを取得するプロセス数とは、今回の監視の処理を終了し、所定の監視インターバルを経過し、次回の監視の処理までにロックを取得するプロセスの数である。ロックを取得するプロセス数は、情報処理装置10の各プロセス処理を基に求めることができるが、多くの計算を必要とする。そのため、本実施形態の情報処理装置20は、計算量を削減するため、ロックを取得するプロセスの数として、予測値を用いる。以下、本実施形態の情報処理装置20は、予測の一例として、ロックを取得するプロセスの数(m)として次の数式1を使用する。
[数1]
m = 監視インターバル * ロック回数 / ロック取得時間 (1)
ここで、ロック回数とロック取得時間とは、エントリに含まれる値である。ロック回数とロック取得時間は、ロック情報格納部210に含まれる一部又はすべてのエントリの平均値を用いても良く、所定のエントリの値を用いても良い。
なお、「ロック取得時間/ロック回数」は、「平均ロック取得時間」である。そのため、情報処理装置20は、ロックを取得するプロセスの数(m)として、次の数式2を用いても良い。
[数2]
m = 監視インターバル / 平均ロック取得時間 (2)
また、ページインサイズ計算部311は、確認するロック待ちプロセス情報720を示す変数nの初期として1を設定する。以下、図11の説明において変数nで示されるロック待ちプロセス情報720を「対象プロセス情報」と言う。
ページインサイズ計算部311は、対象プロセス情報がページアウトされているか否かを確認する(ステップ5004)。本実施形態のページインサイズ計算部311は、対象プロセス情報のページアウトフラグがオンかオフかを確認する。
ページアウトされている場合(ステップ5004でYES)、ページインサイズ計算部311は、ページインサイズの修正(ステップ5006)に進む。
ページアウトされていない場合(ステップ5004でNO)、ページインサイズ計算部311は、対象エントリのミッシングが発生したか否かを確認する(ステップ5005)。本実施形態では、ページインサイズ計算部311は、ミッシング回数が1以上(0でない)か否かを確認する。
ページアウトされておらず(ステップ5004でNO)且つミッシングが発生していない場合(ステップ5005でNO)、ページインサイズ計算部311は、ページインサイズを修正しないでステップ5007に進む。
ページアウトされている、又は、ミッシングが発生している場合(ステップ5004でYES、又は、5005でYES)、ページインサイズ計算部311は、対象エントリのプロセス空間400(第1のプロセス空間)をページインサイズ(変数p)に加える(ステップ5006)。
ページインサイズ計算部311は、対象エントリに関するページインサイズの修正が終了したか否かを判定する(ステップ5007)。具体的には、ページインサイズ計算部311は、対象プロセス情報が、セマフォ220の待ち行列(キュー)の最後か否かを判定する。さらに、対象プロセス情報が最後でない場合、ページインサイズ計算部311は、対象プロセス情報の数(n)が次回の監視の処理までにロックを取得するプロセス数(m)以上か否か比較する。そして、対象プロセス情報がセマフォ220の最後、又は、対象プロセス情報の数がロックを取得するプロセス数以上の場合、ページインサイズ計算部311は、終了と判断する。
終了の場合(ステップ5007でYES)、ページインサイズ計算部311は、対象エントリが最後か否かの確認(ステップ5009)に進む。
対象エントリのついての確認が終了でない場合(ステップ5007でNO)、ページインサイズ計算部311は、対象プロセス情報を変更して(ステップ5008)、ステップ5004に戻る。具体的には、ページインサイズ計算部311は、変数nを1つ加算する。
対象エントリのページインが不要な場合(ステップ5002でNO)、又は、ページインサイズの修正が終了した場合(ステップ5007でYES)、ページインサイズ計算部311は、次のエントリがあるか否か、つまり、対象エントリが最後か否かを判定する(ステップ5009)。
最後でない場合(ステップ5009でNO)、ページインサイズ計算部311は、対象エントリを変更して(ステップ5001)、ステップ5002に戻る。具体的には、ページインサイズ計算部311は、変数sを1つ増加する。
最後のエントリの場合(ステップ5009でYES)、監視部310は、ページインサイズの計算を終了する。
次に、ページアウトするプロセス空間400を決定する動作について説明する。
監視プロセス300は、メインメモリが不足している場合、次回の監視の処理までにロックを取得しないロック待ちプロセス情報720のプロセス空間400をページアウトする。
図12は、ページアウトするプロセス空間400を決定する動作の一例を示すフローチャートである。
監視部310のページアウト空間決定部312は、メインメモリの容量不足、つまり、メインメモリの空き容量が、ページインサイズのための容量より少ないか否かを判定する(ステップ6001)。この判定は、特に制限はない。例えば、ページアウト空間決定部312は、現状のメインメモリの使用量と、図11の説明を用いて説明したページインサイズ(p)を加えた容量が、所定の値より大きい場合に、メモリが不足していると判定しても良い。また、ページアウト空間決定部312は、メインメモリの使用比率で判定しても良い。あるいは、監視部310は、メモリの負荷を監視する図示しないメモリ管理部から、メモリ不足の通知を受けても良い。
容量が不足でない場合(ステップ6001でNO)、ページアウト空間決定部312は、動作を終了する。この場合、監視部310は、ページアウト部320にプロセス空間400に関する情報を出力しない。
容量が不足の場合(ステップ6001でYES)、ページアウト空間決定部312は、処理するエントリを表す変数を初期化する(ステップ6002)。ここでは、一例として、処理の対象のエントリを表す変数をtとし、初期化を変数t=1として説明する。以下、図12の説明において、変数tで示されるエントリを「対象エントリ」と言う。
ページアウト空間決定部312は、対象エントリに対応する処理プロセス100が、セマフォ220のロック待ちか否かを判定する。本実施形態にページアウト空間決定部312は、ロック待ちか否かを、ロック待ちプロセス情報720に含まれるか否かに基づいて判定する。ロック待ちの場合、ページアウト空間決定部312は、対象エントリにロックが発生したか否かを判定する。ロックが発生したか否かの判定として、本実施形態のページアウト空間決定部312は、対象エントリのロック回数が1以上(0でない)か否かを確認する。まとめると、ページアウト空間決定部312は、対象エントリがロック待ち、且つ、ロックが発生しているかを判定する(ステップ6003)。
対象エントリがロック待ち、且つ、ロックが発生している場合、ページアウト空間決定部312は、対象エントリのプロセス空間400をページアウトの対象とする。そのため、ページアウト空間決定部312は、ステップ6004以降の処理に進む。
一方、ロック待ちでない、又は、ロックが発生していない場合(ステップ6003でNO)、ページアウト空間決定部312は、対象エントリの処理を終了し、次のエントリの処理(ステップ6009)に進む。
ロック待ち且つロック発生の場合(ステップ6003でYES)、ページアウト空間決定部312は、判定用の変数を設定する(ステップ6004)。本実施形態の説明では、ページアウト空間決定部312は、次回の監視の処理までにロックを取得するプロセス数を示す変数pと確認するロック待ちプロセス情報720を示す変数qを用いるとする。本実施形態の説明では、変数mと同様に、変数pとして次の式を使用する。
[数3]
p = 監視インターバル * ロック回数 / ロック取得時間 (3)
また、ページアウト空間決定部312は、変数qの初期としてp+1を設定する。ページアウト空間決定部312は、次回の監視の処理までにロックを取得するロック待ちプロセス情報720より後ろ、つまり、次回の監視の処理までにロックを取得しないロック待ちプロセス情報720を以下の処理の対象とする。以下、図12の説明において、変数qで示されるロック待ちプロセス情報720を「対象プロセス情報」と言う。
ページアウト空間決定部312は、変数qの値がセマフォ220に含まれるロック待ちプロセス情報720の数より大きいか否かを確認する(ステップ6005)。この判定は、処理の対象となる対象プロセス情報が残っている否かの判定である。
対象プロセス情報がない場合(ステップ6005NO)、ページアウト空間決定部312は、次のエントリを処理するため、ステップ6009に進む。
対象プロセス情報がある場合(ステップ6005でYES)、ページアウト空間決定部312は、対象プロセス情報がページアウトされている否か確認する(ステップ6006)。本実施形態では、ページアウト空間決定部312は、対象プロセス情報のページアウトフラグがオンかオフかを確認する。
ページアウトされている場合(ステップ6006でYES)、対象プロセス情報のプロセス空間400は、ページアウト済みである。そのため、ページアウト空間決定部312は、ページアウトの処理(ステップ6007)をスキップする。
ページアウトされてない場合(ステップ6006でNO)、監視プロセス300は、対象プロセス情報のプロセス空間400(第2のプロセス空間)をページアウトする(ステップ6007)。具体的には、ページアウト空間決定部312は、対象プロセス情報に含まれるプロセス番号と、対象エントリの情報とを基に、ページアウト部320にページアウトするプロセス空間400の情報を出力する。ページアウト部320は、受け取ったプロセス空間400の情報を基に、プロセス空間400をページアウトする。さらに、ページアウト空間決定部312は、対象プロセス情報のページアウトフラグをオンにし、常駐設定フラグをオフにする。
なお、本実施形態のページアウト空間決定部312とページアウト部320との間の情報は、これに限るわけではない。例えば、ページアウト空間決定部312は、プロセス番号をページアウト部320に出力しても良い。この場合、ページアウト部320は、プロセス番号とロック情報格納部210が含む情報とから、ページアウトするプロセス空間400を取得し、ページアウトする。
ページアウト後、ページアウト空間決定部312は、次のロック待ちプロセス情報720を確認するため、変数を変更する(ステップ6008)。本実施形態では、ページアウト空間決定部312は、対象プロセス情報を示す変数(q)を1つ増加する。そして、ページアウト空間決定部312は、ステップ6005に戻る。
対象エントリの処理を終了すると(ステップ6003でNO、又は、ステップ6005でNO)、ページアウト空間決定部312は、エントリが終了したか否かを確認する(ステップ6009)。
エントリが終了した場合(ステップ6009でYES)、ページアウト空間決定部312は、処理を終了する。
エントリが終了してない場合(ステップ6009でNO)、ページアウト空間決定部312は、対象エントリを示す変数(t)を次のエントリを示すように修正(具体的には、1を加算)して、ステップ6003に戻る。
次に、ページインの動作について説明する。
監視プロセス300は、次回の監視の処理までにロックを取得するロック待ちプロセス情報720のプロセス空間400をページインする。
図13は、ページインの動作の一例を示すフローチャートである。
監視部310の常駐設定空間決定部313は、処理に用いる変数(例えば、対象エントリを示す変数)を設定する(ステップ7001)。本実施形態の説明では、対象エントリを示す変数uに1を設定する。以下、図13の説明において、変数uで示されるエントリを「対象エントリ」と言う。
常駐設定空間決定部313は、対象エントリがロック待ちか否かを判定する。本実施形態の常駐設定空間決定部313は、この判定として、セマフォ220のロック待ちプロセス情報720に含まれるか否かを用いる。ロック待ちの場合、常駐設定空間決定部313は、対象エントリにロックが発生したか否かを確認する。本実施形態の常駐設定空間決定部313は、対象エントリのロック回数が1以上(0でない)か否かを確認する。まとめると、常駐設定空間決定部313は、対象エントリがロック待ちであり且つロックが発生しているか否かを判定する(ステップ7002)。
エントリがロック待ちでない、又は、ロックが非発生の場合(ステップ7002でNO)、常駐設定空間決定部313は、エントリのデータ(情報)の修正(ステップ7010)に進む。
ロック待ち、且つ、ロック発生済みの場合(ステップ7002でYES)、常駐設定空間決定部313は、以下で説明する判定用の変数を設定する(ステップ7003)。本実施形態の説明では、常駐設定空間決定部313は、次回の監視の処理までにロックを取得するプロセス数を示す変数jと確認するロック待ちプロセス情報720を示す変数kを用いるとする。本実施形態の説明では、変数mと同様に、変数jとして次の式を使用する。
[数4]
j = 監視インターバル * ロック回数 / ロック取得時間 (4)
また、常駐設定空間決定部313は、変数kの初期として1を設定する。以下、図13の説明において、変数jで示されるロック待ちプロセス情報720を「対象プロセス情報」と言う。
常駐設定空間決定部313は、メインメモリにページインに必要な容量があるか否かを確認する(ステップ7004)。監視部310の常駐設定空間決定部313は、この判定をステップ6001と同様に行っても良い。しかし、ページインするプロセス空間400は、1つとは限らない。そのため、本実施形態の常駐設定空間決定部313は、既に使用されているメインメモリの容量と、対象プロセス情報のページインに必要な容量とを基に判定する。
メモリに空きがない場合(ステップ7004でNO)、常駐設定空間決定部313は、ページインできないため、次の対象プロセス情報の処理(ステップ7007)に進む。なお、ここで次の対象プロセス情報の処理に進むのは、以下に示す理由のためである。処理プロセス100のプロセス空間400のサイズは、同じではない。つまり、今回の対象プロセス情報のプロセス空間400より小さいプロセス空間400を用いる対象プロセス情報が、残りの対象プロセス情報に含まれる可能性があるためである。ただし、各処理プロセス100のプロセス空間400のサイズが同程度の場合、又は、メインメモリに追加の容量がない場合、常駐設定空間決定部313は、処理を終了しても良い。
メモリに空きがある場合(ステップ7004でYES)、常駐設定空間決定部313は、対象プロセス情報のプロセス空間400がページアウトされているか否かを確認する(ステップ7005)。本実施形態の常駐設定空間決定部313は、この確認として、対象プロセス情報のページアウトフラグを確認する。
ページアウトされていない場合(ステップ7005でNO)、常駐設定空間決定部313は、ページインの必要がないため、次のプロセスの処理(ステップ7007)に進む。
ページアウトされている場合(ステップ7005でYES)、監視プロセス300は、プロセス空間400(第3のプロセス空間)をページインする(ステップ7006)。具体的には、常駐設定空間決定部313は、対象プロセス情報のプロセス番号のプロセス空間400の情報をロック情報格納部210から取得し、常駐設定部330に出力する。プロセス空間400の情報を受け取った常駐設定部330は、プロセス空間400を常駐設定でページインする。常駐設定空間決定部313は、常駐設定部330に出力後、対象プロセス情報のページアウトフラグをオフに、常駐設定フラグをオンにする。
なお、本実施形態の常駐設定空間決定部313と常駐設定部330との間の情報は、これに限るわけではない。例えば、常駐設定空間決定部313は、プロセス番号を常駐設定部330に出力しても良い。この場合、常駐設定部330は、プロセス番号とロック情報格納部210が含む情報とから、ページインするプロセス空間400を取得し、ページインする。
常駐設定空間決定部313は、対象となるロック待ちプロセス情報720が残っているか否かを判定する(ステップ7007)。例えば、常駐設定空間決定部313は、対象プロセス情報がセマフォ220の最後であるか、及び、対象プロセス情報を示す変数(k)が次回の監視の処理までにロックを取得するプロセスの数(j)より大きいか否かを判定する。
ロック待ちプロセス情報720がある場合(ステップ7007でYES)、常駐設定空間決定部313は、プロセスを確認するために変数を修正する(ステップ7008)。常駐設定空間決定部313は、例えば、変数kを1つ加算する。そして、常駐設定空間決定部313は、ステップ7004に戻る。
ロック待ちプロセス情報720がない場合(ステップ7007でNO)、常駐設定空間決定部313は、対象エントリのデータを修正する(ステップ7010)。例えば、常駐設定空間決定部313は、プロセス空間400を常駐させたため、ミッシング発生回数をクリアする。
その後、常駐設定空間決定部313は、次のエントリがあるか否かを確認する(ステップ7011)。
次のエントリがある場合(ステップ7011でYES)、常駐設定空間決定部313は、次のエントリを確認するために変数を修正(例えば、uを1つ加算)する(ステップ7012)。そして、常駐設定空間決定部313は、ステップ7002に戻る。
次のエントリがない場合(ステップ7011でNO)、常駐設定空間決定部313は、処理を終了する。
続いて、ロック解除の動作について説明する。
図14は、ロック解除の動作の一例を示すフローチャートである。
ロックを取得したリソースの処理の終了などロック解除する場合、ロック解除部140は、ロックのリソースに関する情報(例えば、エントリの位置)を積算部150に通知する。積算部150は、既に説明したようにロック解除に伴う情報(例えば、エントリのロック取得時間とロック回数)を更新する(ステップ8001)。
次に、ロック解除部140は、ロックを解除するロック取得プロセス情報710の情報を一時的に保存する(ステップ8002)。具体的には、ロック解除部140は、常駐設定フラグを保存する。
ロック解除部140は、セマフォ220にロック待ちプロセス情報720があるか否かを確認する(ステップ8003)。
ロック待ちプロセス情報720がない場合(ステップ8003でNO)、ロック解除部140は、ロック取得プロセス情報710を初期化(クリア)する(ステップ8007)。なお、ロック解除部140がセマフォ220に、ロック取得プロセス情報710の領域の初期化を指示しても良い。
ロック待ちプロセス情報720がある場合(ステップ8003でYes)、ロック解除部140は、ロック待ちプロセス情報720の先頭の情報(例えば、図6のロック待ちプロセス情報720a)をロック取得プロセス情報710に複製する(ステップ8004)。
ロック解除部140は、複製した先頭のロック待ちプロセス情報720aの領域を解放する(ステップ8005)。
ロック解除部140は、複製したロック取得プロセス情報710のプロセス番号の処理プロセス100にロック取得を通知する(ステップ8006)。通知を受けた処理プロセス100は、ロックを取得して処理を再開する。
つまり、ロック解除部140は、セマフォ220の待ち行列(キュー)を1つ進める(更新する)。
なお、既に説明しているように、本実施形態の情報処理装置20は、セマフォ220の情報を処理する構成を、ロック解除部140に限らない。例えば、ロック解除部140がセマフォ220に指示を送り、セマフォ220が、キューを1つ進めても良い。さらに、キューを1つ進めたセマフォ220が、ロックを取得した処理プロセス100に再開指示を送っても良い。
ロック解除部140は、ステップ8002で保存したプロセス情報の常駐設定フラグが、常駐(オン)であるか否かを確認する(ステップ8008)。
常駐の設定の場合(ステップ8008でYES)、ロック解除部140は、常駐解除部160に、ロック解除した処理プロセス100のプロセス空間400の常駐設定の解除を依頼する(ステップ8009)。依頼を受けた常駐解除部160は、プロセス空間400の常駐設定を解除する。
常駐の設定ではない場合(ステップ8008でNO)、又は、常駐解除部160に依頼後、ロック解除部140は、処理を終了する。
なお、常駐解除部160がプロセス空間400の常駐状態を確認してから解除する場合、ロック解除部140は、ステップ8002及びステップ8008を行わずに、常にステップ8009を実行しても良い。
このように第2の実施形態の情報処理装置20は、第1の実施形態の情報処理装置10と同様の効果を得ることができる。
つまり、第2の実施形態の情報処理装置20は、ロック取得時間を削減できる効果を得ることができる。
その理由は、第2の情報処理装置20は、ロック取得中のプロセスのプロセス空間400を常駐設定する。そのため、ロック取得中のプロセスは、ページアウトに基づくミッシングページが発生を抑えることができる。
また、本実施形態の情報処理装置20は、メインメモリの容量不足の発生を抑える効果を得ることができる。
その理由は、情報処理装置20は、次に監視までにロックを取得しないプロセスのプロセス空間400をページアウトするためである。
さらに、本実施形態の情報処理装置20は、スループットの低下を抑える効果を得ることができる。
その理由は、情報処理装置20は、処理プロセス100ではなく、監視プロセス300が必要と判定した場合にプロセス空間400を常駐させる。そのため、処理プロセス100は、プロセス空間400の常駐の判断や設定の処理を必要としないためである。
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。