JP2015517159A - コンピュータ・システムのハードウエア資源の使用を制御する方法と、システムとピース・オブ・コード方法 - Google Patents

コンピュータ・システムのハードウエア資源の使用を制御する方法と、システムとピース・オブ・コード方法 Download PDF

Info

Publication number
JP2015517159A
JP2015517159A JP2015506270A JP2015506270A JP2015517159A JP 2015517159 A JP2015517159 A JP 2015517159A JP 2015506270 A JP2015506270 A JP 2015506270A JP 2015506270 A JP2015506270 A JP 2015506270A JP 2015517159 A JP2015517159 A JP 2015517159A
Authority
JP
Japan
Prior art keywords
execution
service
code
application
piece
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.)
Pending
Application number
JP2015506270A
Other languages
English (en)
Inventor
ゴンザレス,アレジャンドロ パジュエロ
ゴンザレス,アレジャンドロ パジュエロ
ムラ,アビエル ベルデュ
ムラ,アビエル ベルデュ
Original Assignee
ウニベルジテート ポリテクニカ デ カタル−ニア
ウニベルジテート ポリテクニカ デ カタル−ニア
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by ウニベルジテート ポリテクニカ デ カタル−ニア, ウニベルジテート ポリテクニカ デ カタル−ニア filed Critical ウニベルジテート ポリテクニカ デ カタル−ニア
Publication of JP2015517159A publication Critical patent/JP2015517159A/ja
Pending legal-status Critical Current

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • G06F9/5005Allocation of resources, e.g. of the central processing unit [CPU] to service a request
    • G06F9/5011Allocation 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
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/50Allocation of resources, e.g. of the central processing unit [CPU]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements 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/46Multiprogramming arrangements
    • G06F9/54Interprogram communication
    • G06F9/542Event management; Broadcasting; Multicasting; Notifications

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Multimedia (AREA)
  • Stored Programmes (AREA)

Abstract

【課題】オペレーティング・システム上で実行されているアプリケーションによるコンピュータ・システムのハードウエア資源の使用を制御する方法を提供すること。【解決手段】本発明の方法は、(A)前記アプリケーションに属するプロセスからAPIサービスへのコールをインターセプトするステップと、(B)前記ステップ(A)に基づいて、実行中のプロセスに属するソフトウエア・エンティティ上で動作するステップと、を有する。前記(A)ステップは、(A1)前記APIサービスをピース・オブ・コードに含まれる対応するサービスに再方向付けするステップを有する。【選択図】 図2

Description

