(57)【要約】【課題】冗長的なメモリスワッピングを可能な限り回避することのできる仕組みを提供すること。【解決手段】一次記憶装置から二次記憶装置へスワップアウトされたデータに、当該データのスワップ元アドレスをマッピングするマッピングデータを取得するデータ取得部と、前記二次記憶装置上のスワップ済みデータセットに含まれる複数のスワップ済みデータについて前記一次記憶装置上のスワップ対象データとの同一性を判定し、同一のスワップ済みデータが存在する場合に、前記スワップ対象データを前記二次記憶装置へスワップアウトすることなく、前記マッピングデータにおいて前記スワップ対象データのアドレスを前記同一のスワップ済みデータにマッピングし、前記スワップ対象データを前記一次記憶装置から削除する、スワップ制御部と、を備える情報処理装置を提供する。【選択図】図１０
2015111370.tif 000002
【特許請求の範囲】
【請求項１】
一次記憶装置から二次記憶装置へスワップアウトされたデータに、当該データのスワップ元アドレスをマッピングするマッピングデータを取得するデータ取得部と、
前記二次記憶装置上のスワップ済みデータセットに含まれる複数のスワップ済みデータについて前記一次記憶装置上のスワップ対象データとの同一性を判定し、同一のスワップ済みデータが存在する場合に、前記スワップ対象データを前記二次記憶装置へスワップアウトすることなく、前記マッピングデータにおいて前記スワップ対象データのアドレスを前記同一のスワップ済みデータにマッピングし、前記スワップ対象データを前記一次記憶装置から削除する、スワップ制御部と、
を備える情報処理装置。
【請求項２】
前記データ取得部は、前記複数のスワップ済みデータの各々のハッシュ値を示すハッシュデータをさらに取得し、
前記スワップ制御部は、前記ハッシュデータにより示される前記複数のスワップ済みデータの各々のハッシュ値と前記スワップ対象データのハッシュ値とを比較することにより、各スワップ済みデータが前記スワップ対象データと同一であるかを判定する、
請求項１に記載の情報処理装置。
【請求項３】
前記スワップ制御部は、前記スワップ対象データのハッシュ値と同一のハッシュ値を有するスワップ済みデータについて、さらに前記スワップ対象データとのデータの同一性を検査することにより、各スワップ済みデータが前記スワップ対象データと同一であるかを判定する、請求項２に記載の情報処理装置。
【請求項４】
前記スワップ制御部は、前記スワップ対象データのハッシュ値と同一のハッシュ値を有するスワップ済みデータは前記スワップ対象データと同一であると見なす、請求項２に記載の情報処理装置。
【請求項５】
前記スワップ制御部は、前記マッピングデータにおいて異なるスワップ元アドレスにマッピングされた前記複数のスワップ済みデータの各々が、前記スワップ対象データと同一であるかを判定する、請求項１に記載の情報処理装置。
【請求項６】
前記スワップ制御部は、同一のスワップ元アドレスから異なる時点でスワップアウトされた前記複数のスワップ済みデータの各々が、前記スワップ対象データと同一であるかを判定する、請求項１に記載の情報処理装置。
【請求項７】
前記スワップ制御部は、同一のデータが前記スワップ済みデータセットに含まれる前記一次記憶装置上のデータを、前記スワップ対象データとして優先的に選択する、請求項１に記載の情報処理装置。
【請求項８】
前記スワップ制御部は、前記一次記憶装置上のあるアドレスに存在するデータであって、他のアドレスに存在する他のデータと同一であるデータを、前記スワップ対象データとして優先的に選択する、請求項１に記載の情報処理装置。
【請求項９】
前記データ取得部は、参照頻度の低い１つ以上のデータのハッシュ値を示すリストをさらに取得し、
前記スワップ制御部は、前記リストにより示されるハッシュ値と同一のハッシュ値を有するデータを、前記スワップ対象データとして優先的に選択する、
請求項１に記載の情報処理装置。
【請求項１０】
前記スワップ制御部は、前記情報処理装置の負荷をモニタリングし、前記情報処理装置の前記負荷が閾値よりも低い時点でスワップ動作を実行する、請求項１に記載の情報処理装置。
【請求項１１】
前記マッピングデータは、前記二次記憶装置上のスワップ済みデータへの参照情報に前記スワップ元アドレスを関連付けることにより、当該スワップ済みデータに当該スワップ元アドレスをマッピングする、請求項１に記載の情報処理装置。
【請求項１２】
前記スワップ元アドレスは、仮想アドレスである、請求項１に記載の情報処理装置。
【請求項１３】
前記情報処理装置は、前記一次記憶装置及び前記二次記憶装置をさらに備え、
前記二次記憶装置は、１つ以上の用途に従って予め処理を実行した際にメモリ空間に書き込まれたデータを収集することにより形成される前記スワップ済みデータセットを記憶し、
前記スワップ済みデータセットは、互いに同一のデータを含まない、
請求項１に記載の情報処理装置。
【請求項１４】
前記スワップ制御部は、前記スワップ済みデータセットのデータサイズをモニタリングし、前記データサイズが閾値を下回っている間、前記スワップ済みデータセットに含まれるデータを削除しない、請求項１に記載の情報処理装置。
【請求項１５】
一次記憶装置から二次記憶装置へスワップアウトされたデータに、当該データのスワップ元アドレスをマッピングするマッピングデータを取得することと、
プロセッサにおいて、前記二次記憶装置上のスワップ済みデータセットに含まれる複数のスワップ済みデータについて前記一次記憶装置上のスワップ対象データとの同一性を判定することと、
同一のスワップ済みデータが存在する場合に、前記スワップ対象データを前記二次記憶装置へスワップアウトすることなく、前記マッピングデータにおいて前記スワップ対象データのアドレスを前記同一のスワップ済みデータにマッピングすることと、
前記スワップ対象データを前記一次記憶装置から削除することと、
を含むスワップ制御方法。
【請求項１６】
情報処理装置を制御する処理回路を、
一次記憶装置から二次記憶装置へスワップアウトされたデータに、当該データのスワップ元アドレスをマッピングするマッピングデータを取得するデータ取得部と、
前記二次記憶装置上のスワップ済みデータセットに含まれる複数のスワップ済みデータについて前記一次記憶装置上のスワップ対象データとの同一性を判定し、同一のスワップ済みデータが存在する場合に、前記スワップ対象データを前記二次記憶装置へスワップアウトすることなく、前記マッピングデータにおいて前記スワップ対象データのアドレスを前記同一のスワップ済みデータにマッピングし、前記スワップ対象データを前記一次記憶装置から削除する、スワップ制御部と、
として機能させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本開示は、情報処理装置、スワップ制御方法及びプログラムに関する。
【背景技術】
【０００２】
仮想記憶は、物理的なメモリ空間をソフトウェアのプロセスから隠蔽し、ソフトウェアにとって扱いやすいように仮想化されたメモリ空間を提供するメモリ制御技術である。仮想記憶の主要な役割の１つは、コンピュータの一次記憶装置の物理的なメモリサイズに制約されない、より大きいメモリ空間を仮想的にソフトウェアに提供することである。一次記憶装置のメモリサイズを上回る量のデータを保持することが求められる場合、メモリスワッピングが実行される。メモリスワッピングは、一次記憶装置上のデータを一時的に二次記憶装置へ書き込み（即ち、スワップアウトし）、当該データを一次記憶装置から削除することにより、一次記憶装置上の物理的なメモリ空間を他のデータのために解放する仕組みである。スワップアウトされたデータがソフトウェアのプロセスにより必要とされる場合、当該データは、二次記憶装置から一次記憶装置へ読み出される（即ち、スワップインされる）。仮想記憶のこうしたメモリスワッピングの仕組みによって、一次記憶装置のメモリサイズの制約を受けることなく、多数のアプリケーションをコンピュータ上で同時に起動したままにすることが可能となる。
【０００３】
しかし、メモリスワッピングが動作すると、二次記憶装置からの／へのデータの読み書き（Ｉ／Ｏ）及び仮想メモリ空間のページング手続の負荷が発生する。また、ある種類のメモリデバイス（例えば、ＮＡＮＤ型フラッシュメモリ）の製品寿命は、書き込み回数又は書き込みデータ量が増えるほど短くなる。よって、メモリスワッピングが頻繁に動作することは、好ましくない。そこで、特許文献１は、一次記憶装置上のあるアドレス範囲に存在したデータが二次記憶装置へ既にスワップアウトされている場合に、当該アドレス範囲に現在存在するスワップ対象データと二次記憶装置上の最新のスワップ済みのデータとの間の相違の有無を判定し、相違が無ければスワップアウトをスキップさせる手法を提案している。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００９−２０７７６号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、特許文献１により提案された手法では、別個のアドレス範囲に存在するデータが同一である場合に、冗長的なスワップアウトが行われる可能性がある。また、１つのアドレス範囲から複数回スワップアウトされたデータのうちの最新でないスワップ済みデータは、スワップアウトをスキップするために利用されない。
【０００６】
従って、既存の手法は、冗長的なメモリスワッピングが実行される可能性を多く残している。本開示に係る技術は、そうした冗長的なメモリスワッピングを可能な限り回避することのできる仕組みを提供することを目的とする。
【課題を解決するための手段】
【０００７】
本開示によれば、一次記憶装置から二次記憶装置へスワップアウトされたデータに、当該データのスワップ元アドレスをマッピングするマッピングデータを取得するデータ取得部と、前記二次記憶装置上のスワップ済みデータセットに含まれる複数のスワップ済みデータについて前記一次記憶装置上のスワップ対象データとの同一性を判定し、同一のスワップ済みデータが存在する場合に、前記スワップ対象データを前記二次記憶装置へスワップアウトすることなく、前記マッピングデータにおいて前記スワップ対象データのアドレスを前記同一のスワップ済みデータにマッピングし、前記スワップ対象データを前記一次記憶装置から削除する、スワップ制御部と、を備える情報処理装置が提供される。
【０００８】
また、本開示によれば、一次記憶装置から二次記憶装置へスワップアウトされたデータに、当該データのスワップ元アドレスをマッピングするマッピングデータを取得することと、プロセッサにおいて、前記二次記憶装置上のスワップ済みデータセットに含まれる複数のスワップ済みデータについて前記一次記憶装置上のスワップ対象データとの同一性を判定することと、同一のスワップ済みデータが存在する場合に、前記スワップ対象データを前記二次記憶装置へスワップアウトすることなく、前記マッピングデータにおいて前記スワップ対象データのアドレスを前記同一のスワップ済みデータにマッピングすることと、前記スワップ対象データを前記一次記憶装置から削除することと、を含むスワップ制御方法が提供される。
【０００９】
また、本開示によれば、情報処理装置を制御する処理回路を、一次記憶装置から二次記憶装置へスワップアウトされたデータに、当該データのスワップ元アドレスをマッピングするマッピングデータを取得するデータ取得部と、前記二次記憶装置上のスワップ済みデータセットに含まれる複数のスワップ済みデータについて前記一次記憶装置上のスワップ対象データとの同一性を判定し、同一のスワップ済みデータが存在する場合に、前記スワップ対象データを前記二次記憶装置へスワップアウトすることなく、前記マッピングデータにおいて前記スワップ対象データのアドレスを前記同一のスワップ済みデータにマッピングし、前記スワップ対象データを前記一次記憶装置から削除する、スワップ制御部と、として機能させるためのプログラムが提供される。
【発明の効果】
【００１０】
本開示に係る技術によれば、冗長的なメモリスワッピングが実行される可能性を低減することができる。
なお、上記の効果は必ずしも限定的なものではなく、上記の効果と共に、又は上記の効果に代えて、本明細書に示されたいずれかの効果、又は本明細書から把握され得る他の効果が奏されてもよい。
【図面の簡単な説明】
【００１１】
【図１】メモリスワッピング機能を有しないメモリ制御技術の動作の一例について説明するための説明図である。
【図２】メモリスワッピング機能を有するメモリ制御技術の動作の一例について説明するための説明図である。
【図３】スワップアウトをスキップさせる既存の手法の動作の一例について説明するための説明図である。
【図４】一実施形態に係るコンピュータの物理的な構成の一例を示すブロック図である。
【図５】一実施形態に係るスワップ制御機能の論理的な構成の一例を示すブロック図である。
【図６】マッピングデータの構成の一例を示す説明図である。
【図７】ハッシュデータの構成の一例を示す説明図である。
【図８】一実施形態に係るスワップ制御処理の流れの一例を示すフローチャートである。
【図９Ａ】図８に示したスワップアウト処理の詳細な流れの第１の例を示すフローチャートである。
【図９Ｂ】図８に示したスワップアウト処理の詳細な流れの第２の例を示すフローチャートである。
【図１０】一実施形態において実現されるメモリ制御技術の動作の第１の例について説明するための説明図である。
【図１１】一実施形態において実現されるメモリ制御技術の動作の第２の例について説明するための説明図である。
【図１２】一実施形態において実現されるメモリ制御技術の動作の第３の例について説明するための説明図である。
【発明を実施するための形態】
【００１２】
以下に添付図面を参照しながら、本開示の好適な実施の形態について詳細に説明する。なお、本明細書及び図面において、実質的に同一の機能構成を有する構成要素については、同一の符号を付することにより重複説明を省略する。
【００１３】
また、以下の順序で説明を行う。
１．課題の説明
２．装置の構成例
２−１．物理的な構成
２−２．論理的な構成
３．処理の流れ
３−１．スワップ制御処理
３−２．スワップアウト処理
４．スワップ動作の例
５．まとめ
【００１４】
＜１．課題の説明＞
図１は、メモリスワッピング機能を有しないメモリ制御技術の動作の一例について説明するための説明図である。図１の左には、コンピュータの物理メモリ空間ＰＭ１、及び物理メモリ空間ＰＭ１をソフトウェアのプロセスから隠蔽するために仮想化された仮想メモリ空間ＶＭ１が示されている。物理メモリ空間ＰＭ１は、一次記憶装置の物理的なメモリ空間である。仮想メモリ空間ＶＭ１は、ここでは、一例として、ページング方式で実装されているものとする。仮想メモリ空間ＶＭ１は、仮想アドレスを用いて区分けされる。仮想メモリ空間ＶＭ１と物理メモリ空間ＰＭ１との間の関連付けはページと呼ばれる単位で管理され、各ページは固有の仮想アドレス範囲を有する。仮想メモリ空間ＶＭ１内の各ページの仮想アドレス範囲が物理メモリ空間ＰＭ１内のどの物理アドレス範囲に関連付けられるかは、通常、コンピュータ内のＭＭＵ（Memory  Management  Unit）が保持するページテーブルにより定義される。図１の例では、仮想メモリ空間ＶＭ１は、複数のアドレス範囲Ａ１１〜Ａ１８を有する。アドレス範囲Ａ１１〜Ａ１４は、プロセスＰＲ１に割り当てられている。プロセスＰＲ１のデータは、アドレス範囲Ａ１１〜Ａ１４（に対応する物理メモリ空間ＰＭ１内の場所）に記憶される。例えば、アドレス範囲Ａ１１、Ａ１２、Ａ１３及びＡ１４は、それぞれデータＤ１１、Ｄ１２、Ｄ１３及びＤ１４を含む。アドレス範囲Ａ１５〜Ａ１８は、プロセスＰＲ２に割り当てられている。プロセスＰＲ２のデータは、アドレス範囲Ａ１５〜Ａ１８（に対応する物理メモリ空間ＰＭ１内の場所）に記憶される。例えば、アドレス範囲Ａ１５、Ａ１６、Ａ１７及びＡ１８は、それぞれデータＤ２１、Ｄ２１、Ｄ２１及びＤ２２を含む。物理メモリ空間ＰＭ１には、十分な空き領域が残っていない。
【００１５】
上述した状況において、プロセスＰＲ１が自身の仮想メモリ領域にアドレス範囲を追加することを要求したものとする（ステップＳ１）。すると、物理メモリ空間ＰＭ１に空き領域が残っていないことから、例えばＯＳは、図１の右に示したように、プロセスＰＲ２を終了させ、結果として解放されるアドレス範囲Ａ１５をプロセスＰＲ１に追加的に割当てる。しかし、このようなメモリ制御が行われるとすれば、アプリケーションの安全な動作が保証されない。
【００１６】
図２は、メモリスワッピング機能を有するメモリ制御技術の動作の一例について説明するための説明図である。図２の左には、仮想メモリ空間ＶＭ１が再び示されている。図１の例と同様に、アドレス範囲Ａ１１〜Ａ１４は、プロセスＰＲ１に割り当てられている。アドレス範囲Ａ１５〜Ａ１８は、プロセスＰＲ２に割り当てられている。そして、物理メモリ空間ＰＭ１に十分な空き領域が残っていない状況において、プロセスＰＲ１が自身の仮想メモリ領域にアドレス範囲を追加することを要求したものとする（ステップＳ１）。コンピュータがメモリスワッピング機能を有する場合、例えば、アドレス範囲Ａ１５〜Ａ１８に記憶されていたデータは、一時的に二次記憶装置のスワップ領域ＳＭ１へ書き込まれる。このような二次記憶装置のスワップ領域への書き込み動作を、スワップアウトという。図２の例では、アドレス空間Ａ１５内のデータＤ２１、アドレス空間Ａ１６内のデータＤ２１、アドレス空間Ａ１７内のデータＤ２１及びアドレス空間Ａ１８内のデータＤ２２が、スワップ領域ＳＭ１へスワップアウトされている。そして、これらスワップアウト済みのデータが仮想メモリ空間ＶＭ１から削除されると（ステップＳ２）、解放された例えばアドレス空間Ａ１５が、プロセスＰＲ１に追加的に割当てられ得る。スワップアウトされたデータがプロセスＰＲ２により必要とされる場合、当該データは、二次記憶装置上のスワップ領域ＳＭ１から一次記憶装置へ読み出され得る。スワップ領域から一次記憶装置への読み出し動作を、スワップインという。
【００１７】
このようなメモリスワッピングが行われるとすれば、アプリケーションが突然終了してしまうような事態は回避される。また、一次記憶装置の物理的なメモリの構成に制約されることなく、個々のアプリケーションに柔軟にメモリ領域を割り当てることができる。しかし、メモリスワッピングが頻繁に動作すると、スワップ領域へのデータの書き込み及びスワップ領域からのデータの読み出しが、コンピュータにとっての負荷となる。仮想メモリ空間のページング手続もまた、負荷となり得る。これら負荷は、処理遅延を生じさせ、最悪の場合にはコンピュータのフリーズなどの障害を引き起こしかねない。また、ある種類のメモリデバイス（例えば、ＮＡＮＤ型フラッシュメモリ）の製品寿命は、書き込み回数又は書き込みデータ量が増えるほど短くなる。メモリスワッピングが頻繁に動作することは、こうした様々な悪影響を伴う。
【００１８】
図３は、特許文献１により提案された、スワップアウトをスキップさせる手法の動作の一例について説明するための説明図である。図３の左上には、アドレス範囲Ａ２５〜Ａ２８を含む仮想メモリ空間ＶＭ２が部分的に示されている。アドレス範囲Ａ２５、Ａ２６、Ａ２７及びＡ２８は、それぞれデータＤ２１、Ｄ２１、Ｄ２１及びＤ２２を含んでいたが、これらデータは既に二次記憶装置上のスワップ領域ＳＭ２へスワップアウトされている。その後、これらスワップ済みデータは、スワップ領域ＳＭ２からアドレス範囲Ａ２５〜Ａ２８へスワップインされる（ステップＳ３）。スワップインされたデータは、スワップ領域ＳＭ２から削除されることなく残される。さらに、アドレス範囲Ａ２６内のデータがデータＤ２２へ、アドレス範囲Ａ２８内のデータがデータＤ２１へソフトウェアのプロセスによって更新される（ステップＳ４）。その後、スワップアウトの必要性が生じた場合、各アドレス範囲について、当該アドレス範囲に現在存在するデータとスワップ領域ＳＭ２内に残されている対応する最新のスワップ済みのデータとの間の相違の有無が判定される。そして、相違が無いアドレス範囲については、スワップアウトがスキップされる。図３の例では、アドレス範囲Ａ２５及びＡ２７についてスワップアウトがスキップされ、アドレス範囲Ａ２６及びＡ２８についてのみスワップアウトが実行されている（ステップＳ５）。
【００１９】
しかしながら、上述した手法では、例えばアドレス範囲Ａ２５、Ａ２７及びＡ２８は同一のデータを有しているにも関わらず、それらデータについて冗長的にスワップアウトが実行される。また、スワップ領域ＳＭ２内のスワップ済みデータはアドレス範囲ごとに上書きされるため、１つのアドレス範囲から複数回スワップアウトされたデータのうちの最新でないスワップ済みデータは、スワップアウトをスキップするために利用されない。従って、既存の手法は、冗長的なメモリスワッピングが実行される可能性を多く残しており、Ｉ／Ｏ負荷、処理遅延、メモリリソースの効率的利用及び障害回避などの様々な観点で改善の余地を有する。そこで、そうした冗長的なメモリスワッピングを可能な限り回避するための本開示に係る技術の実施形態について、次節より詳細に説明する。
【００２０】
＜２．装置の構成例＞
［２−１．物理的な構成］
図４は、一実施形態に係るコンピュータ１００の物理的な構成の一例を示すブロック図である。コンピュータ１００は、ＰＣ（Personal  Computer）、ワークステーション、スマートフォン、ＰＤＡ（Personal  Digital  Assistant）、デジタルカメラ、コンテンツプレーヤ、デジタル家電機器又はゲーム端末などの任意の種類の装置であってよい。また、本開示に係る技術は、これら種類の装置に搭載される情報処理モジュール（例えば、１つのダイで構成される集積回路モジュール）として実現されてもよい。図４を参照すると、コンピュータ１００は、ＣＰＵ（Central  Processing  Unit）１０１、ＲＯＭ（Read  Only  Memory）１０３、ＲＡＭ（Random  Access  Memory）１０５、システムバス１０７、Ｉ／Ｏコントローラ１０９、ＨＤＤ（Hard  Disk  Drive）１１１、入力デバイス１１３、ディスプレイ１１５及び通信インタフェース１１７を備える。
【００２１】
ＣＰＵ１０１は、コンピュータ１００のＯＳ（Operating  System）及びアプリケーションの動作全般を制御する処理回路である。ＣＰＵ１０１は、プログラムに記述された命令群を実行する１つ以上のコア、キャッシュ、及び仮想記憶を実現するＭＭＵを含み得る。ＣＰＵ１０１によりプログラムが実行されると、当該プログラムのプロセスが起動する。ＭＭＵは、起動したプロセスに仮想メモリ空間内のアドレス範囲を割り当て、割り当てた仮想アドレス範囲とＲＡＭ１０５の物理アドレス範囲との関連付けをページテーブルを用いて管理する。本実施形態において、ＣＰＵ１０１は、後に説明するスワップ制御機能をも動作させる。なお、コンピュータ１００は、ＣＰＵの代わりに、ＭＰＵ（Micro  Processor  Unit）、ＭＣＵ（Micro  Controller  Unit）又はＳｏＣ（System-on-a-Chip）を備えてもよい。
【００２２】
ＲＯＭ１０３は、ＢＩＯＳ（Basic  Input/Output  System）などのファームウェアを記憶する記憶媒体を有する記憶装置である。ＢＩＯＳは、コンピュータ１００の電源が投入された際に最初に実行され、固有のブートシーケンスに従ってコンピュータ１００の初期設定及び必要とされるプログラム（例えば、ＯＳのプログラム）のＨＤＤ１１１からＲＡＭ１０５への読み出しなどを行う。
【００２３】
ＲＡＭ１０５は、ＣＰＵ１０１により実行されるプログラム及び当該プログラムにより使用されるデータを一時的に記憶する記憶媒体を有する一次記憶装置（メインメモリともいう）である。ＲＡＭ１０５は、物理アドレスを用いて区分けされる物理メモリ空間を有する。物理アドレスは、ＲＡＭ１０５上のメモリ領域を１バイト単位で識別する。物理アドレスの長さがＮビットであれば、物理アドレス空間のサイズは２Ｎバイトである。
【００２４】
システムバス１０７は、ＣＰＵ１０１、ＲＯＭ１０３、ＲＡＭ１０５及びＩ／Ｏコントローラ１０９を互いに接続する。
【００２５】
Ｉ／Ｏコントローラ１０９は、ＣＰＵ１０１、ＲＯＭ１０３及びＲＡＭ１０５と様々な周辺デバイスとの間の信号及びデータの入出力を制御するデバイスである。図１の例では、Ｉ／Ｏコントローラ１０９は、システムバス１０７、ＨＤＤ１１１、入力デバイス１１３、ディスプレイ１１５及び通信インタフェース１１７を互いに接続する。
【００２６】
ＨＤＤ１１１は、ＣＰＵ１０１により実行されるプログラム及び当該プログラムにより使用されるデータを半永続的に記憶する記憶媒体を有する二次記憶装置（補助記憶装置ともいう）である。ＨＤＤ１１１は、ＲＡＭ１０５と比較すると、より大きいデータ容量とより低いＩ／Ｏ速度とを有する。ＨＤＤ１１１は、ＲＡＭ１０５からスワップアウトされるデータを記憶するスワップ領域（スワップパーティション又はスワップドライブともいう）を有する。スワップ領域へのデータの書き込み及びスワップ領域からのデータの読み出しは、後に説明するスワップ制御機能により制御される。なお、コンピュータ１００は、ＨＤＤの代わりに、フラッシュメモリ又はＳＳＤ（Solid  State  Drive）などの他の種類の二次記憶装置を備えてもよい。
【００２７】
入力デバイス１１３は、ユーザがコンピュータ１００を操作し又はコンピュータ１００へ情報を入力するために使用されるデバイスである。入力デバイス１１３は、例えば、ディスプレイ１１５の画面へのタッチを検出するタッチパネルを含んでもよい。その代わりに（又はそれに加えて）、入力デバイス１１３は、ボタン、スイッチ、キーパッド又はポインティングデバイスなどのその他の種類のデバイスを含んでもよい。
【００２８】
ディスプレイ１１５は、ＬＣＤ（Liquid  Crystal  Display）、ＯＬＥＤ（Organic  light-Emitting  Diode）ディスプレイ又はＣＲＴ（Cathode  Ray  Tube）などの表示デバイスである。ディスプレイ１１５は、画像を表示する画面と、表示を制御する表示回路とを含み得る。
【００２９】
通信インタフェース１１７は、コンピュータ１００と他のデバイスとの間の通信を仲介するデバイスである。通信インタフェース１１７は、Bluetooth（登録商標）若しくはワイヤレスＵＳＢなどの近距離無線通信方式、ＷＣＤＭＡ、ＷｉＭＡＸ（登録商標）若しくはＬＴＥなどのセルラ通信方式、又は無線ＬＡＮ（Local  Area  Network）方式といった、任意の種類の無線通信方式に従って動作する無線通信インタフェースであってもよい。その代わりに、通信インタフェース１１７は、ＬＡＮインタフェースなどの有線通信インタフェースであってもよい。
【００３０】
上述したコンピュータ１００の構成において、冗長的なメモリスワッピングを回避するためのスワップ制御機能は、ＣＰＵ１０１がスワップ制御機能のためのプログラムを実行することにより動作し得る。スワップ制御機能のためのプログラムは、ＲＯＭ１０３若しくはＨＤＤ１１１の非一時的な媒体（non-transitory  media）により予め記憶されてもよく、又は通信インタフェース１１７を介して外部のストレージ若しくはサーバから動的に取得されてもよい。
【００３１】
［２−２．論理的な構成］
図５は、一実施形態に係るスワップ制御機能１２０の論理的な構成の一例を示すブロック図である。図５を参照すると、スワップ制御機能１２０は、データ管理部１３０及びスワップ制御部１６０を有する。
【００３２】
（１）スワップ制御のための制御データ
データ管理部１３０は、スワップ制御機能１２０により使用される制御データを管理する。図５に示したように、スワップ制御機能１２０により使用される制御データは、マッピングデータ１４０及びハッシュデータ１５０を含む。データ管理部１３０は、これら制御データを、例えばＲＡＭ１０５の（又は仮想メモリ空間の）所定の場所に記憶させる。データ管理部１３０は、スワップ制御部１６０からの要求に応じて、制御データの全体又はその一部を取得する。
【００３３】
マッピングデータ１４０は、一次記憶装置から二次記憶装置へ、即ちＲＡＭ１０５からＨＤＤ１１１へスワップアウトされたスワップ済みデータに、当該データのスワップ元アドレスをマッピングするデータである。なお、スワップアウトされたデータはＲＡＭ１０５からは削除されるため、スワップ済みデータの実体はＨＤＤ１１１上にのみ存在する。一例として、マッピングデータ１４０は、ＨＤＤ１１１上のスワップ済みデータへの参照情報にそのスワップ元アドレスを関連付けることにより、当該スワップ済みデータに当該スワップ元アドレスをマッピングする。ここでの参照情報は、例えば、ＨＤＤ１１１の論理ブロック番号、セクタ番号又はこれら番号に関連する何らかの識別情報であってよい。
【００３４】
図６は、マッピングデータ１４０の構成の一例を示す説明図である。図６を参照すると、マッピングデータ１４０は、プロセスＩＤ１４１、仮想アドレス１４２及びスワップ済みデータ参照情報１４３という３つのデータ項目を有する。プロセスＩＤ１４１は、実行中のプロセスを識別する識別子である。仮想アドレス１４２は、各プロセスに割り当てられた仮想メモリ空間のアドレス範囲の各々の先頭の仮想アドレスを示す。ここでの各アドレス範囲はメモリスワッピングの処理単位に等しくてよく、例えばメモリスワッピングの処理単位は１つ以上のページであってよい。スワップ済みデータ参照情報１４３は、プロセスＩＤ１４１及び仮想アドレス１４２により特定されるアドレス範囲のデータがスワップアウトされた後の、当該スワップ済みデータが記憶されているＨＤＤ１１１上の論理ブロック番号を示す。マッピングデータ１４０のあるエントリのスワップ済みデータ参照情報１４３が空欄であれば、そのエントリに対応するアドレス範囲のデータはＲＡＭ１０５上に存在し、スワップアウトされていない（又は一度スワップアウトされたが既にスワップイン済みである）。
【００３５】
ハッシュデータ１５０は、二次記憶装置上のスワップ領域内の複数のスワップ済みデータの各々について計算されたハッシュ値を示すデータである。ハッシュデータ１５０は、スワップ対象データとスワップ済みデータとの間の同一性を少ない計算コストで判定するために使用される。
【００３６】
図７は、ハッシュデータ１５０の構成の一例を示す説明図である。図７を参照すると、ハッシュデータ１５０は、スワップ済みデータ参照情報１５１及びハッシュ値１５２という２つのデータ項目を有する。スワップ済みデータ参照情報１５１は、スワップ領域に記憶されているスワップ済みデータセットに含まれる各スワップ済みデータの記憶場所を識別する論理ブロック番号を示す。ハッシュ値１５２は、各スワップ済みデータについて例えばＭＤ５又はＳＨＡなどの所定のハッシュ関数を用いて計算されるハッシュ値を示す。ハッシュ値のビット数が少ないほど同一性の判定に要する時間は短縮されるが、少な過ぎるハッシュ値のビット数は衝突（異なるはずのデータについてハッシュ値が同じ値を示すこと）のリスクを高める。そのため、ハッシュ関数及びハッシュ値のビット数は、上述したトレードオフを考慮して予め選択され得る。
【００３７】
（２）スワップアウト／スワップインの判定
スワップ制御部１６０は、コンピュータ１００におけるメモリスワッピングを制御する。例えば、スワップ制御部１６０は、ＣＰＵ１０１において実行されるプロセスにより求められる量の空き領域をＲＡＭ１０５が有するかを継続的にモニタリングする。そして、空き領域が足りないことが検出されると、スワップ制御部１６０は、後に説明するスワップアウト処理を実行すべきであると判定する。また、スワップ制御部１６０は、コンピュータ１００又はＣＰＵ１０１の負荷をモニタリングし、その負荷が閾値よりも低い時点で、スワップアウト処理を含み得るスワップ動作を実行してもよい。このようなバックグラウンドでのスワップ動作によれば、メモリの空き領域が実際に不足する前に十分な空き領域が確保される。それにより、ピーク時のシステム負荷がスワップ動作によってさらに悪化することを防止し、処理遅延を緩和することができる。
【００３８】
また、スワップ制御部１６０は、実行中のプロセスからのメモリアクセスをモニタリングする。そして、スワップ制御部１６０は、アクセスされた仮想メモリ空間のアドレス範囲のデータがＲＡＭ１０５上に存在しないこと（即ちページフォルト）を検出すると、スワップイン処理を実行すべきであると判定する。スワップ制御部１６０は、ＲＡＭ１０５に十分な量の空き領域が生じたことを検出した場合に、スワップイン処理を実行すべきであると判定してもよい。スワップイン処理において、スワップ制御部１６０は、スワップインすべきスワップ済みデータの参照情報を、マッピングデータ１４０から取得する。そして、スワップ制御部１６０は、取得した参照情報により示されるスワップ領域内の論理ブロックからスワップ済みデータを読み出し、マッピングデータ１４０において当該スワップ済みデータにマッピングされているアドレス範囲に対応するＲＡＭ１０５上の物理領域に、読み出したデータを記憶させる。スワップ制御部１６０は、スワップインすべきデータのためにスワップイン処理を実行する前に、ＲＡＭ１０５上の他のデータについてスワップアウト処理を実行することで、スワップインのための空き領域を確保してもよい。
【００３９】
（３）スワップ対象データの選択
スワップ制御部１６０は、スワップアウト処理を実行すべきであると判定すると、まず、ＲＡＭ１０５上に存在するデータから、スワップ対象データを選択する。例えば、スワップ対象データは、最後にメモリアクセスを行った時刻からの経過時間の最も長いプロセスのデータであってもよい。また、スワップ対象データは、予め定義される優先度の最も低いプロセスのデータであってもよい。
【００４０】
ある実施例において、スワップ制御部１６０は、ＲＡＭ１０５上のあるアドレスに存在するデータであって、他のアドレスに存在する他のデータと同一であるデータ（即ち、ＲＡＭ１０５上で重複しているデータ）を、スワップ対象データとして優先的に選択してもよい。この場合、１回のスワップアウトによって複数のアドレス範囲のデータをＲＡＭ１０５から削除することが可能となる。よって、Ｉ／Ｏの負荷が低減され、メモリリソースの利用効率は向上し得る。
【００４１】
また、別の実施例において、スワップ制御部１６０は、同一のデータがスワップ済みデータセットに含まれるＲＡＭ１０５上のデータを、スワップ対象データとして優先的に選択してもよい。この場合、スワップ対象データの選択の前に、後述するデータの同一性の判定が実行されることになる。同一のデータがスワップ済みデータセットに含まれるＲＡＭ１０５上のデータがスワップ対象データとして選択されれば、選択されたスワップ対象データについてスワップアウトを確実にスキップしつつ、当該スワップ対象データをＲＡＭ１０５から削除することができる。
【００４２】
また、別の実施例において、データ管理部１３０は、参照頻度の低い１つ以上のデータのハッシュ値を示す低参照頻度データリストをさらに取得してもよい。低参照頻度データリストは、例えば、ソフトウェアの事前の解析（プロファイリング）を通じて予め生成され、又は各プロセスの実行中に動的に生成され及び更新され得る。そして、スワップ制御部１６０は、低参照頻度データリストにより示されるハッシュ値と同一のハッシュ値を有するデータを、スワップ対象データとして優先的に選択し得る。この場合、スワップアウト後にページフォルトが発生する可能性が低減されるため、スワップアウト及びスワップインに伴うＩ／Ｏ負荷の上昇を防止することができる。
【００４３】
（４）同一性の判定
スワップ制御部１６０は、スワップ対象データが選択されると、ＨＤＤ１１１上のスワップ領域内のスワップ済みデータセットに含まれる複数のスワップ済みデータについて、スワップ対象データとの同一性を判定する。スワップ制御部１６０は、例えば、ハッシュデータ１５０により示される複数のスワップ済みデータの各々のハッシュ値とスワップ対象データのハッシュ値とを比較することにより、各スワップ済みデータがスワップ対象データと同一であるかを判定する。それにより、二次記憶装置であるＨＤＤ１１１へアクセスすることなく、ハッシュ値の異なる多数のスワップ済みデータについてデータが同一でないことを判定することができる。
【００４４】
ある実施例において、スワップ制御部１６０は、スワップ対象データのハッシュ値と同一のハッシュ値を有するスワップ済みデータはスワップ対象データと同一であると見なしてもよい。この場合、ハッシュ関数は、ハッシュ値の衝突のリスクが十分小さいように設定される。こうした簡易的な手法によって、データの同一性の判定を迅速に行うことができる。
【００４５】
別の実施例において、スワップ制御部１６０は、スワップ対象データのハッシュ値と同一のハッシュ値を有するスワップ済みデータをスワップ領域から取得し、取得したスワップ済みデータとスワップ対象データとのデータの同一性を検査する。こうした手法によれば、実際には相違するスワップ済みデータとスワップ対象データとのペアについて誤ってこれらが同一であると判定される可能性を排除し、安全なメモリ制御を実現することができる。また、ハッシュ値の異なるスワップ済みデータについては事前に検査対象から除外されているため、本手法によって発生するＨＤＤ１１１へのアクセスの回数は少なくて済む。
【００４６】
（５）スワップアウトの実行又はスキップ
スワップ制御部１６０は、スワップ対象データと同一のスワップ済みデータが存在しない場合には、スワップ対象データをＨＤＤ１１１上のスワップ領域の未使用のブロックへスワップアウトする。また、スワップ制御部１６０は、スワップ対象データのプロセスＩＤ、スワップ対象データのスワップ元の仮想アドレス、及びスワップ対象データを書き込んだスワップ領域のブロックの論理ブロック番号を含むエントリを、マッピングデータ１４０に追加する。そして、スワップ制御部１６０は、スワップ対象データをＲＡＭ１０５から削除する。
【００４７】
一方、スワップ制御部１６０は、スワップ対象データと同一のスワップ済みデータが存在する場合に、スワップ対象データをＨＤＤ１１１上のスワップ領域へスワップアウトしない。スワップ制御部１６０は、スワップアウトをスキップしつつ、マッピングデータ１４０において、同一であると判定した当該スワップ済みデータへの参照情報（論理ブロック番号）に、スワップ対象データのアドレス範囲の先頭の仮想アドレスを関連付ける。スワップ制御部１６０は、同じプロセスＩＤ及び仮想アドレスのペアを有するエントリが既にマッピングデータ１４０に存在する場合には、当該エントリを更新し得る。また、スワップ制御部１６０は、同じプロセスＩＤ及び仮想アドレスのペアを有するエントリがマッピングデータ１４０に存在しない場合には、新たなエントリを追加してもよい。こうしたエントリの更新又は追加により、スワップ対象データのアドレスと当該スワップ済みデータとの間のマッピングが形成される。そして、スワップ制御部１６０は、スワップ対象データをＲＡＭ１０５から削除する。
【００４８】
再び図６を参照すると、マッピングデータ１４０のエントリＥＮ１及びエントリＥＮ２のスワップ済みデータ参照情報１４３は、同一の論理ブロック番号“0x83ae”を示している。これは、例えばエントリＥＮ１に対応する仮想アドレス“0x1abc2000”のデータがスワップ領域内の論理ブロック番号“0x83ae”へスワップアウトされた後、エントリＥＮ２に対応する仮想アドレス“0x1abc3000”のデータについてスワップアウトがスキップされた可能性を意味する。仮想アドレス“0x1abc3000”のデータについてスワップアウトがスキップされた際、スワップ制御部１６０は、スワップ対象データと同一であると判定されたスワップ済みデータが存在するブロックの論理ブロック番号“0x83ae”を、エントリＥＮ２に含める。論理ブロック番号“0x83ae”はハッシュデータ１５０において管理されているため、スワップ制御部１６０は、エントリＥＮ２を更新し又は追加するためにＨＤＤ１１１へアクセスしなくてよい。
【００４９】
ここで、スワップ領域内のスワップ済みデータセットは、マッピングデータ１４０において異なるスワップ元アドレスにそれぞれマッピングされた複数のスワップ済みデータを含み得る。スワップ制御部１６０は、スワップ対象データが仮想メモリ空間のどのアドレス範囲に存在しているかに関わらず、それら複数のスワップ済みデータの各々とスワップ対象データとの同一性を判定し、同一のスワップ済みデータが存在する場合にはスワップ対象データのスワップアウトをスキップする。従って、本実施形態によれば、図３を用いて説明した手法とは異なり、アドレス範囲に制約されることなく、冗長的なメモリスワッピングの実行を広く回避することができる。
【００５０】
また、本実施形態において、スワップ制御部１６０は、スワップ領域のデータ容量が許す限り、一度スワップアウトされたデータをスワップ領域から削除しない。よって、スワップ領域内のスワップ済みデータセットは、同一のスワップ元アドレスから異なる時点でスワップアウトされた複数のスワップ済みデータを含み得る。スワップ制御部１６０は、それら複数のスワップ済みデータの各々とスワップ対象データとの同一性を判定し、同一のスワップ済みデータが存在する場合にはスワップ対象データのスワップアウトをスキップする。従って、本実施形態によれば、図３を用いて説明した手法とは異なり、１つのアドレス範囲から複数回スワップアウトされたデータのうちの最新でないスワップ済みデータを、スワップアウトをスキップするために利用することができる。
【００５１】
（６）スワップ済みデータセットの展開
上述したように、スワップ制御部１６０は、スワップ済みデータセットのデータサイズを、当該データサイズがスワップ領域のデータ容量を上回らないようにモニタリングし得る。スワップ制御部１６０は、データサイズがスワップ領域のデータ容量に関連する閾値を下回っている間、スワップ済みデータセットに含まれるデータを削除しなくてよい。こうした手法によれば、コンピュータ１００において様々なプロセスがより長い時間動作するほど、より充実したスワップ済みデータセットが形成され得る。そして、スワップ済みデータセットの充実に従って、スワップアウトがスキップされる確率は高まっていく。
【００５２】
それに加えて、ＨＤＤ１１１上は、１つ以上の用途に従って予め処理を実行した際にメモリ空間に書き込まれたデータを収集することにより形成されるスワップ済みデータセットを、初期のスワップ済みデータセットとして記憶していてもよい。当該スワップ済みデータセットは、互いに同一のデータを含まないように形成される。データの収集は、例えば、メモリダンプの取得を通じて行われ得る。そして、データ管理部１３０は、例えばスワップ制御機能の初期化の際に、初期のスワップ済みデータセットのためのマッピングデータ１４０及びハッシュデータ１５０のエントリを取得し得る。こうした手法によれば、コンピュータ１００が使用開始された当初から、スワップ済みデータセットを利用してメモリスワッピングの発生を抑制し、Ｉ／Ｏ負荷の低減及び処理遅延の短縮などの恩恵をユーザが享受することが可能となる。なお、ここでの１つ以上の用途とは、コンピュータ１００について想定される様々なアプリケーション（又はＯＳ）の任意の用途であってよい。限定ではなく一例として、それら用途は、カメラアプリケーションにおける写真の撮像及び再生、並びに動画再生アプリケーションにおけるお気に入り動画の再生を含み得る。ある用途においてメモリ空間に書き込まれるデータ量が多大である場合には、初期のスワップ済みデータセットは、メモリ空間に書き込まれるデータのうちの出現頻度のより高い一部のデータのみを含んでもよい。
【００５３】
＜３．処理の流れ＞
［３−１．スワップ制御処理］
図８は、本実施形態においてスワップ制御機能１２０により実行され得るスワップ制御処理の流れの一例を示すフローチャートである。
【００５４】
図８を参照すると、まず、スワップ制御部１６０は、予め用意される初期のスワップ済みデータセットを、ＨＤＤ１１１のスワップ領域に作成する（ステップＳ１０）。その後、スワップ制御部１６０はスワップアウト又はスワップインをトリガするイベントの発生を継続的にモニタリングし、ステップＳ１５〜ステップＳ６０の処理が繰り返される。
【００５５】
例えば、スワップ制御部１６０は、ページフォルトが発生したかを判定する（ステップＳ１５）。ページフォルトが発生した場合、スワップ制御部１６０は、ＲＡＭ１０５上に存在しないスワップ済みデータをスワップ領域からスワップインする必要性があることを認識する。すると、スワップ制御部１６０は、ＲＡＭ１０５のメモリ空間に十分な空き領域があるかを判定する（ステップＳ２０）。ＲＡＭ１０５のメモリ空間に十分な空き領域がない場合、スワップ制御部１６０は、スワップアウト処理を実行する（ステップＳ２５）ことにより、スワップインのための空き領域を確保する。そして、スワップ制御部１６０は、（例えばプロセスにより要求された）スワップインの対象のアドレス範囲に対応するスワップ済みデータを、ＨＤＤ１１１のスワップ領域からＲＡＭ１０５上の当該アドレス範囲へスワップインする（ステップＳ３０）。スワップ制御部１６０は、マッピングデータ１４０において、スワップインによりデータが書き込まれたアドレス範囲についてのスワップ済みデータへの参照情報を消去してもよい。
【００５６】
ページフォルトが発生していない場合、スワップ制御部１６０は、さらにスワップアウト処理を実行すべきかを判定する（ステップＳ３５）。例えば、スワップ制御部１６０は、ＲＡＭ１０５のメモリ空間の空き領域が所定の閾値を下回る場合、システム負荷が閾値よりも低い場合、又は長い時間にわたってメモリアクセスを行っていないプロセスが存在する場合などに、スワップアウト処理を実行すべきであると判定してよい。スワップアウト処理を実行すべきであると判定すると、スワップ制御部１６０は、スワップアウト処理を実行する（ステップＳ４０）。スワップアウト処理の詳細な流れについて、後にさらに説明する。
【００５７】
その後、ＣＰＵ１０１において１つ以上のプロセスがアプリケーション処理を実行する（ステップＳ５０）。そして、処理はステップＳ１５へ戻る。
【００５８】
［３−２．スワップアウト処理］
（１）第１の例
図９Ａは、図８のステップＳ２５又はステップＳ４０において実行されるスワップアウト処理の詳細な流れの第１の例を示すフローチャートである。第１の例において、スワップ制御部１６０は、スワップ対象データのハッシュ値と同一のハッシュ値を有するスワップ済みデータはスワップ対象データと同一であると見なす。
【００５９】
図９Ａを参照すると、まず、スワップ制御部１６０は、ＲＡＭ１０５上に存在するデータから、スワップ対象データを選択する（ステップＳ１１０）。次に、スワップ制御部１６０は、選択したスワップ対象データのハッシュ値を所定のハッシュ関数を用いて計算する（ステップＳ１１５）。
【００６０】
次に、スワップ制御部１６０は、データ管理部１３０によりＲＡＭ１０５において管理されているハッシュデータ１５０から、スワップ済みデータセット内の１つのスワップ済みデータのハッシュ値を取得する（ステップＳ１２０）。次に、スワップ制御部１６０は、ハッシュデータ１５０から取得したハッシュ値が、スワップ対象データについて計算したハッシュ値と同一であるかを判定する（ステップＳ１２５）。ここで、これらハッシュ値が互いに同一である場合には、処理はステップＳ１７０へ進む。ハッシュ値が同一でない場合、スワップ制御部１６０は、スワップ済みデータセット内の全てのデータについてハッシュ値の比較が終了したかを判定する（ステップＳ１４０）。ハッシュ値の比較が終了していないデータが存在する場合、処理はステップＳ１２０へ戻り、次のスワップ済みデータについてハッシュ値の取得及びハッシュ値の同一性の判定が繰り返される。ハッシュ値の同一なスワップ済みデータが発見されることなく、スワップ済みデータセット内の全てのデータについてハッシュ値の比較が終了すると、処理はステップＳ１５０へ進む。
【００６１】
ステップＳ１５０において、スワップ制御部１６０は、スワップ対象データと同一のスワップ済みデータが存在しないため、スワップ対象データをＨＤＤ１１１上のスワップ領域へスワップアウトする（ステップＳ１５０）。また、スワップ制御部１６０は、スワップ対象データのスワップ先のＨＤＤ１１１上の参照情報（例えば、論理ブロック番号）とスワップ対象データのハッシュ値とを含むエントリを、データ管理部１３０を介してハッシュデータ１５０に追加する（ステップＳ１５５）。また、スワップ制御部１６０は、スワップ対象データのためのエントリを追加し又は更新することにより、マッピングデータ１４０を更新する（ステップＳ１６０）。
【００６２】
一方、ステップＳ１７０では、スワップ制御部１６０は、スワップ対象データと同一のスワップ済みデータが存在するため、マッピングデータ１４０において、同一であると判定した当該スワップ済みデータへの参照情報に、スワップ対象データの仮想アドレスを関連付ける（ステップＳ１７０）。スワップ制御部１６０は、スワップ対象データをＨＤＤ１１１上のスワップ領域へスワップアウトしない。
【００６３】
そして、スワップ制御部１６０は、スワップアウトをスキップしたか否かに関わらず、スワップ対象データをＲＡＭ１０５から削除する（ステップＳ１８０）。
【００６４】
（２）第２の例
図９Ｂは、図８のステップＳ２５又はステップＳ４０において実行されるスワップアウト処理の詳細な流れの第２の例を示すフローチャートである。第２の例において、スワップ制御部１６０は、スワップ対象データとスワップ済みデータとの間で、ハッシュ値の同一性に加えて実体的なデータの同一性をも判定する。
【００６５】
図９Ｂを参照すると、まず、スワップ制御部１６０は、ＲＡＭ１０５上に存在するデータから、スワップ対象データを選択する（ステップＳ１１０）。次に、スワップ制御部１６０は、選択したスワップ対象データのハッシュ値を所定のハッシュ関数を用いて計算する（ステップＳ１１５）。
【００６６】
次に、スワップ制御部１６０は、データ管理部１３０によりＲＡＭ１０５において管理されているハッシュデータ１５０から、スワップ済みデータセット内の１つのスワップ済みデータのハッシュ値を取得する（ステップＳ１２０）。次に、スワップ制御部１６０は、ハッシュデータ１５０から取得したハッシュ値が、スワップ対象データについて計算したハッシュ値と同一であるかを判定する（ステップＳ１２５）。
【００６７】
ステップＳ１２５においてハッシュ値が互いに同一である場合には、スワップ制御部１６０は、対応するスワップ済みデータをＨＤＤ１１１のスワップ領域から取得する（ステップＳ１３０）。そして、スワップ制御部１６０は、取得したスワップ済みデータがスワップ対象データと同一であるかを検査する（ステップＳ１３５）。ここで、取得したスワップ済みデータがスワップ対象データと同一である場合、処理はステップＳ１７０へ進む。これらデータが同一でない場合、又はステップＳ１２５においてハッシュ値が同一でない場合、スワップ制御部１６０は、スワップ済みデータセット内の全てのデータについてハッシュ値の比較が終了したかを判定する（ステップＳ１４０）。ハッシュ値の比較が終了していないデータが存在する場合、処理はステップＳ１２０へ戻り、次のスワップ済みデータについてハッシュ値の取得、ハッシュ値の同一性の判定及びデータの同一性の判定が繰り返される。スワップ対象データと同一なスワップ済みデータが発見されることなく、スワップ済みデータセット内の全てのデータについてハッシュ値の比較が終了すると、処理はステップＳ１５０へ進む。
【００６８】
ステップＳ１５０において、スワップ制御部１６０は、スワップ対象データと同一のスワップ済みデータが存在しないため、スワップ対象データをＨＤＤ１１１上のスワップ領域へスワップアウトする（ステップＳ１５０）。また、スワップ制御部１６０は、スワップ対象データのスワップ先のＨＤＤ１１１上の参照情報とスワップ対象データのハッシュ値とを含むエントリを、データ管理部１３０を介してハッシュデータ１５０に追加する（ステップＳ１５５）。また、スワップ制御部１６０は、スワップ対象データのためのエントリを追加し又は更新することにより、マッピングデータ１４０を更新する（ステップＳ１６０）。
【００６９】
一方、ステップＳ１７０では、スワップ制御部１６０は、スワップ対象データと同一のスワップ済みデータが存在するため、マッピングデータ１４０において、同一であると判定した当該スワップ済みデータへの参照情報に、スワップ対象データの仮想アドレスを関連付ける（ステップＳ１７０）。スワップ制御部１６０は、スワップ対象データをＨＤＤ１１１上のスワップ領域へスワップアウトしない。
【００７０】
そして、スワップ制御部１６０は、スワップアウトをスキップしたか否かに関わらず、スワップ対象データをＲＡＭ１０５から削除する（ステップＳ１８０）。
【００７１】
なお、本節では、スワップ済みデータセット内の全てのデータについてハッシュ値の比較が行われる例を説明した。しかしながら、かかる例に限定されず、例えばスワップ済みデータセットの特定のサブセットに含まれるデータについてのみ、ハッシュ値の比較が行われてもよい。例えば、ここでのサブセットは、スワップ対象データと同じプロセスのデータなどであってよい。
【００７２】
＜４．スワップ動作の例＞
（１）第１の動作シナリオ
図１０は、本実施形態において実現されるメモリ制御技術の動作の第１の例について説明するための説明図である。図１０の左には、ＲＡＭ１０５の物理メモリ空間に関連付けられる仮想メモリ空間ＶＭ３が示されている。仮想メモリ空間ＶＭ３のアドレス範囲Ａ３１〜Ａ３４は、プロセスＰＲ１に割り当てられている。アドレス範囲Ａ３１、Ａ３２、Ａ３３及びＡ３４は、それぞれデータＤ１１、Ｄ１２、Ｄ１３及びＤ１４を含む。また、アドレス範囲Ａ３５〜Ａ３８は、プロセスＰＲ２に割り当てられている。アドレス範囲Ａ３５、Ａ３６、Ａ３７及びＡ３８は、それぞれデータＤ２１、Ｄ２１、Ｄ２１及びＤ２２を含む。そして、物理メモリ空間に十分な空き領域が残っていない状況において、プロセスＰＲ１が自身の仮想メモリ領域にアドレス範囲を追加することを要求したものとする（ステップＳ１）。すると、スワップ制御部１６０は、例えば、アドレス範囲Ａ３５〜Ａ３８に記憶されていたデータを、ＨＤＤ１１１のスワップ領域ＳＭ３へスワップアウトする。但し、図２に示した動作シナリオとは異なり、スワップ制御部１６０は、同一のデータＤ２１については１回のみスワップアウトを実行し、例えばアドレス範囲Ａ３６及びＡ３７についてはマッピングデータ１４０にスワップ済みデータＤ１への参照情報を追加するのみである。そして、これらスワップアウト済みのデータＤ２１及びＤ２２が仮想メモリ空間ＶＭ３から削除されると（ステップＳ２）、例えばアドレス空間Ａ３５が、プロセスＰＲ１に追加的に割当てられ得る。
【００７３】
（２）第２の動作シナリオ
図１１は、本実施形態において実現されるメモリ制御技術の動作の第２の例について説明するための説明図である。図１１の左上には、アドレス範囲Ａ３５〜Ａ３８を含む仮想メモリ空間ＶＭ３が部分的に示されている。アドレス範囲Ａ３５、Ａ３６、Ａ３７及びＡ３８は、それぞれデータＤ２１、Ｄ２１、Ｄ２１及びＤ２２を含んでいたが、これらデータは既に二次記憶装置上のスワップ領域ＳＭ３へスワップアウトされている。その後、これらスワップ済みデータは、スワップ領域ＳＭ３からアドレス範囲Ａ３５〜Ａ３８へスワップインされる（ステップＳ３）。スワップインされたデータは、スワップ領域ＳＭ３から削除されることなく残される。さらに、アドレス範囲Ａ３６内のデータがデータＤ２２へ、アドレス範囲Ａ３８内のデータがデータＤ２１へソフトウェアのプロセスによって更新される（ステップＳ４）。その後、スワップアウトの必要性が生じ、アドレス範囲Ａ３５〜Ａ３８のデータの各々がスワップ対象データとして選択されたものとする。本実施形態によれば、各スワップ対象データについて、そのアドレス範囲によらずスワップ領域ＳＭ３内の全てのスワップ済みデータとの間の同一性が判定される。そして、同一のスワップ済みデータが存在すると判定されたスワップ対象データについては、スワップアウトがスキップされる。図１１の例では、全てのスワップ対象データについてスワップアウトがスキップされている（ステップＳ５）。
【００７４】
（３）第３の動作シナリオ
図１２は、本実施形態において実現されるメモリ制御技術の動作の第３の例について説明するための説明図である。図１２の左上には、アドレス範囲Ａ３５〜Ａ３８を含む仮想メモリ空間ＶＭ３が再び部分的に示されている。アドレス範囲Ａ３５、Ａ３６、Ａ３７及びＡ３８は、それぞれデータＤ２１、Ｄ２１、Ｄ２１及びＤ２２を含んでいたが、これらデータは既に二次記憶装置上のスワップ領域ＳＭ３へスワップアウトされている。次に、これらスワップ済みデータのスワップイン、並びにアドレス範囲Ａ３６及びＡ３８内のデータのそれぞれデータＤ２３及びＤ２４への更新の後、さらにアドレス範囲Ａ３６及びＡ３８内のデータＤ２３及びＤ２４がスワップ領域ＳＭ３へスワップアウトされる（ステップＳ６）。次に、スワップ済みデータが再度スワップインされ、アドレス範囲Ａ３６内のデータがデータＤ２２へ更新される（ステップＳ７）。その後、スワップアウトの必要性が生じ、アドレス範囲Ａ３５〜Ａ３８のデータの各々がスワップ対象データとして選択されたものとする。本実施形態によれば、各スワップ対象データについて、スワップ領域ＳＭ３内の全てのスワップ済みデータとの間の同一性が判定される。そして、例えばアドレス範囲Ａ３６のスワップ対象データはステップＳ６よりも前にスワップアウトされたスワップ済みデータＤ２２と同一であるため、当該スワップ対象データについてスワップアウトがスキップされる（ステップＳ８）。
【００７５】
図１０〜図１２から理解されるように、いずれの動作シナリオにおいても、スワップアウトの回数、即ち二次記憶装置のスワップ領域へのデータの書き込みの回数は、既存の手法と比較して低減される。それにより、コンピュータの負荷が軽減され、処理遅延が短縮される。また、メモリデバイスの製品寿命の劣化の速度を遅くすることもできる。
【００７６】
＜５．まとめ＞
ここまで、図１〜図１２を用いて、本開示に係る技術の実施形態について詳細に説明した。上述した実施形態によれば、二次記憶装置上のスワップ済みデータセットに含まれる複数のスワップ済みデータについて一次記憶装置上のスワップ対象データとの同一性が判定され、同一のスワップ済みデータが存在する場合には、スワップ対象データの二次記憶装置へのスワップアウトがスキップされる。そして、スワップ対象データの仮想アドレスを同一であると判定されたスワップ済みデータにマッピングするデータエントリが生成された上で、スワップ対象データが一次記憶装置から削除される。それにより、異なるアドレス範囲が同一のデータを有する場合の冗長的なメモリスワッピングを回避することができる。また、同一のデータが時間的に繰り返し発生する場合の冗長的なメモリスワッピングをも回避することができる。よって、Ｉ／Ｏ負荷の高い二次記憶装置へのアクセス回数が低減されるため、処理遅延が短縮される結果として、ユーザのストレスが軽減される。また、スワップ領域のメモリリソースが効率的に利用されるため、装置の小型化又は低価格化も可能となる。さらに、メモリ不足に起因する障害のリスクもまた低減され、システムのより安定的な動作が実現される。
【００７７】
また、上述した実施形態によれば、スワップ対象データとスワップ済みデータとの間の同一性の判定は、そららデータのハッシュ値を比較することにより行われる。従って、同一性の判定のために長い処理時間を要することがなく、同一性の判定を迅速に行うことができる。また、スワップ済みデータのハッシュデータが一次記憶装置上で保持される場合には、同一性の判定のための二次記憶装置へのアクセスも抑制されるため、Ｉ／Ｏ負荷は効果的に低減される。
【００７８】
なお、本明細書においてフローチャートを用いて説明した処理は、必ずしもフローチャートに示された順序で実行されなくてもよい。いくつかの処理ステップは、並列的に実行されてもよい。また、追加的な処理ステップが採用されてもよく、一部の処理ステップが省略されてもよい。
【００７９】
以上、添付図面を参照しながら本開示の好適な実施形態について詳細に説明したが、本開示の技術的範囲はかかる例に限定されない。本開示の技術分野における通常の知識を有する者であれば、特許請求の範囲に記載された技術的思想の範疇内において、各種の変更例または修正例に想到し得ることは明らかであり、これらについても、当然に本開示の技術的範囲に属するものと了解される。
【００８０】
また、本明細書に記載された効果は、あくまで説明的又は例示的なものであって限定的ではない。つまり、本開示に係る技術は、上記の効果と共に、又は上記の効果に代えて、本明細書の記載から当業者には明らかな他の効果を奏し得る。
【００８１】
なお、以下のような構成も本開示の技術的範囲に属する。
（１）
一次記憶装置から二次記憶装置へスワップアウトされたデータに、当該データのスワップ元アドレスをマッピングするマッピングデータを取得するデータ取得部と、
前記二次記憶装置上のスワップ済みデータセットに含まれる複数のスワップ済みデータについて前記一次記憶装置上のスワップ対象データとの同一性を判定し、同一のスワップ済みデータが存在する場合に、前記スワップ対象データを前記二次記憶装置へスワップアウトすることなく、前記マッピングデータにおいて前記スワップ対象データのアドレスを前記同一のスワップ済みデータにマッピングし、前記スワップ対象データを前記一次記憶装置から削除する、スワップ制御部と、
を備える情報処理装置。
（２）
前記データ取得部は、前記複数のスワップ済みデータの各々のハッシュ値を示すハッシュデータをさらに取得し、
前記スワップ制御部は、前記ハッシュデータにより示される前記複数のスワップ済みデータの各々のハッシュ値と前記スワップ対象データのハッシュ値とを比較することにより、各スワップ済みデータが前記スワップ対象データと同一であるかを判定する、
前記（１）に記載の情報処理装置。
（３）
前記スワップ制御部は、前記スワップ対象データのハッシュ値と同一のハッシュ値を有するスワップ済みデータについて、さらに前記スワップ対象データとのデータの同一性を検査することにより、各スワップ済みデータが前記スワップ対象データと同一であるかを判定する、前記（２）に記載の情報処理装置。
（４）
前記スワップ制御部は、前記スワップ対象データのハッシュ値と同一のハッシュ値を有するスワップ済みデータは前記スワップ対象データと同一であると見なす、前記（２）に記載の情報処理装置。
（５）
前記スワップ制御部は、前記マッピングデータにおいて異なるスワップ元アドレスにマッピングされた前記複数のスワップ済みデータの各々が、前記スワップ対象データと同一であるかを判定する、前記（１）〜（４）のいずれか１項に記載の情報処理装置。
（６）
前記スワップ制御部は、同一のスワップ元アドレスから異なる時点でスワップアウトされた前記複数のスワップ済みデータの各々が、前記スワップ対象データと同一であるかを判定する、前記（１）〜（５）のいずれか１項に記載の情報処理装置。
（７）
前記スワップ制御部は、同一のデータが前記スワップ済みデータセットに含まれる前記一次記憶装置上のデータを、前記スワップ対象データとして優先的に選択する、前記（１）〜（６）のいずれか１項に記載の情報処理装置。
（８）
前記スワップ制御部は、前記一次記憶装置上のあるアドレスに存在するデータであって、他のアドレスに存在する他のデータと同一であるデータを、前記スワップ対象データとして優先的に選択する、前記（１）〜（７）のいずれか１項に記載の情報処理装置。
（９）
前記データ取得部は、参照頻度の低い１つ以上のデータのハッシュ値を示すリストをさらに取得し、
前記スワップ制御部は、前記リストにより示されるハッシュ値と同一のハッシュ値を有するデータを、前記スワップ対象データとして優先的に選択する、
前記（１）〜（８）のいずれか１項に記載の情報処理装置。
（１０）
前記スワップ制御部は、前記情報処理装置の負荷をモニタリングし、前記情報処理装置の前記負荷が閾値よりも低い時点でスワップ動作を実行する、前記（１）〜（９）のいずれか１項に記載の情報処理装置。
（１１）
前記マッピングデータは、前記二次記憶装置上のスワップ済みデータへの参照情報に前記スワップ元アドレスを関連付けることにより、当該スワップ済みデータに当該スワップ元アドレスをマッピングする、前記（１）〜（１０）のいずれか１項に記載の情報処理装置。
（１２）
前記スワップ元アドレスは、仮想アドレスである、前記（１）〜（１１）のいずれか１項に記載の情報処理装置。
（１３）
前記情報処理装置は、前記一次記憶装置及び前記二次記憶装置をさらに備え、
前記二次記憶装置は、１つ以上の用途に従って予め処理を実行した際にメモリ空間に書き込まれたデータを収集することにより形成される前記スワップ済みデータセットを記憶し、
前記スワップ済みデータセットは、互いに同一のデータを含まない、
前記（１）〜（１２）のいずれか１項に記載の情報処理装置。
（１４）
前記スワップ制御部は、前記スワップ済みデータセットのデータサイズをモニタリングし、前記データサイズが閾値を下回っている間、前記スワップ済みデータセットに含まれるデータを削除しない、前記（１）〜（１３）のいずれか１項に記載の情報処理装置。
（１５）
一次記憶装置から二次記憶装置へスワップアウトされたデータに、当該データのスワップ元アドレスをマッピングするマッピングデータを取得することと、
プロセッサにおいて、前記二次記憶装置上のスワップ済みデータセットに含まれる複数のスワップ済みデータについて前記一次記憶装置上のスワップ対象データとの同一性を判定することと、
同一のスワップ済みデータが存在する場合に、前記スワップ対象データを前記二次記憶装置へスワップアウトすることなく、前記マッピングデータにおいて前記スワップ対象データのアドレスを前記同一のスワップ済みデータにマッピングすることと、
前記スワップ対象データを前記一次記憶装置から削除することと、
を含むスワップ制御方法。
（１６）
情報処理装置を制御する処理回路を、
一次記憶装置から二次記憶装置へスワップアウトされたデータに、当該データのスワップ元アドレスをマッピングするマッピングデータを取得するデータ取得部と、
前記二次記憶装置上のスワップ済みデータセットに含まれる複数のスワップ済みデータについて前記一次記憶装置上のスワップ対象データとの同一性を判定し、同一のスワップ済みデータが存在する場合に、前記スワップ対象データを前記二次記憶装置へスワップアウトすることなく、前記マッピングデータにおいて前記スワップ対象データのアドレスを前記同一のスワップ済みデータにマッピングし、前記スワップ対象データを前記一次記憶装置から削除する、スワップ制御部と、
として機能させるためのプログラム。
【符号の説明】
【００８２】
１００    コンピュータ（情報処理装置）
１０１    ＣＰＵ（情報処理装置）
１０５    ＲＡＭ（一次記憶装置）
１１１    ＨＤＤ（二次記憶装置）
１３０    データ管理部
１４０    マッピングデータ
１５０    ハッシュデータ
１６０    スワップ制御部
【図１】
2015111370.tif 000003
【図２】
2015111370.tif 000004
【図３】
2015111370.tif 000005
【図４】
2015111370.tif 000006
【図５】
2015111370.tif 000007
【図６】
2015111370.tif 000008
【図７】
2015111370.tif 000009
【図８】
2015111370.tif 000010
【図９Ａ】
2015111370.tif 000011
【図９Ｂ】
2015111370.tif 000012
【図１０】
2015111370.tif 000013
【図１１】
2015111370.tif 000014
【図１２】
2015111370.tif 000015