(57)【要約】アプリケーションプログラミングインターフェイス（ＡＰＩ）によって、マルチタスキング処理環境においてアプリケーションプログラムに、仮想記憶システム上の物理メモリの割り振りを制御させるものである。ＡＰＩ機能の１つは、アプリケーションによって、コードまたはデータに対してソフトページロックを指定させるものである。アプリケーションがフォーカスを有するとき、オペレーティングシステムは、指定されたコードまたはデータが物理メモリに存在することを保証する。アプリケーションがフォーカスをなくしたとき、コードまたはデータが関連するページは、開放される。アプリケーションがフォーカスを回復したとき、オペレーティングシステムは、アプリケーションが実行を開始する前に、物理メモリ内にそのページを再ロードする。オペレーティングシステムは、必要に応じて、ソフトページロックを上書きすることができるようになる。その他のＡＰＩは、ロックを使用せずに、アプリケーションに、物理メモリへのアクセスについて高優先度を有すべきコードまたはデータを指定させる。このＡＰＩによって、アプリケーションは、同じ物理メモリを取り合うその他のコードまたはデータの優先度と比べて、その優先度を定めるコードまたはデータに優先度を割り当てることによって、コードまたはデータが物理メモリに残るであろうという公算を、具体的に制御することが可能となる。
2004500605.tif 000002
【特許請求の範囲】
【請求項１】
同時に実行される複数のアプリケーションに仮想記憶システムにおける割り振りを制御させる方法であって、
ソフトページロックさせるコードまたはデータを指定することを要求する或るアプリケーションプログラムからの要求に応答して、前記指定されたコードまたはデータを物理メモリ内にロードし、前記指定されたコードまたはデータが２次記憶装置にスワップされるのを前記仮想記憶システムによって防止させることによって、前記指定されたコードまたはデータに対して物理メモリの一部を保証するステップと、
同時に実行される複数のアプリケーションプログラムのフォーカスを監視し、前記アプリケーションがフォーカスをなくした場合に、前記物理メモリをその他の同時に実行される複数のアプリケーションプログラムによって使用することができるように、前記コードまたはデータについて保証された前記物理メモリのうち少なくとも一部を開放するステップと、
前記アプリケーションが前記フォーカスを回復した場合に、前記アプリケーションが実行される前に、物理メモリから開放された前記コードまたはデータを再ロードするステップと、
を含む方法。
【請求項２】
物理メモリの割り振りを監視し、どれくらいの前記物理メモリを前記同時に実行される複数のアプリケーションプログラムに対して割り振ることが可能であるかを判断するステップと、
前記同時に実行される複数のアプリケーションプログラムに対して割り振ることが可能な前記物理メモリの量が、所定の閾値を下回る場合に、他の同時に実行される複数のアプリケーションプログラムが前記物理メモリを使用することができるように、前記指定されたコードまたはデータについて保証された前記物理メモリのうち少なくとも一部を開放するステップと、
をも含む、請求項１に記載する方法。
【請求項３】
他の同時に実行される複数のアプリケーションプログラムが前記物理メモリを使用することができるように、高優先度プロセス要求が前記物理メモリにアクセスする場合に、前記ソフトロックを上書きし、前記指定されたコードまたはデータについて保証された前記物理メモリのうち少なくとも一部を開放するステップ、をも含む、
請求項１に記載する方法。
【請求項４】
前記物理メモリを開放するステップが、前記所定の閾値を越える場合に、リーストリーセントリユーズド方式の順序で、前記物理メモリを開放するステップを含む、
請求項２に記載する方法。
【請求項５】
前記ソフトロックを上書きするステップが、リーストリーセントリユーズド方式の順序で、前記物理メモリを開放するステップを含む、
請求項３に記載する方法。
【請求項６】
コードまたはデータに対する物理メモリの割り振りの優先度を選択することを要求するアプリケーションプログラムからの要求に応答して、ある区画に格納される前記コードまたはデータが２次記憶装置に最もスワップされにくくなるように、不在割り込みに応答する前記仮想記憶システムによって、前記コードまたはデータに関するメモリの前記区画にマークさせるステップ、
をも含む、請求項１に記載する方法。
【請求項７】
前記アプリケーションプログラムに割り振られるであろう物理メモリの最大量をエンドユーザに指定させるインタラクティブなユーザインターフェイスを、ディスプレイモニタ上に表示させるステップと、
前記アプリケーションプログラムに専用で割り振られた前記物理メモリ量が、前記閾値を越えた場合に、前記アプリケーションプログラムに対して物理メモリについてロックすることを防止させるステップと、
をも含む、請求項１に記載する方法。
【請求項８】
仮想メモリを、ページのメモリユニットとして割り振るステップが、
ソフトロックの要求に応答して、前記指定されたコードまたはデータに対応するページのリストを計算するステップと、
前記リストを使用して、前記アプリケーションが前記フォーカスを回復した場合に、前記物理メモリ内へ再ロードする必要がある前記リスト中のページを識別するステップと、
をも含む、請求項１に記載する方法。
【請求項９】
請求項１に記載するステップを実行させるためにコンピュータで実行可能な命令を持つ、コンピュータ読み取り可能な記憶媒体。
【請求項１０】
使用可能なグループから削除し、１つのアプリケーションプログラム専用となるように、物理メモリの区画を保証する機能を含むものであって、前記物理メモリ及び２次記憶装置間でコードまたはデータをスワップさせることによってコンピュータ内の物理メモリよりも大きな仮想メモリスペースをサポートし、同時に実行されるアプリケーションプログラムに割り振ることが可能な物理メモリのグループを管理する、物理メモリマネージャと、
物理メモリの区画のソフトロックを要求するＡＰＩ機能コールを含むものであって、同時に実行されるアプリケーションプログラムからのＡＰＩコールを受け取るＡＰＩ機能と、
フォーカスの変更を監視し、
前記アプリケーションが前記フォーカスをなくしたときに、物理メモリマネージャを指示して、前記アプリケーションプログラムによってロックされた物理メモリの区画を開放し、前記アプリケーションが前記フォーカスを回復した場合に、前記物理メモリの区画をリストアする、メモリモニタと、
を含むオペレイティングシステム。
【請求項１１】
ＡＰＩ機能が、選択されたコードまたはデータを高優先度として指定するＡＰＩ機能コールを含み、
前記ＡＰＩ機能によって前記物理メモリマネージャが、前記選択されたコードまたはデータに対して高優先度の割り当てを行い、
前記物理メモリマネージャが、前記選択された優先度と、コードまたはデータにアクセスする頻度に基づき動的に決定された優先度とを比較して、不在割り込みを処理するためにどのコードまたはデータを２次記憶装置にスワップするかを判断する、
請求項１０に記載するオペレーティングシステム。
【請求項１２】
前記物理メモリマネージャが、前記使用可能な物理メモリ量をモニタし、前記使用可能な物理メモリが閾値を下回った場合に、前記メモリモニタにメッセージを送り、
前記メモリモニタが前記メッセージに応答して、アプリケーションプログラムによって要求されたソフトロックを開放する、
請求項１０に記載するオペレーティングシステム。
【請求項１３】
前記メモリモニタが、前記物理メモリ量を監視して、前記使用可能な物理メモリが所定の閾値を下回った場合に、ソフトロックされたコードまたはデータのうち少なくとも一部を開放することによってソフトロックを上書きすることが可能である、
請求項１０に記載するオペレーティングシステム。
【請求項１４】
前記メモリモニタが、実行時に発生し前記ソフトロックを開放する必要がある条件を監視して、前記条件の１つを検知したことに応答して、の前記ソフトロックされたコードまたはデータのうち少なくとも一部を開放することが可能である、
請求項１０に記載するオペレーティングシステム。
【請求項１５】
前記条件が、物理メモリに対してアクセスを要求する高優先度プロセスを含む、
請求項１４に記載するオペレーティングシステム。
【請求項１６】
アプリケーションプログラムがロックすることができるメモリの最大量を前記ユーザに選択させ、入力させるユーザインターフェイスを含む、請求項１０に記載するオペレーティングシステム。
【請求項１７】
仮想記憶システムのメモリの割り振りを、同時に実行されるアプリケーションに制御させる方法であって、
アプリケーションによって指定されたコードまたはデータに対する物理メモリの割り振りの優先度を指定することを要求する前記アプリケーションプログラムからの要求に応答して、前記指定されたコードまたはデータに優先度状況を割り当てるステップと、
仮想記憶管理において前記指定された優先度を使用して、物理メモリに対する要求を満足させるように、物理メモリに割り振られたメモリユニットが２次記憶装置にスワップされるであろう前記順序を判断するステップと、
を含む方法。
【請求項１８】
リーストリーセントリユーズド方式の順序で、メモリのユニットを物理メモリから２次記憶装置にスワップさせることによって、仮想メモリを管理するステップであって、
前記指定されたコードまたはデータが、少なくとも、前記リーストリーセントリユーズド方式の順序に基づき優先度を割り振られた指定されていないコードまたはデータよりも、高いも物理メモリの優先度を持つように、前記指定されたコードまたはデータを格納するために使用されたメモリユニットに、最も最近に使用されたことを示す優先度を割り振るステップと、
をも含む、請求項１７に記載する方法。
【請求項１９】
メモリユニットにアクセスしたことに基づいて動的に前記ユニットに割り振られた優先度に基づき、前記メモリユニットを物理メモリから２次記憶装置にスワップさせることによって、仮想メモリを管理するステップと、
前記指定されたコードまたはデータに関するメモリユニットに対して前記アプリケーションによって指定された前記優先度の状況を割り当てることによって、前記優先度を上書きするステップと、
を含む、請求項１７に記載する方法。
【請求項２０】
前記アプリケーションプログラムが、前記指定されたコードまたはデータに対して、物理メモリにアクセスする優先度のレベルを、複数の異なるレベルとして指定することができる、
請求項１７に記載する方法。
【請求項２１】
メモリユニットにアクセスしたことに基づいて動的に前記ユニットに割り当てられた優先度に基づき、前記メモリユニットを物理メモリから２次記憶装置にスワップさせることによって、仮想メモリを管理するステップと、
前記指定されたコードまたはデータに関するメモリユニットに対して前記アプリケーションによって指定された前記優先度の状況を割り当てることによって、前記動的に割り当てられた優先度を上書きするステップと、
をも含む、請求項２０に記載する方法。
【請求項２２】
前記優先度が、前記メモリユニットがどれくらい最近に使用されたかに基いて動的に割り当てられ、
前記動的に割り当てられた優先度を上書きするステップが、前記アプリケーションプログラムによって指定された優先度の前記レベルに関して所定の値を割り当てるステップを含む、
請求項２１に記載する方法。
【請求項２３】
請求項１７のステップを実行するためにコンピュータで実行可能な命令を持つコンピュータ読み取り可能な記憶媒体。
【請求項２４】
前記物理メモリ及び２次記憶装置間でコードまたはデータをスワップさせることによって、コンピュータの物理メモリよりも大きな仮想メモリスペースをサポートして、同時に実行されるアプリケーションプログラムに割り振られる使用可能な物理メモリのグループを管理する物理メモリマネージャと、
同時に実行されるアプリケーションプログラムからのＡＰＩコールを受け取るＡＰＩ機能と、を含むオペレーティングシステムであって、
前記ＡＰＩ機能が、前記物理メモリマネージャによって使用される、指定されたコードまたはデータの優先度を指定し、どのメモリのユニットが、物理メモリからコンピュータの２次記憶装置へスワップされるかについての前記順序を判断する、ＡＰＩ機能コールを含むもの。
【請求項２５】
前記物理メモリマネージャが、どれくらい最近に各ユニットが使用されたのかに基づき、前記メモリユニットに対して優先度を割り当てることと、リーストリーセントリユーズド方式の順序で前記物理メモリから前記２次記憶装置にメモリユニットをスワップすること、が可能であって、
前記ＡＰＩ機能が、アプリケーションプログラムによって指定された前記ＡＰＩ機能コールの前記優先度に基づく前記優先度の設定または使用に基づき、前記物理メモリマネージャによって割り当てられた前記優先度を上書き処理することが可能である、
請求項２４に記載するオペレーティングシステム。
【発明の詳細な説明】
【０００１】
技術分野
本発明は、コンピュータにおける仮想メモリの管理に関するものであり、特に、仮想記憶を使用し、同時に実行されるプログラムに対して物理メモリを共有させるコンピュータにおける物理メモリの割り振りを制御する方法に関するものである。
【０００２】
発明の背景
用語「仮想メモリ」は、幾つかの同時に実行されるアプリケーションプログラムに、コンピュータの物理メモリの共有をさせる方法を示すものである。この物理メモリは、コンピュータのメインメモリを意味するものであり、コンピュータプログラムを実行するために使用され典型的にはランダムアクセスメモリ（ＲＡＭ）として実装される。マルチタスキングオペレーティングシステムは、典型的には仮想メモリを使用して、コンピュータにおいて実行されるアプリケーションプログラムの各々が使用可能なメモリを拡張するものである。仮想メモリは、アプリケーションに対してより多くのメモリを与える効果を持つ。この効果を得るために、仮想記憶マネージャ（ＶＭＭ）は、物理メモリのサイズよりも大きい仮想メモリスペースを用いてメモリを割り振る。このＶＭＭは、ハードディスク等のコンピュータにおける２次記憶スペースを使用して、物理メモリの事実上のサイズを拡張する。あるアプリケーションが実際に物理メモリを必要とした時、例えばリードやライト要求を処理する場合に限り、このＶＭＭは、コードやデータを２次記憶装置から物理メモリにロードする。
【０００３】
プログラムが仮想メモリに対してリードやライトの要求をする場合、仮想記憶マネージャは、要求されたコードやデータが物理メモリにあるか、または２次記憶装置にあるかを判断する。それが物理メモリにある場合、仮想記憶マネージャは、仮想アドレスから、それが物理メモリのどこに位置するかについてを示す物理アドレスへとマップする。一方、コードまたはデータが物理メモリに無い場合、仮想記憶マネージャは、それを２次記憶装置からフェッチして、物理メモリに置く。このようにして、メモリ要求を満足させる必要に応じて、物理メモリのコードまたはデータをスワップインやスワップアウトさせることによって、仮想記憶マネージャは、アプリケーションに対する物理メモリを大きくしたように見せる。
【０００４】
仮想メモリの概念を説明するために、４メガバイトの物理メモリのパーソナルコンピュータで実行されるオペレーティングシステム、及び無限のメモリスペースを追加できるハードディスクドライブ（ハードディスク駆動装置）を考えることとする。このオペレーティングシステム自身で、物理メモリを１メガバイトまで占有する。このユーザが、ハードディスクドライブから２メガバイトのゲームプログラムを起動させた場合、物理メモリを占有するメモリの合計は、約３メガバイトとなる。今、このゲームプログラムが、１メガバイトを越える追加のコードまたはデータをロードしようと試みると仮定する。これらの状況下では、コンピュータで現在実行しているプログラムに対するコードまたはデータを保持するのに十分な物理メモリは存在しない。
【０００５】
ＶＭＭは、実行プログラムを稼動する必要に応じて、物理メモリとハードディスクドライブ間でコードまたはデータをスワップインやスワップアウトさせることによって、この問題を解決するものである。例えば、あるコードの特定箇所の命令が実行される場合、そのコードのその特定箇所は、コンピュータの物理メモリ内へロードされなければならない。そのコードのその他の箇所は、それらが必要となるまで、ハードディスク内にとどまることができる。コードまたはデータが物理メモリに保持されていない時は、オペレーティングシステムは、常に、そのコードまたはデータに関するフラグを設定（またはクリア）することによって、それに不在であるとマークする。その後、そのコードまたはデータに対してアクセスが試行された場合、プロセッサは、不在割り込み（ｎｏｔ ｐｒｅｓｅｎｔ ｉｎｔｅｒｒｕｐｔ）を生成してオペレーティングシステムに問題を通知するするであろう。このオペレーティングシステムは、それから、不在のコードまたはデータを、物理メモリの使用可能なエリア中にロードする手配を行い、割り込みを引き起こしたプログラムを再スタートさせる。コードまたはデータのハードディスクドライブにおけるスワップインやスワップアウトと割り込みは、アプリケーションプログラムが割り込みを処理せず、データのスワップインやスワップアウトを管理しないという意味において、コンピュータで実行中のアプリケーションプログラムにとってはトランスペアレントである。むしろ、アプリケーションプログラムは、仮想メモリにおける仮想メモリアドレス空間だけを扱い、オペレーティングシステムは、仮想メモリに対する要求について物理メモリをマップし、物理メモリとハードディスクドライブ間でデータをスワップインやスワップアウトをするものである。
【０００６】
典型的な仮想記憶システムでは、幾つかのオペレーティングシステム・コンポーネントが、物理メモリにアクセスすることを保証され、そして幾つかのその他のソフトウェアコンポーネントが残りの物理メモリを取り合う。常に物理メモリを占有するオペレーティングシステム・コンポーネントには、オペレーテイングシステムのカーネル、及びディスクキャッシュといったメモリ常駐型コンポーネントが含まれる。残りの物理メモリは、動的にロードされるオペレーティングシステム・コンポーネント（ＤＬＬ）、アプリケーションプログラムやデータ、及び、オペレーティングシステムのファイルシステムに対するダイレクト・メモリ・アクセス（ＤＭＡ）バッファやキャッシュ領域のように動的に割り振られるメモリ領域、等のその他のソフトウェア間で共有する。
【０００７】
常に物理メモリを占有するオペレーティングシステム・コンポーネントは、物理メモリ上に「ロック」を持つ。「ロック」は、メモリ管理システムの属性であって、コードまたはデータに対して物理メモリの確約または予約、すなわち保証を行う。そのメモリが、割り込み時に実行可能でなければならないコードの一部、または割り込み時にアクセス可能である必要があるデータの一部を含む場合、または、データがコンピュータのハードウェア装置によって非同期的にアクセスされる必要がある場合に、多くのオペレーティングシステムは、典型的には物理メモリ上にそれをロックする。
【０００８】
初めに、このオペレーティングシステムは、アプリケーションプログラムに対して仮想メモリを割り振る。しかしながら、このオペレーティングシステムは、プログラムがメモリへのアクセスを試行するまでは、実際にはアプリケーションプログラムに対して物理メモリを割り振らないであろう。このシステムで実行されるコードが、アプリケーションプログラムに割り振られたメモリへのアクセスを試行すると、このオペレーティングシステムは、そこが満杯になるまで物理メモリを割り振るであろう。そして、その後、一部の物理メモリのハードディスクドライブへのスワップを開始し、メモリへのアクセスを調整する。
【０００９】
この仮想記憶システムは、典型的には、スワップファイルと呼ばれるハードディスクドライブを使用し、コードまたはデータを物理メモリ上でスワップインやスワップアウトする。オペレーティングシステムは、ハードディスクドライブから直接的にアプリケーションプログラムの実行可能なコード（例えば、実行ファイル）等のコードをロードする。アプリケーションがプログラムデータへのアクセスを要求すると、オペレーテイングシステムは、物理メモリを割り振り、次に、一旦物理メモリが満杯になると、このプログラムデータを物理メモリ上でスワップインやスワップアウトする。
【００１０】
実行時に、アプリケーションは、暗黙的にまたは明示的にメモリの追加を要求することができる。アプリケーションが、オペレーティングシステムに新規のウィンドウ等の資源を要求する場合に、暗黙的な要求が発生し、この資源の要求に応答する副次的な効果として、オペレーティングシステムは、メモリを割り振る。明示的な要求は、アプリケーションが直接的に機能を呼び出し、追加のメモリをアプリケーションに割り振るようにオペレーティングシステムに対して明確に要求した場合に起きる。両者の場合とも、オペレーテイングシステムは、仮想アドレススペースから資源を割り振るためにメモリを要求する。
【００１１】
現在、一般的に使用される仮想記憶の形態の１つは、ページ式仮想記憶と呼ばれるものである。ページ式仮想記憶機構では、オペレーテイングシステムが、ページと呼ばれるメモリユニットを用いて、全てのメモリの割り振り、割り振り解除、スワップ処理を実行する。例えば、インテル社の３８６アーキテクチャ互換のマイクロプロセッサでは、メモリは４Ｋのページであり、各々のメモリセグメントは、４Ｋページから構成される。ウィンドウズ９５オペレーテイングシステムは、ページ式仮想記憶システムを実現するオペレーティングシステムの一例である。
【００１２】
ページ式仮想記憶機構を説明するのに一般的に使用される用語には、ページング、ページファイル、ページフォルトが含まれる。用語「ページング」は、物理メモリと２次記憶装置間におけるコードまたはデータのスワップのプロセスを示すものである。用語「ページファイル」は、２次記憶装置において維持管理され、物理メモリ上でスワップインやスワップアウトされるコードまたはデータのぺージを保持するスワップファイルを示すものである。最後に用語「ページフォルト」は、要求されたコードまたはデータを含むページが物理メモリ内に位置していないため、そのメモリ要求が物理メモリからは満足されなかったことを示すマイクロプロセッサによって生成される割り込みを示すものである。
【００１３】
どのような仮想記憶システムの実施例でも、詳細は、プロセッサの設計及びメモリアドレッシング機構に依存して変わるものである。パーソナルコンピュータ業界で最も広まっているプロセッサアーキテクチャの１つは、インテル社の３８６アーキテクチャである。このアーキテクチャの基本的なメモリ管理機能は、インテル社の４８６、ペンティアム、ペンティアム▲２▼、ペンティアムプロ・マイクロプロセッサでも使用されている。この３８６アーキテクチャは、リアルモード、プロテクティドモード、バーチャルモードの３つのオペレーティングモードをサポートする。リアルモードは、８０８６系列プロセッサとの互換性を保持するために使用されるモードを指すものである。このモードは、１メガバイトのメモリまでアドレス処理できる４つのセグメントレジスタを使用するセグメント式メモリアーキテクチャを持つものである。各々のセグメントレジスタは、メモリセグメントの最初の１バイト目をポイント（ｐｏｉｎｔ）する。アドレスレジスタは、メモリセグメントの１バイト目のオフセットアドレスを格納する。このプロセッサは、セグメントレジスタとアドレスレジスタとの内容物を組み合わせ、完全なアドレスを生成させる。
【００１４】
プロテクトモードでは、このプロセッサは、セグメントレジスタの内容物を使用して、ディスクリプタ（ｄｅｓｃｒｉｐｔｏｒ）と呼ばれる８バイトのメモリエリアにアクセスする。このセグメントレジスタは、ディスクリプタテーブルへのインデックスを含むものである。このプロセッサは、ディスクリプタ内の情報を使用して、基底アドレス（ｂａｓｅ ａｄｄｅｓｓ）を生成する。その後、プロセッサは、アプリケーションプログラムからのオフセットアドレスと基底アドレスとを組み合わせ、物理メモリアドレスを計算する。このモードでは、オペレーティングシステムは、セグメントとして、物理メモリのいかなる適切なエリアでも使用することができる。アプリケーションのセグメントは、連続的な場所である必要はなく、違うサイズを有することができる。
【００１５】
バーチャルモードは、１つのセグメントが１メガバイトのみではなく４ギガバイトも可能であることを除いて、同じセグメントの概念を使用するという点でプロテクティドモードに似ていて、そしてこのモードによってオペレーティングシステムは仮想記憶機構を実現することができる。プロテクティドモードと同様に、バーチャルモードのプロセッサは、ディスクリプタテーブルへのインデックスとして、セグメントレジスタの内容物を使用する。このディスクリプタテーブルは、メモリセグメントの基底アドレスを指定するものである。オペレーティングシステムは、基底レジスタを設定し、コードまたはデータのセグメントの最初の１バイト目をポイントする。プロセッサは３２ビットのオフセットアドレスと基底アドレスとを組み合わせて、最終的な３２ビットのアドレスを計算する。
【００１６】
３８６アーキテクチャで仮想記憶が有効になっている場合、プロセッサは、この最終的に３２ビットアドレスに変換されたものを変更して、３２ビット物理アドレスへのマップを行う。初期化中に、オペレーティングシステムは、プロセッサをプロテクトモードにスイッチし、その後ページングを有効にする。基底アドレスとプログラムからのオフセットとを組み合わせることで計算されるこの３２ビットアドレスが、仮想メモリスペースにおけるアドレスである。
【００１７】
ページングが有効化されると、プロセッサは、仮想メモリスペースにおけるこのアドレスから、物理メモリスペースにおけるアドレスへマップする。図１は、プロセッサが、アプリケーションからの３２ビットアドレスをどのように変換するのかを説明するものである。上位１０ビット（ビット３１から２２）（図１の２０を参照されたい）は、ページテーブルディレクトリ（図１の２２）へのインデックスである。ページテーブルディレクトリにおける３２ビットの各々の部分は、ページテーブル（図１の２４）をポイントするものである。元のアドレスの次の１０ビット（ビット２０から１２）（図１の２６を参照されたい）は、個々のページテーブルへのインデックスである。ページテーブルエントリ（２８）の各々は、物理メモリのページをポイントするものである。仮想アドレスの残りの１２ビットは（ビット１１から０）（図１の３０を参照されたい）、メモリ上において、このページのオフセットを生成する。
【００１８】
オペレーテイングシステムは、実行中のプログラムに対するページテーブルディレクトリのアドレスをＣＲ３（３２）と呼ばれる特別なプロセッサレジスタ内に格納する。新しいプログラムに対してオペレーティングシステムがページディレクトリをポイントすることができるように、オペレーティングシステムがタスクをスイッチするときは、毎回、ＣＲ３を再ロードする。仮想アドレスを物理アドレスへマッピングするプロセスは、プロセッサによって実行される。メモリキャッシング技術は、頻繁に使用されるページテーブルエントリが追加のメモリ参照することなく使用可能であることを保証する。
【００１９】
仮想記憶機構を完全にサポートするためには、ページテーブルエントリは、ページテーブルまたは物理アドレスへのポインタだけでなく、それ以外のものも含むものである。図２は、ページテーブルディレクトリ及びページテーブル構造（図２のアイテム４０と４２を参照されたい）内における１つの３２ビットワードの内容物を示すものである。ページテーブルディレクトリ及び各ページテーブルは、１つの４Ｋメモリページ（各々に１０２４エントリ）を消費する。これは、全体で４ＧＢのプログラムアドレススペースを適切にアドレス処理させる。ページテーブルディレクトリ内のフラグビットによって、システムがページングファイルのあるディスク上へページテーブルを格納することを許される。このようにして、大きなプログラムに対して（例えば、２５６ページのページテーブルを必要とする１ＧＢのプログラム）、システムは、コードやデータのページと同様に、物理メモリ上でページテーブルをスワップインやスワップアウトするであろう。
【００２０】
仮想記憶処理及び３８６メモリ保護システムを完全にサポートするためには、ページディレクトリ及びページテーブルエントリには幾つかのフラグビットを含ませる必要がある。プロセッサ自身は、これらのフラグビットの幾つかを直接変更する。オペレーティングシステムはその他について管理する。図２に示すように、これらのフラグは次のビット：Ｄ、Ａ、Ｕ／Ｓ、Ｒ／Ｗ、及びＰを含むものである。
【００２１】
プログラムがメモリページの内容物を変更した場合は、プロセッサは常に、対応するページテーブルにダーティ・ビット（図２のＤビット）をセットする。このことは、メモリからページを削除して、スペースを開放したい場合には、最初にページをディスク上に書き出して、変更を保持しなければならないことを意味する。
【００２２】
リード、ライト、或いは実行等のページへの何らかの参照によって、プロセッサは、対応するページテーブルエントリ内のアクセスビット（図２のＡビット）をセットする。仮想記憶マネージャは、このフラグを使用して、ページがどのくらいの頻度でアクセスされたかを判断することができる。ページがどのくらいの頻度でアクセスされたかを知る１つの方法は、このビットをセットし、定期的にチェックし、そのページがアクセスされたか否かを判断する方法である。使用の頻度が低いぺージのアクセスビットは、ハードウェアがアクセスビットをセットしない限り、変更されないであろう。同じ周期で確実に使用されるページを削除するよりも、このようなページをメモリから削除することは、懸命な選択である。ウィンドウズ９５（登録商標）オペレーティングシステムは、リースト・リーセントリ・ユーズド（ＬＲＵ）として知られるアルゴリズムを使用して、どのページをメモリから削除するかを決定する。最も新しく参照されたページほど、そのページは再割り振りされにくくなる。
【００２３】
テーブルエントリによってアドレス処理されるページテーブルまたはメモリページが、実際にメモリ内に存在する場合のみ、プレゼント（ｐｒｅｓｅｎｔ）ビット（Ｐビット）を１にセットする。不在のページまたはページテーブルの参照が試行された場合、プロセッサは、不在割り込みを生成し、オペレーティングシステムは、ページをメモリにロードする手配しなければならず、そしてそのページを必要とするプログラムを再スタートさせる。
【００２４】
ユーザ／スーパバイザ・ビット（Ｕ／Ｓビット）は、３８６の全体的な保護システム部である。Ｕ／Ｓビットが０にセットされた場合、このメモリページはスーパバイザページであり、即ち、オペレーティングシステム自身のメモリ部であり、ユーザレベルのプログラムはそのページにアクセスすることができない。この部分への何らかのアクセスによって、オペレーティングシステムが取り扱わなければならない割り込みを引き起こされる。
【００２５】
リード／ライト ビット（Ｒ／Ｗビット）によって、対応するメモリページへのアクセスを望むプログラムが、そのページの内容物を変更できるか否かを判断する。値１の場合は、ページ内容物の変更が許される。値０の場合は、いかなるプログラムであっても、ページ内のデータの変更が許されない。通常、コードを含むページは、読み取り専用ぺージとしてセットされる。
【００２６】
上述したメモリアドレッシング機構によって、オペレーティングシステムは仮想記憶システムを実現できる。現代のオペレーティングシステムにおける制限の１つとしては、仮想記憶が有効となっている場合に、どのように物理メモリが割り振られるかを制御してアプリケーションに柔軟性を与えることができないことである。典型的には、アプリケーションプログラムは、仮想メモリスペースのみにアクセスを行い、どのようにオペレーティングシステムが物理メモリを割り振るかを、殆ど、または全く制御することはない。スワッピングアルゴリズムを実行する場合には、典型的には仮想記憶システムは、１回のページフォルトの応答として少量のページをロードする。アプリケーションプログラムがその他の仮想メモリの部分へのアクセスが発生し、もっとページフォルトが引き起こされる傾向があるため、これでは十分ではない。ハードディスクドライブからデータをロードする待ち時間のため、繰り返されるページフォルトは、アプリケーションのパフォーマンスを低下させる。即ち、アプリケーションは、オペレーティングシステムによって実行に必要なコードまたはデータをロードされるのを待つ。マルチメディア及び高度にインタラクティブなアプリケーションでは、この待ち時間は、ディスプレイ上の映像オブジェクトの動きを悪くさせたり、ユーザの入力に対する応答の欠落として現れ得る。例えば、オペレーテイングシステムがページフォルトを処理している場合に、ゲームプログラムの処理は、悪くなるであろう。
【００２７】
上述したように、マイクロソフト社のウィンドウズ９５Ｒオペレーティングシステム等の幾つかのオペレーテイングシステムは、ＬＲＵアルゴリズムを使用して、物理メモリ上でページのスワップインやスワップアウトを制御して、仮想記憶を実現する。一般的なルールとして、この仮想記憶システムは、オペレーティングシステムの動的にロードされたコンポーネントのページ、及びアプリケーションプログラムの全てのページに同じ優先度を与える。このようにして、ゲームアプリケーションが、アクティブ状態でなくなった場合、オペレーティングシステムは、そのページを物理メモリからスワップアウトし易い状態となる。このアプリケーションが再びアクティブ状態になった場合、オペレーティングシステムが物理メモリにページを徐々にスワップインするため、ディスプレイ上のオブジェクトの動き及びユーザ入力に対するゲームの応答性が、悪くなってしまう。
【００２８】
この問題を解決する１つの方法は、その他のコードがその物理メモリ部へアクセスしないように、アプリケーションに割り振られた物理メモリをロックすることである。例えば、ウィンドウズＲオペレーティングシステムでは、アプリケーションは、物理メモリの一部に対してページロックを要求することができる。このページロックによって、オペレーティングシステムは、物理メモリの一部を確実に予約して、その他の実行中のコードが使用可能な物理メモリのグループから、その物理メモリを削除する。物理メモリにアクセスする必要がある同時に実行されるアプリケーションが、物理メモリ上におけるその他のアプリケーションのロックのために物理メモリにアクセスできないという点で、システムパフォーマンスの極度の低下を招きかねないという理由によって、これは許容し得る解決策ではない。
【００２９】
発明の概要
本発明は、仮想記憶システムにおいて物理メモリの割り振りを、アプリケーションプログラムに制御させる方法である。本発明の一側面は、同時に実行中のアプリケーションプログラムに、このアプリケーションによって指定されたコードまたはデータに対して物理メモリのソフトロックを、要求させるものである。この場合、ソフトロックとは、アプリケーションがフォーカスを失った時、或いはオペレーティングシステムのコンポーネントのような高優先度のプロセスが、物理メモリにアクセスする必要がある場合等の一定の条件の下でロックを上書きできることを意味する。
【００３０】
本発明の他の側面は、アプリケーションに、その使用するコードまたはデータの優先度のレベルを指定させ、仮想記憶システムが物理メモリから２次記憶装置へスワップさせるメモリユニット（例えばページ）の順序を決定することである。例えば、アプリケーションは、コードまたはデータ構造の部分を頻繁に使用するであろう、或いは最も頻繁に使用するであろう、と指定することができる。その後、仮想記憶システムは、計算した優先度ではなく、この明示優先度を使用して、どのメモリのユニットを２次記憶装置にスワップさせるかを決定する。これは、使用可能なメモリのグループからメモリユニットが削除されないようなソフトロックとは異なる。このＡＰＩを介して、アプリケーションは、仮想記憶システムによって計算された優先度のレベルを上書きすることができ、そして指定されたコードまたはデータが物理メモリに残る機会を増加させることができる。
【００３１】
本発明の実施例の１つは、マルチタスキング・オペレーティングシステムにおける仮想メモリに対するアプリケーション・プログラミング・インターフェイス（ＡＰＩ）であって、これによって、アプリケーションは、コードまたはデータに対する物理メモリへのアクセスの優先度を指定することを許される。ＡＰＩ機能コールの１つによって、アプリケーションは、物理メモリ上のソフトロックを持つであろうコード及びデータを指定する。このソフトロックを要求したアプリケーションがフォーカス（ｆｏｃｕｓ）を持つ間、この指定されたコードまたはデータは、物理メモリ上にロックを有するであろう。このアプリケーションがフォーカスを失った時、このＡＰＩはメモリ上のロックを開放するであろう。しかし、物理メモリ上にソフトロックで保持されたコードまたはデータの部分であることを示す状態情報は保持される。このアプリケーションがフォーカスを回復した時、このＡＰＩによって、物理メモリマネージャが、ソフトロックされたページに関するコードまたはデータを、物理メモリ内へ再ロードさせる。
【００３２】
ソフトロックが有効である間は、所定の条件を検知した時に、オペレーテイングシステムは、ロックを上書きすることができる。これらの所定の条件には、使用可能な物理メモリ量が閾値以下になる場合、或いは高優先度のプロセスが物理メモリにアクセスする必要がある場合を含むものである。メモリモニタは、これらの条件を検知すること、及びソフトロックを開放する責任を有する。１つの具体的な実施例では、このメモリモニタは、ソフトロックされているメモリを部分的に開放することによって、ソフトロックを徐々に開放する。
【００３３】
第２ＡＰＩ機能コールによって、アプリケーションは、物理メモリに対してより高い優先度を持つであろうコードまたはデータを指定する。このＡＰＩは、物理メモリマネージャとの関連で使用されるものであって、あるコードまたはデータが物理メモリから次記憶装置へスワップアウトされることを起こりにくくさせる。
【００３４】
上述のように要約されたメモリ管理方法及びＡＰＩによって、多くの利点が提供される。ＡＰＩを使用して、物理メモリの割り振りを制御し、メモリ要求に応答して発生するページフォルトの機会を減少させることができるため、アプリケーションプログラムはより良いパフォーマンスを得ることができる。このソフトロックは、オペレーティングシステムがソフトロックを上書きすることができるため、あるアプリケーションが、その他のアプリケーション及びオペレーティングシステムコンポーネントのパフォーマンスを低下させることを、防止することができる。
【００３５】
本発明における追加の機能及び利点は、後述する詳細な説明及び添付の図面でより明確となるであろう。
【００３６】
詳細な説明
本発明は、アプリケーションによって、仮想記憶システムにおける物理メモリの割り振りを制御させる方法及びシステムを目的とするものである。実施例の１つでは、本発明は、ワシントン州レッドモンドのマイクロソフト社により市販されるウィンドウズ９５（登録商標）オペレーティングシステム用のアプリケーション・プログラミング・インターフェイス（ＡＰＩ）に本発明を適用する。簡単に説明すると、このＡＰＩは、オペレーティングシステムが物理メモリへのアクセスをどのように管理するかを、アプリケーションによって制御させる一連の機能或いはＡＰＩコールを提供するものである。
【００３７】
図３及び下記の説明は、本発明を具体化するのに適したコンピューティング環境の簡単で一般的な説明の提供を意図するものである。本発明を、パーソナルコンピュータで実行されるコンピュータプログラムにおけるコンピュータ実行可能な命令の一般的な文脈で説明することとなるが、当業者は、本発明がその他のプログラムモジュールとの組み合わせでも実現することができることを理解するであろう。一般的に、プログラムモジュールは、個々のタスクを実行する、或いは個々の論理的なデータタイプを実施するルーチン、プログラム、コンポーネント、データ構造等を含むものである。更に、当業者は、本発明が、その他のハンドヘルドの装置、マイクロプロセッサシステム、マイクロプロセッサ型の或いはプログラム可能な大衆家電製品、ミニコンピュータ、メーンフレームコンピュータ等を含むコンピュータシステムの構成で実施することができることを、理解するでであろう。また、本発明は、通信ネットワークを介して接続されるリモート演算装置によってタスクが実行される分散コンピューティング環境でも実施できる。分散コンピューティング環境では、プログラムモジュールを、ローカル及びリモートの両方の記憶装置に置いても良い。
【００３８】
図３は、本発明の処理環境を提供するコンピュータシステムの例を説明するものである。このコンピュータシステムは、演算ユニット１２１と、システムメモリ１２２と、システムメモリを含む様々なシステムコンポーネントと演算ユニット１２１とを相互接続するシステムバス１２３と、を有するパーソナルコンピュータ１２０を含むものである。このシステムバスには、メモリバス、メモリコントローラ、周辺機器バス、及びＰＣＩ、ＶＥＳＡ、マイクロチャネル（ＭＣＡ）、ＩＳＡ、ＥＩＳＡ等のバスアーキテクチャを使用するローカルバスを含む何らかの幾つかのバス構造のタイプを含ませることもできる。このシステムメモリは、読み取り専用メモリ（ＲＯＭ）１２４、ランダムアクセスメモリ（ＲＡＭ）１２５を含むものである。起動時等の場合に、パーソナルコンピュータ１２０の要素間で情報の伝達を助ける基本ルーチンを含む基本入出力システム１２６（ＢＩＯＳ）は、ＲＯＭ１２４に格納される。更に、このパーソナルコンピュータ１２０は、ハードディスクドライブ１２７、磁気ディスクドライブ１２８、例えば、読み書きできるリムーバブルディスク１２９、光学ディスクドライブ１３０、読み取り用にＣＤ−ＲＯＭディスクドライブ１３１、或いは読み書きできるその他の光学メディアをも含むものである。このハードディスクドライブ１２７、磁気ディスクドライブ１２８、及び光学ディスクドライブ１３０は、そらぞれハードディスクドライブインターフェイス１３２、磁気ディスクドライブインターフェイス１３３、光学ディスクドライブインターフェイス１３４によって、システムバス１２３に接続されている。これらのドライブ及びこれらに関するコンピュータ読み取り可能なメディアは、パーソナルコンピュータ１２０に対して、データ、データ構造、コンピュータ実行可能な命令（ダイナミックリンクライブラリ、実行ファイル等のコード）等の不揮発性の記憶装置を提供する。上記ではハードディスク、リムーバブル磁気ディスク、ＣＤと呼ばれるコンピュータ読み取り可能なメディアの説明をしたが、これには、磁気カセット、フラッシュメモリカード、デジタルビデオディスク、ベルヌーイカートリッジ等のような、その他のタイプのコンピュータ読み取り可能なメディアも含むことができる。
【００３９】
ドライブ及びＲＡＭ１２５には、多数のプログラムモジュールを格納することができ、これには、オペレーテイングシステム１３５、アプリケーションプログラム１３６、その他のプログラムモジュール１３７、及びプログラムデータが含まれる。ユーザは、キーボード１４０及びマウス１４２等のポインティングデバイスを介して、コマンド及び情報を、パーソナルコンピュータ１２０に入力することもできる。その他の入力装置（図には示さず）としては、マイクロフォン、ジョイスティック、ゲームパッド、パラボラアンテナ、スキャナ等を含むこともできる。これらの及びその他の入力装置は、しばしば、システムバスに接続されるシリアルポートインターフェイス１４６を介して演算ユニット１２１に接続されるが、パラレルポート、ゲームポート、或いはユニバーサルシリアルバス（ＵＳＢ）等のその他のインターフェイスに接続することもできる。モニタ１４７或いはその他のタイプのディスプレイ装置も、ビデオアダプタ１４８等のインターフェイスを介してシステムバス１２３に接続される。このモニタに加えて、パーソナルコンピュータは、典型的には、スピーカ及びプリンタ等のその他の周辺出力装置（図には示さず）を含むものである。
【００４０】
このパーソナルコンピュータ１２０は、リモートコンピュータ１４９等のリモートコンピュータの論理的な結合を使用するネットワーク環境で動作させることもできる。このリモートコンピュータ１４９は、サーバ、ルータ、端末、或いはその他の一般的なネットワークノードとすることができ、典型的には、パーソナルコンピュータ１２０に関して説明される多くの要素或いは全ての要素を含むものであるが、図３においては記憶装置１５０のみを図示する。図３で図示される論理的な結合は、ローカルエリアネットワーク（ＬＡＮ）１５１、ワイドエリアネットワーク（ＷＡＮ）１５２を含むものである。このようなネットワーキング環境は、オフィス、企業間広域コンピュータネットワーク、イントラネット、インターネットでは一般的なものである。
【００４１】
ＬＡＮネットワーキング環境で使用する場合、このパーソナルコンピュータ１２０は、ネットワークインターフェイスまたはネットワークアダプタ１５３を介してローカルネットワーク１５１に接続される。ＷＡＮネットワーキング環境で使用する場合、典型的には、このパーソナルコンピュータ１２０は、モデム５４、またはインターネット等のワイドエリアネットワークを介して通信を確立させるその他の手段を含むものである。このモデム１５４は、内部または外部装置とすることができ、シリアスポートインターフェイス１４６を介してシステムバス１２３に接続される。ネットワーク環境では、パーソナルコンピュータ１２０、またはその中の一部に関して図示されるプログラムモジュールは、リモート記憶装置に格納することができる。示されたネットワーク接続が、典型的なものであり、コンピュータ間で通信リンクを確立させるその他の手段を使用することもできることは理解されるであろう。
【００４２】
本発明の実施例の１つは、同時に実行されるアプリケーションプログラムに、仮想記憶管理システムがどのように物理メモリを割り振るかを制御させるマルチタスキング・オペレーティングシステム用のＡＰＩである。オペレーテイングシステムがどのように物理メモリを割り振るかを制御するために、アプリケーションは、ＡＰＩ機能を呼び出し、制御したいコードまたはデータを指定し、物理メモリ内に存在しなければならないであろう優先度を示す優先度パラメータを提供する。オペレーティングシステムは、アプリケーションが優先度を指定したコードまたはデータを監視し続け、優先度を使用して、コードまたはデータを物理メモリからスワップアウトするか否か、またはハードディスクドライブに戻すか否かを判断する。
【００４３】
本実施例のＡＰＩでは、２つの優先度レベルがある。
１） ソフトロックされたコードまたはデータ
２） 頻繁に使用されるコードまたはデータ
【００４４】
これら両者の優先度レベルは、アプリケーションが、その他の同時に実行されるアプリケーションプログラムに比べて、物理メモリに優先的にアクセスする優先度レベルを設定する方法を提供する。
【００４５】
第１優先度レベルのソフトロックは、指定されたコードまたはデータを物理メモリ上にロックし、これを、ロックを要求されたアプリケーションプログラムの状況に応じて変更することができる。具体的には、そのアプリケーションがフォーカスを有している限り、オペレーティングシステムは、指定されたコードまたはデータに対して物理メモリを、割り振り、予約する。このフォーカスとは、コンピュータで実行中のアプリケーションを指すものであり、即ち、現在活動中であって、ユーザからの何らかの入力を応答待ちしている状況を指す。ウィンドウズＲオペレーテイングシステムでは、そのウィンドウの１つが活動中であって、キーボード上のキーを押下したり、或いはマウスボタンをクリックしたりする等のユーザからの入力を受け取る場合、アプリケーションはフォーカスを持つ。ユーザは、ＡＬＴキーとＴＡＢキーとを同時に押下することによって、或いはドロップダウンメニューから新タスクを選択することによって、フォーカスを変更できる。
【００４６】
アプリケーションがフォーカスを持つ場合、指定されたコードまたはデータは、全ての他の実行中のアプリケーションプログラムを考慮しながら物理メモリ上にロックを持つ。このソフトロックは、オペレーティングシステムが、物理メモリをその他のアプリケーションに対して割り振るために、物理メモリに存在する指定されたコードまたはデータをハードディスクドライブにスワップされることを防止させる。しかしながら、一定の状況においては、オペレーティングシステムは、ソフトロックを上書きすることができる。オペレーティングシステムは、より高い優先度のコードが物理メモリにアクセスを要する場合に、ソフトロックを上書きする。
【００４７】
このアプリケーションがフォーカスをなくした時、オペレーティングシステムが、ハードディスクドライブにこのコードまたはデータをスワップすることができるように、オペレーティングシステムは、物理メモリ上にロックされたコードまたはデータを開放する。このロックされたコードまたはデータを開放するためには、仮想記憶システムが、これらのページをハードディスクドライブにスワップアウトして、必要に応じてその他のコードまたはデータに対して物理メモリを割り振りができるように、オペレーティングシステムは、それを格納するメモリのページに関する状態情報を変更する。
【００４８】
このソフトロックのＡＰＩ機能では、アプリケーションがソフトロックを要求したメモリ区画のリストを格納する。このアプリケーションがフォーカスを回復した場合、オペレーティングシステムは、リストを使用し、そのリストがあれば、どの指定されたコードまたはデータの部分を物理メモリへ再ロードするかを決定する。フォーカスを再回復した後、かつアプリケーションが再開する前に、オペレーティングシステムは、一回でこれらの全ての部分を再ロードする。
【００４９】
第２優先度レベルは、具体的にフォーカスとは結びついていない。アプリケーションがコードまたはデータに対して「頻繁に使用される」優先度レベルを指定した場合、これによって、オペレーティングシステムは、コードまたはデータに対して明示的に優先度の値を割り振る。オペレーティングシステムが、物理メモリの区画をハードディスクドライブへスワップアウトする必要がある場合、優先度の値に基づきどの区画を移動すればよいのかを判断する。この頻繁に使用される優先度レベルによって、アプリケーションは、オペレーティングシステムがスワッピングアルゴリズムで計算した優先度を上書きさせる。
【００５０】
物理メモリの割り振りを管理しながら、オペレーティングシステムは、物理メモリ上でメモリ区画のスワップインやスワップアウトを制御するのに使用されるスワッピングアルゴリズムに基づいて物理メモリを占有する全てのコードまたはデータに優先度を割り当てる。ウィンドウズ９５Ｒオペレーティングシステムにおける本実施例では、仮想記憶システムで共有される物理メモリ部を形成する全てのコードまたはデータの優先度は、リースト・リーセントリ・ユーズド・アルゴリズムに基づき割り当てられる。オペレーティングシステムは、どのくらいの頻度で各々のページがアクセスされたかを評価し、この情報に基づきデフォルトの優先度を割り当てる。アプリケーションがコードまたはデータが頻繁に使用されるものであると指定した場合、オペレーティングシステムは、デフォルトの優先度を、人工的に作られたもので上書きし、そして指定されたコードまたはデータをは頻繁にアクセスされたもののように見せる。
【００５１】
本実施例によって、アプリケーションは上述した２つの優先度レベルを指定することができるが、更に、同じような手法を使用して、追加の優先度レベルを作ることも可能である。例えば、リースト・リーセントリ・ユーズド方式では、オペレーティングシステムは、どのくらい最近に、或いは、どのくらいの頻度で仮想メモリがアクセスされたかを示すパラメータ値を調節することによって、特定のコードまたはデータの優先度レベルを変更することができる。スライド式の優先度の基準は、低い値（リースト・フリークエントリ・ユーズドを意味する）から始まり、最も高い値（モースト・フリークエントリ・ユーズド）まで続くある幅で調節可能な優先度値を作ることによって確立される。オペレーティングシステムにおけるメモリマネージャは、この基準の低位におけるページを一番スワップしやすく、基準の上位におけるページを一番スワップしにくい。
【００５２】
本実施例では、アプリケーションは、ＡＰＩ機能コールを呼び出してコードまたはデータのアドレスとサイズを指定することによって、特定のコードまたはデータに対して優先度を指定する。コードに関しては、アプリケーションは、アプリケーションのソースコード上で機能名を指定することができ、これは黙示的に実行コードのアドレスを提供する。データに関しては、アプリケーションは、構造のサイズと同様に、データ構造のポインタを指定することができる。
【００５３】
図４は、メモリの割り振りを制御するＡＰＩの操作を説明する図である。これらアプリケーションは、コンピュータ内で同時に実行されるアプリケーションを代表するものであって（ａｐｐ１−３）（１６１〜１６３）、コンピュータの物理メモリを共有する。これらのアプリケーションは、ＡＰＩ機能１６４の機能を呼び出すことによって物理メモリの割り振りを制御する。ＡＰＩ機能に付属する説明及び具体的な実施例については、下記の通りである。
【００５４】
このＡＰＩ機能１６４は、オペレーティングシステム内でフォーカスを監視するメモリモニタ１６５を含むものである。それは、あるアプリケーションから他のものに、フォーカスが変更されたことを示すウィンドウズＲオペレーティングシステムからのメッセージ（例えばメッセージ１６６）をトラップする。実施例の１つは、オペレーティングシステムからアプリケーションのウィンドウに対して出されたユーザからの入力を待つメッセージをトラップする。これらのメッセージは、どのアプリケーションが活動中であって、現在、ユーザからの入力の応答待ちしていることを示すものである。その他の実施例は、オペレーティングシステムのサービス、即ちシェルフック（ｓｈｅｌｌ ｈｏｏｋ）を使用して、あるアプリケーションから他のものへのフォーカスの変更についての通知を受け取る。
【００５５】
図４に示す実施例では、図は、あるアプリケーション（ａｐｐ．１）に割り振られた仮想アドレススペース１７０の例を説明する。このマークされた区画１７２−１７８は、このアプリケーションがソフトロックを要求したコードまたはデータに関する仮想メモリを表わすものである。アプリケーションがソフトロックを要求した時、このＡＰＩ機能は、この指定されたコードまたはデータに割り振られた仮想メモリの区画を識別する。それは、この指定されたコードまたはデータに割り振られた仮想メモリの区画を並べるデータ構造１９０を作る。指定されたコードまたはデータの位置とサイズを格納するこの構造１９０から、ＡＰＩ機能は、コードまたはデータを格納するために使用される具体的なメモリユニットを計算する。この実施例は、３８６アーキテクチャのページング機構用に設計されたものであり、そして、このようにしてメモリのユニットは４Ｋのページからなる。このＡＰＩ機能は、指定されたコードまたはデータに応じてページを計算する。
【００５６】
アプリケーションが、初めにソフトロックを呼び出した場合、ＡＰＩ機能は、物理メモリマネージャ１９４に、指定されたコードまたはデータに対すして物理メモリを割り振るように指示する。物理メモリマネージャは、構造１９０から計算されるページリスト１９２を使用して、まだロードされていない相当するコードまたはデータの区画を物理メモリへロードする。
【００５７】
この実施例では、物理メモリマネージャ１９４は、ウィンドウズＲ９５オペレーティングシステムの一部である。それには、メモリモニタにメモリのブロックをロックまたはアンロックさせる一連の機能が含まれる。これらのメモリのブロックは、コードまたはデータを格納するために使用されるページの範囲に対応するものである。
【００５８】
メモリモニタ１６５は、フォーカス及び物理メモリ割り振り状況を監視することによってソフトロックを管理する。アプリケーション１がフォーカスをなくしたとき、メモリモニタ１６５は、そのアプリケーションに関連するデータ構造１９０及びページリスト１９２を保持する。このメモリモニタは、フォーカスの変更状況を監視する。アプリケーション１が、フォーカスを回復した場合、このメモリモニタは、物理メモリマネージャ１９４の適切な機能を呼び出し、構造１９０内に格納されるメモリ区画に対応するページリストの再ロード、再ロックを行う。応答で、物理メモリマネージャは、そのリスト中のページの状況を検査し、そして、ハードディスクドライブへスワップアウトされていたものを再ロードする。また、それは、全てのソフトロックされたページの状況をロックされたものとマークする。物理メモリマネージャ１９４は、ソフトロックされたコードまたはデータの部分を、２次記憶装置（即ち、コンピュータにおけるハードディスクドライブ）にスワップさせることができることに留意されたい。その他の部分は、依然として物理メモリ内（コンピュータにおけるＲＡＭ）に保持されても良い。このメモリモニタは、アプリケーションが実行を再開する前に、ソフトロックされたコードまたはデータの全てが、物理メモリ内に戻され、ロックされることを保証する。
【００５９】
ウィンドウズ（登録商標）９５オペレーティングシステムの物理メモリマネージャは、活動中のページの各々に対して、ページディスクリプタ構造を格納する。この構造は、物理メモリ及びハードディスクドライブ間でページを移動するために使用されるルーチンのアドレスを保持する。また、この物理メモリマネージャは、ページをロック及びアンロックさせるサービス（機能コール）を含むものである。メモリモニタは、物理メモリマネージャのこれらのサービスを使用して、ページをロード、ロック、アンロックする。
【００６０】
一旦、ソフトロックが回復した場合、アプリケーションは実行を再開する。実施例として、このアプリケーションが、図４の符号１８０と印を付けられた命令の実行を再開すると仮定する。このアプリケーションが、この命令の実行を再開する前に、メモリモニタ１６５は、物理メモリマネージャ１９４に区画１−４を再ロックさせることを指示する。その後、この物理メモリマネージャは、物理メモリに存在しない区画１−４のページをロードし、区画１−４の全てのページをロックされたものとしてマークする。アプリケーションがどこで実行を再開するかに拘わらず、同様の方法でソフトロックが回復されることを、メモリモニタが保証することに留意されたい。たとえ、アプリケーションがソフトロックされていない区画においてコードの実行を再開するとしても、このメモリモニタは、物理メモリマネージャを呼び出し、ソフトロックされたコードまたはデータに関連するページの全てをロード及びロックさせる。
【００６１】
アプリケーションがフォーカスを回復した場合におけるソフトロックの操作は、アプリケーションが実行を再開した場合に、典型的には命令の近くのコード部分だけを再ロードする従来のオペレーティングシステムを改良するものである。これは、アプリケーションがこの命令の近くに位置しないその他のコードまたはデータ部分にアクセスするため、過度なページフォルトの機会を増加させる傾向がある。このソフトロックでは、アプリケーションは、ページフォルトなしで、指定されたコード及びデータのグループ全体に対する物理メモリへのアクセスを保証される。
【００６２】
本実施例のソフトページロックでは、何らかのより優先度の高いタスクのために、追加の物理メモリを開放する必要があると考えられる場合、オペレーティングシステムは、ソフトページロックを上書きすることができる。従って、アプリケーションは、割り込みサービス、或いはＤＭＡバッファのために、ソフトページロックで指定したメモリを使用することができない。
【００６３】
メモリモニタは、物理メモリの割り振り状況を監視し、オペレーティングシステムがソフトロックを上書きする場合に、ソフトロックを開放するプロセスを管理する。物理メモリマネージャ１９４は、メモリモニタ１６５にソフトロックを開放する必要についての状況を通知する。これを遂行するための１つの方法は、使用可能な物理メモリ量を監視し、使用可能なメモリが所定の閾値を越えた場合にメモリモニタへメッセージを送る方法である。
【００６４】
その他の方法としては、高優先度のプロセスがメモリへのアクセスを試行した時に、十分に使用可能な物理メモリが無く、高優先度プロセスを満足させることができない場合にメモリモニタへメッセージを送る方法がある。オペレーティングシステムは、プロセスが高優先度であるか否かを定義する。優先度は、予め割り当てられるか、または動的（実行時）に決定することができる。プロセスの優先度を割り当て方法の１つは、そのプロセスのスケジューリング優先度を使用する方法である。オペレーティングシステムのスケジューラがどのくらいプロセッサ時間を割り当てるかということに関して、そのプロセスが高優先度を持つ場合、物理メモリへのアクセスについても高優先度を持つ。例えば、ウィンドウズＲ９５のようなプリエンプティブなマルチタスキングオペレーティングシステムでは、割り振られたＣＰＵ時間を得るために、背景プロセスに高優先度を割り当てることもできる。本実施例では、高優先度の背景プロセスが物理メモリの要求を行い、使用可能な物理メモリが十分でない場合、物理メモリマネージャ１９４は、メモリモニタ１６５に通知するであろう。その後、このメモリモニタは、ソフトロックされたメモリの全ての、または幾つかの部分を開放するであろう。
【００６５】
ソフトロックされたメモリの部分を開放するためには、メモリモニタ１６５は、ＬＲＵアルゴリズムを使用して、どの部分をはじめに開放するかを判断する。このＬＲＵは、物理メモリマネージャが物理メモリ及び２次記憶装置間でページをスワップインやスワップアウトさせるために使用して仮想記憶を実現させるＬＲＵアルゴリズムとは別のものであることに留意されたい。物理メモリマネージャが通知し、ソフトロックを上書きする場合、このメモリモニタは、このＬＲＵ機構を使用して、ソフトロックされたメモリのグループからページを選択し、開放する。開放されたページは、正当なコードまたはデータを含むこともあるため、それは、物理メモリマネージャが、物理メモリ及び２次記憶装置間でスワップインやスワップアウトすることができるページのグループに戻される。
【００６６】
この実施例では、ＬＲＵ方式を使用して、ソフトロックされたメモリのどの部分をはじめに開放するかを決定するが、その他の手法も同様に使用することができる。例えば、メモリモニタは、ソフトロックを要求したアプリケーションのソフトロックされたメモリの全てを開放することもできる。この場合、ソフトロックされたページの全ては、仮想記憶機構の対象になり、物理メモリに対する要求を満足させる必要に応じて、２次記憶装置にスワップすることができる。
【００６７】
物理メモリの状態は、ロックされた状態、及び使用可能な状態という２つのグループに分類される。コードまたはデータの一部が物理メモリ上にロックを持つ時、それに割り振られた物理メモリは、常にロックされる。使用可能なメモリは、ロックされておらず、ロック或いはメモリへのアクセスを試行するプロセスに割り振られる準備ができている物理メモリの全ての区画を含むものである。物理メモリマネージャは、どの物理メモリの部分がロックされていないかを判断し、この使用可能なメモリを使用可能なメモリのグループに割り当てることによって、使用可能な物理メモリの量を判断する。
【００６８】
マルチタスキングオペレーティングシステムでは、時々、アプリケーションがロックすることができる物理メモリの量を制限する必要がある。物理メモリ上のアプリケーションのロックの影響は、同時に実行中のアプリケーションのタイプと数に依存して変化するため、ある１つのアプリケーションがロックすることができる物理メモリの最大量を、エンドユーザに、調節させることは有益である。ウィンドウズ（登録商標）９５オペレーティングシステムにおいてこの機能を実現するための方法は、例えば、ユーザに、１つのアプリケーションがロックすることができる使用可能な物理メモリ量を調節させることである。オペレーティングシステムが、オペレーティングシステムのコンポーネントに対してメモリをロックした後の使用可能な物理メモリのパーセンテージとしてこの調節可能な量を、指定することができる。また、この調節可能な量は、１つのアプリケーションがロックすることができる最大のＲＡＭの量をメガバイトで指定することもできる。ウィンドウズ（登録商標）オペレーティングシステムでは、この機能は、マウスのようなカーソル制御装置からの入力に応答するスライダーバー（ｓｌｉｄｅｒ ｂａｒ）のようなグラフィカル制御として実現することができる。例えば、ユーザは、マウスを上下させることでスライディングバーを調節することによって、１つのアプリケーションがロックすることができる物理メモリの最大のパーセンテージ（またはＲＡＭのメガバイトの量）を調節することができる。
【００６９】
物理メモリをロックするこの制限を強制するために、物理メモリマネージャは、各々のアプリケーションがロックしたメモリの量を監視し、あるアプリケーションが最大量を越えるメモリのロックを試行した場合にエラーを返す。この物理メモリマネージャは、アプリケーションズ・プロセス・アイデンティファイア（ＰＩＤ）によって、１つのアプリケーションに割り振られた物理メモリの量を監視する。それは、ＰＩＤと一緒に、各プロセスによってロックされたメモリの量を格納する構造を保持するものである。あるアプリケーションが物理メモリの一部をロックすることが許される前に、物理メモリマネージャは、そのアプリケーションによってロックされるメモリ量が最大量を超える要求であるか否かを判断する。
【００７０】
物理メモリをロックする上での制限は、ロック及びソフトロックに適用される。しかしながら、オペレーティングシステムは、ソフトロックを上書きすることができるため、物理メモリマネージャは、ソフトロック上に同じ制限を適用しないようにさせることができる。例えば、あるプロセスが、ロックを要求し、そのロックの結果、そのプロセスによってロックされたメモリの合計量が、最大値を越えた場合、その後、物理メモリマネージャはエラーを返すであろう。その後、同じプロセスが、同じメモリの量のソフトロックを要求した場合、物理メモリマネージャは、要求時に十分に使用可能な物理メモリが存在するものと考えて、その要求を承諾する。より高優先度のプロセスが物理メモリにアクセスする必要がある場合にソフトロックを上書きすることができるため、この物理メモリマネージャは、この要求を承諾することができる。
【００７１】
図５は図４の実施例が「頻繁に使用される」優先度レベルをどのようにしてサポートするのかについて説明する図である。アプリケーションは、コードまたはデータに対して、この優先度レベルを要求することができ、これはソフトロックを要求するのと同じ方法で指定する。ＡＰＩ機能コールを呼び出した時、このアプリケーションは、優先度レベル、コードまたはデータの位置、及びコードまたはデータのサイズを指定する。図５に示す実施例では、アプリケーションは、第２優先度レベルを有することとなる仮想メモリの３つの区画（２００、２０２、及び２０４）を指定している。このアプリケーションは、そのコールに関するコードまたはデータの開始アドレスのポインタ及びそのサイズを与える。
【００７２】
応答で、このＡＰＩ機能１６４は、第２優先度レベルを持つコードまたはデータの監視を続ける構造２１０を作る。この構造を用いて、ＡＰＩ機能１６４は、指定されたコードまたはデータを格納する仮想メモリの区画に対応して、メモリユニット即ちこの場合はページを計算することができる。結果は、第２優先度レベルを持つページ２１２のリストである。
【００７３】
その後、ＡＰＩ機能は、物理メモリマネージャに、リスト２１２のページの各々に対して優先度をセットさせる。上述したように、物理メモリマネージャは、仮想記憶におけるＬＲＵ機構を実現させる。それは、各ページに対するメモリアクセスの参照回数を保持することによって、どのくらいの頻度で各ページが使用されたかを監視し続ける。あるページがアクセスされた場合、それは、参照回数を受け取る。この物理メモリマネージャは、この参照回数を使用して、最も参照されなかったページを識別する。メモリ要求を満足させる使用可能な物理メモリがなくなればなるほど、物理メモリマネージャは、そこの参照回数に示されるものに従って、最も長い間使用されなかったページを２次記憶装置へスワップすることによって、物理メモリを開放する。
【００７４】
あるページを「頻繁に使用された」優先度レベルにセットするためには、ＡＰＩ機能は、物理メモリマネージャに参照回数を所定の最大値にセットするよう指示する。それらのページは物理メモリから最もスワップされにくいものであるから、このＡＰＩ機能によって指定されたページに対しては、その他のページに比べてより高い優先度が与えられる。
【００７５】
「ダイレクトメモリ」と呼ばれる１つの実現可能なＡＰＩ機能の説明を、以下に示す。物理メモリへのアクセスの第１及び第２優先度レベルは、ロック及びアンロック機能で実現される。アプリケーションプログラムは、ロック機能を呼び出す場合にソフトロック（ＳＯＦＴＬＯＣＫ）パラメータをセットすることによって、ソフトロックを指定することができる。同様に、アプリケーションプログラムは、ロック機能の最も最近に使用された（ＭＯＳＴＲＥＣＥＮＴＬＹＵＳＥＤ）パラメータをセットすることによって、頻繁に使用された優先度レベルをを指定することができる。
【００７６】
2004500605.tif 000003
【００７７】
2004500605.tif 000004
【００７８】
2004500605.tif 000005
【００７９】
2004500605.tif 000006
【００８０】
2004500605.tif 000007
【００８１】
2004500605.tif 000008
【００８２】
2004500605.tif 000009
【００８３】
2004500605.tif 000010
【００８４】
2004500605.tif 000011
2004500605.tif 000012
【００８５】
2004500605.tif 000013
【００８６】
本発明を、具体的な実施例を参照して説明してきたが、本発明は、この特定の実施例に限定されるものではないことが、重要であることに留意されたい。本発明は、仮想記憶を実現し、実行中のプログラム間でフォーカスの変更することができる様々なマルチタスキングオペレーティングシステムの変形に適用できる。上述した本実施例は、ページ式仮想記憶機構用に設計されたものであるが、これは、その他のタイプのメモリユニットである仮想メモリを管理する仮想記憶機構にも適用することができる。多数の可能な実施例に、本発明の原理を適用することが可能であり、説明された実施例は、本発明の好適な実施例に過ぎないと理解すべきであり、本発明の範囲を限定するものと解釈すべきではない。むしろ、本発明の範囲は、以下の請求の範囲で定義してある。従って、我々は、これらの請求の範囲及び本質の範囲にある全てのものを、我々の発明として請求する。
【図面の簡単な説明】
【図１】３８６アーキテクチャにおける仮想記憶アドレッシング機構を説明する図である。
【図２】図１に示すページテーブルディレクトリのエントリ及びページテーブルを説明する図である。
【図３】本発明を実現するオペレーティング環境を提供するコンピュータシステムを説明する図である。
【図４】仮想記憶システムにおいて、アプリケーションプログラムに物理メモリの割り振りを制御させる、ソフトロック機能の処理を、説明する図である。
【図５】アプリケーションプログラムに、仮想記憶管理で使用される優先度レベルを指定させ、２次記憶装置へメモリユニットをスワップさせる順序を判断させるＡＰＩ機能の処理を、説明する図である。
【図１】
2004500605.tif 000014
【図２】
2004500605.tif 000015
【図３】
2004500605.tif 000016
【図４】
2004500605.tif 000017
【図５】
2004500605.tif 000018
【国際公開パンフレット】
2004500605.tif 000019
2004500605.tif 000020
2004500605.tif 000021
2004500605.tif 000022
2004500605.tif 000023
2004500605.tif 000024
2004500605.tif 000025
2004500605.tif 000026
2004500605.tif 000027
2004500605.tif 000028
2004500605.tif 000029
2004500605.tif 000030
2004500605.tif 000031
2004500605.tif 000032
2004500605.tif 000033
2004500605.tif 000034
2004500605.tif 000035
2004500605.tif 000036
2004500605.tif 000037
2004500605.tif 000038
2004500605.tif 000039
2004500605.tif 000040
2004500605.tif 000041
2004500605.tif 000042
2004500605.tif 000043
2004500605.tif 000044
2004500605.tif 000045
2004500605.tif 000046
2004500605.tif 000047
2004500605.tif 000048
2004500605.tif 000049
2004500605.tif 000050
【国際調査報告】
2004500605.tif 000051
2004500605.tif 000052
2004500605.tif 000053