本発明は、オペレーティング・システム(OS)上で実行されているアプリケーションによるコンピュータ・システムのハードウエア資源の使用を制御する方法に関する。この制御方法は、アプリケーションに属するプロセスに挿入される実行可能なピース・オブ・コードを用いて行われる。OSは、OS上で実行されるアプリケーション・プログラミング・インターフェース(API)を含む。更に本発明はこの方法を実行するに適したシステムと実行可能なピース・オブ・コードに関する。
何年も前から、ソフトウエアとハードウエアの両方のレベルで、コンピュータの発展は留まるところを知らない。ハードウエア・レベルに於いては、例えばプロセッサはますます高速になり新たな開発機能を組み込み、揮発性と非揮発性の両方のメモリもますます大容量を有するようになってきている。同様にソフトウエア・レベルに於いても、アプリケーション(例、OS、オフィスのアプリケーション、CAD、ゲーム)は、ますますパワフルになりより多くの機能を実現できるようになっている。これ等のことは数年前までは信じられないことであった。
このような状況の問題点は、ユーザのコンピュータ・システムのハードウエア資源の特性とソフトウエアからのハードウエアに対する要求との間でバランスが失われることにより、明らかになる。今日まで、プログラマーは、ソフトウエアがますます多くのハードウエア資源を必要とするようになっていることを知っているために、ソフトウエアが非常に速く発展するか否か、又は様々なソフトウエアからの増加する要求を満たすためにハードウエアの発展が必須のものとなるか否かについては、余り明白ではない。使用されるているソフトウエアが、ユーザのコンピュータ・システムのリソースの特性以上のハードウエアに対する要求を有している場合には、そのオペレーションでの問題点は明らかである。更にあるソフトウエアのハードウエアに対する要求は、このソフトウエアがコンピュータ・システム内で単独で実行されることを前提に決められている。しかし単独で実行されることは余り一般的ではない。その理由は、バックグランドでは、実行中のソフトウエア(例、アンティウイルス、ファイアウォール バックアップソフト等のソフトウエア)が存在する可能性があり、これはシステムのハードウエア資源を浪費することになる。
明らかに、ソフトウエア・プログラマーは、大部分のユーザのコンピュータ・システムは最新のハードウエア資源を有していないことを考慮に入れておらず、ユーザに対し新たなソフトウエアの購入を強いる或いは既存のソフトウエアの更新を強いて、自分の作成したソフトウエアを実行させ、適切なパフォーマンスを得ている。これ等のことは、ユーザにとってソフトウエアの購入のみならずそのシステムのハードウエア資源の更新の為に、高い経済的コストを発生することになる。
この種の問題は、サーバタイプのコンピュータ・システム(アプリケーション・サーバ、データ・サーバ等)でも存在する。サーバのソフトウエアによるハードウエアに対する要求(例、更新)の増加により、このサーバは、そのハードウエア資源の更新がなされていない場合には、サービスをその時点まで管理されていた全てのユーザに提供することができなくなる。同様にサーバがアプリケーション・サーバである場合は、同一数のユーザにサービスを提供する為には、管理するアプリケーションの数を減らさなければならない。サーバタイプのシステムの場合には、ハードウエア資源の更新のコストは、上記の単独の場合の更新よりもさらに高くなる。その理由は、サーバタイプのコンピュータ・システムのハードウエア資源は高価だからである。
他方で、あるハードウエア資源がコンピュータ・システムに具備された場合にも同じような状況が発生する。ハードウエア資源上で、理論的に実行可能な限りより多くの数のアプリケーション又は同一アプリケーション上で理論的に実行可能な限りより多くの数のインスタンスを実行しようとする試みがある。このような状況においては、ハードウエア資源は改善対象である。そのため、ハードウエア資源の消費を減らす為に、あるアプリケーションの実行中に又は同一アプリケーションとあるアプリケーション上の様々なインタンスの実行中に働く(機能する)ツールが必要がある。
上記の状況におけるOSは、アプリケーション或いはこのアプリケーション上でインタンスを走らせるハードウエア資源の使用を効率的に制御することが出来ず、その為、これを実行するようなある種のツールが必要である。
本発明の目的は、アプリケーションに属するプロセスに挿入される実行可能なピース・オブ・コードを用いて、実行中のアプリケーションによるハードウエア資源の使用を制御する方法を提供することである。これによりアプリケーションが実行されているコンピュータ・システムの効率を上げることである。
上記の目的は、アプリケーションに属するプロセスに挿入される実行可能なピース・オブ・コードを用いて、アプリケーションによるコンピュータ・システムのハードウエア資源の使用を制御する方法で解決できる。前記コンピュータ・システムは、オペレーティング・システム上で実行されるアプリケーション・プログラミング・インターフェース(API)を含み、本発明の方法は、
(A)前記アプリケーションに属するプロセスからAPIサービスへのコールをインターセプトするステップと、
前記(A)ステップは、(A1)前記APIサービスをピース・オブ・コードに含まれる対応するサービスに再方向付けするステップを有し、
(B)前記ステップ(A)に基づいて、実行中のプロセスに属するソフトウエア・エンティティ上で動作するステップと、
を有する。
そのためプロセスに挿入された実行可能なピース・オブ・コード(excutable piece of code which is injected into the process)を用いて、実行中のアプリケーションとOSとの間の通信(制御信号通信とデータ通信の両方)がインターセプトされ、その結果、ピース・オブ・コードは、そのOS上で動き、そしてプロセスに属するソフトウエア・エンティティを管理/制御し、ハードウエア資源の使用を減らす。
基本的に、アプリケーションに属するプロセスに挿入された実行可能なピース・オブ・コードは、コンピュータ・システムのハードウエア資源の使用を、そこで実行されているアプリケーションにより制御する点から、インテリジェンスを提供する。ピース・オブ・コードにより実行される制御によりハードウエア資源の使用量を減らし、最低のサービス品質を常い維持できる。
上記の結果、アプリケーションによるハードウエア資源の使用(量、回数)の減少は、このハードウエア資源が他のアプリケーション(同一のアプリケーションとあるアプリケーションの複数のインタンス)により使用可能な状況を生み出し、そのためより多くのアプリケーションがコンピュータ・システムにより同時に実行可能となり、効率が向上する。
同様に、アプリケーションによるハードウエア資源の使用の減少は、コンピュータ・システムにより提供されるよりも大きなハードウエアに対する要求を持ったアプリケーションが実行可能となる。
用語「サービス」「アプリケーション・プログラミング・インターフェース(API)」、「ソフトウエア・エンティティ」は、それぞれ、少なくとも1つのサービス、少なくとも1つのサービス、少なくとも1つのアプリケーション・プログラミング・インターフェース、少なくとも1つのソフトウエア・エンティティに関連する。例えば、同じアプリケーションとあるAPIの2つのサービスを、ピース・オブ・コードに含まれる2つのサービスに再方向付けすることも可能であり、あるいは第1のAPIサービスをピース・オブ・コードに含まれる第1サービスに、第2のAPIサービスをピース・オブ・コードに含まれる第2サービスに再方向付けすることもできる。同様に再方向付けされたサービスによっては、ピース・オブ・コードは、1つ或いは複数のソフトウエア・エンティティで例えばスレッド・オブ・エクセキューション(thread of execution)、メモリ(memory)、ミューテックス・ロック(mutex locks)上で動作することも可能である。
実行可能なピース・オブ・コードをプロセスに挿入する1つの方法は、“Windous NT System-Call Hookinng”, Mark Russinovich and Bryce Cogswell, Dr.Dobb's Journal,January 1997に記載されている。
ピース・オブ・コードを、スリープ状態に初期化されたプロセス内に挿入することができる。これにより、ピース・オブ・コードの正確な動作が確保できる。この場合、本発明の方法は、スリープ状態にあるプロセスの実行を再開するステップを含む。
用語「インターセプト」は、プロセスからAPIサービスへのコールが、ピース・オブ・コードに含まれるサービスに再方向付けすることに関連することを意味する。その結果、ピース・オブ・コードそのものが、プロセスに属するソフトウエア・エンティティ上で制御可能あるいは実行可能であり、かしてアプリケーションによるリソースの使用を制御できる。
更に本発明の方法は、APIサービスをピース・オブ・コードに含まれる対応するサービスに方向付けするステップを含む、その結果プロセスは、トランスペアレントな方法で、APIサービスにコールを行った時に、ピース・オブ・コードに含まれる対応するサービスにコールを行う。
本発明の一実施例によれば、前記APIサービスは、ファンクションであり、前記再方向付けするステップ(A1)は、
(A11)メモリ内に、再方向付けられるべきAPIファンクションを含むダイナミック・リンク・ライブラリを記憶するステップと、
(A12)前記記憶されたダイナミック・リンク・ライブラリに含まれるAPIファンクション用のファンクション・ポインタ・テーブル内で、再方向づけられるべきAPIファンクションが記憶されている初期メモリアドレスを、前記ピース・オブ・コードに含まれる対応するファンクションとが記憶されている初期メモリアドレスで、置換するステップとを有する。
各APIファンクションは、ピース・オブ・コードに含まれるファンクションに再方向付けられる。その結果、ピース・オブ・コードは、プロセスによりこれ等のファンクションになされたコールをインターセプトする。それによりその実行に関与するハードウエア資源の使用を、ソフトウエア・エンティティ上で動く手段例えばスレッド・オブ・エクセキューション、メモリ、ミューテックス・ロック(ロックとしての公知)により、制御できる。
前記再方向付けするステップ(A1)は、(A13)第1変数内に、再方向付けられるべきAPIファンクションが記憶されている初期メモリ・アドレスを記憶するステップを有する。そのため、アプリケーションを実行中のある時点で、実行可能なピース・オブ・コードそのものからAPIファンクション(オリジナルのファンクション)へのコールを行うこともできる。
本発明の一実施例によれば、前記APIサービスは、オブジェクト・メソッドであり、前記再方向付けするステップ(A1)は、
(A14)メモリ内に、再方向付けるべきオブジェクト・メソッドを含むダイナミック・リンク・ライブラリを記憶するステップと、
(A15)前記再方向付けるべきメソッドに関連するオブジェクトが初めて生成されたか否かを確認するステップと、
前記ステップ(A15)で生成されたと確認された場合には、
(A16)前記記憶されたダイナミック・リンク・ライブラリに含まれるオブジェクト・メソッド用のメソッド・ポインタ・テーブル内で、再方向づけられるべきオブジェクト・メソッドが記憶されている初期メモリアドレスを、前記ピース・オブ・コードに含まれる対応するメソッドが記憶されている初期メモリアドレスで、置換するステップと
を有する。
ファンクションの場合と同様に、オブジェクトに帰属するメソッドを、ピース・オブ・コードに含まれるメソッドに再方向付けすることが可能である。その結果、ピース・オブ・コードは、プロセスによりこれ等のメソッドになされたコールを、インターセプトすることができ、その実行に関与するハードウエア資源の使用を制御できる。
上記したように、APIサービスを再方向付けすることも可能であり、このサービスの1つはファンクションであり別の1つはメソッドである。その結果2つの実施例は、実行中の同じアプリケーションとあるアプリケーションに対し双補的になる。
前記再方向付けするステップ(A1)は、(A17)第1変数内に、再方向付けられるべきオブジェクト・メソッドが記憶されている初期メモリ・アドレスを記憶するステップを有する。その結果、必要とあれば、このメソッド(オリジナル・メソッド)は、ピース・オブ・コードからコールできる。
本発明の一実施例によれば、APIは、プロセスに属するソフトウエア・エンティティに関連するサービスであり、このサービスは新たなスレッド・オブ・エクセキューションを生成するようにもできる。このソフトウエア・エンティティは、スレッド・オブ・エクセキューションでもよい。前記インターセプトするステップ(A)は、
(A2)前記プロセスから前記ピース・オブ・コードに含まれる対応するサービスへのコールを受領するステップと、
(A3)前記ピース・オブ・コードに含まれる対応するサービスに基づいて、新たなスレッド・オブ・エクセキューションを生成するステップと、
(A4)前記生成されたスレッド・オブ・エクセキューションを、前記スレッド・オブ・エクセキューションの登録を保持するために創設された第2変数に、記憶するステップと、
を有する。
本発明の一実施例によれば、APIサービスは、プロセスに属するソフトウエア・エンティティに関連するサービスであり、このサービスは、新たなスレッド・オブ・エクセキューションの創設を行い、ソフトウエア・エンティティは、スレッド・オブ・エクセキューションであり、前記インターセプトするステップ(A)は、
(A5)新たなスレッド・オブ・エクセキューションを生成するために、前記プロセスから前記ピース・オブ・コードに含まれる対応するサービスへのコールを受領するステップと、
(A6)前記第1変数に記憶された初期メモリ・アドレスをベースに、前記APIファンクションへのコールを行うステップと、
(A7)前記APIサービスにより生成された新たなスレッド・オブ・エクセキューションの識別子を受領するステップと、
(A8)前記生成されたスレッド・オブ・エクセキューションを、前記スレッド・オブ・エクセキューションの登録を保持するために創設された第2変数に、記憶するステップと、
を有する。
スレッド・オブ・エクセキューション・タイプのソフトウエア・エンティティに関連する複数のサービスを再方向付けすることが可能な場合には、この両方の実施例は、別の実施例になるのではなく、相補い合うものとなる。
より具体的には、第1実施例においては、新たなスレッド・オブ・エクセキューションを生成するサービスはピース・オブ・コードそのものに含まれる。第2実施例においては、新たなスレッド・オブ・エクセキューションを生成するサービスはピース・オブ・コードに含まれない。その結果、APIのオリジナルなサービスに向けたコールを実行して、スレッド・オブ・エクセキューションの生成を成功させる必要がある。このため、APIサービス(即ちオリジナルなサービス)が記憶されたメモリ・アドレスを、上記した第1変数内記憶させておく必要がある。しかしこの実施例に関わらず、ピース・オブ・コードは、生成された新たなスレッド・オブ・エクセキューションの識別子を管理し、それを前記第1変数内に記憶させる。この第1変数が、生成されたスレッド・オブ・エクセキューションのレジスタを保持する。
ソフトウエア・エンティティは、スレッド・オブ・エクセキューションの場合は。前記ソフトウエア・エンティティ上で動作するステップ(B)は、
(B1)前記実行中のアプリケーションのイールドを決定するステップと、
(B2)前記イールドが閾値を超えるか否かを決定するステップと、
(B3)前記イールドが閾値を超えた場合には、前記スレッド・オブ・エクセキューションの登録を保持する為に創設された第2変数に記憶されている識別子に基づいて、前記スレッド・オブ・エクセキューションを、所定の時間中断するステップと、
を有する。
ピース・オブ・コードがスレッド・オブ・エクセキューションの識別を管理しているために、ピース・オブ・コード(より具体的にはピース・オブ・コードに含まれるアルゴリズム)がアプリケーションのイールド(yield)が閾値以上である場合(即ち、アプリケーションの実行がより多くのリソースを消費する場合即ち必要以上のリソースを消費する場合)、ピース・オブ・コードは、第2の変数内に記憶された識別子に基づいてその時までに生成されたスレッドの実行を中止する。このことは、ピース・オブ・コードは、アプリケーションにより消費されたハードウエア資源の使用を制御できることを意味する。
前記実行中のアプリケーションのイールドを決定するステップ(B1)は、
(B11)制御ポイントとして、実行中にプロセスが繰り返しコールを要求するAPIサービスを確立するステップと、
(B12)前記プロセスによるこのサービスへの第1コールと第2コールとの間の経過時間を決定するステップと、
(B13)決定された経過時間に基づいて、実行中のアプリケーションのイールドを獲得するステップと、
を有する。
制御ポイントとして使用されているサービスへの第1コールと第2コールの間の経過時間は、FPS(Frames per Second)基準に従って測定される。
他方、アルゴリズム(所望のイールドを維持するのに必要な時間と得られたイールドを保持するのに必要な実行時間との差分を測定するアルゴリズム)を用いて、スレッド・オブ・エクセキューション(実行の脈絡)を中止しなければならない時間を決定する。コールはピース・オブ・コードの外部アルゴリズムになされるものであるが、このアルゴリズムはピース・オブ・コードに含めることができる。。
前記ソフトウエア・エンティティがメモリであり、APIサービスが、メモリ領域を予約するためのサービスの場合は、前記インターセプトするステップ(A)は、(A9)メモリ領域を確保するために、前記プロセスから前記ピース・オブ・コードに含まれる対応するサービスへのコールを受領するステップを含む。
更にこの場合、前記実行中のプロセスに属するソフトウエア・エンティティ上で動作するステップ(B)は、(B1)共有したメモリ領域を予約するステップを含む。
それ故に、プロセスが、メモリ領域を予約するためにAPIサービスにコールを行うと、このコールはインターセプトされ(即ちコールはピース・オブ・コードに含まれる対応するサービスに再方向付けされ)、メモリ領域は同じアプリケーションとあるアプリケーションの様々なインタンスにより共有されるよう、割り当てられる。
以下の実施例は ソフトウエア・エンティティがメモリの場合、アプリケーションが実行中にハードウエア資源の使用をピース・オブ・コードが如何に制御するかを説明するものである。
例えば、実行するために1ギガバイトのメモリを必要とするアプリケーションに基づいている場合には、このアプリケーションの第2インタンスの実行は、更に1ギガバイトを必要とする。即ち2つのインタンスの実行は全部で2ギガバイトのメモリを消費することになる。本発明では、実行可能なピース・オブ・コードをアプリケーションの両方のインタンスに挿入する場合には、メモリ消費は2ギガバイト未満である。その理由は、実行中の別々のインタンスにより共有されたメモリ領域が割り当てられるからである。この時点で大部分の場合、アプリケーションの各インタンスにより必要とされるメモリ領域全体(この実施例では1ギガバイト)を共有することは不可能である。その理由は、情報は、別のインタンスが修正してはならないメモリ領域に存在するからである。そのためメモリ領域を割り当てる前に、各インタンスの情報特徴を含むため、修正してはならないメモリ領域が特定される。
他方で、プロセスからピース・オブ・コードに含まれる対応するサービスへのコールが、このピース・オブ・コードからメモリ領域を確保するための元のAPIファンクションへのコールに関連することもある。このコールは、上記の第1変数に記憶されたメモリ・アドレスに基づいて行われる。
他方で、ソフトウエア・エンティティはミューテックス・ロックの場合で、APIサービスがミューテックス・ロック上でインタービーンする場合は、前記インターセプトするステップ(A)は、(A10)ミューテックス・ロックに関与するために、前記プロセスから前記ピース・オブ・コードに含まれる対応するサービスへのコールを受領するステップを含む。
この場合、前記実行中のプロセスに属するソフトウエア・エンティティ上で動作するステップ(B)は、(B4)前記ミューテックス・ロックに割り当てられた名前を変更するステップを含む。
同一のコンピュータ・システムとあるコンピュータ・システム上では、アプリケーションの複数のインタンスを実行させないアプリケーション(例、ゲーム)もある。このため、それ等は、ロックあるいはミューテックス・ロック(mutex lock)を使用する。これ等のロックは、識別子を実行中のアプリケーションのインタンスに割り当てて、生成されるべき全ての新たなインタンスが同一の識別子を受領すると、複数のインタンスの実行が不可能となる。
この状況において、上記したようにプロセスが、アプリケーションに関連するミューテックス・ロックを生成しようとし、ピース・オブ・コードに含まれる対応するサービスにコールをする(このアクション用の元のAPIサービスのポインターが、ピース・オブ・コードに含まれるサービスの方向に以前に再方向付けされる)と、ピース・オブ・コードは、ミューテックス・ロックに割り当てられた識別子を修正し、その結果、アプリケーションの第2インタンスが生成されると、この識別子は他の識別子とは一致せず、その同時の実行が許可される。
本発明の他の態様によれば、上記したコンピュータ・システムのハードウエア資源の使用を制御する方法を実行するインストラクションを含む実行可能なピース・オブ・コードが提供される。この実行可能なピース・オブ・コードは、このアプリケーションがこのコンピュータ・システム上で実行されるAPIを含むオペレーティング・システム上で実行される場合には、このアプリケーションに帰属するプロセスに挿入されるのに適したものである。
この実行可能なピース・オブ・コードは、物理的な記憶媒体、例えば記憶メディア、コンピュータ・メモリ、ROM等に記憶することができ、搬送波、例えば電気信号、光学信号により搬送される。
更に本発明のアプリケーションを、オペレーティング・システム上で実行する方法において、
(X)アプリケーションに関連するプロセスの実行をスリープ状態に初期化するステップと、
(Y)コンピュータ・システムのハードウエア資源の使用を制御する方法を実行するインストラクションを含む実行可能なピース・オブ・コードを、前記スリープ状態にあるプロセス内に挿入するステップと、
(Z)前記プロセスに挿入される実行可能なピース・オブ・コードを用いて、コンピュータ・システムのアプリケーション・プログラミング・インターフェース(API)を含むアプリケーションによるコンピュータ・システムのハードウエア資源の使用を制御するステップと、を有する。
そのため、ユーザが、コンピュータ・システム上でアプリケーションを実行することを要求すると、上記した方法に従ってそれが実行され、ピース・オブ・コードがハードウエア資源の使用を制御する。
本発明の一実施例によれば、本発明尾アプリケーションに属するプロセスに挿入される実行可能なピース・オブ・コードを用いて、アプリケーションによるコンピュータ・システムのハードウエア資源の使用を制御するシステムにおいて、
前記コンピュータ・システムは、オペレーティング・システム上で実行されるアプリケーション・プログラミング・インターフェース(API)を含み、
(A)前記アプリケーションに属するプロセスからAPIサービスへのコールをインターセプトするステップと、
前記(A)ステップは、(A1)前記APIサービスをピース・オブ・コードに含まれる対応するサービスに再方向付けするステップを有し、
(B)前記ステップ(A)に基づいて、実行中のプロセスに属するソフトウエア・エンティティ上で動作するステップと、を実行するコンピュータ手段を有する。
本発明の一実施例によれば、メモリとプロセッサとを有し、前記メモリに記憶された前記プロセッサで実行可能なインストラクションを有し、アプリケーションが実行されるコンピュータ・システムにおいて、前記インストラクションは、
(X)アプリケーションに関連するプロセスの実行をスリープ状態に初期化するステップと、
(Y)コンピュータ・システムのハードウエア資源の使用を制御する方法を実行するインストラクションを含む実行可能なピース・オブ・コードを、前記スリープ状態にあるプロセス内に挿入するステップと、
(Z)前記プロセスに挿入される実行可能なピース・オブ・コードを用いて、アプリケーションによるコンピュータ・システムのハードウエア資源の使用を制御するステップと、
を実行する機能を有する。
本明細書と請求の範囲において用語「を含む」とは、例えばAを含むはA以外のものを含んでもよいことを意味する。
従来技術にかかるコンピュータ・システムでアプリケーションを実行する層を表す図。 コンピュータ・システム上でのアプリケーションの実行層と、アプリケーションに属するプロセス内に挿入された実行可能なピース・オブ・コードを表す層を組み込んだ本発明の層を表すブロック図。ピース・オブ・コードが、本発明によりアプリケーションによるコンピュータ・システムのハードウエア資源の使用を制御する。
コンピュータ・システムで実行されるAPIを含むオペレーティング・システム上で実行されるアプリケーションによるコンピュータ・システムのハードウエア資源の使用を制御する本発明の方法を、以下説明する。このピース・オブ・コードは、アプリケーションに関連するプロセス内に挿入され、そのプロセスはスリープ状態で初期化される。
図1は、従来技術にかかるコンピュータ・システム(例、パソコン、サーバ)でアプリケーション(例ゲーム)を実行する層を表す。
同図において、最低レベル層10はコンピュータ・システムのハードウエア資源、例えば、CPU、メモリ、GPU、キーボード、マウス等を表す。
最低レベル層10上の第2層11は、最低レベル層10との間の双方向通信(資源即ちリソースに関する情報を送受信できる制御信号14またはデータ15)に必要なドライバーを有する。
第2層11上の第3層12は、オペレーティング・システムを表し、API(API)と、オペレーティング・システムに含まれるものと、最低レベル層10のリソース(資源)のドライバーを搭載することにより得られたものが配置される。このAPIは、通常ダイナミック・リンク・ライブラリ(dynamic link libraries)で実現されるが、それは使用されるオペレーティング・システムに問わない。APIを含む第3層12と、オペレーティング・システムを表す第2層11との間の通信は、双方向通信であり、制御信号14とデータ15の両方を交換する。
図1には第4層即ち最高レベル層13がある。最高レベル層13は実行中のアプリケーションを表す。最高レベル層13が実行されていると、このアプリケーションはAPI(API)を表す第3層12にアクセスし、制御信号14とデータ信号15とを交換する。
この構成によれば、実行中のアプリケーションである最高レベル層13は、アプリケーションが実行されているコンピュータ・システムのディスプレイ・スクリーン上にウインドウを生成することを要求する。このアプリケーションは、ウインドウを生成するためにAPI層である第3層12のサービス(ファンクションまたはメソッドのいずれか)にアクセスしなければならない。スクリーン上にウインドウを生成するために、これ等のサービスは、OS層である第2層11と情報(制御信号、データ信号)を交換する必要があり、第2層は、スクリーンである最低レベル層10との通信を行うために必要なツール(ドライバー)を有し、かして所望のウインドウが生成できる。
この構成の欠点は、実行中のアプリケーションによる、コンピュータ・システムのハードウエア資源の使用を効率的に管理できるようなエレメント又はツールが存在しないことである。ここに説明した場合においては、アプリケーションは、その実行にのために必要とするリソースを用いる。
この理由により、本発明は、アプリケーションに関連するプロセス内に挿入された実行可能なピース・オブ・コードを利用する。このプロセスはスリープ状態で初期化され、その結果、実行中にアプリケーションにより使用されるハードウエア資源を制御できる。
図2は、図1のブロックに加えて、実行可能なピース・オブ・コードがアプリケーションに関連するプロセスに挿入された後では、実行可能なピース・オブ・コードを表す層16を、アプリケーションの最高レベル層13とAPIを表す第3層12との間の論理レベルで有する。その結果、ピース・オブ・コードは、アプリケーションからあるAPIサービス(例えばファンクションまたはメソッド)へのコールをインターセプトし、プロセスに帰属するソフトウエア・エンティティ上で動く、アプリケーションによるハードウエア資源の使用を制御する。
具体的には、ピース・オブ・コードにより実行される方法は以下のとおりである。初期状態において、ユーザがアプリケーションを実行すると、このアプリケーションに帰属するプロセスがスリープ状態で初期化される。このスリープ状態の間ピース・オブ・コードはプロセスに挿入される。
ピース・オブ・コードがプロセスに挿入されると、ピース・オブ・コードは、メモリ内に、これ等のサービス(ファンクションまたはメソッドのいずれか)を含むAPIに含まれる全てのダイナミック・リンク・ライブラリを記憶させる。このサービスは、実行中に将来アプリケーションにより要求されるようになるものである。その後、オペレーティング・システムが、初期のメモリ・アドレス(そこにサービスが記憶されている)に従ってメモリ内に記憶されている別のAIPサービス用のサービス・ポインター・テーブルを満たすと、このポインター・テーブル内で、実行中にアプリケーションにより将来必要とされる各サービスの初期メモリ・アドレスを置換する。この初期メモリ・アドレス内に、ピース・オブ・コードに含まれる対応するサービスが配置される。そのため再方向付けが実行されると、ピース・オブ・コードは、プロセスが実行中に関連するサービスに対し行ったコールを、インターセプトできる。即ちプロセスが様々なAPIの様々な関連するサービスに対し行ったコールはピース・オブ・コードが受領する。その理由は、このポインターは、APIサービスを指定せずに、ピース・オブ・コードに含まれる対応するサービスを指定するからである。
上記のインターセプトに基づいて、ピース・オブ・コードは、アプリケーションによるコンピュータ・システムのハードウエア資源の使用を制御する機能を獲得する。即ちピース・オブ・コードはプロセスにとって透明な方法で、アプリケーションのシステムのハードウエア資源の使用の制御を行う。
より具体的には、プロセスが、コンピュータ・システムのハードウエア資源に、あるAPIサービスへのコールの手段により、アクセスしようとすると、ピース・オブ・コードは、それ自身のサービスを実行(即ちこれ等のコールのインターセプトを実行)する。このインターセプトに基づいて、ピース・オブ・コードは、プロセスがコールを行う先のサービスの種類に基づいて、あるソフトウエアのエンティティ上で機能する。
それ故に、インターセプトされたAPIサービスがスレッド・オブ・エクセキューションの創設するサービスであるならば、即ちピース・オブ・コードが動作しなければならないソフトウエア・エンティティがスレッド・オブ・エクセキューションならば、前記インターセプトするステップ(A)は、
(A2)前記プロセスから前記ピース・オブ・コードに含まれる対応するサービスへのコールを受領するステップと、
(A3)前記ピース・オブ・コードに含まれる対応するサービスに基づいて、新たなスレッド・オブ・エクセキューションを生成するステップと、
(A4)前記生成されたスレッド・オブ・エクセキューションを、前記スレッド・オブ・エクセキューションの登録を保持するために創設された第2変数に、記憶するステップと、
を有する。
上記の場合即ちインターセプトされたAPIサービスがスレッド・オブ・エクセキューションの創設するサービスであるならば、前記インターセプトするステップ(A)は、
(A5)新たなスレッド・オブ・エクセキューションを生成するために、前記プロセスから前記ピース・オブ・コードに含まれる対応するサービスへのコールを受領するステップと、
(A6)前記第1変数に記憶された初期メモリ・アドレスをベースに、前記APIファンクションへのコールを行うステップと、
(A7)前記APIサービスにより生成された新たなスレッド・オブ・エクセキューションの識別子を受領するステップと、
(A8)前記生成されたスレッド・オブ・エクセキューションを、前記スレッド・オブ・エクセキューションの登録を保持するために創設された第2変数に、記憶するステップと、
を有する。
いずれの場合も、インターセプトされたAPIサービスがスレッド・オブ・エクセキューションの創設するサービスであるならば、前記実行中のプロセスに属するソフトウエア・エンティティ上で動作するステップ(B)は、
(B1)前記実行中のアプリケーションのイールドを決定するステップと、
(B2)前記イールドが閾値を超えるか否かを決定するステップと、
(B3)前記イールドが閾値を超えた場合には、前記スレッド・オブ・エクセキューションを、所定の時間中断するステップと、
を有する。
それ故に、スレッド・オブ・エクセキューションの識別子はピース・オブ・コードにより管理されているので(ピース・オブ・コードがそれが管理する変数内に識別子を記憶している)ので、ピース・オブ・コードがアプリケーションのイールドが閾値以上の場合(即ちアプリケーションの実行が多くの資源あるいは必要以上の資源を消費してしまっている場合)には、ピース・オブ・コードは、対応する変数内に記憶されている識別子に基づいて、その時点まで生成されたスレッドの実行を中断する。このことはピース・オブ・コードが、アプリケーションが消費するハードウエア資源の使用を制御できることを意味する。
前記実行中のアプリケーションのイールドを決定するステップ(B1)は、
(B11)制御ポイントとして、実行中にプロセスが繰り返しコールを要求するAPIサービスを確立するステップと、
(B12)前記プロセスによるこのサービスへの第1コールと第2コールとの間の経過時間を決定するステップと、
(B13)決定された経過時間に基づいて、実行中のアプリケーションのイールドを獲得するステップと、
を有する。
インターセプトされたAPIサービスがメモリ領域を確保するためのものである場合は、前記インターセプトするステップ(A)は、
(A9)メモリ領域を確保するために、前記プロセスから前記ピース・オブ・コードに含まれる対応するサービスへのコールを受領するステップ
を有する。
この場合、即ちインターセプトされたコールがメモリ領域を確保するためのものである場合は、前記実行中のプロセスに属するソフトウエア・エンティティ上で動作するステップ(B)は、(B1)共有したメモリ領域を予約するステップを有する。
それ故に、プロセスが、メモリ領域を予約するために、APIサービスにコールすると、このコールはインターセプトされ(即ちコールはピース・オブ・コード内に含まれる対応するサービスに再方向付けられ)、同じアプリケーションとあるアプリケーションの様々なインタンスにより共有されるメモリ領域が割り当てられる、即ちピース・オブ・コードに含まれる対応するサービスは、同じアプリケーションとあるアプリケーションの異なるインタンスにより共有されるよう、メモリ領域を割り当てる。
最後に、インターセプトされたコールがミューテックス・ロックに関連するAPIサービスである場合は、前記インターセプトするステップ(A)は、
(A10)ミューテックス・ロックに関連するために、プロセスからピース・オブ・コードに含まれる対応するサービスへのコールを受領するステップを含み、
前記実行中のプロセスに属するソフトウエア・エンティティ上で動作するステップ(B)は、(B4)前記ミューテックス・ロックに割り当てられた名前を変更するステップとを含む。
同一のコンピュータ・システムとあるコンピュータ・システム上では、アプリケーションの複数のインタンスを実行させないアプリケーション(例、ゲーム)もある。このため、それ等は、ロックあるいはミューテックス・ロック(mutex lock)を使用する。これ等のロックは、識別子を実行中のアプリケーションのインタンスに割り当てて、生成されるべき全ての新たなインタンスが同一の識別子を受領すると、複数のインタンスの実行が不可能となる。
この状況において、上記したようにプロセスが、アプリケーションに関連するミューテックス・ロックを生成しようとし、ピース・オブ・コードに含まれる対応するサービスにコールをする(このアクション用の元のAPIサービスのポインターが、ピース・オブ・コードに含まれるサービスの方向に以前に再方向付けされる)と、ピース・オブ・コードは、ミューテックス・ロックに割り当てられた識別子を修正し、その結果、アプリケーションの第2インタンスが生成されると、この識別子は他の識別子とは一致せず、その同時の実行が許可される。
以上の説明により、ピース・オブ・コードが、これ等のタイプのサービスに対応するソフトウエアのエンティティで動作する、様々なAPIサービスに対するインターセプトされたコールに基づいて、アプリケーションによるコンピュータ・システムのハードウエア資源の使用を制御できることが、明らかになった。
本発明の実施例を以下に説明する。この実施例においては、オペレーティング・システムはウインドウズ例えばウインドウズ7であり、コンピュータ・システムはアプリケーション・サーバ具体的にはゲーム・サーバであり、実行すべきアプリケーションはゲーム、同一ゲームと別のあるゲームの様々なインタンスである。さらにピース・オブ・コード上のソフトウエア・エンティティは、プロセスが実行中にその時間までに形成された様々なスレッド・オブ・エクセキューションに対応するアプリケーションによるハードウエア資源の使用を制御するよう、介入する。
より具体的には、本発明の実施例は次のように動作する。ゲーム・サーバの目的は、そのサービスのユーザが異なるゲーム、更には自分のモバイル端末(スマートフォン、タブレット)からの同一のコンピュータ・ゲームをプレイできるようにすることである。各ゲームの実行あるいは同一ゲームの各インタンスの実行は、ゲームサーバからユーザのモバイル装置へストリーミング技術により送られる。それ故に、ユーザのモバイル端末から、このユーザは遊びたいゲームを選択し、ユーザのモバイル端末のスクリーン上に示されているGUIの制御要素(例えばゲームのアイコン)上で動かすことにより、ゲームの実行を要求する。制御要素上のユーザによるこの活性化により、ゲーム・サーバに制御信号を送り、選択されたゲームをサーバ上で実行させる。
多数のユーザがゲームの実行を要求している(即ち多数のゲームが実行されている)とすると、本発明は、各ゲームの実行を制御しようとする。その結果、使用されるハードウエア資源は少なくなる。その結果、最大数のゲームが同時に実行可能であり、最大数のユーザにサービスを提供することができる。
そのため、ユーザーが自分の端末からゲームの実行を要求すると、実行中のアプリケーション(ゲーム)のメイン・プロセスはゲーム・サーバ内でスリープ状態で生成される。このためファンクションCreateProcess が用いられCREATE SUSPENDED値がクリエイション・モード・パラメータ(CreateFlags)に割り当てられる。プロセスがスリープ状態で初期化されると、本発明による実行可能なピース・オブ・コードはプロセス内に挿入される。その目的は、プロセスに属するソフトウエアのエンティティを最適にすることである。
プロセスの実行の再開の前に(プロセスはスリープ状態で初期化されている)、挿入されたピース・オブ・コードは、インターセプトすべきAPIファンクションを再方向付けする。本発明の実施例によれば、2つのカテゴリーのファンクションがインターセプトされる。
*ファンクションCreateThreadnoの手段により、スレッド・オブ・エクセキューションの創設を登録するためのファンクション、
*プロセスが実行中の間制御ポイントを確認するためのファンクション。
それ故に、これ等の制御ポイントを用いて、アプリケーションのイールドは、そのプロセスにとって透明な方法で、それに関連するファンクションの手段により測定される。アプリケーションは、プロセス全体の実行中に繰り返しコールされたものである。それ故に例えばグラフィックのアプリケーションにおいては、スクリーン毎の各フレーム(frame per screen)のファンクションは、制御ポイントとして、API IDXGISwapChain1のメソッドPresent1の手段により、確立される。その結果、アプリケーションのイールドは1秒当たりフレームの数(Frams shonw per second:FPS)を測定することにより得られる。この目的は、ピース・オブ・コードが、アプリケーションのイールドが閾値を超えた時を識別し、コンピュータ・システム(即ち、ゲーム・サーバ)のハードウエア資源の過剰な使用を阻止し、実行中の他のアプリケーション(即ち、あるゲームあるいは同一ゲームのインタンス)のイールドと自分のイールドをバランスさせる。アプリケーションのイールドが所定の閾値を超えると、このプロセスに関連するスレッド・オブ・エクセキューションが、必要な期間中断され、その結果、イールドは閾値を超えることはない。
ウインドウズのオペレーティング・システムにおいて、上記のAPIはダイナミック・リンク・ライブラリ(DLL)の形で通常実現される。このため、ピース・オブ・コードは、ファンクションLoodLibraryの手段により、再方向付けすべきファンクションを含むライブラリ(例えば、kernel32.dllのCreateThreadとAPI IDXGISwapChain1のPresent 1)をライブラリdxgi.dllを介して、再方向付けする。基本的に、LoodLibraryは、メモリ内にライブラリを記憶し、Inedx Address Table(IAT)(これはAPIファンクション用のポインター・テーブルであるが)を、APIファンクションのメモリ内の初期アドレスで充填する。この必要なポインターはファンクションRedirectIATの手段により修正される。これにより、プロセスに挿入されたピース・オブ・コードに属するファンクションに対応させる。同時に、テーブルの元のコンテンツ(即ちファンクションが記憶されている初期メモリ・ポジション用のポインター)は、ある時点で元のファンクションをコールする必要がある場合、変数内にセーブされる。
他方で、API IDXGISwapChain1が、COMタイプのインターフェイスであるので、インターセプトすべきメソッドを置換するために、インターフェイスのポインター・テーブル(例Present1)を修正する必要がある。COMタイプのインターフェイスのメソッド・ポインター・テーブルは、特殊なコードで修正される。例えばPresent1はIDXGISwapChainのインターフェイスのメソッド・テーブルのポジション4に対応し、それを修正し、その結果それは、挿入されたピース・オブ・コード内に含まれるファンクションを指す。同時に、このポジションのオリジナルのコンテンツは、元のメソッドをコールする必要がある場合には、変数の中にセーブされる。COMタイプのインターフェイスのポインター・テーブルの修正は、そのタイプのオブジェクトが創設されたときに初めて行わなければならない。サービスの再方向付けが終了した時点で、即ち全て必要なAPIsのファンクションまたはメソッドを再方向づけられた時点で、アプリケーションのプロセスの実行が再開される。
プロセスが新たなスレッド・オブ・エクセキューションを創設しようとする時には、ファンクションCreateThreadを実行して、創設されようとしている新たなスレッドの情報を記憶する。このため、ピース・オブ・コードは、その実行のために、元のファンクションCreateThreadに対しコールを行う。ピース・オブ・コードそのものは、新たな変数内に新たなスレッド・オブ・エクセキューションの識別子を記憶し、その時点まで創設されたピース・オブ・コードの全ての登録を維持する。この実施例に於いては、元のファンクションCreateThreadが用いられる。即ちコールがピース・オブ・コードからこの元のAPIファンクションに、対応する変数内に記憶されたメモリ・アドレスをベースに行われる(変数は、各再方向付けされたファンクションが記憶される初期メモリ・ポジションにポインターを記憶する)。しかしピース・オブ・コードがスレッド・オブ・エクセキューションの創設をするファンクションを含むような状況が生じると、外部ファンクションへのコール行う必要性はない。何れの場合も、ピース・オブ・コードは創設されたスレッド・オブ・エクセキューションの識別子を管理する。
他方で上記したように、このアプリケーションに関連するプロセスが制御ポイントとして使用されているファンクション(この実施例では、ファンクションPresent1)にコールをする毎に、実行中のアプリケーションのイールドを測定することも可能である。最後のコールからこのファンクションまでの経過時間を、イールドを生成する特殊なアルゴリズムを用いて測定する。例えば前記したFPSを用いて測定する。挿入されたピース・オブ・コードに含まれるイールドを測定するアルゴリズムが、イールドが所定のしきい値を超えたと判断すると、スレッド・オブ・エクセキューションを中断しなければならない時間が計算される。この時間は、実際のイールドを維持するの必要な時間と望ましいイールドを維持するの必要な時間との差分を計算するアルゴリズムで、計算される。次に、ピース・オブ・コードは、その時点(その識別子は上記変数内に記憶されている)までプロセスにより生成された全てのスレッド・オブ・エクセキューション(即ちピース・オブ・コードがスレッド・オブ・エクセキューション上で動作する)の実行を、上記した時間だけ、ファンクションSuspendThreadの手段とライブラリkernel32.dllの手段により、中断する。この計算された時間が経過すると、スレッド・オブ・エクセキューションは、ライブラリkernel32.dllのファンクションResumeThreadの手段により、再度活性化される。例えば、その時点以降、プロセスの通常の実行は、プロセスが制御ファンクション(この実施例では、ファンクションPresent1)に再度コールまで、継続する。
そのため、ピース・オブ・コードが、ソフトウエア・エンティティ上で、スレッド・オブ・エクセキューションを参照して動作すると、ピース・オブ・コードは、実行中のアプリケーション(具体的にはゲーム)によるゲームサーバで利用可能なハードウエア資源の利用を制御する。
本発明の他の実施例によれば、ピース・オブ・コードは、別のソフトウエア・エンティティ例えばメモリ上で動作してもよい。この場合、ピース・オブ・コードは、メモリ領域の予約を管理する全てのAPIサービス(例、ファンクション又はメソッド)をピース・オブ・コードそのものに含まれるサービスに再方向付けしなければならない。その結果、ピース・オブ・コードに含まれるこれらのサービスは、メモリ領域を同一ゲームとあるゲームの様々なインスタンスにより共有されるよう割り当てることができる。それ故、実行中の複数のインスタンスはあるメモリ領域を共有する。その結果、これらのインスタンスによるメモリの使用を大幅に減らすことができる。ある場合には、共有できない排他的メモリ領域(例えばインスタンスの実行を要求したユーザのデータを含むメモリ領域)が存在することもある。それ故に、メモリ領域の予約の前に、ピース・オブ・コードは、どのメモリ領域を共有すべきかすべきでないかを決定しなければならない。
スレッド・オブ・エクセキューションがソフトウエア・エンティティの場合には、アプリケーションにより要求されるメモリ領域は、ピース・オブ・コードからオリジナルのAPIファンクションへのコールの手段により割り当てられる。そして、このピース・オブ・コードが、常時割り当てられなければならないメモリを制御する。
他方で、ピース・オブ・コードは、他のあらゆるタイプのソフトウエア、例えば、ロック、ミューテックス・ロックも管理できる。そのため、同一のゲーム・サーバの同一のゲームとあるゲームの複数のインスタンスを実行できる。通常プログラマーは、ミューテックス・ロックを世界中のコンピュータ・ゲームに挿入して、ユーザが同一のゲーム・サーバの同一のゲームとあるゲームの複数のインスタンスを実行できないようにしている。この為にゲームの第1のインスタンスが生成されると、ミューテックス・ロックが、ゲームに関連する所定のラベル(このラベルは各ゲームににとって独自のものである)を生成し、ユーザが実行中のそのゲームの第2のインスタンスを実行しようとすると、ミューテックス・ロックは、ラベルをとおして、実行中のインスタンスがあると決定し、この第2のインスタンスの実行を許可しない。
このような欠点を解決するために、ゲームに属するプロセスに挿入されたピース・オブ・コードは、ミューテックス・ロックを管理しようとするAPIサービスを、ピース・オブ・コードに含まれる対応するサービスに再方向付けする。その為、ピース・オブ・コードは、これらのサービスをインターセプトし、ミューテックス・ロックによりそれに割り当てられた所定のラベルを変更する。その結果、ユーザが実行中のそのゲームの第2のインスタンスを実行しようとすると、サービスは、対応する所定のラベルの付いたいかなるインスタンスも検出せず、この実行を許可する。ピース・オブ・コードは、実行中のインスタンスに対応するプロセスに挿入されるので、それに割り当てられたラベルは、インスタンス毎に異なる異なることになる。
本発明の実施例を上記したが、当業者にはここに開示した詳細を置換するあるいは変形例、修正例を導入することは本発明を請求の範囲に加えた精神を逸脱することなく可能である。
本発明の実施例は、コンピュータ・システム或いはコンピュータ・システムで実行されるプロセスを含むが、本発明は実行可能なピース・オブ・コードあるいはコンピュータ・プログラムをカバーし、特に伝送媒体上のコンピュータ・プログラムは本発明を実施させるための手段となる。コンピュータ・プログラムはソース・コード、オブジェクト・コード、それ等の間の中間コードの何れの形態でもよく、更に部分的コンパイルの形態あるいは本発明に使用するに適した他の形態でもよい。伝送媒体はプログラムを搬送できるあらゆるエンティティ又は装置である。
例えば伝送媒体は、記憶媒体、ROM、CD ROM、半導体ROM、磁気記憶媒体、フロッピーディスク、ハードディスクを含む。 例えば記憶媒体は伝送可能な媒体を含み電気信号、光学信号を電気的手段あるいは光学的手段により伝送できる。
コンピュータ・プログラムは、ケーブル或いは他の装置手段により直接送信される信号に込まれる場合には伝送媒体はケーブル或いは他の装置手段で形成される。
別の構成として伝送媒体は、コンピュータ・プログラムが記憶された集積回路でもある。この集積回路は関連するプロセスを実行するのに用いられたものである。
以上の説明は、本発明の一実施例に関するもので、この技術分野の当業者であれば、本発明の種々の変形例を考え得るが、それらはいずれも本発明の技術的範囲に包含される。特許請求の範囲の構成要素の後に記載した括弧内の番号は、図面の部品番号に対応し、発明の容易なる理解の為に付したものであり、発明を限定的に解釈するために用いてはならない。また、同一番号でも明細書と特許請求の範囲の部品名は必ずしも同一ではない。これは上記した理由による。「少なくとも1つ或いは複数」、「と/又は」は、それらの内の1つに限定されない。例えば「A,B,Cの内の少なくとも1つ」は「A」、「B」、「C」単独のみならず「A,B或いはB,C更には又A,B,C」のように複数のものを含んでもよい。「A,B,Cの内の少なくとも1つ」は、A,B,C単独のみならずA,Bの組合せA,B,Cの組合せでもよい。「A,Bと/又はC」は、A,B,C単独のみならず、A,Bの2つ、或いはA,B,Cの全部を含んでもよい。本明細書において「Aを含む」「Aを有する」は、A以外のものを含んでもよい。特に記載のない限り、装置又は手段の数は、単数か複数かを問わない。
10:最低レベル層
11:第2層
12:第3層
13:最高レベル層
14:制御信号
15:データ
16:層

