(57)【要約】【課題】メモリ装置の消費電力を削減する【解決手段】本発明の一態様としての計算機は、第１メモリ領域と、記憶しているデータを保持する消費電力が前記第１メモリ領域よりも小さい第２メモリ領域とを管理する計算機であって、データ管理部と、データ処理部とを備える。前記データ管理部は、前記第１メモリ領域または前記第２メモリ領域に存在する第１データを参照しているプロセスの個数である参照数を管理する。前記データ処理部は、前記第１データが前記第１メモリ領域に存在し、前記第１データの参照数が予め定められた第１の条件を満たすとき、前記第１データを、前記第２メモリ領域に移動させる。【選択図】図１３
2014167700.tif 000002
【特許請求の範囲】
【請求項１】
第１メモリ領域と、記憶しているデータを保持する消費電力が前記第１メモリ領域よりも小さい第２メモリ領域とを管理する計算機であって、
前記第１メモリ領域または前記第２メモリ領域に存在する第１データを参照しているプロセスの個数である参照数を管理するデータ管理部と、
前記第１データが前記第１メモリ領域に存在し、前記第１データの参照数が予め定められた第１の条件を満たすとき、前記第１データを、前記第２メモリ領域に移動させるデータ処理部と、
を備えた計算機。
【請求項２】
前記第１メモリ領域へのアクセスに要する消費電力またはアクセス時間は、前記第２メモリ領域へのアクセスに要する消費電力またはアクセス時間よりも小さい
請求項１に記載の計算機。
【請求項３】
前記予め定められた第１の条件は、前記参照数が閾値より大きな値から前記閾値以下になったことである
請求項１または２に記載の計算機。
【請求項４】
前記予め定められた第１の条件は、前記参照数が閾値より大きな値から前記閾値以下になった後、前記閾値以下の状態が、第１の時間継続したことである
請求項３に記載の計算機。
【請求項５】
前記データ処理部は、前記第１データが前記第１メモリ領域に書き込まれた以降更新されている場合は、前記第１の時間の値を小さくする
請求項４に記載の計算機。
【請求項６】
前記データ処理部は、前記第１メモリ領域の空きサイズが小さいほど、前記第１の時間の値を小さくする
請求項４または５に記載の計算機。
【請求項７】
前記閾値は０である
請求項３ないし６のいずれか一項に記載の計算機。
【請求項８】
前記データ処理部は、前記第１データが前記第２メモリ領域に存在し、前記第１データの参照数が予め定められた第２の条件を満たすとき、前記第１データをストレージ装置に移動する
請求項１ないし７のいずれか一項に記載の計算機。
【請求項９】
前記データ処理部は、前記第１データが前記第２メモリ領域に書き込まれた以降更新されていない場合は、前記第１データを前記ストレージ装置に移動させることなく、前記第１データを消去する
請求項８に記載の計算機。
【請求項１０】
前記予め定められた第２の条件は、前記参照数が０の状態が、第２の時間継続したことである
請求項８または９に記載の計算機。
【請求項１１】
前記データ処理部は、前記第１データが前記第２メモリ領域に書き込まれた以降更新されている場合は、前記第２の時間の値を小さくする
請求項１０に記載の計算機。
【請求項１２】
前記データ処理部は、前記第２メモリ領域の空きサイズが小さいほど、前記第２の時間の値を小さくする
請求項１０または１１に記載の計算機。
【請求項１３】
第１メモリ領域と、記憶しているデータを保持する消費電力が前記第１メモリ領域よりも小さい第２メモリ領域とを管理するメモリ管理方法であって、
前記第１メモリ領域または前記第２メモリ領域に存在する第１データを参照しているプロセスの個数である参照数を管理するステップと、
前記第１データが前記第１メモリ領域に存在し、前記第１データの参照数が予め定められた第１の条件を満たすとき、前記第１データを、前記第２メモリ領域に移動させるステップと、
を備えたメモリ管理方法。
【請求項１４】
第１メモリ領域と、記憶しているデータを保持する消費電力が前記第１メモリ領域よりも小さい第２メモリ領域とを管理するためのプログラムであって、
前記第１メモリ領域または前記第２メモリ領域に存在する第１データを参照しているプロセスの個数である参照数を管理するステップと、
前記第１データが前記第１メモリ領域に存在し、前記第１データの参照数が予め定められた第１の条件を満たすとき、前記第１データを、前記第２メモリ領域に移動させるステップと、
をコンピュータに実行させるためのプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明の実施形態は、計算機、メモリ管理方法およびプログラムに関する。
【背景技術】
【０００２】
近年、パーソナルコンピュータを代表とする計算機の普及は目覚ましく、携帯電話やコピー装置、ホームルータ、など様々な情報処理を行うために、計算機技術が用いられている。計算機技術の特徴として、DRAMなどのメモリ装置を有し、そのメモリ上に格納されたデータを処理し、処理された結果のデータをメモリに格納することで、情報処理を行うことがある。すなわち、データの読み・書きの片方あるいは両方を行うメモリ領域を有することが、これらの機器の特徴である。
【０００３】
近年、計算機の消費電力を削減することに対する要求が高まっている。この要求の基になっている動機は、電力コストの削減や、発熱に伴う計算機の誤動作の防止がある。また、バッテリ駆動されている機器では、稼働時間の延長などがある。このほかにも様々ある。この計算機の消費電力削減要求は、計算機に含まれるメモリ装置に対する消費電力削減要求へとつながる。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開2005-196343号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
本発明の実施形態は、メモリ装置の消費電力を削減することを目的とする。
【課題を解決するための手段】
【０００６】
本発明の一態様としての計算機は、第１メモリ領域と、記憶しているデータを保持する消費電力が前記第１メモリ領域よりも小さい第２メモリ領域とを管理する計算機であって、データ管理部と、データ処理部とを備える。
【０００７】
前記データ管理部は、前記第１メモリ領域または前記第２メモリ領域に存在する第１データを参照しているプロセスの個数である参照数を管理する。
【０００８】
前記データ処理部は、前記第１データが前記第１メモリ領域に存在し、前記第１データの参照数が予め定められた第１の条件を満たすとき、前記第１データを、前記第２メモリ領域に移動させる。
【図面の簡単な説明】
【０００９】
【図１】本発明の実施形態に係る計算機のハードウエア構成の例を示す図。
【図２】マップドファイルを複数のプロセスが共有する様子を示す図。
【図３】メモリモジュールの構成例を示す図。
【図４】メモリモジュールのアドレスとセグメントの関係を示す図。
【図５】論理アドレスから物理アドレスへのアドレス変換の動作を説明するための図。
【図６】セグメント情報管理テーブルの一例を示す図。
【図７】物理メモリの使用状態の一例を示す図。
【図８】メモリモジュールの他の構成例を示す図。
【図９】メモリモジュールのさらに別の構成例を示す図。
【図１０】システムキャッシュデータのOS内の管理構造を示す図。
【図１１】本発明の実施形態に係る動作のフローチャートを示す。
【図１２】本発明の実施形態に係る計算機のメモリ電力制御に関わる処理部のブロック図。
【図１３】本発明の実施形態に係る計算機のメモリデータ管理制御に関わる処理部のブロック図。
【発明を実施するための形態】
【００１０】
図１に、本発明の実施形態に係る計算機のハードウエア構成の例を示す。
【００１１】
計算機は、CPU１１とこれにつながる表示ディスプレイ（例えば、LCD（液晶ディスプレイ））２１とメインメモリ３１とHDD（ハードディスクドライブ）４１と無線NIC５１と外部入力手段（キーボードやマウス等）６１を備える。CPU１１は、一つ以上のCPUコア１２と、キャッシュ領域（以下、キャッシュ）１３と、グラフィックプロセッサ１４と、MMU（Memory Management Unit：メモリ管理ユニット）１５とUSBホストコントローラ１６とDMA（ダイレクトメモリアクセス）コントローラ１７とBUSコントローラ１８とSATA（Serial Advanced Technology Attachment）ホストコントローラ１９とを備える。
【００１２】
CPUコア１２は、実行命令に基づいて演算を行う。
【００１３】
グラフィックプロセッサ１４は、CPUコア１２からの描画命令に従い、RGB信号を生成し、これを表示ディスプレイ２１に出力する。
【００１４】
キャッシュ１３は、CPUコア１２がメインメモリ３１にアクセスする際の遅延を改善するために設けられている記憶装置である。CPUコア１２は、メモリの内容を読み込む際には、まずキャッシュ１３の内容を確認する。キャッシュ１３にその内容が保持されていなければ、メインメモリ３１から値を読み込み、キャッシュ１３にその内容を記憶する。キャッシュ１３にその内容が存在すれば、キャッシュ１３の値を読み込む。CPUコア１２がメモリ３１にデータを書き込むためには、まずキャッシュ１３の保持する内容を書き換える。この書き換えられた内容が、例えばライトバックあるいはライトスルーと呼ばれる方法に従って、メインメモリ３１に書き込まれる。キャッシュ１３に用いられる記憶方式には、SRAMやDRAMなど様々なものを用いることができる。キャッシュ１３は、メインメモリよりアクセス遅延の小さいことが望ましい。
【００１５】
MMU１５は、メインメモリ３１をアクセスする際に使う物理アドレスと、CPUコア１２上で動作するOS（Operating System）が使用する仮想アドレス（あるいは論理アドレス。本明細書では仮想アドレスと論理アドレスを区別せず使用する。）との変換を行う装置である。仮想アドレスを入力として、これに対応する物理アドレスを出力する。この仮想アドレスと物理アドレスの変換情報の全てをMMU１５内部のメモリに保持してもよい。または、変換表の一部をMMU１５に保持し、その他の部分をメインメモリ３１等の外部に保持してもよい。一部のみを保持する方式としては、例えば、TLB(Translation Lookaside Buffer)と呼ばれる高速メモリをMMU１５が有し、TLBに保持していない変換データのみメインメモリ３１を参照して取得するとともに、得られた変換データをTLBに書き込む方法がある。
【００１６】
USBホストコントローラ１６は、USB（Universal Serial Bus）規格に基づいて、USBデバイスとの情報送受信を行う。
【００１７】
DMAコントローラ１７は、メインメモリ３１、バス上のデバイス（無線NICなど）およびSATAデバイス（HDDなど）とのデータの送受信処理を行う。DMAコントローラ１７は、CPUコア１２と交渉し、バスの制御権を得る。バスの制御権を得たDMAコントローラ１７は、バス上のデバイスからデータを受信し、受信データをメインメモリ３１に書き込む。あるいは、メインメモリ３１のデータを読み、そのデータをバス上のデバイスに送信する。
【００１８】
バスコントローラ１８は、例えば、PCI-Expressなどのバス規格に従って、バス上のデバイスとのデータの送受信を行う。
【００１９】
SATAホストコントローラ１９は、SATA（Serial Advanced Technology Attachment）規格に従って、SATAケーブルを介してデバイス（HDD）とのデータの送受信を行う。
【００２０】
表示ディスプレイ２１は、RGB信号を通じて入力した信号を、人間の読める形式にして表示する。
【００２１】
メインメモリ３１は、例えばDRAM(Dynamic Random Access Memory)であり、例えばDDR3と呼ばれるインタフェース（メモリバス）にてCPU１１と接続される（図示しないメモリコントローラをCPU１１は有する）。このメインメモリ３１は、MRAM(Magneto-resistive Random Access Memory)やFeRAM(Ferroelectric Random Access Memory)やPRAM(Phase change Random Access Memory)やReRAM（Resistive Random Access Memory）などの不揮発性メモリ技術にて構成されていれば一層望ましい。
【００２２】
MMU１５から出力された物理アドレスが、メモリコントローラに渡されると、メモリコントローラがこれをメモリアドレスに変換し、そのメモリアドレスに対応するメインメモリの領域に保持されている値にアクセスすることができる。
【００２３】
メインメモリ３１は、CPU１１からのread命令を受信した際には、read命令とともに与えられるアドレス情報に対応した領域に保持されている値を読み出して、CPU１１に出力する。さらに、CPU１１からwrite命令を受信した際には、write命令とともにアドレス情報と値を受信し、アドレス情報に対応する領域に受信した値を書き込む。メインメモリ３１とCPU１１との間の接続インタフェースには、DDR3以外にLPDDR3やWideIOなど様々なインタフェースが使用され得る。
【００２４】
ここで、本実施形態では、メモリ領域として、ホットメモリ領域（第１メモリ領域）とコールドメモリ領域（第２メモリ領域）が存在する。ホットメモリ領域は、コールドメモリ領域よりもデータ保持に要する消費電力は大きく、データアクセス(read/write)に要する消費電力あるいはアクセス時間が小さい。例えば、DRAMにおいて、Idle状態およびActive状態（すなわちRowアドレスあるいはColアドレスを入力し、read/write可能な状態）をホット状態とし、それ以外の例えばSelf Refreshing状態やPower Down状態をコールド状態とみなすことができる。ホットメモリ領域およびコールドメモリ領域は事前に固定されていてもよいし、両者間で切り替え可能であっても良い。  
メインメモリとしてDRAMとMRAMのような異なる特性のメモリを混在している場合には、データ保持に要する消費電力が大きいけれどもデータアクセスに要する消費電力あるいは時間の小さいメモリをホットメモリ領域、そうでないメモリをコールドメモリ領域とみなすことができる。以後、ホットメモリ領域のことをアクティブ領域、コールドメモリ領域のことをスリープ領域と呼ぶこともある。
【００２５】
HDD４１は、例えば、TOSHIBA社のMK1059GSMのように、磁気媒体のデジタル情報を記憶する装置であり、SATAインタフェースにてCPU１１と接続される。HDDの代わりに、SSDと呼ばれる半導体記憶装置（NAND フラッシュ）を用いてもよい。デジタル情報を記憶するための方式は様々であるが、メインメモリ３１よりも大容量であることが望ましい。HDD４１とCPU１１との間の接続は、SATA以外にもSCSIやFiber ChannelやPCI-Expressなどの様々なインタフェースを使用し得る。
【００２６】
無線NIC(Network Interface Card)５１は、例えばIEEE 802.11の規格に従って、ネットワークに対して通信パケットを送受信するものである。使用する規格は、IEEE802.11に限るものではなく、LTE(Long Term Evolution)と呼ばれるセルラー通信向きのインタフェースであってもよいし、100Mイーサネットと呼ばれるような有線インタフェースであってもよい。
【００２７】
外部入力手段６１は、人間による操作を入力するための手段であり、例えばキーボードやマウス、表示ディスプレイ上のタッチパネルであってもよい。また、温度センサーなどでもよく、入力される情報は人間からのものに限定されるものではない。本実施形態ではUSB規格に従って外部入力をCPU１１に送信しているが、外部入力手段６１は、USB以外の他の規格（例えば、IEEE1394, RS-232C,HDMI）で接続されていてもよい。
【００２８】
本実施形態では、ハードウエア構成として、図1の構成を用いたが、グラフィックプロセッサ、MMU、USBホストコントローラ、DMAコントローラ、バスコントローラ、SATAホストコントローラのいずれか一つ以上がCPU１１の外側に存在する構成もあり得る。また、無線NICの一部の機能を、CPU１１内に有するなど様々な変形が考え得る。
【００２９】
(システムキャッシュの説明)
プロセスやOSが例えばハードディスク上のファイルを参照する際には、そのファイルはハードディスクからメモリ上に格納され、その後、そのメモリ上のファイルデータにアクセスするという手順が実行される。一般に、ハードディスクへのアクセスは、メモリへのアクセスよりも遅いため、そのファイルがプロセスやカーネルから使用されなくなった後も、メモリ上にファイルデータを保持し続ける。このように使用されていない保持されているデータを“システムキャッシュデータ”と呼ぶ。ここでファイルの格納場所としてハードディスク以外にCD-ROMやSSD(Solid State Drive)やNAS(Network Attached Storage)など様々な格納場所があり得る。また、システムキャッシュデータとして、ファイルデータ以外にもネットワークを介して取得したHTMLデータのようなデータであっても、メモリ上に保持しているデータを、システムキャッシュデータと称する。
【００３０】
ファイルが使用中であるか否かをOSが判断するために、プロセスはファイルを使用する際には、fopen()あるいはmmap()のようなファイル使用開始を宣言するシステムコールを呼ぶ。ファイルの使用を終了する場合には、fclose()あるいはunmap()のようなファイル使用終了を宣言するシステムコールを呼ぶ。
【００３１】
OSは、プロセスがファイルを参照した際に、メインメモリ上にファイルデータをハードディスクからコピーしマップドファイルとし、そのメモリアドレスをプロセスの仮想空間に対応させる。図２は、マップドファイルが物理メモリアドレスの300KB--315KBの領域に割り当てられ、それがプロセス１の論理アドレス200KB--215KBに割り当てられ、プロセス２の論理アドレス100KB--115KBに割り当てられている様子を示す。このようにマップドファイルは複数のプロセスに共有されることもできる。また、図２では４つのページが割り当てられている様子を描いているが、オンデマンドページング方式の場合は、実際にプロセスがメモリを参照するまで物理ページは割り当てられない。
【００３２】
図２において、プロセス１とプロセス２の両方がファイルへの参照を終えると、そのファイルに割り当てられた物理メモリを解放することができるが、物理メモリの空き容量がある場合には物理メモリを解放せずにおき、再度ファイルへの参照が発生した場合には、その物理アドレスをその参照したプロセスの論理アドレスと対応させることで、ファイルへのアクセス時間を短くすることができる。このように使用されていないが物理メモリ上に保持されているデータを、前述したようにシステムキャッシュデータと呼ぶ。
【００３３】
ここで、システムキャッシュデータの例としては、ファイルデータを物理メモリページに読み込んだ場合のようにページ単位で管理するページキャッシュデータや、ブロックデバイス上のデータの塊（例えば、ファイルシステムのブロック）を保持するバッファキャッシュデータが挙げることができる。
【００３４】
前述したような特性を有するホットメモリ領域とコールドメモリ領域とを含むメモリ領域を管理する計算機において、ホットメモリ領域に保持されているシステムキャッシュは、そのシステムキャッシュを参照するプロセスの個数（参照数）があらかじめ定められた第１の条件が満たされたとき、コールドメモリ領域に移動する。第１の条件としては、たとえば、そのシステムキャッシュが使用されなくなった、すなわちそのシステムキャッシュを参照するプロセスの個数（参照数）が０になった場合がある。より一般的に参照数が閾値より大きな値から閾値以下になった場合がある。あるいは、当該参照数が０になってから、予め定められた時間T_hotの間アクセスがない場合がある。このような場合にシステムキャッシュをコールドメモリ領域に移動することによって、ホットメモリ領域の空き容量を増やすことができ、今後アクセスされるデータをホットメモリ領域に配置することが可能となる。前述したようにホットメモリ領域はデータアクセスに要する消費電力が小さいため、アクセスされるデータをホット領域に配置することで、消費電力低減の効果を発揮する。
【００３５】
ここで、T_hotは固定値ではなく、ホットメモリ領域の空き容量が小さいほど小さな値となるよう設定することも可能である。さらに、システムキャッシュデータがプロセスによりWriteアクセスされることでダーティなデータ、すなわちハードディスク内の対応するデータとは異なる値となっている場合には、T_hotをクリーンなデータの場合と比べて、小さな値とすることが望ましい。また、システムキャッシュデータがダーティな場合は、ホットメモリ領域からコールドメモリ領域へ移動するのではなく、ハードディスクに移動することも可能である。
【００３６】
コールドメモリ領域に保持されているシステムキャッシュは、あらかじめ定められた第１の条件が満たされたとき、ハードディスクに移動してもよい。たとえば、そのシステムキャッシュの参照数が０になってから、予め定められた時間T_coldの間アクセスがない場合に、コールドメモリ領域からハードディスクに移動してもよい。これによって、コールドメモリ領域の空き容量を増やすことができ、アクセス頻度の小さなデータをコールドメモリ領域に保持することが可能となる。これによって、メモリ不足の発生をふせぐことができるという効果を発揮する。ここで、T_coldは固定値ではなく、コールドメモリ領域の空き容量が小さいほど小さな値となるよう設定することも可能である。さらに、システムキャッシュデータがプロセスによりWriteアクセスされることでダーティなデータ、すなわちハードディスク内の対応するデータとは異なる値となっている場合には、T_coldをクリーンなデータの場合と比べて、小さな値とすることが望ましい。
【００３７】
（メモリモジュールのHW構成）
図３にメインメモリに用いるメモリモジュールの構成例を示す。メモリモジュール１０１は、8個のメモリチップ（LSI）１０２を、基板上に有している。メモリモジュール１０１は、アドレスとコマンドと制御信号とを送受信するための信号線を有し、当該信号線を介して、アドレスとコマンドと制御信号を、各メモリチップ１０２へ伝える。コマンドには、以下のようにReadコマンドおよびWriteコマンドに加え、メモリのセグメント（部分領域）の電力状態を変更するPowerStateChangeコマンドがある。制御信号は、クロック信号やread/writeタイミング信号などである。また、メモリモジュール１０１は、データの送受信を行う信号線を有し、当該信号線を介して、各メモリチップとデータを送受信する。
【表１】
2014167700.tif 000003
【００３８】
ここで電力状態には、アクティブとスリープの2状態が存在する。アクティブなセグメントは、データのread/writeが可能である。スリープであるセグメントは、記憶しているデータを保持し続けるが、read/writeはできない。セグメントの消費する電力は、アクティブ状態の方が、スリープ状態よりも大きい。
【００３９】
DRAMにおいて、スリープ状態とは、例えば、セグメントを選択してセルフリフレッシュモードにすることで実現できる。セルフリフレッシュモードとは、メモリモジュールあるいはメモリチップのセグメント内部で、リフレッシュ動作（DRAMではメモリセルに保持した情報が時間とともに消失するため、メモリセルの内容を読み出して再度そのセルに書き込む動作）を行う状態である。リフレッシュ間隔を長くすることで、消費電力を削減することができる。さらに、一般にDRAMのメモリセルの情報保持時間は低温であるほど長くなる。このため、このセルフリフレッシュ動作は、低温であるほどリフレッシュ間隔を長くすることが望ましい。さらに、メモリセル内で情報保持時間にばらつきがあるため、そのばらつきを考慮して、リフレッシュ間隔をなるべく長くすることが望ましい。
【００４０】
一方MRAMのような不揮発性メモリでは、情報を保持するための電力は不要である。このため、セグメントを選択し、そのメモリセルの読出し・書き込み用の信号への給電を停止あるいは電圧を下げることで、スリープ状態を実現できる。さらにPLL(Phase-locked loop)、カラムデコーダ、ロウデコーダ、センスアンプ回路などの他の回路への給電停止あるいは電圧の低電圧化、そしてクロック停止を行うことが望ましい。
【００４１】
メモリモジュール１０１は、上記した2種類の信号線を介して、CPU１１とつながる。CPU１１は複数のメモリモジュールと接続することができる。例えば、CPU１１は、1チャンネル当たり２つのメモリモジュールを接続することができる。この場合、CPU１１が3チャンネル有する場合には、合計6個のメモリモジュールを接続することが可能である。
【００４２】
各メモリチップ１０２のメモリ領域は、８セグメントに分かれている。各メモリチップ１０２は、セグメント単位で、電力状態を変更できる。メモリモジュール１０１の外部から、例えば、セグメント１に対して電力状態を指定すると、全てのメモリチップ１０２のセグメント１の電力状態が指定された状態となる。なお、この構成は一例であり、全てのメモリチップ１０２のセグメント１をそれぞれ別個のセグメントとして扱って、個別に電力状態制御を行う構成も可能である。
【００４３】
図４にメモリモジュールの物理アドレスとセグメントの関係を示す。メモリモジュール１０１が8つのセグメントを有する、すなわち各メモリチップ１０２がそれぞれ8つのセグメントに分かれているとする。アドレス0000000から1fffffffまでの領域がセグメント０に属し、アドレス20000000から3fffffffまでの領域がセグメント１に属する様子が示されている。
【００４４】
この例では各セグメントのサイズは等しい構成になっているが、各セグメントの大きさは任意の値に構成しても構わない。たとえば、セグメント０がメモリ容量の1/128であり、セグメント１が1/128、セグメント２が1/64、セグメント３が1/32、セグメント４が1/16、セグメント５が1/8、セグメント６が1/4、セグメント７が1/2のようになっていてもよい。
【００４５】
また、図４では8つのセグメントを有する場合を例に説明しているが、セグメントの数は8つに限定されない。一般にセグメント数は多いほど、高い消費電力削減効果を期待できるが、同時にセグメントを実現するための回路規模が大きくなる。セグメント数の増加は、その回路の実装コストの増加や消費電力増加につながる可能性がある。
【００４６】
計算機が４つのメモリモジュールを有しており、各メモリモジュールが８つのセグメントを有している場合には、計算機は合計３２のセグメントを有していることになる。もちろん、計算機内の各メモリモジュールが異なる数のセグメントを有していても構わない。
【００４７】
（動作原理概略）
計算機の電源を投入すると、BIOSと呼ばれるプログラムがメインメモリ３１に読み込まれ、CPUコア１２にて実行される。BIOSは、計算機のハードウエア構成を確認し、各デバイス（HDDや無線NIC）を初期化し、HDD４１に格納されたOSを、メモリ３１に読み込む。OSがメモリ３１に読み込まれた後は、BIOSはOSに制御を移す（OSの所定の命令にジャンプする）。OSは起動処理を行ない、予め定められたプログラムを実行する。あるいは外部入力手段の入力に従って、プログラムを起動する。
【００４８】
OSはアプリケーションからのメモリ確保要求、メモリ解放要求、確保したメモリへのread/write要求に従い、メインメモリにアクセスを行う。この際に、セグメント毎にアクセス頻度を計測する。セグメントのアクセス頻度（計算方法は後述）が予め定められた閾値よりも高い場合にはそのセグメントの電力状態をアクティブに設定し、そうでない場合にはスリープに設定する。スリープに設定されたセグメントの領域に対するread/writeが発生した場合には、OSはそのセグメントをアクティブに設定し、read/writeが終了した後にスリープに設定を戻す。このように、アクセス頻度の少ないセグメントをスリープ状態とすることで、メインメモリの消費電力を削減することができる。
【００４９】
ここでは、スリープ状態のセグメントに対してread/writeする際に、その電力状態をアクティブにし、read/write後にスリープに戻すのをOSが行う例を示した。しかしながら、この電力状態の変更は、OSの代わりにメモリコントローラが行ってもよいし、メモリモジュール１０１上のメモリチップが行ってもよい。あるいは、メモリモジュール１０１上の制御回路（図示しない）が行ってもよい。
【００５０】
さらに、メモリコントローラは、未処理のメモリアクセス要求を多数保持している場合には、あるスリープセグメントに対するアクセスをなるべくまとめて処理することが望ましい。つまり、そのスリープセグメントをアクティブ状態にし、保持しているそのセグメントへの複数のアクセス要求をまとめて処理し、その後に、そのセグメントをスリープ状態に戻す。これにより、セグメントの電力状態の変更回数を減らすことができ、処理性能を向上できる。
【００５１】
ここで、セグメントの電力状態をアクティブにするか、スリープにするかの判定の閾値λ’は、メモリモジュールの特性により決めることができる。例えば、
Pa:アクティブ状態を維持するために必要な電力
Ps:スリープ状態を維持するために必要な電力
Psa:スリープ状態からアクティブ状態に遷移する際に必要な電力
Pas:アクティブ状態からスリープ状態に遷移する際に必要な電力
とすると、以下の式で、求めることができる。
【数１】
2014167700.tif 000004
【００５２】
これは、スリープさせることによる電力利得（アクティブに滞在する電力とスリープに滞在する電力の差）が、スリープ状態のセグメントにアクセスする電力（電力状態をアクティブとスリープに遷移させる電力）の何回分に相当するかを求めている。
【００５３】
各セグメントに対してアクセス頻度と閾値λ’を比べ、アクセス頻度の方が大きければアクティブ状態とし、そうでなければスリープ状態とする。消費電力よりもメモリアクセスの遅延を少なくしたい場合には、アクセス頻度と比較する閾値を、λ’よりも小さくすることが望ましい。
【００５４】
また、セグメント毎に異なる閾値を用いることも可能である。例えば、セグメントのサイズが異なる場合には、大きいセグメントほど閾値を大きくすることで、大きいセグメントほどスリープ状態にしやすくする。これにより、消費電力削減効果を大きくすることが可能である。
【００５５】
CPU負荷によりCPUクロック数が動的に変化する場合には、CPUクロック数が大きくなるほど、この閾値を小さくすることが望ましい。これは、メモリアクセス頻度はCPUクロック数に比例して大きくなることが、経験則より知られているためである。
【００５６】
また、処理遅延が大きくても問題ない場合は、この閾値λ’を大きくすることが望ましい。たとえばユーザからのマウス入力やキーボード入力がある一定時間発生しない場合や、これによりディスプレイの表示を停止した場合がある。これにより、多くのセグメントがスリープ状態となり、消費電力を削減することが可能となる。
【００５７】
また、消費電力削減への要求度に応じて、この閾値を変化することも可能である。例えば、バッテリ残量が少ないほど、この閾値を大きくすることで、消費電力を削減することができる。もちろん、GUIにて、“ハイパワー”、”ノーマル“、”ロングパワー“などのメニューをユーザに選択させることで、ユーザがこの閾値を調節できるようにしてもよい。
【００５８】
ここで、アクセス頻度の計測は、例えば以下のように行う。
【００５９】
時刻Tから２Tの間のセグメントiのアクセス回数をSi(T,2T)とする。時刻Tから2Tの間のアクセス頻度をFi(T,2T)とすると、以下の式でアクセス頻度を計算できる。ただし、aは0以上1以下の定数である。
【数２】
2014167700.tif 000005
【００６０】
時間間隔T毎にFi(nT,(n+1)T)を求め、これを閾値と比較することで、次の時間区間(n+2)Tにおけるセグメントiの電力状態（アクティブまたはスリープ）を決定する。
【００６１】
ここで、システムキャッシュデータに対しては上述したとおり、アクティブ状態の領域(すなわちホットメモリ領域)に存在するシステムキャッシュデータは、プロセスの参照数が０になった後、T_hot以上経過した場合には、スリープ状態の領域（すなわちコールドメモリ領域）に移動する。また、スリープ状態の領域（すなわちコールドメモリ領域）に存在するシステムキャッシュは、プロセスの参照数が０になった後、T_cold以上経過した場合には、ハードディスクに書き戻す。T_coldはT_hot以上の値である。このように、アクセスされていないシステムキャッシュをコールドメモリ領域に移動することで、システムキャッシュの保持電力は低減され、全体として消費電力を削減することが期待できる。
【００６２】
ここで、予めシステムキャッシュ用のセグメントを定めておき、該セグメントをスリープ状態（すなわちコールドメモリ領域）とし、当該セグメントにはシステムキャッシュ以外のデータを格納しないようにすることもできる。これにより、システムキャッシュ用の保持領域が不足することを防ぐことができる。なお、該セグメントの空き容量が大きい場合にはシステムキャッシュ以外のデータも格納できるよう変形することも可能である。
【００６３】
（アクセス頻度以外の情報による電力状態の決め方）
上述の例では、アクセス頻度Fi( )を用いて、セグメントの電力状態を決めた。これは、将来のアクセス頻度を、過去のアクセス頻度Fi( )を用いて予測し、これにより将来の消費電力が最も小さくなるようにセグメントの電力状態（アクティブまたはスリープ）を決めていると言える。そのため、将来のアクセス頻度を予測する方法ならば同様に適用することが可能である。
【００６４】
別の例としては、OSのタスクスケジューリング情報を参考に、セグメントの電力状態を決めることができる。タスクスケジューリングとは、マルチタスクOSにおいて、複数のタスクに対してCPUにアサインする順番を決めるアルゴリズムである。CPUにアサインされたタスクは、予め定められたCPU時間だけCPUによる処理を実行される。その後、次にスケジューリングされたタスクが、CPUにアサインされる。タスクスケジューリング情報（例えばスケジュールキュー）を参照すれば、タスク実行順序を推測することができる。そのため、予め定められた時間ウィンドウ内でCPUにアサインされないタスクを列挙し、それらのタスクが使用しているメモリ領域を調べる。各セグメントにおいて、CPUにアサインされないタスクが使用するメモリの使用量が予め定められた量よりも大きいセグメントの電力状態をスリープとして決定することができる。CPUにアサインされたタスクによる使用量がゼロのセグメントについては、無条件にスリープとしてもよい。
【００６５】
（OSの動作詳細）
図５に論理アドレスから物理アドレスへのアドレス変換の動作を模擬的に示す。
【００６６】
MMU１５はアドレス変換表を有している。アドレス変換表を用いることで、論理ページ番号から対応するエントリを検索できる。ここで、例として、アドレス幅を32bit、ページサイズを4KBとして説明を行う。CPUは32bitの論理アドレスのうち上位22bitを論理ページ番号として用い、下位10bitをページ内アドレスとして用いる。論理アドレスから決定される論理ページ番号からアドレス変換表を検索し、該当するエントリを得る。そのエントリの物理ページアドレスに、ページ内アドレスを結合したものが物理アドレスである。ここで結合とは、物理ページ番号22bitの下位ビットとしてページ内アドレスを結合することを意味する。
【００６７】
検索されたエントリは、その物理ページに関する様々な属性を保持している。属性の例としては、キャッシュの可否や、アクセス情報（書き込み可否）、参照情報（参照されたか否か）、修正情報（修正されたか否か）、存在情報（物理メモリ上に存在するか否か）を挙げることができる。
【００６８】
ここで、MMU１５は一つのアドレス変換表を有する場合を示した。そうではなく、マルチレベルページテーブルと呼ばれる階層構成をなす複数のアドレス変換表を有していてもよい。マルチページテーブルを用いることにより、MMU１５の管理するテーブルサイズを小さくすることができる。大切なことは、論理アドレスから対応する物理アドレスの情報を得られることである。
【００６９】
また、MMU１５の有するアドレス変換表は、メインメモリ３１上にOSが保持しており、コンテキストスイッチ等のタイミングで、CPUコア１２上にて動作しているプロセス（あるいはOS）に対応するアドレス変換表を、MMU１５にロードすることも可能である。
【００７０】
物理アドレスが得られると、図６に示したセグメント情報管理テーブルを参照し、物理アドレスに対応するエントリを検索する。例えば、物理アドレスefffffffがMMU１５から得られた場合には、図６のテーブルを参照し、これがセグメント７に属し、セグメント７がスリープ状態であることが分かる。スリープ状態の場合には、該セグメントをアクティブ状態に変更する命令をメモリモジュール１０１に送信し、その後メモリモジュール１０１にアクセス（書き込みまたは読み出し）を行う命令を送り、この後、該セグメントをスリープ状態に変更する命令をメモリモジュール１０１に送信する。
【００７１】
図６のテーブルのアクセス回数は、上述したSi( )の値を格納しており、アクセス毎に1増加する。たとえばあるデータをメモリにH回に分けて書き込みが行われた場合は、このときアクセス回数に値Hが加算される。アクセス回数のインクリメントは、MMU１５が行ってもよいし、CPUコア１２が行ってもよいし、別の手段で行ってもよい。
【００７２】
また、アクセス頻度は、上述のFi( )を格納している。OSは時間間隔T毎のタイマ割り込みにより、数式２を用いてアクセス頻度を計算し、さらに、図６のテーブルのアクセス回数をゼロクリアする。さらに、アクセス頻度が予め定められた電力状態判定閾値よりも小さいセグメントについては、そのセグメントがアクティブ状態であれば、そのセグメントをスリープ状態とする命令をメモリモジュール１０１に発行する。アクセス頻度が予め定められた電力状態判定閾値以上のセグメントについては、そのセグメントがスリープ状態であれば、アクティブ状態とする命令をメモリモジュールに発行する。電力状態（スリープまたはアクティブ）が変化しないセグメントについては、命令を発行する必要は無い。
【００７３】
このようにアクセス頻度の少ないセグメントをスリープ状態とすることで、メモリの消費電力を削減することが可能である。また、スリープセグメントへのアクセスには、該セグメントをアクティブ状態に変更した後で、アクセスする必要があるため、アクセス遅延が増す。しかしながら、アクセス頻度の少ないセグメントをスリープ状態としているため、そのアクセス遅延の増加による計算機の処理速度への影響を小さくすることができる。
【００７４】
次に、計算機がACPIのS5状態から起動した場合を考える。ACPIのS5状態とは、Windowsでいうシャットダウン操作により遷移する状態であり、それまでの実行状態は保持されない。S5から起動した場合、図６のセグメント情報管理テーブルの初期値は、アクセス回数とアクセス頻度は０である。そこで、S5からの起動時は、電力状態はすべてのセグメントをアクティブとし、起動完了後の予め定められたタイミング（たとえば起動完了後一定時間経過したタイミング）で、アクセス頻度に基づく電力状態設定を行うようにすることが望ましい。これにより、比較的メモリアクセスの多い起動時の処理性能の低下を防ぐことができる。
【００７５】
（セグメントの電力状態の変更のバリエーション）
上では、CPUコアがメモリモジュールにセグメントの電力状態を変更する命令を発行する場合を例に挙げて、説明を行ったが、この命令をMMU１５が発行しても構わない。また、図６のセグメント情報管理テーブルをメモリモジュール１０１が保持し、アクセス回数とアクセス頻度の計算を行い、メモリモジュール１０１内でセグメントの電力状態を変更することも可能である。
【００７６】
（メモリの確保・解放）
プロセスあるいはOSがメモリを必要とする場合、OSは物理ページを確保し、対応する論理アドレスを決め、アドレス変換表に書き込む。図７は、物理メモリの使用状態を模擬的に記した図である。
【００７７】
セグメントあたり物理ページが４つあり、ページ０はアドレス00000000から00000fffの領域であり、ページ１はアドレス000001000から00002fffの領域である（ページサイズ４KB）。ページ１，２，３，４は既にメモリ確保され使用中であり、残りは空き（未使用）である。
【００７８】
OSは、新たにメモリを確保する必要がある場合、空きページの中で最もアドレスの若いものを確保する。このようにすることで、空ページをアドレスの大きい領域にまとめることができ、アドレスの大きいセグメントをスリープにできるチャンスが増える。そして、論理アドレスと物理アドレスの対応をアドレス変換表に記す。
【００７９】
メモリを解放する場合には、アドレス変換テーブルの該当する領域を削除する（あるいは該当領域のエントリの属性値を未使用に変更する）。
【００８０】
（メモリモジュールの構成）
図８は、メモリモジュール１０１の構成図である。図８に示す構成例は、4セグメントの構成である。メモリモジュールは、制御部２０１と、リフレッシュカウンタ２０２と、アドレスバッファ２０３と、I/Oバッファ２０４と、4つのメモリセルアレイ部２１１、２１２、２１３、２１４とを備える。各メモリセルアレイ部は、メモリセルアレイ、ロウデコーダ、カラムデコーダ、センスアンプを備える。
【００８１】
制御部２０１は、外部からコマンドあるいは制御指示を受信し、それに従いメモリモジュール内を制御する。制御の例として、セグメントを指定した電力状態の変更がある。
【００８２】
リフレッシュカウンタ２０２は、DRAMの場合に必要になるもので、メモリ保持内容が消失しないようにリフレッシュ動作を行う際の、リフレッシュ対象セルとタイミングを指示する。
【００８３】
アドレスバッファ２０３は、外部から物理アドレスを受信し、それをカラムアドレスとロウアドレスに分け、カラムデコーダとロウデコーダに送信する。このとき、アドレスバッファ２０３は、受信したアドレスから対応するセグメントを導出し、導出されたセグメントにのみカラムアドレスとロウアドレスを送信することが望ましい。カラムアドレスおよびロウアドレスの夫々を受信したカラムデコーダとロウデコーダは、そのアドレスで指定されたメモリセルの値を読み込み（読み出しコマンドの場合）、I/Oバッファ２０４に送信する。
【００８４】
各センスアンプは、メモリセルに保持されている情報を読み出す際の信号増幅を行う。
【００８５】
各メモリセルアレイは、複数のメモリセルから構成され、情報保持を行う。
【００８６】
I/Oバッファ２０４は、メモリセルアレイと送受信するデータをいったん蓄積する。
【００８７】
ここで、カラムアドレスを送信する信号線が、アドレスバッファ２０３とセグメント０との間が一番短く、アドレスバッファ２０３とセグメント３との間が一番長いとする。アドレス線が長いほどアドレス線を駆動する電力消費が大きいとすると、その電力消費の大きいセグメントほど、なるべくスリープ状態とすることが望ましい。例えば、上述のセグメントの順序という点では消費電力の大きいセルアレイほど、セグメントの順序を大きくすることが望ましい。
【００８８】
また、図２で示したように、複数のメモリチップ１０２にて一つのメモリモジュールが構成されている場合、例えば、図２で右端のメモリチップのセルアレイほど大きなセグメント順序をアサインすることで、アクセスの遅延の大きいセルアレイへのアクセスを減らすことができる。
【００８９】
さらに、メモリモジュール内でスリープセグメント数が同じ場合でも、チップ間でスリープセグメントが散在するよりも、一つのチップにスリープセグメントが集中する方が消費電力削減効果が高い場合がある。例えば、一つのメモリチップ内の全てのセグメントがスリープになると、消費電力削減効果が高い。この場合、メモリチップ内およびメモリチップ間で、連続したセグメント順序をつけることが望ましい。例えば、４個のメモリチップを搭載したメモリモジュールを考えると、メモリチップ０内にセグメント０とセグメント１を配置し、メモリチップ１内にセグメント２とセグメント３を配置し、メモリチップ２内にセグメント４とセグメント５を配置し、メモリチップ３内にセグメント６とセグメント７を配置することが望ましい。
【００９０】
さらに、計算機が複数のメモリモジュールを備える場合には、計算機内でスリープセグメント数が同じでも、メモリモジュール間でスリープセグメントが散在するよりも、一つのメモリモジュールにスリープセグメントが集中すると、消費電力削減効果が高い場合がある。例えば、一つのメモリモジュール内の全てのセグメントがスリープになると、消費電力削減効果が高い。この場合は、メモリモジュール内およびメモリモジュール間で、連続したセグメント順序をつけることが望ましい。例えば、二つのメモリモジュールを備える場合には、メモリモジュール０にセグメント０とセグメント１を配置し、メモリモジュール１にセグメント２とセグメント３を配置することが望ましい。
【００９１】
また、複数のメモリモジュールを計算機が有し、あるメモリモジュール（あるいはメモリ機能を有する半導体）はCPUと同じLSIパッケージに存在し、別のメモリモジュールは別パッケージにて実現されているとする。このとき、同じパッケージ内のメモリモジュールのアクセスは低消費電力・低アクセス遅延で実現できることが期待できる。このため、同じパッケージ内のメモリモジュールほどアクティブ状態になることが望ましい。すなわちセグメント順序を小さく割り当てることが望ましい。
【００９２】
図９にメモリモジュールの別の構成例を示す。
【００９３】
図９では、4バンク構成で各バンク（メモリセルアレイ）３１１、３１２、３１３、３１４がセグメントに分割されている。CPUは物理アドレスを、以下のようにメモリアドレスと対応付けることが望ましい。ここで、カラムアドレス側がロウアドレス側よりもMSB（Most Significant Bit）である。転送単位とは、一度のアクセスで読み書きするデータのビット数を示している。チャネルとは、メモリチャネルの番号を示す。バンクとは、バンクの番号を示す。同一チャネルのDIMM番号とは、同じチャネルに接続されている各DIMMを識別する番号を示す。
【表２】
2014167700.tif 000006
【００９４】
こうすることで、メモリセルアレイの同一行に対してバンクを切り替えながらメモリにアクセスすることで、特に転送単位が大きい場合に、メモリアクセスの高速化が可能である。また、図４に示したようにセグメント内で物理アドレスが連続領域となるため、転送単位が大きい場合にも、複数のセグメントを跨いだアクセスが発生しづらい効果がある。この効果は、図８のメモリモジュールの構成でも、カラムアドレスをロウアドレスよりもMSB側とすることで、有効となる。
【００９５】
（システムキャッシュデータに対する動作）
OS上で動作するプロセスが、例えばfopen()システムコールを呼ぶことで、あるファイルの参照を宣言すると、OSは、そのシステムコールの引数で与えられるファイル名(例えば “/etc/appl.cfg”)に対応するファイルをハードディスクから読み、そのデータをメモリ上に書き出す。そして、そのメモリの物理アドレスをプロセス内の論理アドレスへ対応付ける(図２参照)。そのプロセスが、例えばfclose()システムコールを呼び、その引数で与えられたファイルの参照終了を宣言すると、プロセス内の論理アドレスとファイルデータの物理アドレスとの対応付けを削除する。UNIXのlibcやWindowsのDLLのような動的ライブラリにおいては、プロセスが明示的にファイル参照を宣言することはないが、プロセスの実行時に必要なライブラリをOSは知ることができる。このため、OSは明示的なファイル参照の宣言がなくとも、プロセス実行時に必要なライブラリファイルをメモリ上に配置する。
【００９６】
図１０は、システムキャッシュデータのOS内の管理構造を示している。ファイル名と対応づいたファイル識別子を基にページハッシュテーブル（page hash table）を検索することで、該当するシステムキャッシュに関するリストを得る。ここでファイル識別子とは、例えばUNIXのi nodeである。
【００９７】
Page has tableの各エントリは、（ファイル識別子、参照数、経過時間、next_hash）の情報を有する。ここで“参照数”とは、そのファイルを参照しているプロセスの数である。“経過時間”とは、参照数が０より大きい値から０になった時点からの経過時間である。“next_hash”は、システムキャッシュに関するリストのファイルデータエントリへのポインタである。
【００９８】
図１０ではシステムキャッシュに関するリストは、ファイル識別子に対応したシングルリンクドリストで構成されている。このシングルリンクドリストの各エントリ（ファイルデータエントリ）は、(ファイル識別子、オフセット、データ、next_hash)のフィールドの値を有する。“オフセット”は、そのファイル識別子に対応するファイルの先頭から何バイト目からのデータをこのエントリが保持しているかを示す。“データ”は、ファイルデータを格納する物理メモリアドレスである。“next_hash”は、次のエントリを指すポインタである。１つのファイルデータエントリが指すファイルデータは、たとえば１ページ分のデータに対応する。
【００９９】
プロセスがファイルの参照を宣言すると、OSはそのファイル識別子からpage hash tableを検索し、もしエントリが存在すれば、そのファイル識別子に対応するリストのデータの物理アドレスを、そのプロセスの仮想空間内に割り当てる。この割り当ては、プロセスのアドレス変換表（図５参照）を用いて行われる。
【０１００】
図１２は、本実施形態に係る計算機のメモリ電力制御に関わる処理部のブロック図である。本処理部は、電力状態決定部４０１と、電力状態制御部４０２と、入出力処理部４０３と、電力状態記憶部４０４とを備える。各ブロックの機能は、これらの機能の実行を記述したプログラム命令を含むプログラムを実行することにより、またはハードウエアにより、または、これらの組み合わせにより実現される。これらの機能の一部をCPUコア１２とは別のハードウエアに備えさせてもよい。当該別のハードウエアは、メモリモジュールあるいはメモリチップに実装されていてもよい。上記プログラムは、コンピュータ読取可能記録媒体に格納され、当該記録媒体から読み出して実行してもよい。
【０１０１】
図１２に示すように、入出力処理部（普通はCPU）は、外部（普通はOSから）メモリアクセス要求を受信すると（（１））、これに含まれるアドレスを電力状態決定部４０１に送信するとともに、このアドレスを含むセグメントの電力状態を電力状態記憶部４０４から得る。もし、その電力状態がスリープ状態の場合は、電力状態制御部４０２にそのセグメントをアクティブ状態にするよう要求し、その後、メモリアクセス要求に従い、データのreadあるいはwriteを実行する（（２））。電力状態がスリープであった場合には、電力状態制御部４０２に、そのセグメントをスリープ状態に戻すことを要求する。
【０１０２】
ここでメモリアクセス要求がread要求の場合は、当該read要求にはアドレス情報が含まれる。メモリからの応答には、メモリ内の指定されたアドレスに保持されていたデータ情報が含まれる。また、メモリアクセス要求がwrite要求の場合は、当該write要求に、アドレス情報と書き込むべきデータ情報が含まれる。メモリからの応答には、書き込み完了を伝えるイベントが含まれる。
【０１０３】
電力状態決定部４０１は、入出力処理部４０３からアドレスを受信するとこれの属するセグメントのアクセス回数をインクリメントする。また、時間間隔T毎にアクセス頻度をアクセス回数に基づき計算し、導出したアクセス頻度を基に、各セグメントの電力状態（スリープまたはアクティブ）を決定する。電力状態決定部４０１は、決定した各セグメントの電力状態を、電力状態制御部４０２に送信する。
【０１０４】
電力状態制御部４０２は、電力状態決定部４０１からセグメントの電力状態を受信すると、電力状態記憶部４０４に保持されている現在の電力状態と比較する。変更が必要であれば、電力状態を変更する（（３））とともに、電力状態記憶部４０４に新しい電力状態を設定する。
【０１０５】
電力状態記憶部４０４は、各セグメントの電力状態を記憶している。
【０１０６】
図１２に示した構成では、図６のセグメント情報記憶テーブルは、電力状態記憶部４０４と電力状態決定部４０１で共有保持することが考えられる。
【０１０７】
図１３は、本発明の実施形態に係る計算機のメモリデータ管理制御に関わる処理部のブロック図である。本処理部は、システムデータ処理部５０１と、アドレス変換表管理部５０２と、メモリ管理部５０３と、デバイスアクセス部５０４と、タイマ５０５とを備える。
【０１０８】
アドレス管理表管理部５０２は、図５に示したアドレス管理表を管理する。すなわち物理アドレスと、各プロセスの論理アドレスとの対応関係を保持・変更する。
【０１０９】
メモリ管理部５０３は、アドレス管理表に基づき、物理アドレスと論理アドレスとの変換を行う。論理アドレスを入力として、これに対応する物理アドレスを出力する。
【０１１０】
メモリ管理部５０３とアドレス管理表管理部５０２は、図１に示したMMU１５の機能や、メモリコントローラの機能等を含み、メインメモリへのデータのread/write処理も行う。メモリ管理部５０３に、図１２に示した構成を組み込んでもよい。
【０１１１】
デバイスアクセス部５０４は、メモリ管理部５０３の制御の下、外部のハードディスクへのデータのread/write処理を行う。
【０１１２】
タイマ５０５は、一定時間毎にシステムデータ処理部５０１にイベントを送信する。
【０１１３】
システムデータ処理部５０１は、システムデータ管理部５０６と、処理条件判定部５０７と、データ処理部５０８とを備える。
【０１１４】
システムデータ管理部５０６は、図１０に示したファイルデータ管理構造を保持・変更する。
【０１１５】
処理条件判定部５０７は、システムデータ管理部５０６から、参照数０のファイルデータに対して、そのデータがホットメモリ領域上にあるか、コールドメモリ領域上にあるかを判別する。ホットメモリ領域上にあるデータについては、参照数０になってからの経過時間と、閾値T_hotとに基づき、コールドメモリ領域へ移動するかを判断し、判断の結果をデータ処理部５０８に通知する。コールドメモリ領域に存在するデータについては、参照数が０になってからの経過時間と、閾値T_coldに基づき、データを削除するかを判断し、判断の結果をデータ処理部５０８に通知する。ダーティなデータなど、ハードディスクにデータを書き戻す場合は、データ処理部５０８にその旨を通知してもよい。
【０１１６】
データ処理部５０８は、処理条件判定部５０７からの通知内容に従い、その処理を実行する。ホットメモリ領域上のデータをコールドメモリ領域に移す場合は、そのデータを移動することをメモリ管理部５０３に指示する。メモリ管理部５０３は、指示にしたがってデータを移動し、またアドレス管理表を書き換える。また、データ処理部５０８は、データ処理の結果をシステムデータ管理部５０６に通知し、システムデータ管理部５０６は、図１０のファイルデータ管理構造を実際のメモリ保持状態と整合させるよう更新する。
【０１１７】
データ処理部５０８は、コールドメモリ領域上のデータを削除する場合は、そのデータを削除することをメモリ管理部５０３に指示する。メモリ管理部５０３は、指示にしたがってデータを削除し、またアドレス管理表を書き換える。また、データ処理部５０８は、データ処理の結果をシステムデータ管理部５０６に通知し、システムデータ管理部５０６は、図１０のファイルデータ管理構造を実際のメモリ保持状態と整合させるよう更新する。削除するデータをハードディスクに書き戻す場合には、メモリ管理部５０３に指示を出し、メモリ管理部５０３からデバイスアクセス部５０４を介してデータを書き戻す。
【０１１８】
図１１に、図１３に示した処理部の動作として、システムキャッシュの処理に関する動作のフローチャートを示す。本フローの処理は、page hash tableの各エントリ（すなわちメモリ上の各ファイル）に対して実行する。なお、前述したように、図１０の page hash tableの各エントリは、メモリ上の各ファイルに関する情報のリストのリストヘッダである。図１１のフローチャートに従った動作を、一定時間間隔毎に行うことで、システムキャッシュの移動を行う。
【０１１９】
タイマ５０５から、定期的にイベントがシステムデータ処理部５０１に出力される。システムデータ処理部５０１がイベントを検知すると、処理条件判定部５０７が、page hash tableにおけるエントリ（ファイル）を１つ特定し、当該エントリの参照数が０か否かを検査する（S101）。参照数が０でなければ（すなわち１以上であれば）、すべてのエントリを処理したかを検査し（S102）、まだ処理していないエントリがpage hash tableに存在すれば、次のエントリに移動する（S103）。すべてのエントリを処理した場合は、本フローの動作を終了する。
【０１２０】
参照数が０であれば、処理条件判定部５０７は、そのファイルのファイルデータエントリに移動し（S104）、ファイルデータがホットメモリ領域およびコールドメモリ領域のどちらに存在するかを検査する（S105）。
【０１２１】
ファイルデータがホットメモリ領域に存在するならば、処理条件判定部５０７は、参照数が０になってからの経過時間がT_hotを越えたかを判断する（S106）。つまり参照数が０になった後、参照数０の状態が第１の時間継続したかを判断する。当該経過時間がT_hotを越えた場合（S106のYES）、コールドメモリ領域に空きがあれば（S107のYES）、そのファイルデータをコールドメモリ領域に移動することを決定し、データ処理部５０８にその決定を通知する。データ処理部５０８は、メモリ管理部５０３を介してデータを移動し、アドレス管理表を更新する（S108）。また、システムデータ管理部５０６は、そのファイルデータのエントリのデータフィールドが指す領域を移動先（コールドメモリ領域内の物理アドレス）に変更する（S109）。このように、物理メモリ上のデータを移動し（上記物理ページ管理データの使用中フラッグも操作する）、ファイルデータエントリのデータフィールドが指す先を移動先の物理ページとなるように変更する。
【０１２２】
処理条件判定部５０７は、参照数が０になってからの経過時間がT_hot以下（S106のNO）、あるいはコールドメモリ領域に空きがなければ（S107のNO）、当該ファイルデータの移動を行わないことを決定する。
【０１２３】
処理条件判定部５０７は、すべてのファイルデータエントリを処理したかを検査し（S110）、まだ処理していないエントリが存在するときは、現在のエントリ内のnext_hashの指す次のエントリの処理に進む（S104）。
【０１２４】
一方、処理条件判定部５０７は、ファイルデータがコールドメモリ領域に存在するならば、参照数が０になってからの経過時間がT_coldを越えたかを判断する（S111）。つまり参照数が０になった後、参照数０の状態が第２の時間継続したかを判断する。なお、ホットメモリ領域上で参照数が０になってからコールドメモリ領域に移動した場合と、もともとコールドメモリ領域上に存在し、コールドメモリ領域に存在するときに参照数が０になった場合が考えられる。前者の場合は、ホットメモリ領域上で参照数が０になった時点が経過時間の起点となり、後者の場合は、コールドメモリ領域上で参照数が０になった時点が経過時間の起点となる。経過時間がT_coldを越えていれば、当該ファイルデータの削除をデータ処理部５０８に指示し、これに応じてデータ処理部５０８はメモリ管理部５０３を介してデータを削除し（S112）、システムデータ管理部５０６は、ファイルデータエントリをリストから削除する（S113）。ファイルデータ削除とは、（図示しない）物理ページ管理データの使用中フラッグ（データの有無を示すフラッグ）をクリアすることを意味する。ファイルデータエントリをリストから削除するとは、page hash tableの該当ファイルデータエントリをクリアすることを意味する。ファイルデータエントリを削除する際は、削除するファイルデータエントリの前段のエントリ（page hash tableのエントリか、あるいはファイルデータエントリ）のnext_hashの値を、削除するファイルデータエントリの後段のファイルデータエントリのファイル識別子を指すように更新する。処理条件判定部５０７は、すべてのファイルデータエントリを処理したかを検査し（S110）、まだ処理していないエントリが存在するときは、現在のエントリ内のnext_hashの指す次のエントリの処理に進む（S104）。
【０１２５】
図１１のフローチャートに従った動作を、一定時間間隔毎に行うことで、システムキャッシュの移動を行う。メモリの空き容量が少ない場合には、その動作の時間間隔を小さくしてもよい。また、T_hotおよびT_cold の両方または一方の値は、ファイルデータがダーティ（プロセスによりデータの値の変更が行われた）であるか、クリーン（データの値の変更が行われていない）であるかによって、異なる値を用いることもできる。ダーティの場合は、クリーンの場合よりも小さな値を用いることが望ましい。これにより、ハードディスクへの書き戻しの必要なダーティデータを優先して、メモリを解放することができる。よって、メモリが不足した際にも、ダーティデータの書き戻し時間によりメモリ解放に要する時間が長くなり、結果として新たなデータにメモリを割り当てる処理に要する時間が長くなる現象を防ぐことができる。
【０１２６】
（備考）
本実施形態によれば、セグメント毎のメモリアクセス頻度を計算し、そのアクセス頻度を元にセグメントの電力状態を制御している。本実施形態においては様々な変形が可能であり、例えば、MMUを有さない計算機アーキテクチャにおいても実行可能である。
【０１２７】
さらに、本実施形態では、OSがメモリアクセス頻度を算出し、これを基に電力状態の変更要求をメモリモジュールに送信した。別の構成として、メモリモジュールがアクセス回数の計測およびアクセス頻度の算出を行い、メモリモジュール自身がセグメントの電力状態を変更することも可能である。この場合、メモリモジュールはスリープセグメントへのメモリアクセスを検出した場合には、そのセグメントをアクティブ状態に変更し、アクセスを処理した後に、スリープ状態に該セグメントを移行する。
【０１２８】
さらに、本実施形態では、OSがメモリアクセス頻度を算出し、これを基に電力状態の変更要求をメモリモジュールに送信した。別の構成として、デーモンプロセスのようなユーザ空間で実行されるプログラムがこれを行ってもよい。または、ソフトウエアのCPU処理ではなく、別のハードウエアによる処理で実現することも可能である。
【０１２９】
本実施形態では、メモリはアクティブ状態とスリープ状態の２つの電力状態を有するとして説明を行ったが、３つ以上の電力状態を有することも可能である。例えば、読み書き可能な状態を第１アクティブ状態と第２アクティブ状態に分ける。第１アクティブ状態は第２アクティブ状態よりも、消費電力は大きいが、アクセス遅延は小さい。これは、たとえば、例えば、メモリ内部のクロックあるいはリフレッシュレートのどちから一方あるいは両方を、第１アクティブ状態の方が第２アクティブ状態よりも大きくすることで実現できる。第１アクティブ状態のセグメントのアクセス頻度Fi( )がある閾値よりも小さい場合に、第２アクティブ状態にする。もちろん、アクセス頻度がさらに小さい場合（アクセス頻度が、当該ある閾値より小さい別の閾値よりも小さい場合）にはスリープ状態にすることが望ましい
また、メモリへの読み書きのアクセスができない状態を複数に分けることができる。例えば、当該状態を、第１スリープ状態と第２スリープ状態に分ける。第１スリープ状態は第２スリープ状態よりも、消費電力は大きいが、アクティブ状態にするための遅延は小さいと定義することもできる。これは、アクセス回路のうち、給電を停止している回路部分の大きさで実現することができる。例えば、アクセス回路においてPLL以外の回路の給電を停止しているのが第１スリープ状態であり、アクセス回路においてPLLを含むほとんどの回路の給電を停止しているのが第２スリープ状態として実現することができる。第２スリープ状態のセグメントのアクセス頻度Fi( がある閾値よりも大きい場合に、第１スリープ状態にする。もちろん、アクセス頻度がさらに大きい場合（アクセス頻度が、当該ある閾値より大きい別の閾値以上の場合）には、アクティブ状態にすることが望ましい。
【０１３０】
本実施形態では、readとwriteを区別せずアクセス頻度を計算したが、readアクセス頻度とwriteアクセス頻度を計算し、これに基づき、電力状態を設定することも可能である。たとえば、readアクセス頻度が閾値より小さいとき、セグメントの電力状態として、readに対してアクセス遅延を大きくすることで、メモリの消費電力が小さくなるように回路を構成する。さらに、writeアクセス頻度が閾値より小さいとき、セグメントの電力状態として、writeに対してアクセス遅延を大きくすることで、メモリの消費電力が小さくなるようにする。これらの場合、readとwriteの電力状態を、独立にかつ同時に扱うことが望ましい。
【０１３１】
本発明は、DRAMのような揮発性メモリだけでなく、MRAMのような不揮発メモリに対しても適用可能である。この場合、スリープ状態での消費電力を一層削減することができるため、一層好適である。また、DRAMとMRAMのように複数の種別のメモリを使用した計算機に本発明を適用することもできる。
【０１３２】
本実施形態では、システムキャッシュデータが、ホットメモリ上とコールドメモリ上との間で移動しているが、他のデータ、すなわち参照されているファイルデータや、プロセスのヒープ領域やデータ領域やテキスト領域のデータなども、そのアクセス頻度等に応じて、移動する場合にも適用することができる。
【０１３３】
メモリ上のシステムキャッシュデータ（すなわち参照数０のデータ）がコールドメモリ上に保持されている場合、そのデータが参照された時点あるいは最初のアクセスが発生した時点でコールドメモリ上からホットメモリ上に移動させることが望ましい。最初のアクセスが発生した時点でホットメモリ上に移動させる場合には、そのアクセスのあったページのデータのみホットメモリ上に移動させることが望ましいが、処理を簡素化するためにアクセスのあったファイルに対する全てのコールドメモリ上のデータをホットメモリ上に移動させることも可能である。
【０１３４】
システムキャッシュデータが参照数を管理しないデータの場合、参照数が０になってからの経過時間ではなく、最後のアクセスからの経過時間を用いて本実施形態の動作を行っても良い。また、T_hot,T_coldをシステムキャッシュデータの種類、例えばページキャッシュとバッファキャッシュによって異なる値を用いることも可能である。
【０１３５】
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明とその均等の範囲に含まれる。
【図１】
2014167700.tif 000007
【図２】
2014167700.tif 000008
【図３】
2014167700.tif 000009
【図４】
2014167700.tif 000010
【図５】
2014167700.tif 000011
【図６】
2014167700.tif 000012
【図７】
2014167700.tif 000013
【図８】
2014167700.tif 000014
【図９】
2014167700.tif 000015
【図１０】
2014167700.tif 000016
【図１１】
2014167700.tif 000017
【図１２】
2014167700.tif 000018
【図１３】
2014167700.tif 000019