(57)【要約】【課題】簡易なデータ構造によりデータ位置を効率的に特定可能にする。【解決手段】記憶部１５は、データが格納されたメモリに応じて第１の識別情報または第２の識別情報が設定されるフラグとデータの格納先のメモリ領域におけるデータが格納されたアドレスを示す情報とをデータに対応付けて記憶する。処理部１４は、第１のメモリ１１または第２のメモリ１２にデータを格納すると第１の識別情報をフラグに設定し、第３のメモリ１３にデータを格納すると第２の識別情報をフラグに設定する。処理部１４は、データにアクセスする際に、データに対応するフラグに第１の識別情報が設定されている場合、アドレスを示す情報に基づいて、第１のメモリ１１および第２のメモリ１２のうちデータの格納先のメモリを判定し、判定された格納先のメモリにおけるデータの格納位置を特定する。【選択図】図１
2019200473.tif 000002
【特許請求の範囲】
【請求項１】
第１のメモリ、前記第１のメモリよりも低速の第２のメモリおよび前記第２のメモリよりも低速の第３のメモリにおけるデータ配置を制御するメモリ制御装置であって、
データが格納されたメモリに応じて第１の識別情報または第２の識別情報が設定されるフラグと前記データの格納先のメモリ領域における前記データが格納されたアドレスを示す情報とを前記データに対応付けて記憶する記憶部と、
前記第１のメモリまたは前記第２のメモリに前記データを格納すると前記第１の識別情報を前記フラグに設定し、前記第３のメモリに前記データを格納すると前記第２の識別情報を前記フラグに設定し、前記データにアクセスする際に、前記データに対応する前記フラグに前記第１の識別情報が設定されている場合、前記アドレスを示す情報に基づいて、前記第１のメモリおよび前記第２のメモリのうち前記データの格納先のメモリを判定し、判定された格納先のメモリにおける前記データの格納位置を特定する処理部と、
を有するメモリ制御装置。
【請求項２】
前記処理部は、前記フラグに前記第１の識別情報が設定された前記データに対して前記第１のメモリから前記第２のメモリへの階層移動を許可し、前記第２のメモリから前記第１のメモリへの階層移動を制限する、
請求項１記載のメモリ制御装置。
【請求項３】
前記処理部は、前記第２のメモリおよび前記第３のメモリを前記第１のメモリに対するスワップ領域として利用し、アクセス対象の前記データが前記第２のメモリに格納されている場合、前記第１のメモリへの前記データのスワップインを制限し、前記アドレスに基づいて前記第２のメモリに格納された前記データに直接アクセスする、
請求項１記載のメモリ制御装置。
【請求項４】
前記記憶部は、前記データを優先的に格納するメモリを示すデータ特性情報を記憶し、
前記処理部は、前記データ特性情報に基づいて、前記第１のメモリに格納された前記データのスワップアウト先を前記第２のメモリおよび前記第３のメモリから選択し、前記第３のメモリに格納された前記データのスワップイン先を前記第１のメモリおよび前記第２のメモリから選択する、
請求項３記載のメモリ制御装置。
【請求項５】
前記記憶部は、前記データに対するアクセス頻度を示す情報を記憶し、
前記処理部は、アクセス対象の前記データの前記アクセス頻度に基づいて、前記第３のメモリから前記第１のメモリまたは前記第２のメモリへのスワップインを行うか否かを判定し、スワップインを行う場合に前記データの移動またはコピーの何れによりスワップインを行うかを選択する、
請求項３記載のメモリ制御装置。
【請求項６】
前記アドレスは、前記第１のメモリまたは前記第２のメモリに前記データが格納された場合、前記第１のメモリのメモリ領域および前記第２のメモリのメモリ領域が属するメモリ空間のアドレスである、
請求項１乃至５の何れか１項に記載のメモリ制御装置。
【請求項７】
第１のメモリ、前記第１のメモリよりも低速の第２のメモリおよび前記第２のメモリよりも低速の第３のメモリにおけるデータ配置を制御するコンピュータに、
前記第１のメモリまたは前記第２のメモリにデータを格納すると、前記データの格納先を示すフラグに対する第１の識別情報の設定と前記第１のメモリおよび前記第２のメモリのメモリ領域における前記データが格納された第１のアドレスを示す情報の記録とを行い、また、前記第３のメモリに前記データを格納すると、前記フラグに対する第２の識別情報の設定と前記第３のメモリのメモリ領域における前記データが格納された第２のアドレスを示す情報の記録とを行い、
前記データにアクセスする際に、前記データに対応する前記フラグに前記第１の識別情報が設定されている場合、前記第１のアドレスを示す情報に基づいて、前記第１のメモリおよび前記第２のメモリのうち前記データの格納先のメモリを判定し、判定された格納先のメモリにおける前記データの格納位置を特定する、
処理を実行させるメモリ制御プログラム。
【請求項８】
第１のメモリ、前記第１のメモリよりも低速の第２のメモリおよび前記第２のメモリよりも低速の第３のメモリにおけるデータ配置を制御するコンピュータが、
前記第１のメモリまたは前記第２のメモリにデータを格納すると、前記データの格納先を示すフラグに対する第１の識別情報の設定と前記第１のメモリおよび前記第２のメモリのメモリ領域における前記データが格納された第１のアドレスを示す情報の記録とを行い、また、前記第３のメモリに前記データを格納すると、前記フラグに対する第２の識別情報の設定と前記第３のメモリのメモリ領域における前記データが格納された第２のアドレスを示す情報の記録とを行い、
前記データにアクセスする際に、前記データに対応する前記フラグに前記第１の識別情報が設定されている場合、前記第１のアドレスを示す情報に基づいて、前記第１のメモリおよび前記第２のメモリのうち前記データの格納先のメモリを判定し、判定された格納先のメモリにおける前記データの格納位置を特定する、
メモリ制御方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はメモリ制御装置、メモリ制御プログラムおよびメモリ制御方法に関する。
【背景技術】
【０００２】
情報処理システムでは、演算装置（例えば、ＣＰＵ（Central Processing Unit））により処理するデータを主記憶装置（例えば、ＲＡＭ（Random Access Memory））に格納する。主記憶装置は、比較的高速であるが、容量が比較的小さい。そこで、主記憶装置よりも低速だが容量が比較的大きい補助記憶装置（例えば、ＳＳＤ（Solid State Drive）やＨＤＤ（Hard Disk Drive）など）を主記憶装置と共に用いて、記憶容量を拡張することが多い。また、主記憶装置よりも低速だが補助記憶装置よりも高速である拡張記憶装置を、主記憶装置や補助記憶装置と共に用いて記憶容量を更に拡張することもある。
【０００３】
例えば、拡張記憶装置をファイルの一時記憶場所、仮想記憶管理におけるスワップエリアなどとして利用する情報処理装置の提案がある。提案の情報処理装置は、命令処理装置がアクセスする仮想アドレスを実アドレスに変換するためのアドレス変換テーブルを有する。アドレス変換テーブルは、仮想ページアドレスに対応する実ページアドレスと、実ページが主記憶装置に存在しているか、または拡張記憶装置に存在しているかを表示する拡張記憶存在ビット（ビットＥ）とを含むページテーブルワードをその要素とする。
【０００４】
この提案では、更に、ページテーブルワードは、ページが記憶装置上に存在しているかを示すページ存在ビットＰを含む。情報処理装置は、ビットＥの値によりページが主記憶装置に存在しているか拡張記憶装置に存在しているかを判定する他、ページへのアクセスの例外発生に応じて、ビットＥの値とビットＰの値との組み合わせによりページが外部記憶装置上にあるか否かを判定する。
【０００５】
また、特定の命令の所定オペランドのアドレス変換により得た実アドレスが拡張記憶装置の実アドレスか否かを確認する計算機の提案もある。提案の計算機では、この確認のためページテーブルのページ対応の各項に、割当実ページが拡張記憶装置か否かを示すフラグを設け、管理プログラムがページ割当処理時にそのフラグを設定しておくようにする。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開平５−２３３４５２号公報
【特許文献２】特開昭６３−２４４１５２号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
上記のように、主記憶装置の容量を、拡張記憶装置および補助記憶装置により補うことが考えられる。しかし、上記提案のように、データが、何れの種類の記憶装置に格納されているかを管理するために複数の管理情報（例えば、上記のビットＥやビットＰなど）を設けると、保持する情報量が増加する問題がある。また、処理対象の情報量が増すと処理ステップが増大して、データアクセスに伴うオーバーヘッドの要因になり得る。
【０００８】
１つの側面では、本発明は、簡易なデータ構造によりデータ位置を効率的に特定可能にするメモリ制御装置、メモリ制御プログラムおよびメモリ制御方法を提供することを目的とする。
【課題を解決するための手段】
【０００９】
１つの態様では、第１のメモリ、第１のメモリよりも低速の第２のメモリおよび第２のメモリよりも低速の第３のメモリにおけるデータ配置を制御するメモリ制御装置が提供される。メモリ制御装置は、記憶部と処理部とを有する。記憶部は、データが格納されたメモリに応じて第１の識別情報または第２の識別情報が設定されるフラグとデータの格納先のメモリ領域におけるデータが格納されたアドレスを示す情報とをデータに対応付けて記憶する。処理部は、第１のメモリまたは第２のメモリにデータを格納すると第１の識別情報をフラグに設定し、第３のメモリにデータを格納すると第２の識別情報をフラグに設定し、データにアクセスする際に、データに対応するフラグに第１の識別情報が設定されている場合、アドレスを示す情報に基づいて、第１のメモリおよび第２のメモリのうちデータの格納先のメモリを判定し、判定された格納先のメモリにおけるデータの格納位置を特定する。
【００１０】
また、１つの態様では、メモリ制御プログラムが提供される。
また、１つの態様では、メモリ制御方法が提供される。
【発明の効果】
【００１１】
１つの側面では、簡易なデータ構造によりデータ位置を効率的に特定可能にする。
【図面の簡単な説明】
【００１２】
【図１】第１の実施の形態のメモリ制御装置の例を示す図である。
【図２】第２の実施の形態のサーバのハードウェア例を示すブロック図である。
【図３】ＣＰＵの機能例を示すブロック図である。
【図４】スワップアウト／スワップインの例を示す図である。
【図５】ページテーブルの例を示す図である。
【図６】ページフレーム番号とメモリ空間との対応関係の例を示す図である。
【図７】メモリ管理の処理例を示すフローチャートである。
【図８】スワップアウト／スワップインの比較例を示す図である。
【図９】第３の実施の形態のページテーブルの例を示す図である。
【図１０】メモリ管理の処理例を示すフローチャートである。
【図１１】スワップイン制御の処理例を示すフローチャートである。
【図１２】第１スワップアウト制御の処理例を示すフローチャートである。
【図１３】第２スワップアウト制御の処理例を示すフローチャートである。
【図１４】第４の実施の形態のページテーブルの例を示す図である。
【図１５】スワップイン制御テーブルの例を示す図である。
【図１６】スワップアウト／スワップインの例を示す図である。
【発明を実施するための形態】
【００１３】
以下、本実施の形態について図面を参照して説明する。
［第１の実施の形態］
第１の実施の形態を説明する。
【００１４】
図１は、第１の実施の形態のメモリ制御装置の例を示す図である。
メモリ制御装置１０は、第１のメモリ１１、第２のメモリ１２、第３のメモリ１３、処理部１４および記憶部１５を有する。メモリ制御装置１０は、第１のメモリ１１、第２のメモリ１２および第３のメモリ１３におけるデータ配置を制御する。
【００１５】
第２のメモリ１２は第１のメモリ１１よりも低速である。すなわち、第１のメモリ１１は、第２のメモリ１２よりも高速である。第３のメモリ１３は第２のメモリ１２よりも低速である。すなわち、第２のメモリ１２は第３のメモリ１３よりも高速である。ここで、「低速」とは、単位時間当たりのデータ転送量が小さいことを意味する。「高速」とは、単位時間当たりのデータ転送量が大きいことを意味する。
【００１６】
具体的には、第１のメモリ１１は、主記憶装置（メインメモリ）である。主記憶装置の一例として、ＤＲＡＭ（Dynamic RAM）が挙げられる。第２のメモリ１２は、拡張記憶装置である。拡張記憶装置の一例として、ＳＣＭ（Storage Class Memory）が挙げられる。ＳＣＭとして、例えば、ＭＲＡＭ（Magnetoresistive RAM）が利用され得る。第３のメモリ１３は、補助記憶装置である。補助記憶装置の一例として、ＳＳＤやＨＤＤが挙げられる。第２のメモリ１２および第３のメモリ１３は、第１のメモリ１１に対するスワップ領域として用いられる。
【００１７】
なお、第１のメモリ１１、第２のメモリ１２および第３のメモリ１３は、メモリ制御装置１０に内蔵されていなくてもよい。すなわち、第１のメモリ１１、第２のメモリ１２および第３のメモリ１３は、メモリ制御装置１０の外部に接続されてもよい。
【００１８】
処理部１４は、第１のメモリ１１、第２のメモリ１２および第３のメモリ１３に対するアクセスを制御する処理を実行する。処理部１４は、ＣＰＵ、ＤＳＰ（Digital Signal Processor）、ＡＳＩＣ（Application Specific Integrated Circuit）、ＦＰＧＡ（Field Programmable Gate Array）などを含み得る。処理部１４はプログラムを実行するプロセッサでもよい。「プロセッサ」は、複数のプロセッサの集合（マルチプロセッサ）を含み得る。
【００１９】
記憶部１５は、処理部１４の処理に用いられる情報を記憶する。記憶部１５は、第１のメモリ１１、第２のメモリ１２および第３のメモリ１３とは別個に設けられた所定のバッファメモリでもよい。あるいは、記憶部１５は、例えば、第１のメモリ１１のメモリ領域のうちの所定の部分領域でもよい。
【００２０】
記憶部１５は、データが格納されたメモリに応じて第１の識別情報または第２の識別情報が設定されるフラグとデータの格納先のメモリ領域におけるデータが格納されたアドレスを示す情報とをデータに対応付けて記憶する。
【００２１】
例えば、記憶部１５は、テーブル２０を記憶する。テーブル２０は、エントリ番号（＃）、フラグ、および、アドレス情報の項目を含む。エントリ番号には、データを識別する番号が設定される。エントリ番号「Ｘ」に対応するデータを、「エントリ＃Ｘのデータ」と表記する。フラグは１ビットで表される情報である。フラグには、第１の識別情報または第２の識別情報が設定される。第１の識別情報は、例えば、「Ｔｒｕｅ」や「１」などである。第２の識別情報は、例えば、「Ｆａｌｓｅ」や「０」などである。アドレス情報には、エントリ番号に対応するデータが格納されたメモリ領域において、当該データが格納されたアドレスを示す情報が設定される。
【００２２】
処理部１４は、第１のメモリ１１または第２のメモリ１２（第１のメモリ１１および第２のメモリ１２の何れか一方）にデータを格納すると第１の識別情報をフラグに設定する。処理部１４は、第３のメモリ１３にデータを格納すると第２の識別情報をフラグに設定する。
【００２３】
例えば、データは、所定サイズのページを単位として、各メモリに格納される。一例として、１つのページのサイズを、１６進数表記で「０ｘ１０００」バイト（１０進数表記では「４０９６」バイト）とする。この場合、例えば、テーブル２０には、該当のメモリ領域の物理アドレスの下２桁を除去したアドレス情報が登録される。処理部１４は、当該アドレス情報の下２桁に「０ｘ０００」を付加する（すなわち、アドレス情報に「０ｘ１０００」を乗じる）ことで、該当ページが格納された領域の先頭の物理アドレスを求めることが可能である。
【００２４】
ここで、第１のメモリ１１および第２のメモリ１２に対するアドレス情報として、第１のメモリ１１のメモリ領域と、第２のメモリ１２のメモリ領域とが属するメモリ空間３０の物理アドレスに対応するアドレス情報が用いられる。すなわち、処理部１４は、メモリ空間３０の範囲３１を第１のメモリ１１に割り当て、当該アドレス空間の範囲３２を第２のメモリ１２に割り当てる。
【００２５】
図１の例では、範囲３１は、「０ｘ０００００００〜０ｘ００ＦＦＦＦＦ」である。また、図１の例では、範囲３２は、「０ｘ１００００００〜０ｘ１０ＦＦＦＦＦ」である。範囲３２の先頭アドレスは、メモリ空間３０の先頭アドレスから所定のオフセット（図１の例では「０ｘ１００００００」）を加算したアドレスである。当該オフセット「０ｘ１００００００」で示される物理アドレスは、例えば、第２のメモリ１２のメモリ領域の先頭アドレスに対応する。
【００２６】
例えば、処理部１４は、エントリ＃１のデータ（ページ）を、メモリ空間３０の物理アドレス「０ｘ００２１０００」を先頭アドレスとして、第１のメモリ１１に格納する。当該データの末端アドレスは「０ｘ００２１０００」となる。すると、処理部１４は、エントリ＃「１」に対して、フラグ「Ｔｒｕｅ」およびアドレス情報「０ｘ００２１」をテーブル２０に格納する。すなわち、処理部１４は、エントリ＃「１」のデータに対して、フラグ「Ｔｒｕｅ」をテーブル２０に設定し、アドレス情報「０ｘ００２１」をテーブル２０に記録する。
【００２７】
また、例えば、処理部１４は、エントリ＃２のデータ（ページ）を、メモリ空間３０の物理アドレス「０ｘ１０Ａ１０００」を先頭として、第２のメモリ１２に格納する。当該データの末端アドレスは「０ｘ１０Ａ１ＦＦＦ」となる。すると、処理部１４は、エントリ＃「２」に対して、フラグ「Ｔｒｕｅ」およびアドレス情報「０ｘ１０Ａ１」をテーブル２０に格納する。すなわち、処理部１４は、エントリ＃「２」のデータに対して、フラグ「Ｔｒｕｅ」をテーブル２０に設定し、アドレス情報「０ｘ１０Ａ１」をテーブル２０に記録する。
【００２８】
また、例えば、処理部１４は、エントリ＃３のデータ（ページ）を、第３のメモリ１３に格納する。すると、処理部１４は、エントリ＃「３」に対して、フラグ「Ｆａｌｓｅ」および第３のメモリ１３におけるエントリ＃「３」のデータを格納した物理アドレスに対応するアドレス情報「ｘｘｘｘ」を、テーブル２０に格納する。
【００２９】
次に、処理部１４が第１のメモリ１１、第２のメモリ１２および第３のメモリ１３に格納されたデータにアクセスする場合を説明する。
処理部１４は、データにアクセスする際に、当該データに対応するフラグを参照する。処理部１４は、フラグに第１の識別情報が設定されている場合、アクセス対象のデータが第１のメモリ１１または第２のメモリ１２に格納されていると判定する。また、処理部１４は、フラグに第２の識別情報が設定されている場合、アクセス対象のデータが第３のメモリ１３に格納されていると判定する。
【００３０】
上記のように、処理部１４は、当該フラグに第１の識別情報が設定されている場合、アクセス対象のデータが第１のメモリ１１または第２のメモリ１２に格納されていると判定できる。この場合、処理部１４は、更に、当該データに対して記憶部１５に格納されたアドレスを示す情報に基づいて、第１のメモリ１１および第２のメモリ１２のうちデータの格納先のメモリを判定する。
【００３１】
すなわち、処理部１４は、アクセス対象のデータに対してテーブル２０に格納されているアドレス情報に基づいて、当該データが、第１のメモリ１１または第２のメモリ１２のどちらに格納されているかを判定する。具体的には、前述のように、範囲３２のアドレス範囲は、メモリ空間３０の先頭アドレスに対して、所定オフセット「０ｘ１００００００」を加算したアドレスを先頭アドレスとする所定サイズの範囲である。したがって、処理部１４は、テーブル２０において、フラグ「Ｔｒｕｅ」のエントリに関し、アドレス情報に対応する物理アドレスが範囲３１に属するか、または、アドレス情報に対応する物理アドレスが範囲３２に属するかに応じて、格納先のメモリを判定する。処理部１４は、フラグ「Ｔｒｕｅ」のエントリのアドレス情報に対応する物理アドレスが範囲３１に属する場合、当該エントリのデータの格納先のメモリを第１のメモリ１１と判定する。一方、処理部１４は、フラグ「Ｔｒｕｅ」のエントリのアドレス情報に対応する物理アドレスが範囲３２に属する場合、当該エントリのデータの格納先のメモリを第２のメモリ１２と判定する。
【００３２】
更に、処理部１４は、当該アドレス情報に基づいて、データの格納先として判定された格納先のメモリにおけるデータの格納位置を特定する。具体的には、アドレス情報から求まる物理アドレスは、第１のメモリ１１の物理アドレス、または、第２のメモリ１２の物理アドレスに対応する。前述のように、範囲３１（物理アドレス範囲「０ｘ０００００００〜０ｘ００ＦＦＦＦＦ」）は、第１のメモリ１１のメモリ領域に対応する。また、例えば、範囲３２（物理アドレス範囲「０ｘ１００００００〜０ｘ１０ＦＦＦＦＦ」）は、第２のメモリ１２のメモリ領域に対応する。処理部１４は、範囲３１に対して求めたアクセス先の先頭物理アドレス（例えば、「０ｘ００２１０００」）により、第１のメモリ１１のアクセス位置（例えば、第１のメモリ１１の先頭から０ｘ００２１０００のオフセット位置）を特定可能である。あるいは、処理部１４は、範囲３２に対して求めたアクセス先の先頭物理アドレス（例えば、「０ｘ１０Ａ１０００」）により、第２のメモリ１２のアクセス位置（例えば、第２のメモリ１２の先頭から０ｘ００Ａ１０００のオフセット位置）を特定可能である。
【００３３】
そして、処理部１４は、特定した格納位置に格納されたデータにアクセスする。例えば、処理部１４は、当該データの読み出しや書き込みを行う。ここで、処理部１４は、第２のメモリ１２に格納されたデータにアクセスする場合、第１のメモリ１１への当該データのスワップインを省略して（当該スワップインを制限して）、第２のメモリ１２に格納された当該データに直接アクセスする。すなわち、処理部１４は、フラグに第１の識別情報が設定されたデータに対して第１のメモリ１１から第２のメモリ１２への階層移動（例えば、スワップアウト）を許可し、第２のメモリ１２から第１のメモリ１１への階層移動（例えば、スワップイン）を制限する。これにより、当該データのスワップインに伴うオーバーヘッドを削減できる利点がある。
【００３４】
なお、アクセス対象のデータに対応するフラグに第２の識別情報が設定されている場合、処理部１４は、当該フラグによりデータの格納先のメモリが第３のメモリ１３であると判定する。この場合、処理部１４は、当該データに対して記録されたアドレス情報をテーブル２０から取得し、当該アドレス情報に基づいて、第３のメモリ１３におけるアクセス対象のデータの格納位置を特定する。処理部１４は、第３のメモリ１３の特定した格納位置に格納されたデータにアクセスする。例えば、処理部１４は、該当のデータを第３のメモリ１３から読み出して、第１のメモリ１１に書き込み（スワップイン）、第１のメモリ１１に書き込んだ当該データにアクセスする。
【００３５】
より具体的には、処理部１４は、エントリ＃１のデータに対するアクセスを受け付ける。処理部１４は、テーブル２０を参照して、エントリ＃「１」に対応するフラグが「Ｔｒｕｅ」であることを確認する。処理部１４は、フラグが「Ｔｒｕｅ」であるため、エントリ＃「１」に対応するアドレス情報「０ｘ００２１」から、該当のデータの格納先のメモリを判定する。この場合、アドレス情報「０ｘ００２１」に対応する物理アドレス「０ｘ００２１０００」は、メモリ空間３０における範囲３１に属する。よって、処理部１４は、アクセス対象のデータが第１のメモリ１１に格納されていると判定する。そして、処理部１４は、第１のメモリ１１について、アドレス情報「０ｘ００２１」に対応する物理アドレス「０ｘ００２１０００」を先頭アドレスとして、所定サイズ（ページサイズ）のアドレス範囲に格納されたデータにアクセスする。
【００３６】
また、処理部１４は、エントリ＃２のデータに対するアクセスを受け付ける。処理部１４は、テーブル２０を参照して、エントリ＃「２」に対応するフラグが「Ｔｒｕｅ」であることを確認する。処理部１４は、フラグが「Ｔｒｕｅ」であるため、エントリ＃「２」に対応するアドレス情報「０ｘ１０Ａ１」から、該当のデータの格納先のメモリを判定する。この場合、アドレス情報「０ｘ１０Ａ１」に対応する物理アドレス「０ｘ１０Ａ１０００」は、メモリ空間３０における範囲３２に属する。よって、処理部１４は、アクセス対象のデータが第２のメモリ１２に格納されていると判定する。そして、処理部１４は、第２のメモリ１２について、物理アドレス「０ｘ１０Ａ１０００」を先頭アドレスとして、所定サイズ（ページサイズ）のアドレス範囲に格納されたデータにアクセスする。このとき、前述のように、処理部１４は、第１のメモリ１１へのスワップインを省略して、第２のメモリ１２に格納されたデータに直接アクセスする。
【００３７】
更に、処理部１４は、エントリ＃３のデータに対するアクセスを受け付ける。処理部１４は、テーブル２０を参照して、エントリ＃「３」に対応するフラグが「Ｆａｌｓｅ」であることを確認する。処理部１４は、フラグが「Ｆａｌｓｅ」であるため、エントリ＃「３」に対応するアドレス情報「ｘｘｘｘ」から、該当のデータの格納先のメモリを第３のメモリ１３と判定する。処理部１４は、アドレス情報「ｘｘｘｘ」に基づいて、第３のメモリ１３におけるアクセス対象のデータの格納位置を特定し、特定した格納位置に格納された当該データにアクセスする。このとき、処理部１４は、第３のメモリ１３から第１のメモリ１１へ該当のデータをスワップインする。処理部１４は、第１のメモリ１１にスワップインした当該データにアクセスする。処理部１４は、スワップインに伴って、テーブル２０のエントリ＃３に対応するフラグを「Ｔｒｕｅ」に設定し、アドレス情報を、スワップイン先を示すアドレス情報（メモリ空間３０における物理アドレスを示す情報）に更新する。
【００３８】
メモリ制御装置１０によれば、記憶部１５により、データが格納されたメモリに応じて第１の識別情報または第２の識別情報が設定されるフラグとデータの格納先のメモリ領域におけるデータが格納されたアドレスを示す情報とがデータに対応付けて記憶される。処理部１４により、第１のメモリ１１または第２のメモリ１２にデータが格納されると第１の識別情報がフラグに設定される。また、第３のメモリ１３にデータが格納されると第２の識別情報がフラグに設定される。データにアクセスする際に、データに対応するフラグに第１の識別情報が設定されている場合、アドレスを示す情報に基づいて、第１のメモリ１１および第２のメモリ１２のうちデータの格納先のメモリが判定される。そして、判定された格納先のメモリにおけるデータの格納位置が特定される。
【００３９】
これにより、簡易なデータ構造によりデータ位置を効率的に特定可能になる。例えば、データが、何れの種類の記憶装置に格納されているかを管理するために複数の管理情報（例えば、複数のビット（あるいは、複数のフラグ）など）を設けると、保持する情報量が増加する問題がある。この問題は、各メモリの容量が増加してページ数が増すほど顕著になる。また、処理対象の情報量が増すと処理ステップが増大して、データアクセスに伴うオーバーヘッドの要因になり得る。
【００４０】
そこで、メモリ制御装置１０は、単一のフラグに設定される第１の識別情報によって第１のメモリ１１または第２のメモリ１２にデータが格納されたことを表し、第２の識別情報によって第３のメモリ１３にデータが格納されたことを表す。そして、データへのアクセス時には、当該フラグが第１の識別情報を示す場合、テーブル２０に記録されたアドレス情報によって、データの格納先のメモリが第１のメモリ１１であるか、第２のメモリ１２であるかを判定し、また、当該データの格納位置を特定する。このため、データの格納先のメモリを特定するために複数のビット（あるいは複数のフラグ）を設けずに済み、メモリ制御装置１０により保持する情報量の増加を抑えられる。また、処理対象の情報量を抑えられるので、処理ステップの増大を抑制し、データアクセスに伴うオーバーヘッドを低減できる。その結果、データアクセスを高速化できる。
【００４１】
また、前述のように、処理部１４は、第２のメモリ１２にアクセスする場合、第１のメモリ１１へのスワップインを行わずに、第２のメモリ１２に直接アクセスする。近年では、第２のメモリ１２として、第３のメモリ１３よりも大幅に高速なメモリが利用可能であり、スワップインを省略することで、スワップインに伴うオーバーヘッドを低減し、より高速なデータアクセスを実現できる。
【００４２】
［第２の実施の形態］
次に、第２の実施の形態を説明する。
図２は、第２の実施の形態のサーバのハードウェア例を示すブロック図である。
【００４３】
サーバ１００は、ＣＰＵ１０１、ＤＲＡＭ１０２、ＳＣＭ１０３、ＳＳＤ１０４、画像信号処理部１０５、入力信号処理部１０６、媒体リーダ１０７および通信インタフェース１０８を有する。なお、サーバ１００は、第１の実施の形態のメモリ制御装置１０の一例である。また、ＣＰＵ１０１は、第１の実施の形態の処理部１４の一例である。
【００４４】
ＣＰＵ１０１は、プログラムの命令を実行するプロセッサである。ＣＰＵ１０１は、ＳＳＤ１０４に記憶されたプログラムやデータの少なくとも一部をＤＲＡＭ１０２にロードし、プログラムを実行する。なお、ＣＰＵ１０１は複数のプロセッサコアを含んでもよい。また、サーバ１００は複数のプロセッサを有してもよい。以下で説明する処理は複数のプロセッサまたはプロセッサコアを用いて並列に実行されてもよい。また、複数のプロセッサの集合を「マルチプロセッサ」または単に「プロセッサ」と言うことがある。
【００４５】
ＤＲＡＭ１０２は、サーバ１００の主記憶装置であり、ＣＰＵ１０１が実行するプログラムやＣＰＵ１０１が演算に用いるデータを一時的に記憶する揮発性の半導体メモリである。ＤＲＡＭ１０２は、第１の実施の形態の第１のメモリ１１の一例である。ＤＲＡＭ１０２を第１の種類のメモリと言うこともできる。
【００４６】
ＳＣＭ１０３は、サーバ１００の拡張記憶装置である。ＳＣＭ１０３は、ＤＲＡＭ１０２に対するスワップ領域を提供する。ＳＣＭ１０３は、例えば、ＭＲＡＭである。ＳＣＭ１０３は、第１の実施の形態の第２のメモリ１２の一例である。ＳＣＭ１０３を第２の種類のメモリと言うこともできる。
【００４７】
ＳＳＤ１０４は、サーバ１００の補助記憶装置であり、ＯＳ（Operating System）やミドルウェアやアプリケーションソフトウェアなどのソフトウェアのプログラム、および、データを記憶する不揮発性の記憶装置である。また、ＳＳＤ１０４は、ＤＲＡＭ１０２に対するスワップ領域を提供する。ＳＳＤ１０４は、ＳＣＭ１０３に対するスワップ領域として用いられることもある。ＳＳＤ１０４は、第１の実施の形態の第３のメモリ１３の一例である。ＳＳＤ１０４を第３の種類のメモリと言うこともできる。
【００４８】
ここで、ＤＲＡＭ１０２、ＳＣＭ１０３およびＳＳＤ１０４のうち、アクセス速度は、ＤＲＡＭ１０２が最も速く、次にＳＣＭ１０３が速く、ＳＳＤ１０４が最も遅い。一方、ＤＲＡＭ１０２、ＳＣＭ１０３およびＳＳＤ１０４のうち、記憶容量は、ＳＳＤ１０４が最も大きく、次にＳＣＭ１０３が大きく、ＤＲＡＭ１０２が最も小さい。
【００４９】
画像信号処理部１０５は、ＣＰＵ１０１からの命令に従って、サーバ１００に接続されたディスプレイ２０１に画像を出力する。ディスプレイ２０１としては、ＣＲＴ（Cathode Ray Tube）ディスプレイ、液晶ディスプレイ（ＬＣＤ：Liquid Crystal Display）、有機ＥＬ（ＯＥＬ：Organic Electro-Luminescence）ディスプレイなど、任意の種類のディスプレイを用いることができる。
【００５０】
入力信号処理部１０６は、サーバ１００に接続された入力デバイス２０２から入力信号を取得し、ＣＰＵ１０１に出力する。入力デバイス２０２としては、マウス・タッチパネル・タッチパッド・トラックボールなどのポインティングデバイス、キーボード、リモートコントローラ、ボタンスイッチなどを用いることができる。また、サーバ１００に、複数の種類の入力デバイスが接続されていてもよい。
【００５１】
媒体リーダ１０７は、記録媒体２０３に記録されたプログラムやデータを読み取る読み取り装置である。記録媒体２０３として、例えば、磁気ディスク、光ディスク、光磁気ディスク（ＭＯ：Magneto-Optical disk）、半導体メモリなどを使用できる。磁気ディスクには、フレキシブルディスク（ＦＤ：Flexible Disk）やＨＤＤが含まれる。光ディスクには、ＣＤ（Compact Disc）やＤＶＤ（Digital Versatile Disc）が含まれる。
【００５２】
媒体リーダ１０７は、例えば、記録媒体２０３から読み取ったプログラムやデータを、ＤＲＡＭ１０２、ＳＣＭ１０３およびＳＳＤ１０４などの他の記録媒体にコピーする。読み取られたプログラムは、例えば、ＣＰＵ１０１によって実行される。なお、記録媒体２０３は可搬型記録媒体であってもよく、プログラムやデータの配布に用いられることがある。また、記録媒体２０３やＳＳＤ１０４を、コンピュータ読み取り可能な記録媒体と言うことがある。
【００５３】
通信インタフェース１０８は、ネットワーク２０４に接続され、ネットワーク２０４を介して他のコンピュータと通信を行うインタフェースである。通信インタフェース１０８は、例えば、スイッチやルータなどの通信装置とケーブルで接続される。
【００５４】
図３は、ＣＰＵの機能例を示すブロック図である。
ＣＰＵ１０１は、命令実行部１１０、ＭＭＵ（Memory Management Unit）１２０、ＤＤＲ  Ｉ／Ｆ（Double-Data-Rate InterFace）１３０およびＰＣＩｅ  Ｉ／Ｆ（Peripheral Component Interconnect express InterFace）１４０，１５０を有する。
【００５５】
命令実行部１１０は、ＣＰＵ１０１のプロセッサコアである。命令実行部１１０は、アプリケーションプログラムを実行することで、アプリケーション１１１の機能を発揮する。アプリケーション１１１は、ＤＲＡＭ１０２、ＳＣＭ１０３およびＳＳＤ１０４に格納されたデータにアクセスし、当該データに基づいて、アプリケーション１１１が提供する機能に応じた所定の処理を実行する。また、命令実行部１１０は、メモリ制御プログラムを実行することで、メモリ管理部１１２の機能を発揮する。
【００５６】
メモリ管理部１１２は、データをページの単位で管理する。一例として、１つのページのサイズは、０ｘ１０００バイト（４０９６バイト）であるとする。また、メモリ管理部１１２は、ページの格納先の記憶デバイスを管理する。メモリ管理部１１２は、ＤＲＡＭ１０２からＳＣＭ１０３へのスワップアウト、ＳＣＭ１０３からＳＳＤ１０４へのスワップアウト、および、ＳＳＤ１０４からＤＲＡＭ１０２へのスワップインを制御する。
【００５７】
メモリ管理部１１２は、アプリケーション１１１によるメモリアクセスの要求を受け付ける。メモリ管理部１１２は、当該要求に応じて、ＭＭＵ１２０を介したＤＲＡＭ１０２またはＳＣＭ１０３へのメモリアクセス、または、ＭＭＵ１２０を介さずにＰＣＩｅ  Ｉ／Ｆ１５０を介したＳＳＤ１０４へのブロックＩ／Ｏ（Input/Output）を行う。
【００５８】
メモリ管理部１１２は、ＳＣＭ１０３に格納されたページにアクセスする際、ＳＣＭ１０３からＤＲＡＭ１０２への当該ページのスワップインを行わずに、ＳＣＭ１０３に直接アクセスするようＭＭＵ１２０を制御する。
【００５９】
ＭＭＵ１２０は、メモリ管理部１１２により指示されたメモリアクセスを処理する。ＭＭＵ１２０は、メモリ管理部１１２の指示に応じて、ＤＤＲ  Ｉ／Ｆ１３０を介したＤＲＡＭ１０２へのメモリアクセス、または、ＰＣＩｅ  Ｉ／Ｆ１４０を介したＳＣＭ１０３へのＭＭＩＯ（Memory-mapped Input/Output）を行う。ＭＭＩＯの技術を用いることで、ＤＲＡＭ１０２のメモリ領域とＳＣＭ１０３のメモリ領域とを合わせたメモリ領域に属する単位領域に対して物理アドレスを割り当て、当該物理アドレスによりＤＲＡＭ１０２およびＳＣＭ１０３へのアクセスを可能にする。
【００６０】
ＤＤＲ  Ｉ／Ｆ１３０は、Ｌｏａｄ／Ｓｔｏｒｅ命令を用いて、ＤＲＡＭ１０２にアクセスする。Ｌｏａｄ命令は、指定されたＤＲＡＭ１０２の物理アドレスからデータ（ページ）を読み出し、ＣＰＵ１０１の所定のキャッシュ（図示を省略している）に格納する。Ｓｔｏｒｅ命令は、キャッシュに格納されたデータを指定されたＤＲＡＭ１０２の物理アドレスへ書き込む。
【００６１】
ＰＣＩｅ  Ｉ／Ｆ１４０は、Ｌｏａｄ／Ｓｔｏｒｅ命令を用いて、ＳＣＭ１０３にアクセスする。Ｌｏａｄ命令は、指定されたＳＣＭ１０３の物理アドレスからデータ（ページ）を読み出し、ＣＰＵ１０１の所定のキャッシュに格納する。Ｓｔｏｒｅ命令は、キャッシュに格納されたデータを、指定されたＳＣＭ１０３の物理アドレスへ書き込む。
【００６２】
ＰＣＩｅ  Ｉ／Ｆ１５０は、Ｒｅａｄ／Ｗｒｉｔｅ命令を用いて、ＳＳＤ１０４にアクセスする。Ｒｅａｄ命令は、指定されたＳＳＤ１０４の物理アドレスからデータ（ページ）を読み出す。メモリ管理部１１２は、読み出されたデータをＤＲＡＭ１０２に格納する。Ｗｒｉｔｅ命令は、ＳＣＭ１０３に格納されたデータを、指定されたＳＳＤ１０４の物理アドレスへ書き込む。
【００６３】
ここで、ＣＰＵ１０１を第１の実施の形態のメモリ制御装置１０の一例と考えてもよい（この場合、命令実行部１１０を第１の実施の形態の処理部１４の一例と考えることができる）。
【００６４】
図４は、スワップアウト／スワップインの例を示す図である。
ＣＰＵ１０１は、Ｌｏａｄ／Ｓｔｏｒｅ命令を用いて、ＤＲＡＭ１０２にアクセスする。ＣＰＵ１０１からＤＲＡＭ１０２に対するアクセスは直接アクセスである。ＣＰＵ１０１は、Ｌｏａｄ／Ｓｔｏｒｅ命令を用いて、ＳＣＭ１０３にアクセスする。ＣＰＵ１０１からＳＣＭ１０３に対するアクセスは直接アクセスである。ＤＲＡＭ１０２の記憶領域（フレーム）を新たなページに割り当てる際、ＤＲＡＭ１０２に空き領域がない場合、ＤＲＡＭ１０２に格納されたページが、ＳＣＭ１０３にスワップアウトされる。また、ＳＣＭ１０３に新たなページを割り当てる際、ＳＣＭ１０３に空き領域がない場合、ＳＣＭ１０３に格納されたページが、ＳＳＤ１０４にスワップアウトされる。ＤＲＡＭ１０２からＳＣＭ１０３へのスワップアウト、および、ＳＣＭ１０３からＳＳＤ１０４へのスワップアウトのアルゴリズムには、ＬＲＵ（Least Recently Used）が用いられる。ＬＲＵによれば、該当のメモリに格納されているページのうち、最後のアクセスから最も長い時間が経過したページがスワップアウト対象として選択される。更に、ＣＰＵ１０１がＳＳＤ１０４に格納されたページにアクセスする際、ＳＳＤ１０４に格納されたページがＤＲＡＭ１０２にスワップインされる。そして、ＣＰＵ１０１は、ＤＲＡＭ１０２に格納されたページにＬｏａｄ／Ｓｔｏｒｅ命令を用いてアクセスする。
【００６５】
メモリ管理部１１２は、ページの格納先をページテーブルによって管理する。次に、ページテーブルについて説明する。
図５は、ページテーブルの例を示す図である。
【００６６】
ページテーブル１６０は、例えば、ＭＭＵ１２０内のバッファに格納される。ページテーブル１６０は、ＤＲＡＭ１０２の所定の領域に格納されてもよい。ページテーブル１６０は、第１の実施の形態のテーブル２０に対応する。ページテーブル１６０は、エントリ番号、ページフレーム番号（ＰＦＮ：Page Frame Number）および有効フラグ（Ｖ）の項目を含む。
【００６７】
エントリ番号は、ページテーブル１６０のエントリ（ページテーブル１６０における１つのレコード）を識別する番号である。ページフレーム番号は、ページが格納された記憶領域（フレーム）の先頭の物理アドレスを示す情報（アドレス情報）である。以下の説明では、ページフレーム番号を「ＰＦＮ」と略記することがある。有効フラグは、ページが、ＤＲＡＭ１０２またはＳＣＭ１０３に格納されているか否かを示す情報である。有効フラグ「１」は、ページが、ＤＲＡＭ１０２またはＳＣＭ１０３に格納されていることを示す。有効フラグ「０」は、ページが、ＤＲＡＭ１０２およびＳＣＭ１０３の何れにも格納されていないことを示す。ＳＳＤ１０４に格納されたページに対しては、有効フラグ「０」が設定されることになる。
【００６８】
すなわち、ページテーブルのエントリには、有効フラグ「１」の場合、ＤＲＡＭ１０２の物理アドレスを示すページフレーム番号、または、ＳＣＭ１０３の物理アドレスを示すページフレーム番号が設定される。また、ＳＳＤ１０４にスワップアウトされたページに対しては、有効フラグとして「０」が、ページフレーム番号として「スワップファイル内のアドレス」がそれぞれ設定される。
【００６９】
また、ページテーブル１６０の各エントリ（例えば、エントリ番号）は、アプリケーション１１１が認識する仮想アドレスに対応付けられる。アプリケーション１１１は、メモリ管理部１１２に対してアクセス先の仮想アドレスを指定する。すると、メモリ管理部１１２は、指定された仮想アドレスに対応するエントリをページテーブル１６０から検索する。そして、メモリ管理部１１２は、当該エントリに含まれる有効フラグおよびページフレーム番号に基づいて、アクセス先の記憶デバイスおよび当該記憶デバイスにおける物理アドレスを特定する。
【００７０】
例えば、ページテーブル１６０には、エントリ番号「＃０００５２」、ページフレーム番号「０ｘ００００００８００」、有効フラグ「１」というエントリが登録される。このエントリは、エントリ番号「＃０００５２」に対応するページに対する有効フラグが「１」であり、ページフレーム番号が「０ｘ００００００８００」であることを示す。
【００７１】
また、ページテーブル１６０には、エントリ番号「＃００１６０」、ページフレーム番号「０ｘ０１００００Ａ００」、有効フラグ「１」というエントリが登録される。このエントリは、エントリ番号「＃００１６０」に対応するページに対する有効フラグが「１」であり、ページフレーム番号が「０ｘ０１００００Ａ００」であることを示す。
【００７２】
また、ページテーブル１６０には、エントリ番号「＃００２５０」、ページフレーム番号「スワップファイル内のアドレスＸ」、有効フラグ「０」というエントリが登録される。このエントリは、エントリ番号「＃００２５０」に対応するページに対する有効フラグが「０」であり、ページフレーム番号が「スワップファイル内のアドレスＸ」であることを示す。
【００７３】
なお、ページテーブル１６０には上記の情報に限らず、他の情報が格納されてもよい。例えば、該当のページに対するＷｒｉｔｅ／Ｒｅａｄの制限を示す情報や、アクセス権限を示す情報などが格納され得る。
【００７４】
また、ページテーブル１６０がＭＭＵ１２０内のバッファに格納される場合、当該バッファは、第１の実施の形態の記憶部１５の一例と考えることができる。ページテーブル１６０がＤＲＡＭ１０２の所定のメモリ領域に格納される場合、当該所定のメモリ領域は第１の実施の形態の記憶部１５の一例と考えることができる。
【００７５】
図６は、ページフレーム番号とメモリ空間との対応関係の例を示す図である。
例えば、メモリ管理部１１２は、ＤＲＡＭ１０２およびＳＣＭ１０３へのアクセスにメモリ空間４０に属する物理アドレスを用いる。例えば、メモリ空間４０は、先頭アドレスが「０ｘ００００００００００００」であり、終端アドレスが「０ｘＦＦＦＦＦＦＦＦＦＦＦＦ」である。メモリ空間４０のうち、部分空間４１は、ＤＲＡＭ１０２の記憶領域に対応する。例えば、部分空間４１に相当する物理アドレス範囲は、「０ｘ００００００００００００〜０ｘ００００００ＦＦＦＦＦＦ」である。また、メモリ空間４０のうち、部分空間４２は、ＳＣＭ１０３の記憶領域に対応する。例えば、部分空間４２に相当する物理アドレス範囲は、「０ｘ０１００００００００００〜０ｘ０１０００１ＦＦＦＦＦＦ」である。
【００７６】
前述のように、ページサイズは、０ｘ１０００バイトである。この場合、例えば、ページテーブル１６０の「＃０００５２」のエントリにおけるページフレーム番号「０ｘ００００００８００」が示す物理アドレス（フレームの先頭アドレス）は、「０ｘ００００００８０００００」である。当該フレームの終端アドレスは、「０ｘ００００００８００ＦＦＦ」である。すなわち、「＃０００５２」のエントリに対応する物理アドレスは、部分空間４１に属する。よって、当該「＃０００５２」のエントリに対応するページは、ＤＲＡＭ１０２に格納されていることになる。
【００７７】
また、例えば、ページテーブル１６０の「＃００１６０」のエントリにおけるページフレーム番号「０ｘ０１００００Ａ００」が示す物理アドレス（フレームの先頭アドレス）は、「０ｘ０１００００Ａ０００００」である。当該フレームの終端アドレスは、「０ｘ０１００００Ａ００ＦＦＦ」である。すなわち、「＃００１６０」のエントリに対応する物理アドレスは、部分空間４２に属する。よって、当該「＃００１６０」のエントリに対応するページは、ＳＣＭ１０３に格納されていることになる。
【００７８】
ここで、以下の説明では、ページテーブル１６０に格納されるページフレーム番号のうち、ＤＲＡＭ１０２に対応する部分空間４１に属するページフレーム番号を「ＤＲＡＭ物理フレーム番号」と言うことがある。また、ページテーブル１６０に格納されるページフレーム番号のうち、ＳＣＭ１０３に対応する部分空間４２に属するページフレーム番号を「ＳＣＭ物理フレーム番号」と言うことがある。
【００７９】
次に、メモリ管理部１１２によるメモリ管理の処理手順を説明する。
図７は、メモリ管理の処理例を示すフローチャートである。
メモリ管理部１１２は、アプリケーション１１１が起動されると、アプリケーション１１１が停止されるまで下記の手順を継続して実行する。
【００８０】
（Ｓ１０）アプリケーション１１１は、メモリ管理部１１２にメモリを要求する。メモリ管理部１１２は、メモリの要求を受け付ける。
（Ｓ１１）メモリ管理部１１２は、アプリケーション１１１にページを割り当てる。メモリ管理部１１２は、ページテーブル１６０に割り当てたページの情報を登録する。この段階では、アプリケーション１１１に割り当てられたページに関して、有効フラグ（Ｖ）およびページフレーム番号（ＰＦＮ）に初期値が登録される。有効フラグ（Ｖ）の初期値は「０」である。ページフレーム番号（ＰＦＮ）の初期値は「０」である。例えば、メモリ管理部１１２は、割り当てたページに対応する仮想アドレスをアプリケーション１１１に通知してもよい。
【００８１】
（Ｓ１２）アプリケーション１１１は、メモリに対するアクセスを行う。メモリ管理部１１２は、アプリケーション１１１によるメモリアクセスを受け付ける。例えば、アプリケーション１１１は、メモリ管理部１１２により割り当てられたページに対応する仮想アドレスを指定して、メモリに対するアクセスをメモリ管理部１１２に要求する。前述のように仮想アドレスは、例えば、ページテーブル１６０のエントリ番号に対応付けられている。このため、メモリ管理部１１２は、仮想アドレスに基づいて、要求されたページに対応するページテーブル１６０のエントリを特定することができる。
【００８２】
（Ｓ１３）メモリ管理部１１２は、ページテーブル１６０を参照して、要求されたページに対応する有効フラグが１（Ｖ＝１）であるか否かを判定する。Ｖ＝１の場合、ステップＳ２１に処理が進む。Ｖ＝０の場合、ステップＳ１４に処理が進む。
【００８３】
（Ｓ１４）メモリ管理部１１２は、ＤＲＡＭ１０２に空きがあるか否かを判定する。ＤＲＡＭ１０２に空きがある場合、ステップＳ１８に処理が進む。ＤＲＡＭ１０２に空きがない場合、ステップＳ１５に処理が進む。
【００８４】
（Ｓ１５）メモリ管理部１１２は、ＳＣＭ１０３に空きがあるか否かを判定する。ＳＣＭ１０３に空きがある場合、ステップＳ１６に処理が進む。ＳＣＭ１０３に空きがない場合、ステップＳ１７に処理が進む。
【００８５】
（Ｓ１６）メモリ管理部１１２は、ＤＲＡＭ１０２のページをＬＲＵによりＳＣＭ１０３にスワップアウトする。メモリ管理部１１２は、スワップアウトしたページについて、ページテーブル１６０の情報を更新する。具体的には、メモリ管理部１１２は、該当のページの有効フラグを「１」（Ｖ＝１）のまま維持する（当該ページのスワップアウト元はＤＲＡＭ１０２であり、有効フラグは「１」であったため）。また、メモリ管理部１１２は、該当のページのページフレーム番号（ＰＦＮ）を、スワップアウト元のＤＲＡＭ物理フレーム番号からスワップアウト先のＳＣＭ物理フレーム番号に変更する。そして、ステップＳ１８に処理が進む。
【００８６】
（Ｓ１７）メモリ管理部１１２は、ＳＣＭ１０３のページをＬＲＵによりＳＳＤ１０４にスワップアウトする。メモリ管理部１１２は、スワップアウトしたページについて、ページテーブル１６０の情報を更新する。具体的には、メモリ管理部１１２は、該当のページの有効フラグを「１」（Ｖ＝１）から「０」（Ｖ＝０）に更新する。また、メモリ管理部１１２は、該当のページのページフレーム番号（ＰＦＮ）を、スワップアウト元のＳＣＭ物理フレーム番号からＳＳＤ１０４に格納されたスワップファイル内のアドレス（スワップファイル内アドレス）に変更する。そして、ステップＳ１６に処理が進む。
【００８７】
（Ｓ１８）メモリ管理部１１２は、アクセス要求されたページのページフレーム番号（ＰＦＮ）が「０」以外（ＰＦＮ≠０）であるか否かを判定する。ＰＦＮが「０」以外（ＰＦＮ≠０）である場合、ステップＳ１９に処理が進む。ＰＦＮ＝０の場合、ステップＳ２０に処理が進む。なお、ステップＳ１８でＰＦＮ≠０の場合、該当のページがＳＳＤ１０４にスワップアウトされていることを意味する。また、ステップＳ１８でＰＦＮ＝０の場合、該当のページに対してＤＲＡＭ領域を未割り当てであることを意味する。
【００８８】
（Ｓ１９）メモリ管理部１１２は、アクセス要求されたページをＳＳＤ１０４からＤＲＡＭ１０２にスワップインする。メモリ管理部１１２は、スワップインしたページについて、ページテーブル１６０の情報を更新する。具体的には、メモリ管理部１１２は、該当のページの有効フラグを「０」（Ｖ＝０）から「１」（Ｖ＝１）に更新する。また、メモリ管理部１１２は、該当のページのページフレーム番号（ＰＦＮ）を、スワップイン元のスワップファイル内アドレスから、スワップイン先のＤＲＡＭ物理フレーム番号に変更する。そして、ステップＳ２１に処理が進む。
【００８９】
（Ｓ２０）メモリ管理部１１２は、アクセス要求されたページにＤＲＡＭ１０２のフレームを割り当てる。メモリ管理部１１２は、当該ページについて、ページテーブル１６０の情報を更新する。具体的には、メモリ管理部１１２は、該当のページの有効フラグを「０」（Ｖ＝０）から「１」（Ｖ＝１）に更新する。また、メモリ管理部１１２は、該当のページのページフレーム番号「ＰＦＮ」を、「０」（初期値）から、今回割り当てたＤＲＡＭ物理フレーム番号に変更する。そして、ステップＳ２１に処理が進む。
【００９０】
（Ｓ２１）メモリ管理部１１２は、ＤＲＡＭ１０２またはＳＣＭ１０３に対するメモリアクセスを実行する。具体的には、メモリ管理部１１２は、アプリケーション１１１の書き込み要求に応じて、ＤＲＡＭ１０２またはＳＣＭ１０３に格納されたページに対する書き込みを行い、書き込み結果をアプリケーション１１１に通知する。また、メモリ管理部１１２は、アプリケーション１１１からの読み出し要求に応じて、ＤＲＡＭ１０２またはＳＣＭ１０３に格納されたページの読み出しを行い、読み出し結果をアプリケーション１１１に通知する。そして、ステップＳ１２に処理が進む。
【００９１】
なお、ステップＳ２１では、ステップＳ１３  Ｙｅｓの場合に、メモリ管理部１１２は、ＳＣＭ１０３に対する直接アクセスを行うことがある。ステップＳ１３  Ｙｅｓ（アクセス先ページの有効フラグが「１」）の場合、メモリ管理部１１２は、図６で例示したように、ページフレーム番号に応じて、アクセス先ページが、ＤＲＡＭ１０２およびＳＣＭ１０３のどちらに格納されているかを判定する。そして、メモリ管理部１１２は、当該ページフレーム番号に基づいて、ＳＣＭ１０３におけるアクセス先ページの格納位置を特定する。
【００９２】
このように、メモリ管理部１１２は、アクセス先ページの有効フラグが「１」の場合に、ページテーブル１６０に格納されたページフレーム番号からＤＲＡＭ１０２またはＳＣＭ１０３の何れに該当のページが格納されているかを判定する。そして、メモリ管理部１１２は、ページフレーム番号に基づいて、格納先として判定されたＤＲＡＭ１０２またはＳＣＭ１０３のうち、該当のページを格納している格納位置を特定し、当該ページに対する直接アクセスを行う。
【００９３】
また、メモリ管理部１１２は、ＳＣＭ１０３にページを格納した場合に、有効フラグを「１」としながら、ページフレーム番号にＳＣＭ物理フレーム番号を設定する。この操作により、メモリ管理部１１２は、アプリケーション１１１により取得済の仮想アドレスを変更することなく、ＤＲＡＭ１０２からＳＣＭ１０３へアクセス先を変更することができ、ＳＣＭ１０３に直接アクセス可能になる。
【００９４】
図８は、スワップアウト／スワップインの比較例を示す図である。
ＣＰＵ１０１がＳＣＭ１０３に直接アクセスしない構成も考えられる。例えば、ＣＰＵ１０１は、Ｌｏａｄ／Ｓｔｏｒｅ命令を用いて、ＤＲＡＭ１０２に対するアクセスのみを行い、ＳＣＭ１０３に格納されたページについては、ＤＲＡＭ１０２へスワップインした後に、ＤＲＡＭ１０２に格納された当該ページにアクセスする。ところが、この場合、ＳＣＭ１０３に格納されたページにアクセスする際、ＤＲＡＭ１０２へのスワップインによるオーバーヘッドが問題となる。近年では、ＳＳＤ１０４に比べて大幅に高速な記憶デバイスがＳＣＭ１０３として利用可能になってきている。このため、ＳＣＭ１０３からＤＲＡＭ１０２に対するスワップインを行っていると、当該スワップインにより、データアクセスの性能が低下する可能性がある。このため、図６，７で例示したように、ＣＰＵ１０１は、ＳＣＭ１０３に対しても直接アクセスを行うことで、ＳＣＭ１０３からＤＲＡＭ１０２へのスワップインに伴うオーバーヘッドを削減し、データアクセスを高速化できる。
【００９５】
このとき、ページの有効フラグが「１」であるか否かによって、スワップインなしで当該ページにアクセス可能であるか否かを管理でき、物理アドレスに対応するページフレーム番号によって、当該ページの格納先がＤＲＡＭ１０２かＳＣＭ１０３かを管理できる。このため、例えば、単一の有効フラグとページフレーム番号との組み合わせという簡便なスワップの仕組みをそのまま利用することができる。このため、ＤＲＡＭ１０２およびＳＣＭ１０３に対する直接アクセスの機能を、簡易なデータ構造によって実現でき、ページテーブル１６０のサイズの増大を抑えられる。また、当該機能を実現するための処理ステップの複雑化を回避できる。その結果、データアクセスに伴うオーバーヘッドを更に削減でき、データアクセスを高速化できる。
【００９６】
［第３の実施の形態］
次に、第３の実施の形態を説明する。前述の第２の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【００９７】
ここで、第３の実施の形態のサーバのハードウェア例および機能例は、図２，３で例示した第２の実施の形態のサーバ１００のハードウェア例および機能例と同様である。そこで、第３の実施の形態でも図２，３で例示した名称・符号と同じ名称・符号を用いる。
【００９８】
メモリ管理部１１２は、各ページのデータ特性に応じて、該当のページの格納先を、ＳＣＭ１０３を優先とするか、ＳＳＤ１０４を優先とするかを制御可能にすることが考えられる。例えば、アクセス頻度の比較的少ない一部のページを、ＳＣＭ１０３やＳＳＤ１０４に、優先的に格納することで、ＤＲＡＭ１０２の使用領域を低減し、スワップアウトやスワップインに伴うオーバーヘッドを一層軽減できるからである。
【００９９】
図９は、第３の実施の形態のページテーブルの例を示す図である。
メモリ管理部１１２は、ページテーブル１６０に代えて、ページテーブル１７０を用いる。ページテーブル１７０は、エントリ番号、ページフレーム番号（ＰＦＮ）、有効フラグ（Ｖ）およびデータ特性（Ｎ）の項目を含む。ページテーブル１７０は、データ特性の項目を有する点で、第２の実施の形態のページテーブル１６０と異なる。エントリ番号、ページフレーム番号および有効フラグの項目に登録される情報は、ページテーブル１６０の同名の項目に登録される情報と同様であるため説明を省略する。
【０１００】
データ特性の項目には、該当のページの格納先を、ＳＣＭ１０３を優先（「ＳＣＭ優先」）とするか、ＳＳＤ１０４を優先（「ＳＳＤ優先」）とするかを示す情報が登録される。また、データ特性の項目には、第２の実施の形態の図７で説明したスワップイン／スワップアウトを行う対象のページであることを示す情報（「通常」）も登録され得る。データ特性の項目には、アプリケーション１１１にページが割り当てられた際に、アプリケーション１１１の指示に応じて、メモリ管理部１１２が予め設定を行う。
【０１０１】
ここで、各データ特性に対するメモリ管理部１１２による具体的なメモリの階層制御は次の通りである。「通常」では、メモリ管理部１１２は、ＤＲＡＭ１０２、ＳＣＭ１０３、ＳＳＤ１０４の順にページを移動させる。「ＳＣＭ優先」では、メモリ管理部１１２は、ＳＳＤ１０４に移動させるページ選択を行う際に、ＳＣＭ優先でないページを優先的に選択し、ＳＣＭ優先でないページがない場合に、ＳＣＭ優先のページをＳＳＤ１０４へ移動させる。なお、メモリ管理部１１２は、ＳＣＭ優先のページをＳＳＤ１０４へ移動させた場合、次のアクセスで当該ページをＳＣＭ１０３に移動させる。「ＳＳＤ優先」では、メモリ管理部１１２は、ＤＲＡＭ１０２からスワップアウトする際に、ＳＣＭ１０３を経由せずに、ＳＳＤ１０４にスワップアウトする。
【０１０２】
例えば、ページテーブル１７０には、エントリ番号「＃０００５２」、ページフレーム番号「０ｘ００００００８００」、有効フラグ「１」、データ特性「ＳＣＭ優先」というエントリが登録される。このエントリは、エントリ番号「＃０００５２」に対応するページに対する有効フラグが「１」であり、ページフレーム番号が「０ｘ００００００８００」であることを示す。また、当該ページをＳＣＭ１０３に優先的に格納することを示す。
【０１０３】
また、ページテーブル１７０には、エントリ番号「＃００１６０」、ページフレーム番号「０ｘ０１００００Ａ００」、有効フラグ「１」、データ特性「通常」というエントリが登録される。このエントリは、エントリ番号「＃００１６０」に対応するページに対する有効フラグが「１」であり、ページフレーム番号が「０ｘ０１００００Ａ００」であることを示す。また、当該ページが、第２の実施の形態の図７で説明した「通常」のスワップイン／スワップアウトを行う対象のページであることを示す。
【０１０４】
また、ページテーブル１７０には、エントリ番号「＃００２５０」、ページフレーム番号「スワップファイル内のアドレスＸ」、有効フラグ「０」、データ特性「ＳＳＤ優先」というエントリが登録される。このエントリは、エントリ番号「＃００２５０」に対応するページに対する有効フラグが「０」であり、ページフレーム番号が「スワップファイル内のアドレスＸ」であることを示す。また、当該ページをＳＳＤ１０４に優先的に格納することを示す。
【０１０５】
次に、メモリ管理部１１２によるメモリ管理の処理手順を説明する。
図１０は、メモリ管理の処理例を示すフローチャートである。
第３の実施の形態では、メモリ管理部１１２は、図７の手順におけるステップＳ１９に代えて、ステップＳ２２を実行する。すなわち、メモリ管理部１１２は、ステップＳ１８  Ｙｅｓの場合にステップＳ２２を実行し、ステップＳ１８  Ｎｏの場合にステップＳ２０を実行する。また、第３の実施の形態では、メモリ管理部１１２は、図７の手順におけるステップＳ１５〜Ｓ１６に代えて、ステップＳ２３を実行する。すなわち、メモリ管理部１１２は、ステップＳ１４  Ｙｅｓの場合にステップＳ１８を実行し、ステップＳ１４  Ｎｏの場合にステップＳ２３を実行する。そこで、以下では、ステップＳ２２，Ｓ２３を説明し、他のステップの説明を省略する。ただし、メモリ管理部１１２は、例えば、ステップＳ１１において、アプリケーション１１１から割り当てたページに対するデータ特性の情報を取得し、ページテーブル１７０に登録する。
【０１０６】
（Ｓ２２）メモリ管理部１１２は、ステップＳ１２におけるアクセス対象のページのデータ特性に基づいて、ＳＳＤ１０４からのスワップイン制御を行う。スワップイン制御の詳細は後述される。そして、ステップＳ２１に処理が進む。
【０１０７】
（Ｓ２３）メモリ管理部１１２は、ＤＲＡＭ１０２からスワップアウト対象のページを特定し、当該ページのデータ特性に基づいて、ＤＲＡＭ１０２からの第１スワップアウト制御を行う。第１スワップアウト制御の詳細は後述される。そして、ステップＳ１８に処理が進む。
【０１０８】
図１１は、スワップイン制御の処理例を示すフローチャートである。
スワップイン制御は、ステップＳ２２で実行される。
（Ｓ３０）メモリ管理部１１２は、ページテーブル１７０を参照して、スワップインするページのデータ特性が「通常」または「ＳＳＤ優先」であるか否かを判定する。「通常」または「ＳＳＤ優先」である場合、ステップＳ３１に処理が進む。「通常」および「ＳＳＤ優先」の何れでもない（すなわち、「ＳＣＭ優先」である）場合、ステップＳ３２に処理が進む。
【０１０９】
（Ｓ３１）メモリ管理部１１２は、該当のページをＤＲＡＭ１０２にスワップインする。メモリ管理部１１２は、スワップインしたページについて、ページテーブル１７０の情報を更新する。具体的には、メモリ管理部１１２は、該当のページの有効フラグを「０」（Ｖ＝０）から「１」（Ｖ＝１）に更新する。また、メモリ管理部１１２は、該当のページのページフレーム番号（ＰＦＮ）を、スワップイン元のスワップファイル内アドレスから、スワップイン先のＤＲＡＭ物理フレーム番号に変更する。そして、スワップイン制御が終了する。
【０１１０】
（Ｓ３２）メモリ管理部１１２は、ＳＣＭ１０３に空きがあるか否かを判定する。ＳＣＭ１０３に空きがある場合、ステップＳ３３に処理が進む。ＳＣＭ１０３に空きがない場合、ステップＳ３４に処理が進む。
【０１１１】
（Ｓ３３）メモリ管理部１１２は、該当のページをＳＣＭ１０３にスワップインする。メモリ管理部１１２は、スワップインしたページについて、ページテーブル１７０の情報を更新する。具体的には、メモリ管理部１１２は、該当のページの有効フラグを「０」（Ｖ＝０）から「１」（Ｖ＝１）に更新する。また、メモリ管理部１１２は、該当のページのページフレーム番号（ＰＦＮ）を、スワップイン元のスワップファイル内アドレスから、スワップイン先のＳＣＭ物理フレーム番号に変更する。そして、スワップイン制御が終了する。
【０１１２】
（Ｓ３４）メモリ管理部１１２は、ＳＣＭ１０３からスワップアウト対象のページを特定し、当該ページのデータ特性に基づいて、ＳＣＭ１０３からの第２スワップアウト制御を行う。第２スワップアウト制御の詳細は後述される。そして、ステップＳ３３に処理が進む。
【０１１３】
図１２は、第１スワップアウト制御の処理例を示すフローチャートである。
第１スワップアウト制御は、ステップＳ２３で実行される。
（Ｓ４０）メモリ管理部１１２は、ＤＲＡＭ１０２のページからＬＲＵによりスワップアウト対象ページを決定する。
【０１１４】
（Ｓ４１）メモリ管理部１１２は、ページテーブル１７０を参照して、スワップアウト対象ページのデータ特性が「ＳＳＤ優先」であるか否かを判定する。「ＳＳＤ優先」である場合、ステップＳ４２に処理が進む。「ＳＳＤ優先」でない場合、ステップＳ４３に処理が進む。
【０１１５】
（Ｓ４２）メモリ管理部１１２は、スワップアウト対象ページをＳＳＤ１０４にスワップアウトする。メモリ管理部１１２は、スワップアウトした当該ページについて、ページテーブル１７０の情報を更新する。具体的には、メモリ管理部１１２は、該当のページの有効フラグを「１」（Ｖ＝１）から「０」（Ｖ＝０）に更新する。また、メモリ管理部１１２は、該当のページのページフレーム番号（ＰＦＮ）を、スワップアウト元のＤＲＡＭ物理フレーム番号からＳＳＤ１０４に格納されたスワップファイル内のアドレス（スワップファイル内アドレス）に変更する。そして、第１スワップアウト制御が終了する。
【０１１６】
（Ｓ４３）メモリ管理部１１２は、ＳＣＭ１０３に空きがあるか否かを判定する。ＳＣＭ１０３に空きがある場合、ステップＳ４４に処理が進む。ＳＣＭ１０３に空きがない場合、ステップＳ４５に処理が進む。
【０１１７】
（Ｓ４４）メモリ管理部１１２は、スワップアウト対象ページをＳＣＭ１０３にスワップアウトする。メモリ管理部１１２は、スワップアウトした当該ページについて、ページテーブル１７０の情報を更新する。具体的には、メモリ管理部１１２は、該当のページの有効フラグを「１」（Ｖ＝１）のまま維持する（当該ページのスワップアウト元はＤＲＡＭ１０２であり、有効フラグは「１」であったため）。また、メモリ管理部１１２は、該当のページのページフレーム番号（ＰＦＮ）を、スワップアウト元のＤＲＡＭ物理フレーム番号からスワップアウト先のＳＣＭ物理フレーム番号に変更する。そして、第１スワップアウト制御が終了する。
【０１１８】
（Ｓ４５）メモリ管理部１１２は、ＳＣＭ１０３からスワップアウト対象のページを特定し、当該ページのデータ特性に基づいて、ＳＣＭ１０３からの第２スワップアウト制御を行う。第２スワップアウト制御の詳細は後述される。そして、ステップＳ４４に処理が進む。
【０１１９】
図１３は、第２スワップアウト制御の処理例を示すフローチャートである。
第２スワップアウト制御は、ステップＳ３４，Ｓ４５で実行される。
（Ｓ５０）メモリ管理部１１２は、ＳＣＭ１０３のページからＬＲＵによりスワップアウト候補ページを決定する。
【０１２０】
（Ｓ５１）メモリ管理部１１２は、ページテーブル１７０を参照して、スワップアウト候補ページのデータ特性が「ＳＣＭ優先」であるか否かを判定する。「ＳＣＭ優先」である場合、ステップＳ５２に処理が進む。「ＳＣＭ優先」でない場合、ステップＳ５４に処理が進む。
【０１２１】
（Ｓ５２）メモリ管理部１１２は、スワップアウト候補として、ＳＣＭ１０３に格納された全ページを探索済であるか否かを判定する。全ページを探索済である場合、ステップＳ５５に処理が進む。全ページを探索済でない場合、ステップＳ５３に処理が進む。
【０１２２】
（Ｓ５３）メモリ管理部１１２は、現スワップアウト候補ページを除き、ＳＣＭ１０３のページからＬＲＵにより次のスワップアウト候補ページを決定する。そして、ステップＳ５１に処理が進む。
【０１２３】
（Ｓ５４）メモリ管理部１１２は、スワップアウト候補ページを、スワップアウト対象ページとする。そして、ステップＳ５６に処理が進む。
（Ｓ５５）メモリ管理部１１２は、ＳＣＭ１０３のページからＬＲＵによりスワップアウト対象ページを決定する。このとき、メモリ管理部１１２は、ＳＣＭ１０３の各ページのデータ特性に拘わらずに、スワップアウト対象ページを決定する。このため、メモリ管理部１１２は、「ＳＣＭ優先」でないページをスワップアウト対象ページと決定することもある。
【０１２４】
（Ｓ５６）メモリ管理部１１２は、スワップアウト対象ページをＳＳＤ１０４にスワップアウトする。メモリ管理部１１２は、スワップアウトした当該ページについて、ページテーブル１７０の情報を更新する。具体的には、メモリ管理部１１２は、該当のページの有効フラグを「１」（Ｖ＝１）から「０」（Ｖ＝０）に更新する。また、メモリ管理部１１２は、該当のページのページフレーム番号（ＰＦＮ）を、スワップアウト元のＳＣＭ物理フレーム番号からＳＳＤ１０４に格納されたスワップファイル内のアドレス（スワップファイル内アドレス）に変更する。そして、第２スワップアウト制御が終了する。
【０１２５】
このように、メモリ管理部１１２は、データ特性に応じた階層制御を行うことで、各データに適した格納先を選択可能になる。その結果、スワップアウト／スワップインに伴う余計なデータ移動を減らし、データアクセスを高速化することができる。
【０１２６】
［第４の実施の形態］
次に、第４の実施の形態を説明する。前述の第２，第３の実施の形態と相違する事項を主に説明し、共通する事項の説明を省略する。
【０１２７】
ここで、第４の実施の形態のサーバのハードウェア例および機能例は、図２，３で例示した第２の実施の形態のサーバ１００のハードウェア例および機能例と同様である。そこで、第４の実施の形態でも図２，３で例示した名称・符号と同じ名称・符号を用いる。
【０１２８】
第４の実施の形態では、各ページのデータ特性として、Ｒｅａｄ頻度およびＷｒｉｔｅ頻度を設定し、該当のページのスワップイン先を、当該データ特性に応じて選択する機能を提供する。
【０１２９】
図１４は、第４の実施の形態のページテーブルの例を示す図である。
メモリ管理部１１２は、ページテーブル１６０に代えて、ページテーブル１８０を用いる。ページテーブル１８０は、エントリ番号、ページフレーム番号（ＰＦＮ）、有効フラグ（Ｖ）およびデータ特性の項目を含む。ページテーブル１８０は、データ特性の項目を有する点で、第２の実施の形態のページテーブル１６０と異なる。エントリ番号、ページフレーム番号および有効フラグの項目に登録される情報は、ページテーブル１６０の同名の項目に登録される情報と同様であるため説明を省略する。
【０１３０】
データ特性の項目には、該当のページのアクセス頻度を示す情報が登録される。アクセス頻度は、例えば、Ｒｅａｄ頻度およびＷｒｉｔｅ頻度である（ただし、Ｒｅａｄ頻度およびＷｒｉｔｅ頻度の何れか一方でもよい）。
【０１３１】
例えば、Ｒｅａｄ頻度「低」は、Ｒｅａｄ頻度が比較的低い（例えば、Ｒｅａｄ頻度が第１閾値より低い）ことを示す。Ｒｅａｄ頻度「高」は、Ｒｅａｄ頻度が比較的高い（例えば、Ｒｅａｄ頻度が第２閾値（＞第１閾値）より高い）ことを示す。Ｒｅａｄ頻度「中」は、Ｒｅａｄ頻度がＲｅａｄ頻度「高」および「低」の間程度（例えば、第１閾値以上かつ第２閾値以下）であることを示す。
【０１３２】
また、Ｗｒｉｔｅ頻度「低」は、Ｗｒｉｔｅ頻度が比較的低い（例えば、Ｗｒｉｔｅ頻度が第３閾値より低い）ことを示す。Ｗｒｉｔｅ頻度「高」は、Ｗｒｉｔｅ頻度が比較的高い（例えば、Ｗｒｉｔｅ頻度が第４閾値より高い）ことを示す。Ｗｒｉｔｅ頻度「中」は、Ｗｒｉｔｅ頻度がＷｒｉｔｅ頻度「高」および「低」の間程度（例えば、第３閾値以上かつ第４閾値以下）であることを示す。
【０１３３】
データ特性の項目には、アプリケーション１１１にページが割り当てられた際に、アプリケーション１１１の指示に応じて、メモリ管理部１１２が予め設定を行う。ただし、メモリ管理部１１２は、各ページに対するアクセス頻度を監視し、当該監視結果に基づいて、各ページのデータ特性（Ｒｅａｄ頻度およびＷｒｉｔｅ頻度）をページテーブル１８０に登録してもよい。
【０１３４】
例えば、ページテーブル１８０には、エントリ番号「＃０００５２」、ページフレーム番号「０ｘ００００００８００」、有効フラグ「１」、Ｒｅａｄ頻度「高」、Ｗｒｉｔｅ頻度「低」というエントリが登録される。このエントリは、エントリ番号「＃０００５２」に対応するページに対する有効フラグが「１」であり、ページフレーム番号が「０ｘ００００００８００」であることを示す。また、当該ページは、Ｒｅａｄ頻度が高く、Ｗｒｉｔｅ頻度が低いことを示す。
【０１３５】
また、ページテーブル１８０には、エントリ番号「＃００１６０」、ページフレーム番号「０ｘ０１００００Ａ００」、有効フラグ「１」、Ｒｅａｄ頻度「高」、Ｗｒｉｔｅ頻度「高」というエントリが登録される。このエントリは、エントリ番号「＃００１６０」に対応するページに対する有効フラグが「１」であり、ページフレーム番号が「０ｘ０１００００Ａ００」であることを示す。また、当該ページは、Ｒｅａｄ頻度が高く、Ｗｒｉｔｅ頻度が高いことを示す。
【０１３６】
また、ページテーブル１８０には、エントリ番号「＃００２５０」、ページフレーム番号「スワップファイル内のアドレスＸ」、有効フラグ「０」、Ｒｅａｄ頻度「低」、Ｗｒｉｔｅ頻度「低」というエントリが登録される。このエントリは、エントリ番号「＃００２５０」に対応するページに対する有効フラグが「０」であり、ページフレーム番号が「スワップファイル内のアドレスＸ」であることを示す。また、当該ページは、Ｒｅａｄ頻度が低く、Ｗｒｉｔｅ頻度が低いことを示す。
【０１３７】
次に、Ｒｅａｄ頻度およびＷｒｉｔｅ頻度に応じたスワップイン制御の方法を定めたスワップイン制御テーブルを説明する。
図１５は、スワップイン制御テーブルの例を示す図である。
【０１３８】
スワップイン制御テーブル１９０は、例えば、ＭＭＵ１２０内のバッファに予め格納される。スワップイン制御テーブル１９０は、ＤＲＡＭ１０２、ＳＣＭ１０３またはＳＳＤ１０４の所定の領域に予め格納されてもよい。スワップイン制御テーブル１９０は、Ｒｅａｄ頻度、Ｗｒｉｔｅ頻度、初期配置、ＳＣＭ＜−ＳＳＤ、ＤＲＡＭ＜−ＳＳＤの項目を含む。ここで、「＜−」の表記は、左向き矢印を示し、「＜−」の右側の記憶デバイスから、左側の記憶デバイスへのスワップインを示す。
【０１３９】
Ｒｅａｄ頻度の項目には、Ｒｅａｄ頻度が登録される。例えば、Ｒｅａｄ頻度は、「高」、「中」、「低」の３段階である。Ｗｒｉｔｅ頻度の項目には、Ｗｒｉｔｅ頻度が登録される。例えば、Ｗｒｉｔｅ頻度は、「高」、「中」、「低」の３段階である。初期配置の項目には、ページの初期配置が登録される。ページの初期配置としては、「ＤＲＡＭ」または「ＳＣＭ」を選択可能である。
【０１４０】
ＳＣＭ＜−ＳＳＤの項目には、ＳＳＤ１０４からＳＣＭ１０３へのスワップインを行うか否か、および、行う場合に、ページの移動およびページのコピーの何れを行うかを示す情報が登録される。スワップインを行う場合、ＳＣＭ＜−ＳＳＤの項目には、「移動」または「コピー」が登録される。スワップインを行わない場合、ＳＣＭ＜−ＳＳＤの項目は、設定なしとなる。
【０１４１】
ＤＲＡＭ＜−ＳＳＤの項目には、ＳＳＤ１０４からＤＲＡＭ１０２へのスワップインを行うか否か、および、行う場合に、ページの移動およびページのコピーの何れを行うかを示す情報が登録される。スワップインを行う場合、ＤＲＡＭ＜−ＳＳＤの項目には、「移動」または「コピー」が登録される。スワップインを行わない場合、ＤＲＡＭ＜−ＳＳＤの項目は、設定なしとなる。
【０１４２】
ここで、「移動」は、スワップイン元の記憶デバイスからスワップイン先の記憶デバイスへ、ページの移動を行うことを示す。ページの移動を行う場合、メモリ管理部１１２は、スワップイン元の記憶デバイスから当該ページを削除し、当該ページの領域を再利用可能にする。「コピー」は、スワップイン元の記憶デバイスからスワップイン先の記憶デバイスへ、ページのコピーを行うことを示す。ページのコピーを行う場合、メモリ管理部１１２は、スワップイン元の記憶デバイスから当該ページを削除せずに保持する。メモリ管理部１１２は、あるページについて、スワップイン時にコピーを行った場合、当該ページを更新しないまま次にスワップアウトする際、スワップアウト元から当該ページを削除すればよく、スワップアウト先に当該ページを書き込まなくてよい。このため、スワップアウト時のページ書き込みに伴うオーバーヘッドを低減できる。
【０１４３】
例えば、スワップイン制御テーブル１９０には、Ｒｅａｄ頻度「高」、Ｗｒｉｔｅ頻度「高」、初期配置「ＤＲＡＭ」、ＳＣＭ＜−ＳＳＤが設定なし（「−」）、ＤＲＡＭ＜−ＳＳＤが「移動」というエントリが登録される。このエントリは、データ特性がＲｅａｄ頻度「高」、Ｗｒｉｔｅ頻度「高」のページの初期配置がＤＲＡＭ１０２であることを示す。また、当該ページについて、ＳＳＤ１０４からＤＲＡＭ１０２へのページの移動によるスワップインを行うことを示す。一方、データ特性がＲｅａｄ頻度「高」、Ｗｒｉｔｅ頻度「高」のページについては、ＳＳＤ１０４からＳＣＭ１０３へのスワップインを行わないことを示す。
【０１４４】
また、スワップイン制御テーブル１９０には、Ｒｅａｄ頻度「高」、Ｗｒｉｔｅ頻度「中」、初期配置「ＤＲＡＭ」、ＳＣＭ＜−ＳＳＤが設定なし（「−」）、ＤＲＡＭ＜−ＳＳＤ「移動」というエントリが登録される。このエントリは、データ特性がＲｅａｄ頻度「高」、Ｗｒｉｔｅ頻度「中」のページの初期配置がＤＲＡＭ１０２であることを示す。また、当該ページについて、ＳＳＤ１０４からＤＲＡＭ１０２へのページの移動によるスワップインを行うことを示す。一方、データ特性がＲｅａｄ頻度「高」、Ｗｒｉｔｅ頻度「中」のページについては、ＳＳＤ１０４からＳＣＭ１０３へのスワップインを行わないことを示す。
【０１４５】
また、スワップイン制御テーブル１９０には、Ｒｅａｄ頻度「高」、Ｗｒｉｔｅ頻度「低」、初期配置「ＤＲＡＭ」、ＳＣＭ＜−ＳＳＤが設定なし（「−」）、ＤＲＡＭ＜−ＳＳＤが「コピー」というエントリが登録される。このエントリは、データ特性がＲｅａｄ頻度「高」、Ｗｒｉｔｅ頻度「低」のページの初期配置がＤＲＡＭ１０２であることを示す。また、当該ページについて、ＳＳＤ１０４からＤＲＡＭ１０２へのページのコピーによるスワップインを行うことを示す。一方、データ特性がＲｅａｄ頻度「高」、Ｗｒｉｔｅ頻度「低」のページについては、ＳＳＤ１０４からＳＣＭ１０３へのスワップインを行わないことを示す。
【０１４６】
スワップイン制御テーブル１９０には、他のデータ特性（例えば、Ｒｅａｄ頻度「中」、Ｗｒｉｔｅ頻度「高」の組み合わせなど）についても、初期配置、ＳＣＭ＜−ＳＳＤ、ＤＲＡＭ＜−ＳＳＤの項目に対する設定が行われる。例えば、スワップイン制御テーブル１９０には、比較的高頻度でアクセスされるページを、ＤＲＡＭ１０２やＳＣＭ１０３に優先的に配置し、比較的低頻度でアクセスされるページを、ＳＳＤ１０４に優先的に配置するように各エントリが設定される。また、Ｗｒｉｔｅ頻度が高いほど、ページの移動によるスワップインを行い、Ｗｒｉｔｅ頻度が低いほど、ページのコピーによるスワップインを行うように、各エントリが設定される。Ｗｒｉｔｅ頻度が高い場合、ページ更新により、ページが書き換えられる可能性が高いからである。
【０１４７】
図１６は、スワップアウト／スワップインの例を示す図である。
例えば、メモリ管理部１１２は、図７のステップＳ１１で、アプリケーション１１１から、割り当て済ページに対するデータ特性の指示を受け付け、ページテーブル１８０に格納する。
【０１４８】
メモリ管理部１１２は、図７のステップＳ１９で、ＳＳＤ１０４からページのスワップインを行う場合、当該ページのデータ特性とスワップイン制御テーブル１９０とに基づいて、ＳＣＭ１０３またはＤＲＡＭ１０２のどちらをスワップイン先とするかを判定する。メモリ管理部１１２は、判定した方の記憶デバイスのフレームを当該ページに割り当てる。例えば、メモリ管理部１１２は、ＳＣＭ１０３のフレームを割り当てた場合、当該ページの有効フラグを「１」に設定し、当該ページのページフレーム番号として、ＳＣＭ物理フレーム番号を、ページテーブル１８０に登録する。なお、メモリ管理部１１２は、スワップイン時に、スワップイン制御テーブル１９０に基づいて、スワップインの方法を「移動」とするか「コピー」とするかを決定する。
【０１４９】
また、メモリ管理部１１２は、図７のステップＳ２０において、該当のページのデータ特性とスワップイン制御テーブル１９０とに基づいて、ＤＲＡＭ１０２またはＳＣＭ１０３のどちらを初期配置として当該ページに割り当てるかを判定する。メモリ管理部１１２は、該当のデータ特性に対し、スワップイン制御テーブル１９０に設定された初期配置の記憶デバイスのフレームを当該ページに割り当てる。例えば、メモリ管理部１１２は、ＤＲＡＭ１０２のフレームを割り当てた場合、当該ページの有効フラグを「１」に設定し、当該ページのページフレーム番号として、格納先のＤＲＡＭ物理フレーム番号を、ページテーブル１８０に登録する。あるいは、メモリ管理部１１２は、ＳＣＭ１０３のフレームを割り当てた場合、当該ページの有効フラグを「１」に設定し、当該ページのページフレーム番号として、格納先のＳＣＭ物理フレーム番号を、ページテーブル１８０に登録する。
【０１５０】
図１６では、ＤＲＡＭ１０２、ＳＣＭ１０３およびＳＳＤ１０４の間のスワップアウトおよびスワップインを例示している。例えば、ＤＲＡＭ１０２に格納されたページは、当該ページの移動により、ＳＣＭ１０３にスワップアウトされることがある。ＳＣＭ１０３に格納されたページは、当該ページの移動により、ＳＳＤ１０４にスワップアウトされることがある。
【０１５１】
なお、前述のように、コピーによるスワップインが行われたために、スワップアウト先に、スワップアウト対象のページと同一のページが存在する場合、メモリ管理部１１２は、当該ページのスワップアウト時には、スワップアウト元のページを削除すればよい。この仕組みにより、ＤＲＡＭ１０２に格納されたページが、当該ページの移動により、ＳＳＤ１０４にページアウトされることもある（ただし、この場合、メモリ管理部１１２は、ＤＲＡＭ１０２に格納されたスワップアウト対象のページを削除すればよい）。また、ＤＲＡＭ１０２からＳＣＭ１０３へのスワップアウト、および、ＳＣＭ１０３からＳＳＤ１０４へのスワップアウトの場合も同様に、スワップアウト元の記憶デバイスからスワップアウト対象のページを削除することでスワップアウトが行われることもある。
【０１５２】
また、ＳＳＤ１０４に格納されたページは、当該ページの移動またはコピーにより、ＳＣＭ１０３にスワップインされることがある。
更に、ＳＳＤ１０４に格納されたページは、当該ページの移動またはコピーによりＤＲＡＭ１０２にスワップインされることがある。
【０１５３】
このように、ＣＰＵ１０１は、ページテーブル１８０におけるページ毎のデータ特性に応じた階層制御を行うことで、該当のページに適した格納先やスワップインの方法（移動またはコピー）を選択することができる。このため、スワップアウトやスワップインに伴う余計なページ移動を低減し、データアクセスを高速化できる。
【０１５４】
なお、第１の実施の形態の情報処理は、処理部１４にプログラムを実行させることで実現できる。また、第２，第３，第４の実施の形態の情報処理は、ＣＰＵ１０１にプログラムを実行させることで実現できる。プログラムは、コンピュータ読み取り可能な記録媒体２０３に記録できる。
【０１５５】
例えば、プログラムを記録した記録媒体２０３を配布することで、プログラムを流通させることができる。また、プログラムを他のコンピュータに格納しておき、ネットワーク経由でプログラムを配布してもよい。コンピュータは、例えば、記録媒体２０３に記録されたプログラムまたは他のコンピュータから受信したプログラムを、第１のメモリ１１、第２のメモリ１２または第３のメモリ１３などの記憶装置に格納（インストール）してもよい。あるいは、コンピュータは、例えば、記録媒体２０３に記録されたプログラムまたは他のコンピュータから受信したプログラムを、ＤＲＡＭ１０２やＳＣＭ１０３やＳＳＤ１０４などの記憶装置に格納（インストール）してもよい。そして、コンピュータは、当該記憶装置からプログラムを読み込んで実行してもよい。
【０１５６】
以上の第１〜第４の実施の形態を含む実施形態に関し、更に以下の付記を開示する。
（付記１）  第１のメモリ、前記第１のメモリよりも低速の第２のメモリおよび前記第２のメモリよりも低速の第３のメモリにおけるデータ配置を制御するメモリ制御装置であって、
データが格納されたメモリに応じて第１の識別情報または第２の識別情報が設定されるフラグと前記データの格納先のメモリ領域における前記データが格納されたアドレスを示す情報とを前記データに対応付けて記憶する記憶部と、
前記第１のメモリまたは前記第２のメモリに前記データを格納すると前記第１の識別情報を前記フラグに設定し、前記第３のメモリに前記データを格納すると前記第２の識別情報を前記フラグに設定し、前記データにアクセスする際に、前記データに対応する前記フラグに前記第１の識別情報が設定されている場合、前記アドレスを示す情報に基づいて、前記第１のメモリおよび前記第２のメモリのうち前記データの格納先のメモリを判定し、判定された格納先のメモリにおける前記データの格納位置を特定する処理部と、
を有するメモリ制御装置。
【０１５７】
（付記２）  前記処理部は、前記フラグに前記第１の識別情報が設定された前記データに対して前記第１のメモリから前記第２のメモリへの階層移動を許可し、前記第２のメモリから前記第１のメモリへの階層移動を制限する、
付記１記載のメモリ制御装置。
【０１５８】
（付記３）  前記処理部は、前記第２のメモリおよび前記第３のメモリを前記第１のメモリに対するスワップ領域として利用し、アクセス対象の前記データが前記第２のメモリに格納されている場合、前記第１のメモリへの前記データのスワップインを制限し、前記アドレスに基づいて前記第２のメモリに格納された前記データに直接アクセスする、
付記１記載のメモリ制御装置。
【０１５９】
（付記４）  前記記憶部は、前記データを優先的に格納するメモリを示すデータ特性情報を記憶し、
前記処理部は、前記データ特性情報に基づいて、前記第１のメモリに格納された前記データのスワップアウト先を前記第２のメモリおよび前記第３のメモリから選択し、前記第３のメモリに格納された前記データのスワップイン先を前記第１のメモリおよび前記第２のメモリから選択する、
付記３記載のメモリ制御装置。
【０１６０】
（付記５）  前記記憶部は、前記データに対するアクセス頻度を示す情報を記憶し、
前記処理部は、アクセス対象の前記データの前記アクセス頻度に基づいて、前記第３のメモリから前記第１のメモリまたは前記第２のメモリへのスワップインを行うか否かを判定し、スワップインを行う場合に前記データの移動またはコピーの何れによりスワップインを行うかを選択する、
付記３記載のメモリ制御装置。
【０１６１】
（付記６）  前記アドレスは、前記第１のメモリまたは前記第２のメモリに前記データが格納された場合、前記第１のメモリのメモリ領域および前記第２のメモリのメモリ領域が属するメモリ空間のアドレスである、
付記１乃至５の何れか１つに記載のメモリ制御装置。
【０１６２】
（付記７）  第１のメモリ、前記第１のメモリよりも低速の第２のメモリおよび前記第２のメモリよりも低速の第３のメモリにおけるデータ配置を制御するコンピュータに、
前記第１のメモリまたは前記第２のメモリにデータを格納すると、前記データの格納先を示すフラグに対する第１の識別情報の設定と前記第１のメモリおよび前記第２のメモリのメモリ領域における前記データが格納された第１のアドレスを示す情報の記録とを行い、また、前記第３のメモリに前記データを格納すると、前記フラグに対する第２の識別情報の設定と前記第３のメモリのメモリ領域における前記データが格納された第２のアドレスを示す情報の記録とを行い、
前記データにアクセスする際に、前記データに対応する前記フラグに前記第１の識別情報が設定されている場合、前記第１のアドレスを示す情報に基づいて、前記第１のメモリおよび前記第２のメモリのうち前記データの格納先のメモリを判定し、判定された格納先のメモリにおける前記データの格納位置を特定する、
処理を実行させるメモリ制御プログラム。
【０１６３】
（付記８）  前記コンピュータに更に、前記フラグに前記第１の識別情報が設定された前記データに対して前記第１のメモリから前記第２のメモリへの階層移動を許可し、前記第２のメモリから前記第１のメモリへの階層移動を制限する、
処理を実行させる付記７記載のメモリ制御プログラム。
【０１６４】
（付記９）  前記コンピュータに更に、前記第２のメモリおよび前記第３のメモリを前記第１のメモリに対するスワップ領域として利用し、アクセス対象の前記データが前記第２のメモリに格納されている場合、前記第１のメモリへの前記データのスワップインを制限し、前記アドレスに基づいて前記第２のメモリに格納された前記データに直接アクセスする、
処理を実行させる付記７記載のメモリ制御プログラム。
【０１６５】
（付記１０）  前記コンピュータに更に、前記データを優先的に格納するメモリを示すデータ特性情報に基づいて、前記第１のメモリに格納された前記データのスワップアウト先を前記第２のメモリおよび前記第３のメモリから選択し、前記第３のメモリに格納された前記データのスワップイン先を前記第１のメモリおよび前記第２のメモリから選択する、
処理を実行させる付記９記載のメモリ制御プログラム。
【０１６６】
（付記１１）  前記コンピュータに更に、アクセス対象の前記データのアクセス頻度を示す情報に基づいて、前記第３のメモリから前記第１のメモリまたは前記第２のメモリへのスワップインを行うか否かを判定し、スワップインを行う場合に前記データの移動またはコピーの何れによりスワップインを行うかを選択する、
処理を実行させる付記９記載のメモリ制御プログラム。
【０１６７】
（付記１２）  前記第１のアドレスは、前記第１のメモリのメモリ領域および前記第２のメモリのメモリ領域が属するメモリ空間のアドレスである、
付記７乃至１１の何れか１つに記載のメモリ制御プログラム。
【０１６８】
（付記１３）  第１のメモリ、前記第１のメモリよりも低速の第２のメモリおよび前記第２のメモリよりも低速の第３のメモリにおけるデータ配置を制御するコンピュータが、
前記第１のメモリまたは前記第２のメモリにデータを格納すると、前記データの格納先を示すフラグに対する第１の識別情報の設定と前記第１のメモリおよび前記第２のメモリのメモリ領域における前記データが格納された第１のアドレスを示す情報の記録とを行い、また、前記第３のメモリに前記データを格納すると、前記フラグに対する第２の識別情報の設定と前記第３のメモリのメモリ領域における前記データが格納された第２のアドレスを示す情報の記録とを行い、
前記データにアクセスする際に、前記データに対応する前記フラグに前記第１の識別情報が設定されている場合、前記第１のアドレスを示す情報に基づいて、前記第１のメモリおよび前記第２のメモリのうち前記データの格納先のメモリを判定し、判定された格納先のメモリにおける前記データの格納位置を特定する、
メモリ制御方法。
【０１６９】
（付記１４）  前記フラグに前記第１の識別情報が設定された前記データに対して前記第１のメモリから前記第２のメモリへの階層移動を許可し、前記第２のメモリから前記第１のメモリへの階層移動を制限する、
付記１３記載のメモリ制御方法。
【０１７０】
（付記１５）  前記第２のメモリおよび前記第３のメモリを前記第１のメモリに対するスワップ領域として利用し、アクセス対象の前記データが前記第２のメモリに格納されている場合、前記第１のメモリへの前記データのスワップインを制限し、前記アドレスに基づいて前記第２のメモリに格納された前記データに直接アクセスする、
付記１３記載のメモリ制御方法。
【０１７１】
（付記１６）  前記データを優先的に格納するメモリを示すデータ特性情報に基づいて、前記第１のメモリに格納された前記データのスワップアウト先を前記第２のメモリおよび前記第３のメモリから選択し、前記第３のメモリに格納された前記データのスワップイン先を前記第１のメモリおよび前記第２のメモリから選択する、
付記１５記載のメモリ制御方法。
【０１７２】
（付記１７）  アクセス対象の前記データのアクセス頻度を示す情報に基づいて、前記第３のメモリから前記第１のメモリまたは前記第２のメモリへのスワップインを行うか否かを判定し、スワップインを行う場合に前記データの移動またはコピーの何れによりスワップインを行うかを選択する、
付記１５記載のメモリ制御方法。
【０１７３】
（付記１８）  前記第１のアドレスは、前記第１のメモリのメモリ領域および前記第２のメモリのメモリ領域が属するメモリ空間のアドレスである、
付記１３乃至１７の何れか１つに記載のメモリ制御方法。
【符号の説明】
【０１７４】
１０  メモリ制御装置
１１  第１のメモリ
１２  第２のメモリ
１３  第３のメモリ
１４  処理部
１５  記憶部
２０  テーブル
３０  メモリ空間
３１，３２  範囲
【図１】
2019200473.tif 000003
【図２】
2019200473.tif 000004
【図３】
2019200473.tif 000005
【図４】
2019200473.tif 000006
【図５】
2019200473.tif 000007
【図６】
2019200473.tif 000008
【図７】
2019200473.tif 000009
【図８】
2019200473.tif 000010
【図９】
2019200473.tif 000011
【図１０】
2019200473.tif 000012
【図１１】
2019200473.tif 000013
【図１２】
2019200473.tif 000014
【図１３】
2019200473.tif 000015
【図１４】
2019200473.tif 000016
【図１５】
2019200473.tif 000017
【図１６】
2019200473.tif 000018