Claims (16)

  1. アプリケーションに属するプロセスに挿入される実行可能なピース・オブ・コードを用いて、アプリケーションによるコンピュータ・システムのハードウエア資源の使用を制御する方法において、
    前記コンピュータ・システムは、オペレーティング・システム上で実行されるアプリケーション・プログラミング・インターフェース(API)を含み、
    (A)前記アプリケーションに属するプロセスからAPIサービスへのコールをインターセプトするステップと、
    前記(A)ステップは、(A1)前記APIサービスをピース・オブ・コードに含まれる対応するサービスに再方向付けするステップを有し、
    (B)前記ステップ(A)に基づいて、実行中のプロセスに属するソフトウエア・エンティティ上で動作するステップと、
    を有し、
    前記APIサービスは、前記プロセスに属するソフトウエア・エンティティに関連するサービスであり、前記サービスは、新たなスレッド・オブ・エクセキューションの創設を行い、前記ソフトウエア・エンティティは、スレッド・オブ・エクセキューションであり、
    前記コールはインターセプトされ、
    前記ステップ(B)は、
    (B1)前記実行中のアプリケーションのイールドを決定するステップと、
    (B2)前記イールドが閾値を超えるか否かを決定するステップと、
    (B3)前記イールドが閾値を超えた場合には、前記スレッド・オブ・エクセキューションを、所定の時間中断するステップと、
    を有し、
    前記ステップ(B3)は、前記スレッド・オブ・エクセキューションの登録を保持する為に創設された第2変数に記憶されている識別子に基づいて、行われる
    ことを特徴とするコンピュータ・システムのハードウエア資源の使用を制御する方法。
  2. 前記APIサービスは、ファンクションであり、
    前記ステップ(A1)は、
    (A11)メモリ内に、再方向付けられるべきAPIファンクションを含むダイナミック・リンク・ライブラリを記憶するステップと、
    (A12)前記記憶されたダイナミック・リンク・ライブラリに含まれるAPIファンクション用のファンクション・ポインタ・テーブル内で、再方向づけられるべきAPIファンクションが記憶されている初期メモリアドレスを、前記ピース・オブ・コードに含まれる対応するファンクションとが記憶されている初期メモリアドレスで、置換するステップと
    を有することを特徴とする請求項1記載の方法。
  3. 前記ステップ(A1)は、
    (A13)第1変数内に、再方向付けられるべきAPIファンクションが記憶されている初期メモリ・アドレスを記憶するステップ、
    を有する
    ことを特徴とする請求項2記載の方法。
  4. 前記APIサービスは、オブジェクト・メソッドであり、
    前記ステップ(A1)は、
    (A14)メモリ内に、再方向付けるべきオブジェクト・メソッドを含むダイナミック・リンク・ライブラリを記憶するステップと、
    (A15)前記再方向付けるべきメソッドに関連するオブジェクトが初めて生成されたか否かを確認するステップと、
    前記ステップ(A15)で生成されたと確認された場合には、
    (A16)前記記憶されたダイナミック・リンク・ライブラリに含まれるオブジェクト・メソッド用のメソッド・ポインタ・テーブル内で、再方向づけられるべきオブジェクト・メソッドが記憶されている初期メモリアドレスを、前記ピース・オブ・コードに含まれる対応するメソッドが記憶されている初期メモリアドレスで、置換するステップと
    を有することを特徴とする請求項1記載の方法。
  5. 前記ステップ(A1)は、
    (A17)第1変数内に、再方向付けられるべきオブジェクト・メソッドが記憶されている初期メモリ・アドレスを記憶するステップ、
    を有する
    ことを特徴とする請求項1記載の方法。
  6. 前記ステップ(A)は、
    (A2)前記プロセスから前記ピース・オブ・コードに含まれる対応するサービスへのコールを受領するステップと、
    (A3)前記ピース・オブ・コードに含まれる対応するサービスに基づいて、新たなスレッド・オブ・エクセキューションを生成するステップと、
    (A4)前記生成されたスレッド・オブ・エクセキューションを、前記スレッド・オブ・エクセキューションの登録を保持するために創設された第2変数に、記憶するステップと、
    を有する
    ことを特徴とする請求項1記載の方法。
  7. 前記ステップ(A)は、
    (A5)新たなスレッド・オブ・エクセキューションを生成するために、前記プロセスから前記ピース・オブ・コードに含まれる対応するサービスへのコールを受領するステップと、
    (A6)前記第1変数に記憶された初期メモリ・アドレスをベースに、前記APIファンクションへのコールを行うステップと、
    (A7)前記APIサービスにより生成された新たなスレッド・オブ・エクセキューションの識別子を受領するステップと、
    (A8)前記生成されたスレッド・オブ・エクセキューションを、前記スレッド・オブ・エクセキューションの登録を保持するために創設された第2変数に、記憶するステップと、
    を有することを特徴とする請求項1記載の方法。
  8. 前記ステップ(B1)は、
    (B11)制御ポイントとして、実行中にプロセスが繰り返しコールを要求するAPIサービスを確立するステップと、
    (B12)前記プロセスによるこのサービスへの第1コールと第2コールとの間の経過時間を決定するステップと、
    (B13)決定された経過時間に基づいて、実行中のアプリケーションのイールドを獲得するステップと、
    を有することを特徴とする請求項1記載の方法。
  9. 前記APIサービスは、前記プロセスに対応するソフトウエア・エンティティに関連するサービスであり、前記サービスはメモリ領域を確保するためのものであり、前記ソフトウエア・エンティティはメモリであり、
    前記ステップ(A)は、
    (A9)メモリ領域を確保するために、前記プロセスから前記ピース・オブ・コードに含まれる対応するサービスへのコールを受領するステップ
    を含むことを特徴とする請求項1記載の方法。
  10. 前記ステップ(B)は、
    (B1)共有したメモリ領域を予約するステップ
    を含むことを特徴とする請求項1記載の方法。
  11. 前記APIサービスは、前記プロセスに対応するソフトウエア・エンティティに関連するサービスであり、前記サービスはミューテックス・ロックに関与するものであり、前記ソフトウエア・エンティティはミューテックス・ロックであり、
    前記(A)ステップは、
    (A10)ミューテックス・ロックに関与するために、前記プロセスから前記ピース・オブ・コードに含まれる対応するサービスへのコールを受領するステップ
    を含むことを特徴とする請求項1記載の方法。
  12. 前記ステップ(B)は、
    (B4)前記ミューテックス・ロックに割り当てられた名前を変更するステップ
    を含むことを特徴とする請求項1記載の方法。
  13. 前記プロセスは、スリープ状態で初期化されたアプリケーションに属し、
    (C)前記スリープ状態にあるプロセスの実行を再開するステップ
    を更に有する
    ことを特徴とする請求項1記載の方法。
  14. アプリケーションを、コンピュータ・システムのアプリケーション・プログラミング・インターフェース(API)を含むオペレーティング・システム上で実行する方法において、
    (X)アプリケーションに関連するプロセスの実行をスリープ状態に初期化するステップと、
    (Y)コンピュータ・システムのハードウエア資源の使用を制御する方法を実行するインストラクションを含む実行可能なピース・オブ・コードを、前記スリープ状態にあるプロセス内に挿入するステップと、
    (Z)前記プロセスに挿入される実行可能なピース・オブ・コードを用いて、アプリケーションによるコンピュータ・システムのハードウエア資源の使用を制御するステップと、
    を有し、
    前記ステップ(Z)は、
    (A)前記アプリケーションに属するプロセスからAPIサービスへのコールをインターセプトするステップと、
    前記(A)ステップは、(A1)前記APIサービスをピース・オブ・コードに含まれる対応するサービスに再方向付けするステップを有し、
    (B)前記ステップ(A)に基づいて、実行中のプロセスに属するソフトウエア・エンティティ上で動作するステップと、
    を有し、
    前記APIサービスは、前記プロセスに属するソフトウエア・エンティティに関連するサービスであり、前記サービスは、新たなスレッド・オブ・エクセキューションの創設を行い、前記ソフトウエア・エンティティは、スレッド・オブ・エクセキューションであり、
    前記コールはインターセプトされ、
    前記ステップ(B)は、
    (B1)前記実行中のアプリケーションのイールドを決定するステップと、
    (B2)前記イールドが閾値を超えるか否かを決定するステップと、
    (B3)前記イールドが閾値を超えた場合には、前記スレッド・オブ・エクセキューションを、所定の時間中断するステップと、
    を有し、
    前記ステップ(B3)は、前記スレッド・オブ・エクセキューションの登録を保持する為に創設された第2変数に記憶されている識別子に基づいて、行われる
    ことを特徴とするアプリケーションを、コンピュータ・システムのアプリケーション・プログラミング・インターフェース(API)を含むオペレーティング・システム上で実行する方法。
  15. アプリケーションに属するプロセスに挿入される実行可能なピース・オブ・コードを用いて、アプリケーションによるコンピュータ・システムのハードウエア資源の使用を制御するシステムにおいて、
    前記コンピュータ・システムは、オペレーティング・システム上で実行されるアプリケーション・プログラミング・インターフェース(API)を含み、
    (A)前記アプリケーションに属するプロセスからAPIサービスへのコールをインターセプトするステップと、
    前記(A)ステップは、(A1)前記APIサービスをピース・オブ・コードに含まれる対応するサービスに再方向付けするステップを有し、
    (B)前記ステップ(A)に基づいて、実行中のプロセスに属するソフトウエア・エンティティ上で動作するステップと、
    を実行するコンピュータ手段を有し、
    前記APIサービスは、前記プロセスに属するソフトウエア・エンティティに関連するサービスであり、前記サービスは、新たなスレッド・オブ・エクセキューションの創設を行い、前記ソフトウエア・エンティティは、スレッド・オブ・エクセキューションであり、
    前記コールはインターセプトされ、
    前記ステップ(B)は、
    (B1)前記実行中のアプリケーションのイールドを決定するステップと、
    (B2)前記イールドが閾値を超えるか否かを決定するステップと、
    (B3)前記イールドが閾値を超えた場合には、前記スレッド・オブ・エクセキューションを、所定の時間中断するステップと、
    を有し、
    前記ステップ(B3)は、前記スレッド・オブ・エクセキューションの登録を保持する為に創設された第2変数に記憶されている識別子に基づいて、行われる
    ことを特徴とするアプリケーションによるコンピュータ・システムのハードウエア資源の使用を制御するシステム。
  16. メモリとプロセッサとを有し、前記メモリに記憶された前記プロセッサで実行可能なインストラクションを有し、アプリケーションが実行されるコンピュータ・システムにおいて、
    前記インストラクションは、
    (X)アプリケーションに関連するプロセスの実行をスリープ状態に初期化するステップと、
    (Y)コンピュータ・システムのハードウエア資源の使用を制御する方法を実行するインストラクションを含む実行可能なピース・オブ・コードを、前記スリープ状態にあるプロセス内に挿入するステップと、
    (Z)前記プロセスに挿入される実行可能なピース・オブ・コードを用いて、アプリケーションによるコンピュータ・システムのハードウエア資源の使用を制御するステップと、
    を実行する機能を有し、
    前記ステップ(Z)は、
    (A)前記アプリケーションに属するプロセスからAPIサービスへのコールをインターセプトするステップと、
    前記(A)ステップは、(A1)前記APIサービスをピース・オブ・コードに含まれる対応するサービスに再方向付けするステップを有し、
    (B)前記ステップ(A)に基づいて、実行中のプロセスに属するソフトウエア・エンティティ上で動作するステップと、
    を有し、
    前記APIサービスは、前記プロセスに属するソフトウエア・エンティティに関連するサービスであり、前記サービスは、新たなスレッド・オブ・エクセキューションの創設を行い、前記ソフトウエア・エンティティは、スレッド・オブ・エクセキューションであり、
    前記コールはインターセプトされ、
    前記ステップ(B)は、
    (B1)前記実行中のアプリケーションのイールドを決定するステップと、
    (B2)前記イールドが閾値を超えるか否かを決定するステップと、
    (B3)前記イールドが閾値を超えた場合には、前記スレッド・オブ・エクセキューションを、所定の時間中断するステップと、
    を有し、
    前記ステップ(B3)は、前記スレッド・オブ・エクセキューションの登録を保持する為に創設された第2変数に記憶されている識別子に基づいて、行われる
    ことを特徴とするアプリケーションが実行されるコンピュータ・システム。
