(57)【特許請求の範囲】
【請求項１】
複数のブロックを含むダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）を制御するためのＤＲＡＭコントローラであって、ブロックは前記ＤＲＡＭ内の１つ又は複数のストレージ・ユニットであり、当該ＤＲＡＭコントローラは前記ＤＲＡＭに対するリフレッシュを選択的にイネーブル又はディセーブルすることができ、
当該ＤＲＡＭコントローラは、
それぞれが前記ＤＲＡＭの複数のブロックのうちの１つのブロックと関連する複数のフラグと、
前記複数のブロックのうちの１つのブロックがサニタイズされるべきであると判定し、それに応答して前記複数のブロックのうちの１つのブロックと関連する、前記複数のフラグのうちの１つのフラグをセットし、該ブロックのリフレッシュをディセーブルするサニタイズコントローラと、
前記ＤＲＡＭの前記複数のブロックの異なるブロックに対し、前記サニタイズコントローラによって別個に割り当て可能な複数のサニタイズ検出ハードウェアインスタンスと、
を含み、
引き続く前記ブロック内のロケーションからのデータ読み取り要求の受信に応答して、前記フラグがクリアされている場合には、当該ＤＲＡＭコントローラは前記ロケーションを読み出し、そこから読み出されたデータを返し、前記フラグがセットされている場合には、当該ＤＲＡＭコントローラはゼロ値を返し、ＤＲＡＭの読み出しを行わない、ＤＲＡＭコントローラ。
【請求項２】
引き続く前記ブロック内のロケーションへのデータ書き込み要求の受信に応答して、
（ａ）前記フラグがクリアされている場合には、当該ＤＲＡＭコントローラは前記データを前記ロケーションに書き込み、
（ｂ）前記フラグがセットされている場合には、当該ＤＲＡＭコントローラは前記ブロックのリフレッシュをイネーブルし、前記データを前記ロケーションへ書き込むことをさらに含む、請求項１記載のＤＲＡＭコントローラ。
【請求項３】
引き続く前記ブロック内の前記ロケーションへのデータ書き込み要求の受信に応答して、
（ｂ）前記フラグがセットされている場合には、当該ＤＲＡＭコントローラはさらに前記フラグをクリアし、前記ブロック内の全ての他のロケーションにゼロ値を書き込むことをさらに含む、請求項２記載のＤＲＡＭコントローラ。
【請求項４】
引き続く前記ブロック内の前記ロケーションへのデータ書き込み要求の受信に応答して、
前記フラグがセットされている場合には、当該ＤＲＡＭコントローラは、書き込まれるべきデータが非ゼロである場合にのみ、動作（ａ）及び（ｂ）を実行することをさらに含む、請求項２記載のＤＲＡＭコントローラ。
【請求項５】
コントロールレジスタをさらに含み、
前記サニタイズコントローラは、前記ＤＲＡＭ及び当該ＤＲＡＭコントローラを含むシステムのシステムソフトウェアにより前記コントロールレジスタへの書き込みを検出することによって、前記ブロックがサニタイズされるべきであると判定する、請求項１に記載のＤＲＡＭコントローラ。
【請求項６】
前記サニタイズコントローラは、前記ブロックの全てのロケーションへ、前記ブロックのロケーションへの非ゼロ値の書き込みの介入なしに、一連のゼロ値書き込みを検出することによって、前記ブロックがサニタイズされるべきであると判断するハードウェアを備える、請求項１に記載のＤＲＡＭコントローラ。
【請求項７】
各サニタイズ検出ハードウェアインスタンスは、
ＤＲＡＭコントローラがブロック内のどのロケーションにゼロ値が書き込まれたかを追跡するために使用するビットマップと、
前記ビットマップが全て真のビットを有するときを検出するロジックと、を備える、請求項１に記載のＤＲＡＭコントローラ。
【請求項８】
各サニタイズ検出ハードウェアインスタンスは、
最も新しくゼロ値が書き込まれた前記ブロック内の固定サイズのワードの後の次の固定長のワードのインデックスを保持するレジスタであって、当該インデックスが現在のゼロ値の固定長ワード書き込みのインデックスと一致するとインクリメントされるレジスタと、
前記現在のゼロ値の固定長ワード書き込みのインデックスが前記ブロック内の最高インデックスとなるときを検出するロジックとを備える、請求項１に記載のＤＲＡＭコントローラ。
【請求項９】
複数のブロックを含むダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）を制御するための方法であって、ブロックは前記ＤＲＡＭ内の１つ又は複数のストレージ・ユニットであり、ＤＲＡＭコントローラは前記ＤＲＡＭに対するリフレッシュを選択的にイネーブル又はディセーブルすることができ、
当該方法は、
前記複数のブロックのうちの１つのブロックがサニタイズされるべきであると判定するステップであり、それに応答して、前記複数のブロックのうちの１つのブロックと関連するフラグをセットし、該ブロックのリフレッシュをディセーブルする、判定ステップを備え、
前記フラグは、それぞれがＤＲＡＭの複数のブロックのうちの１つのブロックと関連する複数のフラグのうちの１つのフラグであり、
当該方法はさらに、
前記ＤＲＡＭの前記複数のブロックの異なるブロックに対し、複数のサニタイズ検出ハードウェアインスタンスを別個に割り当てるステップと、
引き続く前記ブロック内のロケーションからのデータ読み取り要求の受信に応答して、
前記フラグがクリアされている場合に、前記ロケーションを読み出し、そこから読み取られたデータを返すステップと、
前記フラグがセットされている場合に、前記ＤＲＡＭの読み出しを行わず、ゼロ値を返すステップと、を備える方法。
【請求項１０】
引き続く前記ブロック内のロケーションからのデータ書き込み要求の受信に応答して、
（ａ）前記フラグがクリアされている場合に、前記データを前記ロケーションに書き込むステップと、
（ｂ）前記フラグがセットされている場合に、前記ブロックのリフレッシュをイネーブルし、前記ロケーションに前記データを書き込むステップと、をさらに備える、請求項９に記載の方法。
【請求項１１】
引き続く前記ブロック内のロケーションからのデータ書き込み要求の受信に応答して、
（ｂ）前記フラグがセットされている場合に、さらに、前記フラグをクリアし、前記ブロック内の全ての他のロケーションにゼロ値を書き込むステップをさらに備える、請求項１０に記載の方法。
【請求項１２】
引き続く前記ブロック内のロケーションからのデータ書き込み要求の受信に応答して、
前記フラグがセットされている場合に、書き込まれるべきデータが非ゼロである場合にのみ、動作（ａ）及び（ｂ）を実行するステップをさらに備える、請求項１０に記載の方法。
【請求項１３】
前記ブロックがサニタイズされるべきであると判定する前記判定ステップは、前記ＤＲＡＭ及びコントロールレジスタを含むＤＲＡＭコントローラを有するシステムのシステムソフトウェアによって前記コントロールレジスタへの書き込みを検出するステップをさらに備える、請求項９に記載の方法。
【請求項１４】
前記ブロックがサニタイズされるべきであると判定する前記判定ステップは、前記ブロックのロケーションへの非ゼロ値の書き込みの介入なしに、前記ブロックの全てのロケーションへの一連のゼロ値書き込みを検出するステップをさらに備える、請求項９に記載の方法。
【請求項１５】
当該方法は、前記ＤＲＡＭの前記複数のブロックの異なるブロックに対し、別個に割り当て可能な複数のサニタイズ検出ハードウェアインスタンスを備えたＤＲＡＭコントローラによって実行されることをさらに含む、請求項１４に記載の方法。
【請求項１６】
前記ブロック内のロケーションへのゼロ値の書き込みの検出に応答してビットマップのビットを真にセットするステップであって、前記ビットマップの各ビットが前記ブロック内の異なるロケーションと関連しているステップをさらに備え、
前記ブロックがサニタイズされるべきであると判定する判定ステップは、前記ビットマップが全て真のビットを有することを検出するステップをさらに備える、請求項１５に記載の方法。
【請求項１７】
インデックスが現在のゼロ値の固定長ワード書き込みのインデックスと一致すると、レジスタをインクリメントすることによって、前記ブロック内の最も新しくゼロ値が書き込まれた固定サイズのワードの後の次の固定長ワードのインデックスを保持するようにレジスタを維持するステップをさらに備え、
前記ブロックがサニタイズされるべきであると判定する前記判定ステップは、前記現在のゼロ値の固定長ワード書き込みのインデックスが前記ブロック内の最高インデックスとなるときを検出するステップを備える、請求項１５に記載の方法。
【請求項１８】
コンピューティングデバイスと共に使用するための少なくとも１つの非揮発性コンピュータ使用可能媒体において符号化されたコンピュータプログラムであって、
当該コンピュータプログラムは、
複数のブロックを含むダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）を制御するためのコントローラを指定するための前記媒体内に具現化されたコンピュータ使用可能プログラムコードを含み、ブロックは前記ＤＲＡＭ内の１つ又は複数のストレージ・ユニットであり、ＤＲＡＭコントローラは前記ＤＲＡＭに対するリフレッシュを選択的にイネーブル又はディセーブルすることができ、
前記コンピュータ使用可能プログラムコードは、
それぞれが前記ＤＲＡＭの複数のブロックのうちの１つのブロックと関連する複数のフラグを指定する第１のプログラムコードと、
前記複数のブロックのうちの１つのブロックがサニタイズされるべきであると判定し、それに応答して前記複数のブロックのうちの１つのブロックと関連する、前記複数のフラグのうちの１つのフラグをセットし、該ブロックのリフレッシュをディセーブルし、前記ＤＲＡＭの前記複数のブロックの異なるブロックに対し、複数のサニタイズ検出ハードウェアインスタンスを別個に割り当てる、サニタイズコントローラを指定する第２のプログラムコードとを備え、
引き続く前記ブロック内のロケーションからのデータ読み取り要求の受信に応答して、前記フラグがクリアされている場合に、当該ＤＲＡＭコントローラは前記ロケーションを読み出し、そこから読み出されたデータを返し、前記フラグがセットされている場合に、当該ＤＲＡＭコントローラはＤＲＡＭの読み出しを行わず、ゼロ値を返す、コンピュータプログラム。
【請求項１９】
前記少なくとも１つの非揮発性コンピュータ使用可能媒体は、ディスク、テープ、又は他の磁気、光学、又は電子記憶媒体の群から選択される、請求項１８に記載のコンピュータプログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願への相互参照
本出願は、参照によりその全体が本明細書に組み込まれる、ＳＡＮＩＴＩＺＥ−ＡＷＡＲＥ  ＤＲＡＭ  ＣＯＮＴＲＯＬＬＥＲと題する米国仮出願第６２／３２３，１７７号（２００６年４月１５日出願）に基づく優先権を主張する。
【背景技術】
【０００２】
ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）は、現代のコンピューティングシステムにおいて普及している。ＤＲＡＭは、コストが低く、容量／密度が高く、高速であるため、普及している。密度の利点は、主に、データビットを記憶するための各セルがコンデンサおよび単一トランジスタのみを必要とするという事実に由来する。これは、例えば、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）でセル当たりに必要とされるよりも著しく少ないハードウェアである。しかしながら、セルのキャパシタへのデータビットの記憶は、電力消費コストを意味する。これは、コンデンサの電荷が時間とともにリークし、セルに値の喪失を引き起こす。したがって、その値を保持するために、コンデンサは定期的に「リフレッシュ」されねばならない。これは、セルから現在の値を読み取り、その値を「リフレッシュ」するためにセルに書き戻すことを含む。リフレッシュ動作は、リフレッシュを必要としない他のメモリ技術以上の追加の電力を消費する。リフレッシュは、システムによるＤＲＡＭアクセスの需要に応じて、ＤＲＡＭのエネルギー消費のかなりの割合、例えば約２０％に寄与し、システム性能を、例えば約３０％低下させる可能性がある。
【０００３】
本発明の共同発明者の一人による米国特許第５，４６９，５５９号には、ＤＲＡＭの有効なデータを含まない選択された部分をリフレッシュするためのメモリコントローラおよび方法が記載されている。これは、無効なデータへの不要なリフレッシュによって消費される電力の量が削減される可能性がある。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】米国仮出願第６２／３２３，１７７号明細書
【特許文献２】米国特許第５４６９５５９号明細書
【発明の概要】
【０００５】
本発明の発明者らは、さらなる利点を提供するＤＲＡＭコントローラの実施形態を提供する。追加の利点は、多くのオペレーティングシステムが、例えばハッカー及び／又はメモリが割り当てられた次のユーザが第１のユーザのデータを見ることを防止することによってシステムセキュリティを高めるために、割り当てを解除されたメモリにゼロに書き込むことによってそのメモリを「サニタイズ」するということを本発明者が見出したことによって主に享受される
【図面の簡単な説明】
【０００６】
【図１】図１は、コンピューティングシステムを示すブロック図である。
【図２】図２は、別の実施形態によるコンピューティングシステムを示すブロック図である。
【図３】図３は、システムの動作を示すフローチャートである。
【図４】図４は、システムの動作を示すフローチャートである。
【図５】図５は、システムの動作を示すフローチャートである。
【図６】図６は、一実施形態によるサニタイズされたＤＲＡＭブロックの選択的リフレッシュを実行するオペレーションシステムの動作を示すフローチャートである。
【図７】図７は、サニタイズ検出ハードウェア（ＳＤＨ）インスタンスを示すブロック図である。
【図８】図８は、図７のＳＤＨインスタンスを使用することによってＤＲＡＭブロックがサニタイズされるべきであることを検出するＤＲＡＭコントローラの動作を示すフローチャートである。
【発明を実施するための形態】
【０００７】
ＤＲＡＭのブロックは、ＤＲＡＭ内の１つ又は複数のストレージユニットであり、ＤＲＡＭコントローラは、それに対してリフレッシュを選択的にイネーブル又はディセーブルすることができる。例えば、データＲＡＭ１２２の「行」と一般に称されるものがリフレッシュ可能である。いくつかのＤＲＡＭでは、例えば、１行は５１２バイトのストレージである。
【０００８】
ＤＲＡＭのブロックをサニタイズすることは、ブロック内のすべてのロケーションをゼロ値にクリアすることを意味する。
【０００９】
ここで図１を参照すると、コンピューティングシステム１００を示すブロック図が示されている。コンピューティングシステム１００は、プロセッサ１０２と、ＤＲＡＭ１０４と、プロセッサ１０２をＤＲＡＭ１０４に接続するＤＲＡＭコントローラ１０３と、ＤＲＡＭコントローラ１０３を介してＤＲＡＭ１０４にアクセスする他のバスマスタ１０６、例えばバスマスタリングＩ／Ｏデバイスと、を含む。プロセッサ１０２は、マルチコアプロセッサであってもよい。プロセッサ１０２は、オペレーティングシステム及び／又は基本入出力システム（ＢＩＯＳ）又は拡張ファームウェアなどのシステムファームウェア並びにユーティリティ及びアプリケーションプログラムなどのシステムソフトウェアを含むプログラムを実行する。ＤＲＡＭ１０４は、複数のＤＲＡＭブロック１４２として構成される。システムソフトウェアは、とりわけ、ＤＲＡＭブロック１４２全体を含むＤＲＡＭ１０４の一部をサニタイズする。多くのオペレーティングシステムは、プロセッサ１０２にサポートされる仮想メモリシステムに従ってサイズが判定されているページの粒度でメモリをサニタイズする。例えば、共通のページサイズは、４ＫＢ、６４ＫＢ、１ＭＢ、１６ＭＢ、２５６ＭＢ、１ＧＢ及び２ＧＢである。
【００１０】
ＤＲＡＭコントローラ１０３は、ＤＲＡＭブロック１４２としての、例えばＤＲＡＭ１０４の行のリフレッシュを、ＤＲＡＭコントローラが選択的にイネーブル又はディセーブルできるＤＲＡＭ１０４内の１つ又は複数のストレージの単位を考慮する。いくつかの実施形態では、ＤＲＡＭブロック１４２のサイズは、プロセッサ１０２の仮想メモリシステムによってサポートされる最小のページのサイズに対応する。例えば、ＤＲＡＭコントローラがリフレッシュを選択的にイネーブル又はディセーブルすることができるストレージの単位が５１２バイト行であり、プロセッサ１０２によってサポートされる最小ページサイズが４ＫＢである場合、ＤＲＡＭコントローラ１０３は、ＤＲＡＭ１０４の８つの連続する行をＤＲＡＭブロック１４２として考慮する。
【００１１】
ＤＲＡＭコントローラ１０３は、サニタイズビット１３２とも呼ばれる複数のサニタイズフラグ１３２及びサニタイズコントローラ１３４を含む。一実施形態では、ＤＲＡＭコントローラ１０３は、ＤＲＡＭ１０４の対応する各ＤＲＡＭブロック１４２について、サニタイズビット１３２を含む。
【００１２】
ここではサニタイズ範囲の実施形態と称される代替的実施形態において、各サニタイズビット１３２は、一緒にサニタイズペアを構成する対応する範囲レジスタを有する。範囲レジスタは、アドレスおよび連続するＤＲＡＭブロック１４２の範囲を指定するカウントを保持する。アドレスは、範囲内の第１または開始のＤＲＡＭブロック１４２を指定し、カウントはその範囲内の連続するＤＲＡＭブロック１４２の数を指定する。サニタイズビット１３２がセットされている場合、対応する範囲レジスタで指定されたＤＲＡＭブロック１４２の範囲は、以下により詳細に説明するように、サニタイズされたとみなされる。サニタイズコントローラ１３４は、複数のサニタイズペアを、プールとして扱い、そのプールから一連の連続したＤＲＡＭブロック１４２に対する割り当てを行うことができ（例えば図３のブロック３０４）、そのプールへ割り当て解除することができる（例えば、図５のブロック５０８）。サニタイズビット１３２がセットされている場合、サニタイズペアが割り当てられていることを示し、サニタイズビット１３２がクリアされている場合、これは、サニタイズペアが割り当てのために空いていることを示す。
【００１３】
ここで図２を参照すると、代替的実施形態によるコンピューティングシステム１００を示すブロック図が示されている。図２のコンピューティングシステム１００は、図１のコンピューティングシステム１００と類似であり、類似の要素を含む。しかしながら、図２のコンピューティングシステム１００では、ＤＲＡＭコントローラ１０３がプロセッサ１０２に組み込まれている。より具体的には、プロセッサ１０２は、ＤＲＡＭコントローラ１０３が接続されたリングバス２２６を含む。プロセッサ１０２はまた、リングバス２２６に接続された複数の処理コア２２２を含む。プロセッサ１０２はまた、コア２２２によって共有されるリングバス２２６に接続されたラストレベルキャッシュ（ＬＬＣ）２２４を含む。好ましくは、ＤＲＡＭコントローラ１０３、ＬＬＣ２２４、及び各コア２２２は、それをリングバス２２６に接続する関連するリングストップ２２８を有する。最後に、プロセッサ１０２は、Ｉ／Ｏデバイス１０６をリングバス２２６に接続するＩ／Ｏリングストップ２２８を含む。
【００１４】
ここで図３を参照すると、システム１００の動作を示すフローチャートが示されている。フローはブロック３０２で開始する。
【００１５】
ブロック３０２において、ＤＲＡＭコントローラ１０３は、ＤＲＡＭブロック１４２がサニタイズされるべきであると判定する。一実施形態では、システムソフトウェアは、例えば、図６に関して以下に説明するように、ＤＲＡＭブロック１４２がサニタイズされるべきであることをＤＲＡＭコントローラ１０３に通知する。別の実施形態では、ＤＲＡＭコントローラ１０３は、例えば、図７および図８に関して以下に説明するように、ＤＲＡＭブロック１４２に対するゼロ値書き込みを監視することによって判定を行うハードウェアを含む。ＤＲＡＭブロック１４２がサニタイズされるべきであることを判定するための他の実施形態も考えられる。フローはブロック３０４に進む。
【００１６】
ブロック３０４において、ＤＲＡＭコントローラ１０３は、ブロック３０２で判定されたＤＲＡＭブロック１４２に関連付けられたサニタイズビット１３２をセットする。さらに、ＤＲＡＭコントローラ１０３は、そのＤＲＡＭブロック１４２のリフレッシュをディセーブルする。サニタイズ範囲の実施形態では、ＤＲＡＭコントローラ１０３は、サニタイズペアを割り当て、サニタイズビット１３２をセットし、範囲内の第１のＤＲＡＭブロック１４２のアドレスと、範囲内のＤＲＡＭブロック１４２の数の総数とを範囲レジスタに投入する。さらに、ＤＲＡＭコントローラ１０３は、その範囲のすべてのＤＲＡＭブロック１４２のリフレッシュをディセーブルする。フローはブロック３０４で終了する。
【００１７】
ここで図４を参照すると、システム１００の動作を示すフローチャートが示されている。フローはブロック４０２で開始する。
【００１８】
ブロック４０２において、ＤＲＡＭコントローラ１０３は、ＤＲＡＭ１０４のロケーションからの読み出し要求を受信する。このロケーションは、ＤＲＡＭブロック１４２に関係し、即ちそのアドレスに基づいてＤＲＡＭブロック１４２内にある。フローは判断ブロック４０４に進む。
【００１９】
判断ブロック４０４において、ＤＲＡＭコントローラ１０３は、関係するＤＲＡＭブロック１４２に対応するサニタイズビット１３２がセットされているかどうかを判定する。そうであれば、フローはブロック４０８に進み、そうでなければフローはブロック４０６に進む。サニタイズ範囲の実施形態では、サニタイズコントローラ１３４は、読み出し要求のアドレスが、サニタイズビット１３２がセットされたサニタイズペアの範囲レジスタで指定された範囲に入ることを判定する。
【００２０】
ブロック４０６において、ＤＲＡＭコントローラ１０３は、指定されたロケーションをＤＲＡＭ１０４から読み出し、ＤＲＡＭコントローラ１０３の通常動作に従って、読み出されたデータを返す。フローはブロック４０６で終了する。
【００２１】
ブロック４０８において、ＤＲＡＭコントローラ１０３は、ＤＲＡＭ１０４を読み出さず、その代わりに読み出し要求にゼロ値を返す。これは、読み出し要求によって関係付けられたＤＲＡＭブロック１４２が判断ブロック４０４でサニタイズされると判定されたためである。フローはブロック４０８で終了する。
【００２２】
（例えば、ブロック４０８において）ブロックがサニタイズされているときＤＲＡＭを読み取らないことの利点は、（１）ゼロ値を維持するためにＤＲＡＭブロックをリフレッシュする必要がないので、より少ない電力が消費されうること、（２）ソフトウェアがデータの読み出しを要求しても、ＤＲＡＭがデータを読み取るためにアクセスされないので、より少ない電力が消費されうること、（３）要求されたデータを読み取るためにＤＲＡＭにアクセスする必要がないので、リード要求の待ち時間が短くなるため性能が向上しうること、があり、それらのすべてはデータの要求されている値がゼロであることが分かっていることにより可能となる。
【００２３】
ここで図５を参照すると、システム１００の動作を示すフローチャートが示されている。フローはブロック５０２で開始する。
【００２４】
ブロック５０２において、ＤＲＡＭコントローラ１０３は、ＤＲＡＭ１０４のロケーションへのデータ書き込み要求を受信する。より具体的には、ＤＲＡＭコントローラ１０３は、書き込まれるデータが非ゼロ値であると判定する。このロケーションは、ＤＲＡＭブロック１４２に関係し、即ち、そのアドレスに基づいてＤＲＡＭブロック１４２内にあるか、又は、サニタイズ範囲の実施形態におけるＤＲＡＭブロック１４２の範囲に関係する。代替的実施形態では、ＤＲＡＭコントローラ１０３は、書き込まれるデータが非ゼロであるかどうかをチェックするのではなく、代わりにデータ値に関係なく図５の動作を実行する。ＤＲＡＭコントローラ１０３がＤＲＡＭ１０４のロケーションにゼロ値を有するデータを書き込む要求を受信した場合には、サニタイズビット１３２がセットされていればＤＲＡＭコントローラ１０３はＤＲＡＭ１０４に書き込まないのに対して、サニタイズビット１３２がクリアされていれば、ＤＲＡＭコントローラ１０３がゼロ値をＤＲＡＭ１０４の指定されたロケーションに書き込む。フローは判断ブロック５０４に進む。
【００２５】
判断ブロック５０４において、ＤＲＡＭコントローラ１０３は、関係するＤＲＡＭブロック１４２に又はＤＲＡＭブロック１４２の範囲に対応するサニタイズビット１３２が設定されているかどうかを判定する。そうであれば、フローはブロック５０８に進む。そうでない場合、フローはブロック５０６に進む。サニタイズ範囲の実施形態では、サニタイズコントローラ１３４は、書き込み要求のアドレスが、サニタイズビット１３２がセットされたサニタイズペアの範囲レジスタに指定された範囲に入ると判定する。
【００２６】
ブロック５０６において、ＤＲＡＭコントローラ１０３は、指定されたデータをＤＲＡＭ１０４の特定の場所に、即ちＤＲＡＭコントローラ１０３の通常の動作に従って書き込む。フローはブロック５０６で終了する。
【００２７】
ブロック５０８において、ＤＲＡＭコントローラ１０３は、関係するＤＲＡＭブロック１４２に対応するサニタイズビット１３２をクリアする。さらに、ＤＲＡＭコントローラ１０３は、関係するＤＲＡＭブロック１４２のリフレッシュ、又は、サニタイズ範囲の実施形態において範囲レジスタによって関係付けられたＤＲＡＭブロック１４２の範囲のリフレッシュを再びイネーブルする。さらに、ＤＲＡＭコントローラ１０３は、指定されたデータをＤＲＡＭ１０４の指定されたロケーションに書き込む。最後に、ＤＲＡＭコントローラ１０３は、書き込み要求によって指定されたロケーション以外の、ＤＲＡＭブロック１４２のすべてのロケーション又はＤＲＡＭブロック１４２の関係する範囲に、ゼロを書き込む。フローはブロック５０８で終了する。
【００２８】
サニタイズされたブロックへの第１の非ゼロ書き込みが行われるまで、ブロックの他のロケーションにゼロ値を書き込むのを待つことの長所は、（１）そのブロックが割り当てられたことをオペレーティングシステムが示すとすぐにリフレッシュが開始される場合（例えば、米国特許第５，４６９，５５９号）に比べて、ＤＲＡＭブロックが追加の回数量だけリフレッシュされず、場合によってそれは、そのブロックが割り当てられた後、ソフトウェアがそのブロックに書き込む前に、かなりの回数量となりうるので、より少ない電力が消費されるかもしれないという点、（２）オペレーティングシステムは、ブロックにゼロを書き込むために、プロセッサ１０２が数十から数百のオーダーに及びうる命令を実行することを含む、ブロックへのゼロ書き込みを、全ては実行する必要がない、という点である。この後者の考察は、次のよう利点を有する。（ａ）多くの書き込み命令を実行する必要がないので、プロセッサ１０２によってより少ない電力が消費される、（ｂ）プロセッサ１０２が多くの書き込み命令を実行する必要がなくなり、したがって他の命令を実行する空きができるので、システム性能が改善され得る、（ｃ）ＤＲＡＭコントローラ１０３は、プロセッサ１０２が書き込み命令を実行し、かつ、ＤＲＡＭコントローラ１０３への書き込み要求を作成しなければならない場合に生じる、余分な待ち時間なしでブロックへのゼロ書き込みを実行するのでシステム性能が改善され得る。第２の利点（２）は、図７及び図８のサニタイズ検出ハードウェア（ＳＤＨ）の実施形態によっては実現されないことがあると理解されるべきである。
【００２９】
ここで図６を参照すると、一実施形態による、サニタイズされたＤＲＡＭブロック１４２の選択的リフレッシュを実行するシステム１００の動作を示すフローチャートが示されている。フローはブロック６０２で開始する。
【００３０】
ブロック６０２において、（例えば、オペレーティングシステム又は他のエグゼクティブなどの）システムソフトウェアは、ＤＲＡＭブロック１４２をサニタイズすることを判定する。例えば、いくつかのオペレーティングシステムは、メモリロケーションのシークエンス、即ち、所定のメモリアドレスから始まる所定の数の連続するメモリロケーションをサニタイズするために呼び出されるシステムコールであって、ＵＮＩＸ（登録商標）オペレーティングシステム及び、ＭａｃＯＳＸ並びにＭｉｃｒｏｓｏｆｔＷｉｎｄｏｗｓの後のバージョンのような同種のオペレーティングシステムで見られるｂｚｅｒｏ（）やｍｅｍｓｅｔ（）のようなシステムコールを提供する。慣習的に、それらのシステムコールを実行するルーチンは、所定のシークエンスで全てのメモリロケーションへのゼロ値の一連の書き込みを行う。一実施形態では、システムコールを実行するルーチンは、ＤＲＡＭコントローラ１０３の能力を利用して変更される。より具体的には、ルーチンは、１つ又は複数のＤＲＡＭブロック１４２全体が一連のメモリロケーションによって含まれるかどうかをチェックする。そうであれば、従来のように含まれているブロック１４２への一連のゼロ値書き込みを実行する代わりに、ルーチンは、ブロック６０４に関して説明するように、ＤＲＡＭコントローラ１０３へ、含まれているブロック１４２をサニタイズするように要求する書き込みをする。フローはブロック６０４へ進む。
【００３１】
ブロック６０４において、システムソフトウェアは、サニタイズすべきブロック１４２のアドレスをＤＲＡＭコントローラ１０３に書き込む。好ましくは、ＤＲＡＭコントローラ１０３は、アドレスを受け取るコントロールレジスタを含む。即ち、コントロールレジスタは、ＤＲＡＭ１０４及びＤＲＡＭコントローラ１０３を含むシステム１００上（例えば、プロセッサ１０２上）で実行されるシステムソフトウェアによって書き込み可能である。サニタイズ範囲の実施形態では、システムソフトウェアは、アドレス及びその範囲のＤＲＡＭブロック１４２の数の両方を書き込む。フローはブロック６０６に進む。
【００３２】
ブロック６０６において、ＤＲＡＭコントローラ１０３は、指定されたブロック１４２又はブロック１４２の範囲に対して図３の動作を実行する、即ち、ブロック１４２又はブロック１４２の範囲に関連するサニタイズビット１３２を設定し、ブロック１４２又はブロック１４２の範囲に対してリフレッシュをディセーブルする。フローはブロック６０６で終了する。
【００３３】
ここで図７を参照すると、サニタイズ検出ハードウェア（ＳＤＨ）インスタンス７００を示すブロック図が示されている。一実施形態では、ＤＲＡＭコントローラ１０３は複数のＳＤＨインスタンス７００を含み、そこからＤＲＡＭコントローラ１０３が割り当てを行い（例えば、図８のブロック８０６）、その中へＤＲＡＭコントローラ１０３が割り当てを解除する（例えば、図８のブロック８１８）。ＳＤＨインスタンス７００は、有効ビット７０２、ビットマップ７０４、アドレスレジスタ７０８、及びコントロールロジック７０６を含む。有効ビット７０２は、真の場合にＳＤＨインスタンス７００が割り当てられていることを示し、偽の場合にＳＤＨインスタンス７００が空いていることを示す。ビットマップ７０４は、そのアドレスがアドレスレジスタ７０８に保持されているＤＲＡＭブロック１４２の各ロケーションに対するビットを含む。様々な実施形態では、ＤＲＡＭブロック１４２内のロケーションは、整列バイト、１６ビットハーフワード、３２ビットワード、６４ビットダブルワード、１２８ビットクワドワード、又は２５６ビットオクタワードに対応する。一実施形態では、ロケーションは、例えばプロセッサ１０２のラストレベルキャッシュの整列キャッシュラインに対応する。図８を参照して以下に説明するように、コントロールロジック７０６は、有効ビット７０２、ビットマップ７０４、及び、アドレスレジスタ７０８の読み出し及び更新に関連する動作を実行する。
【００３４】
ここで図８を参照すると、図７のＳＤＨインスタンス７００を使用することによってＤＲＡＭブロック１４２がサニタイズされることを検出するＤＲＡＭコントローラ１０３の動作を示すフローチャートが示されている。フローはブロック８０２で開始する。
【００３５】
ブロック８０２において、ＤＲＡＭコントローラ１０３は、ＤＲＡＭ１０４のロケーションにデータを書き込む要求を受信する。そのロケーションは、ＤＲＡＭブロック１４２を表し、即ち、そのアドレスに基づいてＤＲＡＭブロック１４２内にあるか、又は、サニタイズ範囲の実施形態におけるＤＲＡＭブロック１４２を表す。フローは判断ブロック８０４に進む。
【００３６】
判断ブロック８０４において、ＤＲＡＭコントローラ１０３は、ＳＤＨインスタンス７００が、書き込み要求によって関係付けられたＤＲＡＭブロック１４２又はＤＲＡＭブロック１４２の範囲に対して割り当てられているかどうかを判定する。より具体的には、ＤＲＡＭコントローラ１０３は、読み出し要求アドレスの関連部分が、ＳＤＨインスタンス７００の有効ビット７０２のアドレス７０８と一致するかどうかを判定する。そうであれば、フローは判断ブロック８０８に進み、そうでなければ、フローはブロック８０６に進む。
【００３７】
ブロック８０６において、サニタイズコントローラ１３４は空きＳＤＨインスタンス７００を割り当てる。好ましくは、ＳＤＨインスタンス７００を割り当てることは、空きＳＤＨインスタンス７００（即ち、有効ビット７０２が偽である）を見つけること、有効ビットを真に初期化すること、ビットマップ７０４の全てのビットをゼロへとクリーニングすること、及び、書き込み要求アドレスの関連部分をアドレスレジスタ７０８に書き込むことを含む。好ましくは、割り当てるべき空きＳＤＨ７００がない場合、ＤＲＡＭコントローラ１０３は単に通常通り継続する、即ち、ブロックがサニタイズされていることを検出することを試みない。フローはブロック８０６で終了する。
【００３８】
判断ブロック８０８において、サニタイズコントローラ１３４は、書き込まれるべき値がゼロであるかどうかを判定する。そうであれば、フローはブロック８１４に進む。そうでなければ、フローはブロック８１２に進む。
【００３９】
ブロック８１２において、サニタイズコントローラ１３４は、ＤＲＡＭブロック１４２に対して以前に（即ち、ブロック８０６において）割り当てられたＳＤＨインスタンス７００を割り当て解除する。好ましくは、ＳＤＨインスタンス７００の割り当てを解除することは、後の割り当てのためにＳＤＨインスタンス７００を解放する、有効なビット７０２をクリアすることを含む。フローは、ブロック８１２で終了する。
【００４０】
ブロック８１４において、サニタイズコントローラ１３４は、ブロック８０２で受信された要求によって書き込まれたＤＲＡＭブロック１４２内のロケーションに関連するビットマップ７０４のビットをセットする。フローは、判断ブロック８１６に進む。
【００４１】
判断ブロック８１６において、サニタイズコントローラ１３４は、ビットマップ７０４が一杯であるかどうか、即ち、ビットマップ７０４のビットがすべてセットされているかどうかを判定する。そうであれば、フローはブロック８１８に進む。そうでなければ、フローは終了する。
【００４２】
ブロック８１８において、サニタイズコントローラ１３４は、ＤＲＡＭブロック１４２に対して以前に割り当てられたＳＤＨインスタンス７００を割り当て解除し、図３を参照して説明したＤＲＡＭブロック１４２の動作の実行を開始する。なぜなら、サニタイズコントローラ１３４は、システムソフトウェアがＤＲＡＭブロック１４２をサニタイズしたと判定したからである。
【００４３】
ＳＤＨインスタンスの他の実施形態も考えられる。一実施形態では、ＤＲＡＭコントローラ１０３は、ブロック１４２をサニタイズするための一連のゼロ値書き込みが固定サイズワードであり、ブロック１４２の第１のロケーションから始まると仮定する。この実施形態はビットマップ７０４を必要とせず、その代わりに、最も新しくゼロ値が書き込まれたブロック１４２のワードの後のブロック１４２内の固定サイズワードのインデックスを保持するレジスタを必要とする。動作中、ＤＲＡＭコントローラ１０３は、ブロック１４２における第１のロケーションへのデータ値の書き込みを検出する。ＳＤＨインスタンスがブロック１４２に対して割り当てられておらず、書き込みが固定サイズのゼロ値ワードである場合、ＤＲＡＭコントローラ１０３は、ＳＤＨインスタンスを割り当てる。ＳＤＨインスタンスの割り当ては、レジスタを１の値に初期化することが含まれる。ＳＤＨインスタンスがブロック１４２に割り当てられている場合、ＤＲＡＭコントローラ１０３は、データ値がゼロであり、レジスタのインデックスが現在のゼロ値書き込みのインデックスと一致するかどうかを判定する。そうでなければ、ＤＲＡＭコントローラ１０３はＳＤＨインスタンスを割り当て解除する。そうでない場合、ＤＲＡＭコントローラ１０３は、レジスタのインデックスがブロック１４２で最高のインデックスであるかどうかを判定する。そうであれば、ＤＲＡＭコントローラ１０３はＳＤＨインスタンスを割り当て解除し、ブロックに対して図３の動作を実行する。そうでなければ、ＤＲＡＭコントローラ１０３はレジスタをインクリメントする。
【００４４】
本発明の様々な実施形態をここで説明してきたが、それらは例として提示されおり、限定ではないことを理解されたい。関連するコンピュータ技術の当業者には、本発明の範囲から逸脱することなく、形態及び詳細の様々な変更を行うことができることが明らかであろう。例えば、ソフトウェアは、ここで説明された装置及び方法の、例えば、機能、製造、モデリング、シムレーション、ディスクリプション及び／又は試験を可能にすることができる。これは、一般的なプログラミング言語（例えば、Ｃ、Ｃ＋＋）、ＶｅｒｉｌｏｇＨＤＬ、ＶＨＤＬなどを含むハードウェア記述言語（ＨＤＬ）、又は他の利用可能なプログラムを使用して達成することができる。そのようなソフトウェアは、磁気テープ、半導体、磁気ディスク、又は光ディスク（例えば、ＣＤ−ＲＯＭ、ＤＶＤ−ＲＯＭなど）、ネットワーク、有線、無線又は他の通信媒体のような、公知のコンピュータ読取可能媒体に配列され得る。ここで説明された装置及び方法の実施形態は、（例えば、ＨＤＬで具体化又は指定され）集積回路の製造においてハードウェアに変換されるプロセッサコアなどの半導体知的財産コアに含まれてもよい。さらに、個々で説明される装置及び方法は、ハードウェアとソフトウェアとの組み合わせとして実施されてもよい。したがって、本発明は、ここで説明された例示的実施形態のいずれによっても制限されるべきではなく、添付の特許請求の範囲及びそれらの均等物に従ってのみ定義されるべきである。具体的には、本発明は、汎用コンピュータで使用可能なプロセッサ装置内で実施することができる。最後に、当業者は、添付の特許請求の範囲によって定義された本発明の範囲を逸脱することなく、本発明と同じ目的を実現するための他の構造を設計し又は改変するための基礎として、開示された概念を容易に使用することができることを評価すべきである。
【図１】
0006373336.tif 000002
【図２】
0006373336.tif 000003
【図３】
0006373336.tif 000004
【図４】
0006373336.tif 000005
【図５】
0006373336.tif 000006
【図６】
0006373336.tif 000007
【図７】
0006373336.tif 000008
【図８】
0006373336.tif 000009