JP2015517158A - コンピュータ・システムのハードウエア資源を仮想化する方法とシステムと実行可能なピース・オブ・コード - Google Patents
コンピュータ・システムのハードウエア資源を仮想化する方法とシステムと実行可能なピース・オブ・コード Download PDFInfo
- Publication number
- JP2015517158A JP2015517158A JP2015506269A JP2015506269A JP2015517158A JP 2015517158 A JP2015517158 A JP 2015517158A JP 2015506269 A JP2015506269 A JP 2015506269A JP 2015506269 A JP2015506269 A JP 2015506269A JP 2015517158 A JP2015517158 A JP 2015517158A
- Authority
- JP
- Japan
- Prior art keywords
- code
- piece
- data
- api
- function
- 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
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/455—Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5077—Logical partitioning of resources; Management or configuration of virtualized resources
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/54—Interprogram communication
- G06F9/545—Interprogram communication where tasks reside in different layers, e.g. user- and kernel-space
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2209/00—Indexing scheme relating to G06F9/00
- G06F2209/54—Indexing scheme relating to G06F9/54
- G06F2209/542—Intercept
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Stored Programmes (AREA)
- Devices For Executing Special Programs (AREA)
- Debugging And Monitoring (AREA)
Abstract
【課題】OS上で実行されるアプリケーションに属するプロセスに挿入される実行可能なピース・オブ・コードを用いて、コンピュータ・システムのハードウエア資源を仮想化する方法を提供すること。【解決手段】前記OSは、前記OS上で実行されるアプリケーション・プログラミング・インターフェース(API)を含み、本発明の方法は、(A)アプリケーションに属するプロセスから、前記プロセスとハードウエア資源との間に生成されるデータフローの管理に関連するAPIサービスへのコールをインターセプトするステップと、前記ステップ(A)は、(A1)前記データフローの管理に関連するAPIサービスを前記ピース・オブ・コードに含まれる対応するサービスに向けるステップを含み、(B)前記データフローを、前記ステップ(A)に基づいて、ピース・オブ・コードで管理するステップとを有する。【選択図】 図2
Description
本発明は、コンピュータ・システムのハードウエア資源を仮想化する方法に関し、特にオペレーティング・システム(OS)上で実行されるアプリケーション・プログラミング・インターフェース(API)を含むアプリケーションに属するプロセスに挿入される実行可能なピース・オブ・コードを用いて、コンピュータ・システムのハードウエア資源を仮想化する方法に関する。本発明は、更に上記方法を実行するに適したシステムと実行可能なピース・オブ・コードに関する。
何年も前から、クラウド・コンピューティング・モデルが構築され、「仮想化」の概念はコンピュータの世界では顕著なものとなっている。仮想化とは、技術的資源(ハードウエア,プラットホーム、OS、データ記憶装置、他のネットワーク資源)の仮想化版のソフトウエアの手段による創設として定義されている。その結果、これらの資源は複数の実行環境に分割することができる。このソフトウエアが、仮想化ハードウエア技術(例えば、Intel-VT AMD-V)により補助されるような場合も可能である。(Wikipedia in Spanish - http://es.wikipedia.org/wiki/Virtualizacio'n)
最も頻繁に仮想化される技術資源の1つは、コンピュータ・システム(例、パソコン又はサーバ)であり、これによりコンピュータ・システムは、様々なOSの複数のインスタンスを同時に実行できるようになった。かくしてコンピュータ・システムは、様々なOSを必要とする様々なアプリケーションを実行できる。
ある種の仮想化により、コンピュータシステムのハードウエア資源をエミレーティングすることがが可能となった。この為に、コンピュータ・システム内の仮想化ソフトウエアをインストールする必要がある。その目的は、コンピュータ・システムのハードウエア資源が全てのインストールされたOSにアクセス可能にすることである。この仮想化ソフトウエアの別の目的は、コンピュータ・システムにインストールされた様々なOS用の仮想化されたハードウエア資源へのアクセスを調整することである。
コンピュータ・システムのハードウエア資源の仮想化は、幾つかの利点(例、同じコンピュータ・システムと別のあるコンピュータ・システム上の複数のOSを同時に実行できる点)もあるが、欠点も多くある。
例えばこの仮想化は、コンピュータ・システム上の仮想化ソフトウエアの実行に関連して発生する過剰負荷の結果として、コンピュータ・システムのパフォーマンスが下がる。特にアプリケーションの実行は、仮想化されていないシステム上ではかえって遅くなり、悪影響を受ける。
上記の欠点に関連して多くの場合、従来の仮想化技術は、将来も仮想化されることのない又は仮想化する必要のない資源をも仮想化してしまう。かくして例えばコンピュータ・システムのキーボードが仮想化されると、実行中のアプリケーションも仮想化されたキーボードを有し、従来技術においては実行中の様々なアプリケーションにより必要とされる仮想キーボードと同じ数の仮想コンピュータ・システム(バーチャルマシーン+OS)を創設する必要がある。これはシステム資源の浪費に繋がり、システムの性能に悪影響を及ぼすことになる。
本発明の目的は、システムのハードウエア資源全てを仮想化することなく、コンピュータ・システムに関連するあるハードウエア資源のみを仮想化する方法を提供することである。
上記目的は、請求項1に記載の方法で達成される。即ち、OS上で実行されるアプリケーションに属するプロセスに挿入される実行可能なピース・オブ・コードを用いて、コンピュータ・システムのハードウエア資源を仮想化する本発明の方法において、前記OSは、前記OS上で実行されるアプリケーション・プログラミング・インターフェース(API)を含み、
(A)アプリケーションに属するプロセスから、前記プロセスとハードウエア資源との間に生成されるデータフローの管理に関連するAPIサービスへのコールをインターセプトするステップと、
前記ステップ(A)は、(A1)前記データフローの管理に関連するAPIサービスを前記ピース・オブ・コードに含まれる対応するサービスに向け直すステップを含み、
(B)前記データフローを、前記ステップ(A)に基づいて、前記ピース・オブ・コードで管理するステップと、
を有する。
(A)アプリケーションに属するプロセスから、前記プロセスとハードウエア資源との間に生成されるデータフローの管理に関連するAPIサービスへのコールをインターセプトするステップと、
前記ステップ(A)は、(A1)前記データフローの管理に関連するAPIサービスを前記ピース・オブ・コードに含まれる対応するサービスに向け直すステップを含み、
(B)前記データフローを、前記ステップ(A)に基づいて、前記ピース・オブ・コードで管理するステップと、
を有する。
それ故に、従来技術とは異なり、挿入されたピース・オブ・コードを用いて、コンピュータ・システムのOS上で実行される各アプリケーションが、実行に必要とされるハードウエア資源を仮想化する。しかしシステムに関連するハードウエア資源の全てを仮想化するわけではない。これによりシステムの資源の浪費を減らす事になり、全く用いられない資源、将来も仮想化されない資源、仮想化する必要のない資源(OSあるいはOSのハードウエア資源)は、仮想化されない。本発明では、従来技術とは異なり、コンピュータ・システムの資源の全てを仮想化する仮想化ソフトウエアは存在しない。コンピュータ・システム上で実行されるアプリケーションに挿入される(injected)ピース・オブ・コードが、アプリケーションの正しい実行のために、どのハードウエア資源を仮想化すべきかを決定する。
コンピュータ・システムのキーボードを仮想化する例を続ける。本発明は、コンピュータ・システム全体を仮想化するのではなく、キーボードのみを仮想化(仮想化されたキーボードを生成)するだけである。それ故にこのアプリケーションは、実際のマシーンで実際に実行されるのあって、仮想化されたマシーンで実行されるのではない。その結果、仮想化により導入される負荷を大幅に減らすことができる。この負荷は、キーボードのデータを読み出すときのみ発生する極めて小さい負荷であり、各プログラムのインストラクションを実行する際に発生する大きな負荷ではない。
用語「データフローの管理」は、データフローの伝送又は制御に関連して使われる。その結果、プロセスがコールするサービスは、データフローの管理に関連する。挿入されたピース・オブ・コードがコールをインターセプトすると、このピース・オブ・コードが、仮想バッファのコンテンツを送信することにより、データフローの管理を行う。
上記の目的を達成するために、まず、アプリケーションに属するプロセスからプロセスとハードウエア資源との間で生成されたデータフローの管理に関連するサービスになされたコールをインターセプトする必要がある。用語「インターセプト」とは、プロセスからアプリケーションサービスへのコールを、ピース・オブ・コード内に含まれるサービスに向け直すことを意味する。その結果、ピース・オブ・コードそのものが、プロセスからコールを受領し、このAPIサービスに対応するこのサービスを実行する。即ちプロセスからのコールはAPIサービスには到達しない。このインターセプトによって、ピース・オブ・コードは、プロセスがOSにリクエストを行いそれにアクセスする時に、プロセスとハードウエア資源との間のデータフローの制御を行うことができる。これが行えるのは、ピース・オブ・コードがOS上で動作しているからである。
インターセプトの前は、ピース・オブ・コードは、プロセスとハードウエア資源との間で生成されたデータフローの管理に関連するAPIのサービスを、ピース・オブ・コードに含まれる対応するサービスに向け直しする。その結果、上記したように、プロセスからのコールは、APIサービスに対しなされるのではなく、ピース・オブ・コードに含まれる対応するサービスに対しなされることになる。
インターセプトの後は、ピース・オブ・コードはプロセスからのコールを受領し、ピース・オブ・コードに含まれるサービスは実行中であるので、ピース・オブ・コードはプロセスとハードウエア資源との間で生成されたデータフローの管理を実行し、ハードウエア資源を仮想化する。それはピース・オブ・コードに含まれるサービスが、その目的に適用するよう構成されているからである。
用語「サービス」、「API」、「コール」「ハードウエア資源」は、それぞれ少なくとも1つのサービス、少なくとも1つのAPI、少なくとも1つのコール、少なくとも1つのハードウエア資源に関連してもよい。例えば、同一のAPIとある別のAPIの2つのサービスを、ピース・オブ・コードに含まれる2つのサービスに向け直す。即ち複数のコールがプロセスにより出される。あるいは第1のAPIのサービスをピース・オブ・コードに含まれる第1サービスに向け直す、又は第2のAPIのサービスをピース・オブ・コードに含まれる第2のサービスに向け直す。同様に向け直すサービスによっては、同一のピース・オブ・コードとある別のピース・オブ・コードがハードウエア資源(ビデオカード、オーディオカード、ハードドライブ、キーボード又はマウス)が、実行中のアプリケーションのニーズに応じて、仮想化する。
実行可能なピース・オブ・コードをプロセスに挿入する1つの方法は、"Windows NT System-Call Hooking", Mark Russinovich and Bryce Cogswell, Dr. Dobb's Journal, January 1997"に記載されている。
本発明の一実施例によれば、アプリケーションに属するプロセスは、スリープ状態で初期化される。そして実行可能なピース・オブ・コードは、このスリープ状態の間にプロセスに挿入される。それ故に、本発明の方法は、プロセスがスリープ状態で初期化された場合には、プロセスを再度初期化する可能性もある。ピース・オブ・コードの正確な動作がそれ故に確保される。
本発明の一実施例によれば、前記APIサービスはファンクションであり、
前記プロセスとハードウエア資源との間に生成されたデータフローの管理に関連するAIPサービスをピース・オブ・コードに含まれる対応するサービスに向け直すステップは、
メモリ内に、向け直すべきAPIファンクション又はオブジェクト・メソッドを含むダイナミック・リンク・ライブラリを記憶するステップと、
前記記憶されたダイナミック・リンク・ライブラリに含まれるAPIファンクション又はオブジェクト・メソッド用のファンクション・ポインタ・テーブル内で、向け直すべきべきAPIファンクションが記憶されている初期メモリアドレスを、前記ピース・オブ・コードに含まれる対応するファンクションが記憶されている初期メモリアドレスで、置換するステップとを含む。
前記プロセスとハードウエア資源との間に生成されたデータフローの管理に関連するAIPサービスをピース・オブ・コードに含まれる対応するサービスに向け直すステップは、
メモリ内に、向け直すべきAPIファンクション又はオブジェクト・メソッドを含むダイナミック・リンク・ライブラリを記憶するステップと、
前記記憶されたダイナミック・リンク・ライブラリに含まれるAPIファンクション又はオブジェクト・メソッド用のファンクション・ポインタ・テーブル内で、向け直すべきべきAPIファンクションが記憶されている初期メモリアドレスを、前記ピース・オブ・コードに含まれる対応するファンクションが記憶されている初期メモリアドレスで、置換するステップとを含む。
それ故にピース・オブ・コードは、APIのファンクションをピース・オブ・コードに含まれる対応するファンクションに向け直し、その結果ピース・オブ・コードは、プロセスによりこれらのファンクションに向けられたコールをインターセプトし、プロセスとハードウエア資源との間に生成されたデータフローを管理する。これにより仮想化が実現できる。
更にプロセスとハードウエア資源との間に生成されたデータフローの管理に関連するAIPサービスをピース・オブ・コードに含まれる対応するサービスに向け直すことは、第1変数内に初期メモリアドレスを記憶するステップを含む。この初期メモリアドレス内に向け直すべきAPIファンクションが記憶される。その結果、このAPIファンクション(即ち元のファンクション)は、アプリケーションが実行中は必要な場合はいつでも、実行可能なピース・オブ・コードそのものからコールされる。
他方で、APIサービスはオブジェクト・メソッドである。
前記プロセスとハードウエア資源との間に生成されたデータフローの管理に関連するAIPサービスをピース・オブ・コードに含まれる対応するサービスに向け直すステップは、メモリ内に、向け直すべきオブジェクト・メソッドを含むダイナミック・リンク・ライブラリを記憶するステップと、
前記向け直すべきメソッドに関連するオブジェクトが初めて生成されたか否かを確認するステップと、
前記ステップで生成されたと確認された場合には、前記記憶されたダイナミック・リンク・ライブラリに含まれるオブジェクト・メソッド用のメソッド・ポインタ・テーブル内で、再方向づけるべきオブジェクト・メソッドが記憶されている初期メモリアドレスを、前記ピース・オブ・コードに含まれる対応するメソッドが記憶されている初期メモリアドレスで、置換するステップとを有する。
前記プロセスとハードウエア資源との間に生成されたデータフローの管理に関連するAIPサービスをピース・オブ・コードに含まれる対応するサービスに向け直すステップは、メモリ内に、向け直すべきオブジェクト・メソッドを含むダイナミック・リンク・ライブラリを記憶するステップと、
前記向け直すべきメソッドに関連するオブジェクトが初めて生成されたか否かを確認するステップと、
前記ステップで生成されたと確認された場合には、前記記憶されたダイナミック・リンク・ライブラリに含まれるオブジェクト・メソッド用のメソッド・ポインタ・テーブル内で、再方向づけるべきオブジェクト・メソッドが記憶されている初期メモリアドレスを、前記ピース・オブ・コードに含まれる対応するメソッドが記憶されている初期メモリアドレスで、置換するステップとを有する。
ファンクションの場合と同様に、オブジェクトに属するメソッドをピース・オブ・コードに含まれるメソッドに向け直すことも可能であり、その結果、ピース・オブ・コードは、プロセスによりメソッドになされたコールをインターセプトし、プロセスとハードウエア資源との間に生成されたデータフローを管理する。
APIのサービスを向け直すことも可能であるので、サービスの1つはファンクションであり他のサービスはメソッドである可能性もある。その結果2つの実施例は、実行中の同一のアプリケーションと別のあるアプリケーションに対し補い合うものである。
更に、前記プロセスとハードウエア資源との間に生成されたデータフローの管理に関連するAIPサービスをピース・オブ・コードに含まれる対応するサービスに向け直すステップは、第2変数内に、向け直すべきオブジェクト・メソッドが記憶されている初期メモリ・アドレスを記憶するステップを有する。その結果、アプリケーションの実行中に必要な時はいつでも、このメソッド(オリジナルなメソッド)は、ピース・オブ・コードによりコールすることができる。
本発明の他の実施例によれば、アプリケーションに属するプロセスから、前記プロセスとハードウエア資源との間に生成されるデータフローの管理に関連するAPIサービスへのコールをインターセプトするステップは、前記プロセスから前記データフローの管理に関連するAPIサービスに対応するピース・オブ・コードに含まれるサービスへのコールを受領するステップを有する。データフローの方向(即ちプロセスから資源に又は資源からプロセス)によっては、プロセスがコールを行うピース・オブ・コードに含まれるサービスが、異なることもある。
好ましくは前記プロセスとハードウエア資源との間に生成されるデータフローをピース・オブ・コードで管理するステップは、
前記ハードウエア資源に対応する仮想化されたハードウエア資源が生成されたか否かを認証するステップと、
前記ステップで認証されない場合には、仮想化されたハードウエア資源を生成するステップと、を有する。
前記ハードウエア資源に対応する仮想化されたハードウエア資源が生成されたか否かを認証するステップと、
前記ステップで認証されない場合には、仮想化されたハードウエア資源を生成するステップと、を有する。
コンピュータ・システムの大部分のハードウエア資源が、プロセスとハードウエア資源との間に生成されたデータフローを管理するために、ハードウエア資源を生成し、これでコンピュータ・システムのハードウエア資源を仮想化する(即ち仮想化ハードウエア資源を生成する)ことも必要である。それ故にコンピュータ・システムのハードウエア資源に依存して、ピース・オブ・コードは、対応する仮想化されたハードウエア資源が存在するか否かを認証しなければならない。存在しない場合には、この仮想化されたハードウエア資源を生成するステップは、
前記ハードウエア資源に関連するバッファを仮想化するバッファを生成するステップと/又は
前記ハードウエア資源の挙動をエミュレートするスレッド・オブ・エクセキューションを生成するステップとを有する。
前記ハードウエア資源に関連するバッファを仮想化するバッファを生成するステップと/又は
前記ハードウエア資源の挙動をエミュレートするスレッド・オブ・エクセキューションを生成するステップとを有する。
仮想化されたバッファを生成する理由は、大部分のコンピュータ・システムのハードウエア資源はバッファを含む、あるいはバッファに接続されている(より具体的には各ハードウエア資源は予約されたメモリ領域を有する)。このバッファ内にハードウエア資源はデータを記憶する。その結果データはプロセスに達する(プロセスは通常それを得るためのリクエストを生成する)、あるいはプロセスはデータを記憶する。その結果データはプロセスに達する、即ちバッファはプロセスと資源との間のデータを交換するツールとして機能する。仮想化されたバッファを生成する目的は、プロセスと資源との間でデータを交換するために確保されたメモリ領域は、OSの制御下にはない即ち実際の資源に関連するドライバーの制御下にはない異なるメモリ領域である。即ちピース・オブ・コードの制御下にあるメモリ領域である。更に各ハードウエア資源にとって、ピース・オブ・コードが挿入される実行中の各アプリケーションは、それ故にそれ自身の専用のバッファを有し、ハードウエア資源に属する他のアプリケーションと共有するバッファは有さない。
ある場合においては、データが仮想化されたバッファ内に記憶されると、プロセスに対し全ての動作が正確に行われたことを通知する必要がある。更にプロセスに対しどの程度の量のデータがバッファ内に書き込まれたかを示す必要がある。その理由はバッファ内にメモリ空間がまだ存在するかを知るため、又は全てのデータがバッファ内に記憶されておらずデータを記憶する更なるステップが必要となるかを知るためである。
スレッド・オブ・エクセキューションを生成する必要があるが、それは、主にスレッド・オブ・エクセキューションが、コンピュータ・システムのハードウエア資源の挙動をシミュレートするように、特にピース・オブ・コードにより生成されたデータの適切な管理を、仮想化されたハードウエア資源で制御できるように、更に又それらの間で交換されたプロセスにより仮想化されたバッファーを介して生成されたデータの管理を適切にできるようにするためである。スレッド・オブ・エクセキューションは、ピース・オブ・コードに含まれるファンクションによって表示され、実際のスレッドの実行はこのファンクションの実行に関連する。
前記プロセスとハードウエア資源との間のデータフローを前記ピース・オブ・コードで管理するステップは、前記仮想化されたバッファ内に、前記プロセスからハードウエア資源に送られたデータを記憶するステップを有する。その為このピース・オブ・コードは、プロセスとハードウエア資源の間で生成されたデータフローを管理する。その理由は、データは仮想化されたバッファ内に記憶されており、このバッファはピース・オブ・コードの制御下にあるからである。プロセスにより生成されたこのデータの宛先は、実際にはコンピュータ・システムのハードウエア資源(即ち実際のハードウエア資源)であるが、プロセスからあるAPIサービスへのコールのピース・オブ・コードによるインターセプトにより、このデータはその制御下に入るようになる。
前記プロセスとハードウエア資源との間のデータフローを前記ピース・オブ・コードで管理するステップは、
前記ハードウエア資源の挙動をエミュレートする生成されたスレッド・オブ・エクセキューションを所定の間中断するステップと、
前記仮想化されたバッファ内に記憶されているデータを獲得するステップと、
前記獲得されたデータを処理するステップとを有する。
前記ハードウエア資源の挙動をエミュレートする生成されたスレッド・オブ・エクセキューションを所定の間中断するステップと、
前記仮想化されたバッファ内に記憶されているデータを獲得するステップと、
前記獲得されたデータを処理するステップとを有する。
仮想化されたハードウエア資源が、コンピュータ・システムのハードウエア資源の挙動をシミュレートするスレッド・オブ・エクセキューションを有する場合には、ピース・オブ・コードは、所定の時間(通常数ミリ秒のオーダー)スレッド・オブ・エクセキューションを中断しなければならない。その結果スレッド・オブ・エクセキューションは、プロセスが仮想化されたバッファ内に記憶させたデータを得る。このデータが得られるとスレッド・オブ・エクセキューションは、このデータをコンピュータ・システムのハードウエア資源が行うように処理しなければならない。例えばハードウエア資源がオーディオカードの場合には、このデータの処理は、データを例えばmp3フォーマット(即ち、MPEG−1オーディオ、レイヤIII標準に従って)に変換し、その結果このデータは解読できるようになる。
前記プロセスとハードウエア資源との間のデータフローを前記ピース・オブ・コードで管理するステップは、前記処理されたデータを第1のリモートコンピュータ・システムに送信するステップを有する。データが処理された後、データがピース・オブ・コードにより仮想化されたハードウエア資源で制御されているとすると、このデータはリモートのコンピュータ・システム(即ち、実際のハードウエア資源を含むコンピュータ・システム以外のコンピュータ・システム)に送られ、リモートのコンピュータ・システムがそのデータを利用する。しかしこのデータは、アプリケーションが実行されているコンピュータ・システムそのものに送信することも又は他のローカルのコンピュータ・システムに送信することも可能である。その為このオーディオカード例で更に説明すると、ピース・オブ・コードがオーディオカードの制御機能を有するとすると、このピース・オブ・コードは、このオーディオデータをリモートのコンピュータ・システム(例、モバイル端末、例えばスマートフォン、タブレット)を介して聞くことができるが、これはコンピュータ・システムに関連する実際のオーディオカードを介して聞けるようにする代わりに行われる。データがスレッド・オブ・エクセキューションにより処理される(これはスレッド・オブ・エクセキューションに含まれる1つのファンクションが処理するのであるが)と、このデータは、このコンピュータ・システムのオーディオカードにより解釈され、そのため他のコンピュータ・システムのオーディオカードにより読み取られるような問題はない。その理由はこの様なデータは既にその目的のために適合されているからである。
コンピュータ・システムに関連する仮想化する方法は上記では一般的に記載したが以下具体的方法でアプリケーションに属するプロセスからハードウエア資源へのデータフローを管理することを具体的に記載する。本発明はプロセスからハードウエア資源へ流れるデータをピース・オブ・コードが如何に制御するかを記載する。データフローが資源(より具体的には仮想化されたハードウエア資源)とアプリケーションに属するプロセスとの間で生成された時の本発明の方法を以下説明する。
従って本発明の方法は、前記仮想化されたハードウエア資源から前記アプリケーションに属するプロセスに向けて生成されたデータフローを管理するステップを含む。この特定の方向にデータを流すステップは、
データを第2のリモートコンピュータ・システムから受領するステップと、
前記受領したデータを処理するステップと、
前記処理されたデータを仮想化されたバッファ内に記憶するステップとを有する。
データを第2のリモートコンピュータ・システムから受領するステップと、
前記受領したデータを処理するステップと、
前記処理されたデータを仮想化されたバッファ内に記憶するステップとを有する。
ピース・オブ・コードは、第2リモートのコンピュータ・システム(通常第1と第2のリモートのコンピュータ・システムは同一のリモートのコンピュータ・システムであるが)からデータをいつでも受領すると、そのデータは処理され以前に生成された仮想化されたバッファ内に記憶され、それにプロセスがアクセス可能である。そのため仮想化されているハードウエア資源が例えばコンピュータ・システムのキーボードの場合には、ピース・オブ・コード(具体的にはハードウエア資源の挙動をシミュレートするスレッド・オブ・エクセキューション)は、キーボードデータをリモートのコンピュータ・システム(例えば、タブレット)から受領する。キーボードデータは、例えばユーザがタブレットのタッチパネルを介して入力するキーボードをベースに生成されたデータである。このデータは、スレッド・オブ・エクセキューションにより処理され、バッファ内に記憶される。
その後プロセスがデータの獲得を要求すると、このプロセスは、あるAPIサービスにコールを行わなければならない。このAPIサービスはハードウエア資源(このハードウエア資源の仮想化はプロセスに透明であるが故に実際のハードウエア資源と解釈される)とプロセスとの間のデータフローの管理に関連する。これらのコールはピース・オブ・コードによりインターセプトされる。その結果ピース・オブ・コードは、仮想化されたバッファ内に記憶されたデータ(コンピュータ・システムのハードウエア資源即ち実際のハードウエア資源に記憶されたデータ)を取り出し、それをプロセスにとってアクセス可能なように処理し、得られた後それを必要により処理する。
前記アプリケーションに属するプロセスから、前記プロセスとハードウエア資源との間に生成されるデータフローの管理に関連するAPIサービスへのコールをインターセプトするステップは、
前記アプリケーションに属するプロセスから前記ハードウエア資源から前記プロセスに向けて生成されたデータフローの管理に関連するAPIサービスへのコールをインターセプトするステップを有し、
前記前記仮想化されたハードウエア資源から前記アプリケーションに属するプロセスに向けて生成されたデータフローを管理するステップは、
仮想化されたバッファ内に記憶されたデータを取り出すステップと、
前記取り出されたデータをプロセスに送るステップとを有する。
前記アプリケーションに属するプロセスから前記ハードウエア資源から前記プロセスに向けて生成されたデータフローの管理に関連するAPIサービスへのコールをインターセプトするステップを有し、
前記前記仮想化されたハードウエア資源から前記アプリケーションに属するプロセスに向けて生成されたデータフローを管理するステップは、
仮想化されたバッファ内に記憶されたデータを取り出すステップと、
前記取り出されたデータをプロセスに送るステップとを有する。
一般的な状況(即ちプロセスとハードウエア資源の間のデータフロー)に記載したように、プロセスからAPIサービス(これはハードウエア資源からプロセスへのデータフローの管理に関連する)へのコールをインターセプトするステップは、プロセスからピース・オブ・コードに含まれるサービスへのコールを受信するステップを含む。このピース・オブ・コードは、ハードウエア資源からプロセスへのデータフローの管理に関連するAPIサービスに対応する。
最後に、本発明の方法は、アプリケーションに属するプロセスからハードウエア資源からプロセスに向けて生成されるデータフローを管理するステップを有する。これは、仮想化された資源(実際の資源ではなく)がアプリケーションを正しく制御し続けていることを確認するあためである。この為、プロセスとハードウエア資源との間のデータフローを管理するステップは、
前記ハードウエア資源からプロセスに向けて生成されたデータフローを管理するステップを有し、前記ステップは、
前記バッファ内にハードウエア資源からのデータが存在するか否かを確認するステップと、
前記ステップでデータの存在が確認された場合には、前記データを削除するステップとを有する。
前記ハードウエア資源からプロセスに向けて生成されたデータフローを管理するステップを有し、前記ステップは、
前記バッファ内にハードウエア資源からのデータが存在するか否かを確認するステップと、
前記ステップでデータの存在が確認された場合には、前記データを削除するステップとを有する。
実行されているコンピュータ・システムのハードウエア資源の仮想化は、このハードウエア資源にとってはトランスペアレントであるために、このハードウエア資源は、関連するバッファにデータを送り続けることができる。その結果バッファは、ある時点で最終的に容量が満杯になる。この様な状況においては、実際のハードウエア資源は実際のコンピュータ・システムのOSの内部容量を飽和させることになる。それに応答して動作するかあるいは正確に作業を停止することがある。この様な状況を回避するために、ピース・オブ・コードは、バッファ内にデータがあるか否かを頻繁に確認し、データがある場合には、そのデータを削除する。
第2の態様においては、本発明は、コンピュータ・システムに関連するハードウエア資源を仮想化する方法を実行するインストラクションを含む実行可能なピース・オブ・コードを提供する。このピース・オブ・コードは、このアプリケーションがコンピュータ・システム上で実行されているAPIを含むOS上で実行されている時には、ピース・オブ・コードは、アプリケーションに属するプロセス内に挿入される。
この実行可能なピース・オブ・コードは、物理的記憶媒体(例、記憶媒体、コンピュータメモリ、ROM)に記憶され、搬送波(例、電磁波、光)で搬送される。
第3の態様においては、メモリとプロセッサとを有し、APIを含むOSが実行される本発明のコンピュータ・システムにおいて、前記メモリは、前記アプリケーションに属するプロセスに挿入される実行可能なピース・オブ・コードに対応するプロセッサで実行可能なインストラクションを記憶し、本発明のコンピュータ・システムは、
前記アプリケーションに属するプロセスから、前記プロセスとハードウエア資源との間に生成されるデータフローの管理に関連するAPIサービスへのコールをインターセプトするステップを実行するコンピュータ手段と、
前記ステップは、前記データフローの管理に関連するAPIサービスを前記ピース・オブ・コードに含まれる対応するサービスに向けるステップを含み、
前記データフローを、前記ステップ(A)に基づいて、ピース・オブ・コードで管理するステップを実行するコンピュータ手段とを有する。
前記アプリケーションに属するプロセスから、前記プロセスとハードウエア資源との間に生成されるデータフローの管理に関連するAPIサービスへのコールをインターセプトするステップを実行するコンピュータ手段と、
前記ステップは、前記データフローの管理に関連するAPIサービスを前記ピース・オブ・コードに含まれる対応するサービスに向けるステップを含み、
前記データフローを、前記ステップ(A)に基づいて、ピース・オブ・コードで管理するステップを実行するコンピュータ手段とを有する。
メモリとプロセッサとを有し、APIを含むOSが実行される本発明のコンピュータ・システムにおいて、前記メモリは、前記アプリケーションに属するプロセスに挿入される実行可能なピース・オブ・コードに対応するプロセッサで実行可能なインストラクションを記憶し、前記インストラクションは、
前記アプリケーションに属するプロセスから、前記プロセスとハードウエア資源との間に生成されるデータフローの管理に関連するAPIサービスへのコールをインターセプトするステップと、
前記ステップは、前記データフローの管理に関連するAPIサービスを前記ピース・オブ・コードに含まれる対応するサービスに向けるステップを含み、
前記データフローを、前記ステップ(A)に基づいて、ピース・オブ・コードで管理するステップと、を実行する機能を有する。
前記アプリケーションに属するプロセスから、前記プロセスとハードウエア資源との間に生成されるデータフローの管理に関連するAPIサービスへのコールをインターセプトするステップと、
前記ステップは、前記データフローの管理に関連するAPIサービスを前記ピース・オブ・コードに含まれる対応するサービスに向けるステップを含み、
前記データフローを、前記ステップ(A)に基づいて、ピース・オブ・コードで管理するステップと、を実行する機能を有する。
本発明の一実施例によれば、上記のコンピュータ・システム上で複数のアプリケーションがこのOS上で実行可能であり、メモリは、実行中の各アプリケーション用のピース・オブ・コードに対応するプロセッサが実行可能なインストラクションを記憶する。
更に本発明はコンピュータ・システム上で実行されるOS上で実行可能なアプリケーションを提供する。このアプリケーションは、実行可能なピース・オブ・コードを含む。
本発明の一実施例によれば、ハードウエア資源はオーディオカードであり、前記コールをインターセプトするステップは、前記プロセスから前記オーディオカードに向けて生成されたデータフローの管理に関連するAPIサービスへのコールをインターセプトするステップを含む。前記ピース・オブ・コードによりプロセスとハードウエア資源との間のデータフローを管理するステップは、前記プロセスから前記オーディオカードに向けて生成されたオーディオデータフローを管理するステップを含む。
より具体的には、前記プロセスから前記オーディオカードに向けて生成されたデータフローの管理ステップは、コンピュータシステムのオーディオカードに対応する仮想化されたオーディオカードが生成されたか否かを認証するステップと、前記ステップで生成されたとは認証されない場合には、仮想化されオーディオカードを生成するステップと、を有する。
前記仮想化されたオーディオカードを生成するステップは、コンピュータシステムのオーディオカードに関連する仮想化されたバッファを生成するステップと、前記コンピュータシステムのオーディオカードの挙動をエミュレートするスレッド・オブ・エクセキューションを生成するステップとを有する。
前記プロセスと前記オーディオカードとの間に生成されたオーディオデータフローの管理ステップは、前記仮想化されたバッファ内に、前記プロセスからオーディオカードに送られたデータを記憶するステップを含む。
他方で、前記プロセスから前記オーディオカードとの間に生成されたオーディオデータフローの管理ステップは、前記コンピュータシステムのオーディオカードの挙動をエミュレートする生成されたスレッド・オブ・エクセキューションを所定の間中断するステップと、スレッド・オブ・エクセキューションにより、プロセスからオーディオカードに送られた前記仮想化されたバッファ内に記憶されているデータを獲得するステップと、スレッド・オブ・エクセキューションが前記獲得されたオーディデータを処理するステップとを有する。
仮想化されたバッファからスレッド・オブ・エクセキューションにより得られたオーディオデータを処理するステップは、仮想化されたバッファから得られたデータをミキシングし、このミキシングされたオーディオデータを読み取り可能(解釈可能)なフォーマット(例、mp3フォーマット)に変換するステップを含む。
本発明の他の実施例によれば、ハードウエア資源はビデオカードであり、前記コールをインターセプトするステップは、前記プロセスから前記ビデオカードに向けて生成されたデータフローの管理に関連するAPIサービスへのコールをインターセプトするステップを含む。前記ピース・オブ・コードによりプロセスとハードウエア資源との間のデータフローを管理するステップは、前記プロセスから前記ビデオカードに向けて生成されたビデオデータフローを管理するステップを含む。
より具体的には、前記プロセスから前記ビデオカードに向けて生成されたデータフローの管理ステップは、コンピュータシステムのビデオカードに対応する仮想化されたビデオカードが生成されたか否かを認証するステップと、前記ステップで生成されたとは認証されない場合には、仮想化されビデオカードを生成するステップと、を有する。
前記仮想化されビデオカードを生成するステップは、コンピュータシステムのビデオカードに関連する仮想化されたバッファを生成するステップと、前記コンピュータシステムのビデオカードの挙動をエミュレートするスレッド・オブ・エクセキューションを生成するステップとを有する。ビデオカードの場合には、このバッファはDrawing Conntext(DC)と称し、ビデオカードは得られたグラフをフレーム毎に記憶し、ウィンドに常に関連付けているメモリ領域として定義される。
他方で、前記プロセスと前記ビデオカードとの間に生成されたビデオデータフローの管理ステップは、前記コンピュータシステムのビデオカードの挙動をエミュレートする生成されたスレッド・オブ・エクセキューションを所定の間中断するステップと、ビデオカードにより以前生成され、仮想化されたDC内に記憶されているビデオデータ(フレーム)を、スレッド・オブ・エクセキューションにより獲得するステップと、スレッド・オブ・エクセキューションが前記獲得されたオーディデータを処理するステップとを有する。
仮想化されたバッファから得られたビデオデータをスレッド・オブ・エクセキューションにより処理ステップは、コーデック(例、H.264)の手段によりフレームをコーディングするステップを含む。
本発明の他の実施例によれば、ハードウエア資源は、データ入力装置例えばキーボード、マウス等である。この時点で、コンピュータ・システム上で実行されているOSがメッセージ待ち行列システムを利用している場合は、このメッセージ待ち行列も仮想化することも必要かも知れない。
メッセージ待ち行列を仮想化するためには、メッセージ待ち行列システムをエミュレートするスレッド・オブ・エクセキューションとバッファとを生成する必要がある。即ち、あるデータ入力(例えばキーを押すこと)に基づいてアプリケーションに関連するメッセージを待ち行列にメッセージを送り、このメッセージのトリートメント・ファンクション(ウインドウズ・ファクションとして公知である)とインクワイアリ(問い合わせ)をインターセプトする。このトリートメント・ファンクションは、メッセージ待ち行列システムのファンクションを実行するために、ピース・オブ・コードに含まれるあるメッセージに応答して、アプリケーションの挙動を規定する為に決められたのものである。
この場合、ピース・オブ・コードは、プロセスからファンクションへのコールをインターセプトしなければならない。このファンクションは、インクワイアリをし(即ちメッセージを読み出すためにメッセージ待ち行列からそれを取り出し)、メッセージ待ち行列に含まれるメッセージをトリートする(即ちあるアクションを実行する)ものである。このメッセージ待ち行列はOSがアプリケーションに関連させたものである。メッセージ待ち行列のメッセージをトリートするピース・オブ・コードのファンクションは、アプリケーションによりトリートされるべきではないメッセージを削除する(即ち無視する)、又はこのメッセージをアプリケーションがトリートする(即ちアプリケーションがこのメッセージに応答して動くようにする)ために、オリジナルのファンクションにコールを行う。
この場合、ピース・オブ・コードは、プロセスからファンクションへのコールをインターセプトしなければならない。このファンクションは、インクワイアリをし(即ちメッセージを読み出すためにメッセージ待ち行列からそれを取り出し)、メッセージ待ち行列に含まれるメッセージをトリートする(即ちあるアクションを実行する)ものである。このメッセージ待ち行列はOSがアプリケーションに関連させたものである。メッセージ待ち行列のメッセージをトリートするピース・オブ・コードのファンクションは、アプリケーションによりトリートされるべきではないメッセージを削除する(即ち無視する)、又はこのメッセージをアプリケーションがトリートする(即ちアプリケーションがこのメッセージに応答して動くようにする)ために、オリジナルのファンクションにコールを行う。
ハードウエア資源がデータ入力装置(例、マウス、キーボード)の場合は、前記コールをインターセプトするステップは、前記プロセスからAPIサービス(データ入力装置からプロセスに向けて生成されたデータフローの管理に関連する)へのコールをインターセプトするステップを含む。ピース・オブ・コードによるプロセスとハードウエア資源との間のデータフローを管理するステップは、前記データ入力装置から前記プロセスに向けて生成されたデータフローを管理するステップを含む。
より具体的には、前記データ入力装置から前記プロセスに向けて生成されたデータフローの管理ステップは、コンピュータシステムのデータ入力装置に対応する仮想化されたデータ入力装置が生成されたか否かを認証するステップと、前記ステップで生成されたとは認証されない場合には仮想化されたデータ入力装置を生成するステップとを有する。
前記仮想化されたデータ入力装置を生成するステップは、コンピュータシステムのデータ入力装置に関連する仮想化されたバッファを生成するステップと、前記コンピュータシステムのデータ入力装置の挙動をエミュレートするスレッド・オブ・エクセキューションを生成するステップとを有する。
仮想化されたデータ入力装置から前記アプリケーションに属するプロセスに向けて生成されたデータフローを管理するステップは、
データ(データ入力装置により生成されたデータ)をリモートコンピュータ・システムから受領するステップと、前記受領したデータを処理するステップと、前記処理されたデータを仮想化されたバッファ内に記憶するステップとを有する。
データ(データ入力装置により生成されたデータ)をリモートコンピュータ・システムから受領するステップと、前記受領したデータを処理するステップと、前記処理されたデータを仮想化されたバッファ内に記憶するステップとを有する。
前記仮想化されたハードウエア資源から前記アプリケーションに属するプロセスに向けて生成されたデータフローを管理するステップは、仮想化されたバッファ内に記憶されたデータを取り出すステップと、前記取り出されたデータをプロセスに送るステップとを有する。
本発明の他の実施例によれば、ハードウエア資源が記憶装置(ハードドライブ)の場合は、前記コールをインターセプトするステップは、前記プロセスからAPIサービス(プロセスから記憶装置に向けて生成されたデータフローの管理に関連する)へのコールをインターセプトするステップを含む、ピース・オブ・コードによるプロセスとハードウエア資源との間のデータフローを管理するステップは、前記プロセスから記憶装置に向けて生成されたデータフローを管理するステップを含む。
より具体的には、プロセスからハードドライブへ生成されたデータフローを管理するステップは、プロセスからのデータを保存しているディレクトリー・パス(directory path)を変更するステップを含む。
上記したように、あるアプリケーションにおいては、ピース・オブ・コードは、上記のハードウエア資源の1つあるいは複数を仮想化できなければならないる。このため、ピース・オブ・コードは、これらのデバイスの仮想化をするのに必要なインストラクションを含まなければならない。
本明細書と請求の範囲において用語「を含む」とは、例えばAを含むはA以外のものを含んでもよいことを意味する。
コンピュータ・システムのハードウエア資源を仮想化する実行可能なピース・オブ・コードを用いる本発明の方法を説明する。1個あるいは複数個のAPIを含むOSがコンピュータ・システムに搭載されている。このピース・オブ・コードはOS上で実行されるアプリケーションに関連するプロセス内に挿入されているものとする。
図1は、従来技術にかかるコンピュータ・システム(例、パソコン、サーバ)でアプリケーション(例ゲーム)を実行する層を表す。
同図において、最低レベル層10はコンピュータ・システムのハードウエア資源(例、マイクロプロセッサ(CPU)、メモリ、グラフィック・プロセッシング・ユニット(GPU)、キーボード、マウス、ビデオカード、オーディオカード、ハードドライブ等)を表す。
最低レベル層10上の第2層11には、最低レベル層10との間の双方向通信(資源即ちリソースに関する情報(制御信号14またはデータ信号15)を送受信する)に必要なドライバーを有する。
第2層11上の第3層12は、OSを表し、APIを有する。APIは、OSに含まれ、最低レベル層10のリソース(資源)のドライバーを搭載することにより得られたものである。このAPIは、通常ダイナミック・リンク・ライブラリ(dynamic link libraries)で実現されるが、それは使用されるOSを問わない。APIを含む第3層12と、OSを表す第2層11との間の通信は、制御信号14とデータ(信号)15の両方を交換する双方向通信である。
図1には第4層即ち最高レベル層13がある。最高レベル層13は実行中のアプリケーションを表す。最高レベル層13が実行されていると、このアプリケーションは、APIを表す第3層12にアクセスし制御信号14とデータ信号15とを交換する。
この構成によれば、実行中のアプリケーション層である最高レベル層13は、アプリケーションが実行されているコンピュータ・システムのディスプレイ・スクリーン上にウインドウを生成することを要求する。このアプリケーションは、ウインドウを生成するためにAPI層である第3層12のサービス(ファンクションまたはメソッドのいずれか)にアクセスしなければならない。スクリーン上にウインドウを生成するために、これ等のサービスは、OS層である第2層11と情報(制御信号、データ信号)を交換する必要があり、第2層11は、スクリーン(最低レベル層10)との間の通信を行うために必要なツール(ドライバー)を有し所望のウインドウを生成できる。
この構成の欠点は、コンピュータ・システムのハードウエア資源は、ユーザが選択し(あるいはOSが選択し)、フォアグラウンド(駆動中のウインドウズ)で活性状態にある1個のアプリケーションのみが使用可能である点である。即ちハードウエア資源が、ある時点で実行中の全てのアプリケーションの中で選択されたオーディオカードの場合、ユーザがフォアグラウンドで活性化したアプリケーションのみが、そのハードウエア資源を利用できる。それ故、唯一のアプリケーションのみが、オーディオデータをオーディオカードに送信しそれを再生できる。
ハードウエア資源が、実行中の様々なアプリケーションからデータを受領できる状況も可能である。この様な場合データは混じっていることになる。オーディオカードの例で説明を続けると、このハードウエア資源は実行中の複数のアプリケーションからオーディオデータを受領することができる場合には、オーディオカードは様々なオーディオデータが混じり合った混合物を生成することになる。
これらの欠点を解決するために、本発明は、初期化(例、スリープ状態で初期化されたアプリケーションに属するプロセス)時に、各アプリケーション内に挿入しなければならない実行可能なピース・オブ・コードをまず提供する。このピース・オブ・コードは、実行中のアプリケーション上でコンピュータ・システムに関連するハードウエア資源を仮想化するメソッドを実行できる。それ故に、ピース・オブ・コードの主要な目的は、実行するためにコンピュータ・システムからアプリケーションが要求するハードウエア資源を仮想化することである。その結果、ピース・オブ・コードが挿入されるアプリケーションにのみ使用可能に、仮想化されたハードウエア資源を生成でき、アプリケーションに属するプロセスとハードウエア資源との間のデータフローを管理できる。それ故に、実行中の各アプリケーションは、仮想化されたハードデバイスと、この仮想化されたハードデバイスとプロセスとの間で生成されるデータフローを管理できるツール(ピース・オブ・コード)とを有する。
図2は、図1のブロックに加えて、実行可能なピース・オブ・コードがアプリケーションに関連するプロセスに挿入された後の状態を表し、実行可能なピース・オブ・コードを表す層16を、アプリケーションの最高レベル層13とAPIを表す第3層12との間の論理レベルに配置する。その結果、ピース・オブ・コードは、このアプリケーションからあるAPIサービス(例、ファンクションまたはメソッド)へのコールをインターセプトし、ハードウエア資源を仮想化する。
ピース・オブ・コードを表す層16の主なファンクションは、アプリケーションに属するプロセスが、前記プロセスとハードウエア資源との間に生成されるデータフローの管理に関連するAPIサービスへのコールをインターセプトすること、前記プロセスとハードウエア資源との間に生成されるデータフローと、前記プロセスと仮想化されたハードウエア資源10’との間に生成されるデータフローとを管理するステップとを有する。
具体的には、ピース・オブ・コードにより実行される方法は以下のとおりである。ユーザがアプリケーションを実行する初期状態において、このアプリケーションに帰属するプロセスがスリープ状態で初期化される。このスリープ状態の間、実行可能なピース・オブ・コードはプロセスに挿入される。
ピース・オブ・コードがプロセスに挿入されると、ピース・オブ・コードは、メモリ内に、プロセスと様々なハードウエア資源との間に生成されるデータフローの管理に関連するサービス(ファンクションまたはメソッドのいずれか)を含むAPIを含む全てのダイナミック・リンク・ライブラリを記憶させる。このサービスは実行中にアプリケーションにより将来要求されるようになるものである。その後、OSが、初期のメモリ・アドレス(そこにサービスが記憶されている)に従って、メモリ内に記憶されている別のAIPサービス用のサービス・ポインター・テーブルを満たすと、このポインター・テーブル内で、実行中にアプリケーションにより将来必要とされる各サービスの初期メモリ・アドレスを、ピース・オブ・コードに含まれる対応するサービスが記憶されている初期メモリアドレスで置換する。そのため向け直しが実行されると、ピース・オブ・コードは、プロセスが実行中に関連するサービスに対し行ったコールを、インターセプトできる。即ちプロセスが様々なAPIの様々な関連するサービスに対し行ったコールはピース・オブ・コードが受領する。その理由は、このポインターは、APIサービスを指定せずに、ピース・オブ・コードに含まれる対応するサービスを指定するからである。
上記のインターセプトに基づいて、ピース・オブ・コードは、プロセスとコンピュータ・システムのハードウエア資源との間で生成されるデータフローを管理する機能を獲得する。即ちピース・オブ・コードは、プロセスにとって透明な方法で、プロセスとコンピュータ・システムのハードウエア資源との間で生成されるデータフローを管理する。
より具体的には、プロセスが、コンピュータ・システムのハードウエア資源に、あるAPIサービスへのコールの手段により、アクセスしようとすると、ピース・オブ・コードは、それ自身のサービスを実行(即ちこれ等のコールのインターセプトを実行)する。このインターセプトに基づいて、データフローの制御を行う為に、プロセスがアクセスしようとしているコンピュータ・システムのハードウエア資源に対応する仮想化されたハードウエア資源10’を生成する(これまでに生成されていない場合)ことが必要である。
仮想化されたハードウエア資源10’は幾つかのアクションに関連する。第1アクションはバッファを生成することができることである。このバッファはコンピュータ・システムのハードウエア資源に関連するバッファを仮想化する。即ちピース・オブ・コードは特定のメモリ領域を予約し、これが仮想化されたバッファを表すのであるが、その中にプロセスはデータを記憶しなければならない。このデータは最初はコンピュータ・システムのハードウエア資源に送られるが、これはピース・オブ・コードによりインターセプトされたものである。
第2アクションは、スレッド・オブ・エクセキューションを生成することができることである。このスレッド・オブ・エクセキューションはコンピュータ・システムのハードウエア資源の挙動をエミュレートする。基本的にこのスレッド・オブ・エクセキューションは、ピース・オブ・コードそのものに含まれるファンクションである。
仮想化されたハードウエア資源10’が生成されると(以前になかった場合)、ピース・オブ・コードは、プロセスにより送信されたデータを仮想化されたバッファ内に記憶し、必要によっては上記のスレッド・オブ・エクセキューションを生成する。このピース・オブ・コードは、所定の時間(約数ミリ秒)スレッド・オブ・エクセキューション(同一のピース・オブ・コードに含まれるファンクションでありコントロール可能である)を中断する。その後ピース・オブ・コードは仮想化されたバッファ内に記憶されたデータを読み出し(このデータはプロセスからきたものであるが)、それを処理する。データが処理されると、ピース・オブ・コードはそれを第1のリモートコンピュータ・システムに送る機能を有する。この実施例を次に説明する。
ハードウエア資源が、仮想化されたハードウエア資源でない場合でコンピュータ・システムのハードウエア資源そのものの場合には、ピース・オブ・コードは、データは正しく受信されたことを、プロセスへ通信することが必要である。
他方で、生成されたスレッド・オブ・エクセキューションは、第2のリモートコンピュータ・システム(この第1と第2のリモートコンピュータ・システムは通常同一のリモートコンピュータ・システムではあるが)からデータを受信することができる。この状況において、スレッド・オブ・エクセキューションは、受信したデータを処理し、その後仮想化されたバッファ内に記憶する。この仮想化されたバッファは仮想化されたハードウエア資源10’の一部である。
他方で、生成されたスレッド・オブ・エクセキューションは、第2のリモートコンピュータ・システム(この第1と第2のリモートコンピュータ・システムは通常同一のリモートコンピュータ・システムではあるが)からデータを受信することができる。この状況において、スレッド・オブ・エクセキューションは、受信したデータを処理し、その後仮想化されたバッファ内に記憶する。この仮想化されたバッファは仮想化されたハードウエア資源10’の一部である。
アプリケーションが実行中されている間いつでも、プロセスはあるAPIサービスにコールを行い、コンピュータ・システムのハードウエア資源がアプリケーション用に生成されたデータを有しているか否かを確認する。プロセスとコンピュータ・システムのハードウエア資源との間のデータフローの管理に関連するAPIサービスの全ては、向け直しされるので、前記コールは、ピース・オブ・コード(より具体的にはピース・オブ・コードに含まれるサービス)が受領し処理する。このためにピース・オブ・コードは、仮想化されたバッファに含まれるデータ(データは仮想化されたバッファに含まれるデータに対応するデータ、即ちスレッド・オブ・エクセキューションにより受領され処理されるデータ)を取り出す。そのデータはリモートのコンピュータ・システムのスレッド・オブ・エクセキューションにより受領され、それを処理してそれを使用することができる。
コンピュータ・システムのハードウエア資源がアプリケーション用のデータを生成する(ピース・オブ・コードがデータフローレベルのみならず制御信号レベルにも関与している)状況においては、ピース・オブ・コードは、ハードウエア資源のバッファ内にデータが存在するか否かを頻繁に確認し、存在する場合にはそのデータを削除する。それ故に、アプリケーションが実行中の問題を回避できる。
本発明の実施例を以下に説明する。この実施例においては、OSはウインドウズ例えばウインドウズ7であり、コンピュータ・システムはアプリケーション・サーバ具体的にはゲーム・サーバであり、実行すべきアプリケーションは、ゲーム、同一ゲームと別のあるゲームの様々なインタンスである。ゲームが行われるハードウエア資源は、ゲーム・サーバのオーディオカードである。ハードウエア資源がビデオカードの実施例、ハードウエア資源がデータ入力装置(キーボード、マウス)の実施例、ハードウエア資源がハードドライブの実施例を以下説明する。
より具体的には本発明の実施例は次のように動作する。このゲーム・サーバの目的は、そのサービスのユーザが様々なゲーム更には自分のモバイル端末(スマートフォン、タブレット)又はリモートコンピュータからの同一のゲームをプレイできるようにすることである。各ゲームの実行あるいは同一ゲームの各インタンスの実行は、ゲームサーバからユーザのモバイル装置へストリーミング技術により送られる。それ故に、ユーザのモバイル端末からユーザは遊びたいゲームを選択し、ユーザのモバイル端末のスクリーン上に示されているGUIの制御要素(例えばゲームのアイコン)を動かすことにより、ゲームの実行を要求する。ユーザによる制御要素の活性化により、ゲーム・サーバに制御信号を送り、選択されたゲームをサーバ上で実行させる。
多数のユーザがゲームの実行を要求している(即ち多数のゲームが実行されている)とすると、本発明の目的は、各ゲームが、挿入されたピース・オブ・コードをベースに、実行に必要なゲームサーバのハードウエア資源を仮想化でき、それらを実行可能状態で利用できるようになることである。
そのため、ユーザーが自分の端末からゲームの実行を要求すると、実行中のアプリケーション(ゲーム)のメイン・プロセスは、ゲーム・サーバ内でスリープ状態で生成される。このため使用されるファンクションCreateProcess が、CREATE SUSPENDED値を、クリエイション・モード・パラメータ(CreateFlags)に割り当てる。プロセスがスリープ状態で初期化されると、本発明による実行可能なピース・オブ・コードはプロセス内に挿入される。その目的は、ゲームサーバのハードウエア資源を仮想化することである。
本明細書において「ハードウエア資源を仮想化する」とは、コンピュータ・システムのハードウエア資源に対応する仮想化されたハードウエア資源を生成することのみならず、a posterioriに生成されたデータフローの管理全体も含む。
プロセス(このプロセスはスリープ状態で初期化される)の実行を再開する前に、挿入されたピース・オブ・コードはAPIファンクションを方向付ける。このAPIファンクションは、アプリケーション(具体的にはアプリケーションに属するプロセス)と様々なゲームサーバのハードウエア資源(本実施例においては、アプリケーションとオーディオカードとの間のデータフローを管理するためのファンクション)との間で生成されたデータフローの管理に関連する。かくして、この実施例においては、ファンクションとはIAudio Client or IAudio Render Clientである。
一実施例のおいては、同一のサービス上で実行されているOSは、ウィンドウズ(より具体的にはウィンドウズ7)であるとすると、このAPIは、ダイナミックリンクライブラリー(DLLS)で通常実行される。その理由は、ピース・オブ・コードはLoodLibrary ファンクションの手段で、目的とするファンクションを含むライブラリー(AudioRenderClient APIのGetBuffer とReleaseBuffer をdxgi.dll libraryを介して記憶する。基本的にLoodLibraryは、ライブラリをメモリ内に記憶し、OSはIndex Address Table(IAT)(これはAPIファンクション用のファンクションポインタテーブルである)をAPIファンクションのメモリ内の初期アドレスで、満たす。RedirectIATファンクションの手段により、ピース・オブ・コードは、必要なポインタを修正し、それらをプロセスに挿入されたピース・オブ・コードに含まれるファンクションに対応させる。同時に、ピース・オブ・コードが向け直されたオリジナルなファンクションのいずれかにコールしなければならない場合には、テーブルのオリジナルのコンテンツ(即ち修正前のポインタの初期値)を変数内に記憶する。
インターセプトが終了すると、即ち必要とする全てのAPIの全てのファンクションが向け直されると、ピース・オブ・コードは、スリープ状態で初期化されたプロセスの実行を再開する。
他方で、プロセスが、IAudioRenderClientタイプのインターフェース(COMタイプのインターフェース)の創設を、IAudioCLientインターフェースのGetServiceメソッドの手段により要求すると、ピース・オブ・コードは、このインターフェースがピース・オブ・コードにより既に修正された、即ち向け直されたか否かを認証する。これが認証されない場合には、インターフェースのポインタテーブルを修正して、インターセプトされるべきメソッド、例えばIAudioRenderClientとReleaseBufferを置換する。COMタイプのインターフェースのメソッド用のポインタテーブルは、特定のコードで修正される。例えばGetBufferは、IAudioRenderClientインターフェースのメソッドテーブルのポジション4に対応し、それを修正して、挿入されたピース・オブ・コードに含まれるファンクションを指すようにする。同時に、元のメソッドへコールする必要がある場合、この位置のオリジナルのコンテンツは変数内にセーブされる。COMタイプのインターフェースのポインタテーブルの修正だけが最初に実行しなければならず、そのタイプのオブジェクトが創設される。
インターフェースIAudioRenderClientが創設され、オーディオカードへアクセスしようとするゲーム中に挿入されたピース・オブ・コードよりインターセプトされると、このピース・オブ・コードは、この対応するIAudioRenderClientオブジェクトをプロセスに戻す。
アプリケーションに属するプロセスが、IAudioRenderClient GetBuffer メソッドにコールして、オーディオカード用のオーディオデータが書き込むことのできるバッファを要求する(より具体的には、オーディオデータを書き込まなければならないメモリ領域のアドレスを要求する)と、ピース・オブ・コードは、このコールをインターセプトする。即ち、GetBufferメソッドは、ピース・オブ・コードに含まれる対応するメソッドへ向け直され、その結果プロセスは、ピース・オブ・コードに含まれる対応するメソッドへ実際にコールする。ピース・オブ・コードに含まれる対応するメソッドが、APIのオリジナルのメソッドにコール(ピース・オブ・コードはメソッド全体を含んではいるが)し、バッファを生成する。このバッファは、オーディオカードに関連するバッファを仮想化する。即ちメソッドはIPが書き込まれるメモリ領域のアドレスをプロセスに渡す。そのため、プロセスは、オーディオデータをゲームサーバのオーディオカードのバッファ内に記憶せず、実際のカードのバッファに対応する仮想化されたバッファ内に記憶する。
アプリケーションが、全てのオーディオデータを仮想化されたバッファ内に書き込むと、アプリケーションはReleaseBufferファンクションへのコールを行い、アプリケーションがオーディオデータの書き込みを終了した事と書き込まれたか量とを示す。このコールは、再びピース・オブ・コードによりインターセプトされる。その結果、全てのオーディオデータが仮想化されたバッファ内に書き込まれた時とオーディオデータが書き込まれた量を知ることができる。
更に、オーディオカードによるアプリケーションの制御に関連する問題故に、ピース・オブ・コードは同一サイズのバッファをオーディオカードに送る。このオーディオカードはサイレンスのみを含む。それ故にピース・オブ・コードは、オーディオカードが正確にアプリケーションを制御し続けていることを確認する。
上記したプロセスと並列に、ピース・オブ・コードは、ゲームサーバのオーディオカードの挙動をシミュレートするスレッド・オブ・エクセキューションを生成する。このスレッド・オブ・エクセキューションは、同一のピース・オブ・コードに含まれるファンクション以上のものを含むことはない。ピース・オブ・コードは、スレッドの実行を数ミリ秒同期あるいは非同期で停止する。この停止後、スレッド・オブ・エクセキューションは、仮想化されたバッファ内に記憶されたプロセスからオーディオデータを読み出し、それを処理し、それを再生用に移動端末に送る。
オーディオデータを処理することは、様々なオーディオデータをミキシングすることを含む。例えば、ゲームの実行中に聞こえてくるバックグランドミュージックと、ゲーム上でユーザが介在することにより聞こえてくる音(例、発射音、自動車のエンジン音、刀を振った音)、そしてそれを適宜のオーディオフォーマット例えばmp3(例、MPEG1によればオーディオレイヤIII標準)に変換する。このオーディオデータが正しいフォーマットを有すると、ピース・オブ・コードは、それをあらゆる通信ネットワーク(例、インターネット)を介して、移動端末に送り、ユーザがゲームをエンジョイしている間再生する。
この実施例においては、ゲームによるオーディオカードへアクセス要求を記載した。実際には、複数のゲームと/又は同一ゲーム又はある別のゲームの複数のインスタンスがゲームサーバ上で同時に実行することができる。その為各ゲームは、上記のメソッドを実行するために、挿入されたピース・オブ・コードを含まなければならない。
ゲームにより仮想化されるべきハードウエア資源がゲームサーバのビデオカードであって、それが手持ちのゲームのメインプロセスがスリープ状態で初期化されるような状況であって、かつピース・オブ・コードがプロセスに挿入される場合にはおいては、ビデオカードを仮想化するメソッドは次の通りである。
他のハードウエア資源の場合と同様に、プロセスの実行を再開する前に、挿入されたピース・オブ・コードは、必要なAPIファンクション、この場合は例えばDirectX APIのShowWindow 又はCreateDevice のファンクションを向け直す。このメソッドの主目的はピース・オブ・コードが、トランスペアレントな方法で、ビデオカードとアプリケーションに属するプロセスとの間で生成されたデータフローの管理を肩代わりすることである。
上記したようにこのAPIは、ダイナミック・リンク・ライブラリ(このOSがウィンドウズの場合の実施例においては、これらのライブラリはDLLである)内で実行される。それ故にピース・オブ・コードは、LoodLibraryファンクションの手段により向け直されるファンクション(例えばShowWindowファンクション)を含むライブラリをユーザ32.dllライブラリを介して、記憶する。記憶された後、OSが、ファンクションが記憶される初期メモリアドレスに基づいて、RedirectAITファンクションの手段により、このIndex Address Table(IAT)をAPIファンクション用のファンクションポインタで充填した後、このピース・オブ・コードは、ビデオカードを仮想化する為に関連のあるこれらのファンクションのポインタを修正する。このため、それは、APIファンクションが記憶されている初期メモリアドレスを、ピース・オブ・コードに含まれる対応するファンクションが記憶されている初期メモリアドレスで、置換する。別の構成としてIATを必要とよっては特定のコードで修正することもできる。
他方で、COMタイプのインターフェイス(IDirect3Device9)のサービスを向け直す為に、関連するメソッドを置換するために、インターフェイスのポインター・テーブルを修正する必要がある。COMタイプのインターフェイスのメソッド・ポインター・テーブルは、特殊なコードで修正される。例えばPresentはIDirect3Device9のインターフェイスのメソッド・テーブルのポジション18に対応し、それを修正しなければならない。その結果それは、挿入されたピース・オブ・コードに含まれる対応するファンクションを指す。同時に、このポジションのオリジナルのコンテンツは、元のメソッドをピース・オブ・コードからコールする必要がある場合には、変数の中に保存される。COMタイプのインターフェイスのポインター・テーブルの修正は、そのタイプのオブジェクトが創設されたときに初めて、行わなければならない。インターセプトが終了した時に、即ち資源の仮想化を実行するのに必要な全てのAPIのファンクションは向け直された時に、ピース・オブ・コードは、アプリケーションのプロセスの実行を再開する。
プロセスが、グラフが描かれるウィンドウを表示するよう要求するか、又はIDirect3DDevice9-タイプのインターフェースの創設を、DirectX APIのCreateDeviceファンクションの手段により、要求すると、これらのコールはインターセプトされて、Drawing Context(DC)を捕獲するあるいは仮想化する。この場合これは元のDCか仮想化されたDCで行われる。このDCは、ビデオカードが得られたグラフをフレーム毎に記憶するメモリ領域として規定され、それは常にウィンドウズ内のウィンドウに関連付けられている。その為ゲームサーバのビデオカードの仮想化するために、この領域は、getDCファンクションの手段によりアクセスできなければならない。このDCへのアクセスは、互に排他的である。即ちビデオカードがこのメモリ領域にアクセスしていると、どのプロセスのスレッド・オブ・エクセキューションは、それにアクセスすることはできない。
アプリケーションが、IDirect3DDevice9インターフェースを創設すると、又はグラフが示されるウィンドウを示すと、アプリケーションは、必要なデータをビデオカードに送信し始め、この情報の処理全部を開始し、その結果得られたフレームが形成される。これはピース・オブ・コードから独立して行われる。しばしばビデオ仮想化のスレッドは、DCコンテンツを捕獲する。このビデオ仮想化は、これをアプリケーションと同期あるいは非同期で行われる。
同期しているとは次の事を意味する。プロセスがビデオカードへアクセスするリクエストを、IDirect3DDevice9インターフェースのPresent メソッドを起動させることにより行いプロセスが生成されたフレームを示すと、ピース・オブ・コードは、このPresent メソッドをインターセプトする。その時に、スレッド・オブ・エクセキューションはDC(この場合それはBackBufferと称する)にアクセスし、生成されたフレームを捕獲する。その後必要により、ピース・オブ・コードは、インターフェースのオリジナルのPresent メソッドをコールする。この方法が同期している。その理由は、Present メソッドがコールされた時に、ピース・オブ・コードがフレームを描くために行われるべき作業が終了したことを完全に知ることができる時点が、存在するからである。
非同期の方法は、コンテンツにアクセスするために、ウィンドウ(ここでビデオカードはフレームを生成した結果を残す)のDCへ直接アクセスすることからなる。このDCへのアクセスは、互いに排他的に行わなければならない。この為スレッド・オブ・エクセキューションは、サーベイ(監視)の手段により、この相互に排他的な領域へアクセスを得ることを試みる。それが行われると、スレッド・オブ・エクセキューションは、DCのコンテンツにアクセスして生成されたフレームの結果を得る。この方法が非同期的であるのは、フレーム捕獲のレートとフレーム生成のレートとが、同じではないからである。
上記の2つの方法のいずれにおいても、DCコンテンツ即ちフレームが捕獲さると、この情報の処理を開始するが、それは適宜のコーデック(例えばH.264)の手段によるコーディングに基づいて行われる。そしてこのコーディングをインターネットを介して送信する。
ハードウエア資源がデータ入力装置(例えばマウス、キーボード等)の場合は、特定のメソッドは次の通りである。これまで記載したのとは異なり、このメソッドは、データ入力装置からアプリケーションに属するプロセスへ流れるデータフローを管理する、即ちこのメソッドは、ゲームを(例えばモバイル端末のキーボードから、又はタッチスクリーンから)エンジョイしているユーザからゲームサーバ上で実行されているゲームへオーダーを送信してその展開を得ようとする。
それ故に、ピース・オブ・コードが既にプロセス(即ちゲーム)に挿入されるような状況に基づいて、ピース・オブ・コードは、関連するサービスを向け直して、仮想化されたハードウエア資源を生成する(即ち、バッファを生成し、このバッファがデータ入力装置のバッファを仮想化し、データ入力装置の挙動をエミュレートするスレッド・オブ・エクセキューションを仮想化する)。ピース・オブ・コード(より具体的には入力装置の挙動をシミュレートするスレッド・オブ・エクセキューション)は、ユーザのモバイル端末からデータを受領し、このデータはプロセスに送られ、その結果プロセスは、オーディオとビデオに関連するデータを修正し、それはその後モバイル端末に送られる。この為、そこからデータを受領する入力装置に依存して、ピース・オブ・コードは、この受領したデータ(仮想化されたキーボードのそれ又は仮想化されたマウスのそれのいずれかに対応する)を、対応する仮想化されたバッファ内に記憶する。
プロセスが、入力装置(現実のキーボード、マウス、即ちゲームサーバーに関連した入力装置)からデータを得るために対応するサービスにコールを行うと、ピース・オブ・コードは、このコールをインターセプトし、ピース・オブ・コードに含まれる対応するサービスの実行を行わせる。その結果このサービスは、実際の入力装置のバッファではなく仮想化されたバッファ内に記憶されたデータを読み出す。
この実施例のOSがウィンドウズであることを考慮に入れると、ウィンドウズのメッセージをアカウント内に入れる必要がある。この場合メッセージ待ち行列をエミュレートするスレッド・オブ・エクセキューションは、リモートシステム(モバイル端末)からネットワーク(インターネット)を介してデータ入力(キーボード又はマウスによる)を受領する。このデータは、モバイル端末からユーザが送ったオーダー又はイベントである。それ故に各データ入力に対しスレッド・オブ・エクセキューションは、メッセージを、アプリケーションのウィンドウに関連するメッセージ待ち行列(ユーザ32.dllライブラリのSendMessageファンクションとPostMessageファンクションの手段により)に導入する。このメッセージ待ち行列は、OSにより提供されるメッセージ待ち行列システムのメカニズムにより自動的にアプリケーションに問い合わせる。更に、メッセージ待ち行列の仮想化を完了するために、メッセージ待ち行列の問い合わせファンクションとトリートメント・ファンクションを(ユーザ32.dllライブラリのSetWindowLongPteファンクションの手段により)変更する必要がある。その結果、メッセージ待ち行列(ウィンドウのファンクションあるいはメソッドとして公知であり、これはあるメッセージに応答して、アプリケーションの挙動を決定する為にプログラマが規定したファンクションである)の元のメッセージトリートメントファンクションを実行する代わりに、ピース・オブ・コードのファンクションが実行される。言い換えると、アプリケーションに対応するウィンドウのファンクション又はメソッドがインターセプトされる。このピース・オブ・コードのファンクションは、アプリケーションのウィンドウのオリジナルファンクションによりトリートすべきでないこれらのメッセージを削除し(即ちメッセージに応答して何のアクションも起こさない)、その結果このメッセージを無視するアプリケーションを得る。その理由はオリジナルなファンクションはそれらを実際にはトリートしないからである。あるいはピース・オブ・コードのファンクションから、オリジナルのメッセージトリートメント・ファンクションをコールする。その理由はこのアプリケーションはこれらのメッセージに応答して以下の2つの理由により反応すべきものだからである。第1の理由は、それらは、モバイル端末により送られたオーダーに基づいて、仮想化されたハードウエア資源(キーボード又はマウス)の入力データをエミュレートするピース・オブ・コードのスレッド・オブ・エクセキューションにより導入されたメッセージだからである。第2の理由は、それらは、モバイル端末のユーザの視点(ウィンドウズは実際のコンピュータシステムのスクリーン上で動くがこの位置はリモートシステムのユーザとは完全に無関係である)から、アプリケーションの挙動を変えることのできないメッセージだからである。
最後に、プロセスがアクセス要求を行うハードウエア資源が記憶装置例えばハードドライブの場合には、本発明のメソッドは次の通りである。この場合ピース・オブ・コードは既にプロセス内に挿入されているものとする。
プロセスの実行を再開する前に、この実施例においてはプロセスはスリープ状態で初期化されているが、挿入されたピース・オブ・コードは、要求された全てのAPIファンクション(例、CreateFileとCreateDirectory)を向け直す。この主な目的は、ピース・オブ・コードがプロセスとハードドライブとの間のデータフローの制御を行うことである。
残りのハードウエア資源での議論と同様に、これらのAPIはダイナミックリンクライブラリで実行されているのでピース・オブ・コードは、それらを、メモリ内にLoadLibreryファンクションの手段により記憶する。それ故にLoadLibreryは、向け直すべきファンクションを含むライブラリ(例、kernel32.dllライブラリのCreateFileとCreateDirectory)を記憶する。このOSはIATを、各APIファンクションが記憶されている初期メモリアドレスで充填する。必要なポインタは、RedirectIATファンクションの手段により修正され、このポインタが、ピース・オブ・コードに含まれる対応するファンクションを指すようにしている。ピース・オブ・コードが、プロセスとハードドライブとの間のデータフローの管理に関連するファンクションの向け直しを終了すると、ピース・オブ・コードそのものは、スリープ状態に初期化されていたアプリケーションに属するプロセスの実行を再開する。
プロセスが、CreateFileファンクションの手段によりファイルを創設/生成する又は開こうとすると、ピース・オブ・コードはこのリクエストをインターセプトし、ピース・オブ・コードに含まれる対応するファンクションを実行する。このインターセプトに基づいて、このファンクションは、プロセスにより開かれるべきファイルは、ゲームの一試合(ラウンド)用のファイルかあるいは他のいずれかのファイルかであるかを認定する。このファイルがラウンド用のファイルの場合には、ファンクションは、必要によりあらゆる種類のアルゴリズムにより生成されるべき又は開かれるべきファイルパスを修正する。このファイルパスが修正されると、オリジナルなCreateFileファンクションは、新たに形成されたパスで実行されるが、ピース・オブ・コードに含まれる対応するファンクションも又実行される。CreateDirectoryファンクションの手段によりディレクトリを創設する方法は、CreateFileファンクションに記載したのと同じである。
この実施例においては、各ハードウエア資源を仮想化することを別々に説明してきた。しかし同一のピース・オブ・コードとある別のピース・オブ・コードとが、複数のハードウエア資源を仮想化できる場合には、この本発明の方法の第1ステップ例えばメモリ内に様々なダイナミックリンクライブラリを記憶するステップ、又はサービスへのポインタ、共通であるが、即ちAPIを含む全てのダイナミックリンクライブラリを、ピース・オブ・コードが仮想化できる全てのハードウエア資源の関連サービスで向け直すべき全てのサービスのポインタで、置換するステップとを同時にメモリに記憶でき、その結果、ピース・オブ・コードは仮想化できる全てのハードウエア資源を仮想化できる。
上記の本発明の実施例は当業者はその様々な変形例を考え得り適宜に透過な手段で置換することができる。本発明の実施例はコンピュータ・システムとこのコンピュータ・システム上で行われるプロセスを例に説明したが、本発明は、コンピュータプログラムあるいは記録媒体内のコンピュータプログラムに関連する。コンピュータプログラムはソースコード、オブジェクトコードあるいはソースコードとオブジェクトコードとの間の中間コードの形態で部分的にコンパイルした形態あるいは他の適宜の形態でもよい。記録媒体はプログラムを搬送することのできる装置である。例えば記録媒体はROM、CDROM、半導体ROMあるいは磁気記録媒体、フロッピーディスク、ハードディスク等である。更に記録媒体は電気ケーブルあるいは光学ケーブル、無線あるいは他の手段により送信できる電気信号あるいは光学信号の形態で搬送可能である。コンピュータプログラムがケーブルあるいは他の装置により直接送信されるような信号に含まれる場合には、伝送媒体はケーブルあるいは他の装置である。記憶媒体はコンピュータプログラムが集積回路あるいは関連のプロセスを実行するのに用いられる適宜のものである。
以上の説明は、本発明の一実施例に関するもので、この技術分野の当業者であれば、本発明の種々の変形例を考え得るが、それらはいずれも本発明の技術的範囲に包含される。特許請求の範囲の構成要素の後に記載した括弧内の番号は、図面の部品番号に対応し、発明の容易なる理解の為に付したものであり、発明を限定的に解釈するために用いてはならない。また、同一番号でも明細書と特許請求の範囲の部品名は必ずしも同一ではない。これは上記した理由による。用語「又は」に関して、例えば「A又はB」は、「Aのみ」、「Bのみ」ならず、「AとBの両方」を選択することも含む。特に記載のない限り、装置又は手段の数は、単数か複数かを問わない。
10:最低レベル層
10’:仮想化されたハードウエア資源
11:第2層
12:第3層
13:最高レベル層
14:制御信号
15:データ
16:層
10’:仮想化されたハードウエア資源
11:第2層
12:第3層
13:最高レベル層
14:制御信号
15:データ
16:層
Claims (19)
- オペレーティング・システム(OS)上で実行されるアプリケーションに属するプロセスに挿入される実行可能なピース・オブ・コードを用いて、コンピュータ・システムのハードウエア資源を仮想化する方法において、
前記OSは、前記OS上で実行されるアプリケーション・プログラミング・インターフェース(API)を含み、
(A)アプリケーションに属するプロセスから、前記プロセスとハードウエア資源との間に生成されるデータフローの管理に関連するAPIサービスへのコールをインターセプトするステップと、
前記ステップ(A)は、(A1)前記データフローの管理に関連するAPIサービスを前記ピース・オブ・コードに含まれる対応するサービスに向けるステップを含み、
(B)前記データフローを、前記ステップ(A)に基づいて、前記ピース・オブ・コードで管理するステップと、
を有し、
前記APIサービスは、ファンクション又はオブジェクト・メソッドであり、
前記ステップ(A1)は、
(A11)メモリ内に、向け直すべきAPIファンクション又はオブジェクト・メソッドを含むダイナミック・リンク・ライブラリを記憶するステップと、
(A12)前記記憶されたダイナミック・リンク・ライブラリに含まれるAPIファンクション又はオブジェクト・メソッド用のファンクション・ポインタ・テーブル内で、向け直すべきAPIファンクション又はオブジェクト・メソッドが記憶されている初期メモリアドレスを、前記ピース・オブ・コードに含まれる対応するファンクション又はオブジェクト・メソッドが記憶されている初期メモリアドレスで、置換するステップと
を含み、
前記ステップ(A12)は、前記APIサービスがオブジェクト・メソッドの場合には、向け直すべきメソッドに関連するオブジェクトが初めて形成されたと確認された後に、行われる
ことを特徴とするコンピュータ・システムのハードウエア資源を仮想化する方法。 - 前記APIサービスはファンクションであり、前記ステップ(A1)は、
(A13)第1変数内に、向け直すべきファンクションが記憶されている初期メモリ・アドレスを記憶するステップ、
を有することを特徴とする請求項1記載の方法。 - 前記APIサービスはオブジェクト・メソッドであり、前記ステップ(A1)は、
(A14)第2変数内に、向け直すべきオブジェクト・メソッドが記憶されている初期メモリ・アドレスを記憶するステップ、
を有することを特徴とする請求項1記載の方法。 - 前記ステップ(A)は、
(A2)前記プロセスから前記データフローの管理に関連するAPIサービスに対応するピース・オブ・コードに含まれるサービスへのコールを受領するステップ、
を有することを特徴とする請求項1記載の方法。 - 前記アプリケーションに属するプロセスはスリープ状態で初期化され、
(C)スリープ状態にあるアプリケーションに属するプロセスの実行を再開するステップを更に有することを特徴とする請求項1記載の方法。 - 前記ステップ(B)は、
(B1)前記ハードウエア資源に対応する仮想化されたハードウエア資源が生成されたか否かを認証するステップと、前記ステップ(B1)で生成されたと認証されない場合には、
(B2)仮想化されたハードウエア資源を生成するステップと、
を有することを特徴とする請求項1記載の方法。 - 前記ステップ(B2)は、
(B21)前記ハードウエア資源に関連する仮想化されたバッファを生成するステップ
を有することを特徴とする請求項6記載の方法。 - 前記ステップ(B2)は、
(B22)前記ハードウエア資源の挙動をエミュレートするスレッド・オブ・エクセキューションを生成するステップ
を有することを特徴とする請求項6記載の方法。 - 前記ステップ(B)は、
(B3)前記仮想化されたバッファ内に、前記プロセスからハードウエア資源に送られたデータを記憶するステップ
を有することを特徴とする請求項7記載の方法。 - 前記ステップ(B)は、
(B4)前記ハードウエア資源の挙動をエミュレートする生成されたスレッド・オブ・エクセキューションを所定の間中断するステップと、
(B5)前記仮想化されたバッファ内に記憶されているデータを獲得するステップと、
(B6)前記獲得されたデータを処理するステップと
を有することを特徴とする請求項9記載の方法。 - 前記ステップ(B)は、
(B7)前記処理されたデータを第1のリモートコンピュータ・システムに送信するステップ
を有することを特徴とする請求項10記載の方法。 - (D)仮想化されたハードウエア資源から前記アプリケーションに属するプロセスに向けて生成されたデータフローを管理するステップ
を更に有することを特徴とする請求項6記載の方法。 - 前記ステップ(D)は、
(D1)データを第2のリモートコンピュータ・システムから受領するステップと、
(D2)前記受領したデータを処理するステップと、
(D3)前記処理されたデータを仮想化されたバッファ内に記憶するステップと
を有することを特徴とする請求項12記載の方法。 - 前記ステップ(A)は、
(A3)前記アプリケーションに属するプロセスから前記ハードウエア資源から前記プロセスに向けて生成されたデータフローの管理に関連するAPIサービスへのコールをインターセプトするステップ
を有し、
前記ステップ(D)は、
(D4)仮想化されたバッファ内に記憶されたデータを取り出すステップと、
(D5)前記取り出されたデータをプロセスに送るステップと
を有することを特徴とする請求項13記載の方法。 - 前記ステップ(A)は、
(A4)前記プロセスから、前記データフローの管理に関連するAPIサービスに対応するピース・オブ・コードに含まれるサービスへのコールを受領するステップ、
を有することを特徴とする請求項13記載の方法。 - 前記ステップ(B)は、
(B3)前記ハードウエア資源からプロセスに向けて生成されたデータフローを管理するステップを有し、
前記ステップ(B3)は、
(B31)前記バッファ内にハードウエア資源からのデータが存在するか否かを確認するステップと、
前記ステップでデータの存在が確認された場合には、
(B32)前記データを削除するステップと
を有することを特徴とする請求項13記載の方法。 - メモリとプロセッサとを有し、アプリケーション・プログラミング・インターフェース(API)を含むOSが実行されるコンピュータ・システムにおいて、
前記メモリは、前記アプリケーションに属するプロセスに挿入される実行可能なピース・オブ・コードに対応するプロセッサで実行可能なインストラクションを記憶し、前記インストラクションは、
(A)延期アプリケーションに属するプロセスから、前記プロセスとハードウエア資源との間に生成されるデータフローの管理に関連するAPIサービスへのコールをインターセプトするステップと、
前記ステップ(A)は、(A1)前記データフローの管理に関連するAPIサービスを前記ピース・オブ・コードに含まれる対応するサービスに向けるステップを含み、
(B)前記データフローを、前記ステップ(A)に基づいて、ピース・オブ・コードで管理するステップと、
を実行する機能を有し、
前記APIサービスは、ファンクション又はオブジェクト・メソッドであり、
前記ステップ(A1)は、
(A11)メモリ内に、向け直すべきAPIファンクション又はオブジェクト・メソッドを含むダイナミック・リンク・ライブラリを記憶するステップと、
(A12)前記記憶されたダイナミック・リンク・ライブラリに含まれるAPIファンクション又はオブジェクト・メソッド用のファンクション・ポインタ・テーブル内で、再方向づけられるべきAPIファンクション又はオブジェクト・メソッドが記憶されている初期メモリアドレスを、前記ピース・オブ・コードに含まれる対応するファンクション又はオブジェクト・メソッドが記憶されている初期メモリアドレスで、置換するステップと
を含み、
前記ステップ(A12)は、APIサービスがオブジェクト・メソッドの場合には、向け直すべきメソッドに関連するオブジェクトが初めて形成されたと確認された後に、行われることを特徴とするコンピュータ・システム。 - 前記OS上で複数のアプリケーションが実行され、前記メモリ内に、実行中の各アプリケーション用のピース・オブ・コードに対応するインストラクションを記憶する
ことを特徴とする請求項17記載のコンピュータ・システム。 - コンピュータ・システム上で実行されるOS上で実行され、コンピュータ・システムに関連するハードウエア資源を仮想化する方法を実行するインストラクションを含む実行可能なピース・オブ・コードを含むコンピュータ・プログラムを記憶する記憶媒体において、前記方法は、
(A)アプリケーションに属するプロセスから、前記プロセスとハードウエア資源との間に生成されるデータフローの管理に関連するAPIサービスへのコールをインターセプトするステップと、
前記ステップ(A)は、(A1)前記データフローの管理に関連するAPIサービスを前記ピース・オブ・コードに含まれる対応するサービスに向けるステップを含み、
(B)前記データフローを、前記ステップ(A)に基づいて、ピース・オブ・コードで管理するステップと、
を有し、
前記APIサービスは、ファンクション又はオブジェクト・メソッドであり、
前記ステップ(A1)は、
(A11)メモリ内に、向け直すべきAPIファンクション又はオブジェクト・メソッドを含むダイナミック・リンク・ライブラリを記憶するステップと、
(A12)前記記憶されたダイナミック・リンク・ライブラリに含まれるAPIファンクション又はオブジェクト・メソッド用のファンクション・ポインタ・テーブル内で、再方向づけられるべきAPIファンクション又はオブジェクト・メソッドが記憶されている初期メモリアドレスを、前記ピース・オブ・コードに含まれる対応するファンクション又はオブジェクト・メソッドが記憶されている初期メモリアドレスで、置換するステップと
を含み、
前記ステップ(A12)は、APIサービスがオブジェクト・メソッドの場合には、向け直すべきメソッドに関連するオブジェクトが初めて形成されたと確認された後に、行われることを特徴とするコンピュータ・プログラムを記憶する記憶媒体。
Applications Claiming Priority (3)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
ES201230581A ES2439804B1 (es) | 2012-04-19 | 2012-04-19 | Procedimiento, sistema y pieza de código ejecutable para virtualizar un recurso de hardware asociado a un sistema informático |
ESP201230581 | 2012-04-19 | ||
PCT/ES2013/070247 WO2013156654A1 (es) | 2012-04-19 | 2013-04-18 | Procedimiento, sistema y pieza de código ejecutable para virtualizar un recurso de hardware asociado a un sistema informático |
Publications (1)
Publication Number | Publication Date |
---|---|
JP2015517158A true JP2015517158A (ja) | 2015-06-18 |
Family
ID=49382969
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP2015506269A Pending JP2015517158A (ja) | 2012-04-19 | 2013-04-18 | コンピュータ・システムのハードウエア資源を仮想化する方法とシステムと実行可能なピース・オブ・コード |
Country Status (9)
Country | Link |
---|---|
US (1) | US9176757B2 (ja) |
EP (1) | EP2840497B1 (ja) |
JP (1) | JP2015517158A (ja) |
KR (1) | KR102059219B1 (ja) |
CN (1) | CN104380256B (ja) |
DK (1) | DK2840497T3 (ja) |
ES (2) | ES2439804B1 (ja) |
HU (1) | HUE049385T2 (ja) |
WO (1) | WO2013156654A1 (ja) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022269870A1 (ja) * | 2021-06-24 | 2022-12-29 | 日本電信電話株式会社 | リソース動的割り当て装置、リソース動的割り当てプログラム、リソース動的割り当てシステム、および、リソース動的割り当て方法 |
Families Citing this family (16)
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 |
US9424429B1 (en) | 2013-11-18 | 2016-08-23 | Amazon Technologies, Inc. | Account management services for load balancers |
WO2016048992A1 (en) | 2014-09-22 | 2016-03-31 | American Greentings Corporation | Live greetings |
US10425459B2 (en) * | 2015-03-27 | 2019-09-24 | Intel Corporation | Technologies for a seamless data streaming experience |
US9971542B2 (en) * | 2015-06-09 | 2018-05-15 | Ultrata, Llc | Infinite memory fabric streams and APIs |
US11334368B2 (en) | 2015-09-24 | 2022-05-17 | Hewlett Packard Enterprise Development Lp | Process and thread launch features |
CN107045474B (zh) * | 2016-02-05 | 2020-12-04 | 阿里巴巴集团控股有限公司 | 一种Fuzz测试中的程序流跟踪方法及装置 |
CN106601263A (zh) * | 2016-12-01 | 2017-04-26 | 武汉斗鱼网络科技有限公司 | 一种获取声卡和麦克风声音并进行混音的方法及系统 |
CN108958905B (zh) * | 2017-05-25 | 2024-04-05 | 北京忆恒创源科技股份有限公司 | 嵌入式多核中央处理器的轻量级操作系统 |
CN107213634B (zh) * | 2017-06-13 | 2020-07-07 | 北京凯罗天下科技有限公司 | 一种游戏用户管理方法、游戏服务器及系统 |
CN109814939B (zh) * | 2017-11-20 | 2021-10-15 | 华为技术有限公司 | 一种动态加载方法、目标文件的制作方法及装置 |
CN108566424B (zh) * | 2018-04-11 | 2021-04-20 | 深圳市腾讯网络信息技术有限公司 | 基于服务器资源消耗预测的调度方法、装置和系统 |
US10904325B2 (en) * | 2018-05-04 | 2021-01-26 | Citrix Systems, Inc. | WebRTC API redirection with screen sharing |
CN110275722B (zh) * | 2019-06-21 | 2023-08-08 | 北京百度网讯科技有限公司 | 用于升级应用的方法、装置、设备和存储介质 |
CN111223036B (zh) * | 2019-12-29 | 2023-11-03 | 广东浪潮大数据研究有限公司 | 一种gpu虚拟化共享方法、装置及电子设备和存储介质 |
Family Cites Families (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2001037095A1 (en) * | 1999-11-14 | 2001-05-25 | Clicknet Software, Inc. | Method and system for intercepting an application program interface |
IL132916A (en) * | 1999-11-14 | 2004-02-08 | Mcafee Inc | Method and system for intercepting an application program interface |
US6990663B1 (en) * | 2000-06-08 | 2006-01-24 | International Business Machines Corporation | Hypervisor virtualization of OS console and operator panel |
US6832460B2 (en) * | 2003-02-18 | 2004-12-21 | Robert E. Fligg | Method and apparatus for insulating building roofs from above |
USH2202H1 (en) | 2004-04-28 | 2007-09-04 | Symantec Corporation | Method and apparatus to dynamically hook runtime processes without interrupting the flow of execution |
US8606891B2 (en) * | 2004-09-10 | 2013-12-10 | Freestyle Technology Pty Ltd | Client processor device for building application files from file fragments for different versions of an application |
US20060020940A1 (en) * | 2004-07-08 | 2006-01-26 | Culter Bradley G | Soft-partitioning systems and methods |
US7757231B2 (en) * | 2004-12-10 | 2010-07-13 | Intel Corporation | System and method to deprivilege components of a virtual machine monitor |
US20110157196A1 (en) * | 2005-08-16 | 2011-06-30 | Exent Technologies, Ltd. | Remote gaming features |
US7844442B2 (en) | 2005-08-16 | 2010-11-30 | Exent Technologies, Ltd. | System and method for providing a remote user interface for an application executing on a computing device |
US8116312B2 (en) * | 2006-02-08 | 2012-02-14 | Solarflare Communications, Inc. | Method and apparatus for multicast packet reception |
DE112009002168A5 (de) * | 2008-09-09 | 2012-03-15 | Kace Networks, Inc. | Auslieferung und Management von virtuellen Containern |
KR20110051028A (ko) * | 2009-11-09 | 2011-05-17 | 주식회사 케이티 | 보안 기능이 구비된 클라우드 컴퓨팅 시스템 |
US20130061012A1 (en) * | 2010-05-30 | 2013-03-07 | Yoshio Turner | Virtual machine code injection |
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 |
-
2012
- 2012-04-19 ES ES201230581A patent/ES2439804B1/es active Active
-
2013
- 2013-04-18 DK DK13778383.3T patent/DK2840497T3/da active
- 2013-04-18 WO PCT/ES2013/070247 patent/WO2013156654A1/es active Application Filing
- 2013-04-18 JP JP2015506269A patent/JP2015517158A/ja active Pending
- 2013-04-18 ES ES13778383T patent/ES2798184T3/es active Active
- 2013-04-18 HU HUE13778383A patent/HUE049385T2/hu unknown
- 2013-04-18 US US14/395,479 patent/US9176757B2/en active Active
- 2013-04-18 KR KR1020147032268A patent/KR102059219B1/ko active IP Right Grant
- 2013-04-18 CN CN201380031256.2A patent/CN104380256B/zh active Active
- 2013-04-18 EP EP13778383.3A patent/EP2840497B1/en active Active
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2022269870A1 (ja) * | 2021-06-24 | 2022-12-29 | 日本電信電話株式会社 | リソース動的割り当て装置、リソース動的割り当てプログラム、リソース動的割り当てシステム、および、リソース動的割り当て方法 |
Also Published As
Publication number | Publication date |
---|---|
CN104380256B (zh) | 2017-09-12 |
EP2840497B1 (en) | 2020-03-18 |
KR20140147140A (ko) | 2014-12-29 |
US20150135200A1 (en) | 2015-05-14 |
CN104380256A (zh) | 2015-02-25 |
EP2840497A4 (en) | 2015-11-11 |
HUE049385T2 (hu) | 2020-09-28 |
US9176757B2 (en) | 2015-11-03 |
WO2013156654A1 (es) | 2013-10-24 |
ES2439804A1 (es) | 2014-01-24 |
EP2840497A1 (en) | 2015-02-25 |
KR102059219B1 (ko) | 2019-12-24 |
ES2798184T3 (es) | 2020-12-09 |
ES2439804B1 (es) | 2014-10-29 |
DK2840497T3 (da) | 2020-06-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP2015517158A (ja) | コンピュータ・システムのハードウエア資源を仮想化する方法とシステムと実行可能なピース・オブ・コード | |
US11347530B2 (en) | Method, apparatus and system for transparent unification of virtual machines | |
US9092627B2 (en) | Apparatus and method for providing security information in virtual environment | |
KR101740327B1 (ko) | 소프트웨어 가상화를 이용하여 소프트웨어 서비스를 제공하기 위한 장치, 시스템 및 그 방법 | |
US9606629B2 (en) | Systems and methods for gesture interaction with cloud-based applications | |
US7735081B2 (en) | Method, apparatus and system for transparent unification of virtual machines | |
RU2436149C2 (ru) | Мигрирование виртуальной машины, которая владеет ресурсом, таким, как аппаратное устройство | |
RU2406128C2 (ru) | Система и способ для виртуализации графических подсистем | |
KR101506683B1 (ko) | 다수개의 운영 시스템을 지원하는 장치 및 방법 | |
US20140365910A1 (en) | Systems and methods for sharing and switching between personas on mobile technology platforms | |
CN110032413B (zh) | 一种桌面虚拟化方法、相关设备及计算机存储介质 | |
US20150081764A1 (en) | Remote Virtualization of Mobile Apps | |
JP2008503015A (ja) | 複数クライアントによる単一物理デバイスの共有 | |
US20070198243A1 (en) | Virtual machine transitioning from emulating mode to enlightened mode | |
WO2013036959A1 (en) | Systems and methods for gesture interaction with cloud-based applications | |
JP2015517159A (ja) | コンピュータ・システムのハードウエア資源の使用を制御する方法と、システムとピース・オブ・コード方法 | |
WO2023035619A1 (zh) | 一种场景渲染方法、装置、设备及系统 | |
US11487559B2 (en) | Dynamically switching between pointer modes | |
CN112631736A (zh) | 云主机的音频数据串流方法、装置、设备及存储介质 | |
JP5066112B2 (ja) | 情報処理装置 |