JP2015506270A 2012-04-19 2013-04-18 コンピュータ・システムのハードウエア資源の使用を制御する方法と、システムとピース・オブ・コード方法 Pending JP2015517159A (ja)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
ESP201230580 2012-04-19
ES201230580A ES2439803B1 (es) 2012-04-19 2012-04-19 Procedimiento, sistema y pieza de código ejecutable para controlar el uso de recursos de hardware de un sistema informático
PCT/ES2013/070248 WO2013156655A1 (es) 2012-04-19 2013-04-18 Procedimiento, sistema y pieza de código ejecutable para controlar el uso de recursos de hardware de un sistema informático

Publications (1)

Publication Number Publication Date
JP2015517159A true JP2015517159A (ja) 2015-06-18

Family

ID=49382970

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2015506270A Pending JP2015517159A (ja) 2012-04-19 2013-04-18 コンピュータ・システムのハードウエア資源の使用を制御する方法と、システムとピース・オブ・コード方法

Country Status (9)

Country Link
US (1) US9195505B2 (ja)
EP (1) EP2840496B1 (ja)
JP (1) JP2015517159A (ja)
KR (1) KR102057360B1 (ja)
CN (1) CN104364759B (ja)
DK (1) DK2840496T3 (ja)
ES (2) ES2439803B1 (ja)
HU (1) HUE041417T2 (ja)
WO (1) WO2013156655A1 (ja)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
ES2439803B1 (es) 2012-04-19 2014-10-29 Universitat Politècnica De Catalunya Procedimiento, sistema y pieza de código ejecutable para controlar el uso de recursos de hardware de un sistema informático
ES2439804B1 (es) 2012-04-19 2014-10-29 Universitat Politècnica De Catalunya Procedimiento, sistema y pieza de código ejecutable para virtualizar un recurso de hardware asociado a un sistema informático
US20140113705A1 (en) 2012-10-19 2014-04-24 Nvidia Corporation Quick-resume gaming
RU2634173C1 (ru) * 2016-06-24 2017-10-24 Акционерное общество "Лаборатория Касперского" Система и способ обнаружения приложения удалённого администрирования
CN109597689B (zh) * 2018-12-10 2022-06-10 浪潮(北京)电子信息产业有限公司 一种分布式文件系统内存优化方法、装置、设备及介质
CN111381879B (zh) * 2018-12-31 2022-09-02 华为技术有限公司 一种数据处理方法及装置
US11250124B2 (en) * 2019-09-19 2022-02-15 Facebook Technologies, Llc Artificial reality system having hardware mutex with process authentication

