(57)【特許請求の範囲】
【請求項１】
一組の関連コードセットによる特定のリソースのリソース使用を管理するための方法であって、
コンピュータシステムにダウンロードされた各アプレットについて、前記ダウンロードされたアプレットによって直接実行されると共に前記ダウンロードされたアプレットによって起動される全てのスレッドとリソース標識とを関連付け、前記ダウンロードされたアプレットによって直接実行されると共に前記ダウンロードされたアプレットによって起動される前記全てのスレッドは、関連コードセットとして定義されることと、
前記関連コードセットと、前記関連コードセットに割り当てられた特定のリソースの各リソース部位とを関連付け、前記特定のリソースは、ＣＰＵまたはネットワークであること、
リソース再利用プロセスを介して、前記関連コードセットと、前記関連コードセットに対する割り当てが解除された前記リソース部位との関連付けを解除し、
前記リソース標識が前記関連コードセットの実際のリソース使用量のみを追跡するように前記関連コードセットが前記特定のリソースのリソース総使用量を変更する度に前記リソース標識を更新し、前記更新は、前記リソース部位が前記関連コードセットに割り当てられる度に前記リソース標識を増加させること、前記リソース部位が前記関連コードセットから割り当てを解除される度に前記リソース標識を減少させることを含むこと、
前記特定のリソースと前記関連コードセットとに、閾値を関連付け、
前記関連コードセットによる前記特定のリソースのリソース使用量が、前記閾値を超えた場合に、ＣＰＵの使用またはネットワークの使用についての前記関連コードセットの優先度を格下げすることを示し、
第２の閾値を前記特定のリソースと、前記関連コードセットとに関連付け、
前記関連コードセットによる前記特定のリソースのリソース使用量が、前記第２の閾値以下に下がった場合に、ＣＰＵの使用またはネットワークの使用についての前記関連コードセットの優先度を格上げすることを示すこと、
とを備える方法。
【請求項２】
請求項１記載の方法であって、
前記リソース標識の値は、前記リソース使用の絶対値を表す方法。
【請求項３】
請求項１記載の方法であって、
前記リソース標識の値は、前記リソース使用の相対値を表す方法。
【請求項４】
請求項１記載の方法であって、さらに、
前記リソース標識が既定の最大閾値以下である場合に、前記特定のリソースを前記関連コードセットに割り当て、
前記リソース標識が前記既定の最大閾値を超える場合に、エラーを示し、前記特定のリソースを割り当てないことを備えた方法。
【請求項５】
請求項４記載の方法であって、
前記エラーは、out_of_memory 例外を表示することによって示される方法。
【請求項６】
請求項１ないし請求項５のいずれかに記載の方法であって、
前記特定のリソースは、さらに、メモリと、オープンファイルと、オープンソケットと、モニタと、からなる群より選択される方法。
【請求項７】
請求項６記載の方法であって、
前記リソース標識は、前記関連コードセットによって使用される前記特定のリソースの割合を示す方法。
【請求項８】
請求項６または請求項７に記載の方法であって、さらに、
前記特定のリソースと前記関連コードセットとに、複数の閾値を関連付け、
前記関連コードセットによる前記特定のリソースのリソース使用量が、第１番目の閾値を超えた場合に、登録済みのリソースコールバックを通知すること
を備えた方法。
【請求項９】
請求項８記載の方法であって、さらに、
前記関連コードセットによる前記特定のリソースのリソース使用量が、前記第１番目の閾値と異なる値を有した第２番目の閾値以下に下がった場合に、登録済みのリソースコールバックを通知することを備えた方法。
【請求項１０】
請求項６記載の方法であって、さらに、
前記関連コードセットによる前記特定のリソースのリソース使用量が、前記第１の閾値以下に下がった場合に、登録済みのリソースコールバックを通知することを備えた方法。
【請求項１１】
請求項１ないし請求項１０のいずれかに記載の方法であって、さらに、
各々が、前記関連コードセットによる複数のリソースのリソース使用量を示す、複数のリソース標識を、前記関連コードセットに関連付け、
前記関連コードセットが、前記関連のリソースのリソース総使用量を増加または減少させた場合に、選択されたリソース標識を更新すること
を備えた方法。
【請求項１２】
請求項１１記載の方法であって、
前記リソースは、さらに、メモリを含む方法。
【請求項１３】
請求項１２記載の方法であって、
前記リソースはさらに、オープンファイルと、オープンソケットとを含む方法。
【請求項１４】
請求項１記載の方法であって、さらに、いずれのスレッドが同一の保護ドメインに割り当てられるかに基づいて、いずれのスレッドが前記関連コードセットとして定義されるべきかを決定することを備える、方法。
【請求項１５】
請求項１記載の方法であって、さらに、リソース標識が最大値を超えるとリソース標識が最大値を超えた前記関連コードセットのスレッドを停止することを備える、方法。
【請求項１６】
請求項１記載の方法であって、前記コンピュータシステムはセットトップボックスまたはナビゲーションシステムに組み込まれている、方法。
【請求項１７】
コンピュータシステムにダウンロードされたアプレットのリソースの使用を管理するためのコンピュータプログラムを格納したコンピュータ読み取り可能媒体であって、前記コンピュータプログラムは、コンピュータによって実行される、
前記コンピュータシステムにダウンロードされた各アプレットについて、前記ダウンロードされたアプレットによって直接実行されると共に前記ダウンロードされたアプレットによって起動される全てのスレッドとリソース標識とを関連付ける機能と、前記ダウンロードされたアプレットによって直接実行されると共に前記ダウンロードされたアプレットによって起動される前記全てのスレッドは、関連コードセットとして定義されること、
前記関連コードセットと、前記関連コードセットに割り当てられた特定のリソースの各リソース部位とを関連付ける機能と、前記特定のリソースは、ＣＰＵまたはネットワークであること、
リソース再利用プロセスを介して、前記関連コードセットと、前記関連コードセットに対する割り当てが解除された前記リソース部位との関連付けを解除する機能と、
前記リソース標識が前記関連コードセットの実際のリソース使用量のみを追跡するように前記関連コードセットが前記特定のリソースのリソース総使用量を変更する度に前記リソース標識を更新する機能と、前記更新は、前記リソース部位が前記関連コードセットに割り当てられる度に前記リソース標識を増加させること、前記リソース部位が前記関連コードセットから割り当てを解除される度に前記リソース標識を減少させることを含むこと、
前記特定のリソースと前記関連コードセットとに、閾値を関連付ける機能と、
前記関連コードセットによる前記特定のリソースのリソース使用量が、前記閾値を超えた場合に、ＣＰＵの使用またはネットワークの使用についての前記関連コードセットの優先度を格下げすることを示す機能と、
第２の閾値を前記特定のリソースと、前記関連コードセットとに関連付ける機能と、
前記関連コードセットによる前記特定のリソースのリソース使用量が、前記第２の閾値以下に下がった場合に、ＣＰＵの使用またはネットワークの使用についての前記関連コードセットの優先度を格上げすることを示す機能と、
を備えるコンピュータ読み取り可能媒体。
【請求項１８】
請求項１７に記載のコンピュータ読み取り可能媒体であって、前記コンピュータプログラムはさらに、
前記リソース標識が既定の最大閾値以下である場合に、前記特定のリソースを前記関連コードセットに割り当てるための機能と、
前記リソース標識が前記既定の最大閾値を超える場合に、エラーを示し、前記特定のリソースを割り当てないための機能とを、コンピュータによって実行させる、コンピュータ読み取り可能媒体。
【請求項１９】
請求項１７または請求項１８のいずれかに記載のコンピュータ読み取り可能媒体であって、
前記特定のリソースは、さらに、メモリと、オープンファイルと、オープンソケットと、モニタと、からなる群より選択される、コンピュータ読み取り可能媒体。
【請求項２０】
請求項１９に記載のコンピュータ読み取り可能媒体であって、前記コンピュータプログラムはさらに、
前記特定のリソースと、前記関連コードセットとに、複数の閾値を関連付けるための機能と、
前記関連コードセットによる前記特定のリソースのリソース使用量が、第１番目の閾値を超えた場合に、登録済みのリソースコールバックを通知するための機能と
をコンピュータによって実行させる、コンピュータ読み取り可能媒体。
【請求項２１】
請求項１９記載のコンピュータ読み取り可能媒体であって、前記コンピュータプログラムはさらに、
前記関連コードセットによる前記特定のリソースのリソース使用量が、第１番目の閾値と異なる値を有した第２番目の閾値以下に下がった場合に、登録済みのリソースコールバックを通知するための機能をコンピュータによって実行させる、コンピュータ読み取り可能媒体。
【請求項２２】
請求項１７に記載のコンピュータ読み取り可能媒体であって、前記コンピュータプログラムはさらに、
いずれのスレッドが同一の保護ドメインに割り当てられるかに基づいて、いずれのスレッドが前記関連コードセットとして定義されるべきかを決定する機能をコンピュータによって実行させる、コンピュータ読み取り可能媒体。
【請求項２３】
請求項１７記載のコンピュータ読み取り可能媒体であって、前記コンピュータプログラムはさらに、
リソース標識が最大値を超えるとリソース標識が最大値を超えた前記関連コードセットのスレッドを停止する機能をコンピュータによって実行させる、コンピュータ読み取り可能媒体。
【請求項２４】
請求項１７記載のコンピュータ読み取り可能媒体であって、前記コンピュータシステムはセットトップボックスまたはナビゲーションシステムに組み込まれている、コンピュータ読み取り可能媒体。
【発明の詳細な説明】
【０００１】
【発明の背景】
この発明は、概してソフトウェアアプリケーションに関し、特に、オブジェクトベースのシステムにおいてリソース使用を管理するための、方法および装置に関する。
【０００２】
消費者サイドからは、コストダウンが強く求められている。このため、例えば、消費者向けのシステムにおいて、メモリおよびＣＰＵデバイスの能力を可能な限り縮小し、コスト全体を最小化する試みがなされている。例えば、ケーブルテレビのセットトップボックスでは、メモリスペースおよびＣＰＵ能力に制限がある。オブジェクトベースのシステムが消費者向けのデバイスに組み入れられていることから、同システムにおけるリソースの使用を効率的に管理することが日々重要性を増している。つまり、（多くの原因のなかでも特に）制限リソースによってもたらされる結果として、リソースの使用を追跡および管理することが、オブジェクト指向分野における大きな課題となっている。
【０００３】
特に、非トラステッドコードのリソースの使用を追跡することが重要である。例えば、非トラステッドなＵＲＬからセットトップボックスにダウンロードされたアプレットのリソースの使用を追跡することが重要である。ダウンロードされたアプレットは、メモリのスペースやＣＰＵの時間などのリソースを法外な量で消費するように、作為的または非作為的に設計されている可能性がある。
【０００４】
また、関連コードセットのリソースの使用を追跡および管理することも重要である。例えば、アプレットを代表して実行されるスレッドは、セットトップボックスの制限リソースを、共にまたは個々に過度に消費する恐れがある。したがって、単に個別のスレッドのリソースの使用を追跡および管理するだけでは不十分である。アプレットは、例えば、共同で作用してリソースを消費するマルチプルスレッドを開始し得る。個別のスレッドのリソースの使用を追跡しても、その個別のスレッドだけしか強制終了させることができない。ところが、リソースを消費しているスレッドを強制終了させる前に、アプレットは、他のリソース消費スレッドにラウンチし得る。つまり、あるアプレットまたは関連コードセットがリソースを過度に消費していることを決定する方法があれば、その貪欲なアプレットに関連付けられている、および／または同アプレットによる制御を受けている、全てのスレッドを、リソースの過度な消費から阻止することができる。
【０００５】
このように、リソースの使用を追跡および管理するための、改善された方法および装置が必要とされている。また、関連コードセットに関し、そのリソースの使用を追跡および管理するためのメカニズムが必要とされている。
【０００６】
【発明の概要】
上述したニーズを満たすために、本発明は概して、アプレットに代わって実行されるコードなどの、関連コードによるリソースの使用を管理するための、装置および方法を提供する。本発明は、一実施形態において、関連コードセットにより特定リソースの使用を管理するための方法を開示する。リソース標識は関連コードに関連付けられており、リソース標識は、関連コードによって特定リソースの使用量を表示する。例えば、カウンタは、アプレットに代わって実行されるコードによって、何バイトのリソース（例えば、Ｊａｖａ[登録商標]ヒープメモリ）が消費されているかを追跡する。リソース標識は、関連コードが自身の特定リソースの総使用量を増加または減少する際に更新される。例えば、カウンタは、アプレットがその使用のためにメモリを割り当てられ、メモリ使用量を増加させた場合に増加され、アプレットのメモリが再利用されている場合には減少される。
【０００７】
別の実施形態では、本発明は、リソースの使用を管理するためのコンピュータコードを有したコンピュータ読み取り可能媒体に実現される。このコンピュータ読み取り可能媒体は、関連コードによる特定リソースのリソース使用量を表示する関連コードに、リソース標識を関連付けるための、コンピュータコードと、関連コードによる特定リソースの全リソース使用が増加または減少した場合に、リソース標識を更新するための、コンピュータコードと、を備える。
【０００８】
別の実施形態では、関連コードセットによってリソースの使用を管理するための、コンピュータシステムを開示する。このコンピュータシステムは、ある関連コードセットに関連付けられたリソースコンテキストを有する。例えば、１つのリソースが、ある特定のソース（例えばＵＲＬ）から得られた各アプレットセットに関連付けられているとする。リソースコンテキストは、ある特定のリソースタイプに関連付けられて、該タイプのリソースが関連コードセットによってどれだけ使用されているかを示す、リソース標識を有する。例えばリソースコンテキストは、そのアプレットによるメモリ（例えばＪａｖａ[登録商標]ヒープメモリ）の使用量を追跡するための、カウンタを有する。また、上記コンピュータシステムは、リソースコンテキストに関連付けられたリソースオブジェクトをも有する。このリソースオブジェクトは、上述したリソースタイプのリソースが、関連コードセットによってどれだけ使用されるかを表示する。メモリカウンタは、リソースコンテキストのアプレットが、メモリ（例えばＪａｖａ[登録商標]ヒープメモリ）を例えば２０バイトしか使用していないと示すかもしれない。上記コンピュータシステムはさらに、関連コードセットが、更新後のリソース標識に関連付けられたリソースタイプのリソースの使用を増加させた場合に、リソースコンテキストのリソース標識を増分させるように構成された、更新メカニズムを有する。
【０００９】
本発明には数々の利点が見られる。例えば、関連コード（例えばソースを同じくする複数のアプレット）によってリソースの使用を追跡することにより、リソースの過度な消費を停止するまたは阻止するアクションが、関連コードセット全体に実装される。例えば、特定のウェブサイトからセットトップボックスにアプレットがダウンロードされると、そのアプレットによるセットトップリソースの使用状況が、注意深くモニタされる。使用量が大きすぎる場合は、そのアプレットに、リソースの使用をカットするかまたは終了する必要があることを警告する。もしそのアプレットがリソースの使用を増大し続けるならば、そのアプレットに関連付けられた全てのスレッドを終了させる。このため、たとえアプレットがリソースを消費するスレッドを複数生成するように作為的に設計されていたとしても、そのようなスレッドを全て打ち切ることが可能となる。また、アプレットコードを実行するあらゆるシステムスレッドの実行を、有害なアプレットの所有ではないリソースオブジェクトの状態を破壊しない方法で、確実に終了させることができる。
【００１０】
以下に続く詳細な説明と添付した種々の図面とから、本発明の上述したおよびその他の利点がいっそう明らかになる。
【００１１】
【発明の実施の形態】
次に、本発明の特定の実施形態に関して詳細な説明を行う。以下では、本発明を特定の実施形態との関連のもとで説明するが、これは、本発明をこれらの実施形態に限定することを意図するものではない。反対に、添付した特許請求の範囲で定義される、発明の趣旨および範囲の範囲内で、種々の変更物、改良物、および等価物を含むことを意図している。以下の説明では、本発明の完全な理解を促すために多くの詳細について特定している。しかしながら本発明は、これらの項目の一部または全てを特定しなくても実施することが可能である。そのほか、本発明を不必要に不明瞭化するのを避けるため、周知のプロセス操作および／または構造の説明は省略した。
【００１２】
本発明は一般に、特定のウェブサイトからダウンロードされたアプレットに代わって実行されるコードなどの、関連コードによるリソースの使用を管理するための方法および装置に関する。関連コードは、自身によるリソース使用のシングルエンティティとして理論的にチャージされ得る任意のコードを含む。関連コードは、例えば、メソッド上にダウンロードされアプレットによって開始されたコードおよび／またはスレッドの一部として、同アプレットによって直接実行される、スレッドまたはメソッドを含む。例えば、アプレットメソッドによってシステムメソッドが呼び出される。関連コードはまた、同じソース（例えばウェブサイト）または関連ソース（例えば同一企業が所有するサイト）から得られる複数のアプレットに代わって実行されるコードも含む。また、関連コードはアプレット以外の形態を採っても良い。
【００１３】
簡単のため、本明細書を通じて、アプレットを代表して実行されるコードを関連コードの一例として使用するものとする。本明細書で開示する実施形態では、各アプレットによるリソースの使用を追跡する。例として、アプレットによるメモリの総消費量を追跡および管理する場合が挙げられる。別の例として、特定の継続期間のうちアプレットが必要としたＣＰＵ時間（例えば、特定の継続期間に占めるＣＰＵ時間の割合で表したもの）を追跡および管理する場合が挙げられる。
【００１４】
リソースの使用の追跡は、各アプレットに何らかの標識を関連付けることによってもなされる。この標識は、特定のリソースが、アプレットによってどれだけ消費されたかを追跡するものである。標識は例えば、特定リソースの絶対消費量を追跡することができる。例として、特定のアプレットが消費するバイト数（例えばＪａｖａ[登録商標]ヒープメモリの）を、カウンタで追跡する場合が挙げられる。その代わりに、標識は、例えば、特定リソースの相対消費量を追跡することもできる。例として、アプレットがＣＰＵを使用している時間が既定期間に占める割合を、ＣＰＵの使用標識で追跡することが挙げられる。各アプレットは複数の関連の標識を有し、その各標識は、アプレットおよび関連コードが特定タイプのリソースをどれだけ消費しているかを追跡する。各アプレットは、例えば、メモリの使用標識と、ＣＰＵの使用標識と、ネットワークの使用標識とを有することができる。
【００１５】
割り当てられた、または、利用された各リソースオブジェクトを、対応するアプレットに関連付けても良い。どのアプレットまたはアプレットセットが特定のリソースオブジェクトに対応するかを決定するには、あらゆる適切な係数を考慮することが可能である。例えば、あるアプレットにメモリブロックが１つ割り当てられた場合は、同アプレットがそのメモリブロックに対応すると見なされて、その割り当てられたメモリブロックに関連付けられる。対応する関連コードセットにリソースオブジェクトを関連付けるためのメカニズムに関しては、図１と関連させて後ほど説明することにする。
【００１６】
特定のアプレットにリソースオブジェクトが関連付けられると、リソースオブジェクトがアプレットの使用に割り当てられた後、およびリソースオブジェクトがアプレットから割り当て解除された後に、同アプレットの適切なリソース標識が更新される。例えば、アプレットの使用にメモリブロックが割り当てられると、そのアプレットのメモリカウンタが、割り当てられたメモリブロックのサイズ分だけ増分される。
【００１７】
アプレットによるリソースの使用を追跡するために使用されるメカニズムのなかには、エンティティ（ここではリソースコンテキストを呼ぶ）の形で表されるものもある。また、リソースコンテキストは、該リソースコンテキストに関連付けられたコードがリソースを使用する際に、そのリソースの使用を要求する対象となるエンティティである。つまり、リソースコンテキストは、自身を介してリソース使の用を追跡および管理できるようなエンティティである。リソースコンテキストはまた、コードボディと、そのようなコードボディの実行によって消費されるリソースとに関連付けられる。
【００１８】
図１は、リソースの使用を管理するための種々のメカニズム間の関係を、本発明の一実施形態に従って示した図である。図中に示されているように、リソースコンテキスト１０２は、同リソースコンテキストが各タイプのリソースをどれだけ消費しているかを追跡するための、標識のセットを有する。一実施形態において、標識は、ＣＰＵの使用と、メモリの使用と、ネットワークの使用と、オープンファイルの数と、オープンソケットの数と、モニタの数とを追跡する。
【００１９】
また、リソースコンテキスト１０２は、各リソースタイプ（例えばヒープメモリ）に関する１つまたはそれ以上の既定の限界にも関連付けられている。各限界セットは、リソースの過度な消費を阻止するためのアクションが採られるまでに、リソースコンテキストに関連コードが、関連タイプのリソースにどれだけアクセスできるかを示す。リソースコンテキスト１０２は、例えば、２キロバイト、４キロバイト、および５キロバイト（最大使用量）の３種類のメモリ使用限界に関連付けられることが可能である。このリソースコンテキストのメモリ使用量が２キロバイトを超えると、同リソースコンテキストに関連付けられたアプレットは、そのリソースの使用が最大使用量の５キロバイトまであと３キロバイトのレベルに到達した、という警告を受ける。このリソースコンテキストのメモリ使用量が３キロバイトを超えると、同リソースコンテキストは、リソースを過度に消費しているため間もなく終了させられる、という警告を受ける。アプレットが第１および／または第２の限界を超えると、これ以上のメモリの割り当ては許可されない。使用量が５キロバイトを超えると、そのリソースコンテキストのアプレットは警告なしに終了させられる。
【００２０】
図１に示される実施形態において、リソースコンテキスト１０２は、メモリの使用量に関する複数の制限または閾値、すなわち制限制限１と、制限制限２と、最大制限と、特定のリソースタイプに関する下限配列および上限配列とを有したリソースオブジェクト１０４に関連付けられている。図中には示されていないが、リソースコンテキストは、任意の数のリソースオブジェクト（例えば、ＣＰＵ使用、ネットワーク使用、ソケット使用、ファイル使用、およびモニタ使用の各リソースに対応するリソースオブジェクト）に関連付けられることが可能である。
【００２１】
再び図１に戻り、最大制限は、リソースコンテキストに関連付けられた関連コードが消費し得るメモリの最大量を表す。制限１および制限２は、メモリの使用量が最大閾値に近づきづつある、という警告をトリガするために利用される閾値を表す。例えば、制限１を１キロバイト、制限２を２キロバイト、そして最大制限を３キロバイトにそれぞれ設定することができる。
【００２２】
関連のリソースコンテキストが制限１を超えると（例えば、関連のアプレットが１キロバイトを超える量を使用すると）、アプレットは、最大使用量の限界に近づきつつあるという警告を受ける。さらに制限２をも超えると（例えば、関連のアプレットが２キロバイトを超える量を使用すると）、アプレットは、最大使用量の限界にさらに近づいたという警告を受ける。そして最大使用量をも超えると（アプレットが３キロバイトを超える量を使用すると）、アプレットによるメモリへのアクセスは、さらなる警告を一切受けることなく終了させられる。同様に、アプレットが閾値以下に下がると、同アプレットは、もう最大の閾値に近づきつつしてはないという通知を受ける。
【００２３】
メモリが限界を超えつつあること、またはもう超えつつないことをアプレットに通知するためには、あらゆるメカニズムを実装することが可能である。図中に示される実施形態において、リソースオブジェクト１０４は、リソースコールバック１１８へのアクセス権を有する。リソースオブジェクトは、アプリケーションがリソースの使用に関する通知を登録および指示すると、リソースコールバックへのアクセス権を得る。ある閾値を超えた場合、あるいは同閾値またはその他の閾値をもう超えつつない場合に、登録済みのユーザに対するコールバックが開始される。
【００２４】
ヒステリシス効果を得るために、各制限に対して１対の値を提供することが可能である。例えば、リソースの使用が制限１をいったん超えると、通知をトリガするためには、そのリソースの使用が制限１よりも低い下限値以下に下がる必要がある。すると、再度通知をトリガするためには、そのリソースの使用が制限１よりも高い上限値を超える必要がある。同様に、制限２および最大制限に対しても、下限値および上限値が提供される。
【００２５】
リソースコンテキストは、関連コードの特定のセットに関連付けられている。この関連付けは、任意の適切な方法で行うことができる。例えば、アプリケーションコードセットを受信するアプリケーションフレームワークが、関連コードの特定のセットへのリソースコンテキストの割り当てを、事前に決定しても良い。この決定は、任意の適切なポリシー考慮事項に基づいて下すことが可能である。例えば、ある特定の保護ドメインに割り当てられたコードを、全て１つのリソースコンテキストに割り当てても良い。当業者には明らかなように、保護ドメイン（ＪＤＫ１．２のセキュリティ特徴に含まれる特徴を有するもの）は一般に、コードセットへの許可の付与を行う。つまり、特定のコードセットに保護ドメインを割り当てるメカニズムを、同コードセットへのリソースコンテキストの割り当てにも利用することが可能である。
【００２６】
保護ドメインは一般に、特定のスレッドによって実行されているメソッドのクラスが、どのクラスローダを使用してローディングされたかに基づいて、特定のスレッドに関連付けられている。クラスローダに基づいてスレッドに保護ドメインを割り当てるための、幾つかの実施形態に関しては、Ｊａｖａ２プラットフォームセキュリティアーキテクチャ（Java2 Platform Security Architecture）、ＡＰＩ設計（API Design）、リ・ゴング著のインプリメンテーション（Implementation by Li Gong）（アディソン・ウェスリィ出版、ISBN 201-31000-7）で説明がなされているため、本明細書中に引用としてそのまま組み入れることとする。
【００２７】
図１に示されるように、リソースコンテキスト１０２を代表して実行されている特定のスレッド１０６は、保護ドメイン１１６内でも実行されている。より厳密に言うと、スレッド１０６中のある特定のメソッド１１０が現在実行されており、該メソッドは、対応するスタックフレーム１０８に関連付けられている。スレッド１０６中の実行中のメソッド１１０は、クラス１１２の一部分としてクラスローダ１１４によってローディングされる。クラスローダ１１４は保護ドメイン１１６に関連付けられ、該保護ドメイン１１６はさらにリソースコンテキスト１０２に関連付けられている。一実施形態において、各スレッドは、クラスローダおよびその関連の保護ドメインを介して関連のリソースコンテキストに割り当てられてトレースされる。
【００２８】
異なる保護ドメインに属する複数のコードセットを、同じリソースコンテキストに割り当てることも当然可能である。例として、第１のアプレットがＰｅｐｓｉによって制御されているウェブサイトから発生して、第２のアプレットがＰｉｚｚａ Ｈｕｔによって制御されているウェブサイトから発生している場合を取り上げる。これら２つのアプレットは、異なるウェブサイトから発生して異なるクラスローダによってローディングされているため、異なる保護ドメインを有しているが、Ｐｉｚｚａ ＨｕｔおよびＰｅｐｓｉが共有されていることから、同じリソースコンテキストに対してリソースの使用を要求することが可能である。
【００２９】
リソースの使用を追跡するためのメカニズムのなかには、リソース自体に関連付けられても良いものがある。一実施形態では、割り当てられた各リソースオブジェクトを、対応するリソースコンテキストで呼び出すことが可能である。図中に示されるように、メモリブロック１２０は、同メモリブロックに対応する一つのコードセットに関連付けられた、対応するリソースコンテキスト１０２へのポインタを有する。このため、リソースの割り当ては対応するリソースコンテキストに対して要求され、リソースの割り当ての解除は、関連のポインタを介して対応するリソースコンテキストに帰される。例えば、リソースが割り当てられると、対応するりソースコンテキストの適切なリソースカウンタが増分する。
【００３０】
図２Ａおよび図２Ｂは、メモリを割り当てるためのプロセス２００を、本発明の一実施形態に従って示したフローチャートである。一般に絶対量（例えばバイト数）で割り当てられるあらゆるタイプのリソースに対し、同様な手続きを実装することが可能である。例えば、オープンファイル、オープンソケット、およびモニタなどの割り当てにおいてこの手続きを実装することが可能である。
【００３１】
先ず操作２０２において、アクティブ保護ドメインを決定する。アクティブ保護ドメインを決定するための技術に関しては、Ｊａｖａ２プラットフォームセキュリティアーキテクチャ（Java2 Platform Security Architecture）、ＡＰＩ設計（API Design）、リ・ゴング著のインプリメンテーション（Implementation by Li Gong）（アディソン・ウェスリィ出版、ISBN 201-31000-7）で詳しい説明がなされているため、本明細書中に引用としてそのまま組み入れることとする。次に操作２０４において、アクティブ保護ドメインに関連付けられたリソースコンテキストを識別する。リソースコンテキストの割り当てはポリシー決定であり、任意の適切な方法で実現することが可能であるが、図中に示された実施形態のリソースコンテキストの場合は、アクティブ保護ドメインに直接マッピングされている。
【００３２】
特定の保護ドメインに対するリソースコンテキストのマッピングは、アプリケーションフレームワークによって前もって設定されていても良い。あるいはアプリケーションフレームワークは、各コードソース（例えば各ＵＲＬサイト）に対して別途クラスローダを形成しても良い。そして、あるクラスローダによってローディングされるクラス全てを、そのコードソースに対応する特定の保護ドメインに割り当てる。すると、アプリケーションフレームワークがリソースコンテキストをインスタンス化し、インスタンス化された同リソースコンテキストが、上記特定のクラスローダの保護領域に関連付けられる。
【００３３】
次に操作２０６において、識別されたリソースコンテキストに対応してメモリカウンタを増分させる。そして続く操作２０６において、リソースの使用が閾値を超えたか否かを決定する。例えば、図１の制限１、制限２、または最大制限の閾値を超えたか否かを決定する。あるいは代わりに、上限値を超えたか否かを決定しても良い。
【００３４】
リソースの使用が閾値を超えていない場合は、操作２１０においてメモリが割り当てられ、割り当てられた同メモリに対してリソースコンテキストが記録される。例えば、そのリソースコンテキストへのポインタが、割り当てられたメモリ部位内に記録される。このため、同メモリ部位の割り当てが解除されると、適切なリソースコンテキストのリソースカウンタが減分される。リソースコンテキストが記録された後、メモリ割り当ての手続きが終了する。
【００３５】
リソースの使用が閾値を超えた場合は、操作２１２において、リソース再利用のプロセスがトリガされる。例えば、ヒープメモリに対してガーベッジコレクションの手続きを開始する。リソースの再利用の一実施形態に関しては、図３と関連させて後ほど説明することにする。リソースの再利用は、対応するリソースコンテキストの関連コードセットが使用しなくなった、あらゆるメモリの割り当てを解除するためにトリガされる。このメモリの割り当て解除がトリガされると、そのメモリの使用がこれ以上閾値を超えることはない。
【００３６】
リソースの再利用がトリガされると、操作２１４において、閾値を依然として超えているか否かを決定する。もう閾値を超えていない場合は、操作２１０においてメモリが割り当てられ、割り当てられた同メモリに対してリソースコンテキストが記録される。そして、メモリ割り当ての手続き２００が終了する。このように、このアプリケーションには、メモリの使用を削減する（カットバックする）機会が与えられる。
【００３７】
依然として閾値を超えている場合は、操作２１６において、登録済みのリソースコールバックが通知される。リソースコンテキストのコードセットが特定リソースの最大制限に近づいていることを警告するためには、その他警報タイプの任意のメカニズムを実装することが可能である。コールバックタイプのアラームとしては、アプリケーションに対してアプリケーションフレームワークからのコールバックの登録を許可するようなメカニズムが使用可能である。例えばアプレットは、メモリの使用が閾値を超えたら通知を受けるように登録を行う。そして実際に閾値を超えると、例えば、メモリの使用が最大メモリ使用量に近づいている、というような通知を受ける。
【００３８】
次に図２Ｂに移り、操作２１８において、最大閾値を超えているか否かを決定する。最大閾値を超えていない場合は、図２Ａの操作２１０においてメモリが割り当てられ、割り当てられた同メモリに対してリソースコンテキストが記録される。しかしながら、最大閾値を超えている場合は、操作２２０において、メモリカウンタが減分される（操作２０６において先に増分されているため）。すると操作２２２において、Out of Memory 例外がスローされて、エラーが生じたことを示し、メモリの割り当てが行われなくなる。そして、メモリ割り当ての手続き２００が終了する。
【００３９】
ある特定のセットの関連コードが最大メモリ使用量を超えた場合は、その関連コードを代表して実行されるスレッドを打ち切るメカニズムを実装しても良い。
【００４０】
図３は、図２におけるリソース再利用の操作を、本発明の一実施形態に従って示したフローチャートである。先ず操作３０２において、別のオブジェクトに呼び出されていないメモリオブジェクトに対してメモリ走査を実行する。例えばあるメモリは、現在はもう使用されていないローカル変数によって、かつて呼び出されたことがあるかもしれない。続く操作３０４では、呼び出されていない各オブジェクトに関し、そのオブジェクトのサイズを、そのメモリオブジェクトによって呼び出されるリソースコンテキストの、対応するリソースカウンタから差し引く（例えば、図２の操作２１０におけるメモリオブジェクトの割り当て中に、特定のリソースコンテキストが記録される）。そして操作３０６において、呼び出されていないメモリオブジェクトに対してメモリを再利用する。
【００４１】
続く操作３０８において、メモリの使用がリソースの使用の閾値以下に下がったか否かを決定する。メモリの使用が閾値以下に下がった原因は、例えば、メモリの最大使用限界に近づいているという警告に応えて、関連のアプレットがメモリの使用を減らしたためかもしれない。メモリの使用が閾値以下に下がっていない場合は、リソース再利用の手続き２１２が終了する。メモリの使用が閾値以下に下がった場合は、操作３１０において、登録済みのリサーチコールバックが通知を受ける。例えば、リソースコンテキストに関連付けられたアプレットに、メモリの最大割り当て量を超える危険がもうないことを通知する。すると、メモリ再利用の手続き２１２が終了し、制御が図２Ａおよび図２Ｂのメモリ割り当ての手続き２００に戻される。
【００４２】
図２から図３に関連させて説明したリソースの管理技術は、使用限界が絶対値であるリソースに対しては上手く機能するが、相対的な形でより容易に測定または追跡できるその他のリソースタイプに対しては、他のメカニズムを実装して管理を行っても良い。例えばアプレットによるＣＰＵの使用は、特定期間中に占める使用時間の割合として追跡することが可能である。アプレットによるＣＰＵの使用が一定の割合を超えたら、アプレットによるＣＰＵの使用を完全に停止しなくても、単に、ＣＰＵの使用におけるアプレットの優先度を下げれば良い。
【００４３】
図４は、リソースの使用を管理するためのメカニズム間の関係を、本発明の一実施形態に従って示した図である。図４の手続きを使用して、類似のリソースを管理することも当然可能である。先ず操作４０２において、リソースコンテキストに関連付けられた全スレッドに対してＣＰＵまたはネットワークの使用を監視する。次いで操作４０４において、第１の閾値を超えたか否かを決定する。第１の閾値を超えていない場合は、操作４０２において、ＣＰＵまたはネットワークの使用が続けて監視される。
【００４４】
第１の閾値を超えている場合は、操作４０６において、リソースコンテキストに関連付けられたスレッドの優先度を格下げするよう、スケジューラに命令する。次いで、優先度のバックアップをいつ格上げするかを決定するため、操作４０８において、同リソースコンテキストに関連付けられた全スレッドを再度モニタする。そして操作４１０において、リソースの使用が第２の閾値以下に下がったか否かを決定する。優先度の格下げおよび格上げの決定に、同一の閾値を使用することも当然可能である。
【００４５】
ＣＰＵまたはネットワークの使用が第２の閾値以下に下がっていない場合は、操作４１２において、第１の閾値を依然として超えているか否かを決定する。第１の閾値を依然として超えている場合は、操作４０６において、リソースコンテキストに関連付けられたスレッドの優先度を格下げするよう、スケジューラに再度命令する。つまり、特定のリソースコンテキストに関連付けられたスレッドは、ＣＰＵまたはネットワークの使用が第１の閾値を超えている限り、続けて優先度を格下される。第１の閾値を超えていない場合は、優先度を再度格下げする（操作４１４により）かまたは優先度のバックアップを格上げする（操作４０６により）かを決定するため、操作４０８において、リソースコンテキストに関連付けられた全スレッドに対し、そのＣＰＵまたはネットワークの使用を再度、監視する。
【００４６】
リソースの使用が第２の閾値以下に下がった場合は、操作４１４において、リソースコンテキストに関連付けられたスレッドの優先度を格上げするよう、スケジューラに命令する。次いで操作４１６において、優先度がもとの優先度以下に下がっているか否かを決定する。もとの優先度以下に下がっていない場合は、優先度を格下げする（つまりメモリの消費量が第１の閾値を超えている）か否かを決定するため、操作４０２において、リソースコンテキストに関連付けられた全スレッドに対してＣＰＵまたはネットワークの使用をモニタする。もとの優先度以下に下がっている場合は、優先度をいつ格上げする（つまりメモリの消費量が第２の閾値以下に下がっている）かを決定するため、操作４０８において、ＣＰＵまたはネットワークの使用を監視する。
【００４７】
次に、リソースの使用を追跡するためのこれらのメカニズムを利用して、特定のコードセットが、あるタイプのリソースを過度に使用しているか否かを決定することができる。例えば、特定のリソースコンテキストのリソースカウンタと、関連コードセットとを分析する（例えば、その特定のリソースに関する既定の制限と比較する）ことにより、そのリソースコンテキストが、特定のリソースタイプを過度に消費しているか否か（あるいは、過度に消費しようとしているか否か）を決定しても良い。ある特定のセットの関連コードが、特定のリソースタイプを過度に消費していると決定された場合は、さらなる消費を停止および／または阻止するための措置が採られる。
【００４８】
図５は、本発明を実現するのに適した、代表的な汎用コンピュータシステムを示した図である。コンピュータシステム１０３０は、一次ストレージデバイス１０３４（読み取り専用メモリ、すなわちＲＯＭが代表的）と、一次ストレージデバイス１０３６（ランダムアクセスメモリ、すなわちＲＡＭが代表的）と、を含んだメモリデバイスに結合された、任意の数のプロセッサ１０３２（中央演算処理装置、すなわちＣＰＵとも呼ばれる）を備える。このコンピュータシステムは、任意の適切な形態を採ることができる。例えばこのコンピュータシステムは、ナビゲーションシステムまたはテレビのセットトップボックスに組み込まれていても良い。
【００４９】
コンピュータシステム１０３０、あるいはより特定して複数のＣＰＵ１０３２は、当業者には明らかなように、仮想マシンをサポートするように構成されている。当業者には周知のように、ＲＯＭが、データおよび命令を一方向にＣＰＵ１０３２に伝送する一方で、ＲＡＭは、データおよび命令を双方向に伝送するように使用されるのが通常である。ＣＰＵ１０３２は一般に、任意数のプロセッサを有することができる。一次ストレージデバイス１０３４，１０３６は、ともに任意の適切なコンピュータ読み取り可能媒体を含むことができる。通常は大容量のメモリデバイスである二次ストレージメディア１０３８もまた、ＣＰＵ１０３２に双方向に結合して追加のデータ格納容量を提供している。大容量メモリデバイス１０３８は、コンピュータコードやデータ等を含んだプログラムを格納するのに使用される、コンピュータ読み取り可能媒体である。代表的な大容量メモリデバイス１０３８として、一次ストレージデバイス１０３４，１０３６より一般に低速な、ハードディスクやテープ等のストレージメディアが挙げられる。大容量メモリデバイス９３８は、磁気もしくは紙のテープ読み取り装置、またはその他周知な装置の形態を採ることができる。ここで、適切な場合には、大容量メモリデバイス１０３８内に保持される情報が、ＲＡＭ１０３６内にその一部を占める仮想メモリとして一般的な方式で組み込まれ得る点に、留意する必要がある。ＣＤ−ＲＯＭ等の特定の一次ストレージデバイス１０３４は、ＣＰＵ１０３２に一方向にデータを引き渡すこともできる。
【００５０】
ＣＰＵ１０３２はまた、１つまたはそれ以上の入出力デバイス１０４０に結合されることもできる。ここで、入出力デバイスとは、ビデオモニタ、トラックボール、マウス、キーボード、マイクロフォン、タッチディスプレイ、トランスデューサカード読み取り装置、磁気もしくは紙のテープ読み取り装置、タブレット、スタイラス、音声もしくは筆跡の認識装置、または他のコンピュータ等のその他周知な入力デバイスを含み、これらに限定されない。ＣＰＵ１０３２は、コンピュータに接続されても良いし、あるいは、例えばインターネットやイントラネット等の通信網に、１０１２として一般に示されるネットワーク接続を使用して結合されても良い。このようなネットワーク接続により、ＣＰＵ１０３２は、リソースの使用を管理するための上述したメカニズムを実施する際に、ネットワークから情報を受信したりネットワークに情報を出力したりできると考えられる。これらの情報は、ＣＰＵ１０３２で実行される命令のシーケンスとして表わされることが多く、例えば搬送波に組み込まれたコンピュータデータ信号の形で、ネットワークから受信されたりネットワークに出力されたりすることができる。上述したデバイスおよび材料は、コンピュータのハードウェア技術およびソフトウェア技術の当業者にとって周知のものである。
【００５１】
以上では、本発明の実施形態を数種類のみ取り上げたが、本発明は、その趣旨または範囲を逸脱しない範囲内ならば、その他多くの特定の形態によって実現することが可能である。例えば、リソースの管理をともなう操作はリオーダ（追加注文）が可能である。また、本発明の趣旨または範囲を逸脱しない範囲内ならば、ステップを省略または追加することも可能である。
【００５２】
本発明に従った、リソースの使用を管理するための技術は、Ｊａｖａ（登録商標）環境との関連のもとで実装するのに特に適しているものの、一般に、任意の適切なオブジェクトベース環境に適用することが可能である。これらの技術は特に、プラットフォーム独立のオブジェクトベース環境で使用するのに適している。また、これらのメソッドが、分散オブジェクト指向システムにおいても実現できる点を、理解しておく必要がある。
【００５３】
また、メモリの使用が閾値を超えた場合に登録済みのコールバックを開始させたが、これらのコールバックを全く排除することも可能である。関連コードセットが最大閾値を超えたら、単にさらなるメモリの消費を阻止または最小化すれば良い。反対に、関連コードセットによるＣＰＵまたはネットワークの使用が閾値を超えた場合には登録済みのコールバックを開始させずに、ＣＰＵまたはネットワークの使用が限界に達した場合にはコールバックを実装することも、当然可能である。また、ＣＰＵまたはネットワークの使用が閾値以下に下がった場合にコールバックを開始することも可能である。
【００５４】
リソースコンテキストがどのリソースの限界を超えた場合にもリソースの再利用を開始させたが、リソースの再利用を排除することも、またはある限界を超えた場合にのみリソースの再利用を開始させることも、当然可能である。また、リソースコンテキストがリソースの限界を超えたか否かとは関わりなく、平行処理により単に定期的にリソースの再利用をトリガしても良い。
【００５５】
したがって、以上で取り上げた実施形態は、例示を目的としたものであって、本発明の内容を限定するものではない。このため本発明は、本明細書で特定した詳細に限定されることなく、添付した特許請求の範囲の範囲および等価物の範囲内で、種々の変更を加えることが可能である。
【図面の簡単な説明】
【図１】リソースの使用を管理するためのメカニズム間の関係を、本発明の一実施形態に従って示した図である。
【図２Ａ】メモリを割り当てるためのプロセスを、本発明の実施形態に従って示したフローチャートである。
【図２Ｂ】メモリを割り当てるためのプロセスを、本発明の実施形態に従って示したフローチャートである。
【図３】図２におけるリソースの再利用の操作を、本発明の一実施形態に従って示したフローチャートである。
【図４】ＣＰＵまたはネットワークの使用を管理するためのプロセスを、本発明の一実施形態に従って示したフローチャートである。
【図５】本発明を実装するのに適した、代表的な汎用コンピュータシステムを示した図である。
【図１】
0004786785.tif 000002
【図２Ａ】
0004786785.tif 000003
【図２Ｂ】
0004786785.tif 000004
【図３】
0004786785.tif 000005
【図４】
0004786785.tif 000006
【図５】
0004786785.tif 000007