JP5915235B2 - 情報処理装置、及び、情報処理方法 - Google Patents

情報処理装置、及び、情報処理方法 Download PDF

Info

Publication number
JP5915235B2
JP5915235B2 JP2012030977A JP2012030977A JP5915235B2 JP 5915235 B2 JP5915235 B2 JP 5915235B2 JP 2012030977 A JP2012030977 A JP 2012030977A JP 2012030977 A JP2012030977 A JP 2012030977A JP 5915235 B2 JP5915235 B2 JP 5915235B2
Authority
JP
Japan
Prior art keywords
lock
information
space
unit
page
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2012030977A
Other languages
English (en)
Other versions
JP2013168025A (ja
Inventor
愛子 熊谷
愛子 熊谷
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
NEC Corp
Original Assignee
NEC Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by NEC Corp filed Critical NEC Corp
Priority to JP2012030977A priority Critical patent/JP5915235B2/ja
Publication of JP2013168025A publication Critical patent/JP2013168025A/ja
Application granted granted Critical
Publication of JP5915235B2 publication Critical patent/JP5915235B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Memory System Of A Hierarchy Structure (AREA)

Description

本発明は、情報処理に関し、特に、資源(リソース)の排他的な管理に関する。
情報処理装置では、複数の処理(例えば、プロセス)が並列に動作する。このような情報処理装置のシステムは、マルチプロセスシステムと言われる。マルチプロセスシステムにおいて、複数の処理(プロセス)で共有するシステムの資源(メモリや装置(デバイス)などの資源(リソース))の利用効率や情報の整合性を保つため、リソースのアクセス制限として排他制御(ロック)が用いられる。(例えば、特許文献1参照)
例えば、1つのプロセスがあるデバイスを使用する場合、そのプロセスは、他のプロセスがそのデバイスにアクセスできないように、デバイスにアクセス制限(排他制御)を設定する。デバイスの使用が終了すると、そのプロセスは、デバイスのアクセス制限を解除する。
デバイスがアクセス制限(排他状態)されている場合、他のプロセスは、そのデバイスにアクセスできない。そのため、各プロセスは、使用したいデバイスがアクセス制限されているか否かを確認し、アクセス制限されている場合、アクセス制限が解除(解放)されるまで、デバイスへのアクセスを待つ。
なお、プロセスが、リソースにアクセス制限を設定することを、「ロックする」、「ロック取得」、又は、「ロックを確保する」と言う。また、プロセスがアクセス制限を解除することを、「アンロックする」、「ロック解放」、又は「ロック解除」と言う。
また、情報処理装置の各処理(プロセス)が、情報処理装置の物理的なメインメモリ(主記憶)の容量に制限されないで処理を実行するため、一般的な情報処理装置を管理するシステム(例えば、OS(Operation System))は、メモリの管理として仮想メモリを用いる。
例えば、OSは、各プロセスがアクセスする範囲(プロセス空間)を外部の補助記憶装置に割り当てる。そして、プロセスが、実際にプロセス空間にアクセスするとき、OSは、MMU(Memory Management Unit)などを用いて、アクセスする範囲のプロセス空間をメインメモリに読み込んで、プロセスに提供する。プロセスがプロセス空間へのアクセスを終了すると、OSは、メインメモリのプロセス空間を、補助記憶装置に退避して、プロセス空間に割り当てたメインメモリの領域を解放する。
また、OSがプロセス空間をメインメモリに割り当てようとしたときにメインメモリに割り当てる空き領域がない場合、OSは、メインメモリに割り当てているいずれかのプロセス空間の領域を補助記憶装置に退避し、メインメモリの領域を開放する。(例えば、特許文献2参照。また、仮想メモリではなくキャッシュメモリの技術であるが、関連する技術が特許文献3に記載されている。)
なお、メインメモリから補助記憶装置にデータを退避することを、「ページアウト」又は「スワップアウト」と言う。プロセス空間が、ページアウトされ、メインメモリにないことを、ミッシング(消失)と言う。
また、補助記憶装置からメインメモリにプロセス空間を読み出すことを、「ページイン」又は「スワップイン」と言う。
このような仮想メモリを用い、プロセスは、メインメモリの容量に制限されない処理を実行する。
特開2011−204064 特開2004−227188 特開2010−102413
ページアウトされたプロセス空間にアクセスするために、プロセスは、プロセス空間が補助記憶装置からメインメモリに読み出される(ページイン)まで待つことが必要である。このように、ページアウトされたプロセス空間へのアクセスは、メインメモリにあるプロセス空間へのアクセスに比べ、多くの時間を必要とする。
そのため、ロック取得中のプロセスが使用するプロセス空間が、ページアウトされると、そのプロセスは、処理時間が長くなる。その結果、ロックを取得したプロセスのロックを取得している時間が長くなってしまう問題点がある。(ロック取得時間が長くなってしまうことを、「ロックネック」と言う。)
ロック取得時間を長くしないためには、ロック中のプロセスがアクセスするプロセス空間は、ページアウトしないことが必要である。
例えば、各プロセスが、使用するプロセス空間に、メインメモリに常駐する属性を設定(常駐設定)すると、プロセス空間のページアウトは、発生しない。
しかし、動作しているすべてのプロセスのプロセス空間を常駐させると、メインメモリの容量が不足してしまう。(メインメモリの容量の不足を、「メモリネック」と言う。)
そこで、プロセスがリソースのロックを取得する前に、使用するプロセス空間を常駐に設定することが行われる。しかし、この場合でもロックを取得して動作するプロセスが多くなると、常駐設定するプロセス空間が多くなり、メモリネックが発生する。さらに、各プロセスは、ロックの取得と解除のたびに、プロセス空間の常駐の設定及び解除の設定の処理が必要となり、プロセスの処理時間が、長くなる。そのため、情報処理装置を含む処理システムのスループットが低下する問題点があった。
上述の特許文献1に記載のマルチプロセッサシステムは、平均キャッシュミス回数などを基に、排他処理専用プロセッサ又は汎用プロセッサへの割り当てを決めるものである。そのため、特許文献1に記載のマルチプロセッサシステムは、プロセス割り当て後のページアウトについては対応できない。そのため、特許文献1に記載のマルチプロセッサシステムは、汎用プロセッサに割り当て後に発生する、ロック取得中のページアウトに基づくロックネックの問題点があった。
特許文献2に記載のジョブ管理装置は、メモリ量に基づいてスワップアウト・スワップインするジョブを決めるものである。そのため、特許文献2に記載のジョブ管理装置は、ロック取得中でもメモリ量が所定の条件を満たさない限りスワップアウトが発生するため、ロックネックの問題点があった。
特許文献3に記載の技術は、ストレージ制御装置のキャッシュメモリの割り当て容量を変更するものであり、ロックに連動した上記の問題点を解決するものではない。
本発明の目的は、上記問題点を解決し、メモリネックを発生しないでロック時間を短縮する情報処理装置、及び、情報処理方法を提供することにある。
本発明の情報処理装置は、所定の時間後までにリソースを排他的に確保する第1のプロセスが使用する第1のプロセス空間の容量を求めるページインサイズ計算手段と、前記第1のプロセス空間をページインするためのメモリ領域がない場合、前記所定の時間後までにリソースを排他的に確保しない第2のプロセスからページアウトする第2のプロセス空間を決定するページアウト空間決定手段と、前記第1のプロセス空間からページインして常駐設定する第3のプロセス空間を決定する常駐設定空間決定手段とを含む監視部を含む。
本発明の情報処理方法は、情報処理装置において、所定の時間後までにリソースを排他的に確保する第1のプロセスが使用する第1のプロセス空間の容量を求め、前記第1のプロセス空間をページインするためのメモリ領域がない場合、前記所定の時間後までにリソースを排他的に確保しない第2のプロセスからページアウトする第2のプロセス空間を決定し、前記第1のプロセス空間からページインして常駐設定する第3のプロセス空間を決定する。
本発明のプログラムは、所定の時間後までにリソースを排他的に確保する第1のプロセスが使用する第1のプロセス空間の容量を求める処理と、前記第1のプロセス空間をページインするためのメモリ領域がない場合、前記所定の時間後までにリソースを排他的に確保しない第2のプロセスからページアウトする第2のプロセス空間を決定する処理と、第1のプロセス空間からページインして常駐設定する第3のプロセス空間を決定する処理とをコンピュータに実行させる。
本発明によれば、メモリネックを発生しないで、ロック時間を短縮することができる。
図1は、本発明における第1の実施形態に係る情報処理装置の構成の一例を示すブロック図である。 図2は、第1の実施形態の監視動作の一例を示すフローチャートである。 図3は、第1の実施形態に係る情報処理装置の別の構成の一例を示すブロック図である。 図4は、第2の実施形態に係る情報処理装置の構成の一例を示すブロック図である。 図5は、ロック情報の一例を示す図である。 図6は、セマフォの一例を示す図である。 図7は、第2の実施形態に係る監視部の構成の一例を示すブロック図である。 図8は、第2の実施形態に係るロック取得動作の一例を示すフローチャートである。 図9は、第2の実施形態に係るロック情報の設定の動作の一例を示すフローチャートである。 図10は、第2の実施形態に係るロック監視動作の一例を示すフローチャートである。 図11は、第2の実施形態に係るページインサイズの計算動作の一例を示すフローチャートである。 図12は、第2の実施形態に係るページアウト空間を決定する動作の一例を示すフローチャートである。 図13は、第2の実施形態に係るページイン動作の一例を示すフローチャートである。 図14は、第2の実施形態に係るロック解除動作の一例を示すフローチャートである。
次に、本発明の実施形態について図面を参照して説明する。
なお、各図面は、本発明の実施形態を説明するものである。そのため、本発明は、各図面の記載に限られるわけではない。また、各図面の同様の構成には、同じ番号を付し、その繰り返しの説明は、省略する場合がある。
なお、情報処理装置においてリソースを排他的に管理(ロック)する処理の単位は、いろいろなレベルで行われ、呼称もいろいろとある(例えば、プロセス、スレッド、タスク、ジョブ)。本発明の実施形態では、特に制限はない。以下の説明では、処理の単位の一例として「プロセス」を用いて説明する。
(第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の常駐の判断や設定の処理を必要としないためである。
以上、実施形態を参照して本願発明を説明したが、本願発明は上記実施形態に限定されるものではない。本願発明の構成や詳細には、本願発明のスコープ内で当業者が理解し得る様々な変更をすることができる。
10 情報処理装置
20 情報処理装置
60 情報処理装置
100 処理プロセス
110 ロック登録部
120 ロック取得部
130 ロック開始部
140 ロック解除部
150 積算部
160 常駐解除部
170 ミッシング解決部
180 カウント部
200 ロック関連情報格納部
210 ロック情報格納部
220 セマフォ
300 監視プロセス
310 監視部
311 ページインサイズ計算部
312 ページアウト空間決定部
313 常駐設定空間決定部
320 ページアウト部
330 常駐設定部
400 プロセス空間
610 CPU
620 ROM
630 RAM
640 IO−IF
650 記憶装置
660 キーボード
670 マウス
680 ディスプレイ
690 記憶媒体
710 ロック取得プロセス情報
720 ロック待ちプロセス情報
720a ロック待ちプロセス情報
720b ロック待ちプロセス情報

Claims (8)

  1. 所定の時間後までに資源を排他的に確保する第1のプロセスが使用する第1のプロセス空間の容量を求めるページインサイズ計算手段と、
    前記第1のプロセス空間をページインするためのメモリ領域がない場合、前記所定の時間後までに資源を排他的に確保しない第2のプロセスのプロセス空間からページアウトする第2のプロセス空間を決定するページアウト空間決定手段と、
    前記第1のプロセス空間からページインして常駐設定する第3のプロセス空間を決定する常駐設定空間決定手段と
    を含む監視部を含む情報処理装置。
  2. 前記ページアウト空間決定手段が決定した第2のプロセス空間をページアウトするページアウト手段と、
    前記常駐設定空間決定手段が決定した第3のプロセス空間をページインする常駐設定手段とを含む
    請求項1に記載の情報処理装置。
  3. 前記資源を排他的に使用するプロセスと、前記資源を排他的に使用するために待ち状態であるプロセスとの情報を保存する排他機構手段と、
    前記資源の排他的使用状態の情報を示すロック情報を格納するロック情報格納手段とを含む
    ロック関連情報格納手段を含み、
    前記第1のプロセス及び第2のプロセスが、前記待ち状態のプロセスである
    請求項1又は請求項2に記載の情報処理装置。
  4. 前記第1のプロセス及び第2のプロセスが、
    前記ロック情報格納手段に資源を排他的に使用するための情報を登録するロック登録手段と、
    前記排他機構手段に排他情報を設定するロック取得手段と、
    前記ロック取得手段からの指示を基に、前記ロック情報格納手段の情報に前記資源の排他的使用の開始に関する情報を設定するロック開始手段と、
    前記資源の排他的使用を解除するロック解除手段と、
    前記ロック解除手段から指示を受けて前記ロック情報格納手段の情報に前記資源の解除に関する情報を設定する積算手段と、
    前記ロック解除手段から指示されて、プロセス空間の常駐設定を解除する常駐解除手段と、
    とを含む情報を処理する処理プロセスである
    請求項3に記載の情報処理装置。
  5. 前記処理プロセスが
    前記プロセス空間の消失を解決するミッシング解決手段と、
    前記ミッシング解決手段からの指示を基に前記ロック情報格納手段の消失に関する情報を更新するカウント手段と
    を含む
    請求項4に記載の情報処理装置。
  6. 前記ロック情報格納手段が、
    前記資源のアドレスであるロックアドレスと、前記処理プロセスのプロセス番号と、前記処理プロセスがアクセスするプロセス空間のアドレスと、前記資源が排他的に確保された回数であるロックの回数と、前記プロセス空間の消失の発生回数であるミッシング発生回数と、前記資源が排他的に確保された時間であるロック取得時間と、前記資源を排他的に確保した時刻であるロック取得時刻とを含む
    請求項4又は請求項5に記載の情報処理装置。
  7. 情報処理装置において、
    所定の時間後までに資源を排他的に確保する第1のプロセスが使用する第1のプロセス空間の容量を求め、
    前記第1のプロセス空間をページインするためのメモリ領域がない場合、前記所定の時間後までに資源を排他的に確保しない第2のプロセスのプロセス空間からページアウトする第2のプロセス空間を決定し、
    前記第1のプロセス空間からページインして常駐設定する第3のプロセス空間を決定する
    情報処理方法。
  8. 所定の時間後までに資源を排他的に確保する第1のプロセスが使用する第1のプロセス空間の容量を求める処理と、
    前記第1のプロセス空間をページインするためのメモリ領域がない場合、前記所定の時間後までに資源を排他的に確保しない第2のプロセスのプロセス空間からページアウトする第2のプロセス空間を決定する処理と、
    第1のプロセス空間からページインして常駐設定する第3のプロセス空間を決定する処理と
    をコンピュータに実行させるプログラム。
JP2012030977A 2012-02-15 2012-02-15 情報処理装置、及び、情報処理方法 Expired - Fee Related JP5915235B2 (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2012030977A JP5915235B2 (ja) 2012-02-15 2012-02-15 情報処理装置、及び、情報処理方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2012030977A JP5915235B2 (ja) 2012-02-15 2012-02-15 情報処理装置、及び、情報処理方法

Publications (2)

Publication Number Publication Date
JP2013168025A JP2013168025A (ja) 2013-08-29
JP5915235B2 true JP5915235B2 (ja) 2016-05-11

Family

ID=49178379

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2012030977A Expired - Fee Related JP5915235B2 (ja) 2012-02-15 2012-02-15 情報処理装置、及び、情報処理方法

Country Status (1)

Country Link
JP (1) JP5915235B2 (ja)

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0340140A (ja) * 1989-07-07 1991-02-20 Nec Corp 共有資源排他制御方式
JPH04223533A (ja) * 1990-12-26 1992-08-13 Nec Corp 共有資源排他制御システム
US5493663A (en) * 1992-04-22 1996-02-20 International Business Machines Corporation Method and apparatus for predetermining pages for swapping from physical memory in accordance with the number of accesses
JP5419500B2 (ja) * 2009-03-12 2014-02-19 キヤノン株式会社 プログラムおよび情報処理装置

Also Published As

Publication number Publication date
JP2013168025A (ja) 2013-08-29

Similar Documents

Publication Publication Date Title
JP6944983B2 (ja) ハイブリッドメモリ管理
US9164923B2 (en) Dynamic pinning of virtual pages shared between different type processors of a heterogeneous computing platform
WO2015044658A1 (en) Data processing systems
US9465670B2 (en) Generational thread scheduler using reservations for fair scheduling
US20170344398A1 (en) Accelerator control device, accelerator control method, and program storage medium
US20130097382A1 (en) Multi-core processor system, computer product, and control method
JP4767361B2 (ja) キャッシュメモリ装置、キャッシュメモリシステム、プロセッサシステム
US20130298136A1 (en) Multiprocessor system
US10108456B2 (en) Accelerated atomic resource allocation on a multiprocessor platform
JP2010128664A (ja) マルチプロセッサシステム、競合回避プログラム及び競合回避方法
JP2007316710A (ja) マルチプロセッサシステム、ワークロード管理方法
JP6088527B2 (ja) トランザクショナルミドルウェアマシン環境においてセルフチューニングロックメカニズムをサポートするためのシステムおよび方法
US20130132708A1 (en) Multi-core processor system, computer product, and control method
JP5915235B2 (ja) 情報処理装置、及び、情報処理方法
US9552170B2 (en) Memory managing apparatus and image processing apparatus
JP2011028610A (ja) プロセッサ及び演算処理方法
JP4862770B2 (ja) 仮想計算機システムにおけるメモリ管理方式及びその方法、およびプログラム
Miller et al. KVCG: A heterogeneous key-value store for skewed workloads
US9367326B2 (en) Multiprocessor system and task allocation method
US20220138010A1 (en) Quiescent state-based reclaiming strategy for progressive chunked queue
JP5708861B2 (ja) マルチプロセッサシステム、制御方法、および制御プログラム
WO2011114495A1 (ja) マルチコアプロセッサシステム、スレッド切り替え制御方法、およびスレッド切り替え制御プログラム
JP5890194B2 (ja) 情報処理装置、及び、情報処理方法
JP6358330B2 (ja) 情報処理装置、情報処理システム、メモリ管理方法およびメモリ管理プログラム
JP2010026729A (ja) プロセス間通信装置、プロセス間通信方法

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20150119

A977 Report on retrieval

Free format text: JAPANESE INTERMEDIATE CODE: A971007

Effective date: 20151007

A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20151201

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20160112

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20160308

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20160321

R150 Certificate of patent or registration of utility model

Ref document number: 5915235

Country of ref document: JP

Free format text: JAPANESE INTERMEDIATE CODE: R150

LAPS Cancellation because of no payment of annual fees