Family Cites Families (16)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0546568A (ja) * 1991-08-08 1993-02-26 Internatl Business Mach Corp <Ibm> 分散アプリケーシヨン実行装置および方法
US5974549A (en) * 1997-03-27 1999-10-26 Soliton Ltd. Security monitor
IL132916A (en) * 1999-11-14 2004-02-08 Mcafee Inc Method and system for intercepting an application program interface
GB0011020D0 (en) * 2000-05-09 2000-06-28 Ibm Intercepting system API calls
US7047337B2 (en) * 2003-04-24 2006-05-16 International Business Machines Corporation Concurrent access of shared resources utilizing tracking of request reception and completion order
US7380039B2 (en) * 2003-12-30 2008-05-27 3Tera, Inc. Apparatus, method and system for aggregrating computing resources
US7653900B2 (en) * 2004-04-22 2010-01-26 Blue Coat Systems, Inc. System and method for remote application process control
USH2202H1 (en) * 2004-04-28 2007-09-04 Symantec Corporation Method and apparatus to dynamically hook runtime processes without interrupting the flow of execution
US7725737B2 (en) * 2005-10-14 2010-05-25 Check Point Software Technologies, Inc. System and methodology providing secure workspace environment
US7788665B2 (en) * 2006-02-28 2010-08-31 Microsoft Corporation Migrating a virtual machine that owns a resource such as a hardware device
US8042122B2 (en) * 2007-06-27 2011-10-18 Microsoft Corporation Hybrid resource manager
US8255931B2 (en) * 2008-02-11 2012-08-28 Blue Coat Systems, Inc. Method for implementing ejection-safe API interception
US8650570B2 (en) * 2008-06-02 2014-02-11 Microsoft Corporation Method of assigning instructions in a process to a plurality of scheduler instances based on the instruction, in which each scheduler instance is allocated a set of negoitaited processor resources
US8683576B1 (en) * 2009-09-30 2014-03-25 Symantec Corporation Systems and methods for detecting a process to establish a backdoor connection with a computing device
ES2439804B1 (es) 2012-04-19 2014-10-29 Universitat Politècnica De Catalunya Procedimiento, sistema y pieza de código ejecutable para virtualizar un recurso de hardware asociado a un sistema informático
ES2439803B1 (es) 2012-04-19 2014-10-29 Universitat Politècnica De Catalunya Procedimiento, sistema y pieza de código ejecutable para controlar el uso de recursos de hardware de un sistema informático

