JP4718683B2 - コンピュータ内のアプリケーションプログラム間でフォーカスが変更されたときに物理メモリの状態を復元する方法およびシステム - Google Patents
コンピュータ内のアプリケーションプログラム間でフォーカスが変更されたときに物理メモリの状態を復元する方法およびシステム Download PDFInfo
- Publication number
- JP4718683B2 JP4718683B2 JP2000513198A JP2000513198A JP4718683B2 JP 4718683 B2 JP4718683 B2 JP 4718683B2 JP 2000513198 A JP2000513198 A JP 2000513198A JP 2000513198 A JP2000513198 A JP 2000513198A JP 4718683 B2 JP4718683 B2 JP 4718683B2
- Authority
- JP
- Japan
- Prior art keywords
- memory
- physical memory
- focus
- application
- computer
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Expired - Fee Related
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING OR CALCULATING; COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5005—Allocation of resources, e.g. of the central processing unit [CPU] to service a request
- G06F9/5011—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals
- G06F9/5016—Allocation of resources, e.g. of the central processing unit [CPU] to service a request the resources being hardware resources other than CPUs, Servers and Terminals the resource being the memory
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Description
(発明の分野)
本発明は、コンピュータのメモリ管理に関し、より詳細には、同時に実行中のプログラムが、物理メモリを共用することを仮想メモリを使用して可能とするマルチタスクオペレーティングシステム内で、物理メモリの状態を制御する方法に関する。
【0002】
(発明の背景)
「仮想メモリ」という用語は、同時に実行中のいくつかのアプリケーションプログラムが、コンピュータの物理メモリを共用できるようにする方法を指す。物理メモリは、コンピュータプログラムの実行に使用されるコンピュータのメインメモリを指し、一般にランダムアクセスメモリ(RAM)を用いて実装される。マルチタスクオペレーティングシステムは、一般に、仮想メモリを使用して、コンピュータで実行されるそれぞれのアプリケーションプログラムが使用可能なメモリを拡張する。仮想メモリは、アプリケーションから見たときにメモリがはるかに大きく見える効果を有する。この効果を生み出すために、仮想メモリマネージャ(VMM)が、物理メモリのサイズよりもはるかに大きな仮想メモリ空間からメモリを割り当てる。VMMは、ハードディスクなどのコンピュータの2次記憶空間を使用して、物理メモリの有効サイズを拡大する。VMMが、2次記憶装置から物理メモリにコードおよびデータをロードするのは、アプリケーションが実際にそれを必要としているときだけであり、例えば、読取りまたは書込み要求を処理するときである。
【0003】
プログラムが仮想メモリに対する読取りまたは書込み要求をすると、仮想メモリマネージャは、要求されたコードまたはデータが物理メモリと2次記憶装置のどちらに存在するかを判断する。物理メモリ内にある場合、仮想メモリマネージャは仮想アドレスを、物理メモリ内のコードまたはデータが存在する物理アドレスにマッピングする。一方、コードまたはデータが物理メモリにない場合には、仮想メモリマネージャは、2次記憶装置からそれを取り出して物理メモリの中に置く。このように仮想メモリマネージャは、メモリ要求を満たす必要に応じて物理メモリとの間でプログラムコードおよびデータをスワッピングすることにより、アプリケーションから見た場合に物理メモリが大きく見えるようにする。
【0004】
仮想メモリの概念を示すため、4メガバイトの物理メモリおよび追加の空きメモリ空間を有するハードドライブを備えたパーソナルコンピュータ上で実行されるオペレーティングシステムの例を考える。オペレーティングシステムは、それ自体が最大1メガバイトの物理メモリを占有するとする。ユーザが、2メガバイトを占有するゲームプログラムをハードドライブから起動したい場合、占有される物理メモリは全体で約3メガバイトとなる。次に、ゲームプログラムが、1メガバイトを超える追加のコードまたはデータファイルをロードしようとすると仮定する。この状況では物理メモリが不足し、コンピュータで現在実行中のプログラムのこれらコードおよびデータを保持することができない。
【0005】
VMMはこの問題を、実行中のプログラムを走らせるのに必要なコードおよびデータを、物理メモリとハードドライブの間でスワップすることによって解決する。例えば、特定のコードからなる命令を実行する場合には、このコードをコンピュータの物理メモリにロードしなければならない。その他のコードは、必要となるまでディスク上に置いておいてかまわない。あるコードまたはデータが物理メモリにない場合、オペレーティングシステムは、そのコードまたはデータに関連したフラグをセット(またはクリア)することによってその不在を常に記録している。そのコードまたはデータへのアクセスが試みられた場合、プロセッサは、オペレーティングシステムに問題があることを知らせる不在割込みを生成する。オペレーティングシステムは、不在のコードまたはデータを物理メモリの使用可能領域にロードするよう手配し、割込みの原因となったプログラムを再起動させる。ハードドライブと割込みとの間のコードおよびデータのスワッピングは、アプリケーションプログラムがこの割込みを処理せず、データのスワッピングも管理しないという意味において、コンピュータで実行中のアプリケーションプログラムに対して透過である。アプリケーションプログラムは、仮想メモリの仮想アドレス空間のみを取り扱い、オペレーティングシステムは、仮想メモリに対する要求を物理メモリにマッピングし、また、物理メモリとハードドライブの間でデータをスワップする。
【0006】
一般的な仮想メモリシステムでは、いくつかのオペレーティングシステムコンポーネントに物理メモリの一部分へのアクセスが保証されており、その他のいくつかのソフトウェアコンポーネントが残りの物理メモリを争う。物理メモリを常時占有するオペレーティングシステムコンポーネントには、オペレーティングシステムのカーネルのメモリ常駐コンポーネントおよびディスクキャッシュなどがある。残りの物理メモリは、動的にロードされるオペレーティングシステムコンポーネント(DLL)、アプリケーションプログラムのコードおよびデータなどのその他のソフトウェア、ならびにダイレクトメモリアクセス(DMA)バッファ、オペレーティングシステムのファイルシステム用のキャッシュ領域などの動的に割り当てられるメモリ領域によって共用される。
【0007】
物理メモリを常時占有するオペレーティングシステムコンポーネントは、物理メモリの一部分を「ロック」する。「ロック」は、物理メモリの一部分をコードまたはデータにコミットすなわち予約するメモリ管理システムの属性である。多くのオペレーティングシステムでは、割込み時に実行可能でなければならないコード、割込み時にアクセス可能である必要があるデータ、またはコンピュータのハードウェア装置が非同期にアクセスする必要があるデータを物理メモリが含む場合に、一般に物理メモリの一部分がロックされる。
【0008】
最初に、オペレーティングシステムは、アプリケーションプログラムに仮想メモリを割り当てる。しかし、オペレーティングシステムは、アプリケーションプログラムがメモリへのアクセスを試みない限り、そのプログラムに実際に物理メモリを割り当てることはしない。システムで実行中のコードがそれに割り当てられたメモリへのアクセスを試みると、オペレーティングシステムは、物理メモリをそれがいっぱいになるまで割り当て、次いで、物理メモリの一部をハードドライブにスワップして、メモリアクセスに対応する。
【0009】
仮想メモリシステムは一般に、ハードドライブのスワップファイルと呼ばれる部分を使用して、物理メモリとの間でコードおよびデータをスワッピングする。オペレーティングシステムは、アプリケーションプログラムの実行可能コード(例えば.a.exeファイル)などのプログラムコードをハードドライブから直接にロードする。アプリケーションがプログラムデータへのアクセスを要求すると、オペレーティングシステムは物理メモリを割り当て、物理メモリがいっぱいになると、続いて物理メモリとの間でのこのプログラムデータをスワップする。
【0010】
実行時、アプリケーションは、追加メモリを暗黙的にまたは明示的に要求する。暗黙的要求は、アプリケーションが、新たなウィンドウなどのリソースをオペレーティングシステムに要求したときに生じ、オペレーティングシステムは、このリソース要求に対する応答の副次的結果としてメモリを割り当てる。明示的要求は、アプリケーションが、追加メモリの割当てをオペレーティングシステムに明確に要求する関数を直接に呼び出したときに生じる。どちらの場合もオペレーティングシステムは、リソース割当て用のメモリを仮想アドレス空間から要求する。
【0011】
現在一般に使用されている仮想メモリの一形態が、ページド仮想メモリと呼ばれるものである。ページド仮想メモリ方式では、オペレーティングシステムが、メモリ割当て、割当て解除およびスワッピング操作の全てを、ページと呼ばれるメモリ単位で実行する。例えば、Intel社の386アーキテクチャと互換のマイクロプロセッサでは、1メモリページが4Kであり、それぞれのメモリセグメントが、1ページまたは複数の4Kページから成る。Windows(登録商標)95オペレーティングシステムは、ページド仮想メモリシステムを実装するオペレーティングシステムの一例である。
【0012】
ページド仮想メモリ方式を説明するのに一般に使用される用語には、ページング、ページファイル、ページフォールトがある。用語「ページング」は、物理メモリと2次記憶装置の間でコードまたはデータをスワッピングする処理を表す。用語「ページファイル」は、物理メモリとの間でスワップされたコードおよびデータのページを保持するために2次記憶装置に保持されたスワップファイルを表す。最後に、用語「ページフォールト」は、要求されたコードまたはデータを含むページが物理メモリにないため、物理メモリでメモリ要求を満たすことができないことを示す、マイクロプロセッサによって生成される割込みを表す。
【0013】
仮想メモリシステム実装の詳細は、プロセッサの設計およびメモリアドレッシング方式によって変わってくる。Intel社の386アーキテクチャは、パーソナルコンピュータ産業界で最も広範に普及しているプロセッサアーキテクチャの1つである。このアーキテクチャの基本メモリ管理機能は、Intel社の486、Pentium、Pentium II、およびPentium Proマイクロプロセッサで使用されている。386アーキテクチャは、3つの動作モード、すなわちリアルモード、プロテクトモードおよび仮想モードをサポートする。リアルモードは、8086系プロセッサとの互換性を維持するために使用されるモードである。このモードは、4つのセグメントレジスタを使用して最大1メガバイトのメモリをアドレス指定するセグメント化メモリアーキテクチャを有する。それぞれのセグメントレジスタは、メモリセグメントの最初のバイトを指す。アドレスレジスタは、メモリセグメント内のバイトに対するオフセットアドレスを記憶する。プロセッサは、セグメントレジスタの内容をアドレスレジスタと結合し、完全なアドレスを生成する。
【0014】
プロテクトモードでは、プロセッサがセグメントレジスタの内容を使用して、ディスクリプタと呼ばれる8バイトのメモリ領域にアクセスする。セグメントレジスタは、ディスクリプタのテーブルの索引を含む。プロセッサは、ディスクリプタの中の情報を使用してベースアドレスを生成する。プロセッサは次いで、アプリケーションプログラムからのオフセットアドレスをベースアドレスに結合して、物理メモリを計算する。このモードではオペレーティングシステムが、適当な任意の物理メモリ領域をセグメントとして使用することができる。1つのアプリケーションのセグメントは、連続している必要はなく、異なるサイズを有することができる。
【0015】
仮想モードは、同じ概念のセグメントを使用する点でプロテクトモードと類似しているが、1セグメントが1メガバイトどころか4ギガバイトとなる点が異なり、仮想モードによって、オペレーティングシステムは仮想メモリ方式を実装することができる。プロテクトモードと同様に、仮想モードにあるプロセッサは、セグメントレジスタの内容をディスクリプタテーブルの索引として使用する。ディスクリプタテーブルは、メモリセグメントのベースアドレスを指定する。オペレーティングシステムは、このベースレジスタをプログラムのコードまたはデータセグメントの最初のバイトを指すようにセットする。プロセッサは、32ビットのオフセットアドレスをベースアドレスに結合して、最終的な32ビットアドレスを計算する。
【0016】
386アーキテクチャで仮想メモリが使用可能となると、プロセッサは、32ビットの物理アドレスにマッピングするための最終的な32ビットアドレスの解釈を変更する。初期化中にオペレーティングシステムは、プロセッサをプロテクトモードに切換え、次いでページングを使用可能にする。ベースアドレスをプログラムからのオフセットと結合することによって計算される32ビットアドレスは、仮想メモリ空間のアドレスである。
【0017】
ページングが使用可能な状態で、プロセッサは、この仮想メモリ空間のアドレスを物理メモリ空間のアドレスにマッピングする。図1は、アプリケーションからの32ビットアドレスをプロセッサが解釈する方法を示す図である。先頭の10ビット(31..22)(図1の20参照)は、ページテーブルディレクトリ(図1の22)の索引である。ページテーブルディレクトリ中の32ビット部分はそれぞれ、ページテーブル(図1の24)を指す。オリジナルアドレスの次の10ビット(21..12)(図1の26参照)は、特定のページテーブルの索引である。ページテーブルエントリ部分(28)はそれぞれ、1ページの物理メモリを指す。仮想アドレスの残りの12ビット(11..0)(図1の30)は、このメモリページ内のオフセットを構成する。
【0018】
オペレーティングシステムは、カレントプログラムのページテーブルディレクトリのアドレスを、CR3(32)と呼ばれる専用プロセッサレジスタに記憶する。タスクを切り換えるたびにオペレーティングシステムは、CR3を再ロードすることができ、そのためCR3は新たなプログラムのページディレクトリを指す。仮想アドレスを物理アドレスにマッピングする処理は、プロセッサで実行される。メモリキャッシング手法が、頻繁に使用するページテーブルエントリが追加のメモリ参照なしに使用可能であることを保証する。
【0019】
仮想メモリ方式を十分にサポートするため、ページテーブルエントリは、ページテーブルまたは物理アドレスへのポインタ以外のものも含む。図2に、ページテーブルディレクトリとページテーブルエントリの構造の双方について1つの32ビットワードの内容を示す(図2のアイテム40および42参照)。ページテーブルディレクトリおよびそれぞれのページテーブルは、1つの4Kメモリページ(それぞれ1024エントリ)を消費する。これは全体で4GBのプログラムのアドレス空間を適切にアドレス指定することができる。ページテーブルディレクトリのフラグビットは、システムがページテーブル自体をディスク上のページングファイルに記憶することを許す。したがって、大きなプログラム(例えば256ページ分のページテーブルを必要とする1GBのプログラム)では、システムは、プログラムのコードおよびデータページと同様にページテーブルも物理メモリとの間でスワップする。
【0020】
仮想メモリ操作および386メモリ保護システムを十分にサポートするため、ページディレクトリおよびページテーブルのエントリは、いくつかのフラグビットを含む。これらフラグのうちのいくつかは、プロセッサ自体が直接に変更する。その他のフラグは、オペレーティングシステムが管理する。図2に示すようにこれらのフラグには、D、A、U/S、R/WおよびPなどのビットがある。
【0021】
プログラムがメモリページの内容を変更すると、プロセッサは、対応するページテーブルのダーティビット(図2のDビット)をセットする。このことは、メモリからページを削除して空間を空けたい場合には、まずそのページをディスクに書き込んで変更を保存しなければならないことを、オペレーティングシステムに通知する働きをする。
【0022】
ページに対して何らかの参照(読取り、書込みまたは実行)が行われると、プロセッサは、対応するページテーブルエントリのアクセスビット(図2のA)をセットする。仮想メモリマネージャは、このフラグを使用してどのくらい頻繁にページがアクセスされたかを知ることができる。どのくらい頻繁にページがアクセスされたかを知る1つの方法は、このビットを周期的にセットおよびチェックして、そのページがアクセスされているかどうかを判定することである。ハードウェアがアクセスビットをセットしないのであれば、たまにしか使用されないページのアクセスビットは変更されない。このページをメモリから除去することは、同じ期間中に確かに使用されたページを除去するよりもおそらくはよい選択であろう。Windows(登録商標)95オペレーティングシステムは、最低使用頻度(least recently used)(LRU)として知られるアルゴリズムを使用して、どのページをメモリから除去するかを決定する。より最近に使用されたページほど、再割り当てされる確率は低くなる。
【0023】
プレゼントビット(Pビット)は、テーブルエントリによってアドレス指定されたページテーブルまたはメモリページが、実際にメモリに存在する場合にのみ、1にセットされる。プログラムが存在しないページまたはページテーブルを参照しようとした場合、プロセッサは、不在割込みを生成し、オペレーティングシステムは、メモリにそのページをロードするよう手配し、そのページを必要としたプログラムを再起動させなければならない。
【0024】
ユーザ/スーパバイザビット(U/Sビット)は、386保護システムの一部である。U/Sビットが0にセットされている場合、そのメモリページはスーパバイザページである。すなわちそのページは、オペレーティングシステム自体のメモリの一部であり、ユーザレベルのプログラムは、このページに一切アクセスできない。アクセスを試みると、オペレーティングシステムが処理しなければならない割込みが生じる。
【0025】
読取り/書込みビット(R/Wビット)は、対応するメモリページへのアクセスを許されたプログラムが、そのページの内容を変更することができるかどうかを示す。値が1の場合はページ内容を変更することができる。値が0の場合には、どんなプログラムもページ中のデータを変更することができない。通常、プログラムコードを含むページは、読取り専用ページとしてセットアップされている。
【0026】
以上に説明したメモリアドレッシング方式によって、オペレーティングシステムが仮想メモリシステムを実装することが可能になる。現代のオペレーティングシステムの限界の1つは、マルチタスクオペレーティングシステムでフォーカスが変更されたときにアプリケーションの性能を低下させる傾向がある方法で、仮想メモリが実装されることである。フォーカスとは、マルチタスクオペレーティングシステムという状況では、ディスプレイモニタ上でアクティブであり、ユーザ入力を受け取っているアプリケーションプログラムの状態をいう。言い換えると、たとえオペレーティングシステムが他のプロセスにCPU時間を使用させているとしても、フォアグラウンドのアプリケーションプログラムがフォーカスを有する。
【0027】
あるアプリケーションがフォーカスを失ったとき、仮想メモリシステムは、このアプリケーションのコードおよびデータの一部をハードドライブにスワッピングする傾向がある。このことは、ゲームのように、フォーカスを有するときには物理メモリの大きな部分を使用し、フォーカスを失ったときにはめったにメモリにアクセスしない対話性の高いアプリケーションに特に当てはまる。
【0028】
この種類のアプリケーションプログラムがフォーカスを回復したときには、ディスプレイ上のオブジェクトの動きおよびユーザ入力に対するプログラムの応答がぎこちなくなる。オペレーティングシステムが必要なコードおよびデータを物理メモリに再ロードしようとするからである。これは、このようなアプリケーションがメモリにアクセスしようとすると、アプリケーションのコードおよびデータの小さい部分がハードドライブからスワップインされる、仮想メモリシステムの設計に起因する。
【0029】
マイクロソフト社のWindows(登録商標)95オペレーティングシステムなどのいくつかのオペレーティングシステムは、LRUアルゴリズムを使用して物理メモリとの間でのページのスワッピングを制御する仮想メモリを実装する。一般にこの仮想メモリシステムは、オペレーティングシステムの動的にロードされるコンポーネントのページと、アプリケーションプログラムの全てのページに同じ優先順位を与える。したがって、ゲームアプリケーションが一時的に非アクティブになった場合、オペレーティングシステムは、そのアプリケーションのページを物理メモリからスワップアウトしがちである。このアプリケーションが再びアクティブになると、オペレーティングシステムは物理メモリにページを少しずつスワップインするので、ディスプレイ上のオブジェクトの動きおよびユーザ入力に対するゲームの応答はぎごちなくなる。
【0030】
この問題に対処する1つの方法は、アプリケーションに割り当てられた物理メモリをロックし、その他のコードが物理メモリのこの部分にアクセスできないようにするものである。例えば、Windows(登録商標)オペレーティングシステムでは、アプリケーションが、物理メモリの一部に対してページロックを要求することができる。ページロックは、オペレーティングシステムが物理メモリの一部分をコミットし、その他の実行コードが利用できる物理メモリのプールからその一部分を除去する。しかしこの解決策は受け入れがたい。なぜなら、同時に実行中のアプリケーションが物理メモリにアクセスする必要が生じたが、アプリケーションが物理メモリをロックしているためにこれにアクセスすることができない場合に、システム性能が非常に低下するからである。
【0031】
(発明の要旨)
本発明は、仮想メモリを使用するマルチタスクオペレーティングシステムにおいてアプリケーションの性能を向上させる方法である。この方法では、どのアプリケーションがマルチタスクオペレーティングシステムのフォーカスを有するかを監視する。フォーカスは、アクティブ状態にあって、現在、ユーザから入力を受け取る準備ができているアプリケーションを指す。この方法では、アプリケーションがフォーカスを失ったときに、仮想メモリシステムの状態、詳細には、物理メモリに存在したアプリケーションに関連するコードおよびデータを記録する。アプリケーションが後にフォーカスを回復したときに、この方法では、以前に物理メモリ内にあったコードまたはデータを、アプリケーションが実行を再開する前に物理メモリに再ロードする。
【0032】
この方法の一手段は、アプリケーションプログラミングインタフェースの一部であり、仮想メモリを使用して物理メモリを共用させるオペレーティングシステムにおける物理メモリ割当てをアプリケーションが制御することができる。アプリケーションは、フォーカスを失ったときに物理メモリ内のコードまたはデータの状態を記憶し、その後、フォーカスを回復したときに復元することを要求することができる。この実施態様でこの要求を実施するためには、アプリケーションがAPI関数呼出しを発生し、ユーザインタフェース上のメインウィンドウの識別子を指定し、この手段がアプリケーションの状態を保存しなければならないことを指示するパラメータを渡す。
【0033】
この手段においては、メモリモニタが、同時に実行中のアプリケーションプログラム間のフォーカスの変更を監視する。別のアプリケーションのウィンドウに切り換えるなどによって、ユーザがフォーカスを変更すると、オペレーティングシステムは、メモリモニタにメッセージを送る。メモリモニタは、物理メモリマネージャに、現在、物理メモリ内に存在するアプリケーションの全てのメモリ単位を識別させる。メモリモニタは、この状態情報を、アプリケーションのプロセスIDとともに保管する。
【0034】
メモリモニタは、フォーカスの変更を監視し続け、アプリケーションがフォーカスを回復したことを検出する。アプリケーションが再開される前にメモリモニタは、物理メモリに存在しなければならないメモリ単位のリストを物理メモリマネージャに渡す。物理メモリマネージャは、アプリケーションがフォーカスを持たない間に2次記憶装置にスワップされた一切のメモリ単位を再ロードする。ページド仮想メモリシステムの一部として、この手段のメモリ単位はページである。しかし本発明の概念は、ページングに基づかないその他の形態の仮想メモリシステムにも適用することができる。
【0035】
以上説明した方法およびAPIインプリメンテーションは、いくつかの利点を有する。その1つは、フォーカスの変更が行われたときに、ページフォールトによってアプリケーションの性能が低下することを防ぐ傾向を有することである。この方法は、アプリケーションが実行を再開する前に物理メモリ割当ての状態が復元されることを保証し、これによって、ページフォールトが起こりにくくなる。アプリケーションは、フォーカスを失う前にアクセスしたのと同じコードまたはデータにアクセスしようとする可能性が高いので、物理メモリ割当ての状態を復元することによって、アプリケーションがフォーカスを回復した後のページフォールトの機会は低減する。さらに、アプリケーションの動作をぎこちなくするページフォールトの時間的広がりが起こりにくくなる。この方法の他の利点は、アプリケーションがコードまたはデータへのアクセスを明確に要求しなくても物理メモリの状態が復元されることである。この方法では、アプリケーションが実行を再開する前に自動的に状態が復元される。本発明の追加の特徴および利点は、以下の詳細説明および添付図面からより明白となろう。
【0036】
(詳細な説明)
本発明は、コンピュータのアプリケーションプログラム間でフォーカスが変更されたときに物理メモリの状態を復元する方法を指向する。一実施形態では、本発明が、米ワシントン州レドモンドのマイクロソフト社からのWindows(登録商標)95オペレーティングシステム向けの「DirectMemory」という名称のアプリケーションプログラミングインタフェース(API)に組み込まれる。簡単に説明すると、このAPIは、オペレーティングシステムが物理メモリへのアクセスをどのように管理するかを、アプリケーションが制御できるようにする一連の関数またはAPI呼出しを提供する。
【0037】
図3および以下の議論は、本発明を実装することができる適当なコンピューティング環境の概要を簡潔に示すことを目的としたものである。本発明は、パーソナルコンピュータ上で実行されるコンピュータプログラムの、コンピュータが実行可能な命令に一般的に関連して説明されるが、その他のプログラムモジュールと組み合わせて本発明を実装することもできることを当業者は認識されたい。一般に、プログラムモジュールには、特定のタスクを実行し、または特定の抽象データ型を実装するところのルーチン、プログラム、コンポーネント、データ構造などが含まれる。また本発明を、ハンドへルド装置、マルチプロセッサシステム、マイクロプロセッサベースの、またはプログラム可能な民生用電子機器、ミニコンピュータ、メインフレームコンピュータなどを含むその他のコンピュータシステムの構成を用いて実施することができることを当業者は理解されたい。本発明は、通信網を介してリンクされた遠隔処理装置によってタスクが実行される分散コンピューティング環境で実施することもできる。分散コンピューティング環境ではプログラムモジュールを、ローカルとリモートの両方のメモリ記憶装置に配置することができる。
【0038】
図3に、本発明の動作環境として機能するコンピュータシステムの一例を示す。このコンピュータシステムは、パーソナルコンピュータ120を含む。パーソナルコンピュータ120は、処理装置121、システムメモリ122、およびシステムメモリを含むさまざまなシステムコンポーネントを処理装置121に相互接続するシステムバス123を含む。このシステムバスは、メモリバスまたはメモリコントローラ、周辺バス、および、例えばPCI、VESA、Microchannel、ISAおよびEISA等のバス構成を使用したローカルバスを含むいくつかの種類のいずれかのバス構造を含むことができる。システムメモリは、リードオンリーメモリ(ROM)124およびランダムアクセスメモリ(RAM)125を含む。スタートアップ中など、パーソナルコンピュータ120内の要素間の情報転送を手助けする基本ルーチンを含む基本入出力システム(BIOS)は、ROM124に記憶される。パーソナルコンピュータ120はさらに、ハードディスクドライブ127、例えばリムーバブルディスク129に書込みまたは読取りを実施する磁気ディスクドライブ128、および例えばCD−ROMディスク131を読んだり、あるいはその他の光学的媒体から読取りまたは書込みを実施する光ディスクドライブ130を含む。ハードディスクドライブ127、磁気ディスクドライブ128および光ディスクドライブ130はそれぞれ、ハードディスクドライブインタフェース132、磁気ディスクドライブインタフェース133および光ディスクドライブインタフェース134によってシステムバス123に接続される。これらのドライブおよびその関連するコンピュータが読取り可能な媒体は、データ、データ構造、コンピュータ実行可能命令(ダイナミックリンクライブラリなどのプログラムコードと、実行可能ファイル)などの不揮発性の記憶をパーソナルコンピュータ120に提供する。以上に述べたコンピュータが読取り可能な媒体の記述はハードディスク、リムーバブル磁気ディスクおよびCDについてのものだが、さらに、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ等の、コンピュータが読取り可能な他の種類の媒体を含めることができる。
【0039】
いくつかのプログラムモジュールは、オペレーティングシステム135、1つまたは複数のアプリケーションプログラム136、その他のプログラムモジュール137およびプログラムデータ138を含む、ドライブおよびRAM125に記憶することができる。ユーザは、キーボード140およびマウス142などのポインティングデバイスを介して、コマンドおよび情報をパーソナルコンピュータ120に入力することができる。その他の入力装置(図示せず)には、マイクロホン、ジョイスティック、ゲームパッド、衛星アンテナ、スキャナ等がある。これらおよびその他の入力装置は、システムバスに結合されたシリアルポートインタフェース146を介して処理装置121に接続されることが多いが、パラレルポート、ゲームポート、ユニバーサルシリアルバス(USB)など他のインタフェースによって接続することもできる。モニタ147またはその他の種類のディスプレイ装置が、ビデオアダプタ148等のインタフェースを介してシステムバス123に接続される。モニタに加えて、パーソナルコンピュータは一般に、スピーカやプリンタ等の、その他の周辺出力装置(図示せず)を含む。
【0040】
パーソナルコンピュータ120は、リモートコンピュータ149等の1つまたは複数のリモートコンピュータへの論理接続を使用したネットワーク環境で動作することができる。リモートコンピュータ149は、サーバ、ルータ、ピア装置、またはその他の一般的なネットワークノードであり、図3には記憶装置150のみを示したが、一般にはパーソナルコンピュータ120に関して説明した要素の全てまたは多くを含む。図3に示した論理接続は、ローカルエリアネットワーク(LAN)151およびワイドエリアネットワーク(WAN)152を含む。このようなネットワーキング環境は、オフィス、企業規模のコンピュータネットワーク、イントラネットおよびインターネットに普通に見られる。
【0041】
LANネットワーキング環境で使用されるとき、パーソナルコンピュータ120は、ネットワークインタフェースまたはアダプタ153を介してローカルネットワーク151に接続される。WANネットワーキング環境で使用されるとき、パーソナルコンピュータ120は一般に、モデム154、またはインターネット等のワイドエリアネットワーク152上で通信を確立するその他の手段を含む。モデム154は、内部モデムでもまたは外部モデムでもよく、シリアルポートインタフェース146を介してシステムバス123に接続される。ネットワーク化された環境では、パーソナルコンピュータ120に関して図示したプログラムモジュールまたはそれらの部分を、リモートメモリ記憶装置に記憶することができる。図示のネットワーク接続は例示的なものであり、コンピュータ間に通信リンクを確立するその他の手段を使用することもできることを理解されたい。
【0042】
本発明の一実施形態は、アプリケーションプログラミングインタフェースの一部分であり、マイクロソフト社のWindows(登録商標)オペレーティングシステムのメモリ管理機能をアプリケーションが制御できる。このオペレーティングシステムの仮想メモリマネージャは、背景の項で説明した386プロセッサアーキテクチャ用に設計されたものである。詳細には、仮想メモリマネージャはページド仮想メモリ方式を実装する。このオペレーティングシステムは、4Kページ単位の仮想および物理メモリの割当てを管理し、ページテーブルディレクトリおよびページテーブルのエントリに記載された状態情報を使用して物理メモリの割当てを管理する。
【0043】
本手段は、メモリモニタでありオペレーティングシステムの仮想メモリマネージャと連携して働く。メモリモニタは、オペレーティングシステムのフォーカスの変更を監視する。1つのアプリケーションがフォーカスを失うと、メモリモニタは、このアプリケーションに関連したどのコードおよびデータが物理メモリ内にあるかを調べる。メモリモニタは、このアプリケーションに対する物理メモリ割当ての状態を保管する。このアプリケーションがフォーカスを回復すると、メモリモニタはオペレーティングシステムに指示して、以前に物理メモリ内にあった全てのコードまたはデータをアプリケーションが実行を開始する前に物理メモリに再ロードさせる。
【0044】
図4は、本発明の実施形態を示す図である。アプリケーション(app.1〜3)(161〜163)は、1台のコンピュータで同時に実行され、このコンピュータの物理メモリを共用しているアプリケーションプログラムを表す。これらのアプリケーションは、APIインプリメンテーション164の関数を呼び出すことによって物理メモリの割当てを制御することができる。APIインプリメンテーションの特定の例および付随する説明を以下に示す。
【0045】
APIインプリメンテーション164は、オペレーティングシステムでのフォーカスを監視するメモリモニタ165を含む。メモリモニタ165は、フォーカスが、1つのアプリケーションから別のアプリケーションに変更されたことを指示するオペレーティングシステムからのメッセージ(例えばメッセージ166)をフックする。アプリケーションプログラムは、APIインプリメンテーション中のAPI関数を呼び出すことによってフォーカスを回復したときに、物理メモリ割当ての状態を復元させたい旨を指定することができる。詳細には、マイクロソフト社のWindows(登録商標)95オペレーティングシステム用に設計されたAPIでは、アプリケーションが、APIインプリメンテーション中の関数を呼び出し、フォーカスを回復したときに物理メモリの状態を復元させたい旨を指示するパラメータおよびアプリケーションのウィンドウハンドルを指示する別のパラメータを渡す。メモリモニタ165はこのウィンドウハンドルを使用して、アプリケーションがフォーカスを獲得したことを判定する。
【0046】
図4に、アプリケーションの物理メモリ割当ての状態の一例を示すため、1つのアプリケーションに割り当てられた仮想メモリ空間170の一部を示す。仮想メモリ空間のマークしたセクション(172、174、176および178)は、現在、物理メモリ内にあるアプリケーションのコードまたはデータの部分を表す。マークしたセクションは、仮想メモリの連続した部分では必ずしもないことに留意されたい。マークしたセクションの中のコードまたはデータを記憶したメモリ単位またはこの場合ページは、物理メモリ内の使用可能な任意の位置に存在することができる。
【0047】
メモリモニタ165は、現在、どのページが物理メモリ内にあるかを、ページテーブルディレクトリおよびページテーブルのエントリから求めることによって、この状態情報を決定する。図4に示した例では、アプリケーションのコードおよびデータに関連したページテーブルが、マークしたセクションと一致するページが現在、物理メモリ内にあることを反映している。
【0048】
図4に示す物理メモリマネージャ180は、オペレーティングシステムの一部であり、コンピュータハードウェアと対話して物理メモリ割当てを制御する。物理メモリマネージャ180は、ページド仮想メモリ方式を実装し、物理メモリの割当て、物理メモリへのページのロード、および不在割込み(ページフォールト)の処理が必要なときの物理メモリと2次記憶との間のページスワッピングに責任を負う。先に述べたとおり、Windows(登録商標)95オペレーティングシステムの物理メモリマネージャは、LRUアルゴリズムを使用してページスワッピングを実装する。
【0049】
物理メモリマネージャ180は、それぞれの同時に実行中のアプリケーションの物理メモリ割当てに関する状態情報を保持する。物理メモリマネージャ180は、同時に実行中のプロセス182のリスト、および現在物理メモリ(2次記憶ではなく)内にある各プロセスのページのリストを保持する。実行プロセスはそれぞれ、プロセスIDまたはPIDを有する。この例では、3つの同時に実行中のアプリケーションプログラムがあり、したがって物理メモリマネージャ180は、これらのアプリケーションプログラムに対応する3つのPIDを追跡する。
【0050】
物理メモリマネージャ180によって維持されるこの構造では、PIDがそれぞれ、現在、物理メモリ内にあるページのリストに関連付けられる。この実施態様では、このリスト中に4つのセクションがあり、マークされた仮想メモリの4つのセクション172〜178にそれぞれ対応することに留意されたい。マークしたそれぞれのセクションに対して、対応するページ群があり、セクションの中のコードまたはデータを記憶するために使用する。
【0051】
メモリモニタ165は、ウィンドウハンドルを使用し、アプリケーションのウィンドウに宛てたオペレーティングシステムからのメッセージをインターセプトすることによってフォーカスの変更を監視する。一実施態様では、ユーザ入力に対応した、オペレーティングシステムからアプリケーションの1つ(または複数)のウィンドウへのメッセージをフックする。これらのメッセージは、アクティブ状態にあって、現在、ユーザ入力に応答するアプリケーションを示す。別の実施態様では、オペレーティングシステムサービス、すなわちシェルフックを使用して、1つのアプリケーションから別のアプリケーションへのフォーカスの変更についての通知を受け取る。
【0052】
アプリケーションがフォーカスを失うと、メモリモニタ165はこのアプリケーションの物理メモリ割当ての状態を保管する。詳細には、メモリモニタは、物理メモリマネージャ180に問い合わせ、フォーカスを失ったアプリケーションのページテーブルの状態のコピーを返すよう要求する。この実施態様におけるページテーブルの状態は、図4に示した構造184のコピーである。アプリケーションの物理メモリ割当ての状態を表す方法は、開発者が選択したデータ構造フォーマット、オペレーティングシステムの種類、および根底のメモリアーキテクチャを含むいくつかの因子に応じて変化することに留意されたい。この実施態様は、ページド仮想メモリシステムの一例に過ぎない。
【0053】
図4に示すようにメモリモニタ165は、アプリケーションがフォーカスを失ったときに物理メモリに存在したページのリストを識別する状態情報186のコピーを保持する。アプリケーションがフォーカスを回復したとき、メモリモニタ165は状態情報を取り出し、このアプリケーションがフォーカスを失ったときに物理メモリに存在したページをそれぞれロードするよう物理メモリマネージャ180に命令する。
【0054】
メモリモニタ165は、アプリケーションが実行を再開する前に、以前に物理メモリ内にあったページが全て再ロードされることを保証する。アプリケーションは、フォーカスを失ったときに実行を止めたところから実行を再開する。プログラムが実行を再開する命令のアドレスが、図4の矢印190でマークした箇所にある例を考える。アプリケーションがフォーカスを回復したときに、たとえプログラムが、仮想アドレス190に記憶された命令から実行を再開するとしても、メモリモニタ165は、セクション172〜178に関連した全てのページをロードする。したがってメモリモニタ165は、仮想アドレス190の付近のページだけをロードするのではなく、以前に割り当てられた全てのメモリが物理メモリのどこかに再ロードされることを保証する。
【0055】
先に指摘したように、メモリモニタ165は、ページテーブルの状態に基づいて物理メモリにページを再ロードするよう物理メモリマネージャ180に命令する。図5は、ページテーブル190の一例、およびこれと物理メモリ192との関係を示す図である。ページテーブル190のそれぞれのエントリ(例えば194、196、198)は、メモリ単位(すなわちページ)に対応する。ページが現在、物理メモリ内にある場合には、ページテーブルエントリのプレゼントビット(P)がセットされる。ページが現在、物理メモリ内にある場合、ページテーブルエントリの一部分が、物理メモリ中の特定の位置を参照するアドレスとなる。図5ではこのアドレスが、物理メモリ192内の割当を指すポインタとして示されている。例えば、ポインタ(200、202,204、206)は、物理メモリ192内の位置(208、210、212、214)を参照する。
【0056】
正しいページを再ロードする目的には、メモリモニタ165は、Pビットがセットされたページのリストだけを記憶すればよい。この情報を用いて、メモリモニタ165は、物理メモリ中のリストにある全てのページをロードするよう物理メモリマネージャ180に命令することができる。メモリマネージャは、これらのページを物理メモリの使用可能部分にロードする。再ロード後、これらのページの実際の位置は、アプリケーションがフォーカスを失ったときのそれとはおそらく異なる。しかし、アプリケーションにとって、図4に示した仮想メモリの状態は同じなので、このことは問題ではない。
【0057】
APIの可能な一実施態様いわゆる「DirectMemory」を以下に記載する。アプリケーションプログラムは、SetCooperativeLevel関数を呼び出し、DMSCL_PRESERVESTATEパラメータおよびアプリケーションメインウィンドウのウィンドウハンドルを渡すことによって、物理メモリ割当ての状態を復元したい旨を指定することができる。
【0058】
DirectMemory::AddMemoryToGroup
HRESULT
DirectMemory::AddMemoryToGroup(dwGroupHandle,dwCount,lplpAddr,lpdwSize)
【0059】
目的
指定されたメモリブロックを以前に作成したグループに追加する。
【0060】
パラメータ
dwGroupHandle
これは、以前に作成したグループを識別するために使用するハンドルである。
dwCount
これは、lplpAddrが指すリスト中のメモリブロックの数を示す。
lplpAddr
これは、このグループに追加するメモリブロックを指すポインタのアレイである。
lpdwSize
これは、lplpAddrが指すメモリブロックの長さを示すDWORDSのアレイである。
【0061】
リターン値
DM_OK 操作は正常に完了した。
DMERR_BADGROUP このグループは、CreateGroupによって作成されたものではない。
【0062】
DirectMemory::CreateGroup
HRESULT DirectMemory::CreateGroup(dwFlags,lpdwGroupHandle,dwCount,lplpAddr,lpdwSize)
【0063】
目的
仮想記憶管理の目的のために1単位として取り扱わなければならないメモリのセクションを含むグループを作成する。1つのグループは、ページイン、ページアウト、SOFTLOCKであり、ひとまとまりで参照カウントされる。
【0064】
パラメータ
dwFlags
DMGROUP_SOFTLOCK
DMGROUP_PRELOAD
lpdwGroupHandle
新たなグループハンドルが返されるDWORDを指す。
dwCount
これは、lplpAddrが指すリスト中のメモリブロックの数である。
lplpAddr
これは、作成中のこのグループに追加されるメモリブロックを指すポインタのアレイである。
lpdwSize
これは、lplpAddrが指すメモリブロックの長さを指示するDWORDSのアレイである。
【0065】
リターン値
DM_OK 操作は正常に完了した。
DMERR_BADDADDRESS 物理アドレスは失敗した。
【0066】
DirectMemory::DeleteMemoryFromGroup HRESULT DirectMemory::DeleteMemoryFromGroup(dwGroupHandle,dwCount,lplpAddr)
【0067】
目的
以前に作成したグループから指定されたメモリブロックを削除する。指定されたブロックが全て指定されたグループ内にない場合、この呼出しは失敗する。
【0068】
パラメータ
dwGroupHandle
これは、以前に作成したグループを識別するために使用するハンドルである。
dwCount
これは、lplpAddrが指すリスト中のメモリブロックの数である。
lplpAddr
これは、このグループに追加されるメモリブロックを指すポインタのアレイである。
【0069】
リターン値
DM_OK 操作は正常に完了した。
DMERR_BADGROUP このグループは、CreateGroupによって作成されたものではない。
DMERR_BADBLOCKS 指定されたブロックの中にこのグループに属さないものがある。
【0070】
DirectMemory::DestroyGroup
HRESULT DirectMemory::DestroyGroup(dwGroupHandle)
【0071】
目的
この関数は、以前に作成したグループを破棄する。このグループの一部であるページの全てが解放される。破棄する前にグループから全てのページを削除する必要はない。
【0072】
パラメータ
dwGroupHandle
CreateGroupによって以前に作成されたグループのハンドル。
【0073】
リターン値
DM_OK 操作は正常に完了した。
DMERR_BADGROUP このグループハンドルは、CreateGroupによって作成されたものではない。
【0074】
DirectMemory::GetMaxPhysicalMemory
HRESULT DirectMemory::GetMaxPhysicalMemory(dwFlags,IpdwNumPages)
【0075】
目的
ベストケースシナリオでアプリケーションが使用可能な物理メモリのページの数をアプリケーションに返す。
【0076】
パラメータ
dwFlags
DMGMPM_EXCLUSIVEMODE フォーカスを有するときのアプリケーションの物理メモリページ。
DMGMPM_SHARED フォーカスを持たないときのアプリケーションの物理メモリページ。
lpdwNumPages
物理メモリの4Kページの数。
【0077】
リターン値
DM_OK 操作は正常に完了した。
【0078】
DirectMemory::GetProcessWorkingSetSize
HRESULT DirectMemory::GetProcessWorkingSetSize(dwFlags,IpdwNumPages)
【0079】
目的
このAPIは、オペレーティングシステムがアプリケーションの現在のワーキングセットがそうである必要があると考えるものを返す。
【0080】
パラメータ
dwFlags
DMSPWS_EXCLUSIVEMODE フォーカスを有するときのアプリケーションのワーキングセット。
DMSPWS_SHARED フォーカスを持たないときのアプリケーションのワーキングセット。
lpdwNumPages
このアプリケーションが予約した物理メモリの4Kページの数であるDWORDを指す。
【0081】
リターン値
DM_OK 操作は正常に完了した。
DMERR_OUTOFMEMORY 要求されたワーキングセットサイズがこのシステムの物理メモリの限界を越えている。このアプリケーションのワーキングセットは変更されていない。
【0082】
DirectMemory::SetCooperativeLevel
HRESULT DirectMemory::SetCooperativeLevel(hWnd,dwFlags)
【0083】
目的
このアプリケーションがDirectMemoryの使用を望む方法を示し、DirectMemoryがアプリケーションのフォーカスを追跡するために使用しなければならないhWndを提供すること。
【0084】
パラメータ
hWnd
これは、アプリケーションフォーカスを表すhWndである。
dwFlags
DMSCL_PRESERVESTATE このフラグがセットされている場合、アプリケーションがフォーカスを失ったときにアプリケーションのメモリの状態が保存され、アプリケーションがフォーカスを回復したときにアプリケーションのメモリの状態が実行開始前に復元される。
DMSCL_EXCLUSIVEMODE このフラグがセットされている場合、アプリケーションがフォーカスを失ったときに、アプリケーションが所有するページのLRUステータスが、NOT USEDとしてマークされる。SOFTLOCKSは解放される。アプリケーションがフォーカスを回復したときにSOFTLOCKSは復元される。
DMSCL_SHARED このフラグがセットされている場合、フォーカスを失ったときにアプリケーションのSHAREDSOFTLOCKSは解放されない。フォーカスを持たないとき、アプリケーションがSOFTLOCKSを介して使用可能なメモリは小さくなる。フォーカスの喪失後も存続するSOFTLOCKSを指定する方法についてはLOCKの項を参照されたい。
【0085】
リターン値
DM_OK 操作は正常に完了した。
DMERR_BADHWND 指定されたhwndは無効であるか、または型が不正確である。
【0086】
DirectMemory::SetProcessWorkingSetSize
HRESULT DirectMemory::SetProcessWorkingSetSize(dwFlags,dwNumPages)
【0087】
目的
このAPIは、アプリケーションがオペレーティングシステムを必要とするそのワーキングセットと対話するのを可能にし、ある量の物理メモリを、これに対して空けておくことができる。
【0088】
パラメータ
dwFlags
DMSPWS_EXCLUSIVEMODE フォーカスを有するときのアプリケーションのワーキングセット。
DMSPWS_SHARED フォーカスを持たないときのアプリケーションのワーキングセット。
dwNumPages
通常使用するシナリオでスラッシングを避けるのにこのアプリケーションが必要とする4Kメモリページの数。
【0089】
リターン値
DM_OK 操作は正常に完了した。
DMERR_OUTOFMEMORY 要求されたワーキングセットサイズが、このシステムの物理メモリの限界を越えている。アプリケーションのワーキングセットは、変更されていない。
【0090】
DirectMemory::Lock
HRESULT Lock(dwFlags,lpAddr,dwSize)
【0091】
目的
このAPIは、DirectMemoryによって追跡するメモリセグメントを指定する。セグメントは、SOFTLOCKプールまたはMOSTRECENTLYUSEDプールのいずれかに追加される。SOFTLOCKプールは、アプリケーションがフォーカスを回復したときに復元され、ページロックされる。MOSTRECENTLYUSEDプールは、アプリケーションがフォーカスを獲得したときに復元される。要求された物理メモリの量が、エンドユーザが指定したアプリケーションの物理メモリの限界を上回った場合、この呼出しは失敗する。
SOFTLOCK要求は、MOSTRECENTLYUSED要求よりも優先順位が高い。
オペレーティングシステムがメモリを必要とするときには、SOFTLOCKをオーバライドすることができる。
SOFTLOCKメモリは、DMAまたは割込みサービスルーチンに対して使用してはならない。
【0092】
パラメータ
dwFlags
DMLOCK_SOFTLOCK アプリケーションがフォーカスを有するときにこのメモリをページロックする。
DMLOCK_SHAREDSOFTLOCK アプリケーションがフォーカスを持たない場合でも、このメモリをページロックする。SOFTLOCKに対するその他の全てのルールが適用され、このメモリは、オペレーティングシステムにより再生利用することができる。フォーカスを持たないアプリケーションによりSOFTLOCKすることができるメモリの量は、かなり拘束される。フォーカスを有するアプリケーションが優先権を有する。
DMLOCK_MOSTRECENTLYUSED
lpAddr
影響を受けるメモリの先頭を指すポインタ。このポインタは、386アーキテクチャシステムの4Kページに近い境界の端数は切り捨てられる。dwSizeパラメータは、同じ量だけ切り上げられる。
dwSize
影響を受けるメモリの長さ。dwSizeパラメータは、最も近い4Kページに切り上げられる。
【0093】
リターン値
DM_OK 操作は正常に完了した。
DMERR_OUTOFMEMORY この要求を満たすだけの物理メモリは残っていない。
【0094】
DirectMemory::Unlock
HRESULT DirectMemory::Unlock(lpAddr)
【0095】
目的
以前にロックされたメモリセクションのSOFTLOCKまたはMOSTRECENTLYUSEDの指定を解放する。
【0096】
パラメータ
lpAddr
以前にLockに渡されたポインタ。
【0097】
リターン値
DM_OK 操作は正常に完了した。
DMERR_NOTLOCKED 物理アドレスはロックされていなかった。
【0098】
本発明を特定の実施態様に関して説明してきたが、本発明の範囲を逸脱することなくこの実施態様を変更できることを強調しておく。この実施態様は、コードおよびデータをページ単位で物理メモリとの間でスワッピングする仮想記憶管理システムに対して設計されている。しかし本発明を、コードおよびデータ単位のスワッピングを代替の方式を使用してオペレーティングシステムに適用することもできる。仮想メモリシステムの物理メモリ割当ての状態は、異なるさまざまなフォーマットで記憶することができ、物理メモリ割当ての状態を記憶するための特定フォーマットのデータ構造に対する開発者の設計上の選択、オペレーティングシステムの物理メモリマネージャの設計、および根底にあるプロセッサのメモリアーキテクチャに拠る。
【0099】
以上に説明した実施態様の方法は、ウィンドウなどのグラフィカルユーザインタフェースからの入力を監視することによってフォーカスの変更を監視することができるマルチタスクオペレーティングシステムに適用される。フォーカスの変更は、ユーザが制御キーまたは1組のキーを押してフォーカスを変更するなどの非グラフィカル入力によっても引き起こされる。フォーカスの変更は、周辺装置によって生成された割込みなどのその他のイベントにオペレーティングシステムが応答することによっても開始される。
【0100】
本発明の原理を適用することができる多くの可能な実施形態があることを考れば、本明細書に示した実施形態は、単に本発明の好ましい例であるに過ぎず、これを、本発明の範囲を限定するものと解釈してはならない。本発明の範囲は以下の特許請求の範囲によって定義される。したがって発明者らは、これらの特許請求の範囲および趣旨に包含される一切のものを我々の発明として請求する。
【図面の簡単な説明】
【図1】 386プロセッサアーキテクチャにおける仮想メモリアドレッシング方式を示す図である。
【図2】 図1に示したページテーブルディレクトリおよびページテーブルのエントリを示す図である。
【図3】 本発明の実施形態の動作環境として機能するコンピュータシステムを示す図である。
【図4】 本発明の実施形態を示す図である。
【図5】 ページテーブルの一例およびこれと物理メモリとの関係を示す図である。
Claims (5)
- コンピュータで同時に実行中のアプリケーションプログラム間でフォーカスが変更されたときに、オペレーティングシステムでの前記フォーカスを監視し、前記コンピュータ内の物理メモリ割当ての状態を復元する方法において、
前記オペレーティングシステムに実装されたアプリケーションプログラムインタフェース(API)を介して、前記オペレーティングシステムのフォーカスを監視するためのメモリモニタが実行され、前記アプリケーションプログラムから渡されたパラメータに基づいて、前記メモリモニタを実行するコンピュータが前記オペレーティングシステムから前記アプリケーションプログラムへのメッセージをフックして、前記フォーカスを監視する第1ステップと、
前記アプリケーションプログラムが前記フォーカスを失ったときに、前記メモリモニタを実行するコンピュータが物理メモリマネージャに要求して、物理メモリ内にある前記アプリケーションプログラムのコードまたはデータの部分を識別する状態情報を含むページテーブルから前記フォーカスを失ったアプリケーションプログラムの状態情報を受け取り、前記コードまたはデータの部分を記憶するページのリストを保存する第2ステップと、
前記アプリケーションプログラムを実行するコンピュータが前記APIの関数を呼び出すと、前記アプリケーションプログラムが前記フォーカスを回復したときに、前記メモリモニタを実行するコンピュータが、前記保存されたページのリストを使用して前記物理メモリマネージャに命令し、前記物理メモリマネージャを実行するコンピュータが、前記アプリケーションプログラムの実行が再開される前に前記アプリケーションプログラムの前記コードまたはデータの部分を、前記保存されたページのリストに基づいて、2次記憶装置から前記物理メモリに再ロードする第3ステップと
を備えることを特徴とする方法。 - 請求項1に記載の方法において、前記第1ステップは、
前記フォーカスが変更されたときを判定するために前記同時に実行中のアプリケーションプログラムのグラフィカルユーザインタフェースへのユーザ入力を監視するステップを含むことを特徴とする方法。 - 請求項1に記載の方法において、
前記物理メモリの割当ての状態を保存するための前記アプリケーションプログラムからのAPI関数呼出しに応答して、請求項1に記載の第1から第3ステップを実行することを特徴とする方法。 - 請求項1に記載の方法において、
別の同時に実行中のアプリケーションプログラムに対して請求項1に記載の第1から第3ステップを繰り返すことを特徴とする方法。 - コンピュータに、請求項1に記載の方法を実行させるための命令を記憶するコンピュータ読み取り可能な記憶媒体。
Applications Claiming Priority (3)
| Application Number | Priority Date | Filing Date | Title |
|---|---|---|---|
| US08/936,358 | 1997-09-24 | ||
| US08/936,358 US6247042B1 (en) | 1997-09-24 | 1997-09-24 | Method and system for restoring the state of physical memory as the focus changes among application programs in a computer |
| PCT/US1998/019387 WO1999015964A1 (en) | 1997-09-24 | 1998-09-15 | Method and system for restoring the state of physical memory as the focus changes among application programs in a computer |
Publications (2)
| Publication Number | Publication Date |
|---|---|
| JP2001517830A JP2001517830A (ja) | 2001-10-09 |
| JP4718683B2 true JP4718683B2 (ja) | 2011-07-06 |
Family
ID=25468517
Family Applications (1)
| Application Number | Title | Priority Date | Filing Date |
|---|---|---|---|
| JP2000513198A Expired - Fee Related JP4718683B2 (ja) | 1997-09-24 | 1998-09-15 | コンピュータ内のアプリケーションプログラム間でフォーカスが変更されたときに物理メモリの状態を復元する方法およびシステム |
Country Status (4)
| Country | Link |
|---|---|
| US (1) | US6247042B1 (ja) |
| EP (1) | EP1018076A1 (ja) |
| JP (1) | JP4718683B2 (ja) |
| WO (1) | WO1999015964A1 (ja) |
Families Citing this family (33)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| JP3444346B2 (ja) * | 1999-01-04 | 2003-09-08 | 日本電気株式会社 | 仮想メモリ管理方式 |
| US6842901B1 (en) * | 1999-04-23 | 2005-01-11 | Nortel Networks Limited | Thread memory reclamation |
| US6618851B1 (en) * | 1999-08-31 | 2003-09-09 | Autodesk, Inc. | Method and apparatus for state-reversion |
| US6629227B1 (en) | 2000-05-04 | 2003-09-30 | Scientific-Atlanta, Inc. | System and method for a communication terminal to manage memory and maintain a current application version for multiple applications |
| WO2004105328A1 (en) * | 2003-05-21 | 2004-12-02 | Philips Intellectual Property & Standards Gmbh | Message memory for a communication protocol and method |
| US9092262B2 (en) * | 2003-06-27 | 2015-07-28 | I-Rescue Technologies Llc | Method and apparatus integrating navigation and saving the writable state of applications |
| US8489920B2 (en) * | 2003-06-27 | 2013-07-16 | I-Cue Design, Inc. | Method and apparatus integrating navigation and saving the writable state of applications |
| US7032088B2 (en) * | 2003-08-07 | 2006-04-18 | Siemens Corporate Research, Inc. | Advanced memory management architecture for large data volumes |
| US7260698B2 (en) * | 2003-10-30 | 2007-08-21 | International Business Machines Corporation | Method and system for page initialization using off-level worker thread |
| US7721292B2 (en) * | 2004-12-16 | 2010-05-18 | International Business Machines Corporation | System for adjusting resource allocation to a logical partition based on rate of page swaps and utilization by changing a boot configuration file |
| US9146865B2 (en) | 2005-01-26 | 2015-09-29 | Lantiq Beteiligungs-GmbH & Co.KG | Operating a dual-ported internal memory |
| EP1866782A4 (en) * | 2005-04-08 | 2009-10-21 | Biap Systems Inc | METHOD AND SYSTEM FOR DOWNLOADING APPLICATIONS IN POOR MEMORY SYSTEMS |
| US20060259953A1 (en) * | 2005-05-16 | 2006-11-16 | Powertech Group Inc | Method and apparatus for managing computer system access |
| US8745252B2 (en) * | 2005-09-21 | 2014-06-03 | Sap Ag | Headers protocol for use within a web services message processing runtime framework |
| US7716279B2 (en) * | 2005-09-21 | 2010-05-11 | Sap Ag | WS addressing protocol for web services message processing runtime framework |
| US7606921B2 (en) * | 2005-09-21 | 2009-10-20 | Sap Ag | Protocol lifecycle |
| US7788338B2 (en) * | 2005-09-21 | 2010-08-31 | Sap Ag | Web services message processing runtime framework |
| US7711836B2 (en) * | 2005-09-21 | 2010-05-04 | Sap Ag | Runtime execution of a reliable messaging protocol |
| US7716360B2 (en) * | 2005-09-21 | 2010-05-11 | Sap Ag | Transport binding for a web services message processing runtime framework |
| US7761533B2 (en) * | 2005-09-21 | 2010-07-20 | Sap Ag | Standard implementation container interface for runtime processing of web services messages |
| US7721293B2 (en) * | 2005-09-21 | 2010-05-18 | Sap Ag | Web services hibernation |
| US20070067461A1 (en) * | 2005-09-21 | 2007-03-22 | Savchenko Vladimir S | Token streaming process for processing web services message body information |
| US20070179072A1 (en) * | 2006-01-30 | 2007-08-02 | Rao Madhukar B | Cleaning formulations |
| JP5245231B2 (ja) * | 2006-09-07 | 2013-07-24 | 日本電気株式会社 | メモリ管理方法、メモリ管理装置およびプログラム |
| JPWO2008041357A1 (ja) * | 2006-09-29 | 2010-02-04 | 株式会社Access | 文書処理装置およびプログラム |
| JP2009123064A (ja) * | 2007-11-16 | 2009-06-04 | Toshiba Corp | 計算機システム |
| US8776078B2 (en) * | 2008-05-20 | 2014-07-08 | International Business Machines Corporation | Method for dynamically freeing computer resources |
| US8566481B2 (en) | 2009-06-10 | 2013-10-22 | Cisco Technology, Inc. | Managing configuration data |
| JP5351853B2 (ja) * | 2010-08-05 | 2013-11-27 | 株式会社エヌ・ティ・ティ・ドコモ | 情報処理端末及びリソース解放方法 |
| US20140298245A1 (en) * | 2013-03-28 | 2014-10-02 | Microsoft Corporation | Display Instance Management |
| US10397365B2 (en) * | 2015-11-06 | 2019-08-27 | International Business Machines Corporation | Method to reduce reactivation time of cloud based services |
| KR20210049602A (ko) | 2019-10-25 | 2021-05-06 | 삼성전자주식회사 | 컴퓨팅 장치 및 그 동작 방법 |
| US12182449B2 (en) | 2022-05-25 | 2024-12-31 | Samsung Electronics Co., Ltd. | Systems and methods for managing a storage system |
Family Cites Families (14)
| Publication number | Priority date | Publication date | Assignee | Title |
|---|---|---|---|---|
| US4688167A (en) | 1984-09-27 | 1987-08-18 | Wang Laboratories, Inc. | Screen manager for data processing system |
| US4967353A (en) | 1987-02-25 | 1990-10-30 | International Business Machines Corporation | System for periodically reallocating page frames in memory based upon non-usage within a time period or after being allocated |
| US5125086A (en) | 1989-06-29 | 1992-06-23 | Digital Equipment Corporation | Virtual memory paging apparatus with variable size in-page clusters |
| US5394537A (en) | 1989-12-13 | 1995-02-28 | Texas Instruments Incorporated | Adaptive page placement memory management system |
| WO1992002879A1 (en) | 1990-08-03 | 1992-02-20 | Du Pont Pixel Systems Limited | Virtual memory system |
| US5386536A (en) | 1991-03-28 | 1995-01-31 | Courts; Howard R. | Apparatus and method for managing memory allocation |
| US5630097A (en) * | 1991-06-17 | 1997-05-13 | Digital Equipment Corporation | Enhanced cache operation with remapping of pages for optimizing data relocation from addresses causing cache misses |
| US5572694A (en) | 1992-11-25 | 1996-11-05 | Fujitsu Limited | Virtual system for detecting access paths belonging to same group from plurality of access paths to reach device designated by command with reference to table |
| US5535364A (en) | 1993-04-12 | 1996-07-09 | Hewlett-Packard Company | Adaptive method for dynamic allocation of random access memory to procedures having differing priorities based on first and second threshold levels of free RAM |
| US5499354A (en) | 1993-05-19 | 1996-03-12 | International Business Machines Corporation | Method and means for dynamic cache management by variable space and time binding and rebinding of cache extents to DASD cylinders |
| US5606685A (en) | 1993-12-29 | 1997-02-25 | Unisys Corporation | Computer workstation having demand-paged virtual memory and enhanced prefaulting |
| DE69522534T2 (de) | 1994-11-18 | 2002-04-25 | Compaq Computer Corp., Houston | Schneller Zugriff auf Rechneranwendungen |
| US5727178A (en) | 1995-08-23 | 1998-03-10 | Microsoft Corporation | System and method for reducing stack physical memory requirements in a multitasking operating system |
| US6078942A (en) * | 1996-04-25 | 2000-06-20 | Microsoft Corporation | Resource management for multimedia devices in a computer |
-
1997
- 1997-09-24 US US08/936,358 patent/US6247042B1/en not_active Expired - Lifetime
-
1998
- 1998-09-15 WO PCT/US1998/019387 patent/WO1999015964A1/en not_active Ceased
- 1998-09-15 EP EP98948301A patent/EP1018076A1/en not_active Withdrawn
- 1998-09-15 JP JP2000513198A patent/JP4718683B2/ja not_active Expired - Fee Related
Also Published As
| Publication number | Publication date |
|---|---|
| US6247042B1 (en) | 2001-06-12 |
| WO1999015964A1 (en) | 1999-04-01 |
| EP1018076A1 (en) | 2000-07-12 |
| JP2001517830A (ja) | 2001-10-09 |
Similar Documents
| Publication | Publication Date | Title |
|---|---|---|
| JP4718683B2 (ja) | コンピュータ内のアプリケーションプログラム間でフォーカスが変更されたときに物理メモリの状態を復元する方法およびシステム | |
| US6134602A (en) | Application programming interface enabling application programs to group code and data to control allocation of physical memory in a virtual memory system | |
| JP4160255B2 (ja) | 仮想記憶システムにおける物理メモリの割り振りをアプリケーションプログラムによって制御するアプリケーション・プログラミング・インターフェイス | |
| US6460126B1 (en) | Computer resource management system | |
| US5842226A (en) | Virtual memory management for a microkernel system with multiple operating systems | |
| US7487329B2 (en) | Page replacement policy for systems having multiple page sizes | |
| US6125430A (en) | Virtual memory allocation in a virtual address space having an inaccessible gap | |
| US7528838B2 (en) | Video memory management | |
| KR0170565B1 (ko) | 메모리 관리 방법, 마이크로커널 구조 데이타 프로세싱 시스템, 운영 체제 퍼스낼리티 시스템 동작 방법, 퍼스낼리티 뉴트럴 서비스 프로그램 실행 방법 및 응용 프로그램 실행방법 | |
| US8321638B2 (en) | Cooperative mechanism for efficient application memory allocation | |
| US5946711A (en) | System for locking data in a shared cache | |
| US7206915B2 (en) | Virtual space manager for computer having a physical address extension feature | |
| US5835961A (en) | System for non-current page table structure access | |
| US5920895A (en) | Mapped file input/output with delayed zeroing | |
| US6457107B1 (en) | Method and apparatus for reducing false sharing in a distributed computing environment | |
| WO2006019656A2 (en) | System and method for managing memory | |
| JPH0564817B2 (ja) | ||
| US7853771B2 (en) | Page allocation management for virtual memory | |
| Song et al. | An Efficient Stack Management by The Selective Revocation of Mapping from Virtual Memory to Physical memory |
Legal Events
| Date | Code | Title | Description |
|---|---|---|---|
| A621 | Written request for application examination |
Free format text: JAPANESE INTERMEDIATE CODE: A621 Effective date: 20050726 |
|
| RD04 | Notification of resignation of power of attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7424 Effective date: 20050726 |
|
| A131 | Notification of reasons for refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A131 Effective date: 20080401 |
|
| A601 | Written request for extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A601 Effective date: 20080701 |
|
| A602 | Written permission of extension of time |
Free format text: JAPANESE INTERMEDIATE CODE: A602 Effective date: 20080708 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20081001 |
|
| A02 | Decision of refusal |
Free format text: JAPANESE INTERMEDIATE CODE: A02 Effective date: 20081121 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20090219 |
|
| RD13 | Notification of appointment of power of sub attorney |
Free format text: JAPANESE INTERMEDIATE CODE: A7433 Effective date: 20090223 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A821 Effective date: 20090223 |
|
| A911 | Transfer to examiner for re-examination before appeal (zenchi) |
Free format text: JAPANESE INTERMEDIATE CODE: A911 Effective date: 20090327 |
|
| A912 | Re-examination (zenchi) completed and case transferred to appeal board |
Free format text: JAPANESE INTERMEDIATE CODE: A912 Effective date: 20090529 |
|
| A521 | Request for written amendment filed |
Free format text: JAPANESE INTERMEDIATE CODE: A523 Effective date: 20110307 |
|
| A01 | Written decision to grant a patent or to grant a registration (utility model) |
Free format text: JAPANESE INTERMEDIATE CODE: A01 |
|
| A61 | First payment of annual fees (during grant procedure) |
Free format text: JAPANESE INTERMEDIATE CODE: A61 Effective date: 20110401 |
|
| R150 | Certificate of patent or registration of utility model |
Free format text: JAPANESE INTERMEDIATE CODE: R150 |
|
| FPAY | Renewal fee payment (event date is renewal date of database) |
Free format text: PAYMENT UNTIL: 20140408 Year of fee payment: 3 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| S111 | Request for change of ownership or part of ownership |
Free format text: JAPANESE INTERMEDIATE CODE: R313113 |
|
| R350 | Written notification of registration of transfer |
Free format text: JAPANESE INTERMEDIATE CODE: R350 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| R250 | Receipt of annual fees |
Free format text: JAPANESE INTERMEDIATE CODE: R250 |
|
| LAPS | Cancellation because of no payment of annual fees |