(57)【要約】【課題】アプリケーション・スレッドにメモリを割り当てる。【解決手段】アプリケーション・スレッド（１３１）にある量のメモリ（１０６）を割り当てる試みが行われる。メモリを割り当てる試みが失敗した場合及びアプリケーション・スレッドが延期されたメモリ割当てのために指定された場合に、アプリケーション・スレッドを保留待ち行列（１２９）に格納する。アプリケーション・スレッドが保留待ち行列に格納されている間、アプリケーション・スレッドに対するある量のメモリの再割り当てが周期的に試みられる。【選択図】図１
2004054933.tif 000002
【特許請求の範囲】
【請求項１】
延期されたメモリ割当てを提供する方法であって、
アプリケーション・スレッドのためにある量のメモリを割り当てる試みを行い、
前記ある量のメモリを割り当てる試みが失敗した場合と、前記アプリケーション・スレッドが延期されたメモリ割当てのために指定された場合に、前記アプリケーション・スレッドを保留待ち行列に記憶し、
前記アプリケーション・スレッドが前記保留待ち行列に記憶されている間、前記アプリケーション・スレッドに対する前記ある量のメモリの再割当てを周期的に試みることを含む、メモリ割当ての延期方法。
【請求項２】
アプリケーション・スレッドにある量のメモリを割り当てる試みが失敗した場合に、前記アプリケーション・スレッドを前記延期されたメモリ割当てのために指定するか否かを判断することをさらに含む、請求項１に記載のメモリ割当ての延期方法。
【請求項３】
ある量のメモリの割当てが成功したときに、前記アプリケーション・スレッドと関連付けられたアプリケーションにメモリ・ポインタを返すことをさらに含む、請求項１に記載のメモリ割当ての延期方法。
【請求項４】
ある量のメモリを割り当てる試みが失敗した場合と、アプリケーション・スレッドを前記延期されたメモリ割当てのために指定しない場合に、前記アプリケーション・スレッドを作成したアプリケーションに前記ある量のメモリの割当ての失敗を返すことをさらに含む、請求項１に記載のメモリ割当ての延期方法。
【請求項５】
前記アプリケーション・スレッドを前記延期されたメモリ割当てのために指定することをさらに含み、前記アプリケーション・スレッドを前記保留待ち行列に記憶することができる最大期間を示す記憶タイムアウトが前記アプリケーション・スレッドと関連付けられている、請求項１に記載のメモリ割当ての延期方法。
【請求項６】
プロセッサとメモリを有するプロセッサ回路と、
前記メモリに記憶されかつ前記プロセッサによって実行可能な延期メモリ割当てロジックを含み、
前記延期メモリ割当てロジックは、
アプリケーション・スレッドにある量のメモリを割り当てることを試みるロジックと、
前記ある量のメモリを割り当てる試みが失敗した場合と、前記アプリケーション・スレッドが延期されたメモリ割当てのために指定された場合に、前記アプリケーション・スレッドを保留待ち行列内に記憶するロジックと、
前記アプリケーション・スレッドが前記保留待ち行列に記憶されている間、前記アプリケーション・スレッドに対する前記ある量のメモリの再割当てを周期的に試みるロジックと、
を含む、延期されたメモリ割当てを提供する装置。
【請求項７】
前記延期されたメモリ割当てロジックが、前記アプリケーション・スレッドに前記ある量のメモリを割り当てる試みが失敗した場合に、前記アプリケーション・スレッドを前記延期されたメモリ割当てのために指定するか否かを判断するロジックをさらに含む、請求項６に記載の装置。
【請求項８】
前記延期されたメモリ割当てロジックが、前記ある量のメモリを割り当てる試みが失敗した場合と前記アプリケーション・スレッドを前記延期されたメモリ割当てのために指定されていない場合に、前記アプリケーション・スレッドを作成したアプリケーションに前記ある量のメモリの割当ての失敗を返すロジックをさらに含む、請求項６に記載の装置。
【請求項９】
前記延期されたメモリ割当てロジックが、前記アプリケーション・スレッドを前記延期されたメモリ割当てのために指定するロジックをさらに含み、前記アプリケーション・スレッドを前記保留待ち行列に記憶することができる最大期間を示す記憶タイムアウトが前記アプリケーション・スレッドと関連付けられている、請求項６に記載の装置。
【請求項１０】
前記延期されたメモリ割当てロジックが、前記アプリケーション・スレッドを前記延期されたメモリ割当てのために指定するロジックをさらに含み、前記延期されたメモリ割当てが、前記保留待ち行列内の不特定の記憶域の指定をさらに含む、請求項６に記載の装置。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、メモリ割当ての延期に関する。
【０００２】
【従来の技術】
現在、ラップトップ、デスクトップ、ワークステーション、携帯情報端末（ＰＤＡ）やその他のシステム等の様々なコンピュータ・システムは、そのコンピュータ・システム上で実行される多くのアプリケーションを含むことができる。そのようなアプリケーションには、例えば、ワード・プロセッサ、スプレッドシート、カレンダ、タスク追跡システム及びその他のアプリケーションがある。
【０００３】
【発明が解決しようとする課題】
既存のコンピュータ・システム上で実行可能な様々なアプリケーションのサイズが大きくなっているので、様々なアプリケーション及びこれらアプリケーションによって生成された様々なアプリケーション・スレッドの実行のために割当て可能なメモリが十分でない場合がある。これは特に、ユーザがコンピュータ・システム上でいくつかのアプリケーションを同時に実行する場合に発生する。ユーザが特定のアプリケーションの実行やメモリの割当てを必要とする他の操作を行おうと試みるときに追加のメモリが利用できないと、コンピュータ・システムは、メモリが使用不可能であるというメッセージを出すことによって応答することがある。このような場合は、試みられた実行は中止され、フラストレーションが生じ、またコンピュータ・システムの有用性が制限されることになる。
【０００４】
【課題を解決するための手段】
本発明は、延期されたメモリ割当てを提供する方法を開示する。この方法は、アプリケーション・スレッドのためにある量のメモリを割り当てる試みを行い、前記ある量のメモリを割り当てる試みが失敗した場合と、前記アプリケーション・スレッドが延期されたメモリ割当てのために指定された場合に、前記アプリケーション・スレッドを保留待ち行列に記憶し、前記アプリケーション・スレッドが前記保留待ち行列に記憶されている間、前記アプリケーション・スレッドに対する前記ある量のメモリの再割当てを周期的に試みることを含む。
【０００５】
【発明の実施の形態】
図１は、本発明の実施形態に従ったコンピュータ・システム１００を示す。コンピュータ・システム１００は、プロセッサ１０３とメモリ１０６を有するプロセッサ回路を含み、その両方ともローカル・インタフェース１０９に結合される。コンピュータ・システム１００は、例えば、汎用コンピュータ、携帯情報端末、ラップトップ、ワークステーション、または類似の機能を有する他の装置である。
【０００６】
１つまたは複数のアプリケーション１１３、メモリ・ステータス・アプリケーション・プログラム・インタフェース（ＡＰＩ）１１６、いくつかの実行時ライブラリ関数１１９及びオペレーティング・システム１２３を含むいくつかのソフトウエア・コンポーネントがメモリ１０６に記憶され、プロセッサ１０３によって実行可能である。アプリケーション１１３は、数百万でないとしても実質上数千のアプリケーションが作成されたとすると、例えば、ワード・プロセッサ・プログラム、スプレッドシート・プログラム、ブラウザ、または任意の他のアプリケーションである。メモリ・ステータスＡＰＩ１１６は、待ち行列マネージャ１２６と保留待ち行列１２９を含む。保留待ち行列１２９には、対応する１つまたは複数のアプリケーション１１３によって生成された１つまたは複数のアプリケーション・スレッド１３１が記憶される。メモリ・ステータスＡＰＩ１１６、待ち行列マネージャ１２６及び保留待ち行列１２９の動作は、後述するような延期された（ｄｅｆｅｒｒｅｄ、遅延ともいう）メモリ割当てを提供する。また、オペレーティング・システム１２３は、メモリ１０６の割当てを制御するように動作するメモリ管理ＡＰＩ１３３を含む。
【０００７】
メモリ１０６は、本明細書において、揮発性、不揮発性両方のメモリ及びデータ記憶コンポーネントとして定義される。揮発性のコンポーネントとは、電力がないときにデータ値を保持しないものである。不揮発性のコンポーネントとは、電力がないときにデータを保存するものである。従って、メモリ１０６は、例えば、ランダム・アクセス・メモリ（ＲＡＭ）、読み出し専用メモリ（ＲＯＭ）、ハード・ディスク・ドライブ、関連するフロッピー・ディスク・ドライブによってアクセスされるフロッピー・ディスク、コンパクト・ディスク・ドライブによってアクセスされるコンパクト・ディスク、適切なテープ・ドライブによってアクセスされる磁気テープ、及び／または他のメモリコンポーネント、あるいはこれらのメモリコンポーネントの任意の２つ以上の組み合わせを含む。さらに、ＲＡＭは、例えば、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）、ダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）、磁気ランダム・アクセス・メモリ（ＭＲＡＭ）、その他のそのような装置を含む。ＲＯＭは、例えば、プログラム可能な読み出し専用メモリ（ＰＲＯＭ）、消去可能プログラム可能読み出し専用メモリ（ＥＰＲＯＭ）、電気的消去可能プログラム可能読み出し専用メモリ（ＥＥＰＲＯＭ）、その他の類似のメモリ装置を含む。
【０００８】
さらに、プロセッサ１０３は、複数のプロセッサを表すこともあり、メモリ１０６は、並列に動作する複数のメモリを表すことがある。このような場合、ローカル・インタフェース１０９は、複数のプロセッサのうちいずれか２つのプロセッサの間、任意のプロセッサと任意のメモリとの間、またはメモリのうちいずれか２つのメモリの間の通信を容易にする適切なネットワークで良い。プロセッサ１０３は、本質的に、電気的、分子的、または光学的なものでも良い。
【０００９】
オペレーティング・システム１２３は、メモリ、処理時間、周辺装置などのコンピュータ・システム１００内のハードウェア資源の割当て及び使用を制御するために実行される。このように、オペレーティング・システム１２３は、当業者によって一般に知られているように、アプリケーションが依存する基礎としてはたらく。オペレーティング・システム１２３の特定のメモリ割当て機能は、オペレーティング・システム１２３のメモリ管理ＡＰＩ１３３やその他の部分によって実行される。
【００１０】
次に、本発明の実施形態によるコンピュータ・システム１００の動作の概要を説明する。以下の説明の文脈を提供するために、アプリケーション１１３のうちの１つまたは複数が、プロセッサ１０３によって実行され、その実行を容易にするために、例えばランダム・アクセス・メモリや仮想メモリなどのメモリ１０６の一部分に記憶されると仮定する。また、コンピュータ・システム１００のユーザが、既に実行されているアプリケーションに加えてさらに他のアプリケーション１１３を実行したい場合があると仮定する。このように、新しいアプリケーション１１３は、メモリ・ステータスＡＰＩ１１６に適用されるメモリまたはアプリケーション・スレッド１３１の要求を生成する。代替として、ユーザは、さらに他のアプリケーション１１３を実行するのではなく、追加メモリの割当てを必要とする現在実行されているアプリケーション１１３の機能を利用することができる。
【００１１】
アプリケーション・スレッド１３１は、メモリ・ステータスＡＰＩ１１６を呼び出してメモリを割り当てる。次に、メモリ・ステータスＡＰＩ１１６は、実行時ライブラリ関数１１９のうちの適切な実行時ライブラリ関数を呼び出して、新しいアプリケーション１１３を実行するためにメモリの割当てを試みる。１つの環境において、アプリケーション１１３の実行を容易にするために使用されるメモリ１０６の一部分は、新しいアプリケーション・スレッドを収容するのに十分な使用可能なメモリを含むことができる。従って、メモリ管理ＡＰＩ１３３は、必要とされるメモリを割り当て、メモリ・ポインタを実行時ライブラリ関数１１９に返す。実行時ライブラリ関数１１９は、メモリ・ポインタをメモリ・ステータスＡＰＩ１１６に返し、今度はその情報をメモリの割当てを要求している新しいアプリケーションまたは既存のアプリケーション１１３に提供する。その後で、新しいアプリケーション１１３または現在実行されているアプリケーション１１３の追加機能が、操作用にメモリ・ポインタによって識別されたメモリを使用して実行される。この場合、メモリ・ステータスＡＰＩ１１６は、実行時ライブラリ関数１１９にメモリ割当て要求を渡すだけである。
【００１２】
しかしながら、いくつかの環境では、アプリケーション・スレッド１３１を収容するのに必要となるメモリ１０６の部分が十分にないことがある。従って、メモリ管理ＡＰＩ１３３は、メモリ割当ての失敗を実行時ライブラリ関数１１９に提供し、実行時ライブラリ関数１１９は、そのメモリ割当ての失敗をメモリ・ステータスＡＰＩ１１６に提供する。次に、メモリ・ステータスＡＰＩ１１６は、アプリケーション・スレッド１３１が延期されたメモリ割当てのために指定されているか否かを判断する。アプリケーション・スレッド１３１がこのように指定されている場合は、そのアプリケーション・スレッド１３１を保留待ち行列１２９に格納して、新しいアプリケーション１１３を収容するメモリ１０６の部分を再割り当てするさらなる試みを待つことができる。
【００１３】
アプリケーション・スレッド１３１が延期されたメモリ割当てのために指定されている場合、メモリ・ステータスＡＰＩ１１６は、アプリケーション・スレッド１３１を保留待ち行列１２９に入れる。アプリケーション・スレッド１３１の延期メモリ割当てのための指定は、複数の形態のうちのいずれかを取ることができる。例えば、１つの例において、アプリケーション・スレッド１３１は、所定の期間保留待ち行列１２９内に保持されるように指定されることがある。代替として、アプリケーション・スレッド１３１を、メモリが利用可能になるまで無制限に保持するように指定することができる。アプリケーション・スレッド１３１が所定の期間保留待ち行列１２９に記憶される場合は、元のアプリケーション１１３によって、アプリケーション・スレッド１３１を保留待ち行列１２９に記憶することができる最長期間を示す記憶ターンアウトをアプリケーション・スレッド１３１と関連付ける。アプリケーション・スレッド１３１が保留待ち行列１２９内の不特定の記憶のために指定された場合は、アプリケーション・スレッド１３１は、その実行のためのメモリが割り当てられるまで保留待ち行列１２９に保持される。
【００１４】
記憶タイムアウト（ｓｔｏｒａｇｅ　ｔｉｍｅｏｕｔ）を関連付けることによって、アプリケーション・スレッド１３１が保留待ち行列１２９内における一時的な記憶のために指定された場合は、アプリケーション・スレッド１３１は、所定の記憶タイムアウトのために保留待ち行列１２９に記憶される。記憶タイムアウトの終了時に、アプリケーション・スレッド１３１は保留待ち行列１２９から取り出され、アプリケーション・スレッド１３１のためのメモリ量の割当ての失敗がそれぞれのアプリケーション１１３に返される。
【００１５】
さらに、これは、アプリケーション１１３が非延期のメモリ割当てのためにアプリケーション・スレッド１３１を指定する場合にも当てはまることがある。この場合、メモリ・ステータスＡＰＩ１１６が、実行時ライブラリ関数１１９からそのようなアプリケーション・スレッド１３１のメモリ割当ての失敗を受け取った場合、メモリ・ステータスＡＰＩ１１６は、アプリケーション・スレッド１３１のメモリ割当ての失敗を、アプリケーション・スレッド１３１を作り出したそれぞれのアプリケーション１１３に返す。従って、必要なメモリ割当てのためのアプリケーション・スレッド１３１を生成する際に、アプリケーション１１３は、延期されたメモリ割当てを使用すべきか否かの指示をアプリケーション・スレッド１３１に指定する。これは、例えば、延期されたメモリ割当てを適用するか否かを表すアプリケーション・スレッド１３１と関連した１つまたは複数のフラグを設定することによって行うことができる。さらに、一時的なメモリ割当てを使用する場合、アプリケーション１１３は記憶タイムアウトをそれに対して指定する。
【００１６】
待ち行列マネージャ１２６は保留待ち行列１２９を維持するように動作する。具体的には、待ち行列マネージャ１２６は、メモリ・ステータスＡＰＩ１１６の「バックグラウンド」で動作し、記憶されているアプリケーション・スレッド１３１のメモリの再割当てを試みる。待ち行列マネージャ１２６は、メモリが首尾よく割り振られたときに、保留待ち行列１２９からアプリケーション・スレッド１３１を取り出す。さらに、待ち行列マネージャ１２６は、保留待ち行列１２９内に保持された任意のアプリケーション・スレッド１３１と関連付けられたすべての記憶タイムアウトのカウントダウンを追跡し、記憶タイムアウトが終了したとき、保留待ち行列１２９からそのようなアプリケーション・スレッド１３１を取り出す。記憶タイムアウトが終了したときも、待ち行列マネージャ１２６は、有効期限切れになったアプリケーション・スレッド１３１用のメモリ割当ての失敗を適切なアプリケーション１１３に返す。
【００１７】
次に図２を参照すると、特定のアプリケーション・スレッド１３１（図１）についてアプリケーションから受け取ったメモリ割当ての呼出しを処理する際のメモリ・ステータスＡＰＩ１１６の動作のフローチャートを示す。代替的に、図２のフローチャートを、延期されたメモリ割当てを容易に行うためにコンピュータ・システム１００（図１）で実施される方法のステップを示すものと見ることもできる。
【００１８】
最初にボックス１５３で、メモリ・ステータスＡＰＩ１１６は、特定のアプリケーション・スレッド１３１からのメモリ割当ての呼び出しを受け取るのを待つ。そのような呼び出しを受け取った場合は、ボックス１５６で、メモリ・ステータスＡＰＩ１１６は、メモリを割り当てるために実行時ライブラリ関数１１９（図１）内のヒープ・マネージャ関数を呼び出す。ボックス１５９で、メモリ・ステータスＡＰＩ１１６は、メモリが現在のアプリケーション・スレッド１３１に首尾よく割り振られたか否かを判断する。この判断は、例えば、メモリ・ステータスＡＰＩ１１６によって呼び出された実行時ライブラリ関数１１９から返される応答に基づいて行われる。メモリが首尾よく割り振られた場合、メモリ・ステータスＡＰＩはボックス１６３に進み、ここで割り振られたメモリのメモリ・ポインタが要求アプリケーションに返され、その結果、アプリケーション・スレッド１３１を実行することができる。その後で、メモリ・ステータスＡＰＩ１１６の動作が終了する。
【００１９】
一方、ボックス１５９で判断されたとき、メモリが首尾よく割り当てられていない場合は、メモリ・ステータスＡＰＩ１１６はボックス１６６に進み、アプリケーション・スレッド１３１が延期されたメモリ割当てに指定されているか否かを判断する。これは、例えばそのような指示を提供するアプリケーション・スレッド１３１と関連したフラグを調べることによって行うことができる。その後、ボックス１６９で、アプリケーション・スレッド１３１が延期されたメモリ割当てに指定されていない場合は、メモリ・ステータスＡＰＩ１１６はボックス１７３に進み、ここでメモリの割当ての失敗が要求アプリケーション１１６に返される。その後、メモリ・ステータスＡＰＩ１１６の動作が終了する。
【００２０】
しかしながら、ボックス１６９で、アプリケーション・スレッド１３１が延期されたメモリ割当てに指定されていた場合は、メモリ・ステータスＡＰＩ１１６はボックス１７６に進み、そこでアプリケーション・スレッド１３１が保留待ち行列１２９に入れられる。その後、メモリ・ステータスＡＰＩ１１６の動作が終了する。このように、メモリ・ステータスＡＰＩ１１６は、適切なアプリケーション・スレッド１３１を保留待ち行列１２９（図１）に入れて、指定されたアプリケーション・スレッド１３１の延期されたメモリ割当てを容易にする。
【００２１】
次に図３に移り、本発明の実施形態による待ち行列マネージャ１２６の動作の例を提供する例示的なフローチャートを示す。待ち行列マネージャ１２６は、メモリ・ステータスＡＰＩ１１６のバックグラウンドで連続的に動作して保留待ち行列１２９（図１）を維持する。代替として、図３のフローチャートは、保留待ち行列１２９を維持するためにコンピュータ・システム１００（図１）において実施される方法のステップを示すと見なすことができる。
【００２２】
最初にボックス２０３で、待ち行列マネージャ１２６は、保留待ち行列１２９が空か否かを判断する。空の場合、待ち行列マネージャ１２６はボックス２０６に進み、時間遅延（ｄｅｌａｙ）を所定の期間だけ実施する。１つの実施形態において、この時間遅延は長さが約１０ミリ秒であるが、任意の時間長を使用することができる。その後、待ち行列マネージャ１２６はボックス２０３に戻る。
【００２３】
ボックス２０３で保留待ち行列が空でないと仮定すると、待ち行列マネージャ１２６はボックス２０９に進む。ボックス２０９で、保留待ち行列１２９内の一番上のアプリケーション・スレッド１３１（図１）が、その後の処理のために指定される。その後、ボックス２１３で、待ち行列マネージャ１２６は実行時ライブラリ関数１１９（図１）に含まれるヒープ・マネージャ関数を呼び出して、指定されたアプリケーション・スレッド１３１のためにメモリを割り当てる。次に、ボックス２１６で、待ち行列マネージャ１２６は、実行時ライブラリ関数１１９からのメモリを割り当てるメモリ・ポインタまたは失敗が返されることに基づいて、メモリが首尾よく割り振られたか否かを判断する。ボックス２１６でメモリが首尾よく割り振られた場合、待ち行列マネージャ１２６はボックス２１９に進み、割り振られたメモリのメモリ・ポインタを、指定されたアプリケーション・スレッド１３１を生成した要求アプリケーション１１３に返す。次に、待ち行列マネージャ１２６はボックス２２３に進み、指定されたアプリケーション・スレッド１３１が保留待ち行列１２９から取り出される。
【００２４】
アプリケーション・スレッド１３１が保留待ち行列１２９から取り出されると、待ち行列マネージャ１２６はボックス２２６に進み、保留待ち行列１２９内の最後のアプリケーション・スレッド１３１が処理されたか否かを判断する。保留待ち行列１２９内にリストされた最後のアプリケーション・スレッド１３１の処理が完了していない場合は、待ち行列マネージャ１２６はボックス２２９に進み、保留待ち行列内の次のアプリケーション・スレッド１３１を処理するように指定する。その後、待ち行列マネージャ１２６はボックス２１３に戻る。一方、ボックス２２６で、保留待ち行列１２９内の最後のアプリケーション・スレッド１３１が処理された場合、待ち行列マネージャ１２６はボックス２０６に戻る。
【００２５】
ボックス２１６を再び参照し、指定されたアプリケーション・スレッド１３１にメモリが首尾よく割り当てられた場合、待ち行列マネージャ１２６はボックス２３３に進み、アプリケーション・スレッド１３１を保留待ち行列１２９内に無制限に保持すべきか否かを判断する。保持する場合は、待ち行列マネージャ１２６はボックス２２６に進む。このアプリケーション・スレッド１３１は、そのアプリケーション・スレッド１３１にメモリを割り当てる試みが成功するまで保留待ち行列１２９内に留まる。アプリケーション・スレッド１３１を保留待ち行列１２９内に無期限に保持すべきか否かを判断するために、待ち行列マネージャ１２６は、そのような情報を提供するアプリケーション・スレッド１３１自身の適切なフラグやその他の特性を調べることができる。
【００２６】
ボックス２３３で、アプリケーション・スレッド１３１が保留待ち行列１２９内に無期限に保持されないと仮定すると、待ち行列マネージャ１２６はボックス２３６に進み、アプリケーション・スレッド１３１と関連した記憶タイムアウトが終了したか否かを判断する。記憶タイムアウトが終了した場合は、ボックス２３９で、待ち行列マネージャ１２６が、それぞれのアプリケーション・スレッド１３１のメモリの割当ての失敗を、アプリケーション・スレッド１３１を作り出したそれぞれのアプリケーション１１３（図１）に返す。その後、待ち行列マネージャ１２６はボックス２２３に進み、指定されたアプリケーション・スレッド１３１が保留待ち行列１２９から取り出される。
【００２７】
しかしながら、ボックス２３６で記憶タイムアウトが終了していない場合は、ボックス２４３で、待ち行列マネージャ１２６は、指定されたアプリケーション・スレッド１３１の残り時間を所定の時間だけ減少させる。このように、待ち行列マネージャ１２６がメモリを再割当てしようとする試みをするたびに、値がゼロになるまで記憶タイムアウトは減少され、これによって記憶タイムアウトが終了したことが示される。ボックス２４３において記憶タイムアウトが減少されると、待ち行列マネージャ１２６はボックス２２６に進む。
【００２８】
このように、それぞれのアプリケーション・スレッド１３１の適切なメモリ割当ての失敗が元のアプリケーション１１３に報告されるか、またはそれぞれのアプリケーション・スレッド１３１についてメモリが首尾良く割り当てられるまで、待ち行列マネージャ１２６は、保留待ち行列１２９内のアプリケーション・スレッド１３１に対してメモリを再割当てする試みが繰り返し行われる連続ループを提供する。
【００２９】
次に、図４に移り、特定のアプリケーション・スレッド１１３に延期されたメモリ割当てを行うか否かを指定するために実施される、アプリケーション１１３の一部分であるアプリケーション部分１１３ａのフローチャートの一例である。代替的に、図４のフローチャートは、延期されたメモリ割当てのためにアプリケーション・スレッド１３１を適切に指定するためにコンピュータ・システム１００（図１）において実施される方法のステップを示すと見ることもでき、この方法には、適切なフラグをセットし適切な記憶タイムアウトを割り当てることが含まれる。
【００３０】
最初にボックス２５３で、アプリケーション部分１１３ａの部分が、アプリケーション・スレッド１３１を延期されたメモリ割当てに指定すべきか否かを判断する。プリケーション・スレッド１３１を延期されたメモリ割当てに指定すべき場合は、ボックス２５６で、アプリケーション・スレッド１３１に、アプリケーション・スレッド１３１が延期されたメモリ割当てに支配されるか否かを示す適切なフラグがセットされる。その後、ボックス２５９で、アプリケーション・スレッド１３１が保留待ち行列１２９（図１）内に一時的に記憶される場合は、記憶タイムアウトがアプリケーション・スレッド１３１と関連付けられる。次に、ボックス２６３で、アプリケーション・スレッド１３１にメモリ・ステータスＡＰＩ１１６（図１）を呼び出させて、メモリを割り当てるプロセスを開始する。その後、アプリケーション部分１１３ａの動作が終了する。
【００３１】
メモリ・ステータスＡＰＩ１１６とアプリケーション部分１１３ａは、前述のような汎用ハードウェアによって実行されるソフトウェアまたはコードで実現され、代替的に、専用ハードウェアで実施されるか、あるいはソフトウェア、汎用ハードウェア及び専用ハードウェアの組み合せで実現することもできる。専用ハードウェアで実現される場合、メモリ・ステータスＡＰＩ１１６とアプリケーション部分１１３ａは、いくつかの技術のいずれか１つまたはその組み合わせを使用する回路または状態機械として実現することができる。これらの技術は、１つまたは複数のデータ信号の印加に応じて様々な論理関数を実現する論理ゲートを有する個別の論理回路、適切な論理ゲート、プログラム可能なゲート・アレイ（ＰＧＡ）、フィールドプログラム可能なゲート・アレイ（ＦＰＧＡ）、その他のコンポーネントを有する特定用途向けＩＣを含むことができるが、これらに限定されない。そのような技術は、一般に当業者に周知であり、本明細書で詳細に説明しない。
【００３２】
図２〜図４のフローチャートは、メモリ・ステータスＡＰＩ１１６とアプリケーション部分１１３ａの実施態様のアーキテクチャ、機能、及び動作を示す。ソフトウェアで実現される場合、各ブロックは、指定された論理関数を実施するプログラム命令を含むコードのモジュール、セグメントまたは部分を表すことがある。プログラム命令は、コンピュータ・システムや他のシステム内のプロセッサ等の適切な実行システムによって認識可能な数値命令を含むプログラム言語またはマシン・コードで書き込まれた人間が可読のステートメントを含むソース・コードの形で実施されてもよい。マシン・コードは、ソース・コードなどから変換することができる。ハードウェアで実現される場合、各ブロックは、指定された論理機能を実現するために１つの回路またはいくつかの相互接続された回路を表すことができる。
【００３３】
図２〜図４のフローチャートは特定の実行順序を示しているが、実行順序は図示した順序と異なってもよいことを理解されたい。例えば、複数のブロックの実行順序は図示した順序と異なっていても良い。また、図２〜図４に連続的に示した２つもしくはそれ以上のブロックは、並列にまたは部分的に並列に実行することができる。さらに、実用性の向上、経理、性能測定、故障診断の支援の提供などのために、任意の数のカウンタ、状態変数、警告セマフォまたはメッセージを本明細書に示した論理フローに追加することができる。そのような変更はすべて本発明の範囲内にあることを理解されたい。
【００３４】
また、メモリ・ステータスＡＰＩ１１６とアプリケーション部分１１３ａがソフトウェアまたはコードを含む場合、そのようなソフトウェアまたはコードは、例えばコンピュータ・システムや他のシステム内のプロセッサ等の命令実行システムによってまたはそれらと関連して使用されるコンピュータ可読媒体で実現することができる。その意味で、ロジックは、例えば、コンピュータ可読媒体から取り出し命令実行システムによって実行可能な命令及び宣言を含むステートメントを含むことができる。本発明の文脈において、「コンピュータ可読媒体」は、命令実行システムによってまたはそれと関連して使用されるメモリ・ステータスＡＰＩ１１６とアプリケーション部分１１３ａを含み、記憶し、または維持することができる任意の媒体でよい。コンピュータ可読媒体は、例えば電子的、磁気的、光学的、電磁気的な媒体、赤外または半導体媒体など、多数の物理媒体のうちのいずれも含むこともできる。適切なコンピュータ可読媒体のより具体的な例には、磁気テープ、磁気フロッピー・ディスケット、磁気ハードディスクまたはコンパクト・ディスクがあるがこれらに限定されない。また、コンピュータ可読媒体は、例えば、スタティック・ランダム・アクセス・メモリ（ＳＲＡＭ）とダイナミック・ランダム・アクセス・メモリ（ＤＲＡＭ）、または磁気ランダム・アクセス・メモリ（ＭＲＡＭ）を含むランダム・アクセス・メモリ（ＲＡＭ）でもよい。さらに、コンピュータ可読媒体は、読み出し専用メモリ（ＲＯＭ）、プログラム可能な読み出し専用メモリ（ＰＲＯＭ）、消去可能プログラム可能読み出し専用メモリ（ＥＰＲＯＭ）、電気的消去可能プログラム可能読み出し専用メモリ（ＥＥＰＲＯＭ）、その他のタイプのメモリ装置でよい。
【００３５】
本発明をいくつかの実施形態に関して説明したが、本明細書を読み理解することによって等価物と改良品を作成することができることは当業者には明らかであろう。本発明は、そのような等価物及び改良品をすべて含む。
【図面の簡単な説明】
【図１】本発明の一実施形態に係る例示的なメモリ・ステータス・アプリケーション・プログラミング・インタフェース（ＡＰＩ）を使用するコンピュータ・システムの概略図である。
【図２】図１のメモリ・ステータスＡＰＩの動作を説明する例示的なフローチャートである。
【図３】図１のメモリ・ステータスＡＰＩの一部として動作するメモリ・ステータス・スレッドの動作を示す例示的なフローチャートである。
【図４】図１のメモリ・ステータスＡＰＩからのメモリ割当てを要求するアプリケーションの一部の動作を示す例示的なフローチャートである。
【符号の説明】
１０３　プロセッサ
１０６　メモリ
１１３　アプリケーション
１１６　延期されたメモリ割当てロジック
１２９　保留待ち行列
１３１　アプリケーション・スレッド
【図１】
2004054933.tif 000003
【図２】
2004054933.tif 000004
【図３】
2004054933.tif 000005
【図４】
2004054933.tif 000006