Also Published As

Publication number Publication date
EP2840496A4 (en) 2015-12-16
EP2840496B1 (en) 2018-08-01
HUE041417T2 (hu) 2019-05-28
ES2439803B1 (es) 2014-10-29
ES2697681T3 (es) 2019-01-25
KR20150004854A (ko) 2015-01-13
CN104364759B (zh) 2017-10-27
CN104364759A (zh) 2015-02-18
KR102057360B1 (ko) 2020-01-22
US20150121402A1 (en) 2015-04-30
DK2840496T3 (en) 2018-11-26
ES2439803A1 (es) 2014-01-24
US9195505B2 (en) 2015-11-24
WO2013156655A1 (es) 2013-10-24
EP2840496A1 (en) 2015-02-25

Similar Documents

Publication Publication Date Title
JP2015517159A (ja) コンピュータ・システムのハードウエア資源の使用を制御する方法と、システムとピース・オブ・コード方法
US10057364B2 (en) Method and apparatus for remotely running application program
US8812400B2 (en) Managing a memory segment using a memory virtual appliance
US10650484B2 (en) Dynamic and application-specific virtualized graphics processing
US9176757B2 (en) Method, system and an executable piece of code for the virtualization of a hardware resource associated with a computer system
US7840967B1 (en) Sharing data among isolated applications
US20200210241A1 (en) Method and system for gpu virtualization based on container
US20130159376A1 (en) Systems and methods for a computing resource broker agent
JP2007523411A (ja) コンピュータ・デバイス用セキュリティ・モデルのための方法及びシステム
US20210326161A1 (en) Apparatus and method for multi-cloud service platform
JP2007122664A (ja) 情報処理方法および情報処理装置
US10740496B2 (en) Method and apparatus for operating multi-processor system in electronic device
US20210334126A1 (en) On-demand code execution with limited memory footprint
US20190310882A1 (en) Multiple application instances in operating systems that utilize a single process for application execution
KR20120071060A (ko) 동적으로 확장 가능한 기능을 제공하는 스토리지 장치 및 그것의 동작 방법
US9535713B2 (en) Manipulating rules for adding new devices
WO2017012339A1 (zh) 资源管理方法及装置
US8484642B2 (en) Processor core selection based at least in part upon at least one inter-dependency
US10698703B2 (en) Mobile application management by run-time insertion of a substitute application class loader into a mobile application process
US9628401B2 (en) Software product instance placement
CN108885565B (zh) 对游戏模式的操作系统支持
US11074200B2 (en) Use-after-free exploit prevention architecture
US20240004697A1 (en) Lcs life-cycle management system
WO2024174761A1 (zh) 内存分配的方法、电子设备及存储介质
WO2024152602A1 (zh) 应用程序的权限管理方法