JP2010267291A - コンピュータ・システム、コンピュータ読取り可能な記憶媒体および同媒体を動作させる方法、およびコンピュータ・システムを動作させる方法 - Google Patents

コンピュータ・システム、コンピュータ読取り可能な記憶媒体および同媒体を動作させる方法、およびコンピュータ・システムを動作させる方法 Download PDF

Info

Publication number
JP2010267291A
JP2010267291A JP2010156628A JP2010156628A JP2010267291A JP 2010267291 A JP2010267291 A JP 2010267291A JP 2010156628 A JP2010156628 A JP 2010156628A JP 2010156628 A JP2010156628 A JP 2010156628A JP 2010267291 A JP2010267291 A JP 2010267291A
Authority
JP
Japan
Prior art keywords
code
compiled
execution
thread
computer system
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.)
Granted
Application number
JP2010156628A
Other languages
English (en)
Other versions
JP4783471B2 (ja
Inventor
Wayne Plummer
プラマー,ウェイン
William Thomas Charnell
チャーネル,ウィリアム・トーマス
Stephen Darnell
ダーネル,スティーブン
Blaise Abel Alec Dias
ディアス,ブレイズ・アベル・アレック
Philippa Joy Guthrie
ガスリー,フィリッパ・ジョイ
Jeremy Paul Kramskoy
クラムスコイ,ジェレミー・ポール
Jeremy James Sexton
セクストン,ジェレミー・ジェームズ
Michael John Wynn
ウィン,マイケル・ジョン
Keith Rautenbach
ローテンバッハ,キース
Stephen Paul Thomas
トーマス,スティーブン・ポール
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Myriad Group AG
Original Assignee
Myriad Group AG
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 Myriad Group AG filed Critical Myriad Group AG
Publication of JP2010267291A publication Critical patent/JP2010267291A/ja
Application granted granted Critical
Publication of JP4783471B2 publication Critical patent/JP4783471B2/ja
Anticipated expiration legal-status Critical
Expired - Lifetime 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/48Program initiating; Program switching, e.g. by interrupt
    • G06F9/4806Task transfer initiation or dispatching
    • G06F9/4812Task transfer initiation or dispatching by interrupt, e.g. masked
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/36Preventing errors by testing or debugging software
    • G06F11/3604Software analysis for verifying properties of programs
    • G06F11/3612Software analysis for verifying properties of programs by runtime analysis
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/0223User address space allocation, e.g. contiguous or non contiguous base addressing
    • G06F12/023Free address space management
    • G06F12/0253Garbage collection, i.e. reclamation of unreferenced memory
    • G06F12/0269Incremental or concurrent garbage collection, e.g. in real-time systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/443Optimisation
    • G06F8/4441Reducing the execution time required by the program code
    • G06F8/4442Reducing the number of cache misses; Data prefetching
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/44Encoding
    • G06F8/445Exploiting fine grain parallelism, i.e. parallelism at instruction level
    • 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/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4482Procedural
    • G06F9/4484Executing subprograms
    • 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/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution
    • 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/448Execution paradigms, e.g. implementations of programming paradigms
    • G06F9/4488Object-oriented
    • G06F9/449Object-oriented method invocation or resolution
    • G06F9/4491Optimising based on receiver type
    • 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/44Arrangements for executing specific programs
    • G06F9/455Emulation; Interpretation; Software simulation, e.g. virtualisation or emulation of application or operating system execution engines
    • G06F9/45504Abstract machines for programme code execution, e.g. Java virtual machine [JVM], interpreters, emulators
    • G06F9/45516Runtime code conversion or optimisation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2209/00Indexing scheme relating to G06F9/00
    • G06F2209/48Indexing scheme relating to G06F9/48
    • G06F2209/481Exception handling
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99931Database or file accessing
    • Y10S707/99932Access augmentation or optimizing
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99952Coherency, e.g. same view to multiple users
    • Y10S707/99953Recoverability
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10TECHNICAL SUBJECTS COVERED BY FORMER USPC
    • Y10STECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y10S707/00Data processing: database and file management or data structures
    • Y10S707/99951File or database maintenance
    • Y10S707/99956File allocation

Abstract

【課題】要求される断片のみをコンパイルするので、コンパイルが更に効率的に行われる。また、システムのメモリは、ほとんど実行されないコードのコンパイルされたバージョンで満たす必要がない。
【解決手段】方法がファイナルであると仮定する第1のクラスへの呼出しをコンパイリング・システムによりコンパイルするステップと、第2のクラスの出現を決定し、そしてさらに第2のクラスが第1のクラスの方法のインスタンスを含むか否かを決定するステップと、第2のクラスにおける方法のインスタンスが第1のクラスの方法をオーバーライドしているか否かを決定するステップと、第2のクラスにおける方法のインスタンスが第1のクラスの方法をオーバーライドしているか否かのさらなる決定に応答して第1のクラスの方法の前記コンパイルされたコードを変更するステップと、変更されたコンパイルされたコードに従って前記コンピュータ・システムを動作するステップとを含む。
【選択図】図9A

Description

本発明は、大半の一般的特質において、コンピュータ・システムおよびこのシステムを動作する方法に関し、およびかかるシステム内部の種々の動作の性能における改善に関する。本発明はまた、コンピュータ読取可能な記憶媒体にも関する。コンピュータ・システムは、仮想マシンであり、あるいはこれを含み、あるいはその一部であり得る。コンピュータ読取可能な媒体は、コンピュータ・システム/仮想マシンをプログラミングするための実行可能なコードあるいは他の命令を含み得る。
最近の数年間で、オブジェクト指向言語として知られたものに向かうプログラミング言語における発展があった。最近の発展において、各々がオブジェクトに関する1組のデータあるいは属性、ならびにファンクションすなわちサブルーチンである、オブジェクトとそのデータについて実施することができるいわゆる「方法」に関する情報をみずから保持する「オブジェクト」としての概念が認められる。これは、コンピューティングおよび(または)プログラミングの当業者にはよく知られている。
コンピュータの出現およびその普及および利用可能性における急激な進展は、IBM−DOSあるいはMS−DOSあるいはMS−Windows(登録商標)の諸アプリケーションを走らせるIBMのPCおよびIBM互換PC、独自のアップル・システムを走らせるアップルのマシン、あるいは独自のユニックス・オペレーティング・システムを走らせる種々のユニックス・マシンのような異なる形式のシステムの自主的な開発をもたらした。独立的なシステムの急増は、1つのフォーマットのみで利用可能であり、かつアプリケーションが意図されなかったマシン上では走ることができない有効なアプリケーションをもたらした。
このような状況の下では、プログラマは、「外部」アプリケーションが、ユーザに関するかぎり、エミュレーションが見えないような方法で良好に走らせることができるように、ホスト・コンピュータのオペレーティング・システムを「エミュレート」するソフトウエアを創り出した。換言すれば、ユーザは、自分がしていることを知ることなく、例えばユニックス・ベースのオペレーティング・システムを用いてウインドウズ・ベースのアプリケーションの正常なファンクションの全てをユニックス・マシン上で実施することができる。
このような種類の特に有名な製品は、連合王国(英国)のHigh Wycombeおよび米合衆国カルフォルニァ州Santa ClaraのInsignia Solutionsにより開発され、「Powermac用SoftWindows(登録商標) 2.0」なる名称で知られる製品である。このようなソフトウエアは、物理的なマッキントッシュ・コンピュータが、Intelの80486DXプロセッサおよび80487数学演算用コプロセッサにメモリ、2台のハード・ディスク、IBMスタイルのキーボード、カラー・ディスプレイおよびPCタイプのコンピュータの最近のバージョンに通常見出される他の特徴を備えたPCをエミュレートすることを可能にする。
更にまた、相互に自由に開発されオペレーティング・システムとプロトコル間の非互換性をもたらしたコンピュータのような簡単な電子装置、通信および制御システムに対する消費者による増加の一途をたどる需要が存在する。例えば、ビデオ・プレーヤ、テープ・プレーヤおよびCDプレーヤに対するリモート・コントロール装置は、「再生」、「前送り」、「逆送り」、「休止」などが共通する似たようなファンクションを持つが、ユーザにより操作されるリモート・コントロールすなわちコマンダ間の送信コードは、同じ製造者により作られた異なる種類の装置間、あるいは異なる製造者により作られた同じ種類の装置間では互換性がない。例えば、装置において使用される特定のハードウエアのいかんを問わない「再生」コマンドに基く正しい「再生」コードを生じ得る装置内のソフトウエアを備えるという明らかな利益が存在しよう。このようなソフトウエアは、「仮想マシン」として一般に知られる。
他の用途および応用は無数にあり、例えば、テレビジョンの送信、家庭用のリモート機器、車搭載用ナビゲーション・システム、およびいわゆる「パーソナル・ディジタル・アシスタント」のデコード用セットトップボックスである。例えば、自動車電話は、サービス・プロバイダからダウンロードされるシステムのアップグレードを受けることができる。
エミュレーション・ソフトウエア・パッケージは、とりわけ汎用ではなく専用のものであるという幾つかの特徴が共通する傾向がある。これらのパッケージは、急激な開発地域において最も利益があり、製造者がコストを節減することを可能にするという明白な利点を有する。特に、これらパッケージは、物理的なマシンからソフトウエアを分離することができ、すなわち、ソフトウエアの作用の変更を実現するのにマシンの固有ソフトウエアに立入ることを必要とすることなく、エミュレート・ソフトウエアによって物理的マシンにおけるソフトウエアの作用を変えることができる。
先に述べた実現の一部において用いられる特定のオブジェクト指向言語は、ジャバ(Java;Sun Microsystems社の登録商標)として知られる言語である。下記の実現の一部は、改善された性能および(または)低減したメモリ容量のゆえに、現在可能なより小型の装置においてジャバを用いることを可能にする。組込まれるソフトウエアに対して計画される将来の用途(仮想マシン)は、身に着けられるコンピュータ、事務機器、家庭用機器、およびインテリジェントな家屋および自動車を含む。
仮想マシン、特にオブジェクト指向言語を用いるマシンの使用における余裕および利点があることは認められるが、システム内で行われる動作の一部を最適化することが重要でありかつ有利である領域が当然のこととして存在する。これらは、メモリ要求を減らし、動作速度を増し、別のシステムに組込まれるときシステムの「透過」を改善することを含む。本文に述べる本発明の主たる目的の1つは、メモリの制約内でできるだけ迅速に、例えば10、5、2Mバイト、更には1Mバイト以下で動作するよう最適化される仮想マシンを提供することである。このような制約は、例えば、コスト(またはサイズ)が主な制約となる簡単な電子装置その他の装備に適用されがちである。
適切な場合に、純粋に事例として、(上記の改善を略図的に示す)添付図面が参照される。
図1は仮想マシンの一定の構成要素を示す。
全般的考察
仮想マシンの望ましい実施の形態の特定例について、図1に関して次に記述する。
仮想マシン20は、機器22の特定アイテムに組込まれる実行可能なコードである。このマシンは、ハードウエアおよびオペレーティング・システムからある程度の独立性を提供することができる。仮想マシンは、典型的に、下記の特徴のどれか、一部あるいは全てを含み得る。すなわち、オペレーティング・エンジン、ルーチンのライブラリ、1つ以上のインタプリタ、1つ以上のコンパイラ、複数の命令シーケンスを記憶する記憶手段、キュー管理手段、およびバッファ管理手段である。
仮想マシンは、一方(「ハイレベル」側)では1つ以上のアプリケーション24に結合され、他方(「ローレベル」側)ではおそらくは種々の中間的な論理ユニットを介して機器のアイテムのハードウエア26へ結合される。ハードウエアは、種々のポートすなわちインターフェース28(おそらくは、ユーザ入力を受入れるためのインターフェース)を含むものと見なすことができ、仮想マシンはこれらポートすなわちインターフェースからイベントを受取る。ハードウエアはまた、1つ以上のプロセッサ/制御手段30およびメモリ32を含む。
参照事項1−コンピュータ・システム、コンピュータ読取可能な記憶媒体およびこの媒体を動作させる方法、および前記システムを動作させる方法
本発明は、コンピュータ・システムに関し、かつコンピュータ・システムを動作させる方法に関する。特に、本発明は、実行のためのコードをコンパイルするコンパイラを含むコンピュータ・システムに関する。望ましい実施の形態において、本発明は、ドミナント・パスのダイナミック・コンパイル法に関する。
本発明は、望ましくは、ランタイムのコンパイル技術によるオブジェクト指向言語のランタイム表示の最適化に関し、かつ望ましくは、ランタイムのコンパイル技術によるオブジェクト指向言語のランタイム表示の最適化に関する。本発明の特質は、仮想マシン、特にジャバ仮想マシンの最適化された実行に関するものである。
本発明は、特に、トレース・スケジューリング、最適化コンパイラ、ダイナミック・コンパイル、プロファイルで案内される最適化、ジャスト・インタイム・コンパイラ、およびジャバVM仕様に関するものである。
例えばジャバ言語を用いる一部のアプリケーションにおいて、コードは、インタプリタを用いる直接的に解釈される。インタプリタは、実行中にコードを翻訳し、これによりコードの解釈は非常に遅くなり得る。従って、このような実行は一般に解釈より非常に速いので、コンパイルされたコードの実行が選好される。
標準的なコンパイラは、アプリケーションの全てのコードを翻訳して、実行のためのコードの完全なコンパイル・ランタイム解釈を行う。このような標準的なコンパイルは、特にコンパイル・コードの最適化が要求される場合に時間を要し、通常はコードの実行前にオフラインで行われる。
ジャスト・インタイム(JIT)・コンパイラは、コードのオンラインのコンパイルを行う。例えば、コードの実行時に最初に1つの方法に遭遇するとき、JITコンパイラを用いると、実行は停止され、JITコンパイラはこの方法全体をコンパイルして可能なかぎり最適化する。このように、JITコンパイラは、使用されそうにない方法の部分を含む方法全体をコンパイルする。このようなコンパイルは、コンパイルにおける時間を浪費し、コードのコンパイルされたバージョンがメモリにおけるスペースを費やす。このため、メモリ使用の最小化が重要である場合に、組込まれるアプリケーションに対する特定の問題を生じ得る。
一般に、コンピュータ言語のランタイム表示のコンパイラ、特にいわゆるジャスト・インタイム(JIT)・コンパイラは、方法全体の表示を一時にコンパイルするか、あるいは比較的大きなユニット(例えば、一時に1ファイルあるいは多くのクラスの1つ)の表示をコンパイルする。アプリケーションの大きな部分は、しばしば例外的な状況の取扱い、すなわちほとんど実行されないコードの取扱いに関する。典型的に、コンパイラは、コンパイルが完了するまでアプリケーションの更なる進行を阻害する。
従って、従来のコンパイル法は、ほとんど実行されないコードをコンパイルする時間を費消し、コンパイルされた結果は、ほとんど実行されないコードが存在しない場合には必要でなかったスペースを占有する。最適化の機会は、ほとんど実行されないコードによる制御パスに対応しなければならないことよりしばしば減殺される。
アプリケーションの前の実行からのプロファイル入力を用いるオフライン・コンパイラは、しばしば、アプリケーションの頻繁に実行されるパスの最適化が可能であり、後者の問題を軽減する。しかし、これらのコンパイラは、アプリケーションによる各パスのコンパイルを依然として行わねばならず、アプリケーションがプロファイルの実行について異なる挙動を呈するときは容易に応答することができない。
JITコンパイラにおいては、方法に対する「呼出し」命令に遭遇するとき、制御がJITコンパイラへ送られ、この方法が前にコンパイルされなかったならば、コンパイルされたバージョンが生成される。コンパイルされたバージョンは、次に、方法の以降の実行に対して使用される。JITコンパイラに利用可能な予定メモリがいったん使用されると、新たな方法のコンパイルは可能でなく、JITコンパイラの使用は停止する。その後見出された方法が解釈され、これにより非コンパイルコードの以降の実行速度を低下させる。
コンパイラに利用可能なメモリ量は、使用されるコンピュータ・システムに応じて変化する。コンパイラに割当てられた全メモリは、要求される内部データ構造を構築するためおよびレジスタの割当てのためにコンパイラに割当てられるコード・バッファ・スペースを含んでいる。このメモリは、通常はコンパイルに先立ちコンパイラのため保留されている。
JITコンパイラは、多量のメモリを備えるデスクトップ・コンピュータ・システムにおいて使用されるように設計された。コンパイラへ割当てられるメモリは一般に、実際にコンパイラに利用可能なバッファ・スペース量が制限されないほど大きい。
しかし、組込みシステムの場合は、コンパイラへ割当てられるメモリ量は、70ないし80Kであろう。このことは、明らかに、コンパイルされるコード量に制約を課す。
要約すれば、当該出願に記述される本発明は、下記特徴のいずれか、あるいは一部、あるいは全てを何らかの組合わせで含んでいる。すなわち、
1.方法全体ではなく主パスに対するコードの断片をコンパイルする
2.実行履歴を用いて、アプリケーションを介するどのパスが主パスであるかを判定する
3.フォールバック・インタプリタを用いて、あまり頻繁に実行されないコードを解釈する
4.アプリケーションの実行時にコードを要求と同時にコンパイルできるオンライン・コンパイルを備える。システムは、優先順位が適用される別のスレッドとして走る
5.コードの新たな断片を実行状態のマルチスレッド型システムへ組込む能力を備える
6.実行状態のマルチスレッド型システムからコード断片を除去することを支援する
7.システム実行中にダイナミック・コンパイラにより使用されるメモリ量をいつでも制限する。
本願に記述される本発明は、とりわけ、オンライン・コンパイルの性能上のインパクトを低減し、アプリケーションを介する主パスに対して最適化されるコードを生成し、時間およびメモリの制限内でコードの良好な最適化を可能にし、ほとんど実行されないコンパイルされたコードの格納オーバーヘッドを低減し、マルチスレッド型コンピュータ・システムにおけるアプリケーションの応答性を高め、コンパイラ自身により使用されるメモリ量を低減することを目的とする。
本発明によれば、アプリケーションのコードをコンパイルするためのコンパイラを含むコンピュータ・システムが提供され、このコンパイラはコードの断片をコンパイルするように構成される。
方法全体ではなくコードの断片のみをコンパイルすることにより、それほど必要でない断片はコンパイルしないままにしながら、コードの最も望ましいセクションのみをコンパイルすることが可能になる。
このような方法により、要求される断片のみをコンパイルするので、コンパイルが更に効率的に行われる。また、システムのメモリは、ほとんど実行されないコードのコンパイルされたバージョンで満たす必要がない。
コードの断片に対する参照が行われる場合、方法全体より少ないセクションを表わすコードの一部を参照することが望ましい。コードの断片は、コードの1つ以上のブロックを含むことが望ましい。コードのコンパイルの最小単位がブロックであることが望ましい。
本発明の特に望ましい特徴は、コードの断片がコードの主パスの断片であることである。
主パスの断片が、関連コードを介する望ましい実行ルートを表わす多数のブロックからなる断片を含むことが理解されよう。例えば、コードのセクションが条件付き分岐を介する場合、分岐によるコードの反復実行時に、分岐を介する1つのパスは分岐を介する別のパス上で選好されやすい。分岐を介する選好ルートと関連するコードの断片は、主パスの断片であると見なされることが望ましい。
以下に示すように、ある場合には、分岐を介する別のそれほど選好されないルートもまた、主パスであり得る。
本発明の望ましい実施の形態においては、コードの主パスの断片は、頻繁に実行されるコードを含む。主パスは、頻繁でなく実行されるコードは含まないことが望ましい。このような頻繁でなく実行されるコードは、例えば、頻繁でなく遭遇する例外を処理するためのコードを含む。
主パスのみをコンパイルすることにより、本発明の望ましい実施の形態似よれば、ほとんど実行されないコンパイルされたコードを格納する格納オーバーヘッドを最小限に抑えることができる。更に、主パスの実行を最適化するため最適化手法を用いることができ、これにより主パスのコードの実行速度を増大する。更に、コンパイラは、ほとんど実行されないコードのコンパイルにオンラインで時間を浪費する必要がなく、従ってシステムにおける全実行速度を改善することができる。
本発明の望ましい実施の形態においては、コードの断片が予め定めた回数より多く実行されるならば、このコードの断片は主パスの一部であると見なされる。
コンピュータ・システムは、コードの断片が実行される、望ましくは解釈される回数を記録するための実行履歴レコーダを更に含むことが望ましい。
実行履歴レコーダは、コードのブロックが解釈される回数を記録することが望ましい。
本発明の望ましい実施の形態において、ならびに特定のブロックが何回解釈されたかの記録において、実行履歴レコーダはまた、ブロックの実行に関する更なる情報、例えばブロックに対する制御の転送がどこからきたか、また制御がブロックからどこへ移転されたかについても記録する。当該レコーダはまた、どのタイプのコードがブロックにおいて実行されたかをも記録する。
閾値に等しいかあるいはこれより大きい回数だけ解釈された断片は、コンパイルが可能であることが望ましい。この閾値は、2.5、更には10より大きいかこれに等しいことが望ましい。
このように、頻繁に実行されるコードのブロックがコンパイルされる。実行されないブロックがコンパイルされることは一般に望ましくない。本発明の望ましい実施の形態においては、実行されないブロックがコンパイルされることはない。
システムは更にコンパイラ・マネージャを含み、コードの断片が閾値の回数だけ解釈されたとき、実行履歴レコーダがコンパイラ・マネージャへ警報するように構成されることが望ましい。本発明の望ましい実施の形態においては、コンパイラ・マネージャが、コンパイルのため頻繁に実行されたブロックのキューを管理する。このキューは、比較的頻繁に実行されたブロックのみがコンパイラによるコンパイルのためのキューから選択されるように管理されることが望ましい。
前記閾値は、動的に同調されることが可能であることが望ましい。コンパイル・マネージャがキューを管理する上例の場合は、このキューが恒久的に長ければ、閾値は、コンパイルのためのキューへ少ない数のブロックが送られるように増加されることが望ましい。
実行履歴レコーダは、アプリケーションの実行中に記録するよう構成されることが非常に望ましい。実行履歴については、システムによるアプリケーションの特定の実行のための主パスの表示が決定されコンパイルされたコードを生成するため用いられるように、オンラインで集められることが望ましい。代替例においては、主パスに関する情報が前の実行から捕捉されるときは、条件が前の実行から変更されてしまい前の実行の主パスがその時の実行の主パスの表示ではないというリスクがある。更にまた、主パスは、実行中に変化することがある。
当該システムは更にアプリケーションの変化を解釈するためのインタプリタを含み、実行履歴レコーダがコードの断片の解釈を記録するように構成されていることが望ましい。インタプリタにとっては、実行履歴の記録を管理することがより効率的である。コードのコンパイルされる断片の実行の記録が実施可能なことは判るが、多くの場合、そのために要求される時間とメモリに関してその値打ちがないと考えられる。
実行履歴レコーダは、第1の部分から第2の部分に対する実行のパスを記録するように構成されることが更に望ましい。望ましくは、第1のブロックから第2のブロックへの実行パスが記録される。望ましい実施の形態においては、実行履歴レコーダは、制御が特定のブロックから移転されたこのブロックの実行のために記録する。このため、特定のブロックに対しては、後続する可能性が最も大きいブロックを決定することができる。このように、特定のブロックからの主パスを決定することができる。この特定ブロックが閾値の回数だけ通りかつコンパイルされるならば、後続する確率が最も高いブロックを通る前記特定ブロックからの主パスをコンパイルすることができる。
このように、コンパイラは、あるパスの断片をコンパイルするように構成されることが望ましい。
当該システムは、全てのコードが実行された断片のみがコンパイル可能であるように構成されることが望ましい。コードのあるセクションは、つねにコンパイルに適するとは限らない。このコードのセクションが実行されなかったならば、実行されなかった部分はコンパイルには適さない「隠れた」コードを含むかもしれない。このような実行されなかったコードのコンパイルは、本発明の望ましい実施の形態においては回避される。
本発明の実施の形態においては、コードのあるブロックが制御転送の全ての過程で実行されなかったならば、このブロックはコンパイルには適さない。その結果、シンボリックな解決法が依然として要求されることになり、インタプリタで実現することに終始する。
主パスのコンパイル・バージョンは、システムの残部に対して唯一の外部からのエントリ点となることが望ましい。従って、コードのコンパイルにおいては仮定がなされる。このため、コンパイラは、唯一の外部からのエントリ点を持つコンパイルされる部分を生じるように構成されることが望ましい。
コードの断片がコンパイルされる場合、コンパイラはコンパイルされるコードを最適化が可能であることが望ましい。このような最適化はインライン処理を含むことになろう。コンパイルされるコードが最適化された場合、特に後で正しくないことが判るか制約が大きすぎるコードを最適化するときに仮定がなされた場合、コンパイルされるコードは特定の最適化あるいは仮定がなされたことを表示するマーカと関連付けられることが望ましい。
本発明の望ましい実施の形態においては、おそらくは種々の仮定を用いて、主パスに対する特に有効なコンパイルされたコードを生じるために、幾つかの最適化が行われる。
当該システムは、フォールバック・インタプリタを含むことが望ましい。このフォールバック・インタプリタは、コードのコンパイル・バージョンが得られるときには用いられず、コンパイル・バージョンが得られず、あるいは例外が生じ、あるいは実行中は仮定が誤りであることを証明するときに用いられることが望ましい。
当該システムは、インタプリタと、コードの実行時にコードの少なくとも第1の部分がコンパイルされたコードから実行されるコンパイルされたコードの少なくとも1つの部分と、インタプリタによりコンパイルされないコードから実行されるコードの少なくとも第2の部分とを含むことが望ましい。当該システムはフォールバック・インタプリタを使用することが望ましい。
このような特徴は、特に重要であり、かつ独立的に提供されよう。このため、本発明の更なる特質は、インタプリタを含み、アプリケーションのコードを更に含むコンピュータ・システムを提供し、コードはコンパイルされるコードの少なくとも1つの部分を含み、これにおいてはコードの実行時に、コードの少なくとも第1の部分がコンパイルされるコードから実行され、かつコードの少なくとも第2の部分がインタプリタにより実行される。
当該インタプリタは、コードのコンパイルされないバージョンが利用可能でない場合か、あるいは、例えばコードのコンパイルにおいてなされる仮定が正しくないことが判る場合に用いることができる。このため、あらゆる場合に使用が「安全」でないおそれがある最適化コードを生じる更に積極的な最適化が可能となる。コンパイルされたバージョンが使用に安全でないケースが認められる場合、フォールバック・インタプリタは、実行に対して甚しい破壊を生じることなく、かつコードの一部の新たなコンパイル・バージョンが生成される間に実行を止める必要もなく、必要なコードの実行を完了することができる。
当該システムは更に、コードの断片のコンパイルされたバージョンがあるかどうかを判定する探索装置を含むことが望ましい。このように、得られるコンパイルされたコードの一部をインタプリタが解釈するときに時間が費やされる可能性が低減される。コンパイラは、オンラインでコンパイルが可能であることが望ましい。このため、コンパイラは、実行中に現われることがある新たな主パスの部分に対してコンパイルされたバージョンを生成することが可能である。
望ましいシステムにおいては、このシステムはマルチスレッド型である。コンパイラは、コードを実行中であるスレッドとは別のスレッド上で走ることが望ましい。
当該コンパイラは、それ自体により、かつコンパイルされた断片により使用されるメモリを制限することができることが望ましい。このため、コンパイラは、コンパイルにより使用されるメモリを制限するためコンパイラにより強化されるメモリ管理ポリシーを有することが望ましい。このことは、メモリが制限される仮想マシンにおいて特に重要である。当該システムはまた、コンパイルされたコードの削除のための削除装置をも含むことが望ましい。このため、新たなコンパイルされるコードに対してメモリを解放するため、それほど頻繁に使用されないコードのコンパイルされたバージョンを削除することが可能である。
本発明は、特に埋込みシステムにおける仮想マシンに対する特定の用途を見出すものである。本発明は、コンパイルされたコードを実行しコードを解釈する選択が存在するシステムにおける一般的用途をも有することが判る。本発明は、特にメモリ制限を持つシステムにおける使用に供される。
本発明はまた、コンピュータ・システムにおけるコードのコンパイルのためのコンパイラを提供し、このコンパイラはコードの断片のコンパイルのため構成される。このコンパイラは、コードの主パスの一部のコンパイルのため構成されることが望ましい。
従って、本発明は、コードの主パス(あるいは、主に近いパス)の一部のみがコンパイルされるアプリケーションのオペレーティング・コードをコンパイルするためのコンパイラを含むコンピュータ・システムを提供する。
当該技術は、性能を強化しかつコンパイルされたスペースを低減するという主要な利点供することができる。この技術は、小さなメモリ用途にとって重要であり、かつメモリ・サイズ、コンパイル時間、および性能間の兼ね合いの混交を含んでいる。
望ましい形態においては、前記技術は、グローバルなデータ・フロー分析のオーバーヘッドもなくループおよびインライン処理に係わる主要な最適化技術の使用をも可能にし、従ってコンパイラ自体がグローバルなデータ・フロー分析は行わないコンパイラよりはるかに速く実行することを可能にする。コンパイラ自体のメモリ使用もまたはるかに低くなる。
先に述べたシステムにおいては、有利なことに、残りのパスが解釈される間にコードを介する全てのパスではなく、実行する主パスのみがコンパイルされる。
オペレーティング・コードがコンパイルされているその実行中の部分であるとき、コードの実行が進行中に主パスがつねに変化しているという意味においてコンパイラがオンラインで動作することは、特に望ましい特徴である。
本発明は更に、コードの断片がコンパイルされるアプリケーションのコードをコンパイルするためのコンパイラを含むコンピュータ・システムを動作させる方法を提供する。
コードの断片が実行される回数は、実行履歴レコーダにより記録されることが望ましい。
望ましい実施の形態においては、システムが更にコンパイラ・マネージャを含み、コードの断片が閾値の回数だけ実行されたとき実行履歴レコーダがコンパイラ・マネージャに警報し、望ましくは実行履歴レコーダがアプリケーションの実行中に記録する。
本発明は、更なる特質において、インタプリタを含み、更にアプリケーションのコードを含むコンピュータ・システムを動作させる方法を提供し、当該コードはコンパイルされたコードの少なくとも1つの部分を含んでおり、当該方法は、コンパイルされたコードからのコードの少なくとも第1の部分を実行し、インタプリタを用いて当該コードの少なくとも第2の部分を実行することを含んでいる。
コンパイラはオンラインでコンパイルすることが望ましい。望ましくはコンパイラに利用可能なメモリが制限され、かつ望ましくは当該方法がコンパイルされたコードを削除するステップを含む。
また、本発明によれば、アプリケーションのオペレーティング・コードをコンパイルするためのコンパイラを含むコンピュータ・システムを動作させる方法が提供され、当該方法はコードの主パスの一部のみをコンパイルすることを含む。
当該方法は、性能を強化し、かつコンピュータ・システムのコンパイルされたスペース要求およびコンパイラ自体のメモリ・スペース要求を低減する。
有利なことに、主パスを識別する情報は、コードの実行履歴から提供される。この実行履歴情報は、プログラムが実行するとき動的に取得されることが望ましい。実行履歴情報は、コードの前の実行から捕捉されることが望ましい。
望ましい実施の形態においては、頻繁には実行されないコードがフォールバック・インタプリタにおいて解釈され、これにより頻繁に実行されないコードに対するコンパイルされたコードを必要とすることなくコードの実行が継続し得ることが望ましい。
有利なことに、アプリケーション/プログラムが実行するとき即時応答してコードをコンパイルすることができ、これにより新たな頻繁に実行されるパスの発生に即応してコンパイル情報を生成可能であるオンラインのコンパイル・システムが提供される。
コンピュータ・システムがマルチスレッド型システムにおいて動作するとき、新たなコード断片がこのマルチスレッド型システムへ組込まれることが望ましく、これにより実行スレッドを止めることなく平滑な動作を達成することが望ましい。
本発明は更に、アプリケーションのオペレーティング・コードをコンパイルするためのコンパイラを含むコンピュータ・システムを動作させる方法を提供し、当該方法はコードの主パス部分のみをコンパイルすることを含んでいる。
当該方法は、コードの断片をコンパイルすることを含み、かつ望ましくはコードの主パス断片をコンパイルすることを含んでいる。
本発明はまた、頻繁に実行されないコードを実行するためフォールバック・インタプリタを使用することをも提供する。
本発明により更に提供されるのはコンピュータ・システムに対するコードであり、このコードは前述の方法により生じるコンパイルされたコードを含んでいる。
本発明の特質のいずれか、あるいは一部、あるいはその全ては、他のいかなる特質にも適用することができる。
適当な場合に、純粋に事例として、(上記の改善を略図的に示す)添付図面が参照される。
以降の考察は、先に述べた本発明のいずれかおよび全ての発明に適用する。
仮想マシンの幾つかの構成要素を示す。 実行のパスを示す図である。 主パスをコンパイルする比較コストを示す図である。 ディスパッチ・テーブルを示す図である。 本発明を実施するための装置を示す概略図である。 コードを介する実行のパスを示す図である。 本発明の方法を実施するための装置を示す図である。 例外を含むコードの断片を示す図である。 本発明によるコードのコンパイルされた断片を示す図である。 コンパイル前のコードの一部を示す図である。 図F09/01のコードの標準的コンパイルを示す図である。 望ましい実施の形態によるコードのコンパイルを示す図である。 コード・バッファを示す図である。 コンピュータ・システムにおけるメモリ構成を示す図である。 本発明の方法を実施する装置を示す図である。 オブジェクト指向プログラムにおける階層的構造を示す図である。 ディスパッチ・テーブルに格納されたデータの構成を示す図である。 ディスパッチ・テーブルに対するインターフェース・ハッシュ・テーブルの適用を示す図である。 家庭用の装備システムの階層的構造を示す図である。 図Dの家庭用システムにおける諸装置の動作に用いられるディスパッチ・テーブルを示す図である。 図Dの家庭用システムにおける装置を動作させるためのドライバ装置におけるコントローラ・プログラムを示す図である。p スタックにおけるデータ記憶を示す概略図である。 起動スタックを示す図である。 フレームにおける参照についての検査を示す図である。 手順呼出しフレームにおけるデータの構成を示す図である。 手順の実行を示す図である。 バリアの記述子ブロックの内容の構成を示す図である。 仮想マシンの原理を示す図である。 エミュレータ・スタックの動作を示す図である。 統合化されたスタックの動作を示す図である。 本発明の実施の一形態を示す図である。 本発明の装置の実施の形態を示す図である。 従来技術の手法に従うメモリの分割を示す図である。 別の従来技術の手法を示す図である。 いわゆる「並行な」環境におけるオブジェクトの構成を示す図である。 不要部分の整理作業のトレーシングを示す図である。 オブジェクトの構造を示す図である。 空のスタックを示す図である。 本発明による個々のパケットの構造を示す図である。 本発明の全般的動作を示す図である。 割込みを処理するためのPCコンピュータ・システムの各部を示す図である。 実施の一形態における割込みの処理におけるステップを示す図である。 割込みハンドラのコードを示す図である。 割込みハンドラのコードを示す図である。 実施の一形態を実施する装置を示す図である。 望ましい実施の形態を示すフロー図である。 コンパイル・コードの1つの部分を示す図である。 コンパイル・コードの異なる部分を示す図である。 望ましい実施の形態を実施する装置を示す図である。 リンク・リストを示す図である。 ループ状のリンク・リストを示す図である。 ループ状のリンク・リストにおけるポインタの移動を示す図である。 装置の望ましい実施の形態を示す図である。 実施の一形態のコード・バッファ形態を示す図である。 実施の一形態のコード断片を示す図である。 コンパイル・コードにおけるパッチの使用を示すフロー図である。 コンパイル・コードにおけるパッチの使用を示すフロー図である。 コンパイル・コードにおけるパッチの使用を示すフロー図である。 コンパイル・コードにおけるパッチの使用を示すフロー図である。 方法の望ましい実施の形態を示すフロー図である。 潜在的にポリモルフィックな方法によるパッチの使用を示す図である。 装置の望ましい実施の形態を示すブロック図である。
1.方法全体ではなく主パスに対するコードの断片のコンパイル
望ましい実施の形態の概要は、下記のとおりである。
コンパイラは、入力として、ソース・プログラムのランタイム表示と、(以下に述べるにように取得される)実行履歴情報とを受取る。この実行履歴情報は、ライブであり(すなわち、プログラムが実行すると共に動的に変化し)、あるいはプログラムの前の実行から捕捉することができる。
実行履歴情報は、プログラム・ソースのランタイム表示から決定される構造的情報と組合わされ、コンパイラがコンパイルすべきプログラムの主パスであるものを確定する。実行されないコードは、主パスに決して含まれないことが望ましい。
コンパイラは、主パスをスーパブロック断片として取扱い、プログラム・ソースでなくても、コードを逐次レイアウトする。主パスにフォールスルー(fall−through)させるのに必要な場合に、分岐およびテストが調整される。主パスが終りまで追従されるという仮定により、コードおよびレジスタが最適化される。このことは、最近のプロセッサ・アーキテクチャにおける性能を改善する。厳密に見れば、主パスのみが、1つの外部エントリ点を呈する。このことは、最適化を著しく簡素化し強化する。
図1Aに示されるように、実行のパスが主パス外である場合、適切なランタイム・テストが、「アウトライア」1002と呼ばれるいくつかのスタブ・コードに対する順方向分岐1000において挿入される。このアウトライア・スタブは、断片から制御を転送する前に、主パスがまだ書き戻されない任意の状態を更新する。主パスの主ライン・コードは、1002に示されるようなアウトライア・スタブのように、一般に一体に保持される。このことは、最近のプロセッサ、特に分岐予測ソフトウエア/ハードウエアが最初に分岐が起こりそうもないと仮定する場合における性能を改善する。これはまた、良好な命令キャッシュの挙動を提供する。
実行されないの主パスのコンパイルは、多くの最適化に要求される分析を簡素化しながら、ループの最適化およびインライン処理を実施させる。これは、コンパイラがシンボリック参照を解かねばならない必要を不要にする。このことは、フォールバック・インタプリタに残される。
例えば、フィールドに対する新たなクラスのシンボリック参照のローディングが用いられるとき、従ってはじめて参照が見えるとき、シンボリック参照を満たすクラスの階層をロードすることが必要となる。本発明の望ましい実施の形態において、全ての関連するコードが少なくとも1回解釈された場合は、シンボリック参照は、コードがコンパイルされる前にすでに解かれている。
あるグローバルな状態が変化した後に、しばしばループの間に例外が認められる必要がある。例外の検査はループ外で早期に行うことができ、コードをフォールバック・インタプリタへ強制することによりループから検査を除外させ、これら例外の存在時にコードの移動を行わせる。
フォールバック・インタプリタは、ループを実行して、比較的ゆっくりではあるが適時に例外を認識することになる。例外はほとんど生じないと見なされ、従って最適化ループの利益は短所を上回ることになる。
コードのコンパイル時に、種々の最適化を行うことができる。最適化は、ブロック・レベルで行われ、あるいは、特に幾つかのブロックが含まれる場合は更に広げられる。本発明の望ましい実施の形態の利点は、フロー分析を行う必要がないことである。コンパイルされたコードの更に速い実行を生じるため、コンパイルされたコードに対してレジスタが用いられることが望ましい。
フォールバック・インタプリタが使用できる場合、コードのコンパイル時に種々の仮定を行うこと、およびフォールバック・インタプリタが利用できなければ要求されることがある種々の安全検査を省くことが可能である。後で仮定が誤りであることが証明されるか、あるいは安全検査をしないとなにかが不都合になるならば、関連するコンパイルされなかったコードを解釈するのにフォールバック・インタプリタを用いることができる。
アプリケーションの実行時にコンパイラがオンラインで実行されているとき、コンパイルのオーバーヘッドはしばしば甚大になる。主パスのみをコンパイルすることにより、コンパイラが簡単かつ迅速になり、その分析のためのメモリ使用が少なくなり、従って、特に小さなメモリのシステムにおいて実施可能である以上に多くの最適化の実施が可能となる。
2.実行履歴を用いてアプリケーションを介するパスのどれが主パスであるかを決定
アプリケーションが実行時に、実行履歴が捕捉される。この履歴は、制御の転送が生じるときに、ブロック・レベルで維持される。ブロックに入るとき(ブロックに対する制御の転送が生じるとき)、実行履歴レコーダが記録することが望ましい。実行履歴レコーダはまた、例えば問題のブロック後に実行された次のブロックであるブロックの実行に関する他の詳細も記録することができる。これにより、個々のブロックについての情報のみではなく、コードのブロックを介する実行の望ましいルートについての情報が得られる。
各ブロックごとの1つのエントリ・カウントおよびそれ以降のリストが、それぞれに関するカウントで保持される。これらのカウントは、使用頻度の指標として働く。実行履歴レコーダは、どの命令がブロックを終了した制御の転送を生じたかの表示も含む。制御の含むまでに実行されたブロックのみが候補となる。全ての過程で実行されなかったブロックについては、どのタイプのコードが実行されなかったブロックの部分に「隠された」かは判らない。このような隠されたコードは、シンボリック解明を要求するコードを含んでいることがある。従って、このようなブロックはコンパイルされないことが望ましい。制御がブロックから転送されるときブロックのカウントが実行履歴レコーダにおいて行われる場合、終了まで実行したブロックのみがカウントされる。代替的に、あるいは更に、ブロックが終りまで実行されたかどうかを調べるため、コンパイルに先立ち検査を行うことができる。
メモリが制限されるとき、実行履歴レコーダは2つの方法で再使用される。最初に、後続ブロックのリストが小さな数に制限され、新たな後続ブロックに入ると、最も頻度の低い現存する後続ブロックが新たなブロックと置換される。空いた実行履歴レコードがないとき、使用頻度の最も低い方法と関連する履歴レコードの全てが空いたリストへ移される。
要約すると、断片のコンパイルは所与の閾値を越えるブロックのエントリ・カウントによりトリガされる。この閾値は、固定され、あるいは動的に同調される。しかし、履歴ブロックの状態が、当該ブロックがすでにコンパイルの待ち行列にあること、あるいはコンパイル不能であることを示すならば、これは無視される。このようなブロックは、コンパイルの待ち行列におかれる。
望ましい実施の形態において、コードが最初に実行されると、コードは一切コンパイルされない。実行がインタプリタによりはじめて実施される。各ブロックが解釈されると、実行履歴により保持されたブロックのカウントが1だけ増分される。実行履歴レコーダは、各ブロックごとに、ブロックへの制御の転送が生じたブロックから、制御が移転されたブロックへと記録する。実行履歴はまた、ブロックの実行についての更なる情報、例えば、ブロックにおいて実行されたコードの種類も含み得る。1つの閾値が設定され、特定のブロックに対するカウントがこの閾値に達すると、コンパイルのための待ち行列においてこのブロックへ入る。閾値が5であり、特定のブロックが5回実行されたとき、このブロックに待ち行列において入る。
コンパイラは、コンパイルのためのブロックの待ち行列を管理するコンパイラ・マネージャと関連させられる。特定のブロックが実行の閾値に達すると、実行履歴レコーダがメッセージをコンパイラ・マネージャへ送り、コンパイルのための待ち行列でブロックに入る。コンパイラは、別のスレッドにおいて実行中であり、待ち行列にコンパイルのための項目があるかどうかを調べるためある間隔で検査し、またあるときは、コンパイラが待ち行列の先頭に参照されるブロックをコンパイルし始めることになる。
望ましい実施の形態においては、待ち行列に対する新たなエントリが待ち行列の先頭で入れられ、従ってコンパイルが最もなされるように、待ち行列が管理される。待ち行列がこのような方法で管理されると、多数回閾値に達するブロックが、少数回あるいは1回しか閾値に達しないブロックよりもコンパイルされ易い。その結果、待ち行列は管理不能になることはなく、コンパイラ・マネージャは随時待ち行列の一部または全てを削除することもできる。
多すぎるブロックがコンパイル待ち行列にあることが判るならば、閾値を引上げることができる。同様に、コンパイルの待ち行列に少数のブロックしかなく、あるいは一切のブロックがなければ、閾値を引下げることができる。これは、アプリケーションの実行中に動的に行うことができる。コンパイラ・マネージャは、待ち行列の長さを監視することができ、また必要に応じて、実行履歴レコーダに対して閾値を増加あるいは減少するようにメッセージを送ることができる。
コンパイラがコンパイラ・マネージャにより待ち行列におかれるブロックをコンパイルするとき、この1つのブロックだけをコンパイルするように進行する。しかし、コンパイラは後続するブロックに関して実行履歴レコーダにより集められる情報を用いること、およびコンパイラが閾値に達した1つのブロックのみをコンパイルするのではなく最も頻度の高いブロックをもコンパイルし、これによりブロックから最も頻度の高いパス(主パス)をコンパイルすることが望ましい。後続ブロックが自身の権利におけるコンパイルの適格な閾値の回数だけ実行されあるいは実行されないが、それにも拘わらず、閾値の回数だけ実行されたブロックから主パスの一部としてコンパイルされることが判るであろう。
コンパイラがコンパイルされるブロックを選ぶと、このコンパイラは、ブロックが完了するのが望ましいものかどうか、例えばコンパイルすることが可能であるかを判定し、かつすでにコンパイルされたブロック・バージョンが得られるかどうかを判定するため検査を行う。
次に、コンパイラは、方法の終りに達するか、あるいは、例えばコンパイルされたバージョンがすでに存在するゆえに、コンパイルが望ましくない1つのコードに遭遇するまで、(ブロックの最も頻度の高い後続ブロックを介して)主パスをトレースする。コンパイルが望ましくない他のコードは、コンパイルをトリガした元のブロック以外で主パスへ再び戻るコードである。他の最適なコンパイルに対しては、フロー分析が要求されよう。コンパイラは、このような制御のフロー回帰を検出しこれが生じることを防止する(分岐においてあり得るフローを判定して、起こりそうもないフローは断片から抜けるようにコードを生成することにより処理される)。このフローは、方法の終りを通り越すことはないが、主パスに追従し、例えばこのパスに追従させられる。コンパイラは、主パスのトレーシングを停止するとき、コードのコンパイルを主パスの初めから開始する。
コンパイルがトリガするとき、主パスは、一時に1ブロックずつ最も頻度の高い後続ブロックに追従することにより決定することができ、方法の呼出しへの追従を含む。
一般に、実行中のアプリケーションの実行履歴は、どのパスが主パスであるかのよい指標である。
1つの方法により2つ以上のパスがある場合、この方法によるパスの両方または全てが主パスであり得、かつ関連するブロックが充分な回数実行されるならばコンパイルされ得ることが判るであろう。
実行履歴は、正確である必要はなく、多くの方法で更新することができる。実行を著しく速度低下させることになるコンパイルされたコードにおけるトラック実行履歴ではなく、フォールバック・インタプリタによる実行履歴が保持される。
3.頻度の低い実行コードを解釈するフォールバック・インタプリタの装備
頻度が低いかあるいは例外的なコードが実行されるときフォールバック・インタプリタ手段を備えると、これに対してコンパイルされたコードが存在することなく実行が継続することができる。フォールバック・インタプリタは、実行履歴を維持する。このインタプリタは、クラス分解と関連する全ての問題がもっぱらフォールバック・インタプリタにより対処できることも意味する。
コードの主パスのみがコンパイルされる場合で、実行のパスが主パスから外れる場合、コンパイルされないコードの解釈が必要となる。更にまた、コンパイルされたコードのコンパイルにおいて最適化が行われなければならず、また後の段階で最適化においてなされた仮定が正しくないことが判るならば、フォールバック・インタプリタを用いて関連するコードのセクションを解釈する。また、コンパイルされたコード・バージョンが生成される前にインタプリタを用いて実行が開始する。
従って、実行のための制御をコンパイルされたバージョンからインタプリタへ渡し、コンパイルされたコードが得られると制御を再びインタプリタから渡すことが必要となる多くの機会があることが判るであろう。
特定の実施の形態に対し以下に更に詳細に述べるように、インタプリタがコードを翻訳中は、次に実行されるべきコンパイルされたコードのバージョンが存在するかどうか調べるため検査が行われる。このように、不要な解釈を回避することができる。
再び以下に更に詳細に述べるように、制御がインタプリタに対しかつこれからコンパイルされたコードの個々の断片間に送られるとき、特別な変換装置が設けられる。このような装置の事例は、「グルー・コード」および「アウトライア」である。この変換装置は、コンパイルされたコード・バージョン間の実行の円滑な転送の確保を助ける。これらの装置は、例えば、コンパイル・セクションの終りに解釈されるべきコードのアドレスに関する情報を保持し、変数が最新のものであり、かつ例えば実行が転送されるときに適切なレジスタに格納されることを保証するためコンパイル・バージョンにおいて最適化が行われた場合に特に重要なものである。
例えば、コンパイルされたコードからインタプリタへジャンプが行われるとき、インタプリタはメモリ状態がカレントであると予期し、従ってもし記憶場所がコンパイル・バージョンに対するレジスタへ置かれたならば、インタプリタが動作を進める前にこれを適切な記憶場所へ戻す必要がある。
4.アプリケーションが実行するときコードをオンデマンドにコンパイルできるオンラインのコンパイル・システムの装備
アプリケーションの挙動が変化すると、ダイナミック・コンパイラは、明らかになる新たな頻繁に実行されるパスに対して最適化コードを生成することができる。このことは、別のスレッドとして動作することにより、アプリケーションがフォールバック・インタプリタを介して有効でありつづけることを許容する。
5.新たなコード断片を動作中のマルチスレッド型システムへ組込む能力の装備
動作中のスレッドを停めることなく新たなコード断片を組込むことができるならば、より円滑な動作が得られる。
コンパイラは、特定ブロックに対する主パスのコンパイルをいったん完了すると、コンパイラ・マネージャに対して、コンパイルが完了した旨のメッセージを送る。完了するまでは、コンパイルされたコードは実行可能コードから離して保持される。コンパイラ・マネージャは、コンパイルされたコードを実行可能コードにロードする。コンパイルされたコードが関連するブロックに対して得られ、そこにコンパイルされたコードがあることを示すため、必要な変更がディスパッチ・テーブルおよびコード・キャッシュにおいて行われる。
コンパイルされたコードの導入は、動作中のスレッドの停止が要求されないように最小単位で行われる。
6.動作中のマルチスレッド型システムからのコード断片の取外しのサポート
コード断片の取外しもまた、制限されるメモリ環境における可動性にとって重要である。これはまた、新たな主パスが現われるとき、1つの主パスに対して最適化されたコードを別のコードと置換することを可能にする。コードは、このコードがコンパイルされた最適の前提が破れる場合に削除することができることに基いて、最適な最適化でコンパイルすることができる。
先に述べたように、主パスについてなされた前提がコードの以降の実行に対して不適正であることが判る場合、コードを介する非主パスを解釈するのにフォールバック・インタプリタを用いることができる。しかし、コンパイルされた主パスがその後頻繁に実行されなければ、コンパイルされたコード・バージョンにより使用されるメモリを解放するためコンパイルされたコード・バージョンを外すことが望ましくなろう。
一部の実施の形態においては、コンパイルされたコードの各断片の実行回数が監視され、それほど頻繁に実行されなければ、削除の候補としてマークすることができる。
望ましい実施の形態において、コード・バッファがアクセスされる回数が記録される。制御をバッファへ送る前に、その実行カウントが増分される。使用頻度が最小のバッファは、必要に応じて削除され得る。
例えば、ある時点で、コンパイラがコード・バッファのスペースから出る。その後、バッファが削除される。回数管理がなされたカウントが色々なバッファへ送られているならば、最低使用頻度のバッファが削除される。あるいはまた、最も古いバッファが削除される。
システムに対する破壊のリスクを減じるため、バッファの削除前に種々の検査が通常行われることが判るであろう。例えば、本文の「エージェント資料第6号」参照。
本発明1020および典型的な従来技術1022の迅速なプロファイリング、コンパイリングの実行に要する比較時間が10秒のタイム・スロットの比率で示される図1Bにおける概略図により、コンパイル・コストを著しく低減できるという事実が示される。
主パスの使用はまた、コンパイラがその予定メモリ制限に達するときパスの途上で断片を切捨てることにより、ダイナミック・コンパイラをメモリ制約に耐え得るものにする。これは、従来技術のコンパイラにおいては不可能である。
このように、コンパイラが全ての割当てメモリを費消したとき、断片のコンパイルを終了することができる。切捨てたコンパイル断片の終りをインタプリタへ戻すことができるようにして、必要に応じて、適正バイトのコード・アドレスにおける、かつ適正な更新パラメータおよびレジスタ構造による実行を継続できるように、通常は適切なステップをとる必要があることが理解されよう。
小メモリのコンピュータ・システムにおいては、コンパイラがメモリ限度に拘束される点は厳しいものである。従って、これらのシステムは、その入力プログラムの内部表示を構成したりデータ・フローの分析などの結果を保持するために、コンパイル中に大量のメモリを消費しがちである。
対照的に、ダイナミック・コンパイラは、システムの始動時あるいは構成時にこれに課される外部の構成され得る制限内で働く。その後、コンパイラは、その制限内で可能なかぎり多くの断片をコンパイルする。コンパイラは、必要な場合は、切捨て時に制御を受取るためフォールバック・インタプリタに依存することによって断片を切捨てる。このことは、コンパイルの単位が1つの方法あるいはそれ以上でありかつフォールバック・インタプリタとの相互動作ができない、従来技術のコンパイラにおいては不可能である。
次に、主パスの決定に実行履歴が用いられ、主パスの一部がコンパイルされ、かつコンパイルされたコードとコンパイルされないコード間に実行が切換わる実行の1つの事例について述べる。
先に述べたシステムは、仮想マシン(VM)を含み、(C言語における)インタプリタとジャバ・アプリケーションとを含む。当該システムは、マルチスレッド型であり、ジャバ主要スレッド、コンパイラ・マネージャ・スレッドおよびコンパイラ・スレッドを含んでいる。
例えば、ジャバ・アプリケーションは、下記のクラスAを含む。
Figure 2010267291
ジャバ・スレッドが開始される。
Java A
class load A
クラスAがロードされ、Aのディスパッチ・テーブルがロードされる。ディスパッチ・テーブルは、図1Cに略図的に示される。図1Cは、種々のアドレス・エントリ1032を持つAのディスパッチ・テーブル1030を示している。例えば、主要な方法はアドレス4000に置かれている。
VMの主要プログラムは、4000における方法の主要Aのアドレスを識別し、グルー・コードを呼出す。
call glue(4000)
グルー・コードは、インタプリタの使用とコンパイルされたコードの実行との間を実行が切換えることを可能にする変換装置の一部である。グルー・コードは、コンパイルされたコードとコンパイルされないコードの実行間の平滑な転送を行うための幾つかの装置を含んでいる。グルー・コードは、下記の1つ以上に対する部分を含んでいる。すなわち、
1.状態の記憶場所とレジスタの状態を更新すること
2.コンパイルされたコード・バージョンが得られず、あるいはコードのコンパイル時に行われる最適化が不適性であることが判るとき、インタプリタへ制御を渡すこと
3.実行のためのコンパイルされたコード・バージョンが得られるときに、インタプリタから制御を外すこと
当該変換装置は、状態を更新するための先に述べたようなアウトライアを含む。例えば、コンパイルされたコードの実行時に実行に遭遇するとき、制御は、インタプリタに実行の処理のためのコードの実行を開始することを命令するためグルー・コードへの送達前に、状態が更新されるアウトライアへ最初に送られる。
次に、グルー・コードは、アドレス4000において始まるグルー・コードの実行を開始するようインタプリタを呼出す。
call interpreter(4000)
インタプリタは、アドレス4000で始動し、インタプリタが呼出しをしようとしていると判定するグルー・コードへ戻る。インタプリタは、呼出しがディスパッチ・テーブルのどこにあるかを知り、グルー・コードへ通知する。
グルー・コードは、方法に対するオブジェクト参照を用いてスタックをオフし、ディスパッチ・テーブルを探して方法に対するアドレスを得る。
方法の開始のコンパイルされたバージョンが得られると、ディスパッチ・テーブルにおいてコンパイルされたバージョンのアドレスに入り、コンパイルされたバージョンが実行される。
方法の開始のコンパイルされたバージョンに対する参照がなければ、ディスパッチ・テーブルは「呼出しグルー」に対するエントリを含み、関連するアドレスにおける方法の解釈を開始するグルー・コードの個々の部分への戻りが行われる。すなわち、
call interpreter(5000)
インタプリタが方法へジャンプすると、インタプリタがメッセージを、方法が実行しようとしている実行履歴レコーダへ送る。
方法の終りに戻りが存在し、インタプリタが、先に述べた如きコンパイルされたバージョンの解釈または実行のため前の方法へ実行を戻すグルー・コードへ戻る。
グルー・コードは、レジスタ、スタックなどが次のコード断片の実行に対して正しいことを保証する戻りを処理する専用部分を含んでいる。例えば、方法がコンパイルされたバージョンから実行され、次のコード部分が解釈される場合、コンパイルされたバージョンに対するレジスタへ置かれた全てが、次のコード部分が生成される前に適正な記憶場所へ復元されねばならない。このため、グルー・コードを処理する戻りが、コンパイルされたコードの使用の結果として変更されたどんな状態でも復元する。
このように、グルー・コードへの戻りは更に、実行がコードの次の部分へ進む前に、グルー・コードを処理する戻りへ戻る。
先に述べたグルー・コードの種々の部分は全て、グルー・コードの同じ部分の一部であり得、あるいはグルー・コードの個々の部分であり得る。状態の更新は、先に述べられ、また本明細書の「エージェント資料第3」項に述べたようなアウトライアにより行われる。
以下の更なる事例は、呼出し以外の制御の転送のためのインタプリタの動作を記述する。
当該実施の形態においては、下記の方法が呼出され、インタプリタを用いて実行される。
Figure 2010267291
インタプリタは、下記のように番号を付した行で表わされるバイト・コードで当該方法を実行する。すなわち、
バイト・コード ジャバ
0 iload_1 x=p;
1 istore_3
2 iload_2 i=a;
3 istore 4
5 goto 16
8 iload_3 x=x/i;
9 iload 4
11 idiv
12 istore_3
13 i inc 4 1 i++;
16 iload 4 i<p?-reiterate if true
18 iload_1
19 if_icmplt 8
22 return

方法のボイドファンクション(void func)が最初に呼出される。コンパイルされたバージョンがなく、従って方法がインタプリタによる実行を開始する。実行時に、下記のブロックがインタプリタにより認識される。すなわち、
b={0-5}
b={19}
b={8-19}(基本ブロックではない)
b={22}

インタプリタが最初のブロックbを実行する。インタプリタが、bが一回実行されたことを記録しカウント1を持つ実行履歴レコーダを走らせる。(望ましくは、このレコーダは、bの後続ブロックがbであること、およびbは全て全過程にわたり実行されたことをも記録する。簡単にするため、このような余分な情報の記録の参照は以下では省略される。)
ブロックの終りにおいて、インタプリタがコード・キャッシュに相談し、次のブロックbのコンパイル・バージョンがあるかどうかを調べる。(当事例では、1つのブロックから別のブロックへの制御の転送がある間は、呼出しはなく、このため、グルー・コードへの戻りがないことに注目されたい。別の実施の形態においては、インタプリタは各ブロック後にグルー・コードへ戻ることになろうが、時間がかかりそうである。本文に述べる望ましい実施の形態においては、インタプリタは、
a.呼出しに出会う
b.戻りに出会う
c.コード・キャッシュから、次のブロックのコンパイル・バージョンがある ことを見出す
d.例外を介する
ときにのみ、グルー・コードへ戻る。)
このような場合、コンパイル・バージョンがなく、従ってインタプリタはbへ進み、実行履歴レコーダにカウント1のbを生じる。インタプリタは、再びキャッシュを調べ、bのコンパイル・バージョンは見出さないと、bの実行へ進む。当該事例においては、ループが3回反復され、従ってブロックbによる方法から戻りが行われると(先に述べたように、戻りハンドラを介してグルー・コードに至り)、実行履歴レコーダにおけるブロックのカウントは下記のとおりである。すなわち、
=1
=1
=3
=1

コンパイルに対する閾値が5であるならば、ブロックb、bまたはbはいずれもコンパイルのために待ち行列にない。方法のボイドファンクションが次に呼出された後、カウントは下記のとおり。すなわち、
=2
=2
=6
=2
このように、実行履歴レコーダは、コンパイラ・マネージャへメッセージを送り、bをコンパイルの待ち行列に置く。ある時間後に、コンパイラは待ち行列に相談してbをコンパイルする。コンパイル前に、コンパイラは、bの後続ブロックを示す実行履歴レコーダにおけるBに対するレコードを用いてbから主パスを決定する。このような簡単なケースでは、bの最大頻度の後続ブロックはbであり、その結果ループを表わす1つのブロックbのみがコンパイルされる。bのコンパイルは、例えば、値p、x、i、aを記憶するレジスタを用いることにより最適化される。事前例外条件検査を、i=0検査(ゼロで除算)(本明細書の項「エージェント資料第2」参照)のため挿入することができる。コンパイラがコンパイルを完了したとき、コンパイラは、どのコンパイルが行われたか、コンパイル・バージョンがどこにあるか、および方法のエントリ点であるかどうかをコンパイラ・マネージャへ通知する。コンパイル・バージョンは、その時は実行に使用できない。
やがて、コンパイラ・マネージャは、bのコンパイル・バージョンをロードする。コード・キャッシュは、方法の当該部分に対するホスト・コード・アドレスがコンパイルされたコードが存在する位置をこの時指示するように更新される。
後で、方法ファンクションが呼出されると、インタプリタがbの実行後にコード・キャッシュを調べて、bのコンパイル・バージョンが利用可能であることを見出す。
インタプリタは、グルー・コードへ戻り、これが、先に述べたように、bのコンパイル・バージョンの実行を生じる。
更に後で、bおよびbがコンパイルのための待ち行列に置かれるように、方法ファンクションが5回実行されることになる。
がコンパイルに当てられると、コンパイラがbから主パスを決定する。bの後続ブロックはbである(すでにコンパイルされたバージョンが存在するから、コンパイラは、この場合、コンパイルされるbを主パスの一部と見なすことはない)。
断片bおよびbがコンパイルされ、ディスパッチ・テーブルが更新される。
以降の実行時に、b/bに対してコンパイルされたコードが実行され、クロッキング・コードへの戻りが行われ、これがbでコンパイルされたコードの実行を生じる。コンパイルされたb/bからグルー・コードを経てコンパイルされたbへのパスが充分な回数だけ生じるならば、コンパイルされたb/bをコンパイルされたbに結合するパスが作られる。(パッチングについては、見出し「エージェント資料第12」において更に詳細に述べる)。このように、グルーを介するステップが要求されることがないので、実行は更に有効に行うことができる。
後で、コンパイラ・マネージャと関連するメモリ・マネージャが、コンパイラに対するメモリが解放されるべきことを決定する。削除のため選択される最も古いバッファは、bのコンパイルされたバージョンを含む。コンパイラ・マネージャは、このバッファを削除するためデリータを呼出す。削除の前に幾つかの検査が行われねばならない(例えば、見出し「エージェント資料第6」参照)。先に述べた事例では、(削除されない)b/bに対してコンパイルされたコードと(削除される)bに対してコンパイルされたコードとの間にパッチが挿入されたため、ある特定の問題が生じる。この問題が克服される方法の詳細については、見出し「エージェント資料第12」を参照されたい。
図1Dは、先に述べた実施の形態を実施するのに好適な装置1040を示している。当該装置1040は、コンピュータ・システムにおけるジャバ・コード1043を解釈するためのインタプリタ1042を含んでいる。インタプリタが1つのコード・ブロックの終りに達すると、呼出しか戻りがなければ、コード・キャッシュ・サーチャ1044を用いてコード・キャッシュを検査し、次のブロックのコンパイルされたバージョンが得られるかを調べる。もしそうであれば、コンバータ装置1046(先に述べたグルー・コードを含む)が、コードのコンパイル・バージョン1049を実行するため制御を実行装置1048へ送る前に、必要な変更および改変を実施する。
インタプリタ1042がコードのブロックを実行すると、コードのどのブロックが実行されたか、ならびにブロックの実行についての更なる詳細、例えば当該ブロックの前または後にどのブロックが実行されたか、およびどんなタイプのコードが実行されたかを実行履歴レコーダ1050に記録する。
実行履歴レコーダ1050は、ブロックが閾値の回数だけ実行されると、コンパイラ・マネージャ1052に通知する。このブロックは、コンパイラ・マネージャ1052により管理される待ち行列1054に保持される。閾値チューナ1056が、コンパイラ・マネージャ1052からの情報からの待ち行列の長さを監視する。待ち行列の長さに関する情報に基いて、閾値チューナ1056が実行履歴レコーダ1050に対する閾値を変更してコンパイラ・マネージャへブロックを送る。
コンパイラ1058は、待ち行列1054において参照されるブロックをコンパイルする。コンパイラ1058は、ブロックの実行に関する実行履歴レコーダ1050からの情報を用いてブロックからの主パスを決定し、コードのコンパイルされたバージョンを用意する。コンパイル・バージョンが完成すると、コンパイラ1058が、必要なディスパッチ・テーブルおよびコード・キャッシュを更新しコンパイル・バージョンをロードするコンパイラ・マネージャ1052に通知する。
コンパイラ・マネージャ1052は、コンパイラ1058が利用可能なメモリを監視するメモリ・マネージャ1060を含んでいる。利用可能なメモリが少なくなると、メモリ・マネージャ1060が、コンパイルされたコードの一部を削除するようにデリータ1062へ指令する。また、待ち行列1054が長くなりすぎると、コンパイラ・マネージャ1052が、待ち行列1054の一部または全てを削除するようにデリータ1062へ指令する。
図1Eは、一般に1066と呼ばれる方法のコードによる実行のパスを示している。
同図は、コードの種々の断片、例えば1068、1070、1072を略図的に示している。このようなコードの断片は、それぞれコードのあるブロックを表わす。
同図に示されるコードは、1つの外部エントリ点1074を有する。ブロック1072の後には、条件付き分岐1076、例えば例外検査が存在する。例外が生じると、実行はコード1078に対するパスAに沿って進み、実行を処理する。さもなければ、コードは呼出しがあり得るコード・ブロック(ブロック1082に対するパスC)に対するパスBに沿って進み、あるいは実行はコード部分1083、1084に対するパスDに進む。実行は、パスEに沿って1085へ進み、あるいはパスFに沿って1086へ進む。
実行がコード1066を走る実行についての情報は、インタプリタ1042により動作される実行履歴レコーダ1050に記録される。
ブロック1068がインタプリタにより閾値の回数だけ実行されたことが判ると、これは待ち行列1054へ送られる。コンパイラ1058は、レコーダ1050における実行履歴を調べて、下記のことを見出す。すなわち、
1.1072の頻度の高い後続ブロックが1080である(すなわち、実行がパスAより頻繁にパスBに沿って進んだ)こと、
2.1080の頻度の高い後続ブロックが1083である(すなわち、実行がパスCより頻繁にパスDに沿って進んだ)こと、および
3.1084の頻度の高い後続ブロックが1085である(すなわち、実行がパスCより頻繁にパスDに沿って進んだ)こと。
コンパイラ1058は、主パスが、従ってコードを介する1068、1070、1072、1080、1083、1084、1085であることを決定する。この主パスは、1088として示される。
コンパイラ1058が主パス1088をたどる間、断片1084が全過程を通じて決して実行されない(決してパスFを通らなかった)ことが判る。このため、1084はコンパイルの適切な候補ではなく、コンパイルのための主パス部分は断片1084あるいは1085は含まない。
このように、コンパイルされる主パス部分は、断片1068、1070、1072、1080ANED1083を含む。
上記の一部あるいは全てにおいて、本発明の幾つかの特徴がコンピュータ・ソフトウエアを用いて実現された。しかし、無論、当業者には、これらの特徴のいずれもハードウエアまたはハードウエアとソフトウエアの組合わせを用いて実現できることが明らかであろう。更にまた、ハードウエア、コンピュータ・ソフトウエアなどにより行われるファンクションが実施されあるいは電気信号などを用いて実施されることが容易に理解されよう。
情報の格納に関する特徴は、適切な記憶場所すなわちストアによって実現することができる。情報の処理に関する特徴は、ソフトウエア、あるいはハードウエア、あるいは両者の組合わせのいかんを問わず、適切なプロセッサまたは制御手段によって実現することができよう。
上記の一部あるいは全てにおいて、本発明は、下記の形態の一部あるいは全てにおいて具現され、コンピュータ・システムの作動方法において具現され、コンピュータ・システム自体において具現され、システムの作動方法でプログラムされあるいはこの方法を実行するように適用されあるいは構成されるとき、コンピュータ・システムにおいて具現され、そして(または)システムを作動する方法に従って適用されるプログラムが記録されたコンピュータが読取り可能な記憶媒体において具現される。
本文において用いられるように、用語「コンピュータ・システム」は、「コンピュータ」、「システム」、「装備」、「装置」、「マシン」、などの用語と互換である。コンピュータ・システムは、仮想マシンであり得、あるいは仮想マシンを含み得る。
上記の一部または全てにおいて、方法および装置の特徴および特質を含む先に述べた異なる特徴および特質は、どんな適切な方法においても組合わせが可能である。
本発明が本文において純粋に事例として記述されたこと、および詳細の修正が本発明の範囲内で可能であることが理解されよう。
本文に開示された各特徴、および(適切であるかぎり)請求の範囲および図面は、独立的にあるいは適切な組合わせにおいて提示されるものである。
エージェント資料第2−コンピュータ・システム、コンピュータ読取り可能記憶媒体、およびその動作方法、および前記システムの動作方法
本発明は、コンピュータ・システムに関し、かつコンピュータ・システムの動作方法に関する。特に、本発明は、コードをコンパイルするコンパイラを含むコンピュータ・システムに関し、かつコンピュータ・システムにおいてコードをコンパイルする方法に関する。望ましくは、本発明は、解釈言語、例えばジャバを走らせるコンピュータ・システムに関する。本発明は、オブジェクト指向プログラム(望ましくは、ジャバ)に関することが望ましい。望ましい実施の形態においては、本発明は、事前例外条件検査に関する。
プログラムの過程またはジャバのようなオブジェクト指向プログラムにおける方法の実行方法において生じる諸問題を回避するために、許されない状況を検出してエラーおよび(または)例外を投与する安全システムが通常組込まれる当該システムは通常、検出される例外条件に応答して例外が検出された場所で実行を停止する。このようなシステムにおいては、実行の継続を許容する前に実行を処理するため、例えば違法な動作を締出すために、例外ハンドラが含まれる。
ジャバは、エラーと例外の両者を投与する。簡単にするため、これらは本文では「例外」と呼ばれる。本文における用語「例外」は、前後関係から明らかである場合を除いて、例えばランタイム・エラー、例外、およびジャバ言語および(または)他の言語で生じる他の出現を含むように広義に解されることを理解すべきである。
ジャバは、例外が多い言語である。ジャバはまた、例外が生じるとき、例外を処理する種々の機構も有する。
例えば、コードの一部は、項「y=i/z」を含む。コードが実行されるときz=0ならば、例外「ゼロで除す」が投与される。コンパイルされると、あり得る例外を含む方法は、例外を投与するものとマークされる。
例外を投与する旨宣言した方法がジャバに呼出されるならば、ジャバ・コンパイラは、前記方法を呼出す方法もまた例外を宣言するか、あるいは例外を処理する例外ハンドラを提供することを要求する。このため、例外は、例外ハンドラにより捕捉され処理されるか、あるいは呼出しチェーンの終りに落ちる(fall off)まで、この呼出しチェーンをリップルアップ(ripple up)し得る。このことは、ジャバには実質的に2つのタイプの例外、すなわち、「検査済み」および「未検査」があることも理解するジャバ言語になじんだ者にはよく理解されよう。
例外「検査済み」は、「捕捉」されるかあるいは「投与」されることになる。コンパイラは、実際に検査済み例外を捕捉あるいは投与に強制する。対照的に、「未検査」例外は、ゼロで除算のようなランタイム・エラーによく似ており、ジャバもC++も投与の宣言を強制しない。
ゼロで除算のような特定の例外が最上位すなわち最も前のフレームaで宣言され、最近のフレームb、c、dなどはフレームaより下方で逐次付加されるものと見なされるスタックが形成される状態について考察しよう。例外がフレームdで遭遇するならば、このフレームに対する評価スタックはクリヤされ、VMは例外オブジェクトを生じてこれに対する参照は、マッチング・ハンドラによりこのフレームの評価スタックに入れられる。
オブジェクト参照は、例外のタイプを表わし、(この例外に対してなにかが存在するものとして)例外がどのように処理されるかについて命令テーブルへ進む。例えば、このテーブルは、例外が行1−20のいずれかに生じるならば、この例外は行21において処理されることを表わす。
フレームdにおける例外に遭遇すると、最初に、フレームdはハンドラについて探されるが、例外がフレームaにおいて宣言されているので、明らかに見出されず、従ってフレームdは消され、サーチはフレームcにおいて続行する。同じ状態がフレームcにおいて取得され、従ってサーチは後へ続き、ハンドラを見出すことができるフレームaに達するまで、フレームd、c、bを次々に消す。ローカル変数のみが消されたフレームに格納されること、従って貴重な情報の逸失がないことを強調すべきであり、全てのグローバル変数(ジャバでは、アレイ、オブジェクト、スタチック・フィールドと呼ばれる)および(例えば)フレームcに生成されるオブジェクトは、ヒープに格納されたままである。
ジャバは、例外の多い言語である。ジャバの状態は、ジャバ・プログラムの意味論により指令されるように書かれねばならない。
しかし、ジャバ・プログラムがコンパイルされるときは、種々の最適化を行うことが可能である。1つのこのような最適化は、コンパイルされるコードの断片がループを含む場合に可能となる。ランタイムにおける実行をより効率的にするために、任意のループ不変動作をループ外へ移動することが望ましい。しかし、このことは、例外がループ内に生じる場合に問題を生じ得る。このため、下記の簡単な事例において、アレイのアクセス「arr[i]」が例外「限度外の指標(index out of bounds)」を生じる場合に、アレイのアクセスが実行される前に「x」を更新することができない。「x」に対する書込みがアクセス前に誤って移動された場合、および例外が生じた場合、「x」に対する正しくない値を持つことになる。
Figure 2010267291
従って、ループ不変性のような標準的なコード移動の最適化は、コードが横切って移動できないバリアとして働くような例外の存在時には阻害される。
上記の事例においては、「x」はループ不変値(10)が書込まれている。潜在的な例外が存在する場合、書込みをループ外に移動することはできない。「a」がアレイ「arr」に対する許容指標値の範囲内に該当しなければ、「arr[i]」に対する最初のアクセスは例外を生じ、「x」はループに対するエントリ時に同じ値が存在することになり、値10ではない。更に、例外検査自体は、ループ本体内で実行し、従ってそれ自体の実行上のペナルティを生じる。
最適化が上記事例のコードのコンパイルの場合に行われるならば、「j」が決して許容指標値の範囲外になり得ないことを証明するため分析を行う必要がある。このことが証明できるならば、xに対する書込みはループ外に安全に移動することができる。必要な条件を証明するためには、コードの複雑な分析が要求されることになる。ある場合には、例えば1つの方法の基本ブロックの分析から例外が生じないことを示すことができる場合には、ローカルな分析で充分であるかもしれない。しかし、大半の場合は、幾つかのブロック、アレイが証明を行うことができるように生成されたブロックに溯って見る必要がある。この場合は、グローバルなデータ・フロー分析(1つの方法全体の分析)または手順間の分析(プログラムまたはクラス全体の分析)が必要となる。明らかに、このような分析は、時間を要し、メモリの使用コストが高く、実際にオフライン・コンパイルにおける使用にのみ考え得るものである。いずれの場合も、詳細な分析の結果として例外が生じることが判るならば、最適化はいずれの場合も可能でない。このため、このような分析は、実際には制限されたメモリ・システムにおいてはランタイムではほとんど行われず、実行が生じるコードの最適化は通常は試みられることがない。
別の事例は、分母がゼロに等しい除算ステップにおいてある点に達する状態を包含する例外条件を惹起する。
この事例は、変数xの別の変数iによる除算を包含する。iがゼロになるある状況が生じ得、ゼロで除すことになり、下記のような計算不能なファンクションとなる。すなわち、
Figure 2010267291
プログラム・ループが値であるなにものかを実行することをおそれるため、例外をあまりに早く投与することは望ましくない。例外が生じる前に、あり得る例外を含むループが非常に多くの回数(おそらくは、平均10回)だけ循環されることはあり得ないことではない。
このため、ループの反復実行時にランタイムにおける時間を節減するためループからループ不変項を除去することが望ましいが、詳細な分析を行うことなくループ外へ項を移動するのは安全ではない。
本発明は、このような問題および(または)他の問題を軽減することを求めるものである。
本発明によれば、あり得る例外を含むコードの断片をコンパイルする方法が提供され、当該方法は、事前例外条件検査を含めるステップを含んでいる。
事前例外条件検査は、コードの断片のコンパイルされたバージョンに含まれることが望ましい。事前例外条件検査を用いることにより、例外を生じるかもしれないコードが実行される前に、例外が生じるかどうかを早く決定することができる。例外が生じないことを検査が示すならば、例外を含むコードを実行することが安全となる。
例外が起きるかもしれないコード本体の直前に事前例外条件検査が含まれるのが望ましいことが理解されよう。これにより、事前例外検査以外のコードを最適化することができる。コンパイルされる断片の初めに条件検査が含まれることが望ましい。このことは、断片がループを含む場合に特に望ましい。
例外が生じないという前提において、コードの断片がコンパイルされることが望ましい。事前例外検査が用いられるとき、検査を通るならば、例外が生じないだろうことが判る。このため、例外が生じるかどうかが判らなかったならば実施が安全でなかった最適化が可能である。このように、コンパイルされたコードは、コードの実行における速度が大きいことならびに更にコンパクトになることによりメモリ・スペースが少なて済むことの二点で更に有効であり得る。
当該方法は、条件検査が例外が生じるだろうと決定する場合に使用される救済装置を提供することを含む。多くの場合、事前例外条件検査は、例外が生じずかつコンパイルされたコードの実行を進められることを判定する。しかし、ある場合には、例外が生じるだろうこと、および条件検査が例外条件が切迫していることを決定しよう。救済装置は、例外を実行の予期される時点でインタプリタにおいて遭遇させることが望ましい。
元のコード断片が例外を処理するためのコードを含んでいたならば、このコードが最適化手順の一部としてコンパイル・バージョンには含まれないことが望ましい。いずれの場合も、コードは、頻繁には起きない例外の更なる検出および処理において用いられるコードで複雑にならないようにコンパイルされることが望ましい。従って、例外を処理するためのコードがコンパイルされるのではなく、例外の処理のためコンパイルされないコードを解釈するインタプリタが用いられることが望ましい。救済装置は、インタプリタに対して制御を渡すように構成されることが望ましい。コードのコンパイルされたバージョンがあるため、インタプリタが通常はこのコードの実行のために使用されないので、制御はインタプリタへ送られるよう強制される。
このように、実際には、コードのコンパイルされたバージョンは、例外が生じないときにのみ使用されるように調製され、このような状態に対してコンパイルされたコードを最適化するようにコンパイルされることが望ましい。例外が生じる場合、コンパイル・コードは用いられないことが望ましく、インタプリタは条件を検出し例外を生じる時点まで実行するため用いられる。コンパイル・コードの2つのバージョン、すなわち、1つは例外が生じた場合に用いられ1つは例外が生じなかった場合に用いられ、各々が関連する状況に対して最適化されるバージョンを提供することが可能である。しかし、多くの場合、特にシステムが制限されたメモリ(例えば、VM)を持つシステムであった場合、これは望ましくない。例外が生じた場合に使用されるコードのコンパイル・バージョンはそれほど頻繁に使用されず、コードのコンパイル・バージョンに対して割当てられたメモリを混乱させることになる。
コンパイル・コードが最適化された場合、例外が生じることを条件検査が明らかにするとき状態の条件(例えば、整数の変数およびレジスタの状態の値)は、対応するコンパイルされないコードに対するものと同じでないことがあり得る。救済装置は、状態を更新するためのアウトライアを含むことが望ましい。
断片はコードの主パスの一部であることが望ましい。コードの少なくとも一部がループを形成することが望ましい。特に仮想マシンにおけるように利用可能なメモリが制限される場合、それほど頻繁に実行されないコードをコンパイルしないことが非常に望ましい。当該方法はまた、コードを介する主パスを決定するステップを含むことが望ましい。それほど頻繁に実行されないコード、例えばコードの主パスでない部分はコンパイルされないことが望ましい。コンパイラは、コードの主パス部分のみをコンパイルすることが望ましい。
本発明によれば、コンパイル・コードにおける事前例外条件検査の使用が更に提供される。
本発明はまた、先に述べた方法によるコードのコンパイルのためのコンパイラを提供する。
また本発明により提供されるのは、あり得る例外を含むコードの断片をコンパイルする装置であり、当該装置は事前例外条件検査を含む手段を含んでいる。
当該装置は、コンピュータ・システムの一部、望ましくは仮想マシンであることが望ましい。本発明は、特に、解釈される言語に関し、特にジャバに関する。
コンパイラは、コンパイルされた断片の初めに条件検査を含むように構成されることが望ましく、かつコンパイラが、例外が生じないという前提でコードの断片をコンパイルするよう構成されることが望ましい。このことは、断片がループを含む場合に、特に関連する。
当該装置は、条件検査が実行が生じると決定する場合に使用される救済装置を含むことが望ましい。当該救済装置は、コンパイラによりコンパイル時に提供されることが望ましい。
当該装置は更にインタプリタを含み、前記救済装置がインタプリタに対して制御を送るように構成される。インタプリタは、例外を処理するためコードを解釈するように構成されることが望ましい。
救済装置は、状態を更新するためのアウトライアを含むことが望ましい。特に、制御がコンパイル・コードの実行から放棄される場合、および制御が送られる前に状態を更新することがしばしば必要となる場合である。
前記断片は、コードの主パスの一部であることが望ましく、かつコンパイラが主パスのコードをコンパイルするように構成されることが望ましい。コンパイラは、コードの主パス部分のみをコンパイルするように構成されることが望ましい。コンパイラはオンライン・コンパイラであることが望ましい。コンパイラの実行時間インパクトおよびコンパイラが使用するメモリ量は、コンパイラがコードの主パス部分のみをコンパイルする場合に低減することができる。
本発明はまた、先に述べた方法を用いてコンパイルされるコードを提供する。
本発明によれば、コンピュータ・システムに対するコードも提供され、このコードは、あり得る例外を含むコンパイル・コードの断片を含み、このコードは更に事前例外条件検査を含んでいる。
前記コードは更に、例外が表示されるならば使用される救済装置を含み、救済装置はインタプリタに対する制御の転送を強制する手段を含むことが望ましい。
また本発明により提供されるのは、先に述べたようなコードを含む、構造化されたデータが記録されたコンピュータ読取可能な記憶媒体であり、また先に述べたような方法を実行するためプログラムが記録されたコンピュータ読取可能な記憶媒体である。
本発明により更に提供されるのは、先に述べたような方法でプログラムされるときのコンピュータ・システムであり、かつあり得る例外を含むコードの断片がコンパイルされる方法によりプログラムされるときのコンピュータ・システムであり、当該方法は事前例外検査を含んでいる。
本発明は、ループ内の例外条件の存在時のコードの移動に関する最適化を可能にすることを目的とし、結果として得るコンパイルされる断片の実行速度を更に改善する。
この解決法は、コンパイルされる断片がループのエントリ点に先立って行われる相当の検査を含む、「事前例外条件検査」の使用によって達成される。
このような検査は、好都合にもフォールバック・インタプリタの存在に著しく依存する。検査が例外条件を検出するならば、制御は、当該ループのエントリ点において前記断片に再エントリする可能性のないフォールバック・インタプリタに関連する。フォールバック・インタプリタは、ループのエントリ点における実行を続行し、従って実行がその正しい制御点に遭遇する時点まで実行し、これにより全てのジャバの状態が正しい値を含む実行を生じる。しかし、事前例外条件検査が通るならば、断片は安全に使用可能であり、任意のコード移動の最適化が有効である。
従って、上記の事例においては、検査結果を順守するかぎり、「x」のループ不変性の割当てをループ外に移動することが可能である。これにより、ループにおける元の例外検査を省くことを可能にし、これもまた改善された性能を提供する。
全ての事前例外条件検査が任意の実行ループ外で行われて、(特に、ループが多数回反復される場合に)検査の実行の時間的なペナルティを減じることが望ましい。
コンパイル・コードは、幾つかのあり得る例外について検査するため、幾つかの事前例外条件検査を含むことが望ましい。このような検査は、個々の検査の集合として構成され、あるいは任意の数の例外条件が存在するかどうかを決定する1つの検査を含む。
コンピュータ・システムは、仮想マシンを含むことが望ましい。本発明の方法は、仮想マシン(VM)の範疇における特定の用途を見出すものである。VMは、体内埋設システムにおける小さなメモリ形態を必要とし、本発明は、仮想マシンにおけるコードのコンパイル・バージョンの形態の低減を許容する。
本発明は、インタプリタが使用される解釈言語、特にジャバ言語に対する特定の用途を見出す。インタプリタは、例外が表示されるときにフォールバックとして使用することができる。インタプリタが存在しなかったならば、例えば例外の存在時に、コードの多数の異なるコンパイル・バージョンが、コードを介する代替的なルートを処理するため提供されねばならない。このような構成は、コードのコンパイル・バージョンにより占有されるメモリ・スペースが減じるという利益を低減し、あるいは更にこれを打消すものとなろう。
コードのコンパイル・バージョンへ挿入することができる検査の回数(実行における時間的ペナルティを生じる検査)と、最適化されたコンパイル・コードの実行における実行時間が減じるという利益との間に均衡を生じやすい。
本発明の利益は、望ましくは実行時間およびメモリのペナルティの増加がない(条件検査の使用による)実行における安全の増進を含む。
本発明の更なる利点は、コンパイルされる断片を介する高速な(検査されない)ルート、あるいはループ内に例外条件が存在する場合でさえ、ループ外の遅い(フォールバック・インタプリタを介するルートの検出を除く。本発明は、(例外条件検査を含む)コードの移動の利点を利用する高速なルートを可能にする)ルートの選択である。このような選択は、方法全体をコンパイルした先のコンパイラ、およびそのコンパイルされた方法がフィールドの例外条件に対するインタプリタとは相互に働く能力を持たないコンパイラには得られない。
本発明により、コンパイル部分の性能は、ループ外へコードを移動する能力により著しく改善され得る。従って、従来のコンパイラには通常得られないダイナミック・コンパイラの最適化の選択および用途において、より大きな自由度が得られる。
本発明の代替的な特質によれば、(望ましくは、プログラムの実行中に)例外条件の発生を識別するため例外検査をコンパイルする手段と、解釈される言語において前記例外検査により識別されたとき例外を実行する手段とを含むコンピュータ・システムが提供される。
また、例外条件の発生を識別するため例外検査を実施する手段も任意に提供される。
本発明は、別の特質において、プログラムを実行し、切迫した例外条件の発生を識別するため例外検査をコンパイルし、前記例外検査により識別されたとき解釈される言語において例外を実行するステップを含むコンピュータ・システムの動作方法を提供する。
例外検査は、処理中のループ外で行われることにより、望ましくは例外検査がループの一巡ごとに行われる必要を避けることが望ましい。本発明の利点は、コンパイラを介する高速の(検査されない)ルートか、あるいは従来のコンパイラ・オフラインでは利用できないインタプリタを介する低速の(例外を検出する)ルートをとるよう選択することである。
本発明によれば、将来のある時点にループ外で例外に達すると決定することが可能である。この状態が生じると、制御はインタプリタへ渡され、従ってループの一巡ごとに例外について検査する必要がない。
例外検査自体はコンパイルされるが、比較的遅いインタプリタにおける例外自体の解釈はコンパイル時間を節減するのに役立ち、特にあり得る例外の処理のためコードの多数のコンパイル・バージョンを持たないことによりメモリの必要を低減するのに役立ちながら、最適化を損なうことがない。実際に、最適化は確実に可能とすることができる。(ジャバにおいては、例外処理はプログラミング・レベルで行われる。)
本発明の特質のいずれか、あるいは一部、あるいはその全ては、他の任意の特質に適用され得る。
以下の考察は、先に述べた本発明のいずれかあるいは全ての特質に適用する。
本発明の望ましい実施の形態については、純粋に事例として、(改善を略図的に表わす)添付図面を参照しながら以下に記述される。
以下の事例について考察しよう:
1つの方法が呼出される:
Figure 2010267291
i=0でありゼロによる除算が試みられるならば、例外が生じることが判る。これまでは、例外が生じたならばxへの書込みが行われてはならないから、ループ不変コード(y=b)をループ外へ移動することは可能でなかった。
当該方法のファンクションが最初に呼出されると、このファンクションはインタプリタによって実行される。例外が生じるならば、この例外は通常の方法で処理され、コードが解釈されているので、xへの書込みは、例外が生じない場合にのみ生じることになる。望ましい特質に寄れば、方法のファンクションのコードの断片がコードの主パスの一部であると見なされるだけ充分な回数インタプリタにより実行されるならば、これら断片はコンパイルのため待ち行列に入れられる。詳細な論議は、本明細書の項「エージェント資料第1」に見出される。
この論議から、ループが最初にコンパイルされやすいこと、およびこのループに対する主パスがループを含むブロック(単数または複数)のみを含むことが判る。
項「エージェント資料第1」において説明されるように、反復ループは第3のブロックbを表わす。バイト・コード(インタプリタにより翻訳される如き)は、下記のように記号化することができる(相当するジャバ命令が示される)。すなわち、
Figure 2010267291
ブロックbは、バイト・コードの行12ないし27により表わされる。ブロックbが充分な回数実行されると、このブロックはコンパイルのため待ち行列に入れられる。
コンパイラは、ブロックbにあり得る「ゼロで除算」の例外があることを知る。事前例外条件検査が、ブロックbのコンパイル・バージョンへ挿入される。この場合には、検査がコンパイルされる断片の初めに挿入される。(無論、コンパイル・コードに例外が生じる前に、任意の点に挿入されることもあり得る。例外がループ内に生じ得る場合、検査がループのエントリ点に先立ち挿入されることが望ましい。当例におけるように、いずれの場合も、ループのエントリ点はしばしば主パスの一部の始まりとなる。)
コンパイラはまた、ブロックbがループ不変項y=bを含むこと、およびループからループ不変項を除去するため最適化を行うことができることも知る。
ブロックbのコンパイル・バージョンは、例えば、以下の左欄に示されるようなものである(明瞭にするため、簡素化したコードで示される)。コンパイル・コードの各部により行われるステップについての表示は、右欄に含まれる。

コンパイルされたコード 行われるステップ
cmp i,0 iをゼロと比較する
ble glue_bailout iが0より小さいか等しければ、グルー・ コードへ進む
load r,b bをレジスタへロードする
store r,y y=b(ループ不変ステップ)
load r,i ループの初めにレジスタをロードする
load r,x
div r,rm,rn x/iおよび結果をレジスタsへ格納
add r,l i++
cmp r,ra i<b
blt i<bならば、ループを(div r,r,r から)ループを繰返する

上記コードの最初の2行は、事前例外条件検査を含む。iがゼロより大きければ、検査は通り、コンパイル・コードの残りが(3行目から)実行される。iが0より小さいかこれに等しければ、以下に述べるように、コードの2行目が実行を救済装置のグルー・コードへ送る。コンパイルされたブロックbの残りはこの時は実行されない。インタプリタがループ本体の初めから例外が検出される点まで全てにわたりループを解釈することに注目されたい。このように、コンパイル・コードにおける検査は、即時の例外ではなくこれから起こる例外の早期の警告を与えている。ある場合には、このことは、制御がインタプリタへ転送される前には「行われない」はずの、コンパイル・コードにおいて実施されるステップ数を減じることができる。
ループのコンパイル・バージョンにおいて種々の最適化が行われたことが判る。特に、ループの不変項y=bは、ループ外へ移動されている。これは、事前例外条件検査が存在しなかったならば、安全ではなかったかもしれない。
上記の事例は、簡素化されている。実際には、aがループ実行の限度から外れる状況に対して、(iが0より小さいかこれに等しいかの検査の前または後に)「限度外の指標」の事前例外条件検査もあり得る。このように、コンパイル・コードの各部は、幾つかの事前例外条件検査を持ち得る。事前例外条件検査のタイプ例については、以下に述べる。
コンパイルされた断片およびコンパイルされない断片を含むコードの実行の詳細な論議については、項「エージェント資料第1」を参照されたい。一部のステップの概要については、条件検査が例条件の存在を判定する場合における上記事例に対してここに述べる。
コンパイル・コードの最初の行は、iが0より小さいかこれに等しいかを調べるために実行される。もし実行されれば、コードの2行目がグルー・コードの特定のエントリ点に対して実行を指令する。グルー・コードは、制御をインタプリタへ送ることを強制する。グルー・コードは、コードの解釈をどのアドレスから始めるか(また、(コード・キャッシュがコンパイル・バージョンに対する参照を含むので。この場合は、コンパイル・バージョンは使用できない)実行前にはコード・キャッシュを調べないこと)をインタプリタに教える。グルー・コードは、インタプリタに対し、ブロックbのコンパイルされないバージョンの初めにおける(iload_3から、上記参照)実行の再開を示す。インタプリタは、正しい時点における例外を知り、この例外は然るべく処理される。(インタプリタは、例外をそれほど早く起こすことはできない。)
インタプリタが例外を含む断片をいったん実行すると、「エージェント資料第1」において述べたように、制御は、コードのコンパイル・バージョンの実行のためグルー・コードを介して戻される。
同様に、「バウンド外の指標」事前例外条件検査が挿入される場合、関連する検査が失敗すると、制御はグルー・コードへ送られ、更にインタプリタへ送られる。
別の事前例外条件検査は、コンパイルされるべきコードに生じ得る任意の例外に対して用いることも可能である。1つの事前例外条件検査は、幾つかのあり得る例外についての検査に用いることも可能である。
コードの移動および他の早期検査を組込まれた方法に適用することを可能にするため、早期検査予測検査、あり得る範囲のアレイ指標値に対する早期バウンド検査、早期空参照検査、早期のゼロ除算検査、および早期オブジェクト・タイプ検査を含む、このような1組の事前例外検査を使用に供することができる。
検査予測検査は、所与のタイプのオブジェクトをこのタイプに対するフィールドに格納することができるかどうかを証明し、例えば、検査は「グラフィックス」タイプのオブジェクトを「car」タイプ・オブジェクトに格納できるかどうかの質問に答えることができる。
ジャバ(および他のオブジェクト指向言語)は、クラスAがクラスOを拡張しクラスBがクラスOを拡張するならばクラスAおよびクラスBは関連しない場合に、クラスに対する階層的構造を有する。反対に、クラスAがクラスOを拡張しクラスBがクラスAを拡張するならば、クラスBはクラスAのサブクラスであり、システムはAを用いる場合にBを用いることができる。このように、コードの一部におけるオブジェクトの階層が適切でない場合に例外が生じる有効範囲があることが判る。
検査予測条件検査は、クラスのフェルミ準位が正しく、かつ検査予測検査が失敗する場合に制御が救済装置へ進むことを調べるため検査する。
名前が示唆するように、バウンド検査は、アレイ指標がアレイの許容限度すなわちバウンド内にあるかどうかを証明し、さもなければ、救済装置(グルー・コード)を参照して、指標がバウンド外にある例外を生じる。「バウンド外の指標」の例外が生じる状況について、一例が示される。
空白参照検査は、フィールド参照が空白であるかどうかを識別し、その場合このフィールドでは一切が行われない。
一例として、下記のステップを考察しよう。すなわち、
Figure 2010267291
この段階で、「getfield」はオブジェクトから指定されたフィールドをロードする。この状況が生じると、
Figure 2010267291
次にsが空白ならば、なにも行われ得ず、getfieldにより例外が生成されねばならない。事前例外条件検査は、空白が存在するかどうか決定する。もしそうであれば、救済装置が呼出される。
ゼロによる除算検査は、先の事例においてすでに論述されたように、計算不能ファンクションである除数ファンクションの分母がゼロになる状況に達するかどうか決定する。
オブジェクト・タイプ検査は、方法の正しい実現によりオブジェクトがオブジェクト指向システムの階層構造に適合することを保証する検査として最もよく記述することができる。
このような検査の例示として、ドローがグラフィックス・クラスのオブジェクトを描画するための方法である場合に方法がドローを呼ぶ状況について考察しよう。ドローの異なる実現を含むこのような段階でグラフィックスのサブクラスがなければ、方法ドローが最終的なものであり新たなドロー方法によりオーバーライドされないことを仮定することができる。このように、ドロー方法は、たとえ潜在的に多形性であっても、多形性でないと仮定される。コードは、ドロー方法が最終的であるという仮定によりコンパイルされ得る。前記の仮定、例えばコードに対する方法ドローの組込みに基いて、最適化を行うことができる。項「エージェント資料第9」を参照されたい。
オブジェクト・タイプ検査は、呼出された方法を関連するオブジェクトにおいて適切に実現できるかどうか決定するために行われる。当例では、オブジェクトが他のなにものでもなくグラフィックス・タイプであるかどうか、およびドローの方法がオブジェクトに対して適切であるかどうか、検査が決定する。
本発明の方法を実施する装置が、図2Aに略図的に示される。当該装置は、コードを解釈するインタプリタ2000を含んでいる。実行履歴レコーダ2002は、インタプリタ2000によるコードの実行の詳細を記録する。コードの1つのブロックが予め決めた回数実行されるとき、実行履歴レコーダ2002は、コンパイルのためのブロックの待ち行列を管理するコンパイラ・マネージャ2004に通知する。コンパイラ2006は、待ち行列を調べてコンパイルのためのブロックを選択し、実行履歴レコーダ2002のレコードから主パスを決定する。コンパイラはまた、コンパイルされるべき主パス部分に生じる得るなんらかの例外があるかどうかを判定する。もしそうであれば、必要な事前例外条件検査がコードのコンパイルされる断片の初めに挿入される。コンパイラ2006は、この断片をコンパイルして、救済装置2008に対する必要なリンクを設定する。コンパイルされたコードは、実行装置2010により実行される。例外が生じることを事前例外条件検査が示すならば、救済装置2008はグルー・コード2014へ転送し、これが例外に関するコンパイルされないコードの実行のため制御をインタプリタ2000へ送る。
図2Bは、コンパイルされないジャバ・コード2100の一部を示している。コード部分2100は、インタプリタ2000を用いて実行される。
セクション2100は、ループ2102を含んでいる。ループ2102内には、あり得る例外(例えば、例外「ゼロで除算」を生じる結果となる除算)が含まれる。ループ2102はまた、ループ2102の実行速度を増すためにループから出ることが望ましいループ不変項2106をも含む。
コード2100の何回かの実行後に、ループ2102を形成するコード部分がコードの主パス部分であることが見出され、これはコンパイルのため待ち行列に置かれる。図2Cは、コード部分(全体的に2108として示される)のコンパイル・バージョンを示している。コンパイルされたコード部分2108は、例外が生じるかどうかを調べるため検査する事前例外条件検査2112を含む。コンパイル・バージョンは、ループ2114を含むが、コンパイルにおいて行われる最適化により、このバージョンは以前より小さく実行が速い。ループ不変項2116はループ2114から移動されて、実行の速度を増す。事前例外条件検査2112は、例外が生じることが見出される場合に、救済装置2008に対するパス2118を含んでいる。
以上のことのいずれかまたは全てにおいて、本発明の幾つかの特徴がコンピュータ・ソフトウエアを用いて実現された。しかし、無論、当業者には、これらの特徴のいずれもハードウエアまたはハードウエアとソフトウエアの組合わせを用いて実現されることが明らかになるであろう。更にまた、ハードウエア、コンピュータ・ソフトウエアなどにより行われるファンクションが電気信号などを用いて行われることが容易に理解されよう。
情報の格納に関する特徴は、適切な記憶場所またはストアによって実現される。情報の処理に関する特徴は、ソフトウエアまたはハードウエア、あるいは両者の組合わせのいずれかにおいて、適切なプロセッサまたは制御手段によって実現される。
上記のいずれかあるいは全てにおいて、本発明は、下記の形態のいずれか、あるいは一部、あるいは全てにおいて具現され、コンピュータ・システムを動作させる方法において具現され、コンピュータ・システム自体において具現され、システムを動作させる方法を実行するようプログラムされあるいは構成されるときコンピュータ・システムにおいて具現され、そして(または)システムを動作させる方法により動作するためのプログラムが記録されたコンピュータ読取可能な記憶媒体において具現されよう。
本文に用いられる用語「コンピュータ・システム」は、「コンピュータ」、「システム」、「装備」、「装置」、「マシン」などと互換される得る。コンピュータ・システムは、仮想マシンでありあるいは仮想マシンを含み得る。
上記のいずれかあるいは全てにおいて、方法および装置の特徴および特質を含む異なる特徴および特質は適切な方法において組合わされよう。
本発明が純粋に事例として記述されたこと、および詳細の修正が本発明の範囲内で可能であることが理解されよう。
本文の記述に開示された各特徴、および(適切な場合)請求の範囲および図面が、独立的にあるいは適切な組合わせにおいて提供される。
エージェント資料第3−コンピュータ・システム、コンピュータ読取り可能記憶媒体、および同媒体を動作させる方法、および同システムを動作させる方法
本発明は、コンピュータ・システムに関し、かつコンピュータ・システムを動作させる方法に関する。望ましくは、本発明は、コンピュータ・システムにおけるメモリの管理に関し、特にコンピュータ・システムにおけるキャッシュ・メモリの管理に関する。望ましい実施の形態においては、本発明は、低使用頻度のコードなどの空間的離隔のためのアウトライアに関する。
コンピュータ・システムにおいて、色々なレベルのキャッシュ・メモリが存在する。このことは、キャッシュ自体を有効に動作させることができるならば、改善された効率、従って速度に関してシステムにとって有利となる。本発明に関しては、キャッシュに、特に最も高速なキャッシュにおかれて頻繁に実行される見込みのあるコードを持つことが有利であることが判っていた。以下に述べる本発明の実施の形態において、ジャバ・コードは、ダイナミック・コンパイラを用いてランタイムにおいてより速く実行するようにコンパイルされる。有効なコード(密度)のキャッシュ密度を改善するため、本発明の目的の1つとして、キャッシュの最も速いものにダイナミック・コンパイラが生じたコンパイル・コードを置くことが有利となろう。
従来技術の解決法は、キャッシュ・メモリの密度を最大化するものではない。例えば、以下に更に詳細に論じるように、従来技術のシステムの高速キャッシュが、多くのキャッシュ・ミスを生じるおそれがあるキャッシュで頻繁にアクセスされるコード密度を減じる大量の頻繁にアクセスされないコードによってしばしば占有されることが判った。本発明は、上記の問題および(または)他の問題を軽減することを求めるものである。
本発明の第1の特質によれば、コードの主パス部分をコンパイルするよう構成されるコンパイラを含むコンピュータ・システムが提供される。
主パスは、コードを介する頻繁に実行される実行パスを表わし、コードの多数の個々のブロックを含む。主パスがコンパイルされるよう(かつ望ましくは主パスのみがコンパイルされるよう)構成することにより、コンパイル・バージョンが頻繁に実行されるコードのみを含むので、コードのコンパイル・バージンにおける有効コードの密度が増加される。このように、キャッシュにおける有効なコード密度を増加することができる。
主パスがコンパイルされるよう構成することにより、コードを介する最も頻繁に実行されるパスを含むコードのブロックがキャッシュに格納される見込みが多くなるように、かつ主パス・コードの他のブロックと同じ(L1)キャッシュに格納される見込みが多くなるように構成することが可能である。このように、主パスのランタイム実行を速くすることができる。
当該システムは更に、主パスについての情報を記録する実行履歴レコーダを含むことが望ましい。実行の走行中に主パスのオンライン・レコードが作られることが望ましい。従って、当該システムは、コードの実行中に主パス部分を決定する手段を含むことが望ましい。
当該システムは更にコードをコンパイルするコンパイラを含み、コンパイラは主パス部分をコンパイルするよう構成されることが望ましい。当該コンパイラはオンライン・コンパイラであることが望ましい。前記主パス部分が頻繁に実行されないコードは含まないことが望ましい。このように、コードの主パス部分がコードの頻繁に実行されない断片から切離して構成されるならば、システムのメモリの管理を改善することができる。
主パスのコンパイルにおける望ましい特徴の更なる論議は、本明細書のエージェント資料第1に見出すことができる。
当該システムは更に、実行パスが主パスを外す場合に使用されるアウトライアを含むことが望ましい。
本発明の第2の特質によれば、頻繁に実行されないコードの実行時に使用されるアウトライアを含むコンピュータ・システムが提供される。
例えば、コードの主要でない場所への条件付き転送により、あるいは検出される実行条件により、実行パスが主パスを外す場合、制御はアウトライアへ送られる。アウトライアは、制御が転送される主パスの部分と同じコード・バッファにあることが望ましい。
主パスは、その時の挙動に基いてコードを介する実行のあり得るパスの「最良の推測」である。これは、ときおりコードの特定の実行には適用し得ないことを証明する。
当該システムは更にインタプリタを含むことが望ましい。このインタプリタは、頻繁に実行されないコードの少なくとも一部を実行するため使用されることが望ましい。当該システムは更に、コンパイルされたコードとコンパイルされないコードの実行間に変換するコンバータを含むことが望ましい。このコンバータは、アウトライアを含むことが望ましい。
実行が条件付き転送により主パスを外した場合、アウトライアはインタプリタへの制御の転送を行うようになっていることが望ましい。
実行が遭遇する実行により主パスを外した場合、アウトライアが例外ハンドラヘ制御を転送するようになっていることが望ましい。
前記アウトライアは、頻繁に実行されないコードの実行前に状態を更新するようになっていることが望ましい。例えば、新たな部分がコンパイルを保証するまで典型的に解釈される新たな主要でないパスへ制御が渡される場合、例えば主パスのコードのコンパイルにおいて最適化が用いられた場合に更新が要求される。
コードは、アウトライアへの条件付き分岐を含み、条件付き分岐が条件付きテストを含み、かつ条件付きテストが失敗するならば、実行が主パスに従うようにすることが望ましい。プロセッサは、しばしば、順方向分岐が失敗し、分岐が行われる前に種々の検査を行うことを予測する。分岐の条件がめったに生じず、その結果(主パスにおける)実行が失敗するならば、この条件に対するコードがコンパイルされるとき、このコードは、条件が真であるならば制御がアウトライアへ進むように構成される。このように、順方向分岐はめったに生じず、このため、プロセッサ検査はアウトライアへのめったに実行されないジャンプ時のみに行われる。このように、条件が通常は真でなく、実行が単に主パスを通るよう終わるので、プロセッサ時間は減少し得る。
当該システムは、頻繁に実行されないコードから頻繁に実行されたコードを分離する手段を含むことが望ましい。
このことは、独立的に提供される本発明の特に重要な特徴であり、従って本発明は更に、頻繁に実行されるコードと頻繁に実行されないコードとを分離する手段を含むコンピュータ・システムを提供する。
頻繁に実行されないコードから頻繁に実行されるコードを分離することにより、システムのメモリが更に効率的に管理されることが可能になる。例えば、この方法は、少数の頻繁に実行されないコードがキャッシュへ取入れられるよう構成することを可能にする。このことは、キャッシュのミスを減らすことによりランタイムにおいて頻繁に実行されるコードの改善された実行速度を与えることができる。コードを分ける手段は、以下に更に詳細に述べるように、特定の方法でコードをコンパイルするコンパイラにより提供される。この分離は、あるタイプのコードが1つの記憶領域に格納され、かつ他のタイプのコードが別の記憶領域に格納されるように構成することによって行われる。
当該システムは更に、アウトライアと、このアウトライアから主パス部分を分離する手段とを含むことが望ましい。
このため、システムは、頻繁に実行されるコードを第1の記憶領域に格納する手段と、頻繁に実行されないコードを第2の記憶領域に格納する手段とを含むことが望ましい。システムは、主パス部分を第1の記憶領域に格納する手段と、アウトライアを第2の記憶領域に格納する手段とを含むことが望ましい。第1の記憶領域と第2の記憶領域とは、コード・バッファの領域であることが望ましい。
頻繁に実行されるコードと頻繁に実行されないコードとは、コード・バッファの異なる領域において生成されることが望ましい。例えば、システムは、頻繁に実行されないコードをバッファの「後方」へ格納する手段を含む。システムは、主パス部分とアウトライアとをコード・バッファの反対の端部に格納する手段を含むことが望ましい。
コードをこのように格納することにより、頻繁に実行されないコードはキャッシュへ取入れられにくいが、頻繁に実行されるコードはキャッシュへ取込まれやすいようにコードを構成することが可能である。従って、コードは、頻繁に実行されないコードがキャッシュへ取入れられにくいように格納されることが望ましい。
このことは、本発明の特に重要な特徴であり独立的に設けることができる。このため、本発明は更に、コード・キャッシュを含むコンピュータ・システムを提供し、このシステムは頻繁に実行されないコードがキャッシュに取入れられにくいように構成される。
主パスのコンパイルにおいて、頻繁に実行されるコードがコンパイルされた主パス部分を含むことが望ましい。これらの部分は、コード・バッファにおいて順方向に生成されることが望ましい。アウトライアは、コード・バッファにおいて逆方向に生成されて、主パス部分から空間的に分けられることが望ましい。このように、コード・バッファにおいてアウトライアにより占められるメモリは、コンパイルされないコードの頻繁に実行されないコード部分の元の部分のコンパイル・バージョンよりも非常に少なくことができる。
本発明は更に、主パスのコンパイル・コードの実質的に全て(および、望ましくはこれのみ)を一緒に1つの記憶領域に格納する手段を含むコンピュータ・システムを提供する。当該システムは更に、主要でないケースを空間的に別の領域で処理するコード記憶手段を含むことが望ましい。
本発明はまた、コンピュータ・システムを動作させる方法をも提供し、この方法はコードの主パス部分をコンパイルすることを含む。当該方法は、コードの実行中に主パスを決定することを含むことが望ましい。
アウトライアは、実行パスが主パスを外れるときに使用されることが望ましく、またアウトライアはインタプリタおよび(または)例外ハンドラに対する制御の転送を行うことが望ましい。
アウトライアは、頻繁に実行されないコードの実行前に状態を更新することが望ましい。
コードがアウトライアへの条件付き分岐を含む場合、条件付きテストが失敗するならば、前記条件付き分岐が、実行が主パスに追従するような条件付きテストを含むことが望ましい。
当該方法は、頻繁に実行されないコードから頻繁に実行されるコードを分離することを含むことが望ましい。
更に本発明により提供されるのは、頻繁に実行されるコードと頻繁に実行されないコードとを分けることを含むコンピュータ・システムを動作させる方法である。
当該方法は、アウトライアから主パス部分を分離することを含むことが望ましく、また主パス断片を第1の記憶域に格納し、アウトライアを第2の記憶域に格納することが望ましい。第1の記憶域と第2の記憶域とは、コード・バッファの領域であることが望ましい。当該方法は、主パスの断片とアウトライアとをコード・バッファの反対端部に格納することを含むことが望ましい。
当該方法は、頻繁に実行されないコードがキャッシュへ取込まれにくいようにコードを格納することを含むことが望ましい。
本発明はまた、コード・キャッシュを含むコンピュータ・システムにおけるコードの格納方法を提供し、当該方法は頻繁に実行されないコードがキャッシュに格納されにくいようにするものである。
本発明によれば、主パス・コードをコンパイルし、このコンパイル・コードを1つの記憶域に格納するステップを含む、コンピュータ・システムを動作させる方法が更に提供される。当該方法は、アウトライアを別の記憶域に格納することを含むことが望ましい。
また本発明によれば、頻繁に実行されないコードがアウトライアとは別になるように行われる、コードをコンパイルする方法も提供される。
本発明はまた、先に述べた方法によりコンピュータ・システムに格納されるコードを提供し、また本発明によりコードをコンパイルするコンパイラを提供する。
本発明は更に、本発明による方法を実施するためプログラムが記録されたコンピュータ読取可能な記憶媒体を提供する。
本発明はまた、頻繁に実行されるコードがアウトライアとは別になるように行われるコードのコンパイルのため、プログラムが記録されたコンピュータ読取可能な記憶媒体を提供する。
本発明は更に、前述のような方法に従ってプログラムされたコンピュータを提供する。
本発明はまた、頻繁に実行されるコードがアウトライアとは別になるように行われるコードのコンパイルのためプログラムされたコンピュータを提供する。
従って、本発明は、望ましくはアウトライアは空間的に別の領域にのみ格納されるが、主パスのコードの実質的に全て(および望ましくは、これのみ)を一緒に1つの記憶域に格納する手段を含むコンピュータ・システムを提供する。このようなメモリのレイアウトは、典型的にキャッシュへロードされる有効コード量を最大化する。
本発明はまた、アウトライアは別の記憶域に格納することが望ましいが、主パスのコードの全てをコンパイルし、コンパイル・コードの実質的に全てを1つの記憶域に格納するステップを含む、コンピュータ・システムを動作させる方法を提供する。
「アウトライア」は、優先して実行されるコードのため通常の記憶域外に存在するので、このように呼ばれる。このように、主要でないパスを意味する頻繁でないコードは、更に頻繁に用いられる主パス・コードとは分離され、従って、主パスが実行中であるかぎりキャッシュへロードされることがない。
本発明の特質のいずれか、あるいは一部、あるいは全てが、他の任意の特質に適用され得る。
以下の考察は、先に述べた本発明のいずれかおよび全て、および本発明の特質に適用する。
適切な場合、純粋に事例として、(上記の改善を略図的に示す)添付図面が参照される。
図3Aは、計算1、2、3、4および5をそれぞれ実施するブロックB1、B2、B3、B4およびB5を含むジャバ・バイトコードの部分を示している。B4は、B1、B2またはB3において生じる例外を処理するコードである(B4に対するパス9000、9002および9004を参照)。ブロックを介する主パスは、B1の終りにおける制御の条件付き転送時に制御が(ほとんど)つねにB1からB3へ進み(パス9006)B3が制御をB5へ進む(パス9008)如きものであることが判る。パス9000、9002および9004は、ほとんど利用されない。
図3Aの事例に対する元のジャバ・ソースの概要は、
Figure 2010267291
主として条件が偽であり、かつ計算1、2または3はいずれも捕捉項(ブロックB4)により捕捉される例外に遭遇しないものとする。従って、このような動的な挙動に基く有効コードは、もっぱらブロックB1、B3およびB5からなる。
(特に、ランタイム時のコンパイルの場合における)このようなコードに対する標準的なコンパイル手法は、5つ全てのブロックに対してコードを注入することであり、コンパイル・コードの以降の実行における全ての偶然を許容する。このため、B2およびB5の潜在的にむだなメモリ・スペースのコンパイル・バージョンは、以下に述べるように、望ましい実施の形態に比して、有効コードのキャッシュ密度の低減をもたらし得る。このような方法の多くがこのような標準的な方法でコンパイルされるならば、コンパイル・コードを包含するため用いられるより広い範囲のアドレス・スペースは、アドレス・スペース・ページ境界にわたる制御の転送を更に頻繁にもたらし得、その結果(仮想メモリがコンピュータ・システムにおいて使用可能にされるならば)望ましい実施の形態と比してページ・フォルトの頻度が高くなる。
プログラムが走るとき、プロセッサは、メモリから命令を取出す。プログラムに対する命令が1ページの終りまで走るとき、次のページが主メモリになければ、メモリ・マネージャは次のページを見出し検査するため照会されねばならない。これは時間を要する。従って、ページ境界にクロスすると時間を要する。
コードの標準的なコンパイルが図3Bに示される。ブロックB1、B2、B3、B4およびB5が逐次セットアウトされる。
図3Cは、望ましい実施の形態によるコンパイル・コードを示している。主パスがブロックB1、B3およびB5を含むことに注意されたい。
コードのコンパイルは、ブロックB1における条件テストのロジックを反転させ、その結果予測されるフォール・スルーのケースはブロックB3に対するものとなり、制御の予測されないフローはアウトライアOL1に対するものとなる。ブロックB1およびB3に対するコードは、ソースおよびバイトコードのレベルでは隣接していないにも拘わらず、スペース的に連続していることに注意されたい。このことは、分岐予測ハードウエアを備える最近のプロセッサにとって有利である。このような定義による隣接性がブロックB2が間に挿入された場合より小さな範囲のメモリ・アドレス・スペースで済むことも注意されたい。
ブロックB2およびB4は、これらが主パスの一部でないことが判っていたので、コードのコンパイル・バージョンには存在しない。
B5もまたブロックB3とスペース的に隣接しており、例外ハンドラB4へジャンプするためバイトコードに存在する元の無条件の制御転送は、対応するホスト命令を要求しない。ブロックB3は、制御フローに関して単にブロックB5へ直結している。このため、ブロックB1、B2およびB5は、スペース的に隣接しており、従ってブロックB3およびB4が散在されるより合計において小さな範囲のメモリ・アドレス・スペースで済む。これらのブロック(B1、B2およびB5)は、ジャバ・方法の今日の実行特性をモデル化するようにパッケージされてきた。
B1が最初に制御を受取り、プロセッサへキャッシュ・ラインのローディングを要求すると、直ちに影響を受けるキャッシュ・ラインに優れたキャッシュ密度をもたらす。(ブロックB2およびB4において)頻繁に実行されないコードは、キャッシュへ取込まれることがない。
次に、同様な方法で所与のコード・バッファへコンパイルされる幾つかの方法(または、その主パス)について考察しよう。これらが制御を相互に渡すので、キャッシュの摂動は,有効コードのより大きなキャッシュ密度を持つことによって低減されることになる。低いキャッシュ密度は、更に頻繁にキャッシュの衝突およびキャッシュのミスをもたらし得る。また、コンピュータ・システムが仮想メモリを用いる場合、望ましい実施の形態は、頻繁に実行可能なコードに対するアドレス・スペースの使用における低減の結果、ページ・フォルトの低減を生じ得る。プロセッサがメモリにない命令を実行しようとするとき、ページ・フォルトが生じる。ページ・フォルトが生じると、実行されるべき命令が見出されるページが仮想メモリとして用いられる恒久的記憶装置からメモリへロードされる。これは、実行速度を低下させる時間を要する動作である。
図3Cは、実行が主パスから外れる場合に使用されるアウトライアOL1およびOL2を示している。条件付きテストがB1の終りに通るならば、制御はOL1へ進む。OL1は状態と同期し(すなわち、レジスタのキャッシュ値が再びそれらの対応する記憶場所へ溢れることを保証し)、次いで制御を1つのグルー・コードへ送りフォールバック・インタプリタを介する計算2に対応する予測されない(主要でない)パスの再開を生じる。ダイナミック・コンパイルを保証するのに充分に頻繁な主要でないパス実行の対応バイト・コードの如きときまで、これらバイトコードが解釈し続け、これによりバイト・コード実行の更に重要なパスに対するコード・バッファにおけるスペースを節減する。このように、OL1のタイプのアウトライアが、計算2の実行を必要とするように、正常な制御のフローが主パスから外れた予測されないパスをとる場合を処理する。
OL1のようなアウトライアのコードの一例は、下記のとおりである。
a=r //a,b,cに対する状態を更新し記憶場所を復元する
b=r
c=r
callglue (3000)//グルー・コードを呼出し、バイト・コード・アドレス3000
からコンパイルされないコードを解釈するよう指示する

インタプリタは、ブロックB2の初めに実行を開始する。3000におけるバイト・コードが充分に実行されるならば、これは後でコンパイルされる。次にグルーが3000から解釈するよう指示されると、B2のコンパイルされたバージョンが存在することを認識する。OL1の「callglue」ラインを(自動的に)「goto...」するよう変更して制御をコンパイル・バージョンへ向ける。これは、「パッチング」として知られる(本明細書のエージェント資料第12参照)。このように、次にアウトライアOL1が呼出されると、制御はグルーを用いることなく直接b2へ送られる。(本明細書のエージェント資料第1も参照。)
異なるタイプのアウトライアOL2は、例外条件が主パス内で認識される状況を処理する(例えば、ブロックB1が、その適法の境界外のアレイにアクセスしようとする)。主パスは、例外を処理するため制御をアウトライア(OL2)へ送る。ここで、アウトライアは、通常状態を同期させ、次に仮想マシン内に例外を生じるため制御をグルー・コードへ送る。
OL2のようなアウトライアのコードの一例は、下記のとおり。
a=r //状態の更新、a,b,cに対する記憶場所を復元する
b=r
c=r
callglueが例外Xを生じる //タイプXの実行を処理するため、グルーに制御 を実行 ハンドラへ送るよう指示する
グルー・コードの使用およびインタプリタへの制御の転送の更なる論議は、本明細書の項「エージェント資料第1」に見出すことができる。
図3Cには明瞭にするため2つのアウトライアのみが示された。実際には、各例外および生じ得る主パスからの各偏差を処理するため、個々のアウトライアが提供される。
アウトライアは、関連する主パスと対応するこれらコードのブロックから空間的に遠く離れている。実行中に予測されない、すなわち例外の挙動に遭遇するとき、所与のコンパイルが、主パスにより使用されるアウトライアの主パスに対する1組のブロックと別の1組のブロックを生じる。
図3Dは、コンパイル・コードのブロックおよびコード・バッファ9054へ充填されるアウトライアを示している。主パスのブロックが方向9056においてブロックへ充填され、アウトライアは方向9058において充填される。主パスのブロックは、コード・ブロックの一端部を占有し、そのアウトライアは他端部を占有する。コードの新たな断片の各コンパイルが、主パスのブロックおよびアウトライアの新たな組を生じ、コード・バッファはアウトライアと主パスのブロックが相互に成長するように設計される。従って、正常な実行過程において、アウトライアが実行されない場合、これらアウトライアの存在がプロセッサのキャッシュの挙動に関してシステムにおいてトランスパレントであることが判る。こに有効コードの最大キャッシュ密度および有効コードの最大アドレス・スペース密度が得られる。
コード・バッファはコンパイラ・マネージャにより管理され、このマネージャがバッファの高メモリ端部と低メモリ端部のどこにあるかを示す。コンパイル・コードがブロックに対して生成されると、ブロックのコンパイル・バージョンがバッファに入れられ、その後アウトライアに対するコードのブロックが続く。次にアウトライアに対するコードは、ブロックの反対側へ移される。このように、主パスのブロックおよびアウトライア・ブロックが別の端部からバッファを埋める。このことは、キャッシュ密度を改善し、ページング問題を減じる。
代替的な実施の形態においては、主パスのコード・ブロックとアウトライアは、ブロックの同じ端部から埋めることができるが、コードの各断片ごとのブロック単位である。上記の事例では、バッファはb1、b3、b5、OL1、OL2、OL3、、、を(この順序で)含むことになる。コンパイルされる次の断片もまた、主パスのブロックに対するコードを展開し、その後アウトライアのコードが続く。しかし、このような構成は、アドレス・スペースがアウトライアにより費消されてアウトライアのコードがキャッシュへ取込まれる機会がより大きくなるので、望ましくない。
図3Eが示すように、プロセッサ・チップ9200が400MHzの速さで動作し、オンボードの16Kの第1レベルのメモリ・キャッシュ9202と関連させ得る。例えば512Kの第2レベルのキャッシュ9204は、チップ9206と関連させられる。これらは、第1および第2レベルのキャッシュ・メモリの400MHzより著しく低い速度で動作するおそらくは32MBの通常のRAM9208に加わる。動作において、プロセッサは、一時に1行ずつキャッシュから命令を取込む(32バイト)。最も頻繁に使用されるコード、すなわちコンパイルされた主パス・コードがそれほど頻繁に使用されないコードから別の記憶域に格納されることを保証することにより、キャッシュにおいて最も頻繁に使用される命令の密度を増すことができる。この過程においては、それほど頻繁に使用されない命令もまた一緒に格納されるが、キャッシュでないメモリに格納され、これによりキャッシュを汚染することがない。
頻繁に実行される断片の識別
コードの一部の頻繁に実行されない断片から頻繁に実行される断片を分けるために、頻繁に実行されるこれら断片を最初に識別することが必要である。これは、コードの実行ランを分析して、コードを介して最も頻繁に実行されたパス(主パス)を識別することによって実施可能である。主パスは、コードの前のランから決定することができる。本発明の望ましい実施の形態において、主パスは実行中オン行で動的に決定される。主パスの決定の詳細な論議については、頭書のエージェント資料第1に見出すことができる。要約すれば、コードの各ブロックが実行される回数は、実行履歴レコーダにより記録される。実行履歴レコーダは、ブロックが実行されたことを知り、かつ制御がどこから送られたかを知り、また(制御がブロックから移る)後続ブロックをも知る。この情報から、各ブロックの最も頻繁な後続部を決定することができ、またこれにより主パスを見出すことができる。
コードがジャバ・アプリケーションのコードである場合は、このコードはインタプリタにより最初に翻訳される。実行履歴レコーダは、インタプリタにより走らされ、各ブロックの解釈についての情報を記録する。いったんブロックがインタプリタにより閾値回数だけ実行されると、インタプリタはブロックの詳細をコンパイラ・マネージャにより管理されるコンパイルの待ち行列へ送る。この回数の閾値は5である。コンパイラ・マネージャが待ち行列を調べてコンパイルされるブロックを得ると、マネージャはブロックの解釈に関して実行履歴レコーダにより記録された情報を用いて、このブロックおよびその最も頻度の高い後続ブロックから主パスを追跡する。次に、コンパイラは、以下に更に詳細に述べるように、コードの主パス部分のコンパイル・バージョンを生じる。
例えば、図3Aに略図的に示したような全般的構造を持つコンパイルされないコードの一部については、コードのブロックを介する実行パスは通常B1、B3、B5である。ブロックB1が5回実行されたとき、このブロックはコンパイルのため待ち行列に置かれる。コンパイラは、B1から主パスを追跡し、実行がときに生じても、B1の最も高い頻度の後続ブロックがB3であったこと、およびB3の最も高頻度の後続ブロックがB5であったことを見出す。このように、B1からの主パスはB1、B3、B5である。その後、コンパイラは主パスのコンパイル・バージョンを生じるよう進む。
主パスのコンパイル
コードB2およびB4の頻繁に実行されない部分のコンパイル・バージョンは用意されない。代替的な実施の形態においては、コードのコンパイル・バージョンは用意され得るが、これらのコード部分のコンパイルは時間を要し、コンパイル・バージョンはメモリ・スペースを占有し、このため、代替的な実施形態は、例えば仮想マシンにおけるメモリが制限される場合には魅力がない。
断片B1、B3、B5は逐次展開される(図3Cの断片b1、b3、b5参照)。例えば、公知の最適化手法を用いて、コードのコンパイルにおける最適化が行われる。例外検査は、コンパイル・コードにおける関連する位置に挿入され、この例外検査はコンパイルされないコードのブロックB1、B3、B5における最初の検査に対応する。例外検査はそれぞれ、アウトライアと呼ばれるコードの関連部分へのジャンプを含む(B1における例外については、OL2が示される)。先に示したように、例外の処理のためには、アウトライアがコードB4のコンパイル・バージョンは含まないことが望ましい。アウトライアは、コードのコンパイル・バージョンからの制御の転送前に必要な状態およびレジスタを更新するためのコードを含む。
例えば、ブロックB1の終りにおける転送に対応する条件付き転送時にコンパイル・コードが最適化された場合、ブロックb1の終りでは一部の状態がまだ更新されていないことがある。また、コードのコンパイル・バージョンは、元のコードの記憶場所とは異なる記憶場所に状態を保持しているかも知れない。アウトライアOL1は、状態の全てを更新して、これら状態がブロックB1からB2への制御の転送時にそうであったものに登録する。次に、アウトライアOL1は、制御を変換装置へ転送し、この装置が制御をインタプリタへ転送し、このインタプリタがB2に対するコードの解釈へ進む。いったん例外が処理されると、適切な場合は、制御はグルー・コードを介して再びアウトライアへ戻すことができ、このアウトライアが更新された状態を復元し、コンパイル・コードの実行がブロックb3において再開し得る。変換装置およびグルー・コードの役割の更なる論議については、項「エージェント資料第1」を参照されたい。
ほとんどの場合例外が生じず、実行は単にブロックb1、b3、b5を通り過ぎることが理解されよう。
先に示したように、コンパイル・コードはコード・バッファにおいて順方向に生成され、アウトライアはコード・バッファにおいて逆方向に生成され、その結果これらがバッファにおいて空間的に分けられる。このように、アウトライアは、キャッシュへ取込まれにくい。例外の(アウトライアを介する)実行は頻繁に実行されないコードが主パスのコードと共にキャッシュされた場合より遅くなるが、この速度の低下は、特に頻繁に実行されないコードの実行が非常にまれである場合に、主パスの高い実行速度による補償以上のものである。
本発明の方法を実施する装置は、図3Fに略図的に示されている。当該装置は、コードの解釈のためのインタプリタ9300を含んでいる。実行履歴レコーダ9302は、インタプリタ9300によるコードの実行の詳細を記録する。ブロックが予め定めた回数だけ実行されると、実行履歴レコーダ9302が、コンパイルのためのブロックの待ち行列を管理するコンパイラ・マネージャ9304へ通知する。コンパイラ9302は、待ち行列を調べてコンパイルされるブロックを得、実行履歴レコーダ9302のレコードから主パスを決定して主パスの部分をコンパイルし、この部分に対して必要なアウトライアを用意する。コンパイルされた部分は、コード・バッファ9308へロードされる。主パスの部分はバッファ9308において順方向にロードされ、アウトライアはバッファ9308において逆方向にロードされる。時には、バッファ9308におけるコンパイル・コードの行がキャッシュ9310へ取込まれる。コンパイルされたコードは、バッファ9308あるいはキャッシュ9310から実行装置9312により実行される。主パス・コードでは処理できない実行に遭遇すると、アウトライア9314が何らかの必要な状態を更新して、例外の処理のためコードを解釈するよう進むインタプリタ9300へ制御を送るグルー・コード9316へ転送する。
本発明の上記の特徴の一部あるいは全ては、コンピュータ・ソフトウエアを用いて実現された。しかし、無論、当業者には、これらの特徴のいずれもハードウエアあるいはハードウエアとソフトウエアの組合わせを用いて実現できることが明らかであろう。更にまた、ハードウエア、コンピュータ・ソフトウエアなどにより行われるファンクションが電気信号などを用いて実施されることは容易に理解されよう。
情報の記憶に関する特徴は、適切な記憶域またはストアにより実現される。情報の処理に関する特徴は、ソフトウエアあるいはハードウエア、あるいはその組合わせにいずれかにおいて、適切なプロセッサまたは制御手段によって実現される。
上記の一部あるいは全てにおいて、本発明は、下記の形態のいずれか、あるいは一部、あるいはその全てにおいて具現され、コンピュータ・システムを動作させる方法において具現され、コンピュータ・システム自体において具現され、コンピュータ・システムを動作させる方法を実行するよう構成されたプログラムによればコンピュータ・システムにおいて具現され、および(または)システムを動作させる方法に従って動作するようになされたプログラムが記録されたコンピュータ読取可能な記憶媒体において具現される。
本文に用いられる如き用語「コンピュータ・システム」は、「コンピュータ」、「システム」、「装備」、「装置」、「マシン」などと互換であり得る。コンピュータ・システムは、仮想マシンでありあるいはこれを含むものでよい。
方法および装置を含む上記、および他の特徴および特質の一部あるいは全てにおいて、特徴および特質はどんな適切な方法においても組合わせることができる。
本発明が純粋に事例として記述されるものであり、細部の修正が本発明の範囲内で可能であることが理解されよう。
本文に開示される各特徴、および(適切な場合)請求の範囲および図面は、独立的に、あるいは何らかの適切な組合わせにおいて提供することができる。
エージェント資料第4−コンピュータ・システム、コンピュータ読取可能な記憶媒体およびその動作方法、およびコンピュータ・システムを動作させる方法
本発明は、「インターフェース」の抽象化を、特にジャバにおいて用いるオブジェクト指向言語の最適化された実行に関するものであることが望ましい。望ましい実施の形態においては、本発明は、インターフェースの諸法に対するディスパッチ機構に関するものである。
ジャバは、インターフェースによる、クラス・タイプの単一の継承をサポートする。インターフェース自体は、他のインターフェースから様々な継承内容であり得る。具体的なクラスが1組のインターフェースを実現することを要求するとき、各方法の実現方法をこれらインターフェースにより直接あるいは間接的に提供しあるいはこれを継承されねばならない。資料[2]を参照されたい。
オブジェクト指向プログラミングにおいては、オブジェクトは、各オブジェクトが属性(その特徴すなわち特質についてのデータ)および方法(オブジェクトが行うファンクション)と関連した階層的構造において分類される。このようなファンクションは、典型的に、モバイルその他の電話の関連における「鳴奏(リング)」、あるいはオーディオおよび(または)ビデオの再生装置の関連における「再生(プレイ)」である。ジャバのようなオブジェクト指向言語における特徴の1つとして、オブジェクトの上位クラスの属性および方法は、そのサブクラスにより「継承」される。
例えば、図4Aに示されるように、「ビークル」400は、オブジェクトの「バイク」402と「カー」404の両クラスの上位クラスである。サブクラス「カー」は、「サルーン」406と「スポーツ」408とへ再分割でき、例えば、スポーツ・カーなどの製造会社名あるいはモデルに従って更なる再分割が可能である。車輪の数、モデルなどのサブクラス「カー」の属性は、サブクラス「サルーン」および「スポーツ」により継承される。同様な特質において、「ライトの点灯」などの方法は階層内ではカーにとって一般的であり得るが、あるサブクラスにおいては、方法自体は、実際にライトが点灯できる前にあるファンクションが行われなければならない程度に従って異なり得る。例えば、ポップアップ型ヘッドライトを備えるスポーツ・カーは、点灯できる前にライトを上昇させる必要がある。このような場合、継承は、問題となるあるファンクションを実施できる前にこのファンクションを実施する必要により取消されねばならない。
別の文脈においては、モバイルその他の電話のユーザは、電話の使用が仕事であるか社交であるかに従って異なる鳴奏音を出すように自分の電話セットを構成したいと思うかも知れない。このような関連では、「リング」は「インターフェース」と呼ばれることになる。その意味は、「リング」が階層における種々のオブジェクトが(先のカーの事例における「ライトの点灯」のように)生じるが、実際の構成はオブジェクトごとに異なるファンクションであることである。従って、インターフェースは、幾階層にも横断する。このように、インターフェースは、オブジェクトが行うことができるファンクション(「リング」、または「プレイ」、あるいは「レコード」などのような)のリストである。
1つの継承は、通常は、ディスパッチ・テーブル(仮想的なファンクションテーブルとしても知られる)を用いて実現される。サブクラスは、その上位クラスのディスパッチ・テーブルを継承し、これを新たな方法で拡張し、取消されたエントリに置換わる。
C++のような言語における多くの継承は、多くのディスパッチ・テーブルおよびオフセット(詳細については、資料[1]参照)を用いて通常実現される。
関連するデータは、図4Bに略図的に示されるディスパッチ・テーブルのスロットに格納される。テーブル410におけるオブジェクトの属性はつねに、オブジェクトの開始点から同じ距離に置かれる。オブジェクトは、同じファンクションの開始点からつねに同じ距離にある方法のディスパッチ・テーブル414に対するポインタ412を含む。しかし、インターフェースの方法が用いられるとき、先に述べたように、ディスパッチ・テーブルのどのスロットに特定のファンクションが現われるかを知るより所はもはやない。このことは、多くの継承に固有のものであり、特にジャバ言語において見出されるインターフェースに固有の問題である。
今日まで、ディスパッチ・テーブルは全て、アクセスした方法が適正な方法であったことを調べるため照会されねばならなかった。理想的には、インターフェースに対する一義的な識別子が必要とされるが、実際にはテーブルは含まれる全てが一義的な識別子を持つようなサイズであり得ないことが実感された。
ファンクション「プレイ」の類比に関しては、例えばビデオ・レコーダに対して1つのディスパッチ・テーブルがあり、テープ・レコーダに対して1つのディスパッチ・テーブルがあることになる。それぞれが、異なるインターフェース参照を行うことになり、従って「プレイ」は、例えば、ビデオ・レコーダではポジション2にあり、テープ・レコーダではポジション22となる。
インターフェースの方法に関わる論理的定義は、所与のオブジェクトのクラスにより直接あるいは間接的に構成される方法のリストを探すことである。これは明らかに遅くなる。このことは、ディスパッチ・テーブルをならう「フラット」な構造を探すことにより改善することができる。
資料[3]は、インターフェースの方法が見出された最後のオフセットが思い出され、最初の考えとして関与するインターフェースに次に遭遇する最適化について記載している。この考えが誤りであることが判ると、更に完全なサーチが行われる。このような試みは、所与の呼出しサイトが同じタイプのオブジェクトに対して働く傾向があるという前提に基くものである。
この考えが正しくても、それを確認するため識別の方法を調べなければならない。この考えが誤りである場合は、やや遅いサーチが必要となる。
別の試みは、多くの継承がサポートされるC++の類似方法を用いることである。本発明は、オブジェクト指向言語におけるプログラムの実行中ディスパッチ時間を短縮する方法によってこの問題を解決するものであり、このプログラムは多数のインターフェース方法を有する。当該方法は、
(i)ディスパッチ・テーブルを作成し、
(ii)対応するディスパッチ・テーブルにおける特定の場所に対する指標として、あるいはプログラムを実行するコンピュータに格納される方法としてのポインタを有する、1つ以上のディスパッチ・テーブルに対するインターフェース・ハッシュ・テーブルを作成し、
(iii)プログラムが特定のインターフェース方法を要求するステップを実行するとき、インターフェース・ハッシュ・テーブルを用いて、ディスパッチ・テーブルを介してかあるいは直接に前記インターフェース方法を探す
ステップを含んでいる。
前記方法は、本発明がプログラムに適用される場合に妥当するが、本発明はまた、「外部アプリケーション」を走らせるためにソフトウエアが「仮想の」コンピュータ・システムをエミュレートする「仮想マシン」の形態において適用可能である。しかし、前記ステップ(ii)および(iii)は依然として同様に適用される。
特に、本発明は、仮想マシンにおいてディスパッチ時間を短縮する方法をも提供し、仮想マシンにより実行される1組のプログラムが(CDのような)コンピュータ読取可能な媒体に格納され、仮想マシンは、
(i)ディスパッチ・テーブルを作成し、
(ii)1つ以上のディスパッチ・テーブルに対して、対応するディスパッチ・テーブルにおける特定の場所に対する指標として、あるいはプログラムを実行するコンピュータに格納される方法としてのポインタを有するインターフェース・ハッシュ・テーブルを作成し、
(iii)プログラムが特定のインターフェース方法を実行するとき、インターフェース・ハッシュ・テーブルを用いて、ディスパッチ・テーブルを介してか、あるいは直接的に前記インターフェース方法を探す
ことにより、プログラム実行の過程においてディスパッチ時間を短縮するよう働く。
ディスパッチ時間を短縮するこれらの方法は、明らかにジャバに対して特に適用され得る。本発明の実施の一形態では、ディスパッチ・テーブルに対し1つのインターフェース・ハッシュが存在する。本発明の別の実施の形態においては、全てのディスパッチ・テーブルに対して1つのインターフェース・ハッシュが存在する。
本発明の一形態では、ディスパッチ・テーブルがインターフェース・ハッシュ・テーブルを指示する。本発明の別の形態では、ハッシュ・テーブルは開始時はディスパッチ・テーブルの一部である。本発明のこのような後者の形態は、これにより1つのレベルのインダイレクションを排除する。
インターフェース・ハッシュ・テーブルは、例えば、ディスパッチ・テーブルのスロット数を含むことができる。あるいはまた、インターフェース・ハッシュ・テーブルはファンクション点を含み得、これにより1つのレベルのインディレクションを排除する。
本発明の少なくとも望ましい実施の形態の主な利点は、多くの状況において高速であることである。これは、一般的な場合にサポート・ルーチンを用いず、発呼者側における検査を必要としない。これは、一般的な場合を高速にし、かつ生成されるコードを小さくする。これはまた、クラスがインターフェースとして実現する場合に小さなハッシュ・テーブルを必要とするので、非常に少ないメモリ・オーバーヘッドで済む。小型で高速であることは、サイズまたはコストのゆえにメモリが制限されるモバイル電話のような用途では重要な特質である。
本発明の方法は、インターフェース・ハッシュ・テーブルにおける同じインターフェース方法を探すときに生じる衝突の場合に特別な回復方法を呼出すステップを含むことが望ましい。このような場合、ハッシュ・テーブルは、コンピュータに格納される方法を指示するか、あるいはディスパッチ・テーブルにおけるフォールバック・スロットを指示することができ、これは、クラスを「仕分け」て呼出しを適切な場所へ指向するよう設計される適切な格納された方法へ呼出しを再指向する。
本発明の最も広い特質によれば、このような問題に対する解決法はハッシュ・テーブルによる余分なレベルのインディレクションを用いることである。
ハッシュ・テーブルにおける衝突がない場合の大部分では、インターフェースの呼出しが、標準的な仮想的なディスパッチより僅かに遅く、インターフェース方法を呼出す公知の手法より速い。これはまた、特にディスパッチ・テーブルのスロットが情報の1つ以上のワードを含むときに、C++の多重継承法より更にコンパクトであると予期される。
インターフェース・ハッシュ・テーブルに衝突が存在する場合、ディスパッチ・テーブルにおけるフォールバック・スロットが遅いが確実なサーチを行う。
本発明の他の特質によれば、要求される情報に対する高速アクセスの問題は、種々の装置の各々に対するインターフェース・ハッシュ・テーブルならびにディスパッチ・テーブルの使用によって解決されあるいは軽減される。
下記の考察は、先に述べた本発明のいずれかあるいは全て、および本発明の特質に対して適用する。
本発明の望ましい実施の形態については、純粋に事例として、(改善を略図的に示す)添付図面を参照して次に記述する。
本発明の実施の一形態については、事例としてのみ「仮想マシン」を実際に適用できる方法を示すため次に記述する。「仮想マシン」が非常に多くの異なるシステムに適用できるから、これが例示に過ぎないことが判るであろう。これらの事例は、(ハンド・ヘルド・コンピュータを内蔵する)モバイル電話、ディジタル・テレビジョン用のセットトップボックス、MPEGディジタル・システムに使用されるよう意図されたビデオ装置、インテリジェント・ディスク・ドライブを含む。本発明は、物理的なサイズ(例えば、モバイル電話)によりメモリが制限され、ジャバのようなオブジェクト指向言語を用いてプログラムを実行する更に有効なモードが使用できる場合に、特に有効である。モバイル電話搭載のメモリは、例えば、500kb以下に制限され、制限されたメモリを持つ環境においては本発明が良好に働く。しかし、これはまたそのようなメモリにおいても良好に走ることができる。
図4Dないし図4Fは、コンピュータ(図示せず)またはマイクロコントローラ(図示せず)が、「水」の供給すなわち流量(例えば、弁)、「熱」(例えば、時間、弁、ポンプ)、および「光」(例えば、スイッチ)の制御、および「ビデオ」システム(例えば、スイッチ)の動作の制御において使用される動作装置461−464の状態を制御するためのコントローラ・プログラム460を装備した家庭の環境に対して仮想マシンを用いる一例を略図的に示している。これらの動作装置461−464は、それぞれ、所要の動作を生じるためスイッチ、弁、ポンプなどへ適切な動力が与えられるように、プログラムの実行中にコントローラ・プログラム460から適切な指令信号を受取る各装置ドライバ465−468に接続されるように示される。入力469は、コントローラ・プログラムがユーザの要求に対して特定仕様とすることを可能にし、これにより、例えば現在では、加熱システムがオン/オフされ(その温度が調整され)、ビデオ・システムが再生状態にされる、などである。
次に図4Dにおいて、「装置」がサブクラス「ヒーティング・システム」および「電気装置」およびサブクラス「湯水システム」(または、洗浄用に使用される家庭用湯水)、「セントラル・ヒーティング」(空間の加熱に使用される閉循環系統である)、「照明」(各室における照明を含む)、および「ビデオ」(再生、録画、録音、カセットのイジェクション、などのための制御ファンクションを含む)に共通するオン/オフの方法を有するクラスである階層的構造で分類される家庭用システムの各部がオブジェクトとして示される方法を示している。更に、「ヒーティング・システム」は室温の制御を可能にする設定温度の方法を有し、「湯水システム」は(軟水化カートリッジが交換する必要のあるときを示すことが意図される)方法「リロード」を有し、サブクラス「照明」は方法「減光」を有し、サブクラス「ビデオ」は属性「再生」および「カセット交換」を有する。
図4Eは、このようなクラスおよびサブクラスに対するディスパッチ・テーブルを示している。全てのディスパッチ・テーブルにおいて、「オン」および「オフ」のファンクションがポジション1および2を占めている。しかし、「湯水システム」および「セントラル・ヒーティング・システム」に対するポジション3は、「温度設定」であるが、同じポジション3は「湯水システム」および「ビデオ」に対しては減光および交換である。方法「交換」は、軟水化装置におけるカートリッジの交換と、ビデオ・システムにおけるカセットの交換とを弁別する必要があるが、属性「交換」は他の点では類似している。図4Eでは、図面および記述を簡単にするため少数の制御ファンクションが示され、それらのディスパッチ・テーブルは通常は更に多くのスロットすなわちエントリを含むことになろう。
図4Dないし図4Fから、動作装置における類似のファンクションの制御において同じ方法が用いられるクラス/サブクラス(または制御ファンクション、すなわち方法)間にインターフェースが存在することが明らかである。1つのインターフェースは方法「オン/オフ」であり、別のインターフェースは方法「交換」である。各インターフェース方法は、小さなハッシュ値が割当てられる。このインターフェース・ハッシュ値は多くの方法で得ることができるが、ハッシュ・テーブルのサイズを越えてはならない。ハッシュ値は、インターフェース方法間の衝突をできるだけ減じるように選択される。これを行う1つの方法は、各インターフェース方法のネームから擬似ランダム・ハッシュ値か、あるいはインターフェース方法の他のややランダムな属性を得ることである。
任意の関連するインターフェース・クラスと衝突しない開始ハッシュ値を選択し、次にこれから逐次インターフェースの各メンバー方法ごとにハッシュ数を割当てることが望ましい。ハッシュ値は、同じインターフェースまたは関連するインターフェースの方法が一義的なハッシュ値を持ち競合すなわち衝突しないように選択されるべきである。多くのインターフェースを実現しあるいは多くの方法とインターフェースするオブジェクトは、明らかに衝突を避けることができない。大きなハッシュ・テーブルは通常は衝突数を減じる。
図4Cは、特定の階層(例えば、図4D)内のオブジェクト(例えば、ビデオ)に対するデータがテーブル420のようなデータ構造で配置される本発明の実施の一形態を示している。このデータ構造は、ヘッダと複数のオブジェクト・データ・フィールドとを含むことになる。ディスパッチ・テーブル422におけるスロットに格納された関連方法に対する呼出が行われると、この方法が配置される正確なスロットを知ることの不確定さのゆえに、ディスパッチ・テーブル422が、ディスパッチ・テーブル422における方法の場所の圧縮バージョンを含むハッシュ・テーブル424へこの呼出しを自動的に再び指向させることになる。また、ハッシュ・テーブル424内の場所が各方法に対してつねに同じであるゆえに、ハッシュ・テーブルは、ディスパッチ・テーブル内の全てのあり得る場所のサーチよりも速くディスパッチ・テーブル422における正しい場所に導く指標ポインタ426を生成することができる。他のハッシュ・テーブル(図示せず)およびそのそれぞれのディスパッチ・テーブルでも同じプロセスが続く。
ハッシュ・テーブルにおける衝突の場合には、同じ場所が2つのインターフェース方法に対して必要とされるので、ハッシュ・テーブルは、クラスを「はじく」よう設計されたコンピュータに格納される方法を指示し、発呼者を適切な場所へ指向させる。これはまた、コンピュータに格納された「はじく」方法を指示するディスパッチ・テーブル422におけるスロット(例えば、最初の)を最初に指示することによっても行うことができる。
更に一般的には、各実クラスが規定された後およびこれが実現する方法の組が知られると、各ディスパッチ・テーブルが生成される(ディスパッチ・テーブルは、その上位クラスから継承される方法の構成を勘定に入れることになる)。固定サイズのハッシュ・テーブルが、対応する構成のディスパッチ・テーブル指標に対して前述のインターフェース方法のハッシュ値をマップする各クラスごとに生成される。1つのクラスが同じインターフェースのハッシュ値を持つ2つ以上のインターフェース方法を構成する場合、ハッシュ・テーブルは、衝突を「はじく」フォールバック・ルーチンのディスパッチ・テーブル指標を含むように設定される。
このハッシュ・テーブルは、ディスパッチ・テーブルの初めに含まれるか、あるいはディスパッチ・テーブルから参照される。
(レジスタにおける)所与のオブジェクトにインターフェース方法を呼出すため、
a.所与のオブジェクトに対するインターフェース・ハッシュ・テーブルのアドレスをロードする
b.インターフェース・ハッシュ・テーブルに対する指標としてそのハッシュを用いる特定のインターフェース方法に対するスロット数を取得する
c.宛て先インターフェース方法に対する一義的な識別子をレジスタへロードする
d.ディスパッチ・テーブルのスロット数が与えられると、正常な仮想的呼出しを行う。
上記ステップに対する擬似アセンブラ・シーケンサは、
ディスパッチ・テーブルにより指示されたインターフェース・ハッシュ・テーブル
LOAD Rd.doffs[Ro] ディスパッチ・テーブル・アドレスをロード
LOAD Ri,ioffs[Rd] インターフェース・ハッシュ・アドレスをロード
LOAD Ri,hash[Ri] ハッシュ・テーブルからのスロットをロード
LOAD Ru,#uniqlfaceld 一義的なインターフェースidをロード
LOAD Ri,[Rd +Ri] 方法アドレスを取得
CALL Ri インターフェース方法を呼出す。

ハッシュ・テーブルがディスパッチ・テーブルの一部である本発明の形態においては、1つのレベルのインディレクションが排除される。
ディスパッチ・テーブルで(前に)格納されたインターフェース・ハッシュ・テーブル
LOAD Rd,doffs[Ro] ディスパッチ・テーブル・アドレスをロード
LOAD Ri,-hash[Ri] ハッシュ・テーブルからスロットをロード
LOAD Ru,#uniqlfaceld 一義的なインターフェースidをロード
LOAD Ri,[Rd+Ri] 方法アドレスを取得
CALL Ri インターフェース方法を呼出す。

インターフェース・ハッシュ・テーブルが方法ポインタを含む本発明の形態においては、別のレベルのインディレクションが排除される。
インターフェース・ハッシュ・テーブルに格納された方法アドレス(プラス、前の最適化)
LOAD Rd,doffs[Ro] ディスパッチ・テーブル・アドレスをロード
LOAD Ri,-hash[Rd] ハッシュ・テーブルからアドレスをロード
LOAD Ru,#uniqlfaceld 一義的なインターフェースidをロード
CALL Ri インターフェース方法を呼出す。
特定のクラスに対するインターフェース・ハッシュ・エントリ間に衝突がある場合、インターフェース・ハッシュ・テーブルはフォールバック方法のディスパッチ・テーブル指標を含んでいる。このフォールバック方法は、(レジスタにおいて)宛て先オブジェクトにアクセスし、インターフェース方法の場合は一義的な識別子をアクセスする。この方法は、インターフェース方法の前記オブジェクトの構成について標準的なサーチを行う。
コンピュータ技術の当業者には、情報の密集度が低い場合、さもなければデータ・セット内に高い冗長度が存在する場合、ハッシュ・テーブルがデータ・セットを管理し得る割合まで低減する手段であることが判るであろう。このように、ハッシュ・テーブルは、アプリケーション全体のスケールを減じることができ、これにより装置の大きさを減じることができ、これはジャバの重要な特徴の1つである。
要約すれば、本願の発明は下記を含んでいる。
1.インターフェース方法に対するハッシュの使用
各インターフェース方法は、小さなハッシュ値が割当てられる。このインターフェース・ハッシュ値は多くの方法で得ることができるが、以下に用いられるハッシュ・テーブルのサイズを越えてはならない。
ハッシュ値がインターフェース方法間の衝突を減じるように選定されるならば最良であり、従って同じインターフェースまたは関連するインターフェースの方法が一義的なハッシュ値を持つようにハッシュ値が選定されるべきである。明らかに、多くのインターフェースまたは多くの方法とのインターフェースを構成するオブジェクトは、衝突を避けることができないことがある。
当然のこととして、ハッシュならば、テーブルが大きくなるほど衝突数が通常少なくなる。
2.インターフェース方法を呼出すときのハッシュ・テーブルを介するインディレクト
実際の各クラスが定義されると、このクラスが構成する方法の組が判り、ディスパッチ・テーブルが生成される。ディスパッチ・テーブルは、上位クラスから敬称された方法の構成を考慮に入れる。
固定サイズのハッシュ・テーブルが各クラスごとに生成され、これが対応する構成のディスパッチ・テーブル指標へ上記のインターフェース方法のハッシュ値をマップする。1つのクラスが同じインターフェース・ハッシュ値を持つ2つ以上のインターフェース方法を構成する場合、ハッシュ・テーブルは以下に述べるフォールバック・ルーチンのディスパッチ・テーブル指標を含むように設定される。
このハッシュ・テーブルは、ディスパッチ・テーブルの初めに含まれるか、あるいはディスパッチ・テーブルから参照される。
(レジスタにおける)所与のオブジェクトについてインターフェース方法を呼出すため、
a.所与のオブジェクトに対するインターフェース・ハッシュ・テーブルのアドレスをロードする
b.インターフェース・ハッシュ・テーブルに対する指標としてそのハッシュを用いて指定されるインターフェース方法に対するスロット番号を取得する
c.宛て先のインターフェース方法に対する一義的な識別子をレジスタへロードする
d.ディスパッチ・テーブルのスロット番号が与えられると、正常な仮想呼出しを行う。
3.フォールバック・ディスパッチ・テーブルのエントリ
特定のクラスに対するインターフェース方法のハッシュ・エントリ間に衝突が生じる場合、インターフェース・ハッシュ・テーブルがフォールバック方法のディスパッチ・テーブル指標を含む。フォールバック方法は、宛て先オブジェクトに対して(レジスタで)アクセスし、インターフェース方法の場合は、一義的な識別子をアクセスする。
これは、インターフェース方法の当該オブジェクトの構成について標準的なサーチを行う。
コンピューティング技術の当業者には、情報が密集しておらず、さもなければデータ・セット内に高い冗長度が存在する場合に、ハッシュ・テーブルがデータ・セットを管理可能な割合まで減じる手段であることが判るであろう。このように、ハッシュ・テーブルは、アプリケーション全体のスケールを減じることができ、これにより装置の大きさを減じることができ、これはジャバの重要な特徴の1つである。オーバーフローは、ハッシュ・テーブルの利用においてすでに知られる方法で考慮に入れられる。
従って、本発明によれば、コンピュータ・システムは、1つのクラス階層におけるオブジェクトに適する方法を含むデータ格納する1つ以上のディスパッチ・テーブルと、問題となる方法が見出されるディスパッチ・テーブルの場所を指示するインターフェース・ハッシュ・テーブルとを含む。
本発明はまた、1つのクラス階層におけるオブジェクトに適する方法を含むディスパッチ・テーブルを用いるコンピュータ・システムを動作させる方法を提供し、該方法は、1つの方法の呼出しをディスパッチ・テーブルへ指向させ、ディスパッチ・テーブルにおける方法の場所についての情報を含むハッシュ・テーブルへ呼出しを送り、この呼出しをハッシュ・テーブルから方法が格納されるディスパッチ・テーブルの前記場所へ再指向させるステップを含んでいる。
本発明はまた、オブジェクトに関するデータを格納する手段と、前記オブジェクトに適する方法に関するデータを呼出す手段と、少なくとも1つの前記方法に関するデータを含むためのディスパッチ・テーブルと、前記呼出しを前記ディスパッチ・テーブルにおける方法の場所についての情報を含むハッシュ・テーブルへ送る手段と、呼出された方法の場所にアクセスするためハッシュ・テーブルからの呼出しをディスパッチ・テーブルへ再び指向させる手段とを含むコンピュータ・システムを提供する。
本発明の一形態においては、ディスパッチ・テーブルごとに1つのインターフェース・ハッシュが存在する。本発明の別の形態では、全てのディスパッチ・テーブルに対して1つのインターフェース・ハッシュ・テーブルが存在する。
あるいはまた、本発明は、ハッシュ・テーブルを用いることによりインターフェースのディスパッチ動作の性能を改善する方法と、インターフェースのディスパッチ動作の性能を改善するハッシュ・テーブルを含むコンピュータ・システムとの両者を提供する。
本発明は、別の特質において、特定の方法に対するインターフェース参照がハッシュ・テーブルにより見出される方法およびコンピュータ・システムを提供する。
「インターフェース・ディスパッチ動作」が、特定の方法に対するスロットの場所、例えば、ビデオ・レコーダの「再生」ファンクションに対するスロットの場所番号(2)が見出され、次いで関連するデータが呼出される方法であることが理解されよう。
本発明の主な利点は、速いインターフェース・ディスパッチ動作および(または)規模の大きさの低減を含む。
いずれの場合も、前項で述べたような本発明の方法またはコンピュータ・システムは、特にジャバに対して適用され得る。
当該システムの動作は、別の方法において調べることができる。このため、図42においては、特定の階層内のオブジェクトに対するデータがテーブル420のようなデータ構造で配置される。このデータ構造は、ヘッダと関連データを含む複数のフレームとを含んでいる。ディスパッチ・テーブル422におけるスロットに格納された関連データに対する呼出しが行われると、この方法が配置される正確なスロットを知ることが不確実であるために、ディスパッチ・テーブル422は、ディスパッチ・テーブルにおける方法の場合の圧縮バージョンを含むハッシュ・テーブル424へ呼出しを自動的に送り直すことになる。また、ハッシュ・テーブル内の場所が各方法に対してつねに同じであるので、ハッシュ・テーブルは、ディスパッチ・テーブルにおける正しい場所に導く指標ポインタ426を、ディスパッチ・テーブル内の全てのあり得る場所のサーチよりも更に迅速に生成することができる。
ハッシュ・テーブルにおける衝突の場合は、おそらくは2つのインターフェース方法に対して同じ場所が必要とされるので、あるいはおそらくはマルチスレッド環境における2つの異なるスレッドによって呼出されるゆえに、ハッシュ・テーブルは、クラスを「整理する」ように意図された方法を指示して、発呼者を適切な(単数または複数の)場所へ指向させることになる。
上記のことのいずれかあるいは全てにおいて、コンピュータ・ソフトウエアを用いて本発明のある特徴が構成された。しかし、無論、当業者にとっては、これらの特徴のいずれもハードウエアまたはハードウエアとソフトウエアの組合わせを用いて実現されることが明らかであろう。更に、ハードウエア、コンピュータ・ソフトウエアなどにより行われるファンクションが電気信号などを用いて行われることは容易に理解されよう。
情報の記憶に関する特徴は、適切な記憶場所またはストアによって実現されよう。情報の処理に関する特徴は、ソフトウエアまたはハードウエア、あるいは両者の組合わせのいずれかにおいて、適切なプロセッサまたは制御手段により実現されよう。
上記のことのいずれかあるいは全てにおいて、本発明は、下記の形態のいずれか、あるいは一部、あるいはその全てにおいて具現され、コンピュータ・システムを動作させる方法において具現され、コンピュータ・システム自体において具現され、前記コンピュータ・システムを動作させる方法を実行するようプログラムされるときこのコンピュータ・システムにおいて具現され、そして(または)このコンピュータ・システムを動作させる方法に従って動作するようにされるプログラムが記録されたコンピュータ読取可能な記憶媒体において具現されよう。
本文全体で用いられるように、用語「コンピュータ・システム」は、「コンピュータ」、「システム」、「装備」、「装置」、「マシン」などと互換であり得る。コンピュータ・システムは、仮想マシンであり得、あるいはこれを含み得る。
方法および装置を含む上記の異なる特徴および特質のいずれかあるいは全てにおいて、特徴および特質は任意の適切な方法で組合わされる。
本発明がこれまで純粋に事例として記述され、細部の修正が本発明の範囲内で可能であることが理解されよう。
本文の記述、および(適切な場合に)請求の範囲および図面において開示される各特徴は、独立的に、あるいは何らかの適切な組合わせにおいて証明されよう。
他の情報
関連する特許:米国特許第5,367,685号
文献:
[1] M.EllisおよびB.Stroustrup著「The Annotated C++Reference Manual」(Addison Wesley(ISBN 0−201−51459−1)、217−237ページ)
[2] K.ArnoldおよびJ.Gosling著「The Java Programming Language」(Addison Wesley(ISBN 0−201−63455−4)第4章)
[3] T.LindholmおよびF.Yellin著「The Java Virtual Macine Specification」(Addison Wesley(ISBN 0−201−63452−X)258−260、403−405ページ)
[4] A.W.Appel著「Modern Compiler Implementation in Java」(第14章、1998年3月12日発行)Javaは、Sun Microsystemの商標である。
エージェント資料第5−コンピュータ・システム、コンピュータ読取可能な記憶媒体および同媒体を動作させる方法、および前記システムを動作させる方法
本発明は、コンピュータ・システムおよび該コンピュータ・システムを動作させる方法に関し、コンピュータにおける不要部分の整理に対するいわゆるリターン・バリアに関し、コンピュータ読取可能な記憶媒体、コンピュータ・システム、仮想マシンあるいはこれらを内蔵する類似の装置に関し、かつ動作方法に関する。望ましい実施の形態においては、本発明は、不要部分の整理に対するリターン・バリアに関する。
本発明は、ランタイム環境に対する全般的な適用性を有する。特に、本発明は、自動的なダイナミック・メモリ管理に適用可能である。
本発明は、1つの特質において、スレッドのスタックが同時の不要部分の整理により検査されている間ブロッキングを最小限に抑えるため、いわゆるリターン・バリアの使用に関する。
一部のコンピュータ・システムにおいては、図5Aに略図的に示されるように、データは、最近のアクティビティが(同様に最上位にあり得る)スタックの最下位フレームに格納されるものと見なされるように、(起動)スタック29002の(起動)フレーム29000に格納される。不要部分の整理は、全てのセルのコネクティビティをトレースすることを含む。従って、このようにトレースされないものは、見えず一切の関連性情報を含み得ない。このため、これらのセルは、システムにおいて(付加的なメモリとして)使用されるように解放され得る。ガーベッジ・コレクタは、各スレッドのスタックにおける各フレームをトレースする。
典型的な起動スタックが、図5Bに更に詳細に示される。便宜上、スタック(同図における29102)は、「最も新しい」項目がスタックの最下部に最も近くなるように、項目が上から下へ連続的に追加されるメモリ・ストアと見なされる。各スタックは、多数のフレーム(同図に示される29104)からなり、各フレームはデータと、他のフレームまたはスタックに対する1つ以上の参照またはフレーム・ポインタとを含む。典型的には、各フレームは、前のすなわち最も古いフレームに対するポインタ29106と、呼出し手順の実行可能なコードに対するリターン・ポインタ29108とを含む。
トレーシング・プロセスにおいては、スタックの各フレームにおける(メモリ・ヒープに格納されたメモリ・オブジェクトに対する)全てのポインタまたは参照が調べられる必要がある。これが生じるためには、これまでは、当該スレッドのスタック全体にわたってトレーシングが行われる間、スレッドが休止されることが必要であった。このことは更に、不要部分の整理プロセスが、スレッドがガーベッジ・コレクタがそのフレームを照合する許可を与えるのを待つ間、停止されることを必要とする。
換言すれば、制御の起動スタックのスレッドに含まれる任意の参照が、トレーシングするコンカレントGCのルート・セットの一部として処理されることを必要とし、かつGCプロセスの間調べられることを必要とする。調べられるスレッドが、GCスレッドが調べることができるどんな情報も変更しないことが非常に重要である。これを達成する1つの方法は、調べられるスレッドの実行を中断し、GCにスタックの全内容を調べさせ、次いで調べられたスレッドの実行を再開することである。
本発明に関して識別される上記手法における主な問題は、1つのスレッドが中断される時間量がスレッドのスタックのサイズにより決定されること、および長すぎるスレッドの中断がかなりの休止をもたらすことである。当該特許に記載される手法は、望ましくはGCスレッドが関心を持つスタックの一部を使用しようと試みないことを前提として、スレッドが実行を継続することを許容する。
1つの特質によれば、(単数または複数の)スタック制御の各スレッドにより管理されるように構成された少なくとも1つ、望ましくは複数の、あるいは更に多数の起動スタックを含むコンピュータ・システムを動作させる方法が提供され、該方法は、
その起動スタックを用いて前記スレッドを実行し、かつ
更なるスレッドが望ましくは同時に同じ起動スタックをアクセスすることを許容する
ステップを含んでいる。このような特徴により、当該システムにおける同時実行の程度を強化することができる。
あり得る衝突の問題を防止するため、前記スレッドの実行は、前記の更なるスレッドが当該スレッドの起動スタックをアクセスしている時間の一部のみ休止される。従って、例えば別のスレッドのスタックの内容を調べることを欲するどんな動作もスレッドを不当に止めることなくこれを行うことができる機構が提供される。
同じ理由から、前記スレッドおよび前記の更なるスレッドは、同時に同じ起動フレームをアクセスすることを阻止される。
同様に、前記スレッドによるその時の起動フレームの実行は、前記更なるスレッドが同じ起動フレームをアクセスするのにこのスレッドが要する時間だけ休止される。
前記スレッドがその時の起動フレームから前記更なるスレッドによりその時アクセスされているフレームへ戻ることを選択的に阻止するため、バリアが設けられる。典型的な実際の状況においては、1つのスレッドは、他のスレッド(この場合は、更なるスレッドと呼ばれる)がアクセスに要する時間より所与の起動フレームをゆっくり実行するものと予期される。従って、リターン・バリアが特に頻繁に動作状態になることは予期されない。しかし、これは、衝突が生じないことを確保する上で最も重要である。
前記バリアの阻止効果は、前記の更なるスレッドが前記スレッドのその時の起動フレームのペアレントのフレームをその時アクセスしているかどうかに従って選択的である。従って、前記の更なるスレッドがその時ペアレントの起動フレームをアクセスしているならば、前記スレッドがその時の起動フレームから前記スレッドのその時の起動フレームの前記ペアレントの起動フレームへ戻ることを阻止するためにバリアが設けられることが望ましい。
その時の起動フレームに対するバリアは、前記の更なるスレッドがその時アクセスしているフレームを変更する前に提供される。このような特徴により、「エア・ロック」の形態が生成される。
第2の更なるスレッドあるいは更に大きな数の更なるスレッドが、同じ起動スタックを望ましくは同時にアクセスすることを許容される。望ましい実施の一形態においては、前記の更なるスレッドは、望ましくは並行なガーベッジ・コレクタのスレッドであり、前記第2の更なるスレッドはデバッガのスレッドであり、かつ前記スレッドはコンピュータ・システム内の他の任意のスレッドである。
同じ起動フレームに対しては、前記の更なるスレッドおよび前記第2の更なるスレッドに対する異なるバリアが設けられる。これは、異なるファンクションを行うことを可能にする。
望ましくは、前記バリアは、同バリアのグループが1つの起動フレームと関連させられるように構成される。前記の異なる各バリアごとに1つの記述子ブロックが設けられ、この記述子ブロックは1つのリンクされたリストを形成するようにリンクされることが望ましい。これは、多数のバリアを対処するのに便利な方法である。
本発明の1つの特に重要な用途は、不要部分の整理にある。従って、前記の更なるスレッドは、望ましくは並行なガーベッジ・コレクタのスレッドであり得る。
1つのサイクルにおいては、ガーベッジ・コレクタが前記スタックのフレームの最初の走査、かつ少なくとも1つの更なる走査を行うことが望ましい。
前記の少なくとも1つの更なる走査においては、変化した唯一のフレームが走査される。走査は、時間を要し得、従ってこの特徴は不要部分の整理のために要する時間を短くし得る。
前記の少なくとも1つの更なる走査においてフレームの走査を必要とする程度のレコードが保持される。このレコードは、以降の走査を開始できる時点の決定に使用することができる。特に、このレコードは、どのフレームが変化できたか、あるいは2つの所与の走査間で生成できたかについてものである。再走査は、その時の起動フレームに対するそのままのリターン・バリアを有する最も新しいフレームからのものである。
最も関連する特質において、本発明は、
それぞれの制御スレッドにより管理されるように構成された少なくとも1つの、望ましくは複数の、あるいは更に多数の起動スタックと、
前記スレッドをその起動スタックを用いて実行する手段(望ましくは、ランタイム・エンジン)と、
望ましくは同時に同じ起動スタックをアクセスすることを更なるスレッドに許容する手段と、
を含むコンピュータ・システムを提供する。
当該コンピュータ・システムは更に、前記の更なるスレッドが前記スレッドの起動スタックのアクセスに要する時間の僅かに一部だけ前記スレッドの実行を休止する手段を含む(あるいは、例えば、ランタイム・エンジンが更に休止するようになっている)ことが望ましい。
当該コンピュータ・システムは更に、前記スレッドおよび前記の更なるスレッドが同時に同じ起動フレームをアクセスすることを阻止する(あるいは更に、阻止するための)手段を含む。
当該コンピュータ・システムは更に、前記スレッドによりそのその時の起動フレームの実行を前記の更なるスレッドが同じ起動フレームのアクセスに要する時間だけ休止する(あるいは、更に休止するための)手段を含む。
当該コンピュータ・システムは更に、前記スレッドのその時の起動フレームから前記の更なるスレッドによりその時アクセスされているフレームへのリターンを選択的に阻止する(あるいは更に阻止するための)バリアを提供する手段を含む。
当該コンピュータ・システムは更に、更なるスレッドがその時ペアレントの起動フレームをアクセスしているならば、前記スレッドのその時の起動フレームから前記スレッドのその時の起動フレームの前記のペアレントの起動フレームへのリターンを阻止するバリアを提供する(あるいは更に、提供するための)手段を含む。
当該コンピュータ・システムは更に、前記の更なるスレッドがその時アクセスしているフレームを変更する前に、その時の起動フレームに対するバリアを提供する(あるいは更に、提供するための)手段を含む。
当該コンピュータ・システムは更に、第2の更なるスレッドが同じ起動スタックをアクセスすることを許容する(あるいは更に、許容するための)手段を含む。
当該コンピュータ・システムは、前記の更なるスレッドおよび前記第2の更なるスレッドに対する異なるバリアを同じ起動フレームに対して提供するためのものである。
前記バリアは、前記バリアのグループを1つの起動フレームと関連させるように構成されることが望ましい。当該コンピュータ・システムは、前記異なるバリアごとにリンクされたリストを形成するようリンクされる記述子ブロックを提供するためのものである。
前記更なるスレッドは、ガーベッジ・コレクタのスレッドであり得る。
前記ガーベッジ・コレクタは、1つのサイクルにおいて、前記スタックのフレームの最初の走査および少なくとも1つの更なる走査を行うためのものである。
当該コンピュータ・システムは、前記の少なくとも1つの更なる走査において変化したフレームのみが走査されるようになっている。
当該コンピュータ・システムは更に、前記の少なくとも1つの更なる走査においてフレームが再び走査されることを必要とする程度のレコードを保持する(あるいは更に保持するための)手段を含む。
本発明は、不要部分の整理の関連において特にユーティリティを有する。
広義において、最も新しい起動フレームの検査に要する長さだけ非GCスレッドの実行を中断し、かつある特殊なコードを参照するようフレームのリターン・アドレスを編集することにより、不要部分の整理に関して先に述べた種々の問題を解決することが提起される。その後、連続する発呼者の起動フレームが調べられる間スレッドが実行を継続することを許容される。特定のフレームの検査がいったん完了すると、次にへ進む前に、フレームのリターン・アドレスが先に述べた同じ特殊コードを参照するように編集される。
不要部分の整理は、典型的な手順呼出しの実行速度と比較して比較的迅速なイベントである。このため、不要部分の整理が完了する前に手順の呼出しからのリターンが生じることは(無論たしかにあり得るが)比較的稀である。このような稀なイベントにおいては、特殊コードが起動され、起動フレームから再び発呼者のフレームへ戻ろうとする試みを受ける。発呼者のフレームがその時GCスレッドにより調べられているならば、非GCスレッドは、GCスレッドが別のフレームへ移るまで待機するよう強制される。
このような関連において、本発明は更に、コンピュータ・システムにおけるスレッド・スタック内に含まれる参照データの並行な不要部分の整理を改善する方法を提供し、この場合スレッドはスタック全体ではなくその時の起動フレームを調べのに要する時間だけ不要部分の整理の目的のため休止されるにすぎない。
ガーベッジ・コレクタがフレームの検査を完了するまで、当該ガーベッジ・コレクタにより内容がその時調べられている起動フレームに対する未決の手順呼出しのリターンを阻止する手段がとられることが望ましい。
本発明の範囲内で、ガーベッジ・コレクタと、スタック全体ではなくその時の起動フレームの検査に要する時間だけ不要部分の整理の目的のためスレッドを休止させる手段とを含む同様の装置もまた提供される。
緊密に関連する特質において、ガーベッジ・コレクタと、スタック全体ではなくその時の起動フレームの検査に要する時間だけ不要部分の整理の目的のためスレッドを休止する手段とを含むコンピュータまたはコンピュータ・システムが提供される。
更に緊密に関連する特質において、コンピュータ・システムにおけるスレッド・スタック内に含まれる参照データの並行な不要部分の整理を改善し、不要部分の整理の目的のためスタック全体ではなくその時の起動フレームの検査に要する時間だけスレッドが休止される方法を提供するプログラムが記録されたコンピュータ読取可能な記憶媒体が提供される。
更に緊密に関連する特質において、プログラムされたとき、コンピュータ・システムにおけるスレッド・スタック内に含まれる参照データの並行な不要部分の整理を改善し、スタック全体ではなくその時の起動フレームの検査に要する時間だけ不要部分の整理の目的のためにのみスレッドが休止される方法を提供するコンピュータが提供される。
緊密に関連する特質において、本発明は、コンピュータ・システムのスレッド・スタックにおける並行な不要部分の整理を改善する方法であって、不要部分の整理スレッドがスタックにおける問題のスレッドをアクセスすることを可能にし、最もアクティブな起動フレームの検査に必要な長さだけ問題のスレッドの実行を中断し、前記フレームのリターン・アドレスをリターン・バリア・コードに編集し、連続する起動フレームが調べられる間実行を問題のスレッドが継続することを許容し、次のフレームへ移動する前に前記各フレームのリターン・アドレスを同じリターン・バリア・コードに編集するステップを含む方法を提供する。
ガーベッジ・コレクタが起動フレームの検査を完了するときまで、ガーベッジ・コレクタにより内容がその時調べられている起動フレームへの未決の手順呼出しのリターンを阻止するため、バリア・コードが用いられる。本発明は、これにより、問題のスレッドが中断される時間を短縮する目的を達成する。本発明はまた、不要部分の整理システムにおける同時実行の程度を最大化することができ、かつ同時実行の認識を改善する。
更に緊密に関連する特質において、コンピュータ・システムのスレッド・スタックにおける並行な不要部分の整理を改善する方法を提供するプログラムが記録されたコンピュータ読取可能な記憶媒体が提供され、当該方法は、不要部分の整理スレッドがスタックにおける問題のスレッドにアクセスすることを可能にし、最もアクティブな起動フレームが検査される必要がある長さのみ問題のスレッドの実行を中断し、前記フレームのリターン・アドレスをリターン・バリア・コードに編集し、連続的な起動フレームが調べられる間問題のスレッドの実行を継続させ、次のフレームへ移る前に前記各フレームのリターン・アドレスを同じリターン・バリア・コードに編集するステップを含んでいる。
本発明は、上記方法に従ってプログラムされるときコンピュータに拡張する。
本発明はまた、
スレッドがその起動スタックを用いて実行し、かつ
更なるスレッドが同じ起動スタックをアクセスすることを許容する
ようにプログラムされたとき、各制御スレッドにより管理されるよう構成された少なくとも1つの、望ましくは複数の、更に望ましくは多数の起動スタックを含むコンピュータ・システムに拡張する。
本発明はまた、上記方法を提供するプログラムが記録されたコンピュータ読取可能な記憶媒体に拡張する。
緊密に関連する特質において、各制御スレッドにより管理されるよう構成された少なくとも1つの起動スタックを含むコンピュータ・システムを動作させる方法を提供するプログラムが記録されたコンピュータ読取可能な記憶媒体が提供され、前記方法は、
前記スレッドをその起動スタックを用いて実行し、かつ
更なるスレッドが同じ起動スタックをアクセスすることを許容する
ステップを含んでいる。
本発明は、上記コンピュータまたはコンピュータ・システムを含む仮想マシンに拡張する。
本発明は、上記方法により動作されるとき仮想マシンに拡張する。
本発明は、上記コンピュータ読取可能な記憶媒体により動作されるとき仮想マシンに拡張する。
本発明の種々の特質の異なる特徴のいずれか、あるいは一部、あるいはその全ては、他の特質に適用されよう。
本発明の望ましい特徴については、純粋に事例として、添付図面に関して次に記述される。
本発明については、まず全般的に記述し、次いで本発明が実施される特定の方法の更に総括的な記述が続く。
図5Aに関して、本発明において、スレッドは、全ての起動フレームの検査に要する時間ではなく、最近の(すなわち、最も近いかあるいは最もアクティブな)起動フレーム29004の検査に要する長さだけ、ランタイム・エンジンにより休止されるだけでよいことが認められた。このフレームは、参照すなわちポインタについて検査され、リターン・アドレスは、ヒープ29008として知られるデータについて動作するプログラム29006自体へ送られる特殊コードで前のリターン・アドレスを置換することにより編集される。この特殊コードは、前のリターン・アドレスと新しいリターン・アドレスを前記フレームにリンクする。データが戻されるときにガーベッジ・コレクタが前記フレームについて動作しているならば、リターン・バリア・コードは、ガーベッジ・コレクタが別のフレームへ移るときまでリターンを休止することにより、当該フレームにおけるデータの改変を防止する。
本発明の成否は、最も新しいフレームのみがこれにおける操作の結果変化させられることの実現に依存する。スレッドが例えば不要部分の整理の間休止されると、最も新しいフレームにおける全ての参照について検査が行われる。図5Cにおいて、フレーム・ポインタおよびリターン・アドレスが別のストアS(29204)へコピーされ、リターン・アドレスは特殊コードに編集される。このスレッドは次に、最も新しいフレームにおいて継続し得る。この最も新しいフレームは前のフレームへ戻ろうとしようとするとき、ガーベッジ・コレクタがこの場所でアクティブになるので戻ることができない。このような状況では、リターン・バリアがこのような要求を特殊コードへ変え、これによりGCが終るまでスレッドが前のフレームへ戻ることを阻止する。GCは、リターン・バリアを取下げ、安全ならばスレッドがこれを除去する。
GCが最も新しいフレームから移動してある距離だけ移動したフレームを探すので、大半のリターンが妨げられることがない。いかなるときもスタックにアクセスを試みるスレッド数に従って、スタックには幾つかのリターン・バリアがあり得る。後続のスレッドはできるだけ多くの前のスタック数まで戻る必要がないことになる。
次に、最初に全般的なリターン・バリアについて、次に不要部分の整理の関連においてリターン・バリアの構成について、更に詳細な記述を行う。
スレッドのスタックは、一連のフレームからなっている。1つのフレームは、1つの特定の未決の手順呼出しに関する全ての情報を含む。全てのフレームは、下記を含んでいる。すなわち、
(a)プログラムの実行がフレームと関連する手順呼出しが戻ったものから再開するはずの場所を示すある実行可能なコードのアドレスであるリターン・アドレス(リターン・アドレスは、特定タイプの命令ポインタである)、および
(b)呼出し手順のフレームを示すアドレスを指示するメモリに対する特定タイプのポインタであるペアレントのフレーム・ポインタ(ペアレントのフレーム・ポインタは、特定タイプのフレーム・ポインタである)。
手順パラメータ1、2、、、n(29304)、リターン・アドレス29306、ペアレントのフレーム・ポインタ29308および1組のローカル・データ29310を含む手順呼出しフレーム29302におけるデータの構成の表示について図5Dを参照する。
従って、図5Eに略図的に示されるように、手順呼出しスタック29402を用いてスレッドがその時実行中である未決の手順呼出しを記述するカレントのすなわち最も新しいフレーム29408の概念が存在する。前記の最も新しいフレーム29408のフレーム・ポインタ29404は、典型的に特定マシンのレジスタ(フレーム・レジスタとして知られる)に保持される。29406のような連続的なペアレント・フレーム・ポインタは、逓増的に古くなるフレーム29410、29412を指す。
上記において行われる手順は、下記のように表わされる。すなわち、
Figure 2010267291
一般的なリターン・バリア機構(すなわち、ガーベッジ・コレクタの関連における使用に限定されない機構)について、次に記述するが、これにより、特定のバリア付きフレームの関連において実行する手順が戻ろうと試みるときはつねに、一連の任意のファンクションが実行されるように構成することができる。
リターン・バリア機構は、多数の異なるクライアントを多分(あるいは更に、おそらくは)同時に持つ(その結果フレーム当たり1つ以上のリターン・バリアが必要となる)。ここで、1つの特定のクライアントである、実行されるファンクションが有効に停止ファンクションであるガーベッジ・コレクタについて更に詳細な記述を行う。別のあり得るクライアントはデバッギング・インターフェースであり、この場合は停止ファンクションではなく、ファンクションはデバッガに対して情報の提供に関する。このような関連において重要な特徴は、リターン機構に割込みを行う能力である。
リターン・バリアのレイダウンは、これにより任意のファンクションpに対してフレームfに構成する機構であり、先に述べたように、このファンクションは典型的に最終クライアントに依存し、例えば、不要部分の整理のため使用できる特定のファンクション(後では、コードBと呼ばれる)がある。バリアの記述子ブロック29502の内容の一般的構成が図5Fに略図的に示され、1つのバリア記述子ブロックがリターン・バリア当たりメモリに設けられている。リターン・バリアのレイダウンについて記述する下記の擬似コードにおいて、先に触れた、後で更に詳細に述べる特殊なコードはCと呼ばれる。
Figure 2010267291
上記の如き概念は、多数のバリアがバリアのリンク・フィールドを介してリンクされた記述子ブロックの連鎖として表わされる1つの特定のフレームにレイダウンできることである。各ブロックは元のフレーム・ポインタのコピーをもつが、各々が異なるバリア・ファンクションを持ち得、その結果各々が別の1つのクライアントを持ち得る。
例えば、(比較的早い速度で実行する)不要部分の整理の関連において、最も新しい起動フレームから試みられるリターンが特に生じにくいことが理解されよう。しかし、バリア付きフレームの関連において実行する手順が戻ろうと試みるとき、Cのコードが実行される。これは更にバリア・ファンクションの各々を実行し、次いでバリアがあたかも存在しないかのように完了する役割を負う。コードC(「特殊なコード」)は、擬似コードの以降の項により記述され、このコードが典型的に全てのリターン・バリアに対して一般的であることが知られよう。この項は、リンクされたリストに対する参照を含み、これは一連のリンクされたポインタである。
Figure 2010267291
以上のことは、一般的なリターン・バリア機構の望ましい実施の形態について記述する。
不要部分の整理の特定の関連においては、ガーベッジ・コレクタがリターン・バリアを用いて、実行されていないフレームにおける実行を許容しながら、その時GCにより吟味されているフレームにおける実行を継続する試みが別のスレッドによりなされないことを保証する。
次に、リターン・バリアの構成について述べる。ガーベッジ・コレクタは、下記の方法でスレッドのスタックの内容を調べる。gcfは、その時GCスレッドにより調べられている起動フレームに対する参照を含むシステム・ワイドなグローバル変数とする。どのスレッドによってもこの変数を読むことはできても、GCのみがこの変数を変えることができる。従って、gcfは、ガーベッジ・コレクタがその時調べているそのフォーカスの概念を表わす。
GCスレッドは、擬似コードの次のセクションで述べるように、スレッドtのスタックを調べる。
Figure 2010267291
このように、ガーベッジ・コレクタは、スレッドtのスタックの全てのフレームにわたり最も新しいものから最も古いものまで進行可能である。
バリア・インタセプタ・コードBは、手順が1つのフレームからペアレント(発呼者の)フレーム(pf)へ戻ろうとする比較的生じにくいイベントにおいて呼出され、これが戻ろうとしているフレームに対するポインタが与えられる。これは、GCがその時調べている(すなわち、ペアレント・フレームへ戻ろうとトラップする)フレームへ戻る試みがなされないことを保証する。
Figure 2010267291
GCスレッドのフォーカス(関心の点)がいったん動くと、非GCスレッドはその発呼者へ完全に安全に戻ることを許すことができる。
早期のスレッド検査により確定されたリターン・バリアがそのまま以降の検査に残り得ることがあり得る。このような場合、すでにバリアがあるならば、GCスレッドはバリアを確定しようとしない。GCが動作していない間は、gcfはあり得ない値を指すようにセットされる。従って、リターン・バリアは無視される。従って、GCが動作していないときはリターン・バリア機構がセルフ・クリーニングし、リターン・バリアは所定位置に残るが、その実行に関与した唯一のオーバーヘッドはpf==gcfの実行であリ、これは小さなオーバーヘッドである。
用いられる特定のGCは、新たなアクティビティが関連スレッドにおいて検出されなくなるまで、特定のスレッドのスタックが1つのGCサイクルで多数回調べられることを必要とする(ときに、このプロセスは、ヒープが小さなサイズであるからある時点で終了するように保証される)。これまでに述べた手法では、各スタックにおける各フレームが適切な回数調べられることを必要とする。しかし、ここで述べる1つの望ましい変更例では、バリア・ファンクションBは、これが呼出された最近のフレームのレコード(実際に、起動スタック当たり1つのレコード)を保持するように強化される。このレコードは、スタックにおけるアクティビティの「高水位マーク」を有効に表わす。これは、連続的な戻りが行われるとき引込む(古いフレームへ移動する)が、このようなフレームにはリターン・バリアがないので、新規の起動フレームへの呼出しはレコードの値を変えることはない。GCは、スタックを調べるとき、最近のフレームより古い全てのフレームが変化できなかったものから呼出されたものであり、従って再び走査されないことを前提とし得る。従って、最初の走査は、各スタックにおいて各フレームを調べるGCを呼出す。以降の再走査は、スタックにおける最も新しいフレームから、前の走査において初めに置かれたリターン・バリアをまだ有する最も新しいフレームまで生じる。より古いフレームは、走査間の間隔では変化し得ない。
最小限の再走査をサポートするため要求される強化の詳細にについては、次に述べる。先に述べた変数に加えて、各スレッドは変数tl−hwfを持ち、これがつねに最も新しいフレームを同じGCのリターン・バリアを持つスレッドに保持する。
下記の強化された手法がスレッドtのスタックを調べる。すなわち、
Figure 2010267291
コードBはtl−hwfの実行中スレッドのコピーを維持するように高められる。
Figure 2010267291
但し、「このスレッド」は、コードBを実行するスレッドを指す(幾つかのスレッドがこれを同時に行うことができる)。
先に述べた手法は、並行なGC構成が各スレッドとの対話に要する時間量を最小化することを許容し得、これが更に全てのスレッドを更に迅速に再走査することを可能にし、これによりGCサイクル全体を、全てのスレッドのスタックを全体に再走査しなければならない場合に要するよりも少ない時間で完了することを可能にする。
要約すれば、(特に)2つの基本的な特質について述べた。第一に、一般的なリターン・バリア機構が提供され、手順が戻るとき任意の動作を行うことを可能にする。この機構は、リターン・バリアが使用されていないとき、過剰なオーバーヘッドを生じることがない。現フレームのみが、必要に応じて休止しなければならず、その後手順がそれ自体のペースで進み得る方向に自己調整し、同期または初期手続きはほとんど必要でない。
第二に、特に並行な不要部分の整理の関連において、その時機密保護されているフレームに再エントリする試みが行われないことを保証するためリターン・バリアを用いることができる。これに付随するのは、1つのスレッドが動作中にGCがそのスレッドのスタックを調べることを許す能力である。記述した更に他の特徴は、スレッドのスタックが再走査されるならば、スレッドのどの部分が調べねばならないかを決定することができることであり、これは高水位マーク機構によって達成される。
上記のいずれかあるいは全てにおいて、本発明の幾つかの特徴がコンピュータ・ソフトウエアを用いて実現された。しかし、無論、当業者には、これらの特徴のいずれもハードウエアまたはハードウエアとソフトウエアの組合わせを用いて実現できることが明らかであろう。更に、ハードウエア、コンピュータ・ソフトウエアなどにより行われるファンクションが電気信号などを用いて行われることが容易に理解されよう。
情報の格納に関する特徴は、適切な記憶場所またはストアによって実現されよう。情報の処理に関する特徴は、ソフトウエアまたはハードウエア、あるいは両者の組合わせのいずれかにおいて適切なプロセッサまたは制御手段により実現されよう。
上記のいずれかあるいは全てにおいて、本発明は、下記の形態のいずれか、あるいは一部、あるいはその全てにおいて具現され、コンピュータ・システムを動作させる方法において具現され、コンピュータ・システム自体において具現され、コンピュータ・システムを動作させる方法を実行するようプログラムされあるいは構成されるときコンピュータ・システムにおいて具現され、そして(または)コンピュータ・システムを動作させる方法に従って動作するためのプログラムが記録されたコンピュータ読取可能な記憶媒体において具現されよう。
本文に用いられるように、用語「コンピュータ・システム」は、「コンピュータ」、「システム」、「装備」、「装置」、「マシン」などの用語と互換であり得る。コンピュータ・システムは、仮想マシンであり得、あるいはこれを含み得る。
上記のいずれかあるいは全てにおいて、方法および装置の特徴および特質を含む先に述べた異なる特徴および特質は、いかなる適切な方法においても組合わせることができよう。
本発明が本文において純粋に事例として記載され、細部の修正が本発明の範囲内で可能であることが理解されよう。
本文の記述、請求の範囲および図面において開示された各特徴は、独立的に、あるいはいかなる適切な組合わせにおいても提供されよう。
エージェント資料第6−コンピュータ・システム、コンピュータ読取可能な記憶媒体および同媒体を動作させる方法、および前記システムを動作させる方法
本発明は、コンパイルされたコードのセクションを削除することを許容するためコンピュータ・システムにおけるメモリを検査する方法および装置に関し、かつコンピュータ・システムにおいてコンパイルされたコードを削除する方法および装置に関する。本発明は、スタックのウォーキング(walking)がコンパイル・コードを削除することを許容する統合化されたスタックの仮想マシンの環境における特定の用途を(これに限定されず)を見出すものである。望ましい実施の形態において、本発明は、統合化スタック仮想マシンのマルチスレッド環境におけるコンパイル・コードの削除を許容するスタック・ウォーキングに関する。
本発明は、仮想マシンにおいて走るコードのコンパイルされた部分が現われ、仮想マシン、例えば動的にコンパイルする仮想マシンの実行時の色々な時点で除去する必要がある仮想マシンに適用する。
仮想マシンを用いてコードを実行するとき、エミュレートされたコードの一部または全てのコンパイル・バージョンを生成することが有利であることが判った(「主パスの動的にコンパイル」参照)。前記コンパイル・バージョンの一部あるいは全てを実質的に除去することがときに望ましいかあるいは必要であると信じる。また、エミュレートされたマシンと仮想マシンのコード自体の必要の両方のスタックの要件をサポートするため1つのスタックを使用すること、およびエミュレートされた呼出し(呼び出す)と相当することを行うネイティブな呼出し命令を使用すること、および仮想マシンをランするコードにおけるエミュレートされたリターンに相当することを行うためネイティブなリターン命令を使用することが有利であろうことも信じる。
コンピュータ・システムが特定のファンクションを行うため用いたメモリの使用を終了した場合、更なる使用のためできるだけ速く使用したメモリが返される速度と効率が問題となることが判った。
仮想マシンに対して今日知られる手法は、バックグラウンド情報部分にリストされる1つ以上の最適化手法がシステムの効率を阻害する別個の検査を利用されないことを要する。
特に、システムからのコンパイル・コードの削除は、諸問題を生じ得る。削除されないコンパイル・コードの部分から削除されたコードのセクションへのリンクが存在し得る。仮想マシンにおける呼出しまたは関与をエミュレートするためネイティブ呼出し命令(あるいは、等価物)の意図された使用のゆえに特定の問題が生じ得、このことは典型的に、呼出しまたは呼が行われるスタック点における、あるいはその付近におけるスレッドに対する前記スタックにおいて呼出された方法がいったん完了すると実行が継続するアドレスを外すことになる。ネイティブ呼出し命令がコード部分のコンパイル・バージョンの部分であるならば、リターン・アドレスはコンパイル・バージョンを指示する。このことは、コンパイル・バージョンの削除の時点までは何の問題も生じない。リターン・アドレスは、コンパイル・バージョンが使用される場所を指したままではあり得ない。実行中、コンパイル・コードが使用されたアドレスへ戻ろうとするとエラーが生じ、このスレッドによる実行は通常終了することになる。このような構成では、戻り動作を行うことが安全であることを保証するため、戻りが行われようとしている各場所において検査を行うことが必要となろう。
本発明は、上記および(または)他の問題を軽減することを目的とする。
本発明の望ましい実施の形態におけるこれらの問題に対する解決法は、コンパイル・コードの削除の時点において、仮想マシンの検査を行い、削除されるコンパイル・コードの断片内の位置を指示するスタックにリターン・アドレスが存在する場合を探し、削除されようとするコードのコンパイル・バージョンなしに前記スレッドの実行のシームレスな継続を可能にするためスタックの内容を再構成することである。この機構は、動作のコストが削除の時点で負担され、2つの状況の相対的頻度がコードの削除操作より多くの呼出し/戻り操作があるようなものであるため、正常な呼出し/戻り時にはほとんどあるいは全くコストが生じないように構成されることが望ましい。
従って、本発明は1つの特質において、コンパイル・コードの部分を削除することを許容するためコンピュータ・システムにおけるメモリを調べる方法を提供し、当該方法は、
コンピュータ・システムにおけるスタックのフレームを調査し、
コンパイル・コードの部分のアドレス範囲内にあるリターン・アドレスをフレームが含むかどうかを識別し、
このようなリターン・アドレスが識別されるときフレームの内容を変更することを含んでいる。
上記方法を実施することにより、削除されるべきコンパイル・コードのセクションをリターン・アドレスが指示したままにすることと関連する問題を克服することができる。
本発明の緊密に関連する特質において、コンピュータ・システムにおけるコンパイル・コードを削除する方法が提供され、当該方法は、
削除されるべきコンパイル・コードのセクションを選択し、
コンピュータ・システムにおけるスタックのフレームを調査し、
コンパイル・コードの部分のアドレス範囲内にあるリターン・アドレスをフレームが含むかどうかを識別し、
このようなリターン・アドレスが識別されるときフレームの内容を変更し、
コンパイル・コードの部分を削除する
ことを含んでいる。
このような任意のリターン・アドレスは、連続コードの断片のアドレスへ変更されることが望ましい。連続コードは、コードが削除されることなくリターン後に継続するよう実行を可能にする。連続コードは、インタプリタへ制御を渡すように構成されることが望ましい。連続コードは、例えばコンパイル・バージョンがあるエミュレートされた命令の部分に遭遇するまで、以降の命令が解釈されるように構成され、あるいはまた、コンパイル・バージョンが存在するならば、削除されるコードのこのようなコンパイル・バージョンへジャンプするように構成される。リターンに後続する命令の実行のためフォールバック・インタプリタの使用することは、命令の新たなコンパイル・バージョンを生じるオーバーヘッドなしに、削除されたコンパイル・コードの命令の実行を可能にする。
フレームがこのようなリターン・アドレスを含むならば、フレームにおける値が変更されることが望ましい。フレームにおける値は、コードが削除されることなく実行が継続することを可能にするように構成されることが望ましい。例えば、フレームに格納される一時的なレジスタ情報は、削除されるコードがコンパイルされたときに行われた最適化を勘定に入れるように変更される。このような変更は、例えば、以降の実行のため制御がインタプリタへ渡される場合に要求される。(エージェント資料第1参照)。
フレームの変更は削除の時点に行われることが望ましい。このため、リンクおよびフレームのリターン・アドレスはいずれも削除後はべコンパイル・コードを指示することがなく、実行中の時間のかかる検査を避けることができる。
スタックにおける複数のフレームが調べられることが望ましい。例えば、スタックにおける全てのフレームを調べることができ、さもなければ、コンパイル・コードの部分を指示するリターン・アドレスを含む各フレームが調べられる。
本発明の望ましい実施の形態においては、コンピュータ・システムがマルチスレッド環境を使用する。各スレッドはそれ自体のスタックを有する。
コンピュータ・システムにおける複数のスレッドのスタックが調べられることが望ましい。例えば、コンピュータ・システムにおける全てのスレッドのスタックが調べられ、さもなければ、削除されるコードがアクセスする各スレッドのスタックが調べられる。
このように、リターン・アドレスが削除されるコンパイル・コードのセクションを指示しないことを保証することができる。
一部のスレッドが削除されるコンパイル・コードのセクションにアクセスできないことが判る。このようなスレッドのスタックを調べないことにより、実行時間を節減することができる。
しかし、調べられるスタックのスレッドに対しては、検査が行われる間はスレッドを停止することがしばしば必要となる。あるいはまた、スレッドをコードのあるセクションへ限定するためリターン・バリアが挿入される(「リターン・バリア」参照)。
本発明の別の特質においては、コンピュータ・システムにおけるコンパイル・コードを削除する方法が提供され、該方法は、
システムにおける各スレッドの各スタックの各フレームを調査し、
リターン・アドレスが削除されるべきコンパイル・コードの部分を指示するかどうかを識別し、
削除されるコンパイル・コードの部分のないスレッドが実行を継続することを可能にするため、リターン・アドレスを含む各スタックの内容を再構成する
ことを含む。
本発明の更なる特質においては、コンピュータ・システムにおけるコンパイル・コードのセクションを削除する方法が提供され、該方法は、コンピュータ・システムのメモリを調べ、コンパイル・コードのセクションに対するリンクを識別し、このリンクを変更することを含む。
コンパイル・コードの部分に対するリンクは、フレームにおけるリターン・アドレスであることが望ましい。このように、フレームを実行するとき識別されるリターン・アドレスは、削除されるコンパイル・コードのセクションのアドレスの範囲内にあるリターン・アドレスであることが望ましい。
あるいは更に、またはこれに加えて、メモリの検査が、削除されるコンパイル・コードに対するパッチまたはジャンプを識別することができる。前記リンクは、削除されるコンパイル・コードに対して直接的あるいは間接的なリンクである。例えば、リンクは、コンパイル・コードのセクションに対するグルー・コードのセクションである。
コンピュータ・システムは、仮想マシンとして構成されることが望ましい。
本発明の更なる特質において、コンパイル・コードのセクションを削除することを許容するため、コンピュータ・システムにおけるメモリを調べる装置が提供され、該装置は、
コンピュータ・システムにおけるスタックのフレームを調べる手段と、
削除されるコードのセクションのアドレスの範囲内にあるリターン・アドレスをフレームが含むかどうかを識別する手段と、
フレームの内容を変更する手段と、
を含む。
本発明の別の特質において、コンピュータ・システムにおけるコンパイル・コードを削除する装置が提供され、該装置は、
削除されるコンパイル・コードのセクションを選択する手段と、
コンピュータ・システムにおけるスタックのフレームを調べる手段と、
削除されるコンパイル・コードのセクションのアドレスの範囲内に含まれるリターン・アドレスをフレームが含むかどうかを識別する手段と、
フレームの内容を変更する手段と、
コンパイル・コードのセクションを削除する手段と、
を含む。
当該装置は更に、以降の命令を実行する手段を含み、フレームの内容を構成する手段が、任意の前記リターン・アドレスを以降の命令を実行する手段のアドレスへ変更するためのものである。当該装置は更に、フォールバック・インタプリタを含むことが望ましい。以降の命令を実行する手段は、コンパイル・バージョンが存在するエミュレートされた命令のセクションに遭遇するまで、以降の命令を解釈するように構成される。
フレームの内容を構成する手段は、フレームがリターン・アドレスを含むならば、コードを削除することなく実行が継続することを可能にするようフレームにおける値を変更するためのものである。
本発明の望ましい実施の形態において、例えば、インタプリタによる以降の実行を可能にするよう値を更新するためどんな変更が要求されるかに関して「クリーンアップ」情報が利用可能になるように、コードのコンパイルにおいて実施された最適化のレコードが保持される。当該装置を含むコンピュータ・システムの場合、当該システムが更に、コードがコンパイルされるとき「クリーンアップ」情報を記録するレコーダを含むコンピュータ・システムを含むことが望ましい。
スタックにおけるフレームを調べる手段は、当該スタックにおける複数のフレームを調べるためのものである。スタックにおけるフレームを調べる手段は、コンピュータ・システムにおける複数のスレッドの各々のスタックを調べるためのものである。
本発明はまた、先に述べた装置を含む仮想マシンをも提供する。
本発明は更に、先に述べた装置を含むコンピュータ・システムを提供する。
別の特質において、本発明は、コンパイル・コードを削除する手段を含み、更にシステムにおける各スレッドの各スタックの各フレームを調べる手段と、リターン・アドレスが削除されるべきコンパイル・コードの部分を指示するかどうかを識別する手段と、削除されようとするコンパイル・コードの部分なしに前記スレッドが実行を継続することを可能にするように、リターン・アドレスを含む各スタックの内容を再構成する手段とを含むコンピュータ・システムを提供する。
本発明は更に、先に述べたような方法を実施するためのプログラムが記録されたコンピュータ読取可能な記憶媒体を提供する。
上記特質のいずれか特徴は、任意の適切な組合わせにおいて他の任意の特質が提供される。装置の特徴は方法の特質に適用され、あるいは反対に方法の特質は装置の特質に適用される。
本発明の望ましい特徴については、純粋に事例として、添付図面に関して次に記述する。
望ましい実施の形態の記述に先立ち、望ましい実施の形態の背景について最初に論述する。
仮想マシンは、1つのオペレーティング・システムに対して書かれたソフトウエアが別のオペレーティング・システムで走ることを可能にし、このソフトウエアは、「非ネイティブ」なソフトウエアと呼ばれる。非ネイティブなソフトウエアが走ることを可能にするために、仮想マシンは、ソフトウエアが書かれたオペレーティング・システムの動作をエミュレートする。このような状況が、図6Aに示される。仮想マシンは、非ネイティブなソフトウエアの命令を、ホスト・オペレーティング・システムにより走ることができるネイティブな命令へ翻訳する。従来のエミュレータは、実行中に非ネイティブな命令を解釈することにより働く。
任意の実行パス、すなわち「スレッド」は、これと関連するスタックを有する。スタックは、一時的なレジスタ情報とサブルーチンのリターン・アドレスとからなるフレームを格納するメモリにおける領域である。従来のエミュレータにおいては、非ネイティブなアプリケーションが、ホスト・オペレーティング・システムのスタックとは別個のそれ自体のスタック(エミュレータ・スタック)を有する。
エミュレータ・スタックの動作の一例が、図6Bに示される。同図によれば、非ネイティブ・コード5008の部分は、アドレスbbbに配置されたサブルーチン5010を呼出すアドレスaaaに呼出し命令を有する。エミュレータが呼出し命令に遭遇すると、アドレスaaa(リターン・アドレス)は、一時的レジスタ情報と共にエミュレータ・スタック5009に入れられ、この時実行のパスはアドレスbbbへジャンプする。サブルーチンの終りに、エミュレータがリターン命令に遭遇する。このエミュレータはレジスタ情報と共にスタックからリターン・アドレスを取得し、主ルーチンにおける呼出し命令に続く命令へ戻る。
望ましい実施の形態の仮想マシンにおいては、非ネイティブ命令の解釈ではなく、命令の一部または全てが、ホスト・オペレーティング・システムで走ることができるネイティブ命令へコンパイルされる。コンパイルにはある量の時間が必要であるが、コンパイル・コードを走らせるとき著しい時間の節減が可能である。
色々な方法で時間の節減が可能である。第一に、コードの一部が1回以上実行されるならば、コンパイル・バージョンを実行するのが更に効率的になる。第二に、エージェント資料第1において先に述べたように、コンパイル・コードの最適化を可能にする種々の仮定がコンパイルの間にできる。第三に、ホスト・オペレーティング・システムのスタックを用いることにより、またサブルーチンの呼出しのため(エミュレートされた呼出し命令ではなく)ネイティブ呼出し命令を用いることによって、時間の節減が可能である。
図6Cにおいて、非ネイティブな主ルーチン5008および非ネイティブなサブルーチン5010が、ネイティブなルーチン5012およびネイティブなサブルーチン5014へコンパイルされる。アドレスxxxにおける呼出し命令はネイティブな呼出し命令である。この呼出し命令に遭遇すると、アドレスxxx(リターン・アドレス)が一時的レジスタ値と共にホスト・スタック5015へ入れられる。アドレスyyyにおけるサブルーチンの命令がピックアップされる。このサブルーチンの終りにおけるリターン命令に遭遇すると、リターン・アドレスとレジスタ値がホスト・スタックから取入られ、主ルーチンの実行が再開する。
先に述べた方法でコンパイル・コードを用いるとき、ある状況では、コンパイル・コードのあるセクションを削除することが望ましいかあるいは必要である。これは、コンパイル・コードが格納される記憶域がほかに要求されるゆえであり、あるいはコンパイルの間に行われる場合の仮定がもはや無効であるゆえある。また、特に制限されたメモリ環境で用いるときは、将来必要とされることが予期されないコードを除去することが望ましい。
コンパイル・コードのセクションから呼出されたサブルーチンをプロセッサが実行中である間コンパイル・コードのセクションが廃棄される場合は、問題が生じる。このような状況では、リターン・アドレスが、もはや存在しないコードの部分を指示するスタックに残される。
望ましい実施の形態によれば、コンパイル・コードのセクションの削除に先立ち、スタックがフレーム単位で調べられて、削除されるコードのセクションを指示する何らかのリターン・アドレスを識別する。このようなリターン・アドレスが識別されると、アドレスが、本文では「グルー・コード」と呼ばれる継続コードの部分のアドレスへ変更される。このグルー・コードは、削除されるコード部分なしに実行を継続することを可能にする。これは、コンパイル・バージョンがあるコード部分に遭遇するまで元の非ネイティブなコードにおける命令を解釈することによるか、あるいはコードの別のコンパイル・バージョンが存在するならば、このコンパイル・バージョンへジャンプすることによって行われる。
グルー・コードの使用およびコンパイル・コードと非コンパイル・コードとの間の実行の転送の論議は、エージェント資料第1において見出すことができる。
先に述べたように、サブルーチンが呼出されると、一時的レジスタ情報もまたリターン・アドレスと同じフレームにおいてスタックへ入れられる。種々の最適化がコードのコンパイルの間に行われるから、コンパイル・コードの残りが実行されるならば、このレジスタ情報のみが有効となる。例えば、コードのセクションがコンパイルされると、コンパイラがこのコードのセクションでは全てのパラメータが必要とされるわけではないことを識別することになる。このような場合、コンパイル・コードの残りの実行に必要でないので、レジスタ情報の一部が残されることになる。しかし、実行が元の解釈されたコードへ戻るならば、パラメータの全てが必要となる(インタプリタがどのパラメータが必要か必要でないかを知ることを見越し得ないので)。このように、コードの解釈されたバージョンを実行できる前に見失ったレジスタ情報が追加されることを必要とすることになる。
正しくないレジスタ情報の問題は、サブルーチンが呼出されるとき、コンパイル・コードの残りが実行されなかった場合でさえ、スタックに入れられるレジスタ情報の全てが有効であることを確認することによって避けることもできる。あるいはまた、レジスタ情報に影響を及ぼす最適化が行われると、この事実は、コンパイル・コードの残りが実行されなくとも、最適化を行わないことを許容するのに必要な情報と共に記録することもできる。リターン・アドレスを含むフレームが識別されると、グルー・コードが行われた最適化を調べて、必要な場合にこのフレームにおけるレジスタ情報を変更することができる。
望ましい当該実施の形態は、マルチスレッド環境、すなわち非同期で走るが同じ作業スペースを共有する2つ以上のプロセッサすなわちスレッドがある環境において動作するよう意図される。この望ましい実施の形態では、コンパイル・コードがアクセスしたかもしれない各スレッドのスタックが調べられ、あるいは単に各スレッドのスタックが調べられる。
1つのスタックを調べるため、このスタックが関連するスレッドが、ある期間だけ停止される。実施の一形態では、このスレッドは、スタックにおける全てのフレームが調べられる間停止される。別の形態においては、スレッドは、スタックにおける最近のフレームか、あるいは予め定めた数の最近のフレームを調べるだけ充分に長い間停止される。これらのフレームがいったん調べられると、「リターン・バリア」が、エージェント資料第5に記載される方法でスタックへ挿入される。従って、このスレッドは、スタックがリターン・バリアに留まる長さだけ実行を継続することを許され得る。
図6Dに関して、望ましい実施の形態の動作について次に述べることにする。
ステップ5020において、あるコード・バッファが削除されることが決定される。コード・バッファは、コンパイル・コードを格納するメモリにおける1つの領域である。ステップ5022において、そのスタックが調べられるスレッドが選択される。ステップ5024において、このスレッドが停止される。あるいは、ステップ5026において、リターン・バリアがスタックへ挿入され、リターン・バリアにスタックが留まる長さだけスレッドの動作が継続することを許される。
ステップ5028において、スタックにおけるフレームが選択される。調べられる最初のフレームは、典型的に、このスタックにおける最も新しいフレームとなる。ステップ5030において、選択されたフレームが削除されるバッファにおけるリターン・アドレスを含むかどうか知るために、このフレームが調べられる。
このようなリターン・アドレスがあることが判ると、ステップ5032において、リターン・スレッドが指示するバッファないの断片が識別される。ステップ5034において、他のフレーム・フィールドが、行われているかも知れないローカル変数値または仮想マシンに固有の変数の最適化の「クリーンアップ」を行うように調整される。ステップ5036において、リターン・アドレスがグルー・コードの一部を指示するように変更される。
フレームが削除されるバッファへのリターン・アドレスを含まなければ、あるいはフレームにおける値がいったん調整されると、ステップ5038において、スタックにおける全てのフレームが調べられたかどうか決定される。もし調べなかったならば、ステップ5040において、スタックにおける次に新しいフレームが選択され、このフレームが調べられる。スタックにおける全てのフレームが調べられると、ステップ5042において、スレッドが再開され、あるいはリターン・バリアが除去される。ステップ5044において、全てのスレッドのスタックが調べられたかどうか決定される。もし調べられなかったならば、スタックが調べられなかった別のスレッドが選択され、このプロセスが反復される。
スレッドの全てにおける全てのスタックのフレームの全てが調べられ、このスタックに対する適切な変更がなされると、ステップ5046において、コード・バッファが削除される。
次に図6Eに関して、当該形態を具現する装置について記述する。
図6Eは、非ネイティブ・コード5052をホスト・コンピュータ5054で走らせる仮想マシン5050を含むコンピュータ・システムを示している。この仮想マシンは、制御手段5056と、非ネイティブなアプリケーション・コードを解釈するインタプリタ5058と、非ネイティブなアプリケーション・コードの各部をコンパイルするコンパイラ5060と、「スタック・ウォーカ」5062とを含んでいる。ホスト・コンピュータは、プロセッサ5064とメモリ5068とを含む。図6Eには、各スレッド間にその時間を適切に分けることにより、幾つかのスレッドを同時に実行する1つのプロセッサが示されるが、それぞれが1つ以上のスレッドを実行する2つ以上のプロセッサを設けることもできる。
コンパイラ5060によりコンパイルされたコンパイル・コード5070は、メモリ5068に格納される。またメモリ5068には、プロセッサにより実行されているスレッド数と対応する複数のスタック5072、5073、5074が配置される。
動作において、制御手段5056は、ある時点において、例えばメモリの領域を他の目的に用いることを許容するため、コンパイル・コード5070のセクションが削除されるべきことを決定する。次に、制御手段はスタック・ウォーカ5062に対しコードの当該セクションが削除されるべきことを表示する。このスタック・ウォーカは各スレッドの動作を逐次休止させ、スレッドのスタックにおけるフレームを調べて削除されるコードのセクションを含む記憶域にあるリターン・アドレスを含むフレームを識別する。このようなアドレスは、グルー・コード5076の部分のアドレスへ変更され、フレームにおける他のフィールドが、行われたかも知れない、ローカル変数値あるいは仮想マシンに固有の変数の最適化を「クリーンアップ」するように調整される。グルー・コードは、図6Dに関して先に述べた方法で動作する。スレッドの全てにおける全てのスタックのフレームの全てが調べられ、スタック内容への適切な変更がなされると、スタック・ウォーカ5062が制御手段5056に対しコードの当該部分が削除されたことを表示する。次に、制御手段5056は、コンパイル・コード5070のセクションを削除するように削除手段5078を制御する。
要約すると、コードの削除時に、仮想マシンにおける各スレッドが逐次休止させられ、これらスレッドのスタックが、削除されるコードを指示するリターン・アドレス値を探して走査される。これらのケースの1つが見出されると、リターン・アドレス値付近のスタックの状態が、リターンに遭遇する時点(すなわち、スレッドに対する将来のある時点)に当該スレッドに対する仮想マシンの状態を「クリーンアップ」するように調整され、リターン・アドレス値自体は、実行のフローをコードの少数の中央部分の1つへ変えさせるように調整される。コードのこれらの中央部分(「グルー・コード」と呼ばれる)は、ある一般的な検査を行い、当該スレッドに対する適切な方法での実行のフローの継続を生じ、これは通常、コンパイル・バージョンが存在するエミュレートされた命令のセクションに遭遇するまで、以降のエミュレートされる命令の解釈を含む。
上記のいずれかあるいは全てにおいて、本発明の幾つかの特徴がコンピュータ・ソフトウエアを用いて実現された。しかし、無論、当業者には、これら特徴のいずれもハードウエア,またはハードウエアとソフトウエアの組合わせを用いて実現されることが明らかであろう。更に、ハードウエア、コンピュータ・ソフトウエアなどにより行われるファンクションが電気信号などを用いて行われることが容易に理解されよう。
情報の格納に関する特徴は、適切な記憶場所またはストアにより実現されよう。情報の処理に関する特徴は、ソフトウエアあるいはハードウエア、あるいは両者の組合わせにおいて、適切なプロセッサまたは制御手段により実現されよう。
上記のいずれかあるいは全てにおいて、本発明は、下記の形態のいずれか、あるいは一部、あるいはその全てにおいて具現される。すなわち、本発明は、コンピュータ・システムを動作させる方法において具現され、コンピュータ・システム自体において具現され、コンピュータ・システムを動作させる方法を実行するようにプログラムされあるいは構成されるとき、該システムにおいて具現され、そして(または)システムを動作させる方法に従って動作するためのプログラムが記録されたコンピュータ読取可能な記憶媒体において具現されよう。
本文全体に使用されるように、用語「コンピュータ・システム」は、「コンピュータ」、「システム」、「装備」、「装置」、「マシン」などと互換であり得る。コンピュータ・システムは、仮想マシンであり得、あるいは仮想マシンを含み得る。
上記のいずれかあるいは全てにおいて、方法および装置の特徴および特質を含む先に述べた異なる特徴および特質は、適切な方法で組合わせることができる。
本発明が純粋に事例として記述され、細部の修正が本発明の範囲内で可能であることが理解されよう。
本文の記述、および(適切な場合に)請求の範囲および図面に開示された各特徴は、独立的に、あるいは任意の適切な組合わせにおいて提供されよう。
エージェント資料第7−コンピュータ・システム、コンピュータ読取可能な記憶媒体およびこれを動作させる方法、および前記システムを動作させる方法
本発明は、コンピュータ・システムにおいてガーベッジ・コレクタ特に、並行なガーベッジ・コレクタ)を動作させる方法に関し、不要部の整理のためのコンピュータおよびコンピュータ・システムに関し、コンピュータ読取可能な記憶媒体に関し、および仮想マシンに関するものである。望ましい実施の形態にいて、本発明は、グレー・パケットに関し、すなわち、非常に多くのスレッド環境において並行なマーキングGCのための低競合グレー・オブジクトに関する。
一般的なレベルでは、本発明は、ランタイム環境に適用可能であり、更に特殊なレベルにおいては、自動的なダイナミック・メモリ管理に適用可能である。
ここでは、「メモリ・オブジェクト」を参照する。これらオブジェクトは、典型的に、フィールドに組織されたメモリの任意の離散領域であり、その一部は他のオブジェクト、更には同じオブジェクトに対する参照であり得る(オブジェクト指向プログラムにおけるオブジェクトと混同してはならない)。
コンピュータ・システムにおけるメモリの効率的な使用のためには、その時の使用がいったん終了すると、再び使用されるようにメモリを再び割当てるため解放させるある機構が所定位置にあることが重要である。
このような「メモリ管理」は、典型的には、ファンクションを実行するためメモリを必要とすることを示すコード、およびこのメモリの使用が終了したときを示すコードをプログラム自体が含む、「手動」であり、あるいはプログラムがコンピュータ・システムにメモリの使用が終了したときを知らせず、その代わりシステム自体が使用されたメモリを識別して復元する方法を実現しなければならない「自動」である。後者は、便宜上「不要部分の整理」と呼ばれ、プログラムによりその時使用されているメモリ・オブジェクト全体にわたりサーチするプロセスを開始するコンピュータ・システムに依存する。サーチの間遭遇するこのようなオブジェクトがその時使用中であると見なされ、遭遇しない他のオブジェクトはその時使用中ではあり得ず、デッド状態と見なされ、従って再割当てに利用可能である。
不要部分の整理(GC)を行う前の試みにおいて、3つの特定手法が堤案されてきた。「参照カウント」として知られる第1の手法においては、種々のメモリ・オブジェクトに対する参照すなわちポインタの数は保持され、システムは参照がゼロになることにより、前に指示したオブジェクトが再割当てのため「自由」になることを示す機会を探す。このような手法における短所は、マルチスレッド環境において非効率的であること、および循環構造(例えば、オブジェクトAがオブジェクトBを参照し、このオブジェクトBが再びオブジェクトAを参照するとき)がガーベッジになったときを検出できないことである。
「コピーイング」として知られる第2の手法においては、メモリが、図7Aにおいて「FROMスペース」12102と「TOスペース」12104として示される2つの部分へ分けられる。オブジェクトに対するメモリは、FROMスペースが一杯になるまでこのスペース内の直線的に増加するアドレスに割当てられる。この時点で、全てのライブ・オブジェクト12106を「TOスペース」における更にコンパクトな領域12108へコピーするGCのための全ての作業が停止するよう強制される。同時に、「TOスペース」における新たな場所を勘案するように参照も変更される。FROMスペースとTOスペースの役割は逆であり、新たなメモリ割当ては、こんどは前のFROMスペースが用いられたと同じ方法でTOスペースを用いて継続する。このような手法の主な短所はメモリ要求が多くなること、およびGCルーチンが実現されるごとにダウンタイムが生じてFROMスペースとTOスペース間の役割の切換えが生じることである。
いわゆる「マーク/掃引」手法である第3の手法は、オブジェクトを含む1つの論理ユニットに配置される全てのメモリを呼出す。GCは、割当て要求を満たすのに充分に大きなメモリ領域がヒープにないときに呼出され、この時GCが全てのオブジェクトを「白」に色つけし、参照によりライブ・オブジェクトに対する全てのあり得るパスをトレースすることになる。GCが達したどのオブジェクトも「黒」に色つけされてライブであると見なされるが、達しない領域は「白」のままであり、デッド状態であり再割当てに利用可能であると見なされ得る。この手法の最終段階は、白でマークされた全ての領域が解放されて作業が継続することを許される「掃引」動作を呼出す。
更に詳細に述べれば、マーク/掃引手法では、図7Bから判るように、オブジェクトに遭遇するが参照する全てのオブジェクトに達しないマーキング(トレーシング)相においては、これはグレーでマークされ、それに対する参照はグレー・スタックと呼ばれるメモリ・スタックの形態におけるデータ構造12202へ置かれる。(これに関して、典型的なメモリ・スタックは、「最も新しい項目がスタックの最下部に最も近くなるように」項目が上から下へ次々に追加される変更可能なサイズのメモリ・ストアと見なされる。このような規則は、例示の目的のために過ぎない。これは、新たな項目が上へあるいは下へ系統的に追加されるスタックの動作と全く異ならない。)図7Bもまた、色つけを含む、メモリ・オブジェクトに対する記憶域であるメモリ・ヒープを12204で示している。
参照自体もまた、データ構造における最初の参照を見つけることにより調べられる。この参照は、グレー・スタックから除かれ、これが参照するオブジェクトは「黒」にされる。次に、トレーシング・プロセスによりまだ遭遇しない他のオブジェクトにおける参照12206は、グレー・スタックへ入れられ、これらのオブジェクトは「グレー」にされる。図7Bにおいて便宜上12208で拡大して示される各オブジェクトは、参照の黒/白状態の表示12210、およびスタックにおける他のオブジェクトに対する12212のようなポインタを含む。このプロセスは、グレーのスタックが空になるまで反復される。このトレーシング・プロセスの後に、黒いものが白にされ白いものが将来の使用に供される掃引相が存在する。不要部分の整理の終りに、グレー・スタックが存在しなくなることが理解されよう。
マーク/掃引(トレーシング)手法の主な欠点は、作業が停止する間ダウンタイムが無いことであり、先の2つの手法のいずれよりも更に複雑になることである。コピーするGCに対するその主な利点は、空間的な冗長度がほとんどないかあるいは全くないことである。
いわゆる「並行な」環境においては、オブジェクトは、トレースされている間に操作され得る。図7Cにおいて、特にオブジェクトにおける参照フィールド「b」(12306)は、異なる参照「d」(12308)を参照するように更新することができる。更新されているオブジェクトA(12302で示される)は黒である(すなわち、GCにより完全にトレースされた)が、新たなオブジェクトB(12304で示される)は「白」であり、従って、AがBに対する唯一のルートとなるならば、Bがデッド状態であると誤識別され得るというリスクがある。このことは、GCがAに再び達する理由がなく、従ってBが決してトレースされないゆえに生じる。並行なGCを用いるシステムは、オブジェクトBを「グレー」にして、これらオブジェクトに対する参照をグレー・スタックへ当てるような状況を捕らえるため「白いバリア」を用いる。各仮想マシンに対しては通常1つのグレー・スタックしかないので、GCにより使用されるときは、メモリおよびグレー・スタックの使用における競合が生じやすい。
事実、グレーのオブジェクトの組は、制御について幾つかのスレッド間で共有されるリソースであり、その全てはこれを変更し得る。従って、任意の変更はある種のロッキング機構により取締られねばならない。グレー・セットは、トレーシング・プロセスの間頻繁に使用され、従ってグレー・セットに対してアクセスしようとする試みがすでに使用中であることを見出す可能性が高い。更に、前記ロッキング機構により課されるオーバーヘッドが増加する傾向を有する。換言すれば、並行なGCにおいては、システムの他の部分がオブジェクトを変更しようと試み得るが、GCは依然としてライブな記憶場所とデッドである記憶場所を見出す方法をトレースし続ける。ライブなオブジェクトがデッドであると不正に識別され、これにより再割当てが行われないようにするために特殊な処置をとることが必要となる。これにより、データの消滅および(または)逸失が結果として生じ得る。このような問題に対する典型的な解決策は、オブジェクトの内容を変更するおそれがある全ての操作に対して「書込みバリア」を用いることであった。
GCに対する更なる問題は、たとえ非常に生じやすい場合でも、グレー・スタック全体に対するスペースがGCサイクルの初めに割当てられねばならないこと、および通常は最悪の偶発性に対処するに充分に大きくなければならないことである。従って、グレー・スタックのため留保されたスペースの大部分が浪費される。
本発明は、グレー・スタックへのアクセスに多くの競合が生じる問題を克服するためには、1つの特質においてグレー待ち行列の管理と関連するものと見なすことができる。
本発明は、1つの特質において、コンピュータ・システムにおいてガーベッジ・コレクタを働かせる方法を提供し、ガーベッジ・コレクタが(典型的には、所与の時点において)1組の部分的にトレースされたメモリ・オブジェクト(典型的には、「グレー」オブジェクト)を持ち、前記方法は複数の離散パケットにおいて前記オブジェクトの組を処理する(あるいは、この組を前記複数の離散パケットへ分ける)ことを含む。
複数の離散パケットにおける前記組を処理することにより、この組は必要とするスペースを占めるに過ぎない。このことは、実質的大きな固定サイズである公知のグレー・スタックと対照され得る。
ガーベッジ・コレクタは、例えば、増分型あるいは休止するガーベッジ・コレクタでよい。しかし、動作の速度については、ガーベッジ・コレクタは並行なガーベッジ・コレクタであることが望ましい。(典型的に、並行なガーベッジ・コレクタは、少なくとも1つの他の制御のスレッドの実行と同時に動作する、すなわち、不要部分の整理と同時に生じる変化を阻止しない。非並行型ガーベッジ・コレクタにおいては、コレクタのスレッドが実行している唯一のスレッドであり、従ってロッキングが必要とされない。)この場合、各パケットがたかだか任意の所与の時点に1つの制御のスレッドによりアクセス可能であることが望ましい。このことは、1つのスレッドが1つのパケットで終了しかつ別のパケットが働くことを必要とする機会に必要とされるロッキングの量を制限し得る。このことは更に、非常に頻繁に使用されるシステムにおけるGCの性能を改善することができ、そして(または)メモリを使用されないように解放することによりコンピュータ・システムのメモリ要求を減じることができる。
異なるパケットは、異なる制御のスレッドにより同時にアクセスすることができることが望ましい。このことは、システムにおける同時実行の程度を強化することができる。
同時実行を強化するためには、異なるスレッドにより使用できるようにパケットが個々に処理されることが望ましい。
その時特定の制御のスレッドにより使用中である各パケットが「チェック・アウト」とマークされ、その時使用する特定の制御のスレッドを持たない各パケットは「チェック・イン」とマークされ、チェック・アウトされたパケットのみが特定の制御の前記スレッドによりオンに操作することができることが望ましいが、チェック・インされた(グレーの)各パケットの場合は、内容がスレッドにより読出すことができる前に、手動の実行ロックが課されることが望ましい。このことは、パケットを管理する便利な方法を供することができる。
パケットの最小数は2であり、後で述べるように、1つはグレー・オブジェクトに関して充填するためのものであり、他は「黒くする」間に空にするためのものである。パケットは、(特に多数のスレッドが実行中であるとき)パケットへの分割の利点を許しかつ多すぎるメモリを使用する欠点を避けるのに充分な長さであることが望ましいが、管理ができず過剰数のロックを生じるほど長くないことが望ましい。従って、各パケットが1つのオブジェクトへの参照ごとに1つずつ多数のスロットを含むことが望ましく、この数は少なくとも2、5、10、50あるいは100の1つである。同様に、各パケットが1つのオブジェクトへの参照ごとに1つずつ多数のスロットを含むことが望ましく、この数は5000、1000、500あるいは100より少ない1つである。これらのおおよそのサイズが広範囲の用途にわたり最適であることが判った。
パケットのサイズのそれほど重要でない処置は、バイト数に関するその長さである。これは2の冪であることが望ましい。各パケットは、少なくとも8、16、32、64、128および256バイトの長さの1つであることが望ましい。各パケットは、1024、512、256、128および64バイト長より短いことが望ましい。
前記各パケットは、固定されたサイズであることが望ましい。各パケットは、固定数のスロットと、当該パケット内でその時使用されるスロット数の表示(典型的には、ヘッダ)とを含むことが望ましい。
メモリ要求を節減するために、パケットは、パケットがデマンドに従って生成され破壊されることが望ましい。換言すれば、パケットが必要に応じて生成、破壊できるようにダイナミックに管理される。後で述べるように、存在するパケット数は、マーキング・プロセスと黒くするプロセス間の間隔のファンクションである。
パケットの破壊は、全パケットの一部の内容を一緒にマージすることによって少なくとも部分的に達成できる。
本発明は、緊密に関連する特質において、1組の部分的にトレースされるメモリ・オブジェクトを持つガーベッジ・コレクタと、複数の離散パケットにおいて前記1組のメモリ・オブジェクトを処理する手段とを含むコンピュータ・システムを提供する。
ガーベッジ・コレクタは、並行なガーベッジ・コレクタであることが望ましい。
各パケットが、所与の時点にたかだか1つの制御のスレッドによりアクセス可能であることが望ましい。
当該コンピュータ・システムは更に、同時に異なる制御のスレッドにより異なるパケットをアクセス可能にする(あるいは、可能にするための)手段を含むことが望ましい。
コンピュータ・システムは更に、パケットを異なるスレッドにより使用できるように個々に処理する(あるいは、処理するための)手段を含むことが望ましい。
コンピュータ・システムは更に、その時「チェックアウト」された特定の制御のスレッドにより使用中である各パケット、およびその時「チェックイン」された特定の制御のスレッドを持たない各パケットをマーキングする(あるいは、マーキングするための)手段と、前記の特定の制御のスレッドによりチェックアウトされたパケットのみについて動作を許容する手段とを含むことが望ましい。
各パケットは、1つのオブジェクトに対する参照ごとに1つずつ多数のスロットを含むことが望ましく、この数は少なくとも2、5、10、50あるいは100の数である。また、各パケットが、1つのオブジェクトへの参照ごとに1つずつ多数のスロットを含むことが望ましく、この数は5000、1000、500あるいは100より少ない数である。前記各パケットは、固定サイズである。各パケットは、固定数のスロットと、該パケット内でその時使用されるスロット数の表示とを含む。
コンピュータ・システムは更に、デマンドに従ってパケットを生成し破壊する(あるいは、生成し破壊するための)手段を含むことが望ましい。
コンピュータ・システムは更に、全パケットの一部の内容を一緒にマージすることにより、パケットを少なくとも部分的に破壊する(あるいは、破壊するための)手段を含むことが望ましい。
本発明は、緊密に関連する特質において、使用されることのないメモリを解放するように、コンピュータ・システムにおける並行なガーベッジ・コレクタ・システムを多重スロット環境において動作させる方法を提供し、該方法は、
1つのメモリ・グループにおける各オブジェクトの状態をトレースし、
トレーシング・プロセス(白)中にオブジェクトが遭遇されなかったか、オブジェクトとこれが参照する全てのオブジェクトがトレーシング・プロセス(黒)により遭遇されたか、およびオブジェクト自体が遭遇されたがこれが参照するオブジェクトの一部が達しなかった(グレー)かに従って識別子を割当て、
グレーの識別子で割当てされた組を離散パケットへ分け、
前記各スレッドがその各々のパケットにおいて他の前記スレッドおよびパケットと独立的に動作できるように、前記各パケットを各スレッドに割当てる
ことを含んでいる。
本発明は、緊密に関連する特質において、コンピュータ・システムを提供し、該コンピュータ・システムは、
(望ましくはランタイム・エンジンである)並行なガーベッジ・コレクタと、
1つのメモリ・グループにおける各オブジェクトの状態をトレーシングする手段と、
オブジェクトがトレーシング手段により遭遇されなかったか、オブジェクトとこれが参照する全てのオブジェクトがトレーシング手段(黒)により遭遇されたか、およびオブジェクト自体が遭遇されたがこれが参照するオブジェクトの一部が達しなかった(グレー)かに従って識別子を割当てる手段と、
グレーの識別子で割当てられた組を離散パケットに分ける手段と、
前記各スレッドがその各々のパケットにおいて前記スレッドおよびパケットとは独立的に動作するように、前記各パケットを各スレッドに割当てる手段と、
を含んでいる。
本発明は、並行な不要部分の整理システムを動作させる手段と、各パケットが任意の時点で多くとも1つのスレッドによりアクセスできるようにグレー待ち行列をパケットに分ける手段とを含むコンピュータ・システムに拡張する。
本発明は、緊密に関連する特質において、コンピュータ・システム環境における並行な不要部分の整理システムを動作させる方法を提供し、これにおいてはグレー待ち行列は各々が任意の時点で多くとも1つのスレッドによりアクセスできるパケットに分けられる。
当該コンピュータ・システムは、マルチスレッド環境において動作するようになっていることが望ましい。
コンピュータ・システムは更に、パケットに対するマネージャを含むことが望ましい。
本発明は、上記方法によりプログラムされたときのコンピュータに拡張する。
本発明は、1組のメモリ・オブジェクトを複数の離散パケットにおいて処理するように、プログラムされたとき、1組の部分的にトレースされたメモリ・オブジェクトを持つガーベッジ・コレクタを含むコンピュータ・システムに拡張する。
本発明はまた、上記方法を提供するプログラムが記録されたコンピュータ読取可能な記憶媒体に拡張する。
本発明は、緊密に関連する特質において、コンピュータ・システムにおいて1組の部分的にトレースされたメモリ・オブジェクトを持つガーベッジ・コレクタを動作させる方法であって複数の離散パケットにおいて前記1組のメモリ・オブジェクトを処理することを含む方法を提供するプログラムが記録されたコンピュータ読取可能な記憶媒体を提供する。
本発明は、上記コンピュータまたはコンピュータ・システムを含む仮想マシンに拡張する。
本発明は、緊密に関連する特質において、上記方法により動作されるとき仮想マシンを提供する。
本発明は、緊密に関連する特質において、上記コンピュータ読取可能な記憶媒体により動作されるとき仮想マシンを提供する。
本発明の望ましい実施の形態については、純粋に事例として、添付図面に関して次に記述する。
最初に、本発明を実施することができる特定の方法の更に包括的な記述の続いて、本発明の性質の概要を述べる。
不要部分の整理(GC)は、ランタイム環境が任意の時点で使用されたが現在は使用されていないメモリを識別することができ、かつ他の目的のため再使用に供することができるプロセスである。並行なGCは、プログラムまたはシステムにおける他のアクティビティを現在進行中のGCアクティビティにより妨げる必要がないようなGCを実現する方法である。
トレーシングGCの(コンカレントあるいはその他の)作業は、所与のあるルートの組12404から始まる12402として全体的に示されるメモリ・オブジェクト間の図7Dにおいて矢印12400として示される参照に従うことにより働き、「ライブ」として取扱われねばならない全てのオブジェクトの組を確定する。前記の組にないオブジェクトは、「デッド」であると見なされ、そのメモリ・スペースは再使用することができる。ルートの組は、不要部分の整理のためのある開始条件であり、典型的に、関心スタックに対する参照を含む1組のパブリック参照である。
任意の時点におけるトレーシング・プロセスの状態は、トリコロール・アブストラクションを用いて要約することができる。各オブジェクトは、これと関連するカラーを有する。すなわち、
白:このオブジェクトは、トレーシング・プロセスの間まだ遭遇されない。
黒:このオブジェクトおよびこれが参照する全てのオブジェクトはトレーシング・プロセスにより遭遇されたものである。
グレー:このオブジェクト自体は遭遇されたが、これが参照するオブジェクトの一部は到達していない(換言すれば、グレーの色づけは進行中の作業を示す)。
トレーシングGCアルゴリズムは、下記のように働く。すなわち、
Figure 2010267291
このアルゴリズムがいったん完了すると、どれかの「白の」オブジェクトにより占有されるスペースは再使用できる。
コピーイングGCと違い、マーキングGCはこのアブストラクションをやや逐語的に構成する傾向があり、オブジェクトのカラーはメモリにおけるその絶対的位置により黙視的に決定される。本発明は、種としてマーキングGCアルゴリズムおよび手法に関する。
マーキングGCにおいては、オブジェクトのカラーはオブジェクト自体にオブジェクトのヘッダ(図7Eの12502)の一部として格納される。このカラーは、4つの状態、白、黒、グレーおよび自由(すなわち、オブジェクトが割当てに供し得る)の1つにあるマーク情報M、12504としてコード化される。
Mは、典型的に、4つの個別の状態を一緒にコード化させる1対のビットとなる。オブジェクトの再色づけは、オブジェクトのヘッダにおけるMの状態情報を適切な方法で変えるものである。望ましい実施の形態においては、オブジェクトの色づけはオブジェクトの寿命の間記憶される。GCの動作外では、全てのオブジェクトは白に色づけされる。
効率の考察は、グレーのオブジェクトの組は(グレーに再色づけすることにより)追加でき、あるいは(黒に再色づけすることにより)除去することができる個別のエンティティとして処理できることを示す。この組は、これまでは、スタックとして実現されてきた。通常は、グレーのスタックは、どこにアレイにおける読出しおよび書込みが生じるかを示すように変更可能である付加的な指標を持つ別のスタックまたはアレイとされる傾向がある。図7Fは、空のスタック12602を示している。
並行なGCアルゴリズムにおいては、GCがトレーシング中である間はシステムの他の部分は変化するオブジェクトであり得る。注意しないと、ライブのオブジェクトはデッドとして誤認識され得る。この問題を取除く典型的な方法は、オブジェクトの内容を変え得る全ての動作に対して書込みバリアを用いることである。異なる構成が異なる方法で働き得るが、これらの構成は全て、制御の非GCスレッドがグレーのオブジェクトの組を変え得ることを必要とする傾向がある。
一般に、各アクセスごとに全体としてロックされねばならない1つのモノリシックなグレー・オブジェクトの組を持つ代わりに、本発明は、望ましくは各スレッド(および、このスレッドのみ)が切離した状態で働き得るセグメントを与えられるように、前記の組を離散的なセグメント、すなわちパケットへ分ける(図7Dにおける事例12406参照)。これは、スレッドが1つのパケットで終り且つ働く別のパケットを必要とする場合に要求されるロッキング量を最小化することができる。従って、パケットは、グレーのスタックを完全に置換える(これは、図7Dのスタックからヒープへの矢印がなぜ点線で示されるかの理由である)。
従って、本発明は、いわゆる「グレーのパケット」に関係し、特に、高度のマルチスレッド環境において並行な不要部の整理をマーキングするための競合度の低いグレー・オブジェクトの組の提供に関する。
あるGCは、メモリにおけるオブジェクトを移動する。ここで使用されるシステムは、並行なGCではそうすることが困難であるゆえにこれを行わない。その代わり、「マークおよび掃引」動作が行われる。この場合、白である全てがトレーシングすなわち「マーク」プロセスの終りに解放される。トレーシング・プロセス以降に、掃引相が生じる。この掃引相では、黒いものが白くされ、白いものが将来の使用のため利用できるようにされる。
グレー・パケット・マネージャ(GPM)は、グレーのパケットを管理するために本文に述べた手法によって提供される。GPMは、プログラムの開始時に現われるが、典型的には、ガーベッジ・コレクタもまた動作するまでは動作しない(ハウスキーピングの目的を除いて)。
特にGCスレッドに限定しないが任意のスレッドは、ときにグレーになることがある。例えば仮想マシン(VM)においては、GPMがその時グレー・パケットと呼ばれるものに対するそれ自体のメモリについてスレッドにより問合わされる。グレー・オブジェクトの組を別のパケットへ分ける理由の1つは、スレッドがそれ自体のグレー・パケットを自由にできるようにするためである。スレッドが一杯であるかそれに非常に近いグレー・パケットへの書込みを続けることを欲するならば、GPMはこのスレッドへ新たなパケットを与え、一杯のパケットを捨ててこれを記憶する。GPMは、空のパケットの待ち行列を用意完了状態に保持することができる。どんな数のスレッドでも、それ自体の別のパケットを自由にするようにでき、その結果このグレー・スタックを多数の排他的なアクセス領域へ分けることができ、かつグローバルなロックは要求されない。
グレー・パケットは同じ小さなアレイであり、要求次第で作成され且つ破壊される。これらパケットは、完全なパケットとして取扱われる。グレー・パケットは、典型的に、サイズが256バイトであり、60参照まで保持することができる。これは、60回に1回のアクセスしかグレー・パケットがGPMと通信することを必要としないことになる。カレントなGCがないときは、アクティブなグレー・パケットは存在しない。
このような手法の最も有効な特徴は、ロッキング量が最小限であることであり、要求に従ってグレー・パケットのダイナミックな作成および破壊が生じ、かつメモリ要求を最小化するように全パケットを部分的にマージするシステム能力が存在する。また、全ておよび一部の完全パケットの分離は、GPM内部でさえある程度の同時実行を許容し、その結果、GPMに対して呼出しが行われるならば、これはロックされたエンティティではない。
図7Dに略図的に示されたように、1組のグレー・パケット12406は、プログラムまたはシステム内のブロックとして存在する。各ブロックは、固定数のスロット12408を含み(それぞれが1つのオブジェクト参照を記述することができ)、かつこのブロック内でどれだけ多くのスロットがその時使用中であるかの表示を含む。望ましい実施の形態においては、チェック・インされたパケットが、チェーンを形成するようにリンクされることが望ましい組に分けられる。個々のパケット12406の構造は図7Gに示される。各グレー・パケットは、チェック・アウトされ、その場合1つの特定の制御のスレッドによりその時使用されており、あるいはチェック・インされ、この場合は特定の制御のスレッドはこれを使用していない。
グレー・パケットは、プログラムまたはシステム内の個々のモジュール、すなわち、グレー・パケット・マネージャすなわちGPMにより管理される。GPMは、下記のリソースを内部に保持する。すなわち、
一杯:一杯のパケットのリスト
一部一杯:一部一杯のパケットのリスト
上記リストはそれぞれ、これに対するアクセスを制御する個々のロックを有する。パケットは、これが上記リストのいずれかにあるならば、チェック・インされる。
外部では、GPMが下記の基本的サービスを提供する。すなわち、
・getEmptyPacket():空のパケット(あるいは、一部一杯であるが、完全に一杯ではないパケット)を取得し、これを呼出しスレッドへ戻す。
・getFullPacket():一杯のパケット(あるいは、一部一杯であるが、空でないパケット)をチェック・インされたパケットから取得し、その状態をチェック・アウトへ変更し、かつこれを呼出しスレッドへ戻す。空のパケットしか存在しなければ、NULLを返す。
・submitPacket(p):グレー・パケットpがその時チェック・アウトされることを検証し、次にその状態をチェック・インへ変更する。
GPMは、上記動作の各々をロック状態下で行う。
GPMは、これが選択したどんな順序でも取扱うことができ、「後入れ、先出し」のシステムはない。
外部では、GPMは下記APIにより用いられる。すなわち、
Figure 2010267291
各制御のスレッド(GCを含む)は、スレッドのローカルパケットインハンドの(すなわち、tl−pih)グレー・パケット・ポインタを有する。このポインタは、NULL(スレッドが自由になるパケットを持たないことを示す)であり得るが、NULLでなければ、これはチェック・アウトされたパケットを参照しなければならない。
オブジェクトiをグレーとしてマークすると、
Figure 2010267291
もし占有されたフィールドがパケットに可能なスロットの最大数と一致するならばパケットは一杯にされたといわれる。
黒くする主アルゴリズムは、下記となる。すなわち、
Figure 2010267291
黒くするパケットを取得することは、
Figure 2010267291
この概念は、マーキングおよび黒化の両プロセスが存在するならば他のスレッドには見えないことが保証され得る、自由になるスレッドのパケットにおいてのみ動作することである。従って、パケットを提示して、黒にする空のパケット(単数または複数)を取得するため、GPMとの相互動作が要求されるときを除いて、ロッキングしない大半の時間が要求される。
GCでない各スレッドが周期的に自由になるパケットをGPMへ再び提示する(GCのみがパケットを黒にすることができる)。これは、GCが非GCスレッドのローカル・データ構造を調べる必要があるときに典型的に行われる。これらのパケットが部分的に完全であるから、GPMにおける部分リストがエントリをどのように取得するかである。できるだけ少ないグレー・パケットが割当てられることが望ましいので、getEmptyPacket()は、2つの部分的パケットの内容を1つの更に一杯になったパケットへ「フォーカス」することにより部分的なリストから空のパケットを作ることが可能な場合を選好し、呼出し側へ戻すことができる空のパケット(あるいは、少なくとも一杯の程度が少ないパケット)は残したままにする。完全に新しい空のパケットは、部分的なパケット・リストが空である場合だけ作成される。
以上のことから判るように、この手法の主な目的は、グローバル・データ構造に対するロックされたアクセスを最小限にするお蔭で、スレッドが非常に多い環境における並行なGCの性能を改善することである。従って、この手法によるコンカレントGCを用いる商品は、更に伝統的な手法を用いる商品より良好に動作することになろう。
グレー・パケット・マネージャの主要ファンクションの一部の要約は、下記の表に示される。この表では、各ファンクションはアンダーラインを付けて示され、このファンクションのステップはファンクション自体に従う。各ステップは、これが一杯の、ほぼ一杯の、あるいは空のパケットを用いて行われかどうかに従って、3つの欄(「一杯のパケット」、「部分的に一杯のパケット」あるいは「空のパケット」)の1つまたは2つに示される。
一杯のパケット 部分的に一杯のパケット 空のパケット

マーキング相−マークするオブジェクトがこれ以上なくなるまで下記の反復段階で進行する
(a) 空のパケットを取得(新しい空のパケットを取得しそしてグレーとしてマークする)
(b)一杯のパケットを依頼する(一杯のグレーのパケットを依頼する)
(c)空のパケットを取得(別の新しいパケットを取得)
黒くする相−これは、ステップ(b)が失敗するまで反復的に進行する
(a) 空のパケットを取得(黒にする目的のために)
(b)「空の」パケットを依頼(GPMの中へ)
スレッドのデッド
スレッドのデッドと同時に、tl−pihをGPMへ依頼する
全般的な準備
GCは他のスレッドのtl−pihをGPMへ周期的に依頼する

最後に図7Hに関して、望ましい実施の形態の全ファンクションについて、特に種々の主構成要素間のパケットのフローを参照して、次に要約する。
図7Hにおいて、グレー・パケット・マネージャ(GPM)が12700で示され、ガーベッジ・コレクタ(GC)が12702で示され、種々の制御のスレッド(ミューテータ)が12704、12706、12708で示され、パケットは12406で示される。スレッド12708は「n番目」のミューテータを表わし、トリガする書込みバリアを持たないから、パケットのフローを示さない。種々のパケット・フローが丸つき番号で示され、その意味は下記のとおり。
1)新たな空のパケットを取得
2)一杯のパケットを依頼
3)ほぼ一杯パケットを依頼
4)黒くする一杯のパケットを取得
5)空のパケットを依頼

並行および他のGC手法全般の概要は、R.JonesおよびR.Lins著「不要部分の整理:自動的なダイナミック・メモリ管理のためのアルゴリズム(Garbage Collection:Algorithms for Automatic Dynamic Memory Management)」(John Wiley発行、ISBN 0−471−94148−4)に見出すことができる。この文献の開示は、参考のため本文に援用される。
上記のいずれかまたは全てにおいて、本発明の幾つかの特徴がコンピュータ・ソフトウエアを用いて実現された。しかし、無論、当業者には、これらの特徴のいずれもハードウエアまたはハードウエアとソフトウエアの組合わせを用いて実現されることが明らかであろう。更に、ハードウエア、コンピュータ・ソフトウエア、などにより行われるファンクションが電気信号などを用いて行われることが容易に理解されよう。
情報の格納に関する特徴は、適切な記憶場所またはストアにより実現されよう。情報の処理に関する特徴は、ソフトウエアあるいはハードウエアにおいて、あるいは両者の組合わせにおいて、適切なプロセッサまたは制御手段により実現されよう。
上記のいずれかあるいは全てにおいて、本発明は、下記の形態のいずれか、あるいは一部、あるいはその全てにおいて具現されよう。すなわち、コンピュータ・システムを動作させる方法において具現され、コンピュータ・システム自体において具現され、コンピュータ・システムを動作させる方法によりプログラムされ、あるいはこれを実行するよう構成されるときこのシステムにおいて具現され、そして(または)コンピュータ・システムを動作させる方法に従って動作するためのプログラムが記録されたコンピュータ読取り可能な記憶媒体において具現されよう。
本文において用いられるように、用語「コンピュータ・システム」は、「コンピュータ」、「システム」、「装備」、「装置」、「マシン」などに対して互換である。コンピュータ・システムは、仮想マシンであり得、あるいはこれを含み得る。
上記のいずれかあるいは全てにおいて、方法および装置の特徴および特質を含む上記の異なる特徴および特質は、任意の適切な方法で組合わせることができる。
本発明は純粋に事例として記述され、細部の修正が本発明の範囲内で可能であることが理解されよう。
本文の記述、および(適当な場合に)請求の範囲および図面に開示された各特徴は、独立的に、あるいは適切な組合わせにおいて提供されよう。
エージェント資料第8−コンピュータ・システム、コンピュータ読取り可能な記憶媒体およびこれを動作させる方法、および前記システムを動作させる方法
本発明は、コンピュータ・システムおよびコンピュータ・システムを動作させる方法に関する。本発明は、コンピュータ・システムおよび割込みの処理のための方法に関することが望ましい。本発明は、仮想マシンおよび(または)多重スレッド環境に関する特定の(しかし、これに限定しない)用途を見出すものである。本発明の望ましい実施の形態は、ジャバで書かれたデバイス・ドライバ割込みハンドラを実行することに関する。
コンピュータ・システムにおける割込みハンドラは、CPUと、このCPUに接続された他の装置(通常は、ハードウエア品目)との間の通信を管理する方法として用いられる。CPUと装置は、デバイス・ドライバとして知られ特定の装置に一義的であるソフトウエアを介して相互に働く。用語「装置」は、キーボード、プリンタ、マウス、スキャナなどのようななじみのある品目、実際には任意の入出力装置を含む。
デバイス・ドライバ・ソフトウエアの実現においては、通常は装置の割込みがドライバ自体の内部のコードにより処理されることが要求される。
このような割込みを処理するためドライバの一部として書かれたコードは、通常はこれに課される著しい制約を有し、これは、このようなコードが、オペレーティング・システムにより提供される小さな固定サイズの別個のスタックを用いてほとんど任意の時点で主幹アプリケーションに関して実行されるゆえである。このため、オペレーティング・システムは割込みを直接処理する。
割込みの処理の確認されている問題に照らして、非ネイティブなソフトウエアを含むコンピュータ・システムの場合に、割込みハンドラが(ホストの)オペレーティング・システムにより提供される。割込みができるだけ速く処理されることが重要であり、従って、オペレーティング・システムは割込みを取扱うように選定される。このような手法には、共に非ネイティブ・システムが実際の割込みレベルから著しく隔てられるという事実から生じる2つの主な問題がある。第一に、非ネイティブなシステムが割込みを直接処理せず、非ネイティブ・システムが割込みについて知らされる前に、実際の割込みがホスト・システムによりすでに切離されているから、特殊な装置の処理(装置のレジスタから/への特殊な値の読出し/書込み)がもはや有効でないという問題が存在する。第二に、生じる実際の割込みと、これと関連して実際に実行する非ネイティブなコードとの間に実質的な長さの時間が経過してしまっている。
本発明の第1の特質によれば、ネイティブなオペレーティング・システムと非ネイティブなソフトウエアを含み、非ネイティブなソフトウエアが割込みを直接処理するように構成されるコンピュータ・システムが提供される。このため、(ホスト)オペレーティング・システムにより割込みが直接処理され非ネイティブなソフトウエアが後で生じている割込みについて知らされるのではなく、割込みが非ネイティブなソフトウエアにより同期的に処理される。非ネイティブなソフトウエアが翻訳された言語を含むことが望ましい。本発明の特に望ましい実施の形態においては、非ネイティブなソフトウエアがジャバ言語を含む。本発明はまた、ジャバに似た言語にも適用可能である。コンピュータ・システムは、仮想マシンとして構成されあるいは仮想マシンを実現することが望ましい。
本発明の第1の特質によれば、コンピュータ・システムを動作させる方法も提供され、コンピュータ・システムがネイティブなオペレーティング・システムと非ネイティブなソフトウエアを含み、割込みが非ネイティブなソフトウエアにより直接処理される。
望ましい実施の形態においては、本発明は、(本発明の多くの部分はたしかに他の翻訳言語にも同様に適用するが)非ネイティブ・ソフトウエアにおける、特にジャバにおけるその割込みハンドラを含むデバイス・ドライバの完全な実現に関する。
非ネイティブな言語、特にジャバの使用時には、割込みレベルにおいて色々な問題に遭遇する。例えば、ジャバ(および他の言語)は不要情報が収集された言語であるという事実が、割込みハンドラ・コードが、干渉することなくあるいはそれ自体をそれゆえに損なうことなく、不要部分の整理プロセスにおける任意の時点で良好に走るために必要であるという問題の複雑さを加える。上記および他の問題については、以下において更に詳細に論述される。
この問題の処理のため出願人が知る唯一の従来の堤案が、一般的な方法で割込みを処理した後に非割込みレベルで走る高い優先順位のジャバ・スレッドに対して生じる記事を送る前に廃棄した非翻訳言語(アセンブラまたはC)で実現されたそれ自身の専用の割込みハンドラを有する(ジャバの)仮想マシン(VM)に関与するものであった。
このような手法には、共に装置割込みを処理するよう書かれたジャバ・コードが実際の割込みレベルから著しく異なるという事実から生じる2つの主な問題があり、すなわち、第一に、問題となる装置のタイプに従って、処理する(装置レジスタから/へ特殊な値を読出す/書込む)特殊な装置はもはや必ずしも有効でないという問題である。実際の割込みはすでに見切られ、第二に、実際の割込みの発生とジャバ・コードの実際の実行との間には実質的な長さの時間が経過していることである。
ジャバは幾つかの規則に固執しなければならず、また割込みレベルにおいてジャバに特有の規則への固執があり得ることを保証するのは難しいため、割込みの処理のためジャバを使用することは実用的でないと考えられた。
例えば、コードの一部が待ち行列、挿入する動作および取出す動作を維持するため1つのコードにおいて動作しようとする同時の試みを阻止するためミューテックス(mutex)のようなセマフォーを必要とするときは、信号が取得されるまで動作が行われない。セマフォーは、割込みレベルでは取得できない。セマフォーが非割込みレベルですでに取得されていたならば、信頼し得る動作は割込みレベルでは不可能である。
ジャバ(および、他の翻訳言語)の場合にも、コード管理に問題がある。
従来技術における問題は、割込みをリアルタイムに処理できないことである。例えば、先に示した堤案においては、システムは正規のスレッドにおける割込みをできるだけ早く処理する要求を出すだけである。
しかし、このような解決法では非ネイティブな(ジャバ)コードが実際の割込みレベルで決して走らないという事実は、不要部分の整理における問題、すなわち先に示したことにおける問題を実質的に軽減する。
非ネイティブなコードを実際の割込みレベルで実際に走らせる問題に対する解決法は,下記の小さな問題のいずれか、あるいは一部、あるいはその全てにおいて、下記のように解決される小さな問題へ分解し、この解決法のいずれも任意の適切な方法で組合わせることができよう。
本発明の第2の特質によれば、を含む割込み処理方法を含むコンピュータ・システムが提供され、該方法においては、割込み処理方法の実行が最初の割込みに先立って開始されるようになされ、実行は待機中の状態へ進み、割込みが生じるときに再開させられる。この割込み処理法は、コンピュータ・システムの初期設定時に開始されるように構成されることが望ましい。
本発明の実施の一形態においては、非ネイティブなソフトウエアによって特殊な割込みハンドラ方法が提供される。割込みが生じると、当該方法が呼出される。この方法の呼出しと同時に、種々のステップ、例えば必要なスタックおよびフレームのセットアップが行われる必要がある。割込みが処理されると、当該方法が閉じられる。異なる方法を異なる割込み、すなわち異なるIRQに対して書込むこともでき、従って、各方法が適切な方法で特定の割込みを処理する。
本発明の第2の特質によれば、割込み方法はシステムのセットアップの一部として開かれることが望ましく、この方法は用意ができて、割込みが生じるときを待機する。このように割込みハンドラの実行は、従って割込みの処理を速くすることができる。このことは、非ネイティブな言語が翻訳言語である場合に特に重要である。解釈は、ネイティブな命令の実行と比較するとより遅い。割込みをできるだけ速く処理することが重要であるので、割込みがオペレーティング・システムにより処理されることが望ましいと考えられてきた。しかし、本発明の第2の特質によれば、非ネイティブなコードによる割込みの処理を、割込みが生じたときにいつでも使用できるスタックを提供することによって速くすることが可能である。このように、割込みを処理するための翻訳言語の使用に固有の実行速度の損失の少なくとも一部を避けることができる。
当該割込み処理方法は、待機状態に固執するスタックを開始時に生成するように構成されることが望ましい。割込み処理方法は、スタックが待機状態に固執するように恒久的にアクティブでない状態にされる実行スレッドを開始時に含むように構成されることが望ましい。このため、スタックを開くためのステップがすでにとられており、割込みが生じるとき直ちに割込みを処理することができる。
ある場合、例えばジャバが非ネイティブ言語として用いられる場合、スレッドを完全に破壊することが可能である。多くの場合、スレッドにより使用されるメモリを解放することができるので、このことが選好される。他の場合は、スレッドの破壊は可能ではない。スレッドは、割込みが生じるまで休止状態にある。
当該方法は、割込みが生じるときスタックを用いて制御の割込みフローを行うことによってスレッドが明らかに再活動化させられるように構成されることが望ましい。このような再活動化は、スタックを用いて制御の割込みフローを行う結果であることが望ましい。
制御の割込みフローは、割込み処理方法スレッドが再活動状態になったように見えるように、割込み処理方法のスタックへ切換わる。
当該割込み処理方法は、複数の異なる待機状態を含むことが望ましい。このため、本発明の第2の特質に従って、所与の装置に対する異なるタイプの割込みが1つの割込みハンドラ方法を用いて処理されることが可能である。
本発明の第2の特質はまた、割込みが生じるとき非ネイティブな割込みスレッドのスタックが切換えられるコンピュータ・システムをも提供する。この割込みスレッドのスタックは、ジャバ・スタックであることが望ましい。
非ネイティブな割込みスレッド・スタックがほぼ一杯であることが望ましい。
コンピュータ・システムは、仮想マシンとして構成され、あるいは仮想マシンを構成することが望ましい。
本発明の第2の特質のコンピュータ・システムは、本発明の第1の特質の特徴をも含むことが望ましい。
本発明の第2の特質は、コンピュータ・システムを動作させる方法をも提供することが望ましく、該方法は、最初の割込みに先立って割込み処理方法を開始することを含み、この方法の実行は待機へ進み、割込みが生じるときに再開する。
本発明の第2の特質は、コンピュータ・システムにおける割込みを処理する方法をも提供し、当該方法においては、割込み処理方法が待機状態において動作の半ばで終了させられてスタックを残す。この割込みハンドラ方法のスレッドは、望ましくは割込みが生じるときスタックを用いて制御の割込みフローを行うことにより明らかに再活動化されることが望ましい。本発明の望ましい実施の形態においては、割込みハンドラ方法が非ネイティブな割込み方法であり、望ましくはジャバ割込み方法である。
本発明は、その最も一般的な特質の1つにおいて、非ネイティブな(望ましくは、ジャバの)スレッド・スタックが準備完了状態に保持されて割込みが検出されるとき切換えられるのを待機するコンピュータ・システムまたはコンピュータ・システムを動作させる方法を含む。
割込みハンドラに対して用いられる翻訳言語の場合は、割込みが生じたときに割込みハンドラ方法が呼出されるならば、当該方法に入るとき大きなオーバーヘッドが生じることになる。
本発明は、その望ましい形態において、ソフトウエアVMの関連において存在し、本発明の重要な特徴は、システムまたは方法が非ネイティブな(望ましくは、ジャバの)バイト・コードを割込みレベルで走らせることである。
要約すると、問題が実際の割込みレベルが非ネイティブなバイト・コード実行エンジンによる使用に適さない小さな個々のOSによるスタックで走ることであることが判った。本発明の実施の形態は、正常な非ネイティブなスレッドのスタックが準備完了状態であり、割込みが生じるとき切換えられるのを待機している。
本発明は、第2の特質において、仮想マシンとして構成されたコンピュータ・システムにおけるデバイス・ドライバを実現する方法を提供し、当該方法は割込み呼出しが受取られる瞬間に走る容易ができた特殊な割込みスタックを備えることを含んでいる。
前項に述べたような本発明の望ましい実施の形態において、当該システムは、翻訳言語(例えば、ジャバ・コード)を走らせる用意ができている。1つの修正においては、前記の特殊な割込みスレッド・スタックは、割込みが生じるとき切換えられる通常の(ジャバ)スレッド・スタックである。
本発明はまた、デバイス・ドライバの割込みを実現する手段が設けられたコンピュータ・システムに拡張し、割込み呼出しが受取られる瞬間に走る用意のある特殊な割込みスタックを含む。
前項に述べたような本発明の望ましい形態においては、システムは、翻訳言語(例えば、ジャバ・コード)を走らせる用意がある。1つの修正においては、この特殊な割込みスレッド・スタックは、割込みが生じるときに切換えられる通常の(ジャバ)スレッド・スタックである。
当該システムは、割込みハンドラ方法が実行される間は潜在的にブロックする同期動作が行われないようなものであることが望ましい。
割込み処理中に潜在的にブロックする同期動作が行われないことが重要である。
本発明の第3の特質によれば、非ネイティブな割込みハンドラを有する割込みハンドラを含むコンピュータ・システムが提供され、当該システムは最初の割込みに先立って最初の実行アクティビティを実施する手段を含んでいる。
多くの場合、最初の実行アクティビティは、避けられないセマフォー(例えば、クラスのローディングにおいて用いられるもの)を含んでいる。割込みが生じる前に(例えば、システムの初期設定時に)このようなアクティビティを実施することにより、このようなセマフォーの使用を回避することができる。
割込みハンドラのコードは予め解かれている。このため、ミューテックス、例えばクラスの分解を不可避的に呼出すステップは、割込みレベルの処理が生じる前に実施することができる。割込みハンドラのコードは予めコンパイルされることが望ましい。
コンピュータ・システムは、仮想マシンとして構成されあるいは仮想マシンを実現することが望ましい。
本発明の第3の特質のコンピュータ・システムは、第1の特質および(または)第2の特質の特徴をも含むことが望ましい。
割込みを処理する方法が、割込み処理方法を実行している間は、潜在的にブロックする同期動作を行わないことを含むことが望ましい。
本発明の第3の特質によれば、非ネイティブな割込みハンドラ方法を用いてコンピュータ・システムにおける割込みを処理する方法が提供され、当該方法は最初の割込みに先立って最初の実行アクティビティを実施することを含む。
当該方法は、割込みハンドラ方法のコードを予め解くステップを含むことが望ましく、また割込みハンドラ方法のコードを予めコンパイルするステップを含むことが望ましい。
要約すると、バイト・コード実行エンジンは、割込みハンドラのバイト・コードを実行中は、潜在的にブロックする同期動作を試みてはならない。
本発明の第3の特質によれば、バイト・コード実行エンジンを介する通常のルートが潜在的にブロックする同期動作を持たないことが保証でき、このことはどんな性能の観点からも望ましい!更に、割込みハンドラのバイト・コードの性質が決してバイト・コード実行エンジンを介する通常ルート以外を要求しないことを保証することが望ましい。
本発明の第2の特質は、仮想マシンとして構成されあるいは仮想マシンを実現するコンピュータ・システムにおけるデバイス・ドライバ割込みを実現する方法をも提供し、当該方法は、前記割込みハンドラのバイト・コードを実行する間は、バイト・コード実行エンジンが潜在的にブロックする同期動作を試みることを阻止することを含む。
本発明の第2の特質は更に、デバイス・ドライバ割込みを実現する手段が設けられたコンピュータ・システムに拡張し、前記割込みハンドラのバイト・コードを実行する間は、バイト・コード実行エンジンが潜在的にブロックする同期動作を試みることを阻止する手段を含む。
本発明の第4の特質によれば、割込みハンドラとガーベッジ・コレクタとを含むコンピュータ・システムが提供され、該システムは割込みハンドラとガーベッジ・コレクタとの間の相互動作が阻止されるようなものである。
本発明の第4の特質は、特に不要部分の整理システムを備える非ネイティブなソフトウエアに適用する。
割込みレベルが例えばオブジェクトをガーベッジ・コレクタ(GC)がアクセスするヒープへ入れるならば、GCは、例えば、オブジェクトのGCを試みるかあるいは単にオブジェクトを調べるだけによりオブジェクトを変えることもできる。
割込みハンドラはオブジェクトを含み、この割込みハンドラのオブジェクトがガーベッジ・コレクタから切離されることが望ましい。割込みハンドラはヒープを含み、このヒープがガーベッジ・コレクタから切離されることが望ましい。このように、GCは、割込みハンドラに帰属するオブジェクトを変更あるいは収集することができない。
当該システムは更に、割込みハンドラによる以外に割込みハンドラのオブジェクトにおける参照フィールドの変更を阻止する手段を含むことが望ましい。このため、割込みハンドラは、非割込みレベルのスレッドによる干渉からも保護され得る。割込みレベルは、非割込みレベルのオブジェクトを直接変更しあるいはこれと接触することができないことが望ましい。このように、割込みレベルは非割込みレベルから完全に切離されることが望ましい。
コンピュータ・システムは、仮想マシンとして構成され、あるいは仮想マシンを実現することが望ましい。
本発明の第4の特質のコンピュータ・システムは、本発明の第1、第2、および(または)第3の特質のコンピュータ・システムの特徴をも含むことが望ましい。
本発明の第4の特質は、割込みハンドラとガーベッジ・コレクタとを含むコンピュータ・システムを動作させる方法をも提供し、該割込みハンドラとガーベッジ・コレクタとの間の相互動作が阻止される。
当該割込みハンドラ装置はオブジェクトを含むことが望ましく、割込みハンドラによる以外の割込みハンドラのオブジェクトにおける参照フィールドの変更が阻止される。
要約すると、バイト・コード実行エンジンは,非割込みレベルにおいて(おそらくは同時に)生じる不要部分の整理のいずれかの不要部分の整理相と干渉し得あるいはそのゆえに障害を生じ得るなにものも行ってはならない。このことは、割込みレベル・コードの不要部分が整理されたジャバ・ヒープの完全な柔軟性を否定することにより、望ましい実施の形態において達成することができる。
本発明は更に、仮想マシンとして構成されあるいは仮想マシンを実現するコンピュータ・システムにおけるデバイス・ドライバの割込みを実現する方法を提供し、当該方法は、バイト・コード実行エンジンが非割込みレベルにおける同時の不要部分の整理と干渉することを阻止することを含む。
本発明は更にまた、デバイス・ドライバの割込みを実現する手段が設けられたコンピュータ・システムに拡張し、バイト・コード実行エンジンが非割込みレベルにおける同時の不要部分の整理と干渉することを阻止する手段を含んでいる。
本発明の第5の特質は、仮想マシンとして構成されあるいは仮想マシンを実現するコンピュータ・システムを提供し、該システムは割込みレベルにおける非ネイティブな割込みハンドラを含み、該システムは割込みレベルからの情報が他のレベルへ移ることを可能にする手段を含んでいる。割込みレベルと非割込みレベルとの通信は必要であるが、割込みの処理における潜在的な干渉を避けるためには、割込みレベルが非割込みレベルへある情報を移すために特殊な手法を用いることが必要である。
当該システムは、割込みレベルから他のレベルへ情報を送るためネイティブな呼出しを用いる手段を含むことが望ましい。このように、情報は、割込みの処理中の擾乱のリスクを最小限に抑えながら、非割込みレベルへ送ることができる。
第5の特質のコンピュータ・システムは、第1、第2、第3、および(または)第4の特質のコンピュータ・システムの特徴を含むことが望ましい。
本発明の第5の特質は、割込みレベルにおける非ネイティブな割込みハンドラを含む仮想マシンとして構成されあるいは仮想マシンを実現するコンピュータ・システムを動作させる方法をも提供し、該方法は割込みレベルから他のレベルへ情報を移すことを含んでいる。
要約すると、第3および第4の特質の本発明は、割込みレベルのジャバと非割込みレベルのジャバとの間の通信は不可能ではないが難しいことを示すように見える。本発明の望ましい実施の形態においては、ジャバのアプリケーション・プログラマが情報を割込みレベルで走るジャバ・コードから他のアプリケーションへ移すことを可能にするため、特殊な機構が利用可能にされる。
これらの小さな問題が試みられ克服された方法については、特定の記述の後の項で説明される。
本発明は更に、仮想マシンとして構成されあるいは仮想マシンを実現するコンピュータ・システムにおけるデバイス・ドライバ割込みを実現する方法を提供し、該方法は、割込みレベルで走る(ジャバ)コードからの情報が残りのアプリケーションへ移ることを可能にすることを含んでいる。
本発明は、割込みハンドラのコードが干渉することなく不要部分の整理プロセスの任意の点において良好に走ることを可能にするという利点を有する。
本発明は更にまた、デバイス・ドライバの割込みを実現する手段が設けられたコンピュータ・システムに拡張し、割込みレベルで走る(ジャバ)コードからの情報が残りのアプリケーションへ移ることを可能にする手段を含んでいる。
本発明は、割込みハンドラのコードが干渉することなく不要部分の整理プロセスにおける任意の点で良好に走ることを可能にするという利点を有する。
本発明はまた、本発明の上記特質のいずれかに従って方法を実施するようプログラムされたコンピュータを提供する。
本発明はまた、本発明の第1、第2、第3、第4、および(または)第5の特質の方法を実施するプログラムが記録されたコンピュータ読取り可能な記憶媒体を提供する。
本発明の実施の形態については、入水に事例として次に記述する。適切な場合に、(上記の改善を略図的に示す)添付図面を参照する。
背景として、図8Aに示されるPC形態のコンピュータ・システムにおいては、CPU18102およびその関連するRAM18104が、プログラム割込みコントローラすなわちPIC回路として知られる(通常は)2つの回路ブロック18106、18108の第1のブロック18106に電気的に接続されている。各PICは、電気的接続が行われる合計8つの端子すなわちピンを有する。これまでは、第1のPIC18106の第2のピンが第2のPIC18108の入力に接続されている。PIC18106の残りの7ピンにPIC18108の8ピンを加えたもの、すなわち全てで15ピンが、先に述べたような更に他の装置における電気的接続のため利用可能である。
装置が接続されるピン数は、そのアイデンティティとなり、むしろそのIRQ番号となる。従って、第5のピンに接続されたキーボードは、IRQ=5ラベルを持つことになる。CPUが(例えば)ピン5で信号を受取るとき、リストにおける対応コード・アドレスを活動状態にできるように、CPUは、15の割込みレベルのコード・アドレスのリスト18110と通信する。
PIC信号をCPUに接続する線における電圧を上げることにより、PICがCPUに対して信号する。ある場合には、各文字が対応する装置へ送られた後に、このような信号がCPUへ送られる。CPUが、例えばドキュメント全体またはテキストのページの印刷ではなく、その時のジョブ、すなわちCPUが作業しているマシン命令をいったん終了すると、CPUは割込み信号に応答して、例えば装置へ送られる次の文字に対して適切な動作を行うため対応する装置のアドレスを活動状態にする。
従って、CPUからのアテンションの要求を割込み数が非常に大きくなり得ること、およびこれらを管理する良い方法が前記CPUを含むPCの有効な動作のために不可欠であることが容易に理解できる。ある事例においては、高い優先順位を持つジョブの部分が割込みによる干渉から保護されることが必要である。このような場合は、処理されるコードの部分は、コードのこの部分の終りの「割込みセット」すなわちSTIコードに達するまで割込みが確認されることを阻止する「割込みクリヤ」すなわちCLI命令により先行される。このような保護を強化するために、CPUは、割込みがCPUにすでに生じるプロセスと干渉するかも知れないリスクを更に減じるように、物理的に別の割込みスタックへ切換わる。
CPUとPCにおける(例えば)COMポートを介して接続される装置との間の通信が一般にプロセッサ速度と比較して中程度の速度で生じることを念頭に置くと、通信は遅い。CPUが装置に対して主幹線呼出しを行うとき、CPUはこれを装置へ書込み、呼出しの最初の文字をとってこれをCOMポートのハードウエアへ書込む。次に、CPUはこれが行っていたジョブ、例えばワード・プロセッシング・パッケージにおけるドキュメントを再取得するジョブへ戻る。
割込みが受取られてCPUがどの装置が割込みを行ったかおよびCPUが応答して行うべきことを確定すると、CPUはその時のプロセスから離れて割込みを処理させるのに充分なデータを記憶する。記憶されたリストは、CPUが例えば「割込みコードがいつ到達するとき、Xへ行く」ことを可能にするスタート・アドレスを含む。但し、「X」は割込みに対する適切な応答を表わす。明らかに、割込みハンドラは、割込みが到達したとき、CPUの状態を知らず、従ってハンドラを処理データから分ける先に述べた必要を知らない。
割込みリターン(IRET)・コードは、割込みが完了したこと、およびCPUが割込み前に動作していたプロセスへの戻りを行うことをCPUへ知らせるため割込みの終りに置かれる。
仮想マシンは、1つのオペレーティング・システムに対して書込まれたソフトウエアが別のオペレーティング・システムで走ることを許容し、従ってこのソフトウエアは「非ネイティブな」ソフトウエアと呼ばれる。非ネイティブなソフトウエアを走らせるためには、仮想マシンはソフトウエアが書込まれたオペレーティング・システムの動作をエミュレートする。仮想マシンは、非ネイティブ・ソフトウエアの命令をホスト・オペレーティング・システムにより走らせることができるネイティブな命令へ翻訳する。従来のエミュレータは、実行中に非ネイティブな命令を翻訳することにより働く。
どの実行パス、すなわち「スレッド」は、これと関連するスタックを有する。スタックは、一時的なレジスタ情報とサブルーチンのリターン・アドレスとからなるフレームを格納する記憶域である。
これまで、デバイス・ドライバが書かれる言語について特に付言しなかった。望ましい実施の形態では、これらのドライバはジャバにおけるものであり、本項の残りはそれだけではないが、特にジャバまたは他の翻訳言語におけるデバイス・ドライバの実現により生じる問題の解決に関するものである。
先に述べた問題がどのように解決されたかについての詳細は、下記のとおりである。
公知の堤案では、実際の割込みレベルは、ジャバのバイト・コード実行エンジンによる使用には適さない小さな別個のOSで提供されるスタックにおいて走る。本発明の望ましい実施の形態は、通常のジャバ・スレッドのスタックが準備完了の状態で割込みが生じるときに切換えられるのを待機しており、これは、特殊なネイティブな方法、waitForFirstInterruptにおける呼出しによりジャバ・アプリケーション・スタートアップ・コードの一部として生成された通常のジャバ・スレッドを部分的に自らを部分的に破壊したことによって達成される。
要約すると、割込みハンドラ方法を下記のように全体的に表わすことができる。すなわち、
Figure 2010267291
第2の線while(true)は無限ループを実行する。「waitForFirstInterrupt」の上流側は、別のスタックを持つ実際のジャバ・スレッドおよび実際のオペレーティング・システム(OS)スレッドである。割込みハンドラ・ジャバ・スレッドおよびその関連するスタックは、システムの初期設定において形成される。当該方法は、割込みが生じるまでwaitForFirstInterruptを待機し、OSに関する限り、スレッドが終了されるがスタック自体が存続する。このスタックは、有効に準備完了状態にあり、割込みが生じるとただちに動作することを待機する。最初の割込みが生じると、制御の割込みフローは終了されたスレッドのスタックを用いて割込みを提供する。割込みが処理された後、割込みハンドラ方法が再び休止状態になり、この時別の割込みが生じるまでwaitForFirstInterruptにある。
イベントのシーケンスおよび対応する擬似コードの更に完全な説明が、図8Bおよび図8Cに関してそれぞれ与えられる。
図8Bは割込みの処理において呼出された種々のシステム構成要素に対するイベントシーケンスを示し、図8Cは、興味のある事例とするために2つの動作モード、すなわち同期および非同期のモードを持つものと見なされる仮想的な装置のデバイス・ドライバからのジャバ割込みハンドラの対応する擬似コードの概要である。
初めに、パワーアップ時に、主デバイス・ドライバのスレッドが新たな割込みハンドラ・スレッド(図のF18/02)を要求して登録する。これに応答して、具現された仮想マシン(EVM)割込みハンドラのエントリ点が、EVMのネイティブ・コードを介してリアルタイム・オペレーティング・システム(RTOS)割込処理サービスで登録される。次に新たなスレッドが始動され、擬似コードにおける行「waitForFirstInterrupt」(図8C)に達する点まで走る。むしろ、スタックは関連する割込みと関連させられ、RTOSスレッドのない状態「limbo」へ進み、ジャバのスレッドが方法の途中で終了される位置から後で活動状態にされるのを待機する。
ある時間後に、主デバイス・ドライバのスレッドが、後で割込みを生じさせ、本発明を具現するネイティブ・コードを呼出すためRTOSへ信号を生じる装置(図8Bでは、ハードウエア列に示される)へ入出力(I/O)命令を発する。次に、EVMネイティブ・コードが休止状態のジャバ・スタックへ切換わって戻りを生じる。ここから、ジャバ命令ハンドラ・コードが走り続けるが、このコードはあたかも元のスレッド内で続いていたかのように外からは見える。割込みがいったん処理されると、割込みハンドラ方法は、waitForInterruptにおいてなされた呼出しで終了し、制御は再びRTOSスタックへ切換わって戻る。RTOSがハードウエア割込み(IRET)を終え、割込みが終了される。ループは図8Bの主デバイス・ドライバ・スレッド列における「I/Oの発行」ブロックの初頭へ戻り、装置に対する新たな命令が開始されるときこのシーケンスを再び始める。このループは、図8Bの主デバイス・ドライバ・スレッドにおけるフィードバック「lop forever」により無限となる。
割込みハンドラのジャバ方法がすでに「アクティブ」でありかつ割込みが生じると直ちに実行する用意があるので、より速い実行が可能である。
図8Cに示された擬似コードは、先に述べたように、図8Bの時間線に示されたイベントのシーケンスが判りさえすれば、全く自明である。しかし、図8Cが同期および非同期のモードに対する特定の規定を行うものであることが判るであろう。しかし、これは、モードを示すルーチン・コードがないため、割込みが生じるごとにシステムがどのモードが動作しているか確定しなければならないという結果を生じる。
多くの呼出しサイトが存在する場合に図8Cにおけるようなコードの使用によって、ハンドラが関連する点において割込みハンドラ方法のコードへ入りこみ得、かつ次に呼出しが生じるとき、このハンドラが別の場所に入りこみ得る。このことは、方法が開かれる用意ができておらず割込みが生じるとき呼出しが存在するときに開かれる代替的な実施の形態と対照されるべきである。このような方法は比較的遅いばかりでなく、実行がつねにコードの頭で開始するので、このような特徴はあり得ない。同期/非同期の質問の処理のためには、異なるループを用いられ得る。
図の18/03の事例においては、装置は2つの特殊な状態、すなわち非同期と同期の状態を有する。例えば、プロッタ装置は、絶対的と相対的の2つのモードを有し、各モードにより要求される割込みの異なる処理を有する。
方法「waitForFirstInterrupt」は、望ましい実施の形態のジャバ・VMの割込み処理機構の重要な特徴である。これは、スタックとは別に(このスタックは、ジャバ・アプリケーションにおけるwaitForFirstInterruptに対する特定の呼出しが行われた場所のみに関する情報を含んでいる)、任意のO/Sと関連するスレッドを(可能な場合に)破壊し、このスタックの場所は、特定の装置または割込みに関して後で使用されるインシニア・ジャバ・VMの割込み処理機構が登録される。
要約すると、最初の割込みが関連する装置から受取られると、オペレーティング・システムがインシニア・ジャバ・VMの割込み処理機構の割込みハンドラに入り、−これがスタックを先に予約されていた関連するジャバ・スタックへ切換え、次いでネイティブな方法戻しシーケンスを実行することになり、このシーケンスはつねに、(スタックに記録された如き)ネイティブな方法に続く場所でジャバ実行エンジンを再開する。
この時、バイト・コード実行エンジンがO/S割込みレベルでジャバ・バイト・コードを実行しており、このことが、ブロックするスレッド同期動作は試みないようなバイト・コードを実行している間、種々の制約をバイト・コード実行エンジンに課し、非割込みレベルで(おそらくは、同時に)生じるどのような不要部分の整理の段階のゆえに干渉しあるいは障害を生じ得ることは何も行わず、これらの小さな問題は後で述べる。
この時、このような解決法がどこかに述べたダイナミック(あるいはオフラインの事前)コンパイル手法と完全に互換であることは注意に値する。参照されるバイト・コードが高速実行のためマシン・コードへコンパイルされることは全くあり得ることで、バイト・コード単位の翻訳のためのインタプリタが存在するかあるいはこれを選択するならば、ネイティブな方法戻し機構がマシン・コード・バージョンを選定することになる。
割込みハンドラのジャバ・コードが、i)装置の特定仕様および生じた割込みタイプに適するものとしてインシニア・ハードウエア・アクセス・ジャバ・パッケージの一部として提供されるネイティブな方法を用いる装置と相互動作したとき、およびii)適切なものとしてインシニア割込み処理パッケージにおけるネイティブな方法の使用により装置(すなわち、アプリケーションの非割込み部分)と関与したジャバ・アプリケーションの残部と相互動作したとき、このハンドラは通常の非割込みコードの実行が継続することを許容しなければならない。これは、別の特殊なネイティブな方法「waitForInterrupt」(前述の「waitForFirstInterrupt」とは対照的に)の呼出しによって達成される。
このネイティブな方法「waitForInterrupt」は、別の割込みによりジャバ・スタックを以降の活性化のため準備完了状態にし、次いでO/Sの小さな専用割込みスタックへ再び切換わり、次に特定のO/Sに適する戻りを行い、割込みのない実行へ戻るのに必要な動作を行わせる。
ジャバにおける割込みハンドラの使用の結果として生じる個々の問題については、次に更に詳細に論述する。
第一に、先に述べたように、バイト・コード実行エンジンは、割込みハンドラのバイト・コードを実行中に任意の潜在的にブロックする同期動作を試みてはならない。
スレッドを同期させるためセマフォーが用いられる。例えば、多重スレッド環境における下記の状況を考察しよう。非割込みスレッドが、セマフォーを取得した動作を開始する。この非割込みスレッドは、割込みが呼出されるとき動作途上である。制御が割込みスレッドへ切換わる。割込みがつねに優先順位で取扱われるので、制御はその後、割込みが処理されるまで割込みスレッドから切換わることがない。
割込みハンドラが非割込みスレッドにより実施されている動作を実施する必要がある場合は、非割込みスレッドがセマフォーを解放するまで割込みスレッドが動作に入ることができず、また割込みが処理されるまでは割込みスレッドが走ることができないため、問題が生じる。
このように、割込み方法が実行中である間はブロッキング呼出しが避けられねばならないことが判る。
従って、バイト・コード実行エンジンを介する通常のルートが潜在的にブロックする同期動作を持たないこと─このことは性能の観点から望ましい─を保証することが重要である。更に、割込みハンドラのバイト・コードの性質がバイト・コード実行エンジンを介する通常のルート以外を決して要求しないことを確認しよう。このため、割込みレベルで使用できる全てのパスを知り、ブロッキング呼出しがないことを確認する。特定の方法に対するネイティブな呼出し(以下参照)もまた、非割込みレベルと通信するときブロッキング呼出しがないことの要求の問題を克服するために用いることができる。
(更に一般的な翻訳言語とは対照的に)ジャバの場合は、このような後者の点は、一定のプール・エントリが予め解決されねばならないことを意味する(一定のプール解決法は、最初に特定のバイト・コードが実行されるときに通常生じるプロセスであり、多くの潜在的にブロックする同期動作およびI/O動作を結果として生じ得るプロセスである)。
実質的に、ヒープ、ミューテックス、あるいは同期動作のいずれも安全に使用することができない。ジャバは、同期を使用する2つの方法を持ち、すなわち、(1)同期したキーワードを用いること、あるいは(2)それ自体が同期されるものと宣言される方法を用いることによる。ブロッキング呼出しがないことを確認する負担は、ジャバ・コードの作者にかかる。例えば、コンパイラがソース・ファイルをジャバ拡張版(すなわち、 ジャバ)を用いてコンパイルするとき、これがクラスを作成する。これらのクラスにおける参照がランタイムにおいて従われ、2回目および以降の遭遇時にプロセスを反復する必要がないように関連情報が取得される、などである。その結果、先に述べたように、割込みジャバ・バイト・コードが予め解明されねばならない。
望ましい実施の形態においては、割込みハンドラのジャバ・バイト・コードは、予めコンパイルされる(ダイナミック・コンパイル・システムが当然のこととして何らかの潜在的にブロッキングする同期動作を行うためインタプリタを必要としなければ、これは厳密には必要でないが)。
ブロッキング呼出しが初めから使用される2つのタイプの状況が生じる。
制御のフローが通常の実行パスに従う安定状態の場合は、割込みハンドラにより遭遇され取得され得るセマフォーを含まないようにコードが書かれる必要がある。このため、このような通常の制御パスの場合は、ブロッキング呼出しが使用されてはならない。
特殊な状況は、コードが最初に遭遇され実行される場合を含む。このような場合では、セマフォーを要求する動作、例えばクラスのローディングが必要とされる。このような動作では、セマフォーが不可欠である。このため、セマフォーが割込みレベルで使用できないので、最初の割込みに遭遇する前に必要な全てのクラスがすでにロードされているように、このようなコードが予め分解される。
このような事前分解は、非ネイティブな割込みハンドラ・コードのコードの事前コンパイルを含む。事前分解は、始動時に行われるか、あるいはシステムの構築中に行われる。
第二に、バイト・コード実行エンジンは、非割込みレベルで(おそらくは、同時に)生じる不要部分の整理相のゆえに干渉しあるいは障害を生じ得る割込みレベルでは何もしてはならない。望ましい実施の形態においては、これは、割込みレベル・コードの不要部分が整理されたジャバ・ヒープの完全な柔軟性を否定することによって、下記のように基本的に達成される。すなわち、
割込みハンドラを含む特別なジャバ・スレッドは、(特殊なネイティブな方法、waitForFirstInterruptをクロックす前に)その始動相の一部としてオブジェクトを割付けることが許容され、これらオブジェクトはシステムの全寿命だけ保つ(これらは決してガーベッジとして廃棄されない)。ジャバ・スレッドが正規であることを止める(先に述べたように、割込みレベルで使用されるまさにスタックとなる)とき、このようなヒープ・オブジェクトの組は、割込みレベルのジャバ・コードが見ることができるヒープ・オブジェクトのみの組となり、このように、当該オブジェクトの組は不要部分の整理アクティビティとは独立するジャバ・ヒープにおける固定された存在であり、このように、割込みレベル・コードがそれ自体のオブジェクトの組のみを処理するゆえに、非割込みレベルで走るガーベッジ・コレクタが割込みレベルのジャバ・コードが決してその動作と干渉し得ない(あるいは、その逆)という確信において存続し得る。
非割込みジャバ・コードが割込みジャバ・オブジェクトに対する参照を知ることが許される。割込みジャバ・コードが見える割込みオブジェクトに対する非割込みジャバ・オブジェクトへの参照を格納する機会としてこれを使用してはならないという厳密なタイミングがある。割込みジャバ・コードは、非割込みジャバ・オブジェクトに対する参照を知ることは許されない。
このようなポリシーが犯されないことを保証するため、VMの開発時に取締まり機構を組込むことができる。例えば、非割込みレベルのジャバが何かを割込みレベルのジャバ・オブジェクトに格納することを阻止する機構を組込むことができる。
先に示したように、GCを割込みレベルから分離することが重要である。割込みが終ると、GCはシステムのどこか別の場所にあり得る。例えば、GCがセマフォーを取得したならば、このことが先に述べたように割込みレベルにおける問題をもたらすことがある。
更に、割込みハンドラが非割込みオブジェクトを変更することができるものとすれば、ハンドラがGCにより削除のためすでにマークされたオブジェクトに何かを書込むかも知れず、あるいはGCシステムを混乱させることになるオブジェクトを変更するかも知れない。
このように、割込みレベルのオブジェクトの割付けは、メモリの別の部分からなされ、これらはGCからは切離されている。
更に、割込みハンドラは、非割込みオブジェクトを変更しようと試みることができないようにこれらオブジェクトを知ることができない。このことは、例えば、割込みが生じたときGCが移動の途中であったオブジェクトを割込みハンドラが変更しようとしたならば、問題を生じるおそれがある。
第三に、最後の2つの問題の解決は、割込みレベルのジャバと非割込みレベルのジャバとの間の通信が不可能でなくとも難しいことを示すように思われる。本発明の望ましい実施の形態においては、ジャバ・アプリケーション・プログラマが割込みレベルで走るジャバ・コードからアプリケーションの残部へ情報を移すこと可能にするため、特殊な機構が利用可能にされる。
ブロッキング呼出および新たなオブジェクトを作ることがともにできるだけ避けるべきであるから、割込みレベルのジャバ・コードはどのようにアプリケーションの残部と通信するのだろうか?
通常は「wait」および「notify」が用いられるが、本文のコンテキストではジャバ・オブジェクトにおける同期を必要とすることになろう。しかし、(例えば、オブジェクト0=新たなオブジェクト(0)であり、コードが待機および通知に対して同期される(0)場合における)同期が割込みには許されないことを前に述べた。従って、ジャバ・方法における呼出しのように見えるがC言語またはアセンブラ言語で書かれる独自のネイティブな方法を提供する。
ネイティブな方法は、情報を割込みレベルから非割込みレベルへ移すことを許し、これが非割込みコードを実際のネイティブ方法における呼出し中に中断させ、割込みが完了して関連する書込み方法(図8CにおけるSpecialChannel.write)における呼出しを行ったとき働くことを許す割込みパッケージの一部として提供される。
このSpecialChannel.writeは、SpecialChannel.writeのネイティブ・方法の仮想的な呼出しである。このため、Cのオペレーティング・システムの場合は、Cのファンクションが書込み方法を実行するため呼出される。次に、Cのネイティブ方法が、メッセージを対応する「実際の」ネイティブ方法へ非割込みレベルで送出する。非割込み割込み方法は、中断されて「読出し」を待機する。このように、割込みレベルは、ブロッキング呼出しが要求されることなく、非ネイティブ・コードの非割込みレベルと通信することができる。
図8Dは、本発明の実施の形態を実施するための装置を示している。この装置は、ハードウエア18000(割込みを生じる)と、リアルタイム・オペレーティング・システム18002と、関連するEVMネイティブ・コード装置18004とを含む。装置は更に、ハードウエア18000に対してI/Oを発行することができるジャバの主デバイス・ドライバ18006を含む。EVMのネイティブ・コード装置18004は、ジャバ割込みハンドラ18008に接続される。装置のこれら構成要素の相互動作については、図8Bに関して記述する。
当該装置はまた、ガーベッジ・コレクタ18010を含んでいる。ガーベッジ・コレクタ18010がジャバの主デバイス・ドライバ18006と別のジャバ・スレッド18012とにアクセスするが、ガーベッジ・コレクタ18010から隔離されるオブジェクト18016とヒープ18014とを含むジャバ割込みハンドラ18008にはアクセスしないことが判る。割込みハンドラ18008はまた、スタック18018も含んでいる。ネイティブな呼出しは、割込みハンドラからOS(18004、18002)から非割込みレベル18006、18012へ行うことができる。
上記のいずれかあるいは全てにおいて、本発明の幾つかの特徴がコンピュータ・ソフトウエアを用いて実現された。しかし、無論当業者には、これらの特徴のいずれもハードウエアまたはハードウエアとソフトウエアの組合わせを用いて実現できることが明らかであろう。更に、ハードウエア、コンピュータ・ソフトウエアなどにより行われるファンクションが電気信号などを用いて行われることが容易に理解されよう。
情報の記憶に関する特徴は、適切な記憶場所またはストアにより実現されよう。情報の処理に関する特徴は、適切なプロセッサまたは制御手段によってソフトウエアまたはハードウエアにおいて、あるいは両者の組合わせにおいて実現されよう。
上記のいずれかあるいは全てにおいて、本発明は、下記の形態のいずれか、あるいは一部、あるいはその全てにおいて具現され、コンピュータ・システムを動作させる方法において具現され、コンピュータ・システム自体において具現され、コンピュータ・システムを動作させる方法を実行するようプログラムされあるいは構成されるときコンピュータ・システムにおいて具現され、および(または)コンピュータ・システムを動作させる方法に従って動作するためのプログラムが記録されたコンピュータ読取り可能な記憶媒体において具現されよう。
本文に用いられるように、用語「コンピュータ・システム」は、「コンピュータ」、「システム」、「装備」、「装置」、「マシン」などと互換である。コンピュータ・システムは、仮想マシンであり得、あるいは仮想マシンを含み得る。
上記のいずれかあるいは全てにおいて、方法および装置の特徴および特質を含む先に述べた異なる特徴および特質は、任意の適切な方法で組合わせることができる。
本発明が、純粋に事例として記述され、細部の修正が本発明の範囲ないで可能であることが理解されよう。
本文の記述、および(適切な場合に)請求の範囲および図面において開示された各特徴は、独立的に、あるいは適切な組合わせにおいて提供されよう。
エージェント資料第9−コンピュータ・システム、コンピュータ読取り可能な記憶媒体および同媒体を動作させる方法、および前記システムを動作させる方法
本発明は、コンピュータ・システムに関し、コンピュータ・システムを動作させる方法に関する。特に、本発明は望ましくは、コンピュータ・システムに関し、オブジェクト指向プログラムを含むコンピュータ・システムを動作させる方法に関する。望ましい実施の形態においては、本発明は、ファイナルでないインスタンス方法の直接的な呼出しを可能にするクラス・ローダの使用に関する。
本発明は望ましくは、問題となるオブジェクトのクラスが仮想マシンにより動的にロードおよび(または)発見されるオブジェクト指向(OO)プログラムを実行する仮想マシン(VM)に関する。本発明は特に、例えば仮想マシンを動的にコンパイルする際にクラスの潜在的にポリモルフィック(polymorphic)な方法がポリモルフィックでないと安全に仮定することができる、一部の最適化が実施可能である仮想マシンに適用する。
本発明は、方法の継承(inheritance)に関し、「方法」は、既に述べたように、例えば円の「面積」のようなファンクション、および「再生」、「点灯」などのような他の任意のファンクションに対するジャバその他のプログラミング言語における用語である。
ファイナルでないインスタンス「方法」の直接的な呼出しを許容するクラス・ローダの使用に関する本願の部分において、「方法」(大文字「M」を付す)は、プログラミング言語の方法に関して用いられ(また、「ファンクション」および「ルーチン」を含む他の用語によっても、これに限定されないが知られる)、用語「方法」(小文字「m」を付す)は、(前後関係から他の意味が明らかである場合を除き)本発明を実施する手順に関して用いられる。
従来のシステムおよび方法(M)において、所与のネームの方法(M)に対する呼出しは、方法(M)と名付けられた多くの異なる構成の1つを1つのオブジェクトが関心を持たれるもの(例えば、ビデオ・レコーダ、テープ・レコーダなどにおける「再生」ファンクション)に従って実行させる。これは、「ポリモルフィックな呼出し」と呼ばれる。このような状況においては、オブジェクトに従って異なるようにコンパイルする。これらの問題のゆえに、目的の方法(M)について仮定を行わず、従ってこれを最適以下に呼出しをコンパイルしなければならない。
ジャバは、非常にオブジェクト指向的である言語の一例であり、ジャバは単一の継承を許容する。他の言語、例えばC++は多くの継承を許容する。継承は、ポリモルフィズムを導く。
オブジェクト指向環境においては、方法(M)は、方法(M)の多くの異なる構成がシステムにおいて利用可能であるならば、ポリモルフィックであると言われ、使用される構成は方法(M)が呼出される各点およびプログラムの実行時に呼出し点に達するごとにおいて選定される。このような状況は、典型的に、継承によりオブジェクト指向システムにおいて起生し、これによりクラス(あるクラスのインスタンスにおいて呼出され得る方法(M)を含むあるタイプのオブジェクトの記述)が以降のクラスに対するベースと見なされる。このような新たなクラスは、スーパークラスと呼ばれる元のクラスのサブクラスと呼ばれ、スーパークラスの全ての特質(方法(M)を含む)を継承すると言われる。しかし、新しいサブクラスは、スーパークラスから継承された方法(M)の一部または全てをオーバーライドし得、これら方法(M)のそれ自体の構成を提供し、これらのオーバーライドされた方法(M)はポリモルフィックであり、これらのオーバーライドされた方法(M)の1つが呼出される場合に用いられるように選択される構成は呼出が関連させられるオブジェクトのクラスにより支配される。
例えば、単一のネームを付した方法(M)は、クラスの階層において何度も現われ、ネームを付した方法(M)の各外観は方法(M)の異なる構成に対応し得る。走らせられる実際の方法(M)は、ネームを付した方法(M)に関するオブジェクトに依存することになる。
方法(M)のクラスまたは方法(M)の一部がコンパイルされた形態に変換された後のある時点に発見および(または)ロードされるクラスにより影響をシステムが受け得る状況に対する1つの試みは、動的な機構により呼出される方法(M)についてのコンパイル・バージョンにおいて仮定を行わないことである。ジャバの環境においては、方法(M)は、これら方法を以降のサブクラスにおいてオーバーライドすることが違法であることを意味する「ファイナル」とマークすることができる。これは、どの方法(M)の構成が呼出されているについて仮定を行うことを許容するが、典型的なジャバ・クラスにおける方法(M)の大部分は柔軟性を理由としてそのようにマークされない。
上記の試みは働くシステムを生じるが、方法(M)が(方法(M)に対する呼出しのコンパイルが試みられる時にポリモルフィックでなければ)非ポリモルフィックのままである場合が通常の使用において優勢であると見えるので、潜在的に多数の最適化の機会が失われる。しかし、この方法(M)がポリモルフィックでないという仮定が行われると、仮定が新たなクラスがシステムへロードされるゆえに偽であると後で見出されるならば、システムは問題となるように走る。
本発明の1つの特質においては、システムを最適化する問題に対する解決法は、その時ロードされたクラスの組に対して最適化することを目的とする。本発明の第2の特質において、前にロードされたクラスのある方法(M)をオーバーライドする別の組がロードされると、最適化が新たなクラスがオーバーライドする方法(M)に対する呼出しに対して変更され、すなわち方法(M)がポリモルフィックであることを発見すると、戻って特定の最適化の仮定を取り消す。
本発明の第1の特質によれば、潜在的にポリモルフィックである方法(M)に対する呼出しを含むコードをコンパイルする方法が提供され、この方法は方法(M)がポリモルフィックでないという仮定に基いてコードをコンパイルすることを含む。
オブジェクト指向プログラムにおいては、方法(M)はポリモルフィックである可能性を有するが、実際には非ポリモルフィックである。方法(M)が非ポリモルフィックであるという仮定を行うことにより、種々の最適化がコードのコンパイルにおいてなされ、これは例えばコンパイル・コードにより占有されるメモリ量の低減およびコンパイル・コードのより速い実行を生じる。
方法(M)が非ポリモルフィックであるという仮定がなされると、方法(M)が「仮定されたファイナル」としてマークされることが望ましい。
コンパイルは方法(M)に対する呼出しの最適化を含むことが望ましい。
本発明の第1の特質の実施の一形態においては、最適化は、インライニングを含む。特に、呼出される方法(M)の1つの構成のインライニングがあることが望ましい。以下に更に詳細に述べるように、呼出される方法(M)は、コードの各部間のジャンプがコードの実行時に少なくて済みフレームの生成コストがなくなるように、方法(M)の呼出しを含むコードと一致するようにコンパイル時に移動される。このことは、コンパイル・コードのより速い実行を招来する。
本発明の第1の特質の代替的な実施の形態においては、最適化はパッチの形成を含む。方法(M)がポリモルフィックでないという仮定がなされる場合、方法(M)を呼出すコンパイル・コードと方法(M)のコンパイル・コードとの間にパッチが形成される。パッチの形成については、「エージェント資料第14」とタイトルを付した本発明に関して本文に更に詳細に論述される。
先に示したように、方法(M)がそれに対する呼出しのコンパイル時にポリモルフィックでない場合、大半の場合に方法(M)がポリモルフィックでないままであることがしばしば発見される。しかし、仮定が偽であることが見出される幾つかの場合が生じる。例えば、ロードされる新たなクラスは、先にポリモルフィックでないと仮定された方法(M)の新たなインスタンスを含む新たなサブクラスを含み得る。
当該方法は、この仮定がなされたならば、マーカを生成するステップを更に含むことが望ましい。マーカは、ポリモルフィックでないと仮定された方法(M)と関連することが望ましく、またマーカがポリモルフィックでないと仮定された方法(M)ののデータ構造で作られることが望ましい。
方法(M)がポリモルフィックでないという仮定がなされたことを示すマーカを生成することにより、オーバーライドされるべき仮定がなされたかどうかを調べるため検査を行うことができる。このようなサーチは、新たなクラス、特に新たなサブクラスがシステムへロードされるときに行われることが望ましい。
コードが主パスの断片であることが望ましい。コンパイラは、コードの主パス断片のみをコンパイルするよう構成されることが望ましい。コンパイラの望ましい特徴の論議および主パスの断片のコンパイルの方法については、本明細書の項「エージェント資料第1」を参照されたい。コードの主パスの断片をコンパイルすることによって、頻繁に実行される断片のみがコンパイルされ、これによりコードの頻繁に実行されるセクションのコンパイルにより要する時間およびメモリを低減する。
コードが望ましくはジャバであるオブジェクト指向言語のコードであることが望ましい。
本発明の第1の特質は、コンピュータ・システムを動作させる方法をも提供し、該方法は先に述べたようにコードをコンパイルする方法を含んでいる。
本発明の第1の特質は、コードをコンパイルするコンパイラを含むコンピュータ・システムをも提供し、コンパイラは潜在的にポリモルフィックである方法(M)に対する呼出しを含むコードをコンパイルするとき、コンパイラが方法(M)がポリモルフィックでないという仮定に基くコードをコンパイルするように構成される。
方法(M)がポリモルフィックでないという仮定がなされるならば、当該システムは、方法(M)を「仮定されたファイナル」としてマークする手段を含むことが望ましい。コンパイル・システムは、方法(M)を「仮定されたファイナル」としてマークすることが望ましい。このマーキングは、コンパイラ・マネージャによって行われる。
コンパイラは、方法(M)に対する呼出しを最適化する手段を含むことが望ましい。このコンパイラは、方法(M)とインラインとなるよう、あるいは方法(M)に対するパッチを生じるように構成されることが望ましい。
当該システムは更に、前記仮定がなされたならば、マーカを生成する手段を含むことが望ましい。マーカはコンパイル・システムにより、望ましくはコンパイラ・マネージャによって生成されることが望ましい。
当該コードは、オブジェクト指向言語、望ましくはジャバのコードであることが望ましい。
本発明の第1の特質によれば、先に述べた方法によりコードをコンパイルするコンパイラも提供される。
本発明の第1の特質はまた、先に述べた方法によりコンパイルされえるコードを提供する。
本発明の第2の特質によれば、クラスをコンピュータ・システムへ導入する方法が提供され、この方法はクラスの方法(M)が前にポリモルフィックでないと仮定されたかどうかを決定するステップを含む。この決定は、例えば、本発明の第1の特質に従って提供されるマーカの存在を調べることによって行われる。この決定は、方法(M)のデータ構造を調べることにより行われる。
このように、本発明の第2の特質は、例えば本発明の第1の特質に従って、コードのコンパイルにおいて仮定が行われた特定のアプリケーションを見出す。
クラスの導入は、新たなクラスのシステムへのローディングを含み得る。
本発明の第2の特質は、ロードされつつある新たなクラスがすでにシステムにおけるクラスのサブクラスであるシステムへの新たなクラスのローディングにおける特定の用途を見出す。
新たなクラスの方法(M)がポリモルフィックでないと仮定されたことが見出されると、方法(M)がポリモルフィックでなかったという仮定時に行われた任意の最適化に関して変更が行われることが望ましい。
当該方法は、方法(M)がポリモルフィックでないと仮定されたと判定されると、コンパイル・コードを調整することを更に含むことが望ましい。この調整は、方法(M)に対する呼出しを含むコンパイル・コードに対するものである。
コンパイル・コードの調整は、コンパイル・コードのセクションの削除を含む。削除されたコードは、方法(M)に対する呼出しを含む。例えば、コードのコンパイルの最適化がインラインで含んだ場合、インライン化されたセクションを含むコードのコンパイルのセクションの削除が要求される。
代替的に、あるいはこれに加えて、コンパイル・コードの調整がパッチの取り消しを含むこともある。例えば、コードのコンパイルの最適化が方法(M)に対する方法(M)の呼出しから直接指示するパッチを含んだ場合、パッチは行われないことが望ましい。あるいはまた、パッチおよび(または)パッチと関連するコンパイル・コードが削除される。
コンパイル・コードの変更は自動的に行われることが望ましい。これは、幾つかのスレッドが同時に実行中である多重スレッド環境において特に重要である。このような環境において調整が自動的に行われず、仮定が行われた間にスレッドが実行を活発に継続することを許されたならば、コードの領域の調整が行われると同時にスレッドがコンパイル・コードの領域において活発に実行中であるというリスクが存在する。これは、明らかに最も不利となろう。調整が自動的に行われなかったならば、調整が行われた間に調整されるコード領域に進む全てのスレッドの実行を停止することが必要となろう。コードの関連部分を変更することが安全であることを保証するため、特に削除においてコードの変更に先立ち検査が行われることが望ましい。当該方法は、コンパイル・コードの変更に先立ちスタック・ウォーキングを行うステップを含むことが望ましい(「エージェント資料第6」項および「エージェント資料第14」項を参照)。スタック・ウォーキングは、パッチのアンドゥのためには通常は必要でないが、コードのブロックのコンパイル・バージョンの削除前に行われることが望ましい。
多くの場合に、コンパイル・コードの関連部分が仮定が正しくないと判るとできるだけ早く削除されることが望ましいが、コードのコンパイルされたセクションは実行のため利用できなくなる。コンパイルのセクションにより占有されたメモリを解放するため、コンパイル・コードの関連部分がしかるべきときに削除されることが望ましい。しかし、この部分が削除されるまで、コンパイル・コードは使用されてはならないことをマークされるか、あるいはコンパイル・コードが使用されないように調整がどこかに行われることが望ましい。例えば、「エージェント資料第1」の本発明の実施の一形態においては、方法(M)のいずれかの部分のコンパイルされたバージョンが存在するならば、方法(M)のディスパッチ・テーブルがマークされる。このため、仮定が正しくないと見出されるならば、方法(M)のディスパッチ・テーブルはコンパイルされた断片を参照しないように変化することができ、これにより実行のため利用できないようにする。
新たなクラスの方法(M)がポリモルフィックでないと仮定されたと判定されるならば、インタプリタが使用されることが望ましい。従って、インタプリタを用いて実行が続くことが望ましい。仮定を行わない新たなコンパイル・バージョンが作られる間を待機することは可能であるが、これは望ましくない。コンパイル・コードが削除されるか利用できなくされる場合、コンパイル・コードが置換されないかあるいは置換されるまでフォールバック・インタプリタが用いられることが望ましい。フォールバック・インタプリタの使用についての更なる論議については、「エージェント資料第1」に見出すことができる。
本発明の第2の特質のコンピュータ・システムを動作させる方法もまた、コードのコンパイルに関する本発明の第1の特質の方法の特徴を含んでいる。
本発明の第2の特質は、
所与のクラスに対する方法(M)への呼出しをコンパイルし、
新たなサブクラスについて、クラスの方法(M)が前にファイナルとして処理されたかどうか決定し、
方法(M)がファイナルでなければ、所与のクラスに対する方法(M)への呼出しのコンパイルを調整する
ステップを含むコンピュータ・システムの方法をも提供する。
前項による方法は、呼出されている方法(M)が「ファイナル」であるという仮定を有効に利用する。
コンパイル・コードの調整は、クラスが導入される前に行われることが望ましい。例えば、新たなクラスがシステムへロードされている場合、ポリモルフィックでない方法(M)に対するサーチと、コンパイル・コードに必要な調整とがともに、新たなクラスのローディングがコンパイルされる前に行われる。
新たなサブクラスの導入は、クラス・ローダの使用によって行われる。クラス・ローダはコンパイル・システムへの呼出しを行うことが望ましい。ロードされるクラスによりオーバーライドされるコードのコンパイル中に仮定がなされたならば、例えばコードの削除が行われるまで方法(M)のディスパッチ・テーブルの削除および(または)変更によって、パッチを取り消しするか、あるいはコンパイル・コードのコンパイル・バージョンを実行のため利用されないようにすることにより、コンパイラ・マネージャが状況を処理することが望ましい。
本発明の第2の特質によれば、クラス・ローダを用いてコンパイル・コードを含むシステムへクラスをロードする方法が提供され、これにおいてクラス・ローダが、クラスによりオーバーライドされるコンパイル・コードにおいて仮定がなされたかどうかを決定する。
オーバーライドされる仮定がなされたならば、クラス・ローダがコンパイル・コードのマネージャへの呼出を行うことが望ましい。この呼出しは、先に示したようにコンパイル・コードの調整に導く。
本発明は、更なる特質において、本発明は、所与のクラスに対する方法(M)への呼出しをコンパイルする手段と、方法(M)がファイナルとして処理できるかどうか判定する手段と、この判定に基いて所与のクラスに対する方法(M)への呼出しのコンパイルを調整する手段とを含むコンピュータ・システムを提供する。
従って、本発明は、コンピュータ・システムの最適化に対する機会を強化する。
本発明の第2の特質は、新たなクラスを導入する手段を含むコンピュータ・システムをも提供し、当該システムはクラスの方法(M)がポリモルフィックでないと前に仮定されたかどうかを決定する手段を含んでいる。新たなクラスを導入する前記手段は、クラス・ローダであり得る。
前記システムは更に、新たなクラスの方法(M)がコードのコンパイルにおいてポリモルフィックでないと仮定されたと決定されるならば、コンパイル・コードを変更する手段を含むことが望ましい。コンパイル・コードの変更は、コンパイル・システムにより、望ましくはコンパイラ・マネージャによって行われることが望ましい。
当該システムは、パッチを取り消しする手段を含む、コンパイル・コードを削除する手段を含むことが望ましい。このコンパイラ・マネージャは、削除装置を含む。
当該システムがスタック・ウォーキング装置を含むことが望ましい。
前記システムが更にインタプリタを含むことが望ましい。
本発明の第2の特質によれば、
所与のクラスに対する方法(M)への呼出しをコンパイルするコンパイラと、
クラスの方法(M)が前にファイナルとして処理されたかどうかを新たなサブクラスについて決定する手段と、
所与のクラスに対する方法(M)がファイナルでなければ、該方法(M)への呼出しの前にコンパイルされたバージョンを調整する手段と、
を含むコンピュータ・システムが提供される。
新たなクラスを導入する前記手段がクラス・ローダを含むことが望ましい。
本発明の第2の特質が更に、先に述べたようにコンピュータ・システムにおいて使用されるクラス・ローダを提供する。
本発明は、更に他の特質において、所与のクラスに対する方法への呼出しをコンパイルする手段と、方法が前にファイナルとして処理されたかどうかを決定する手段と、方法が前にファイナルとして処理されるならば所与のクラスに対する方法への呼出しのコンパイルを調整する手段とを含むコンピュータ・システムを提供する。
また、本発明によれば、先に述べたように、本発明の第1および(または)第2の特質に従って方法を実施するためのプログラムが記録されたコンピュータ読取り可能な記憶媒体が提供される。
本発明は、コードをコンパイルする方法を実施するためのプログラムが記録されたコンピュータ読取り可能な記憶媒体に拡張し、当該コードは潜在的にポリモルフィックである方法(M)への呼出しを含み、当該方法は方法(M)がポリモルフィックでないという仮定に基いてコードをコンパイルすることを含む。
本発明はまた、クラスをコンピュータ・システムへ導入する方法を実施するためのプログラムが記録されたコンピュータ読取り可能な記憶媒体に拡張し、当該方法は、クラスの方法(M)が前にポリモルフィックでないと仮定されたかどうかを判定するステップを含む。
本発明は更に、先に述べたような方法に従ってプログラムされるとき、コンピュータに拡張する。
本発明はまた、コードをコンパイルする方法に従ってプログラムされたとき、コンピュータに拡張し、当該コードは潜在的にポリモルフィックである方法(M)への呼出しを含み、当該方法は方法(M)がポリモルフィックでないとの仮定に基いてコードをコンパイルすることを含む。
更に、本発明は、コンピュータ・システムへクラスを導入する方法に従ってプログラムされたとき、コンピュータに拡張し、当該方法は、クラスの方法(M)が前にポリモルフィックでないと仮定されたかどうかを決定するステップを含む。
要約すると、先に概要を述べた問題は、多数の要因を用いて本発明の種々の特質によって解決される。これらの第2の要因は、このような状況におけるクラス・ローダの動作を、先のコンパイルの間に行われた方法(M)のファイナルであることについての仮定が誤りであることが判ったときにコンパイル・コードについてマネージャに通知するように調整する能力である。第2の要因は、任意の時点で理由のいかんを問わずシステムから要求されないコンパイル・コードを除去する能力である。第3の要因は、存在するコンパイル・コードのシーケンスにパッチを使用することであり、コードが「ライブ」である間にコード動作の調整を許容して、1つ以上の仮想マシンにより潜在的に実行される。
本発明の特質のいずれか、あるいは一部、あるいはその全ては、他の特質に適用されよう。下記の考慮は、先に述べた本発明のいずれかおよび全て、および本発明の特質に適応する。
本発明の望ましい実施の形態については、純粋に事例として、(改善を示す)図面を参照して次に記述することにする。
潜在的にポリモルフィックである方法は、実際には特定の時点においてポリモルフィックでないことがある。このような方法(M)がコンパイル時にポリモルフィックでなければ、方法(M)に関する呼出しのコンパイルにおいて、特に方法(M)への呼出しに関するコードに対して最適化が可能である。
コードの各セクションがコンパイルのため仮想マシンにより考察されるとき、コード部分からの任意の潜在的にポリモルフィックな呼出しもまた考察される。このような各呼出しに対して、呼出しの決定がコンパイル時に固定される(すなわち、この時この方法(M)の1つの構成のみが存在する)ならば、コンパイル・システムにより状況がそうあり続けるという仮定がなされる。これは、呼出された方法(M)の1つの構成のインライニングに限定はしないがこれを含む種々の最適化を行うことを可能にする。
例えば、クラスXは、方法(M)バーへの呼出しを含む方法(M)pulic int foo(int)を定義する。
Figure 2010267291
pulic int foo(int)内の呼出しは、コードの当該部分からバーへのジャンプを生じる。バーがいったん実行されると、スレッドはしばしば、この場合はpulic int foo(int)へ再びジャンプすることにより、元のファンクションへ戻ることになる。このように、pulic int foo(int)の実行において、少なくとも2つのジャンプが要求される。
バーへの呼出しを含むコード部分のコンパイル・バージョンを生じる決定がされるならば、バーがファイナルであるという仮定がなされると、バーへの呼出しのコンパイルに対して種々の最適化が可能である。バーがファイナルでないことが判らなければ、これがそうであるという仮定はコンパイル時に行われる。バーへの呼出しの2つの最適化例は、インライニングおよびパッチングである。
インライニングの最適化法においては、方法(M)のバーは、このバーが呼出されるpulic int foo(int)のコードの残部と一致するように移動される。
Figure 2010267291
バーへの/からのジャンプが要求されず、要求されるフレームの生成および破壊のためのコードがないため、最適化が達成される。バーのコンパイル・コードは、逐次方法(M)に置かれる。これは更に、最適化のための更なる最適化を表わす。
パッチングにおいては、バーへの呼出しとバーの方法(M)との間に直接リンク(パッチ)が行われる。このパッチは、バーの方法(M)へのジャンプを生じるコードの一部である。パッチを用いることにより、バーへのジャンプの実行はランタイムにおいて速く行うことができる。パッチの形成については、項「エージェント資料第14」に更に詳細に記述される。
最適化は、方法(M)のバーがファイナルであるという仮定を用いて行われた。コードの結果として得るコンパイル・バージョンが実行環境の潜在的部分として仮想マシンの残部に利用可能とされる前に、呼出される方法(M)がそのVMデータ構造において、オーバーライドされない(すなわち、ファイナルの方法(M)である)ことを仮定するコンパイル・コードを持つものとマークされる。先に示した事例では、このマークは、何かが方法(M)をオーバーライドするようになされるならば何かがなされた仮定に照らして行われねばならないことを示す、方法(M)のバーと関連するデータ構造において作られる。
後のある時間に、方法(M)のバーの新たなバージョンを含むクラスY(クラスXのサブクラス)が導入される。
Figure 2010267291
バーがファイナルであるという仮定は、現在あるコンパイル・コードに対してすでになされ、このコンパイル・コードの調整が要求される。
図9Aは、クラス・ローダが例えばロードされる新たなクラスの方法(M)を調べる望ましい実施の形態に関するフロー図を示している。
当該クラス・ローダは、システムへのローディング4000のための新たなクラスを見出す。クラス・ローダは、種々の検査が行われるまでクラスをロードしない。第1のステップ4002として、クラス・ローダが、クラスがロードされるべきシステムに対して有効なクラスであるかを知るため標準的な検査を行う。もしそうでなければ、例外が投入される。もしそうであれば、クラス・ローダはロードされるべきクラスにおけるインスタンスの方法(M)を探す4006。ステップ4008において、クラス・ローダは、方法(M)について、この方法(M)が別の方法(M)をオーバーライドする方法(M)であるかどうか、例えば、これがロードされるクラスのペアレント・クラスの方法(M)をオーバーライドするかどうかを知るために調べる。もしそうでなければ、クラス・ローダは、次の方法(M)を調べる。この方法(M)がペアレントの方法(M)をオーバーライドすることを見出すならば、クラス・ローダは、マークされたかどうかを知るためにペアレントの方法(M)のデータ構造を調べる4012。先に述べたように、マーカは、方法(M)のコンパイル・バージョンに対するコンパイルされた呼出しが、ペアレントの方法(M)がファイナルであるという仮定に基いて用意されたことを表わす。マーカがなければ、クラス・ローダは、新たなクラスにおける別の方法(M)を探し続ける4014。マーカがあれば、クラス・ローダは、ペアレントの方法(M)がファイナルであったという仮定に基いてコンパイルされたコンパイル・コードについて何かがなされねばならないことを示すためコンパイル・システムに呼出しを行う4016。次いで、クラス・ローダは、ロードされるクラスの別の方法(M)を探し続ける。
以下において、バーがファイナルであったという仮定によりコードのコンパイルにおいてなされた最適化はパッチである。図9Bは、方法(M)のバーに対する呼出し4022を含むコードの断片を含んでいるコンパイル・コードのセクション4020を示している。最適化においては、方法(M)のバー4028のコンパイルされたクラスXの形態へ直接移る(パス4027)ため、呼出し4022が行われるように、パッチが行われる。
方法(M)のバーがファイナルであることが正しくないことが判ったという仮定がなされる場合、パッチは下記のように取り消される。すなわち、
呼出し4022は、方法(M)に対する一般的呼出し4024への移動4023へ変更される。呼出し4022のリダイレクションは自動的に行われる。
呼出し4024の一般的形態は、コンパイルされる方法(M)foo4020が生成されたのと同時にアウトライアとして用意され、方法(M)のバーの多くの異なる構成(4028、または4026)へ転移することができる(4029、または4025)。
パッチのリダイレクションおよび削除の更なる詳細については、「エージェント資料第14」を参照されたい。
以下においては、バーがファイナルであるという仮定によりコードのコンパイル時になされた最適化はインライニングである。図9Cは、第1の部分4032、第2の部分4034、および第3の部分4036を含むコンパイル・コード4030の各部を示している。第2の部分4034は、バーに対する呼出しを含むコードのコンパイル・バージョンである。方法(M)のバーは、バーがこの時部分4034に部分4038として含まれるようにインラインされている。
仮定が正しくないことが後で判るならば、コンパイル・コード部分4034は削除されることになる。部分4034を含む方法(M)のディスパッチ・テーブルは、コードのコンパイル・バージョン4034を参照しないように変化される4034。
部分4030の以降の実行時に、コンパイル・コードの部分4032が部分4032の終りに最初に実行され、制御はグルー・コードへ進む。グルー・コードは、次の部分4034のコンパイル・バージョンがあるかどうか知るために調べる。コンパイルされた部分が見出されず、従って、更なる実行のため制御をインタプリタへ送るために準備がなされる。
制御は、最初に状態を更新するためアウトライアへ送られる。(「エージェント資料第3」参照)
グルー・コードは、インタプリタに対し、部分4034に対応するコードのコンパイルされないバージョンの実行を開始するよう通知する。
後の時点で、コンパイルされた部分4034が削除される。前記部分が削除される前にスタック・ウォーキングが行われる。(「エージェント資料第6」参照)
このように、方法(M)がファイナルであるという仮定が正しくないことが後で発見されるならば、パッチの最適化がインライニングよりも容易にアンドゥされることが判る。しかし、インライニングの使用から更に優れた最適化および少ない実行時間が得られ、仮定がまれにのみ正しくないと証明されることが考えられるならば、多くの場合にインライニングが選好される。
要約すれば、新たな各クラスがロードされると、クラス・ローダが、新たなクラスの方法(M)のどれかがそのデータ構造においてセットされたマーカで方法(M)をオーバーライドするかどうか知るために調べる。もしそうであれば、クラス・ローダは、仮想マシンのコンパイル・コードのマネージャ部分に対する呼出しを再び行い、全ての影響を受けたコンパイル・コードが削除されるかあるいはアクセス不能にされることを要求する。
呼出しコードのコンパイル・バージョンが呼出している方法(M)の内部の詳細について多くの仮定を行わないように構成されると、上記機構と平行して使用できるより簡単な機構は、呼出される方法(M)のコンパイル・バージョンに対し直接呼出す呼出しコードのコンパイル・バージョンののパッチングを可能にすることである。このような直接のパッチは、先に述べたものと同じ検出機構を用いて以降にロードされるクラスが問題の方法(M)をオーバーライドすることが判るならば、比較的容易にアンドゥできる。パッチされるバージョンの利点は、これがどの構成が呼出しのため選択するかについての呼出しの時点における動的な決定を行うことのオーバーヘッドを避けることである。1つの可能性しかなくとも、パッチされる形態が使用されなければ、オーバーヘッドは存在する。
図9Dは、望ましい実施の形態を実施するための装置を示している。この装置は、コンパイラ4042とコンパイラ・マネージャ4044を含むコンパイル・システム4040を含んでいる。コンパイラ4042は、パッチを生成する最適化装置4046とインライニングを行う最適化装置4048とをそれぞれ有する。コンパイラ・マネージャ4044は、呼出しがこれがファイナルであるという仮定に基いてコンパイルされることを示す方法(M)をマークするためのマーキング装置4050を含んでいる。
当該装置は更に、新たなクラスをローディングするクラス・ローダ4052を含む。このクラス・ローダは、ロードされるクラスの方法(M)が、これがファイナルであるという仮定に基いてコンパイルされた方法(M)をオーバーライドするかどうか判定する方法(M)・チェッカ4054を有する。この方法(M)・チェッカ4054は、方法(M)のデータ構造におけるマーカについてサーチする。
オーバーライドされた方法(M)が見出されると、クラス・ローダ4052は、変更装置4056を用いるコンパイラ・マネージャ4044にコンパイル・コードに対する必要な変更を行うように通知する。変更装置4056は、コンパイル・コードの関連部分を実行のため使用できないようにする絶縁装置を含む。変更装置4056は更に、パッチ・アンドゥ装置4060と、例えば不要なコンパイル・コードの部分を削除する削除装置4062とを含む。変更装置4056はまた、コンパイル・コードを安全に削除することを許容するスタック・ウォーカも含んでいる。
当該装置は更に、コンパイル・コードを実行する実行装置4066を含んでいる。グルー・コード4068およびアウトライア4070は、必要な場合にインタプリタによる実行の転送を行うために設けられる。インタプリタ4072は、インタプリタによるコードのブロックの実行を記録するための実行履歴レコーダ4074を含む。この情報は、主パスのコンパイルのために使用される(「エージェント資料第1」参照)。
上記のいずれかあるいは全てにおいて、本発明の幾つかの特徴はコンピュータ・ソフトウエアを用いて実現された。しかし、当業者には、これらの特徴のいずれもハードウエアまたはハードウエアとソフトウエアの組合わせを用いて実現されることが無論明らかであろう。更に、ハードウエア、コンピュータ・ソフトウエアなどにより行われるファンクションが電気信号などで行われあるいはこれを用いて行われることが容易に理解されよう。
情報の格納に関する特徴は、適切な記憶場所またはストアによって実現されよう。情報の処理に関する特徴は、ソフトウエアまたはハードウエアにおいて、あるいは両者の組合わせにおいて、適切なプロセッサまたは制御手段によって実現されよう。
上記のいずれかあるいは全てにおいて、本発明は、下記の形態のいずれか、あるいは一部、あるいはその全てにおいて具現され、すなわち、本発明は、コンピュータ・システム自体において具現され、コンピュータ・システムを動作させる方法でプログラムされあるいはこれを実行する酔う構成されるとき、コンピュータ・システムにおいて具現され、および(または)コンピュータ・システムを動作させる方法に従って動作するためのプログラムが記録されたコンピュータ読取り可能な記憶媒体において具現されよう。
本文において用いられるように、用語「コンピュータ・システム」は、「コンピュータ」、「システム」、「装備」、「装置」、「マシン」などと互換であり得る。コンピュータ・システムは、仮想マシンであり得、あるいは仮想マシンを含み得る。
上記のいずれかまたは全てにおいて、方法および装置の特徴および特質を含む上記の異なる特徴および特質は、任意の適切な方法で組合わされよう。
本発明が、純粋に事例として本文に記述され、細部の修正が本発明の範囲内で可能であることが理解されよう。
本文の記述、および(適切な場合に)請求の範囲および図面において開示された各特徴は、独立的に、あるいは任意の適切な組合わせにおいて提供されよう。
エージェント資料第10−コンピュータ・システム、コンピュータ読取り可能な記憶媒体および同媒体を動作させる方法、および前記システムを動作させる方法
本発明は、特に排他的ではないが多重スレッド環境において、一般にデータ構造のアクセスに関するものである。望ましい実施の形態において、本発明は、多重スレッド環境における無秩序なリストに対するサーチ時間の短縮に関するものである。
多重スレッド環境においては、共有されるデータ構造(すなわち、同時に1つ以上のスレッドによりアクセスできるもの)が改変されるときにいつでも実行が行われねばならない。このような注意がないと、スレッドは部分的に更新されたデータを調べ、従ってデータ構造の損なわれた表示を取得する。頻繁な構成手法は、相互に排他的なアクセス機構「ミューテックス」を用いてデータ構造に対するアクセスをロックすることである。これは、修正を行うコードにより一時に1つのスレッドによるアクセスを許容する。その結果は、アクセスを競合するスレッドの数が多くなるほど遅くなる非常に遅いプロセスとなる。あるデータ構造は、修正を行うアクセスよりも多くのデータ構造を読出すアクセスを生じ、これらはデータを読むだけのアクセスのためにはミューテックスを使用しないアクセス機構から利益を蒙る。
本発明の第1の特質は、特に、コンピュータ・システムにおけるエントリのリストにおいて特定のエントリをアクセスする方法に関するものであり、エントリの1つに対する開始ポインタを読出し、特定のエントリが見出されるまで開始ポインタにより指示されるエントリから更に開始するリストにおけるエントリを調べ、見出された特定のエントリをアクセスするステップを含んでいる。
当該方法の公知の構成においては、このリストは、明白な初めと明白な終りとを持ち、開始ポインタはつねにリストの初めを指示し、次のエントリ・ポインタに対する空値を持つ最後のエントリを除いて、各エントリはリストにおける次のエントリに対するポインタを含んでいる。
アクセスされる特定のエントリがリストの終りにあるならば、この特定のエントリが見出される前にリストにおける全てのエントリを調べることが必要である。多くの用途において、見出された特定のエントリがリストが次にアクセスされることが要求されるエントリとなるという平均以上の確率が存在する。このような場合、当該方法の公知の構成によれば、特定のエントリが見出される前にリストの全てのエントリを調べすることが必要であれば、次のアクセスにおいて特定のエントリが見出される前にリストの全てのエントリを調べることも必要となるという平均以上の確率が存在する。
更に他の手法においては、特定のエントリが見出されると、見出されたエントリをリストの前方に移すためリストが記録される。このため、見出されるエントリは、次にリストがアクセスされるとき最初に調べられるものとなる。リストがこの方法で記録される場合、データ構造へのアクセスをミューテックスを用いてロックすることが必要である。2つのスレッドが同時にリストを並べ替えようと試みたならば、リストの改変が生じ易い。
本発明の第1の特質によれば、コンピュータ・システムにおけるエントリ・リストにおける特定のエントリをアクセスする方法であって、各エントリがリストにおけるエントリを指示するそれぞれの次のエントリ・ポインタを含む結果次にエントリ・ポインタが1つの閉ループを形成することになる方法が提供され、当該方法は、エントリの1つに対する開始ポインタを読出し、次にどのエントリを調べるかを決定するために、調べられるエントリに対する次のエントリ・ポインタが読出される、特定のエントリが見出されるまで開始ポインタにより指示されたエントリ・ポインタから更に始まるリストにおけるエントリを調べ、同じか異なる特定のエントリに対する上記ステップの反復において調べるステップが最初に述べた特定のエントリの検査から始まるように、見出された特定のエントリを指示するように開始ポインタを重ね書きするステップを含んでいる。
同じか異なる特定のエントリに対する前記ステップの反復において検査ステップが最初に述べた特定のエントリを調べることから開始するように、見出された特定のエントリを指示するように開始ポインタを重ね書きすることにより、多くのアプリケーションにおいて、アクセスを速くかつ効率的にするために、見出された特定のエントリが次にリストがアクセスされるときに要求されるエントリとなる、平均以上の確率が生じるという利点が得られる。
本発明によれば、エントリはそれぞれ、リストにおけるエントリを指示する次の各エントリ・ポインタを含み、検査ステップにおいて、調べられるこのようなエントリに対する次の各ポインタが、次にどのエントリを調べるかを決定するために読出される。従って、リストは、先に述べた公知の構成におけるように、空の次のエントリ・ポインタを有する明白な初めと明白な終りを持つリストではなく、無限ループであると考えることができる。
リストが1つのエントリしか持たない場合は、エントリの次のエントリ・ポインタはそれ自体を指すことになる。しかし、通常は、次のエントリ・ポインタは、リストにおけるエントリの異なる1つを指すことになる。
方法が無限にループすることを阻止するために、特定のエントリが検査ステップの間は見出されない場合は、各エントリが1回調べられるごとに検査ステップが1回終了され、アクセス・ステップと重ね書きステップとは省かれることが望ましい。
本発明の第2の特質は、コンピュータ・システムの動作方法を提供し、該方法は、複数のスレッドを実行するステップを含み、各スレッドが本発明の第1の特質による各アクセス・方法をエントリのこのような共通リストに関して実施し、各アクセス・方法がエントリ・リストに関してこのような共通の開始ポインタを読出す。
本発明の第1および第2の特質の方法においては、開始ポインタを重ね書きするステップが、自然あるいは特殊な設計のいかんを問わずアトミックであることが望ましい。このことは、多重スレッド環境において特に有利である。ポインタ位置がアトミックに変更可能である場合、2つのスレッドが同時にポインタ位置を変えようと試みるときのデータ破壊のリスクが低減される。このため、ミューテックスの保護によらずポインタ位置の変更を許容することが可能となる。また、特定のエントリをアクセスするステップは、読出しアクセス・ステップであることが望ましい。
本発明の第3の特質は、コンピュータ・システムにおけるエントリのリストを形成する方法を提供するもので、該方法は、
各エントリに次のエントリ・ポインタを与え、
エントリ・ポインタの閉ループを形成するように次のエントリ・ポインタを構成し、
異なるエントリを指示するため重ね書きが可能である、エントリを指示する開始ポインタを提供する
ステップを含んでいる。
本発明の第4の特質は、本発明の第3の特質によりエントリのリストを形成する方法と本発明の第1の特質によりエントリをアクセスする方法とを含む、コンピュータ・システムを動作させる方法を提供する。
本発明の第5の特質は、本発明の第1および第2の特質の方法を実施するようプログラムされるコンピュータ・システムを提供する。
本発明の第6の特質は、エントリのリストを記憶する手段と、エントリの1つに対する開始ポインタを記憶する手段と、開始ポインタを読出す手段と、特定のエントリが見出されるまで開始ポインタにより指示されるエントリから始まるリストにおけるエントリを調べる手段と、見出された特定のエントリをアクセスする手段とを含むコンピュータ・システムを提供し、該システムは、見出された特定のエントリを指示するように開始ポインタを重ね書きする手段を特徴とする。
本発明の第7の特質は、エントリのリストとこれらエントリの1つに対する開始ポインタとが記憶され、各エントリが次の各エントリ・ポインタを含み、次のエントリ・ポインタの全てがリストにおけるエントリを指示する、コンピュータ・メモリを提供する。
次のエントリ・ポインタが一緒に閉ループを形成することが望ましい。
本発明の第8の特質は、本発明の第7の特質によるメモリと、開始ポインタを読出し、特定のエントリが見出されるまで開始ポインタにより指示されるエントリから始めるリストにおけるエントリを調べ、見出された特定のエントリをアクセスするようにプログラムされたプロセッサとを含むコンピュータ・システムであって、見出された特定のエントリを指示するように、プロセッサが開始ポインタを書直すようにプログラムされることを更に特徴とするコンピュータ・システムを提供する。
本発明の第9の特質は、コンピュータ・システムにおけるリストにおけるデータをアクセスする方法であって、リストをループの形態に構成し、所与の要素をループでアクセスし、該要素を次のアクセスのためのループの始まりであるように選定するステップを含む方法を提供する。
本発明の第10の特質は、リストにおけるデータをアクセスするコンピュータ・システムであって、閉ループの形態でデータを構成する手段と、所与の要素をループでアクセスする手段と、該要素を次のアクセスのためループの開始時に選定する手段とを含むコンピュータ・システムを提供する。
本発明の上記特質において、エントリあるいは要素の少なくとも一部がそれぞれコンパイル・コードの各セグメント(または、チャンク)を含み、そして(または)エントリあるいは要素の少なくとも一部がそれぞれ各キーを含むことが望ましい。
本発明の第11の特質は、全くの方法の特質のいずれかをコンピュータ・システムに実施させ、あるいは本発明のシステムの特質のいずれかに従って動作させるように実行可能なコンピュータ・プログラムが記録されたコンピュータ読取り可能な記憶媒体を提供する。
本発明の少なくとも一部の実施の形態の主な利点は、リストにおけるデータに対するアクセス時間を短縮すること、および相互に排他的なアクセス機構あるいはミューテックスとして知られる機構の必要を避けることである。
当該方法は、多重スレッド環境において特に有利である。選択は1つの書込み操作として行われる、すなわち、アトミックであることが望ましい。これは、安定性が維持されるものとすれば多重スレッド環境において非常に有利である。
本発明、あるいは本発明の少なくとも特定の実施の形態は、ミューテックスによらず読むことができる無秩序の単にリンクされたリストのアクセスにおける最適化を提供する。本発明は、新たなエントリをこのようなリストに挿入する問題、あるいは古いエントリを取除く更に困難な問題を目的とするものでもなく、いずれのタスクの複雑さを増すものでもない。このような種類の修正が要求される場合、ある種のバルブ機構が提供されることが望ましい。同様に、リストが秩序のあるリストであるならば、本発明は通常は適用され得ない。
本発明の任意の特質のいずれか、あるいは一部、あるいはその全てが他の任意の特質に適用されよう。
本発明の望ましい特徴については、純粋に事例として、添付図面に関して次に記述される。
図10Aのデータ構造は、エントリ26110、26112、、、26106のリストと、このリストの初めに対するポインタlist_head26104とを含んでいる。エントリの各々は、リストにおける次のエントリに対するポインタnext_ptrとキーとデータを含んでいる。リストにおける最後のエントリ26106において、次のエントリ・ポインタnext_ptrの値はNULL値である。
図10Aに示されるデータ構造が非常に頻繁に読出すためアクセスされ、ミューテックスを持たないアクセス機構が有効であるならば、ミューテックスを取得し解放するために要する時間はデータ構造をアクセスする時間の著しい割合となる。
図10Aの事例において、スレッドは通常、ポインタlist_head26104を介して第1の要素26110に進入し、更に逐次リストにおける他のポインタを介して移動することになる。ポインタlist_head26104が(例えば)第2の要素26112へ移動されるならば、この点においてリストに進入するスレッドがリストにおける要素の全てを「知る」ことがない。このような問題を克服するため、全ての要素が判るようにリストが並べ直されねばならないが、ミューテックスが設けられねばならない。
特に図10Bによれば、本発明の実施の形態において、リストの終りであったものにエントリ26106におけるポインタnext_ptrの追加によりリストをループに作ることにより、次にアクセスされる確率の最も高い要素を示すためどのスレッドも、ポインタlist_head26104をループの初めに独立的に変更することができる。以降のアクセス時に、サーチされるアイテムが調べられた最初のアイテムに更になりがちである。これは、スレッドが探している要素を見出すごとに、図10Cにおける破線26312により示されるようにループに対する次のアクセス時に次のスレッドがアクセスされた最後の要素へ向けられるように、このスレッドがポインタlist_head26104を書き換えるゆえであり、仮定はこれが再び必要とされる可能性が最も高いことである。
本発明の当該実施の形態では、スレッドがアクセスされた最後の点においてループにアクセスし、これが必要とする要素を見出すまでループを循環し続ける。1つ以上のスレッドがこの状態を同時に行い、各スレッドがアクセス時に遮断する試みにおけるポインタlist_headを書直すならば、これは問題にならない。2つのスレッドが同時にポインタlist_headを変更しようとするならば、この変化が生じる順序は、各変更がアトミックであるかぎり問題ない。この変化は非常にしばしばアトミックであるが、もしそうでなければ、そうなるように容易に保証され得る。ミューテックスを設けることよりも項の計算時にポインタを(自動的に)変更することの方がはるかにやさしい。
スレッドが付加または削除を必要とするならば、別のスレッドが同時に同じことを試みるのを阻止するためミューテックスが介挿される。しかし、ミューテックスが読出し専用スレッドには適応しないので、読出しスレッドは妨げられない。読出しスレッドに対する修正はアトミックに見えるが、修正をアトミックに変更することはできない。
先に述べたように、図10Aにおいて、伝統的なリストの終了エントリがノード26106における空ポインタにより示される。ポインタlist_head26104が第1のノード26110を指示する。本発明の当該実施の形態は、ノード26106における空ポインタをリスト26110の初めに対するポインタnext_ptr26202(図10B)と置換する。このことは、更に伝統的なリストではなく周期的なループを生じる。データ構造をループとして構成することにより、リストが有効に自然に指導するノードを持たない特性を創製した。選択するノードがどちらであってもリストの先頭として処理することができ、処理はスタート点に再び達するまで全てのノードを巡ることによって達成される。従って、伝統的なリストを下記により処理することになる。すなわち、
Figure 2010267291
ループを下記アルゴリズムにより処理するとき、同じ効果が本発明の実施の一形態において達成される。すなわち、
Figure 2010267291
本発明の当該実施の形態の利点は、ステップ15においてミューテックスなしにポインタlist_headを読出しアクセスが書き換えることを許すことによって達成される。
Figure 2010267291
ループ内の任意のノードがリストの先頭として等しく有効に処理することができるから、スレッドがポインタlist_headをアトミックに更新することができるものとして、ミューテックスが要求される。すなわち、2つのスレッドがほとんど同時にlist_headを更新するならば、どのスレッドが最初にアトミックに書くかは問題ではなく、データ構造はつねに一貫している。
上記プロセスにおいて、first_ptrはステップ11においてptrに等しくセットされ、これは更にステップ10においてlist_headに等しくセットされ、ステップ19におけるテストがlist_headではなくfirst_ptrに関して行われ、その結果異なるスレッドは、その間ステップ13と19間でループを阻止することなくlist_headを変更することができ、おそらくはループにおけるエントリの全てのキーをテストする。
リストが無秩序であるがリストのサーチにおいて見出される最後のアイテムもまたリストが次にサーチされるときについて問い合わされる環境においては、先に述べたようにlist_headを変えることにより、サーチにおいて尋ねるノード数を減らし、従ってサーチ時間を減らす。
明らかなように、本発明は特に有効かつ簡単であり、実現が安価である。更に、本発明は、付加/削除手順を複雑にせず、ミューテックスを必要とすることなく行うことができる。
このような環境の一例は、チェーンを持つハッシュ・テーブルを用いてソース・ジャバおよび任意の相当コンパイル・ホスト・コードにおけるバイト・コード間をマップする。
無秩序なリストに多くの、例えば約10,000あるいはそれ以上のノードがあることはあまりない。このようなサイズの1つのリストにおけるサーチ時間が異常に長くなるので、1つのチェーンをこのような多数ノードで形成することは実用的でない。従って、それぞれが管理可能なノードまたは要素の数を持つ個々のチェーンを生成することが実際的である。コンピュータ・システムは、ビジット・スレッドを正しいチェーンへ送るためある種のアドレス指定装置またはソフトウエアを必要とする。
2つのチェーンしかない場合は、基本的な事例を選択するためには、キーについての1回のテストで充分である。このテストは、キーが偶数であればバケットの1つのチェーンを指示し、キーが奇数であれば異なるチェーンを指示することを含む。当該システムは、チェーン当たり比較的少ないバケットがある場合に良好に働くことができる。しかし、規準は、チェーン当たり数十あるいは数百のバケットがざる場合であり、領域に10,000バケットがある場合は、管理するかなりの数のチェーンが存在することになる。このような状況は、索引テーブル(望ましくは、ハッシュ・テーブル)の使用により処理することができる。1つのチェーンを他のチェーンから分けて識別するには、素数による除算のようなキーについての簡単なテストを用いることができる。これは、略々同数のエントリがこのようなチェーンごとに割付けられる場合にも望ましい。このハッシュ・アルゴリズムは、適切に選定されることを必要とする。実行の決定は、通常、ハッシュをどれだけ広く規定するかについて必要である。
図10Dにおいて、先に述べた方法を実施するためのコンピュータ・システム26100は、ポインタlist_head26104およびエントリ26110、26112、、、26106を記憶するメモリ26102、メモリ26102をアクセスして方法を実施するプロセッサ26107、および方法の実施のためプロセッサ26107をプログラミングするためプロセッサ26107により読むことができるプログラムを含む記憶媒体26108を含んでいる。
上記のいずれかまたは全てにおいて、本発明の幾つかの特徴は、コンピュータ・ソフトウエアを用いて実現された。しかし、当業者には、これらの特徴のいずれもハードウエアまたはハードウエアとソフトウエアの組合わせを用いて実現されることが無論明らかであろう。更に、ハードウエア、コンピュータ・ソフトウエアなどにより行われるファンクションが電気信号などにおいてあるいはこれを用いて行われることが容易に理解されよう。
情報の記憶に関する特徴は、適切な記憶場所またはストアによって実現されよう。情報の処理に関する特徴は、ソフトウエアまたはハードウエアにおいて、あるいは両者の組合わせにおいて、適切なプロセッサあるいは制御手段によって実現されよう。
上記のいずれかあるいは全てにおいて、本発明は、下記の形態のいずれか、あるいは一部、あるいはその全てにおいて具現され、すなわち、本発明は、コンピュータ・システムを動作させる方法において具現され、コンピュータ・システム自体において具現され、コンピュータ・システムを動作させる方法を実行するようプログラムされあるいは実行するようになされたコンピュータ・システムにおいて具現され、および(または)コンピュータ・システムを動作させる方法に従って動作するようになされたプログラムが記録されたコンピュータ読取り可能な記憶媒体において具現されよう。
本文において用いられるように、用語「コンピュータ・システム」は、「コンピュータ」、「システム」、「装備」、「装置」、「マシン」などの用語と互換であり得る。コンピュータ・システムは、仮想マシンであり得、あるいは仮想マシンを含み得る。
上記のいずれかあるいは全てにおいて、方法および装置の特徴および特質を含む上記の異なる特徴および特質は、任意の適切な方法で組合わされよう。
本発明が本文において純粋に事例として記述され、細部の修正が本発明の範囲内で可能であることが理解されよう。
本文の記述、および(適切な場合に)請求の範囲および図面において開示された各特徴は、独立的に、あるいは任意の適切な組合わせにおいて提供されよう。
エージェント資料第11−コンピュータ・システム、コンピュータ読取り可能な記憶媒体および同媒体を動作させる方法、および前記システムを動作させる方法
本発明は、特定仕様の特定のiplであるコンピュータ・コードのテストに関する。望ましい実施の形態においては、本発明は、自動テストおよび仮想マシンにおける動的にコンパイルされたコードの検証のための方法に関する。
動的にコンパイルされたコードにおけるエラーは、エラーが実際に生じた後も長い間しばしば顕われて、真の原因を識別することを困難にする。エラーは、これが生じるとき良性に見える(例えば、すぐに使用されない誤った計算)が、その影響は招来のある時点またはイベントにおいて(例えば、正しくない値が使用されるとき)ひどいことになるおそれがある。
ダイナミック・コンパイラに対する最適化を変更および(または)付加するとき、結果として生じたコードが正しいことを立証するのは難しい。従って、本発明は、このようなエラーについてテストすることに関する。
1つの公知手法において、このようなテストは順方向では行われなかった。その代わり、エラーが判ったとき、プロセスはエラーの出所を見つけるため逆方向い調べられることになる。このような手法は、明らかに、遅すぎるまで生じる潜在的にひどい結果となるエラーを気が付かないでいるリスクに通じるものであった。
先に述べたばかりの手法についての改善である別の公知の手法では、2つの実行エンジンが同じプロセス内で用いられ、その結果が比較される。1つの実行エンジンは信用さ成果構成(マスタ)であり、他方はテスト中の成果(スレーブ)である。このテスト・プロセスは、1つのスレッドのあるアプリケーションに限定され、実行エンジンを逐次走らせねばならないため、かさ高であると共に時間がかかるものであり得る。このプロセスは、初期の状態(状態1)をセーブし、マスタの一部を走らせ、マスタの最終状態(状態2)をセーブし、状態1を復元し、スレーブの一部を走らせ、次いでセーブされた状態2に対してスレーブの最終状態を調べて矛盾を検出するものである。
(インシニア社の)Softwindowにおいて実現されるテスト手法は、今概要を述べたばかりのタイプのものであった。その目的のためには有効であっても、この手法は単一のスレッド環境にのみ適応し得ること、およびCPUエミュレータに用いられるとき、ただ大きいだけの実行能力を持つものであったことにおいて、限定されたものであると言うのが順当であろう。マスタおよびスレーブに対するこの実行能力は、逐次行われねばならないテストと同じ実行能力にあった。更に、このテスト手法は、マスタとスレーブ間に自らバグおよび不統一性をもたらし得る。状態の比較がなされた点は、たかだか制御の移転に過ぎないものであった。
いったん識別されたエラーの原因を識別するための手法は、テスト中のシステムをしばしば障害の挙動を変更しあるいは(一時的に)取除く程度に混乱させる傾向がある。従って、本発明の目的は、望ましくはダイナミック・コンパイラにより生じた実行可能コードの各部をテストするための、より迅速でより信頼し得るシステムおよび方法を提供することである。
アンチ・アリアシングの第1の特質は、別の成果であるコンピュータ・コードの第2の部分に対し特定仕様の成果であるコンピュータ・コードの第1の部分をテストする方法を提供し、該方法は、コードの両部分における対応同期点を規定し、コードの両部分を実行し、同期点におけるコードの両部分により生じる状態を比較するステップを含んでいる。
多くの場合、コードの第1の部分は仕様の信用される成果(マスタ)であり得るが、コードの第2の部分はテスト中の成果(スレーブ)であり得る。
生じた状態において矛盾が見出されると、この矛盾は、前の同期点以降にコードの2つの部分により生じた挙動が異なっていることを示す。最後の同期点以降にスレーブにより実行されたコードは、容易に識別することができる。
矛盾が見出されると、この矛盾は、コードの1つ(あるいは、おそらくは両方)の部分がエラーを含むことを示す。このエラーは、これが単に新しく、更に複雑でかつ信用されるマスタよりテストされ易くないゆえに、一般にスレーブにおいて見出されるが、この方法は、スレーブが正しいかあるいは少なくとも別の点で正しくないものとすれば、信用されるマスタにおけるエラーを識別し得る。
コードの第1および第2の部分がそれぞれ第1および第2の異なる実行能力により、例えば、別のアドレス・システムおよび別のスタックを持つマシンにより実行されることが望ましい。
本発明のこのような特質は、コードの第1および第2の部分がそれぞれ第1および第2の異なる仮想マシンにより実行されるときに特に適用し得、これにより効率性を高める。仮想マシンは、必ずしも同じアーキテクチャおよび(または)オペレーティング・システムを用いる必要がない。システムは、独立的なプロセスを働かせることができ、かつ任意に同時的であり得る。
コードの第1および第2の部分がそれぞれネイティブな方法またはファンクションを含む場合は、コードの第2の部分により要求されるこのようなネイティブな方法またはファンクションの少なくとも1つが第1の実行能力(例えば、マスタ)により実行され、その結果は第2の実行能力へ戻される。この場合は、方法が第1の実行能力から第2の実行能力へ第1の実行能力により実行されるべきこのようなネイティブな方法またはファンクションのリストを与えるステップを更に含むことが望ましい。
コードの第1の部分における各同期点における比較ステップにおいて、第1の実行能力(望ましくは、マスタ)が、コードの第2の部分における対応する同期点において第2の実行能力の状態を調べる。コードの第2の部分における同期点ごとに、第2の実行能力(望ましくは、スレーブ)が最新のものでないその状態要素の少なくとも一部の値をセーブし、これらの状態要素の値を更新し、その状態要素の値を第1の実行能力へ移し、それから更新された状態要素のセーブされた値を復元する。
効率を増すために、コードの第1および第2の部分は並列に実行されることが望ましい。
本発明のこのような特質は、動的にコンパイルされるコードの各部に対して特に適用し得る。
同期点は、制御の条件付き移転、方法/ファンクション/手順または戻り、および制御の逆方向の移転から選択されることが望ましい。
コードの第1および第2の部分がそれぞれ実行の複数のスレッドを有する場合は、コードの第1および第2の部分により生じる対応するスレッド間に対応が識別されることが望ましく、このような場合、対応する同期点はこのような対応するスレッドにおいて規定されることが望ましい。
プログラミング言語がジャバであり、同期がスレッド単位で行われることが望ましい。特に、複数の非同期的に処理されるスレッド対があることが望ましい。
また、コードの第1および第2の部分により動的に割付けられる対応するオブジェクト間に対応が識別されることが望ましい。
本発明の第2の特質は、本発明の第1の特質の方法を行うようプログラムされたコンピュータ・システムを提供する。
本発明の第3の特質は、対応する同期点がコードの両部分において規定される同じ仕様の異なる実現であるコンピュータ・コードの第2の部分に対して特定仕様の実現であるコンピュータ・コードの第1の部分をテストするコンピュータ・システムを提供し、該システムは、コードの両部分を実行する手段と、同期点におけるコードの両部分により生じる状態を比較する手段とを含む。
本発明の第4の特質は、対応する同期点がコードの両部分において規定される同じ仕様の異なる実現であるコンピュータ・コードの第2の部分に対して特定仕様の実現であるコンピュータ・コードの第1の部分をテストするコンピュータ・システムを提供し、該システムは、コードの第1の部分を実行する第1の実行能力と、コードの第2の部分を実行する第2の実行能力とを含み、該第1の実行能力が同期点におけるコードの両部分により生じる状態を比較するようにも動作可能である。
本発明の第4の特質において、第1および第2の実行能力は、それぞれ第1および第2の異なる仮想マシンにより提供されることが望ましい。
本発明の第3または第4の特質による装置は、本発明の第1の特質の方法を行うようにプログラムされることが望ましい。
本発明の第5の特質は、特定仕様の実現であるコンピュータ・コードの第2の部分と、対応する同期点がコードの両部分に規定される同じ仕様の異なる実現であるコンピュータ・コードの第2の部分とが記録されたコンピュータの記憶媒体を提供する。
本発明の第6の特質は、コンピュータ・システムに本発明の第1の特質の方法を実施させあるいは本発明の第2ないし第4の特質のいずれかに従って動作させるプログラムが記録されたコンピュータの記憶媒体を提供する。
特に仕様がジャバ・バイト・コードに対する実行エンジンである場合は、2つの成果が異なる仮想マシン(VM)へ構築されることが望ましい。信用される成果を含むVMはマスタVMと呼ばれ、テスト中の成果を含むVMはスレーブと呼ばれる。両方のVMは、同じアプリケーションを実行し、仮想マシンの状態を交換して比較するため既知の同期点で相互に通信する。
上記システムおよび方法において、同期点がコードの長さに(および、望ましくはこれに比例して)(少なくとも部分的に)従って選択されることが望ましい。このことは、テスト中でないときなどに同じ最適化を行う最良の機会をダイナミック・コンパイラに与え、従って律動を減じる。
本発明の特定の実施の形態においては、スレーブVMは最小限の律動を生じ、障害のある挙動を変化させる可能性を減じる。また、各実現により操作される状態は、他の実現により操作される状態とは独立している。更に、スレーブVMは、本発明に対して少ない余分なリソースを要求し、その安定性を増加する。
本発明の実施の形態においては、スレーブVMにおけるテストされない実現における負担は低減される。明らかなように、テストされない実現における負担は、これも以下に述べる同期点における最終状態で信用される実現へ単に移転される。テストされない実現は、能動的な役割を演じるのではなく、有効に受動的になり、信用される実現により要求される如きデータのみを信用される実現へ送る。両方の実現は同じ初期の状態で始動し、従って同期点は予測し得る。更に、信用される実現は通常、強力な目標マシン上で走り、その結果マスタVMは重装備となり得るが、テスト用の実現は比較的小さな、おそらくは手持ち型の目標マシン上で走らせ得る。通常は、スレーブVMが走らせられる目標マシンへマスタVMをポートする必要はない。
本発明はまた、同じ仕様の別の実現に対して特定仕様の1つの実現をテストする方法を提供し、該方法は、
両方の実現における対応する同期点を規定し、前記1つの実現と前記類似の実現とを実行し、同期点においてコードの両部分により生じる状態を比較する
ステップを含んでいる。
本発明はまた、特定仕様の1つの実現を同じ仕様の異なる実現に対してテストするコンピュータ・システムを提供し、該システムは、両方の実現における対応する同期点を規定する手段と、実現を実行する手段と、同期点において両方の実現により生じる状態を比較する手段とを含んでいる。
本発明の任意の特質の特徴のいずれか、あるいは部分、あるいはその全てが、他の任意の特質に対して適用し得る。
本発明の望ましい特徴については、純粋に事例として、添付図面に関して次に記述する。
当該方法は主としてジャバの仮想マシンに対して開発されたが、使用される手法は更に一般的に適用し得る。当該テスト手法の実現におけるコード・バッファ形態およびコード断片をそれぞれ示す図11Aおよび図11Bを参照する。
同期点の選択
両方のVMは、同じ同期点を使用しなければならない。適切な選択は、下記の全てまたは一部を含むことができる。すなわち、制御の条件付き移転、方法/ファンクション/手順の呼出し、方法/ファンクション/手順の戻し、および制御の逆方向の転送である。
同期点の選択については、以下の項「スレーブ仮想マシン」において更に論述される。
仮想マシンが動的に割付けされるオブジェクトをサポートするならば、マスタVMおよびスレーブVMは、対応するオブジェクトがそれぞれのVMにおいて識別されることを保証しなければならない。
仮想マシンが多数のスレッドをサポートするならば、マスタVMおよびスレーブVMは、対応するスレッドが各VMにおいて識別されること、および各スレッドが独立的に同期されることを保証しなければならない。
仮想マシンがネイティブな方法またはファンクション(すなわち、仮想マシンの実行エンジンを介してではなく、直接的に実行されるもの)をサポートするならば、大半はもっぱらマスタおよび戻り値において実行されねばならず、任意の必要な副作用はスレーブへ送られねばならない。例えば、時刻を返すネイティブなファンクションは、つねにマスタ上で実行されることになる。これは、2つの異なるマシン(この文脈においては、VM)上で走るクロックが正確に同期していたならば、実際にまれなイベントであるゆえであり、複雑なテスト手法におけるこのような矛盾に供するのは無意味な高価なふるまいとなるゆえである。一方、仮想マシンから抜けさせるネイティブなファンクションは、マスタとスレーブの両者で実行されるべきである。これらの基本的な注意が然るべく払われなければ、スプリアスな同期エラーが生じ得る。マスタは一般にこれだけが行い得るファンクションのリストを含み、これがスレーブに対して、スレーブがこのファンクションを走らせることを許容されたかどうかを知らせ、あるいはもしそうでなければ、他の動作を行うことを必要とするものを知らせる。ジャバの仮想マシンの場合は、ネイティブな方法がジャバで書かれた方法における呼出しを行う。ネイティブな方法自体が両方のVM上で実行されているか、あるいはもっぱらマスタで実行されているかのいかんに拘わらず、このようなジャバ方法は両方のVMにおいて実行されねばならない。
マスタ仮想マシン
マスタの(信用される)仮想マシンは、仮想マシンの状態の全ての読みと仮想マシンの状態の全ての修正を記録するため重装備である。
各実行スレッドは、スレーブVMにおける対応する実行スレッドと独立的に同期する。基本的な同期ループが、下記の先頭のプレスレッド同期ループに示される。
プレスレッド同期ループ
Figure 2010267291
マスタは、その同期ループを状態情報のデータベースをクリヤすることによって始動する。この同期ループは、次の同期点へ走り、その状態情報データベースに仮想マシンの状態のどのアイテムがいつ書込されあるいは書込まれるかを追加する。任意の読出し時、および任意の書込みの前後におけるアイテムのタイプおよび値がセーブされる。
同期点において、マスタが前の状態「SB」メッセージをスレーブへ送り、スレーブがいったん対応する同期点に達すると対応する後の状態(SA)メッセージをスレーブから受取るまで待機する。マスタがSAメッセージをスレーブから受取ると、マスタは、前の同期点が正しいタイプと値を持って以来全ての仮想マシンの状態アイテムがスレーブにより書込まれたことを調べる。どれかのアイテムが正しくなければ、エラーをユーザに対してただちに送るかあるいは後の検査のためバッチすることができる。次に、マスタは同期ループの次の繰返しへ進むことができる。
マスタ・ループに対する最適化は、スレーブからのSAメッセージを待つのではなくSBメッセージの直後にこのループをその次の同期ループへ続けさせることである。この待機は、待機が非常に少なくなりおそらくはゼロになることを期待して、マスタがその次のSBメッセージを送る用意ができるまで延ばすことができる。更なる最適化は、スレーブを待たねばならない前に幾つかの同期ループを走らせることができるように、マスタが幾つかのSBメッセージのバッファを保持することである。これらの最適化は、マスタの同期ループがスレーブよりも遅くなりがちであるので、価値がある。マスタの実行エンジンは、典型的に、スレーブの実行エンジンよりも非常に遅い実現であり、更に本発明のコストの大半となる。
多くの実施の形態において、マスタはコードの実行のためインタプリタを使用する。ダイナミック・コンパイラをスレーブVMにおいてテストすることができる。あるいはまた、マスタとスレーブはともに、コードのコンパイルされたバージョンを走らせることができ、あるいはともに、例えばスレーブVMにおける新たなインタプリタをテストするためコードを解釈することもできる。
スレーブ仮想マシン
スレーブ仮想マシン(テスト中のVM)は、前の同期点以来書かれた状態アイテムのタイプおよび値を集めてマスタへ送るることができるように、その仮想マシンの状態を最新の状態に保持し、あるいは同期点で容易に更新可能に保持しなければならない。スレーブの通常の動作モードに対する摂動を最小化する方法で、このような要件が実現されることが非常に重要である。スレーブが最適化ダイナミック・コンパイラを含むときは、通常の動作において生じるコードに比してテストするとき異なるコードを生じないことが特に重要である。
これは、コンパイル・コードが正しい場所になければ必要な状態を利用可能にし易いときと一致するよう同期点の慎重な選択の組合わせ、および同期点においてダイナミック・コンパイラにコードの特殊な断片を生成させて、まだ最新でない任意の状態アイテムの内容をセーブし、これらアイテムを更新し、SAメッセージを生成して送り、最後に同期点に対して特に更新されたこれら状態アイテムのセーブされた内容を復元することによって達成することができる。
同期点に対する望ましい選択については、すでに述べた。しかし、制御の各移転が必ずしも同期点として選択される必要がないことを更に述べねばならない。バイト・コードの各点を用いることも可能であるが、摂動のリスクも増加される。同期点の選定における重要な特徴は、これら同期点がその時の状態が例えば全ての要素がそれらの本来の状態にある場合に容易に識別できるか、あるいはその状態に容易に置くことができる点でなければならないことである。通常は、ある部分内の要素の順序が実行の結果として変更され、スレーブとマスタの実現に対する共通の参照点がなくなるので、実行の部分内の点を選定することはできない。同様に、同期点は、エラーがこれら同期点間のコードの集まりが、エラーがその集まりにおいて生じるならば、有効な検査にはおそらく大きくなり得るので、あまりかけ離れて選択してはならない。
これらの理由から、同期点において、実行が「ピグライヤ(piglier)」と呼ばれるコードの別の断片へ外れることが望ましく、そのファンクションは必要な状態を更新することである。同期およびデータの必要な移転がいったん完了すると、ピグライアは更新に遭遇し、コンパイル・バージョンへ戻る。この状態においては、バグがコンパイル・バージョンへインポートされあるいはこれから除かれることがないことが重要である。
典型的なコード・バッファの形態が図11Aに示され、同図において、その左側が全般的な概略を示し、右側は同期点周囲に含まれるコード・バッファの内容を示している。
断片7100は、コード・バッファ7102の一端部に生成され、アウトライア(ピグライア)7104は他端部に生成される。
コードの生成時に、コンパイラが、同期点を検出するまで、断片コードを通常のように配置する。コンパイラは、その状態をこの点にセーブし(すなわち、図11Aにおける「ダイナミック・コンパイラの状態A」)、次いでピグライア7106自体およびこれに対するジャンプ(すなわち、「JMPピグライア」)を配置する。ピグライア7106に対して配置されたコードは、最新ではないがこの同期点に対するものである必要があるVM状態要素をその時の内容を除いてセーブするコード、これらの状態要素を更新するコード、SAメッセージを送るファンクションに対する呼出し、VMの状態要素の前の内容を復元するコード、およびセーブされたコンパイラの状態(ダイナミック・コンパイラの状態A)を復元するのに必要な任意のコードからなる。例えば、同期点が所与のレジスタにおける特定の値を持つ前の断片コードおよびピグライア・コードがレジスタにおける値を変更すると、あるコードが前記レジスタの元の値を復元するように配置される。ピグライア7106に配置された最後のコードは、「JMPピグライア」命令に続く断片コードへ戻るジャンプである。
同じプロセスであるがこの時は断片に関して表わされるプロセスが、ピギング状態がない場合とピギング状態がある場合の状態で図7Bに示される。このような概略図から判るように、同期点SPのいずれかの側のコード部分はBおよびCで示される。「ピギング状態でない」場合は、コード生成時のSPにおけるダイナミック・コンパイラの状態は、「ダイナミック・コンパイラ状態R」と呼ばれる。「ピギング状態」の場合は、ダイナミック・コンパイラは、コード部分BおよびCが「ピギング状態でない」場合にそれぞれ生成されるコード部分BおよびCと同じにるように、従って「ピギング状態」の場合におけるピグライア・コードの生成の前と後の両方のダイナミック・コンパイラの状態が「ピギング状態でない」場合における同期点SPにおける「ダイナミック・コンパイラ状態R」と同じになるように、コードを生成しなければならない。このことは、生成されたコードが実行されるときピグライアの実行が実質的にトランスパレントであり生成された断片コードにおける副作用がないことを保証する。
ピグライアが行内で実現されることがあり得るが、デバッグを試みるときは役にたたず、エラーが生じた同期点間のコード部分を識別して調べることを更に困難にするので、望ましい選択ではない。
ピグライアにおいてなされる処理が多くなるほど、状態を復元することが難しくなることが一般的である。また、同期点が頻繁になるほど、エラーの生じる可能性が大きい場合に最適化をオフにすることなく同じコードを走らせることが困難になる。
同期点に対する望ましい選択は、制御の前後両方向における、また任意に呼出し点における、条件付き移転である。これは、ファンクション/方法を戻すためには望ましいことではない。
多重スレッデイング発行
仮想マシンが多重スレッドであるならば、マスタおよびスレーブのVMは各実行スレッドを個々に同期させる。これらVMは、両方のVMにおける対応する実行スレッドを識別し、かつスレッドのような重要点においてメッセージを交換し、状態の変化と生成を監視する方法を持たねばならない。
同期に関しては、所与の開始スレッドがあり、従ってマスタおよびスレーブにおける開始条件が判る。別のスレッドの生成時のスレッドの挙動は、スレッドの生成/停止の順序のように予測し得る。従って、マスタとスレーブ間のメッセージの交換がスレッドの始動点で生じることが可能である。
マスタ・スレッドAがスレッドBを生成するとき、スレーブにおける対応するスレッドAが生じる次のスレッドがBでもある(あるいは、Bでもあるべき)ように、情報がスレーブへ送られる。マスタ(および、スレーブ)は、マスタ・スレッドのアイデンティティ(例えば、「スレッドBはすなわち5」)と、メッセージの交換のため使用することができるスレーブ・スレッドのアイデンティティ(例えば、「マイスレッドBはすなわち5」)とを含むテーブルを作成する。同じ原理が、オブジェクトの生成のために用いられる。マスタおよびスレーブ間に送られるSAおよびSBのメッセージは、送る側のスレッドのアイデンティティを含まねばならない。
通信機構
当該方法に要求される通信は、任意の適切な駆動機構、例えばソケットまたはネームを付したパイプの先頭において実現することができる。
信用される実現に対して用いられるVMがピギングをサポートするため特に構築されたVMであることが望ましい。VMはピギング以外に用いることができるが、一般に速度が遅くなる。テスト中実現のため用いられるVMがピギングおよびピグライアをサポートするため特に構築されたVMであることが望ましい。
上記のいずれかあるいは全てにおいて、本発明の幾つかの特徴がコンピュータ・ソフトウエアを用いて実現された。しかし、当業者には、これらの特徴のいずれもハードウエアあるいはハードウエアとソフトウエアの組合わせを用いて実現されることが無論明らかであろう。更に、ハードウエア、コンピュータ・ソフトウエアなどにより行われファンクションが電気信号などにおいてあるいはこれを用いて行われることが容易に理解されよう。
情報の記憶に関する特徴は、適切な記憶場所またはストアにより実現されよう。情報の処理に関する特徴は、ソフトウエアまたはハードウエアにおいて、あるいは両者の組合わせにおいて、適切なプロセッサまたは制御手段によって実現されよう。
上記のいずれかあるいは全てにおいて、本発明は、下記の形態のいずれか、あるいは一部、あるいはその全てにおいて具現され、コンピュータ・システムを動作させる方法において具現され、コンピュータ・システム自体において具現され、コンピュータ・システムを動作させる方法を実行するようプログラムされあるいは構成されるときコンピュータ・システムにおいて具現され、および(または)コンピュータ・システムを動作させる方法に従って動作するためのプログラムが記録されたコンピュータ読取り可能な記憶媒体において具現されよう。
本文に用いられるように、用語「コンピュータ・システム」は、「コンピュータ」、「システム」、「装備」、「装置」、「マシン」などの用語と互換であり得る。コンピュータ・システムは、仮想マシンであり得、あるいは仮想マシンを含み得る。
上記のいずれかあるいは全てにおいて、方法および装置の特徴および特質を含む上記の異なる特徴および特質は、適切な方法において組合わせされよう。
本発明が本文において純粋に事例として記述され、細部の修正が本発明の範囲内で可能であることが理解されよう。
本文の記述、および(適切な場合)請求の範囲および図面において開示された各特徴は、独立的に、あるいは任意の適切な組合わせにおいて提供されよう。
エージェント資料第12─コンピュータ・システム、コンピュータ読取り可能な記憶媒体および同媒体を動作させる方法、および前記システムを動作させる方法
本発明は、1つの特質において、コンパイル・コードの第1の部分からコンパイル・コードの第2の部分までリンクを生成する方法と、コードをコンパイルする方法とに関するものである。本発明は、別の特質において、コンパイル・コードの一部を削除することを許容するためコンピュータ・システムにおけるメモリを調べる方法および装置に関し、かつ特にコンパイル・コードの各セクション間にリンクが存在する場合にコンピュータ・システムにおいてコンパイル・コードを削除する方法および装置に関する。本発明は、自己修正する多重スレッド環境に対する特定の(これに限定しないが)用途を有する。望ましい実施の形態においては、本発明は、多重スレッド型の断片パッチングに関する。
自己修正環境は、コンパイル・コードのセクションが実行中に動的に作成され削除される環境である。このような環境は、エージェント資料第1に記載されている。多重スレッド環境は、幾つかのプロセスすなわちスレッドが同じ作業スペースにおいて非同期的に動作する環境である。
自己修正環境においては、コードの2つの部分間に実行の移転を可能にするため、コンパイル・コードの第1のセクションと作業スペースのどこか他の場所に置かれるコンパイル・コードの第2のセクション間にリンクが作られねばならない状況があり得る。コードの1つの部分から他の部分へ実行を移転するプロセスは、一般に、レジスタ値と共にスタックにおけるコードの第1の部分のアドレスを置き、コードの第2の部分の場所を識別するコードの中間部分へ実行を移転し、次いでコードの第2の部分へ実行を移転する多くのステップを呼出す。このように実行を移転することの問題は、比較的多くの時間が移転の実施に費やされることである。
本発明の第1の特質において、自己修正多重スレッド型コンピュータ・システムにおいてコンパイル・コードの2つの部分間にリンクを設ける方法であって、コンパイル・コードの1つの部分から他の部分へパッチを挿入することを含む方法が提供される。
コンパイル・コードの1つの部分から他の部分へパッチを提供することにより、パッチが作らなかった場合より迅速に実行が移転することができる。
パッチを挿入するステップは、コンパイル・コード内の制御移転命令を変更することを含む。制御移転命令は、ジャンプ命令または呼出し命令のような、実行を別のアドレスへ移転させる任意の命令でよい。この制御移転命令は、パッチが行われるコードの部分のアドレスを指示するように変更することができる。
制御移転命令の変更ステップは、アトミックに行われる。アトミックにとは、他のスレッドが部分的に変更される形態において変更される領域を見ることができないことを意味することが望ましい。これは、パッチを挿入するステップが1つの書込み動作として行われることを保証することにより、単一プロセッサ・システムにおいて達成される。あるいはまた、一部のプロセッサは、アトミック性を保証するよう定義される1つ以上の特殊な命令あるいは一連の特殊な命令を提供し、このような命令は単一プロセッサ・システムおよび多プロセッサ・システムにおけるアトミック性を保証するため用いられる。このように、作業スペースに影響を及ぼすかも知れない他の任意の動作が行われる前にパッチの操作が完了することを保証することができる。
本発明の第1の特質は、自己修正多重スレッド型コンピュータ・システムにおいてコンパイル・コードの2つの部分間にリンクを設ける装置であって、コンパイル・コードの1つの部分から他の部分へパッチを挿入する手段を含む装置をも提供する。
本発明の第1の特質は、実行の2つのあり得るパスを含むコードをコンパイルする方法であって、実行パスの1つに対応するコードをコンパイルすることを含み、コンパイルされたコードにおいてコードの別の部分のアドレスを指示するようにアトミックに変更することができる制御移転命令を含む方法をも提供する。
このように、特に他のパスを実行することを可能にするため、コンパイル・コードは、コードがコンパイルされた後に、コードの別の部分に対するパッチを行うことができるように構成することができる。
制御移転命令は、この制御移転命令の最も最適な形態が用いられた場合よりもそれ自体のアドレスとは更に別のアドレスを指示できるタイプであることが望ましい。このような特徴は、パッチが他の場合よりも離れたコードの部分にさせ得る。
当該方法は、制御の転送命令を含むコードの外部のセクションを形成することを含む。
本発明の第1の特質はまた、コンパイル・コードの上記方法のいずれかを実施するためのコンパイラを提供する。
ある状況では、例えば、コンパイル・コードの部分を含むコード・バッファが削除されるゆえに、あるいはコンパイル・コードの部分の付近になされた場合に家庭が有効でないことを証明するゆえに、パッチを取除くことが望ましいかあるいは必要となる。
このため、本発明の第2の特質において、自己修正する多重スレッド型コンピュータ・システムにおけるコンパイル・コードのセクションを含むメモリを調べる方法であって、コンピュータ・システムに対するパッチを識別し、このようなパッチのいずれかを指向し直すことを含む方法が提供される。当該方法は、例えば、コンパイル・コードの1つのセクションが削除されるゆえに、あるいはコンパイル・コードのセクションがもはや使用されないゆえに、実施される。パッチの指向し直すことで、コンパイル・コードのセクションなしにパッチにおいて実行を持続することを可能にする。
本発明の第2の特質は更に、自己修正多重スレッド型コンピュータ・システムにおけるコンパイル・コードを削除する方法であって、削除されるコンパイル・コードのセクションを選択し、コンパイル・コードのセクションに対するパッチを識別し、このようなパッチを指向し直し、コンパイル・コードの部分を削除することを含む方法を提供する。
このようなパッチがコンパイル・コードのアドレスへ指向されることが望ましい。このコンパイル・コードは、コードのセクションなしに実行を継続することを可能にする。コードの継続は、以降の命令の解釈を行うように構成され、あるいはディスパッチ・テーブルの移転を行うように構成される。
パッチを指向し直すステップは、パッチ動作が部分的にのみ完了されるとき他のスレッドがパッチされる場所をアクセスできないことを保証するためアトミックに行われることが望ましい。代替的な解決法は、パッチが指向しなお割れた間に全ての実行するスレッドを停止させることであるが、これはスレッドが停止される間実行時間が失われるゆえにそれほど望ましくない。
コンパイル・コードの部分へゆくパッチを識別するために、当該方法は、コンパイル・コードのセクションのアドレスのハッシュ値を計算し、コンパイル・コードのセクションに対するパッチを識別するためパッチ・ブロックのハッシュ・テーブルを調べることを含む。
有効なメモリ使用の関心では、(コード・バッファからのパッチのような)使用されないパッチは削除されるべきであり、従ってパッチと関連するオーバーヘッドを再生することができる。従って、当該方法は、コンパイル・コードのセクション外のパッチを識別し、このようなパッチを取除くことを更に含むことが望ましい。
このため、本発明の第2の特質は、コンパイル・コードのセクションが削除されるべきとき自己修正する多重スレッド型コンピュータ・システムにおけるメモリを調べる方法であって、コンパイル・コードのセクション外のパッチを識別し、このようなパッチを取除くことを含む方法をも提供する。
メモリを調べる方法は更に、
コンピュータ・システムにおけるスタックのフレームを調べ、
削除されるコンパイル・コードのセクションのアドレスの範囲内にあるリターン・アドレスをフレームが含むかどうかを識別し、
このようなリターン・アドレスが識別されるとき、フレームの内容を変更する
ステップを含むことが望ましい。
このように、本発明の第2の特質は、コンパイル・コードのセクションを削除させるため自己修正する多重スレッド型コンピュータ・システムにおけるメモリを調べる方法であって、
コンピュータ・システムにおけるスタックのフレームを調べ、
コンパイル・コードのセクションのアドレスの範囲内にあるリターン・アドレスをフレームが含むかどうかを識別し、
このようなリターン・アドレスが見出されると、フレームの内容を変化し、
コンパイル・コードのセクションに対するパッチを識別し、
このようなパッチを指向し直す
ステップを含む方法をも提供する。
このように、本発明の第2の特質は、エージェント資料第6に記載される本発明の1つ以上の特質の1つ以上の特徴を含むことが望ましい。
当該方法は更に、コンパイル・コードのセクション外のパッチを識別し、このようなパッチを取除くことを含むことが望ましい。
フレームの内容の変更および(または)パッチの指向し直しが、例えば、削除されたコードへのパッチまたは戻りが実行中に見出されるときではなく、コンパイル・コードのセクションの削除の時間に行われることが望ましい。
本発明の第2の特質は、自己修正する多重スレッド型コンピュータ・システムにおけるメモリを調べる装置であって、コンパイル・コードの部分に対するパッチを識別する手段と、このようなパッチを指向し直す手段とを含む装置をも提供する。このように、実行は、コンパイル・コードのセクションのないパッチにおいて継続する。
本発明の第2の特質は、自己修正する多重スレッド型コンピュータ・システムにおいてコンパイル・コードを削除する装置であって、削除されるコンパイル・コードのセクションを選択する手段と、コンパイル・コードのセクションに対するパッチを識別する手段と、このようなパッチを指向し直す手段と、コンパイル・コードのセクションを削除する手段とを含む装置をも提供する。
当該装置は、コンパイル・コードのセクションのアドレスのハッシュ値を計算する手段と、コンパイル・コードのセクションに対するパッチを識別するためパッチ・ブロックのハッシュ値を調べる手段とを含むことが望ましい。
当該装置は更に、コンパイル・コードのセクション外のパッチを識別する手段と、このようなパッチを取除く手段とを含むことが望ましい。
本発明の第2の特質は、コンパイル・コードのセクションを削除させるため自己修正する多重スレッド型コンピュータ・システムにおいてメモリを調べる装置であって、コンパイル・コードのセクション外のパッチを識別する手段と、このようなパッチを取除く手段とを含む装置をも提供する。
1つの特質の特徴は他の特質に適用され、同様に、方法の特徴は装置に適用され、およびその逆も真である。
本発明の望ましい特徴については、純粋に事例として、添付図面に関して次に記述する。
下記の考察は、先に述べた本発明のいずれかおよび全て、および本発明の特質に適用する。
エージェント資料第1に記載されるように、ダイナミック・コンパイルが、方法全体ではなくコンパイルされる方法においてコードの断片を結果として生じる。コンパイルされる当該断片は、例えばソース・プログラムのランタイム表示および実行履歴情報から決定されるような主パスに対応する。以降の段階において、コードの他の断片は、例えば、主パスについてなされた元の仮定が正しくないことを証明する場合にコンパイルされる。
一例として、コードが条件付き制御移転命令(条件付き分岐命令または条件付き呼出し命令のような)を含むならば、コンパイラは、移転が行われ易いかどうかを判定し、次いで最も後続し易いパス(主パス)に対応するコードをコンパイルする。しかし、実行中は、実際には他のパスによるべきものと判定される。このような状況においては、移転命令に遭遇すると、実行は「グルー・コード」として知られるコードの部分へ移る。追従されるパスがコンパイルされなかったならば、グルー・コードがとられるべきパスにおける以降の命令の解釈を生じる。解釈されたパスがある回数だけ追従されると、コンパイラがコードの部分がコンパイルの価値があるものと判定し、次いでコードのコンパイル・バージョンを生じることになる。
これにより、自己修正環境が生成され、これにおいては、コンパイル・コードの部分が実行中に動的に生成され(あるいは、削除され)る。このような環境は、典型的に、幾つかのプロセスが同じ作業スペースにおいて同時に動作する多重スレッド型である。
望ましい実施の形態によれば、このような状況では、コードの新たにコンパイルされるセクションへのコードの元のセクションにおける移転命令から、パッチが行われる。このパッチは、コードの新たにコンパイルされるセクションのアドレスへ直接コードを移転させるように、転送命令を修正する。パッチが行われることを許容するため、コンパイルの時点において、必要ならば、パッチが後の段階で挿入できるようにコンパイル・コードが構成される。これは、例えば、元のコンパイル・コードに対して必要であるよりも長い形態の移転命令をコンパイルすることによって行われ、コードの更に離れた部分への転送を後の段階で行わせる。
パッチはまた、必要ならば、コードの新たにコンパイルされるセクションから再びコードの元のセクションに対しても行われる。
多重スレッド環境においては、先に述べたようなパッチングがアトミックに、すなわち単一命令として行われる必要があり、従って他のスレッドが複数の変更形態において変更される領域を見えないことに注意すべきである。従って、コードは、パッチをアトミックに行うことができるように構成される。アトミック性を保持するため、パッチングは1回の書込み操作として行うことができる。あるいはまた、あるプロセッサは、アトミック性を保証する1つ以上の特殊な命令または一連の特殊命令を提供する。多プロセッサ環境においては、パッチされる場所のアドレスは、おそらくは、多くのプロセッサにおいて、(アドレスが動作サイズの整数倍になるように)パッチ・データのサイズに従って整合されることを必要とする。
次に第1の事例について、図12Aおよび図12Bに関して記述する。この事例は、非ネイティブ・コードが呼出し命令を含む場合に関する。
図12Aにおいて、第1のコード部分23002は、アドレスaaaに呼出し命令23003を有する。元の非ネイティブ・コードでは、この呼出し命令はサブルーチン「バー」を呼出した。コンパイルの間、このサブルーチン「バー」は、(例えば、バーのどのバージョンが使用されるかが確かでなかったゆえに)コンパイルされなかったが、その代わり、バーが呼出される状況を処理するため外部コード23004の部分が作成された。呼出し命令23003は、外部コードにおけるアドレスabdを指す。このアドレスでは、実行をグルー・コードの部分へ移す呼出し命令23005が存在する。グルー・コードは、バーのコンパイル・バージョンが存在しなければ、サブルーチン・バーを翻訳させる。このため、呼出し命令23003が実行されると、グルー・コードが呼出される。
次に図12Bにおいて、ある後の時点に、サブルーチン・バーがコンパイルされる。バーのコンパイル・バージョンは、当例ではアドレスxyzにコンパイル・コード23006として格納される。次に、パッチ23008は、直接にあるいは外れたコード23004を介して、コード断片23002からコンパイル・コード23006に対して行われる。
図12Bは、パッチが直接行われる場合を示している。この場合、呼出し命令23003が、直接アドレスxyzを指すように変更される。これは、呼出し命令23003がアドレスxyzにアトミックにパッチ可能である形態でコンパイルされたならば可能である。
図12Cは、アウトライア23004を介してパッチが行われる場合を示している。この場合、アウトライアにおけるアドレスabcのジャンプ命令23007がアドレスxyzへジャンプするようにセットされ、呼出し命令23003はアドレスabcを指すように変更される。あるいはまた、呼出し命令23003はアドレスabcを恒久的に指すことができ、この場合は、ジャンプ命令23007が(グルー・コードを呼出すため)最初アドレスabdを指し、次に(パッチを行うため)アドレスxyzを指すように変更される。
いずれ場合も、アドレスxyzを指すように変更される命令は、比較的離れたアドレスへの転送を許す長い形態である。このため、コードをコンパイルするとき、そのためのアローアンスがなされなければならない。例えば、呼出し命令23003は、この命令がアドレスabdを指すだけの場合に必要なよりも長いバージョンになるようにすることができ、命令を将来における更に離れたアドレスを指すように変更させる。命令がこれが指すアドレスをアトミックに変更させ得るタイプであることもまた保証されねばならない。
サブルーチン・バーのコンパイル・バージョンの終りにおいて、戻り命令が制御を直接コード23002へ戻るよう移転させる。パッチがなされると、実行はコンパイル・コード23002からコンパイル・コード23006へ、またグルー・コードを必要とせずに再び戻るように移転し得る。
各パッチ時に、パッチに関する情報は、パッチが始まるコード・バッファ(メモリの領域)に記憶されるパッチ・ブロックに記録される。
図12Dは、コード23012の部分が条件付き分岐命令23013をアドレスaaaに含む事例を示している。コンパイルの間、コンパイラは、分岐命令が続いて起こりにくいと判定し、従って元の(非ネイティブな)分岐命令が指示したアドレスにおける命令が完了しなかったと判定した。このような仮定が間違っている状況に対処するため、コンパイラはアウトライア23014を挿入した。最初に、命令23013がアウトライアにおけるアドレスabdを指示する。このアドレスには、グルー・コードに対する呼出しが存在する。グルー・コードは、元の(非ネイティブな)分岐命令が指示したアドレスに命令を解釈させる。
後の段階において、例えばこれらの命令が実行されにくいという最初の仮定が正しくないことを証明したゆえに、分岐命令が指示する命令がコンパイルされる。これら命令のコンパイル・バージョンが、当例ではアドレスxyzに示される。パッチは、直接アドレスxyzのコンパイル・コードに対してなされる。これは、アドレスabcのジャンプ命令をアドレスxyzを指すように変更することにより、また命令23013をアドレスabcを指すように変更することによって行われる。あるいはまた、命令23013は恒久的にアドレスabcを指すことができ、このアドレスのジャンプ命令は最初にabdを指すことができ、次にxyzを指すように変更することができる。再び、コンパイル時に、パッチを行うように変更される命令は、パッチがアトミックに行うことができるようにセットアップされる。
このように、上記の手法の重要な特質が、パッチが後で挿入されるようにコンパイル・コードが構成されることであることが判る。これは、2つ以上の可能な実行パスがあり1つのパスのみがコンパイルされる場合、実行を比較的離れたアドレスへ移転するようアトミックに修正できる(呼出しまたはジャンプ命令のような)制御転送命令が存在することを保証することによって行うことができる。
先に述べたアウトライアもまた、コードのコンパイル・バージョンから制御を転送する前にレジスタおよび状態を更新するコードを含む。このようなアウトライアについては、エージェント資料第3に更に詳細に記載されている。
ある状況においては、行われたパッチを取除くことが望ましいか、あるいは必要である。例えば、ある段階では、コンパイル・コードの一部を含むコード・バッファを削除されることがある。これは、コード・バッファが他の場所で使用するため要求されるゆえか、あるいはコンパイルの間行われた仮定が妥当しないゆえである。また、特に制限されたメモリ環境で使用するときに、将来必要となることが予期されないコードを除去することが望ましい。コード・バッファに対するパッチが存在する場合、コード・バッファの削除は、すでに存在しないコードの部分に対するパッチを残すことになる。
コード・バッファの削除時に、バッファに出入りするパッチがあるかどうか知るために、コード・バッファが調べられる。コード・バッファに入るパッチは、例えば、パッチをグルー・コードまたはアウトライア・コードの部分へ送り直すことによって、バッファを削除することなく実行を継続させるように指向し直される。バッファから出されるパッチに関するデータ構造は、オーバーヘッドを再利用するために除去される。
先に述べたように、パッチが行われるとき、パッチに関する情報はパッチ・ブロックに格納される。各パッチ・ブロックは、これが関連するパッチの「から」アドレスおよび「へ」アドレスを与える。このパッチ・ブロックは、パッチが発生するコード・バッファにチェーンとして格納される。従って、各コード・バッファは、このブロックからのパッチに関してパッチ・ブロックのチェーンを有する。パッチ・ブロックは同時に、パッチがどれに対するものかに従って、第2のチェーン上で一緒に連鎖させられる。同時に、種々のチェーンに対するアクセスを許容するハッシュ・テーブルが維持される。ハッシュ・テーブルは、任意の機械的ファンクションに従って要素が分類される多数のブロックのチェーンからなるデータ構造である。ハッシュ・テーブルについては、エージェント資料第4に更に詳細に記述されている。
削除されるべきバッファへいくパッチを見出すために、ハッシュは(ハッシュ・テーブルと同じ数学ファンクションを用いて)、パッチがパッチ「へ」に関するパッチ・ブロックを含むチェーンを見出すために転送を生じるバッファのアドレスから作られる。チェーンにおけるパッチ・ブロックは、削除されるバッファに対するハッシュと関連するかどうかを知るために調べられる。このようなパッチ・ブロックが見出されると、これが関連するパッチが、例えばグルー・コードまたはアウトライア・コードの部分へ送り直され、パッチ・ブロック自体はチェーンから除去される。グルー・コードは、例えば、以降の命令の解釈により、あるいはコンパイル・コードの別の部分へジャンプすることによって、ある一般的な検査を行い、実行のフローの継続を生じるように意図される。グルー・コードの動作の更なる論議については、エージェント資料第1に見出すことができる。
削除されるバッファからのパッチが存在するかどうかも決定することができる。これは、先に述べた第1のチェーンを用いて削除されるバッファに格納されたパッチ・ブロックのチェーンを調べることによって行うことができる。このチェーンにおけるパッチ・ブロックが調べられ、まだ削除されていないパッチが存在するならば、このパッチが削除される。このように、パッチと関連するオーバーヘッドを再利用することができる。
図12Eにおいて、コード・バッファが削除されるときパッチを除去する方法が示される。ステップ23020において、あるコード・バッファが削除されるべきことが決定される。ステップ23022において、バッファのアドレスについてハッシュが行われる。ステップ23024において、パッチ・ブロックがハッシュ・テーブルの「への」チェーンから選択される。ステップ23026において、パッチ・ブロックから、削除されるべきバッファに対するパッチ・ブロックが存在するかどうかが判定される。このようなパッチが存在するならば、ステップ23028において、パッチが例えばグルー・コードの部分のアドレスへ再指向され、パッチ・ブロックがハッシュ・テーブルにおけるチェーンから除去される。ステップ23030において、パッチ・ブロックがチェーンにおける最後のものかどうかが判定される。もしそうでなければ、パッチ・ブロックに対する選択およびテストのシーケンスが反復される。
コード・バッファに対する全てのパッチについてハッシュ・テーブルが調べられると、コード・バッファから出すパッチについて調べられる。ステップ23032において、削除されるべきコード・バッファにおける「からの」(ジャンプ・ソース)チェーンからのパッチ・ブロックが選択される。ステップ23034において、「への」バッファ・アドレスからハッシュが行われる。ステップ23036において、当該パッチに対する「への」バッファに関するハッシュ・チェーンからパッチ・ブロックが除去される。ステップ23038において、パッチ・ブロックが「からの」チェーンにおける最後のものであるかどうかが決定され、もしそうでなければ、全てのパッチ・ブロックが調べられるまで、チェーンにおける他のパッチ・ブロックに対するシーケンスが反復される。最後に、ステップ23039において、コード・バッファが削除される。
別の事例において、コードが格納されるコード・バッファが削除されるからではなく、例えばコンパイルの間にされた仮定がもはや有効でないゆえにコンパイル・コードがもはや使用されないため、コンパイル・コードへの/からのパッチが除去される。例えば、潜在的にポリモルフィックな方法が最後であると仮定されたとき、およびパッチがこの方法のコンパイル・バージョンに対してなされたとき、この方法が最後でないことが後で発見されるならば、コンパイル・バージョンに対するパッチは除去されねばならない。これについては、エージェント資料第9を参照されたい。
図12Fにおいて、コンパイル・コード23072の部分がポリモルフィックである方法に対する呼出しを含む。呼出される方法は、最初にコンパイルされない。呼出し命令23073は、外部コード23074の部分におけるアドレスabcを指示する。このアドレスには、グルー・コードに対する呼出しがある。グルー・コードは、方法のどのバージョンを使用するかを決定し、このバージョンを実行させる。
後で、当該方法が最後であるという仮定がなされ、この方法がコンパイルされる。方法のコンパイル・コードは、アドレスxyzに示される。パッチ23078は、方法のコンパイル・バージョンに対して直接なされる。これは、命令23073をアドレスxyzを直接指すように変更することによってなされる。コード23072への戻り23079が行われる。
更に後で、前記方法が最後のものであったという仮定が誤りであることが判る。このような状況においては、方法のどのバージョンが用いられるべきか確かでないため、パッチ23028が除去される。次に、命令23073がアドレスabdを指すように変更される。このアドレスには、ディスパッチ・テーブルに対する呼出しがある。ディスパッチ・テーブルは、方法のどのバージョンが使用されるべきか、およびコンパイル・バージョンが存在するかを決定する。コンパイル・バージョンが存在するならば、実行はこのバージョンへジャンプし、もしそうでなければ、実行は方法を解釈させたグルー・コードへジャンプする。
コンパイル・コードを削除する手法は、エージェント資料第6に記載される「スタック・ウォーキング」手法、および(または)本文に述べた他の手法と組合わせて用いられる。
図12Gに関して、当該実施の形態を実施する装置が記述される。図12Gは、非ネイティブ・コード23042をホスト・コンピュータ23044上で走らせる仮想マシン23040を含むコンピュータ・システムを示している。この仮想マシンは、制御手段23046と、インタプリタ23048と、コンパイラ23050と、グルー・コード23054と、削除手段23056とを含んでいる。ホスト・コンピュータは、プロセッサ23058と、コード・バッファ23062を含むメモリ23060とを含んでいる。コード・バッファ23062は、コンパイラによりコンパイルされたコードを含む。コンパイラは、先に述べた方法のどれかでコードをコンパイルするためのものである。図12Gにも示されるのは、コンパイル・コードの1つの部分から他の部分へパッチを挿入するためのパッチング手段23055である。このパッチング手段23055は、先に述べた方法のいずれかでパッチを行うためのものである。
動作において、制御手段23046は、あるとき、コード・バッファ23062が削除されるべきことを決定する。この制御手段は、先に述べた方法で、ハッシュ・テーブル23052を調べてコード・バッファに入れる/から出すパッチを識別する。コード・バッファから出すパッチを見出すと、制御手段はこれらのパッチを例えばグルー・コード23054へ再指向する。コード・バッファから出すパッチを見出すと、制御手段はこれらパッチに関するパッチ・ブロックを除去する。次に、制御手段は、削除手段23056にコード・バッファを削除するように指令する。
図12Gに示された仮想マシンが一般にソフトウエアの形態でありホスト・コンピュータ23044のメモリに格納されることが理解されよう。
本発明が純粋に事例として本文に記述され、細部の修正が本発明の範囲内で可能であることが理解されよう。
本文の記述、および(適切な場合)請求の範囲および図面に開示された各特徴は、独立的に、あるいは適切な組合わせにおいて提供されよう。
上記のいずれかまたは全てにおいて、本発明の幾つかの特徴はコンピュータ・ソフトウエアを用いて実現された。しかし、当業者には、これらの特徴がハードウエア押ハードウエアとソフトウエアの組合わせを用いて実現されることが無論明らかであろう。更に、ハードウエア、コンピュータ・ソフトウエアなどにより行われるファンクションが電気信号などにおいてあるいはこれを用いて行われることが容易に理解されよう。
情報の格納に関する特徴は、適切な記憶場所またはストアによって実現されよう。情報の処理に関する特徴は、ソフトウエアまたはハードウエアにおいて、あるいは両者の組合わせにおいて、適切なプロセッサまたは制御手段により実現されよう。
上記のいずれかあるいは全てにおいて、本発明は、下記の形態のいずれか、あるいは一部、あるいはその全てにおいて具現されよう。すなわち、本発明は、コンピュータ・システムを動作させる方法において具現され、コンピュータ・システム自体において具現され、コンピュータ・システムを動作させる方法を実行するようプログラムされあるいは実行するためのコンピュータ・システムにおいて具現され、および(または)コンピュータ・システムを動作させる方法に従って動作するためのプログラムが記録されたコンピュータ読取り可能な記憶媒体において具現されよう。
本文に用いられるように、用語「コンピュータ・システム」は、「コンピュータ」、「システム」、「装備」、「装置」、「マシン」などの用語と互換であり得る。 コンピュータ・システムは、仮想マシンであり得、あるいは仮想マシンを含み得る。
上記のいずれかあるいは全てにおいて、方法および装置の特徴および特質を含む上記の異なる特徴および特質は、任意の適切な方法において組合わせることができる。
本発明が本文において純粋に事例として記述され、細部の修正が本発明の範囲内で可能であることが理解されよう。
本文の記述、および(適切な場合)請求の範囲および図面に開示された各特徴は、独立的に、あるいは適切な組合わせにおいて提供されよう。
先に使用された用語のあるものは、ジャバ言語およびジャバ・タイプの言語に特有のものである。本発明およびその実施の形態の種々の特質もまた、他の言語の使用において適用可能である。本文に用いた用語が他の言語に関する類似のおよび(または)対応する特徴を含むように広義に解釈されるべきことが理解されよう。
本発明が本文において純粋に事例として記述され、細部の修正が本発明の範囲内で可能であることが理解されよう。
本文の記述、および(適切な場合)請求の範囲および図面に開示された各特徴は、独立的に、あるいは適切な組合わせにおいて提供されよう。
本発明のいずれかの1つの特質の特徴は、本発明あるいは本文に記述した他の発明の他の特質に適用されよう。同様に、方法の特徴は装置の特徴に適用され、その逆も真である。

Claims (9)

  1. コンピュータ・システムにおける第1のクラスの方法を呼出す方法であって、
    前記方法がファイナルであると仮定する前記第1のクラスへの呼出しをコンパイリング・システムによりコンパイルするステップと、
    第2のクラスの出現を決定し、そしてさらに前記第2のクラスが前記第1のクラスの方法のインスタンスを含むか否かを決定するステップと、
    前記第2のクラスにおける方法のインスタンスが前記第1のクラスの方法をオーバーライドしているか否かを決定するステップと、
    前記第2のクラスにおける方法のインスタンスが前記第1のクラスの方法をオーバーライドしているか否かのさらなる決定に応答して前記第1のクラスの方法の前記コンパイルされたコードを変更するステップと、
    前記変更されたコンパイルされたコードに従って前記コンピュータ・システムを動作するステップと、
    を含む方法。
  2. 前記第1のクラスの方法をファイナルとしてマーキングするステップをさらに含む、請求項1に記載の方法。
  3. 前記第1のクラスの方法が前記コンパイルコードを変更する前にファイナルであるか否かを決定するステップをさらに含む、請求項1に記載の方法。
  4. 前記第2のクラスが有効であるか否かを決定するステップをさらに含む、請求項1に記載の方法。
  5. 前記第2のクラスが有効でない場合は例外にするステップをさらに含む、請求項4に記載の方法。
  6. 前記コンパイルするステップは前記呼出しのコードを含む、請求項1に記載の方法。
  7. 前記コード最適化するステップはパッチを作成するステップを含む、請求項6に記載の方法。
  8. 前記コンパイルされたコードを変更するステップはパッチを取り消すステップを含む、請求項7に記載の方法。
  9. 前記コンパイルされたコードを変更するステップはコードを削除するステップを含む、請求項1に記載の方法。
JP2010156628A 1998-11-16 2010-07-09 クラスが有するメソッドを呼出して実行するコンピュータ・システムが行う方法 Expired - Lifetime JP4783471B2 (ja)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GBGB9825102.8A GB9825102D0 (en) 1998-11-16 1998-11-16 Computer system
GB9825102.8 1998-11-16

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
JP2000582880A Division JP2003526135A (ja) 1998-11-16 1999-03-16 コンピュータ・システム、コンピュータ読取り可能な記憶媒体および同媒体を動作させる方法、およびコンピュータ・システムを動作させる方法

Publications (2)

Publication Number Publication Date
JP2010267291A true JP2010267291A (ja) 2010-11-25
JP4783471B2 JP4783471B2 (ja) 2011-09-28

Family

ID=10842535

Family Applications (2)

Application Number Title Priority Date Filing Date
JP2000582880A Withdrawn JP2003526135A (ja) 1998-11-16 1999-03-16 コンピュータ・システム、コンピュータ読取り可能な記憶媒体および同媒体を動作させる方法、およびコンピュータ・システムを動作させる方法
JP2010156628A Expired - Lifetime JP4783471B2 (ja) 1998-11-16 2010-07-09 クラスが有するメソッドを呼出して実行するコンピュータ・システムが行う方法

Family Applications Before (1)

Application Number Title Priority Date Filing Date
JP2000582880A Withdrawn JP2003526135A (ja) 1998-11-16 1999-03-16 コンピュータ・システム、コンピュータ読取り可能な記憶媒体および同媒体を動作させる方法、およびコンピュータ・システムを動作させる方法

Country Status (7)

Country Link
US (13) US6862728B2 (ja)
EP (1) EP1208425B1 (ja)
JP (2) JP2003526135A (ja)
AU (1) AU2846999A (ja)
DE (1) DE69939495D1 (ja)
GB (1) GB9825102D0 (ja)
WO (1) WO2000029937A2 (ja)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102955735A (zh) * 2011-08-24 2013-03-06 英业达股份有限公司 基本输入输出系统测试方法

Families Citing this family (559)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
EP0825506B1 (en) 1996-08-20 2013-03-06 Invensys Systems, Inc. Methods and apparatus for remote process control
JPH11296381A (ja) * 1998-04-08 1999-10-29 Matsushita Electric Ind Co Ltd 仮想マシン及びコンパイラ
US7260817B2 (en) * 1999-07-09 2007-08-21 International Business Machines Corporation Method using array range check information for generating versioning code before a loop for execution
GB9825102D0 (en) * 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
US6842853B1 (en) * 1999-01-13 2005-01-11 Sun Microsystems, Inc. Thread suspension system and method
US7013454B2 (en) * 1999-02-22 2006-03-14 Sun Microsystems, Inc. Thread suspension system and method using trapping instructions
US6308319B1 (en) 1999-02-22 2001-10-23 Sun Microsystems, Inc. Thread suspension system and method using trapping instructions in delay slots
US7283991B1 (en) * 1999-03-11 2007-10-16 Microsoft Corporation Caching system for path search optimization
US7353163B2 (en) * 1999-04-27 2008-04-01 Transitive Limited Exception handling method and apparatus for use in program code conversion
WO2000070417A1 (en) * 1999-05-17 2000-11-23 The Foxboro Company Process control configuration system with parameterized objects
US7089530B1 (en) * 1999-05-17 2006-08-08 Invensys Systems, Inc. Process control configuration system with connection validation and configuration
US6788980B1 (en) * 1999-06-11 2004-09-07 Invensys Systems, Inc. Methods and apparatus for control using control devices that provide a virtual machine environment and that communicate via an IP network
US7150005B2 (en) * 1999-07-02 2006-12-12 Beryl Technical Assays, Llc Method and system for global constant management for memory
US7882501B1 (en) * 1999-08-13 2011-02-01 Oracle America, Inc. System and method for enabling dynamic modifed class reloading in an application server environment
US7096238B2 (en) 1999-08-19 2006-08-22 Sun Microsystems, Inc. Dynamic feedback for determining collection-set size
US6983350B1 (en) 1999-08-31 2006-01-03 Intel Corporation SDRAM controller for parallel processor architecture
GB9921720D0 (en) * 1999-09-14 1999-11-17 Tao Group Ltd Loading object-oriented computer programs
US6880152B1 (en) * 1999-10-13 2005-04-12 Transmeta Corporation Method of determining a mode of code generation
US6532509B1 (en) 1999-12-22 2003-03-11 Intel Corporation Arbitrating command requests in a parallel multi-threaded processing system
US6694380B1 (en) 1999-12-27 2004-02-17 Intel Corporation Mapping requests from a processing unit that uses memory-mapped input-output space
US6661794B1 (en) 1999-12-29 2003-12-09 Intel Corporation Method and apparatus for gigabit packet assignment for multithreaded packet processing
US7480706B1 (en) * 1999-12-30 2009-01-20 Intel Corporation Multi-threaded round-robin receive for fast network port
US6952824B1 (en) * 1999-12-30 2005-10-04 Intel Corporation Multi-threaded sequenced receive for fast network port stream of packets
US7080359B2 (en) * 2002-01-16 2006-07-18 International Business Machines Corporation Stack unique signatures for program procedures and methods
US6904594B1 (en) * 2000-07-06 2005-06-07 International Business Machines Corporation Method and system for apportioning changes in metric variables in an symmetric multiprocessor (SMP) environment
EP1176482B1 (de) * 2000-07-27 2004-12-22 Abb Research Ltd. Verfahren und Computerprogramm zum Herstellen einer Regelung oder Steuerung
US6658656B1 (en) * 2000-10-31 2003-12-02 Hewlett-Packard Development Company, L.P. Method and apparatus for creating alternative versions of code segments and dynamically substituting execution of the alternative code versions
US6813760B1 (en) * 2000-11-30 2004-11-02 Nortel Networks Limited Method and a tool for estimating probability of data contention in a multi-processor shared-memory system
US8458754B2 (en) 2001-01-22 2013-06-04 Sony Computer Entertainment Inc. Method and system for providing instant start multimedia content
US7461148B1 (en) * 2001-02-16 2008-12-02 Swsoft Holdings, Ltd. Virtual private server with isolation of system components
US8219620B2 (en) 2001-02-20 2012-07-10 Mcafee, Inc. Unwanted e-mail filtering system including voting feedback
US6892212B2 (en) * 2001-03-22 2005-05-10 International Business Machines Corporation Method for efficient garbage collection based on object type
CA2346766A1 (en) * 2001-05-07 2002-11-07 Ibm Canada Limited-Ibm Canada Limitee Efficient locking for thread-safe self-modifying code
US6760726B1 (en) * 2001-06-19 2004-07-06 Ants Software System and method of managing concurrent operations on linked lists
US7082597B2 (en) * 2001-06-20 2006-07-25 Sun Microsystems, Inc. Representation of objects in a Java programming environment
US6980997B1 (en) * 2001-06-28 2005-12-27 Microsoft Corporation System and method providing inlined stub
US20030005408A1 (en) * 2001-07-02 2003-01-02 Pradeep Tumati System and method for creating software modifiable without halting its execution
JP3790683B2 (ja) * 2001-07-05 2006-06-28 インターナショナル・ビジネス・マシーンズ・コーポレーション コンピュータ装置、その例外処理プログラム及びコンパイル方法
US6851006B2 (en) * 2001-08-25 2005-02-01 International Business Machines Corporation Interruption handler-operating system dialog for operating system handling of hardware interruptions
US7350194B1 (en) * 2001-09-24 2008-03-25 Oracle Corporation Techniques for debugging computer programs involving multiple computing machines
JP4272371B2 (ja) * 2001-11-05 2009-06-03 パナソニック株式会社 デバッグ支援装置、コンパイラ装置、デバッグ支援プログラム、コンパイラプログラム、及びコンピュータ読取可能な記録媒体。
US6996814B2 (en) * 2001-11-14 2006-02-07 Sun Microsystems, Inc. Method and apparatus for dynamically compiling byte codes into native code
US7069546B2 (en) * 2001-12-03 2006-06-27 Corrigent Systems Ltd. Generic framework for embedded software development
JP2003196553A (ja) * 2001-12-27 2003-07-11 Seiko Epson Corp 会員管理サーバシステム、そのプログラム及び会員管理方法
SE521753C2 (sv) * 2002-02-08 2003-12-02 Xelerated Ab Förfarande och system för att uppfylla realtidskrav för en dataprocessor
US6735756B1 (en) * 2002-02-22 2004-05-11 Xilinx, Inc. Method and architecture for dynamic device drivers
US7065760B2 (en) * 2002-02-28 2006-06-20 Sun Microsystems, Inc. Reducing the memory footprint of applications executed in a virtual machine
US7421478B1 (en) * 2002-03-07 2008-09-02 Cisco Technology, Inc. Method and apparatus for exchanging heartbeat messages and configuration information between nodes operating in a master-slave configuration
US20030182653A1 (en) * 2002-03-22 2003-09-25 Giuseppe Desoli Systems and methods for verifying correct execution of emulated code via dynamic state verification
AU2003213927A1 (en) * 2002-03-29 2003-10-13 Research In Motion Limited System and method for object oriented interface checking and method dispatching
US7379860B1 (en) 2002-03-29 2008-05-27 Cypress Semiconductor Corporation Method for integrating event-related information and trace information
US20030187911A1 (en) * 2002-04-01 2003-10-02 Michael Abd-El-Malek Method and apparatus to facilitate recovering a thread from a checkpoint
US7587465B1 (en) * 2002-04-22 2009-09-08 Cisco Technology, Inc. Method and apparatus for configuring nodes as masters or slaves
WO2003091874A2 (en) * 2002-04-25 2003-11-06 Koninklijke Philips Electronics N.V. Automatic task distribution in scalable processors
US7020870B2 (en) * 2002-05-15 2006-03-28 Sun Microsystems, Inc. Dynamic size for language variables
JP3956113B2 (ja) * 2002-06-13 2007-08-08 インターナショナル・ビジネス・マシーンズ・コーポレーション データ処理装置及びプログラム
US7506323B2 (en) * 2002-06-18 2009-03-17 Panasonic Corporation Program execution processing terminal device, program execution processing method, and program
WO2004001584A2 (en) * 2002-06-24 2003-12-31 Ante Vista Gmbh A method for executing structured symbolic machine code on a microprocessor
US20040003383A1 (en) * 2002-06-28 2004-01-01 Microsoft Corporation Stripping of unnecessary information from source code
US6970985B2 (en) * 2002-07-09 2005-11-29 Bluerisc Inc. Statically speculative memory accessing
US20040010779A1 (en) * 2002-07-10 2004-01-15 Di Loreto Michael A. Multi-module interpreter
US7036057B2 (en) * 2002-07-11 2006-04-25 Mediatek Inc. Range splitting read/write methods for CD-MRW
US7047488B2 (en) 2002-07-19 2006-05-16 Open Invention Network Registry driven interoperability and exchange of documents
US7346895B2 (en) * 2002-07-31 2008-03-18 International Business Machines Corporation Method of tracing data collection
US7296257B1 (en) * 2002-08-01 2007-11-13 Tymesys Corporation Techniques for exception handling by rewriting dispatch table elements
US20040040029A1 (en) * 2002-08-22 2004-02-26 Mourad Debbabi Method call acceleration in virtual machines
US6999980B2 (en) * 2002-08-23 2006-02-14 Sun Microsystems, Inc. Eliminating write barriers for young objects
TWI336848B (en) * 2002-08-26 2011-02-01 Interdigital Tech Corp Wireless transmit/receive unit and method for providing a communication path between a plurality of operating systems in a wireless device
US20040044988A1 (en) * 2002-08-29 2004-03-04 Schene Christopher Robin Generation of compiled code for simulator speed up
US7367022B2 (en) * 2002-09-05 2008-04-29 Intel Corporation Methods and apparatus for optimizing the operating speed and size of a computer program
US7953588B2 (en) * 2002-09-17 2011-05-31 International Business Machines Corporation Method and system for efficient emulation of multiprocessor address translation on a multiprocessor host
US9043194B2 (en) * 2002-09-17 2015-05-26 International Business Machines Corporation Method and system for efficient emulation of multiprocessor memory consistency
US8108843B2 (en) * 2002-09-17 2012-01-31 International Business Machines Corporation Hybrid mechanism for more efficient emulation and method therefor
US7765532B2 (en) * 2002-10-22 2010-07-27 Oracle America, Inc. Inducing concurrency in software code
US7603664B2 (en) * 2002-10-22 2009-10-13 Sun Microsystems, Inc. System and method for marking software code
US7346902B2 (en) * 2002-10-22 2008-03-18 Sun Microsystems, Inc. System and method for block-based concurrentization of software code
US7178132B2 (en) * 2002-10-23 2007-02-13 Microsoft Corporation Forward walking through binary code to determine offsets for stack walking
US7069279B1 (en) * 2002-11-04 2006-06-27 Savaje Technologies, Inc. Timely finalization of system resources
US6999979B2 (en) * 2002-11-05 2006-02-14 Sun Microsystems, Inc. Efficient encoding of references into a collection set
US7035884B2 (en) * 2002-11-05 2006-04-25 Sun Microsystems, Inc. Placement of allocation trains in the train algorithm
US7539713B2 (en) 2002-11-05 2009-05-26 Sun Microsystems, Inc. Allocation of likely popular objects in the train algorithm
US7188129B2 (en) 2002-11-15 2007-03-06 Sun Microsystems, Inc. Merging trains in a collector based on the train algorithm
US7209935B2 (en) * 2002-11-27 2007-04-24 Sun Microsystems, Inc. Avoiding remembered-set maintenance overhead for memory segments known to be in a collection set
US7085790B2 (en) * 2002-12-06 2006-08-01 Sun Microsystems, Inc. Advancing cars in trains managed by a collector based on the train algorithm
US7024437B2 (en) * 2002-12-06 2006-04-04 Sun Microsystems, Inc. Better placement of objects reachable from special objects during collection based on the train algorithm
US7069280B2 (en) 2002-12-06 2006-06-27 Sun Microsystems, Inc. Collection-tick mechanism for a collector based on the train algorithm
US7031990B2 (en) 2002-12-06 2006-04-18 Sun Microsystems, Inc. Combining external and intragenerational reference-processing in a garbage collector based on the train algorithm
US7143124B2 (en) 2002-12-06 2006-11-28 Sun Microsystems, Inc. Detection of dead regions during incremental collection
US7194744B2 (en) * 2002-12-17 2007-03-20 International Business Machines Corporation System and method for dynamic exception handling using an external exception handler
FR2849229B1 (fr) * 2002-12-18 2005-02-25 Trusted Logic Procede de compactage de programme par suppression dynamique de code
US7983239B1 (en) 2003-01-07 2011-07-19 Raytheon Bbn Technologies Corp. Systems and methods for constructing a virtual model of a multi-hop, multi-access network
US7146390B2 (en) 2003-02-24 2006-12-05 Sun Microsystems, Inc. Staging the processing of remembered-set entries as part of collection based on the train algorithm
US7069281B2 (en) 2003-02-24 2006-06-27 Sun Microsystems, Inc. Efficient collocation of evacuated objects in a copying garbage collector using variably filled local allocation buffers
US7096329B2 (en) * 2003-02-27 2006-08-22 Sun Microsystems, Inc. Better placement of objects promoted into a generation managed by the train algorithm
JP3924787B2 (ja) * 2003-02-27 2007-06-06 ソニー株式会社 記録装置、ファイル管理方法、ファイル管理方法のプログラム、ファイル管理方法のプログラムを記録した記録媒体
US7062519B2 (en) * 2003-02-27 2006-06-13 Sun Microsystems, Inc. Incremental scanning of enormous objects to improve scheduling and pause-time behavior of garbage collection
US7225439B2 (en) * 2003-03-21 2007-05-29 Sun Microsystems, Inc. Combining write-barriers within an inner loop with fixed step
US20040186863A1 (en) * 2003-03-21 2004-09-23 Garthwaite Alexander T. Elision of write barriers for stores whose values are in close proximity
GB2399897B (en) * 2003-03-26 2006-02-01 Advanced Risc Mach Ltd Memory recycling in computer systems
CN100342377C (zh) * 2003-04-16 2007-10-10 华为技术有限公司 一种提高数据处理效率的方法
GB2401217B (en) * 2003-05-02 2005-11-09 Transitive Ltd Improved architecture for generating intermediate representations for program code conversion
US9454490B2 (en) 2003-05-12 2016-09-27 International Business Machines Corporation Invalidating a range of two or more translation table entries and instruction therefore
US7284100B2 (en) * 2003-05-12 2007-10-16 International Business Machines Corporation Invalidating storage, clearing buffer entries, and an instruction therefor
US7293265B2 (en) * 2003-05-15 2007-11-06 Intel Corporation Methods and apparatus to perform return-address prediction
US7603663B2 (en) * 2003-05-20 2009-10-13 Intel Corporation Apparatus and methods for restoring synchronization to object-oriented software applications in managed runtime environments
US7080172B1 (en) 2003-05-27 2006-07-18 Marvell Luternational Ltd. Management of memory, hardware and associated device drivers using stacks
CA2430763A1 (en) 2003-05-30 2004-11-30 Ibm Canada Limited - Ibm Canada Limitee Efficiently releasing locks when an exception occurs
US7219329B2 (en) * 2003-06-13 2007-05-15 Microsoft Corporation Systems and methods providing lightweight runtime code generation
US7089272B1 (en) 2003-06-18 2006-08-08 Sun Microsystems, Inc. Specializing write-barriers for objects in a garbage collected heap
US7322027B2 (en) * 2003-06-27 2008-01-22 Microsoft Corporation Detecting termination and providing information related to termination of a computer system process
WO2005001695A1 (ja) * 2003-06-30 2005-01-06 Matsushita Electric Industrial Co., Ltd. ガーベジコレクションシステム
US7496896B2 (en) * 2003-07-17 2009-02-24 Computer Associates Think, Inc. Accessing return values and exceptions
US7881229B2 (en) * 2003-08-08 2011-02-01 Raytheon Bbn Technologies Corp. Systems and methods for forming an adjacency graph for exchanging network routing data
US20050039189A1 (en) * 2003-08-14 2005-02-17 Todd Anderson Methods and apparatus to preemptively compile an application
US7149762B1 (en) 2003-08-20 2006-12-12 Sun Microsystems, Inc. Handling futile collections in the train algorithm through selective extension of the collection set
US20050050135A1 (en) * 2003-08-25 2005-03-03 Josef Hallermeier Handheld digital multimedia workstation and method
US7210135B2 (en) * 2003-08-26 2007-04-24 Microsoft Corporation Data flow analysis of transactional processes
US7606927B2 (en) 2003-08-27 2009-10-20 Bbn Technologies Corp Systems and methods for forwarding data units in a communications network
US8166204B2 (en) * 2003-08-29 2012-04-24 Raytheon Bbn Technologies Corp. Systems and methods for automatically placing nodes in an ad hoc network
US7404182B1 (en) 2003-10-03 2008-07-22 Sun Microsystems, Inc. Deferring and combining write barriers for a garbage-collected heap
US7552426B2 (en) * 2003-10-14 2009-06-23 Microsoft Corporation Systems and methods for using synthetic instructions in a virtual machine
US7447829B2 (en) 2003-10-15 2008-11-04 International Business Machines Corporation Heap and stack layout for multithreaded processes in a processing system
US7668083B1 (en) 2003-10-28 2010-02-23 Bbn Technologies Corp. Systems and methods for forwarding data in a communications network
US20050114850A1 (en) 2003-10-29 2005-05-26 Saurabh Chheda Energy-focused re-compilation of executables and hardware mechanisms based on compiler-architecture interaction and compiler-inserted control
US20050097533A1 (en) * 2003-10-31 2005-05-05 Chakrabarti Dhruva R. Run-time performance with call site inline specialization
US7487498B2 (en) * 2003-11-12 2009-02-03 Microsoft Corporation Strategy for referencing code resources
US7263690B1 (en) * 2003-11-14 2007-08-28 Sun Microsystems, Inc. Mechanism for safe byte code in a tracing framework
US7996671B2 (en) 2003-11-17 2011-08-09 Bluerisc Inc. Security of program executables and microprocessors based on compiler-architecture interaction
US7266726B1 (en) 2003-11-24 2007-09-04 Time Warner Cable Inc. Methods and apparatus for event logging in an information network
US8302111B2 (en) 2003-11-24 2012-10-30 Time Warner Cable Inc. Methods and apparatus for hardware registration in a network device
US7380086B2 (en) * 2003-12-12 2008-05-27 International Business Machines Corporation Scalable runtime system for global address space languages on shared and distributed memory machines
US7770034B2 (en) * 2003-12-16 2010-08-03 Intel Corporation Performance monitoring based dynamic voltage and frequency scaling
US7624137B2 (en) * 2004-01-05 2009-11-24 International Business Machines Corporation Method and apparatus for scheduling and performing garbage collection in a real-time system with guaranteed space bounds
US7603668B2 (en) * 2004-01-09 2009-10-13 Hewlett-Packard Development Company, L.P. Determining the applicability of patches for installation on a computer system
US20050165837A1 (en) * 2004-01-22 2005-07-28 International Business Machines Corporation System and method for embedded java memory footprint performance improvement
JP4086791B2 (ja) * 2004-01-28 2008-05-14 インターナショナル・ビジネス・マシーンズ・コーポレーション コンパイラプログラム、動的コンパイラプログラム、再現コンパイラプログラム、再現コンパイラ、コンパイル方法、及び記録媒体
US8607209B2 (en) 2004-02-04 2013-12-10 Bluerisc Inc. Energy-focused compiler-assisted branch prediction
US9213538B1 (en) 2004-02-06 2015-12-15 Time Warner Cable Enterprises Llc Methods and apparatus for display element management in an information network
US20050183077A1 (en) * 2004-02-12 2005-08-18 International Business Machines Corporation System and method for JIT memory footprint improvement for embedded java devices
US7475002B1 (en) * 2004-02-18 2009-01-06 Vmware, Inc. Method and apparatus for emulating multiple virtual timers in a virtual computer system when the virtual timers fall behind the real time of a physical computer system
US8078669B2 (en) 2004-02-18 2011-12-13 Time Warner Cable Inc. Media extension apparatus and methods for use in an information network
US7266804B2 (en) 2004-02-20 2007-09-04 Microsoft Corporation Strategy for selectively making non-public resources of one assembly visible to another
US7689543B2 (en) * 2004-03-11 2010-03-30 International Business Machines Corporation Search engine providing match and alternative answers using cumulative probability values
US7644402B1 (en) * 2004-03-17 2010-01-05 Sun Microsystems, Inc. Method for sharing runtime representation of software components across component loaders
US7496897B1 (en) 2004-03-17 2009-02-24 Timesys Corporation Multiple code sets for multiple execution contexts
US7904893B2 (en) * 2004-03-17 2011-03-08 Marvell International Ltd. Power and/or energy optimized compile/execution
US7406687B1 (en) * 2004-03-17 2008-07-29 Sun Microsystems, Inc. Sharing runtime representation of software component methods across component loaders
US20050228851A1 (en) * 2004-03-29 2005-10-13 Intel Corporation Configuration of redirection tables
US7836434B1 (en) * 2004-05-04 2010-11-16 Oracle America, Inc. Method and system for analyzing array access to a pointer that is referenced as an array
US7770169B2 (en) * 2004-05-17 2010-08-03 Oracle America, Inc. Thread rendezvous for read-only code in an object-oriented computing environment
US7620943B1 (en) 2004-06-30 2009-11-17 Sun Microsystems, Inc. Using class properties to segregate objects in a generation managed by the train algorithm
US8869104B2 (en) * 2004-06-30 2014-10-21 Lsi Corporation Object code configuration tool
US20060005190A1 (en) * 2004-06-30 2006-01-05 Microsoft Corporation Systems and methods for implementing an operating system in a virtual machine environment
US7949666B2 (en) * 2004-07-09 2011-05-24 Ricoh, Ltd. Synchronizing distributed work through document logs
EP1622009A1 (en) * 2004-07-27 2006-02-01 Texas Instruments Incorporated JSM architecture and systems
KR100678891B1 (ko) * 2004-07-30 2007-02-05 삼성전자주식회사 Av데이터 수신시 버퍼량을 컨텐츠 속성에 따라탄력적으로 조절하는 방법 및 장치
US7398523B2 (en) * 2004-08-19 2008-07-08 International Business Machines Corporation Adaptive class loading
US20060048122A1 (en) * 2004-08-30 2006-03-02 International Business Machines Corporation Method, system and computer program product for hierarchical loop optimization of machine executable code
US7676801B1 (en) 2004-08-31 2010-03-09 Sun Microsystems, Inc. Scanning of evacuated objects in a generation managed by the train algorithm
US8819639B2 (en) * 2004-09-15 2014-08-26 Lakeside Software, Inc. System for selectively blocking execution of applications on a computer system
US7415021B1 (en) * 2004-09-22 2008-08-19 Sun Microsystems, Inc. Method and apparatus for preserving null semantics during use of a forwarding method
US7653793B1 (en) * 2004-11-17 2010-01-26 Sun Microsystems, Inc. Use of memory protection to implement replicating collection in an incremental, copying garbage collector
FI20041517A0 (fi) * 2004-11-25 2004-11-25 Nokia Corp Menetelmä elektroniikkalaitteiden ohjelmien turvalliseen tulkintaan
US20060123397A1 (en) * 2004-12-08 2006-06-08 Mcguire James B Apparatus and method for optimization of virtual machine operation
US7321909B1 (en) 2004-12-23 2008-01-22 Sun Microsystems, Inc. Method and apparatus for forwarding references to objects concurrently with space-incremental garbage collection
TWI257053B (en) * 2005-01-20 2006-06-21 Via Tech Inc System and method used to automatically reload and manage hyperlinks
US7379943B2 (en) * 2005-01-28 2008-05-27 Microsoft Corporation Method and system for bidirectionally data binding a control of a template
US7730016B2 (en) * 2005-01-31 2010-06-01 Oracle International Corporation Identification of false ambiguous roots in a stack conservative garbage collector
US20090178032A1 (en) * 2005-03-03 2009-07-09 Rongzhen Yang Mining for performance data for systems with dynamic compilers
US7735089B2 (en) * 2005-03-08 2010-06-08 Oracle International Corporation Method and system for deadlock detection in a distributed environment
US7574702B2 (en) * 2005-03-18 2009-08-11 Microsoft Corporation Method and apparatus for hybrid stack walking
US7574700B2 (en) * 2005-03-31 2009-08-11 Sun Microsystems, Inc. Supporting dynamically-typed languages in typed assembly languages
US7661095B2 (en) * 2005-04-14 2010-02-09 Hewlett-Packard Development Company, L.P. System and method to build a callgraph for functions with multiple entry points
WO2006111001A1 (en) * 2005-04-18 2006-10-26 Research In Motion Limited System and method of waste management
US20060271575A1 (en) * 2005-05-25 2006-11-30 Harris Steven T Clustered object state using field set operations
GB2426840A (en) * 2005-06-04 2006-12-06 Transitive Ltd Method of executing program code where a portion of the target code calls a native code portion which then calls a second target code portion.
US20060277541A1 (en) * 2005-06-07 2006-12-07 Sony Computer Entertainment America Inc. Relocatable component file format
US20060288341A1 (en) * 2005-06-15 2006-12-21 Microsoft Corporation Patch-impact assessment through runtime insertion of code path instrumentation
WO2007002855A2 (en) * 2005-06-29 2007-01-04 Neopath Networks, Inc. Parallel filesystem traversal for transparent mirroring of directories and files
EP1752874A1 (en) * 2005-07-19 2007-02-14 Alcatel Adaptive evolutionary computer software product
US9230029B2 (en) * 2005-07-26 2016-01-05 Creative Technology Ltd System and method for modifying media content playback based on an intelligent random selection
US20070083783A1 (en) * 2005-08-05 2007-04-12 Toru Ishihara Reducing power consumption at a cache
JP4068106B2 (ja) * 2005-08-05 2008-03-26 三菱電機株式会社 リアルタイム組込み簡易モニタプログラム
US20070050606A1 (en) * 2005-08-29 2007-03-01 Searete Llc, A Limited Liability Corporation Of The State Of Delaware Runtime-based optimization profile
US7877584B2 (en) 2005-08-29 2011-01-25 The Invention Science Fund I, Llc Predictive processor resource management
US7774558B2 (en) * 2005-08-29 2010-08-10 The Invention Science Fund I, Inc Multiprocessor resource optimization
US7653834B2 (en) 2005-08-29 2010-01-26 Searete, Llc Power sparing synchronous apparatus
US7779213B2 (en) 2005-08-29 2010-08-17 The Invention Science Fund I, Inc Optimization of instruction group execution through hardware resource management policies
US7725693B2 (en) 2005-08-29 2010-05-25 Searete, Llc Execution optimization using a processor resource management policy saved in an association with an instruction group
US8181004B2 (en) 2005-08-29 2012-05-15 The Invention Science Fund I, Llc Selecting a resource management policy for a resource available to a processor
US7627739B2 (en) 2005-08-29 2009-12-01 Searete, Llc Optimization of a hardware resource shared by a multiprocessor
US7607042B2 (en) * 2005-08-29 2009-10-20 Searete, Llc Adjusting a processor operating parameter based on a performance criterion
US8255745B2 (en) * 2005-08-29 2012-08-28 The Invention Science Fund I, Llc Hardware-error tolerant computing
US7647487B2 (en) * 2005-08-29 2010-01-12 Searete, Llc Instruction-associated processor resource optimization
US8423824B2 (en) 2005-08-29 2013-04-16 The Invention Science Fund I, Llc Power sparing synchronous apparatus
US20070050605A1 (en) * 2005-08-29 2007-03-01 Bran Ferren Freeze-dried ghost pages
US8516300B2 (en) * 2005-08-29 2013-08-20 The Invention Science Fund I, Llc Multi-votage synchronous systems
US8214191B2 (en) * 2005-08-29 2012-07-03 The Invention Science Fund I, Llc Cross-architecture execution optimization
US8209524B2 (en) * 2005-08-29 2012-06-26 The Invention Science Fund I, Llc Cross-architecture optimization
US7739524B2 (en) * 2005-08-29 2010-06-15 The Invention Science Fund I, Inc Power consumption management
US7730491B2 (en) * 2005-08-30 2010-06-01 Intel Corporation Fair scalable reader-writer mutual exclusion
US7793299B2 (en) * 2005-08-30 2010-09-07 International Business Machines Corporation System and method for scheduling tasks for execution
US7565365B2 (en) * 2005-08-31 2009-07-21 Sap Ag Object storage and synchronization hooks for occasionally-connected devices
US20070083644A1 (en) * 2005-10-12 2007-04-12 Microsoft Corporation Capturing, displaying, and re-creating network conversations and state information
KR100778001B1 (ko) * 2005-10-14 2007-11-21 엘지전자 주식회사 멀티미디어 파일을 재생하는 방법 및 그 장치
EP1783604A3 (en) * 2005-11-07 2007-10-03 Slawomir Adam Janczewski Object-oriented, parallel language, method of programming and multi-processor computer
US7774843B1 (en) * 2005-11-16 2010-08-10 Mcafee, Inc. System, method and computer program product for preventing the execution of unwanted code
JP4732874B2 (ja) * 2005-11-28 2011-07-27 株式会社エヌ・ティ・ティ・ドコモ ソフトウェア動作モデル化装置、ソフトウェア動作監視装置、ソフトウェア動作モデル化方法及びソフトウェア動作監視方法
US20070150895A1 (en) * 2005-12-06 2007-06-28 Kurland Aaron S Methods and apparatus for multi-core processing with dedicated thread management
US7739675B2 (en) * 2005-12-16 2010-06-15 International Business Machines Corporation Dynamically computing a degradation analysis of waiting threads in a virtual machine
FR2895103B1 (fr) * 2005-12-19 2008-02-22 Dxo Labs Sa Procede et systeme de traitement de donnees numeriques
US9830174B2 (en) * 2005-12-22 2017-11-28 Synopsys, Inc. Dynamic host code generation from architecture description for fast simulation
US20070201270A1 (en) * 2005-12-30 2007-08-30 Stmicroelectronics Pvt. Ltd. Read only memory device with bitline leakage reduction
WO2007076629A1 (en) * 2005-12-30 2007-07-12 Intel Corporation Type checking for object-oriented programming languages
US8601160B1 (en) 2006-02-09 2013-12-03 Mcafee, Inc. System, method and computer program product for gathering information relating to electronic content utilizing a DNS server
WO2007095642A2 (en) * 2006-02-16 2007-08-23 The Regents Of The University Of California Dynamic incremental compiler and method
KR100763199B1 (ko) * 2006-02-20 2007-10-04 삼성전자주식회사 가상 머신 환경에서의 메소드 호출 방법 및 상기 방법을수행하는 가상 머신이 탑재된 시스템
US8266605B2 (en) * 2006-02-22 2012-09-11 Wind River Systems, Inc. Method and system for optimizing performance based on cache analysis
US8615743B2 (en) * 2006-02-27 2013-12-24 Microsoft Corporation Adaptive compiled code
US8099724B2 (en) * 2006-02-28 2012-01-17 Oracle America, Inc. Fast patch-based method calls
US7840950B2 (en) * 2006-03-09 2010-11-23 International Business Machines Corporation Programmatic compiler optimization of glacial constants
US8291395B2 (en) * 2006-03-31 2012-10-16 Apple Inc. Fast function call dispatching
EP2477109B1 (en) 2006-04-12 2016-07-13 Soft Machines, Inc. Apparatus and method for processing an instruction matrix specifying parallel and dependent operations
US7581089B1 (en) 2006-04-20 2009-08-25 The United States Of America As Represented By The Director Of The National Security Agency Method of protecting a computer stack
US7533237B1 (en) 2006-05-11 2009-05-12 Nvidia Corporation Off-chip memory allocation for a unified shader
US7533236B1 (en) 2006-05-11 2009-05-12 Nvidia Corporation Off-chip out of order memory allocation for a unified shader
GB0609843D0 (en) * 2006-05-18 2006-06-28 Ibm Launcher for software applications
US7756911B2 (en) * 2006-06-09 2010-07-13 International Business Machines Corporation Method and system for executing a task and medium storing a program therefor
US7480782B2 (en) 2006-06-14 2009-01-20 Sun Microsystems, Inc. Reference-updating using per-chunk referenced-address ranges in a compacting garbage collector
US20080052691A1 (en) * 2006-06-29 2008-02-28 Naveen Neelakantam Communicating with and recovering state information from a dynamic translator
US8405662B2 (en) * 2006-07-04 2013-03-26 Iti Scotland Limited Generation of video
GB0613275D0 (en) * 2006-07-04 2006-08-16 Codeplay Software Ltd Distributed computer system
US20090144713A1 (en) * 2006-07-04 2009-06-04 George Russell Techniques for program performance analysis
US20090150872A1 (en) * 2006-07-04 2009-06-11 George Russell Dynamic code update
US20080126625A1 (en) * 2006-07-17 2008-05-29 International Business Machines Corporation Just-in-time buffer allocation for use in event completion style input/output models
EP1881404A1 (fr) * 2006-07-20 2008-01-23 Gemplus Procédé de protection dynamique des données lors de l'exécution d'un code logiciel en langage intermédiaire dans un appareil numérique
CN101110020B (zh) 2006-07-21 2011-01-26 国际商业机器公司 维护关于可编辑对象中的元素的与原创性有关的信息的方法和系统
US8020149B2 (en) * 2006-08-04 2011-09-13 Apple Inc. System and method for mitigating repeated crashes of an application resulting from supplemental code
US7506218B2 (en) * 2006-08-18 2009-03-17 International Business Machines Corporation Timeout request scheduling using grouping and nonsynchronized processing to enhance performance
CA2557343C (en) * 2006-08-28 2015-09-22 Ibm Canada Limited-Ibm Canada Limitee Runtime code modification in a multi-threaded environment
US8566812B1 (en) * 2006-08-31 2013-10-22 Oracle America, Inc. Using observed object patterns to dynamically tune a virtual machine for responsiveness
US8479004B2 (en) 2006-08-31 2013-07-02 Ricoh Co., Ltd Paper-based document logging
US9665970B2 (en) * 2006-09-19 2017-05-30 Imagination Technologies Limited Variable-sized concurrent grouping for multiprocessing
US7913236B2 (en) * 2006-09-29 2011-03-22 Intel Corporation Method and apparatus for performing dynamic optimization for software transactional memory
US8799876B2 (en) * 2006-09-29 2014-08-05 Intel Corporation Method and apparatus for assigning subroutines
US8065670B2 (en) * 2006-10-03 2011-11-22 Oracle America, Inc. Method and apparatus for enabling optimistic program execution
US8082542B2 (en) * 2006-10-04 2011-12-20 International Business Machines Corporation Load time in-lining of subroutines
US7934208B2 (en) * 2006-10-13 2011-04-26 International Business Machines Corporation Method for transparent on-line dynamic binary optimization
CN101165684A (zh) * 2006-10-18 2008-04-23 国际商业机器公司 指示内容查找结果的方法和装置
US20080126766A1 (en) 2006-11-03 2008-05-29 Saurabh Chheda Securing microprocessors against information leakage and physical tampering
EP2523101B1 (en) 2006-11-14 2014-06-04 Soft Machines, Inc. Apparatus and method for processing complex instruction formats in a multi- threaded architecture supporting various context switch modes and virtualization schemes
US8683453B2 (en) * 2006-11-30 2014-03-25 Motorola Mobility Llc System for overriding interpreted byte-code with native code
US8370818B2 (en) * 2006-12-02 2013-02-05 Time Warner Cable Inc. Methods and apparatus for analyzing software interface usage
US7783681B1 (en) * 2006-12-15 2010-08-24 Oracle America, Inc. Method and system for pre-marking objects for concurrent garbage collection
US9645915B2 (en) * 2006-12-27 2017-05-09 The Mathworks, Inc. Continuous evaluation of program code and saving state information associated with program code
US8578347B1 (en) * 2006-12-28 2013-11-05 The Mathworks, Inc. Determining stack usage of generated code from a model
FR2911971B1 (fr) * 2007-01-26 2009-04-24 Commissariat Energie Atomique Procede et systeme de verification de proprietes d'un programme informatique.
US8413125B2 (en) * 2007-01-26 2013-04-02 Oracle International Corporation Asynchronous dynamic compilation based on multi-session profiling to produce shared native code
US8006094B2 (en) 2007-02-21 2011-08-23 Ricoh Co., Ltd. Trustworthy timestamps and certifiable clocks using logs linked by cryptographic hashes
EP2118823B1 (en) * 2007-03-01 2020-04-15 Zipcar, Inc. Multi-tiered fleet management cache
US8495708B2 (en) * 2007-03-22 2013-07-23 The Invention Science Fund I, Llc Resource authorizations dependent on emulation environment isolation policies
JP4339371B2 (ja) * 2007-03-22 2009-10-07 株式会社ソニー・コンピュータエンタテインメント 情報処理装置および情報処理方法
US8438609B2 (en) * 2007-03-22 2013-05-07 The Invention Science Fund I, Llc Resource authorizations dependent on emulation environment isolation policies
US8874425B2 (en) * 2007-03-22 2014-10-28 The Invention Science Fund I, Llc Implementing performance-dependent transfer or execution decisions from service emulation indications
US9558019B2 (en) * 2007-03-22 2017-01-31 Invention Science Fund I, Llc Coordinating instances of a thread or other service in emulation
US9378108B2 (en) * 2007-03-22 2016-06-28 Invention Science Fund I, Llc Implementing performance-dependent transfer or execution decisions from service emulation indications
US20080235000A1 (en) * 2007-03-22 2008-09-25 Searete Llc, A Limited Liability Corporation Of The State Of Delaware Implementing security control practice omission decisions from service emulation indications
US8996483B2 (en) * 2007-03-28 2015-03-31 Ricoh Co., Ltd. Method and apparatus for recording associations with logs
US20080243688A1 (en) * 2007-03-28 2008-10-02 Hart Peter E Method and Apparatus for Recording Transactions with a Portable Logging Device
US7937695B2 (en) * 2007-04-27 2011-05-03 International Business Machines Corporation Reducing number of exception checks
US8332819B2 (en) * 2007-05-03 2012-12-11 Siemens Industry, Inc. Diagnostic and trouble-shooting methods in a wireless control and sensor network
US7937621B2 (en) * 2007-05-07 2011-05-03 Intel Corporation Transient fault detection by integrating an SRMT code and a non SRMT code in a single application
US7937620B2 (en) * 2007-05-07 2011-05-03 Intel Corporation Transient fault detection by integrating an SRMT code and a non SRMT code in a single application
US7685182B2 (en) * 2007-05-08 2010-03-23 Microsoft Corporation Interleaved garbage collections
CN101681266B (zh) * 2007-05-22 2014-06-18 皇家飞利浦电子股份有限公司 用于包括多个设备的联网控制系统的编译器和编译方法
US8819673B1 (en) * 2007-05-24 2014-08-26 United Services Automobile Association (Usaa) Systems and methods for java virtual machine management
US8533686B2 (en) * 2007-06-14 2013-09-10 Red Hat, Inc. Methods and systems for porting Sysprof
US7949637B1 (en) * 2007-06-27 2011-05-24 Emc Corporation Storage management for fine grained tiered storage with thin provisioning
US8024315B2 (en) * 2007-07-20 2011-09-20 International Business Machines Corporation Method of dynamically providing a compound object's source information during its development
US8543866B2 (en) * 2007-07-20 2013-09-24 Qualcomm Incorporated Remote access diagnostic mechanism for communication devices
US8291393B2 (en) * 2007-08-20 2012-10-16 International Business Machines Corporation Just-in-time compiler support for interruptible code
US8266607B2 (en) * 2007-08-27 2012-09-11 International Business Machines Corporation Lock reservation using cooperative multithreading and lightweight single reader reserved locks
US20090063595A1 (en) * 2007-09-05 2009-03-05 Mark Graham Stoodley Method and apparatus for updating references to objects in a garbage collection operation
US9483405B2 (en) * 2007-09-20 2016-11-01 Sony Interactive Entertainment Inc. Simplified run-time program translation for emulating complex processor pipelines
US20090089772A1 (en) * 2007-09-28 2009-04-02 International Business Machines Corporation Arrangement for scheduling jobs with rules and events
GB2454885B (en) * 2007-11-21 2012-06-06 Advanced Risc Mach Ltd Interrupt jitter suppression
US8196110B2 (en) * 2007-11-30 2012-06-05 International Business Machines Corporation Method and apparatus for verifying a suspect return pointer in a stack
EP2240867A4 (en) * 2007-12-13 2011-02-09 Redknee Inc METHOD AND SYSTEM FOR STORAGE
US8321840B2 (en) * 2007-12-27 2012-11-27 Intel Corporation Software flow tracking using multiple threads
US20090182689A1 (en) * 2008-01-15 2009-07-16 Microsoft Corporation Rule-based dynamic operation evaluation
US8839225B2 (en) 2008-01-23 2014-09-16 International Business Machines Corporation Generating and applying patches to a computer program code concurrently with its execution
US9298568B2 (en) * 2008-02-07 2016-03-29 International Business Machines Corporation Method and apparatus for device driver state storage during diagnostic phase
US7925640B2 (en) * 2008-02-14 2011-04-12 Oracle America, Inc. Dynamic multiple inheritance method dispatch data structure including an m-table size, i-table containing one or more holder addressor regions and type extension testing by frugal perfect hashing
US8539468B2 (en) * 2008-02-18 2013-09-17 International Business Machines Corporation System and methods for replacing software application classes using transparent object adapters
US8566797B2 (en) * 2008-02-27 2013-10-22 Red Hat, Inc. Heuristic backtracer
US20090217246A1 (en) * 2008-02-27 2009-08-27 Nce Technologies, Inc. Evaluating Software Programming Skills
US20090228875A1 (en) * 2008-03-04 2009-09-10 Devries Alex Method and System for Reducing Disk Allocation by Profiling Symbol Usage
US8239836B1 (en) * 2008-03-07 2012-08-07 The Regents Of The University Of California Multi-variant parallel program execution to detect malicious code injection
US8869109B2 (en) * 2008-03-17 2014-10-21 Microsoft Corporation Disassembling an executable binary
US8434064B2 (en) * 2008-03-28 2013-04-30 Microsoft Corporation Detecting memory errors using write integrity testing
US8473935B2 (en) * 2008-04-21 2013-06-25 Microsoft Corporation Just-ahead-of-time compilation
US7987215B2 (en) * 2008-04-22 2011-07-26 Microsoft Corporation Efficiently marking objects with large reference sets
US8453129B2 (en) * 2008-04-24 2013-05-28 International Business Machines Corporation Using hardware interrupts to drive dynamic binary code recompilation
US8386664B2 (en) * 2008-05-22 2013-02-26 International Business Machines Corporation Reducing runtime coherency checking with global data flow analysis
US8281295B2 (en) * 2008-05-23 2012-10-02 International Business Machines Corporation Computer analysis and runtime coherency checking
US8166041B2 (en) * 2008-06-13 2012-04-24 Microsoft Corporation Search index format optimizations
US8099721B2 (en) * 2008-06-17 2012-01-17 Microsoft Corporation Parsing of declarations in all branches of preprocessor conditionals
RU2495476C2 (ru) 2008-06-20 2013-10-10 Инвенсис Системз, Инк. Системы и способы для иммерсивного взаимодействия с действительными и/или имитируемыми техническими средствами для управления технологическим процессом, контроля состояния окружающей среды и производственного контроля
US7921280B2 (en) * 2008-06-27 2011-04-05 Intel Corporation Selectively powered retirement unit using a partitioned allocation array and a partitioned writeback array
US8793671B2 (en) * 2008-06-28 2014-07-29 Microsoft Corporation Interface optimization in a closed system
US8065349B2 (en) * 2008-06-30 2011-11-22 Oracle America, Inc. Method and apparatus for performing concurrent garbage collection
US20100017246A1 (en) * 2008-07-20 2010-01-21 Farrell Glenn H Software user interface for specification of project task dependencies and deadlines
US8285670B2 (en) 2008-07-22 2012-10-09 International Business Machines Corporation Dynamically maintaining coherency within live ranges of direct buffers
EP2315126A4 (en) * 2008-08-11 2012-06-20 Fujitsu Ltd PEST INFORMATION COLLECTION PROGRAM, PASSING INFORMATION COLLECTION METHOD, AND PASSING INFORMATION COLLECTION SYSTEM
US8307353B2 (en) * 2008-08-12 2012-11-06 Oracle America, Inc. Cross-domain inlining in a system virtual machine
US20100064061A1 (en) * 2008-09-05 2010-03-11 Apple Inc. Providing substantially immediate action in response to input event
US8301672B2 (en) * 2008-09-22 2012-10-30 Advanced Micro Devices, Inc. GPU assisted garbage collection
US8185733B2 (en) * 2008-10-02 2012-05-22 Ricoh Co., Ltd. Method and apparatus for automatically publishing content based identifiers
US8914781B2 (en) * 2008-10-24 2014-12-16 Microsoft Corporation Scalability analysis for server systems
US8417903B2 (en) 2008-12-19 2013-04-09 International Business Machines Corporation Preselect list using hidden pages
US8307350B2 (en) 2009-01-14 2012-11-06 Microsoft Corporation Multi level virtual function tables
US8776032B2 (en) * 2009-01-29 2014-07-08 Microsoft Corporation Automatic region-based verification of garbage collectors
US8341602B2 (en) * 2009-01-29 2012-12-25 Microsoft Corporation Automated verification of a type-safe operating system
US8782607B2 (en) * 2009-02-20 2014-07-15 Microsoft Corporation Contract failure behavior with escalation policy
US8239842B2 (en) * 2009-02-24 2012-08-07 Microsoft Corporation Implicit line continuation
US9134973B2 (en) * 2009-02-26 2015-09-15 Red Hat, Inc. Dynamic compiling and loading at runtime
US9052984B2 (en) * 2009-02-26 2015-06-09 International Business Machines Corporation Exception declaration refactoring to reduce memory footprint
US10152504B2 (en) 2009-03-11 2018-12-11 Actian Netherlands B.V. Column-store database architecture utilizing positional delta tree update system and methods
US8397219B2 (en) * 2009-03-31 2013-03-12 Oracle America, Inc. Method and apparatus for tracking enregistered memory locations
US8112674B2 (en) * 2009-04-01 2012-02-07 International Business Machines Corporation Device activity triggered device diagnostics
KR101663545B1 (ko) * 2009-04-06 2016-10-07 시게이트 테크놀로지 엘엘씨 코드의 동적 재배치 방법 및 이를 이용한 디스크 드라이브
US8139504B2 (en) * 2009-04-07 2012-03-20 Raytheon Bbn Technologies Corp. System, device, and method for unifying differently-routed networks using virtual topology representations
US8949103B2 (en) * 2009-05-01 2015-02-03 Microsoft Corporation Program code simulator
US8103850B2 (en) * 2009-05-05 2012-01-24 International Business Machines Corporation Dynamic translation in the presence of intermixed code and data
US20100306751A1 (en) * 2009-05-28 2010-12-02 James Paul Schneider Execution result caching and searching
US8127060B2 (en) 2009-05-29 2012-02-28 Invensys Systems, Inc Methods and apparatus for control configuration with control objects that are fieldbus protocol-aware
US8463964B2 (en) 2009-05-29 2013-06-11 Invensys Systems, Inc. Methods and apparatus for control configuration with enhanced change-tracking
US8677329B2 (en) * 2009-06-03 2014-03-18 Apple Inc. Methods and apparatuses for a compiler server
US9117071B2 (en) 2009-06-03 2015-08-25 Apple Inc. Methods and apparatuses for secure compilation
TWM376919U (en) * 2009-06-08 2010-03-21 Hon Hai Prec Ind Co Ltd Antenna
US8572589B2 (en) * 2009-06-30 2013-10-29 Agilent Technologies, Inc. Programming language translator and enabling translation of machine-centric commands for controlling instrument
US8473900B2 (en) * 2009-07-01 2013-06-25 Advanced Micro Devices, Inc. Combining classes referenced by immutable classes into a single synthetic class
US20110099439A1 (en) * 2009-10-23 2011-04-28 Infineon Technologies Ag Automatic diverse software generation for use in high integrity systems
US9355144B2 (en) * 2009-12-10 2016-05-31 Nokia Technologies Oy Method and apparatus for recycling information fragments in information spaces
US8972994B2 (en) * 2009-12-23 2015-03-03 Intel Corporation Method and apparatus to bypass object lock by speculative execution of generated bypass code shell based on bypass failure threshold in managed runtime environment
US9043769B2 (en) * 2009-12-28 2015-05-26 Hyperion Core Inc. Optimization of loops and data flow sections in multi-core processor environment
US8578343B2 (en) * 2010-01-15 2013-11-05 Oracle America, Inc. System and method for overflow detection using partial evaluations
CN102147734B (zh) * 2010-02-10 2016-01-13 甲骨文国际公司 运行时类提取的方法和系统
US8397217B2 (en) * 2010-02-22 2013-03-12 International Business Machines Corporation Integrating templates into tests
US20110208948A1 (en) * 2010-02-23 2011-08-25 Infineon Technologies Ag Reading to and writing from peripherals with temporally separated redundant processor execution
US8327109B2 (en) * 2010-03-02 2012-12-04 Advanced Micro Devices, Inc. GPU support for garbage collection
US8887142B2 (en) * 2010-03-10 2014-11-11 Microsoft Corporation Loop control flow diversion
US20110252216A1 (en) * 2010-04-12 2011-10-13 Tatu Ylonen Oy Ltd Thread-local hash table based write barrier buffers
CN101923510B (zh) * 2010-04-13 2012-07-04 张克东 软件探测方法和应用该方法的软件探测器及软件探测系统
CN102662827B (zh) * 2010-04-13 2015-02-04 张溟 一种软件探测方法
CN102622299B (zh) * 2010-04-13 2014-10-01 张溟 一种软件探测系统的工作方法
US8365156B2 (en) * 2010-04-17 2013-01-29 Microsoft Corporation Intermediate language support for change resilience
US8375373B2 (en) 2010-04-19 2013-02-12 Microsoft Corporation Intermediate language support for change resilience
US8997049B1 (en) * 2010-05-21 2015-03-31 Cadence Design Systems, Inc. Method and system for debugging of compiled code using an interpreter
US9038038B1 (en) * 2010-06-01 2015-05-19 Google Inc. Just in time cloud compilation
FR2961922B1 (fr) * 2010-06-29 2013-12-13 Flexycore Procede de compilation selective, dispositif et produit programme d'ordinateur correspondant.
US9095002B2 (en) 2010-07-12 2015-07-28 Invensys Systems, Inc. Methods and apparatus for process control with improved communication links
US8331855B2 (en) 2010-07-12 2012-12-11 Invensys Systems, Inc. Methods and apparatus for process control with improved communication links
US8516356B2 (en) 2010-07-20 2013-08-20 Infineon Technologies Ag Real-time error detection by inverse processing
US9195486B2 (en) * 2010-07-30 2015-11-24 Apple Inc. Observation and analysis based code optimization
US8862613B2 (en) * 2010-07-30 2014-10-14 Sap Ag Extensibility of business process and application logic
US9146759B2 (en) * 2010-07-30 2015-09-29 Apple Inc. Assumption-based compilation
JP5583514B2 (ja) * 2010-08-11 2014-09-03 インターナショナル・ビジネス・マシーンズ・コーポレーション バイナリコードを最適化するコンパイル方法、及びそのコンパイラシステム、並びにコンピュータ・プログラム
US8359496B1 (en) * 2010-08-31 2013-01-22 Google Inc. Fault-resistant just-in-time compiler
US8893306B2 (en) 2010-08-31 2014-11-18 International Business Machines Corporation Resource management and security system
US20120054773A1 (en) * 2010-08-31 2012-03-01 International Business Machines Corporation Processor support for secure device driver architecture
US8495750B2 (en) 2010-08-31 2013-07-23 International Business Machines Corporation Filesystem management and security system
EP2616928B1 (en) 2010-09-17 2016-11-02 Soft Machines, Inc. Single cycle multi-branch prediction including shadow cache for early far branch prediction
JP5148674B2 (ja) * 2010-09-27 2013-02-20 株式会社東芝 プログラム並列化装置およびプログラム
CA2719653A1 (en) * 2010-11-05 2011-01-18 Ibm Canada Limited - Ibm Canada Limitee Partial inlining with software based restart
CN102479155B (zh) * 2010-11-30 2014-07-02 国际商业机器公司 用于网络应用服务器系统的内存过载管理的方法和系统
US8806465B2 (en) 2010-12-03 2014-08-12 International Busines Machines Corporation Refactor exception class hierarchy for reduced footprint and faster application start
KR101166803B1 (ko) 2010-12-31 2012-07-26 세종대학교산학협력단 비휘발성 메모리 및 휘발성 메모리를 포함하는 메모리 시스템 및 그 시스템을 이용한 처리 방법
WO2012103253A2 (en) * 2011-01-27 2012-08-02 Soft Machines, Inc. Multilevel conversion table cache for translating guest instructions to native instructions
WO2012103209A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest instruction to native instruction range based mapping using a conversion look aside buffer of a processor
WO2012103359A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Hardware acceleration components for translating guest instructions to native instructions
WO2012103367A2 (en) 2011-01-27 2012-08-02 Soft Machines, Inc. Guest to native block address mappings and management of native code storage
WO2012103245A2 (en) 2011-01-27 2012-08-02 Soft Machines Inc. Guest instruction block with near branching and far branching sequence construction to native instruction block
US8595701B2 (en) * 2011-02-04 2013-11-26 Fujitsu Limited Symbolic execution and test generation for GPU programs
US9280439B2 (en) * 2011-02-11 2016-03-08 Sap Se Usage analysis of productive environment to establish new data source for process optimization and project planning
US8782644B2 (en) * 2011-02-15 2014-07-15 Oracle International Corporation Preventing unsafe sharing through confinement of mutable captured variables
US20120233605A1 (en) * 2011-03-07 2012-09-13 Microsoft Corporation Application Compatibility Leveraging Successful Resolution of Issues
JP5614348B2 (ja) 2011-03-18 2014-10-29 富士通株式会社 命令処理方法、命令処理装置、及び命令処理プログラム
US9069893B2 (en) * 2011-03-23 2015-06-30 International Business Machines Corporation Automatic verification of determinism for parallel programs
EP2689326B1 (en) 2011-03-25 2022-11-16 Intel Corporation Memory fragments for supporting code block execution by using virtual cores instantiated by partitionable engines
WO2012135031A2 (en) 2011-03-25 2012-10-04 Soft Machines, Inc. Executing instruction sequence code blocks by using virtual cores instantiated by partitionable engines
WO2012135041A2 (en) 2011-03-25 2012-10-04 Soft Machines, Inc. Register file segments for supporting code block execution by using virtual cores instantiated by partitionable engines
CA2738422C (en) * 2011-04-28 2018-11-20 Ibm Canada Limited-Ibm Canada Limitee Examining concurrent system states
US9183111B2 (en) 2011-05-10 2015-11-10 Microsoft Technology Licensing, Llc Methods and computer program products for collecting storage resource performance data using file system hooks
CN103649932B (zh) 2011-05-20 2017-09-26 英特尔公司 资源的分散分配以及用于支持由多个引擎执行指令序列的互连结构
WO2012162189A1 (en) 2011-05-20 2012-11-29 Soft Machines, Inc. An interconnect structure to support the execution of instruction sequences by a plurality of engines
US9063749B2 (en) * 2011-05-27 2015-06-23 Qualcomm Incorporated Hardware support for hashtables in dynamic languages
US8650537B2 (en) 2011-05-30 2014-02-11 International Business Machines Corporation Optimizing an object-oriented program by transforming invocations of synthetic accessor methods
US8578080B2 (en) * 2011-07-01 2013-11-05 Intel Corporation Secure handling of interrupted events utilizing a virtual interrupt definition table
US9116685B2 (en) * 2011-07-19 2015-08-25 Qualcomm Incorporated Table call instruction for frequently called functions
US8527544B1 (en) 2011-08-11 2013-09-03 Pure Storage Inc. Garbage collection in a storage system
US8549498B2 (en) * 2011-08-23 2013-10-01 International Business Machines Corporation Integration of trace selection and trace profiling in dynamic optimizers
US9063673B2 (en) * 2011-08-30 2015-06-23 Uniquesoft, Llc System and method for implementing application code from application requirements
US9053017B2 (en) 2011-09-09 2015-06-09 Microsoft Technology Licensing, Llc Managing object lifetime in a cyclic graph
US8819649B2 (en) * 2011-09-09 2014-08-26 Microsoft Corporation Profile guided just-in-time (JIT) compiler and byte code generation
US8990546B2 (en) 2011-10-31 2015-03-24 Freescale Semiconductor, Inc. Data processing system with safe call and return
US9043765B2 (en) * 2011-11-09 2015-05-26 Microsoft Technology Licensing, Llc Simultaneously targeting multiple homogeneous and heterogeneous runtime environments
US20130132061A1 (en) * 2011-11-18 2013-05-23 Michael J. Rieschl Just-in-time static translation system for emulated computing environments
KR101703401B1 (ko) 2011-11-22 2017-02-06 소프트 머신즈, 인크. 다중 엔진 마이크로프로세서용 가속 코드 최적화기
US20150039859A1 (en) 2011-11-22 2015-02-05 Soft Machines, Inc. Microprocessor accelerated code optimizer
US9411616B2 (en) * 2011-12-09 2016-08-09 Ca, Inc. Classloader/instrumentation approach for invoking non-bound libraries
US8789033B2 (en) 2012-02-03 2014-07-22 International Business Machines Corporation Reducing application startup time by optimizing spatial locality of instructions in executables
US20130205282A1 (en) * 2012-02-07 2013-08-08 Microsoft Corporation Transferring program execution from compiled code to interpreted code
US9155139B2 (en) 2012-03-09 2015-10-06 Rockwell Automation Technologies, Inc. LED driver circuits and methods
US9922090B1 (en) 2012-03-27 2018-03-20 Actian Netherlands, B.V. System and method for automatic vertical decomposition of a table for improving input/output and memory utilization in a database
GB2500707B (en) * 2012-03-30 2014-09-17 Cognovo Ltd Multiprocessor system, apparatus and methods
US10559123B2 (en) * 2012-04-04 2020-02-11 Qualcomm Incorporated Patched shading in graphics processing
US9628438B2 (en) * 2012-04-06 2017-04-18 Exablox Consistent ring namespaces facilitating data storage and organization in network infrastructures
US10037212B2 (en) * 2012-04-20 2018-07-31 Nxp Usa, Inc. Information processing device and method for protecting data in a call stack
JP2013235386A (ja) * 2012-05-08 2013-11-21 Internatl Business Mach Corp <Ibm> 最適化装置、最適化方法、及び最適化プログラム
US20130332434A1 (en) * 2012-06-11 2013-12-12 Actian Netherlands, B.V. System and method using partial just-in-time complation to resolve memory access pattern problems in hash table probing
US8782620B2 (en) * 2012-06-12 2014-07-15 International Business Machines Corporation Processing reified generics in object-based programming environments
US9182984B2 (en) 2012-06-15 2015-11-10 International Business Machines Corporation Local clearing control
US8881126B2 (en) * 2012-07-31 2014-11-04 Oracle International Corporation Systems and methods for testing a compiler through compile-time decision feedback
US9274772B2 (en) 2012-08-13 2016-03-01 Microsoft Technology Licensing, Llc. Compact type layouts
TWI477970B (zh) * 2012-08-24 2015-03-21 Realtek Semiconductor Corp 電子裝置的模式切換方法與相關的電子裝置
JP5998764B2 (ja) * 2012-09-04 2016-09-28 富士通株式会社 情報処理装置、ログ出力方法およびログ出力プログラム
US9753846B2 (en) * 2012-09-06 2017-09-05 Red Hat, Inc. Adjusting the operating memory used by a virtual machine during runtime
US20150199228A1 (en) * 2012-09-06 2015-07-16 Google Inc. Conditional branch programming technique
US8826240B1 (en) * 2012-09-29 2014-09-02 Appurify, Inc. Application validation through object level hierarchy analysis
US9069902B2 (en) 2012-10-12 2015-06-30 Vmware, Inc. Software test automation
US10067858B2 (en) 2012-10-12 2018-09-04 Vmware, Inc. Cloud-based software testing
US10387294B2 (en) 2012-10-12 2019-08-20 Vmware, Inc. Altering a test
US8839201B2 (en) * 2012-10-12 2014-09-16 Vmware, Inc. Capturing test data associated with error conditions in software item testing
US9684587B2 (en) 2012-10-12 2017-06-20 Vmware, Inc. Test creation with execution
US8839202B2 (en) * 2012-10-12 2014-09-16 Vmware, Inc. Test environment managed within tests
US9292422B2 (en) 2012-10-12 2016-03-22 Vmware, Inc. Scheduled software item testing
US9292416B2 (en) 2012-10-12 2016-03-22 Vmware, Inc. Software development kit testing
US8949794B2 (en) 2012-10-12 2015-02-03 Vmware, Inc. Binding a software item to a plain english control name
US9015832B1 (en) 2012-10-19 2015-04-21 Google Inc. Application auditing through object level code inspection
US9231615B2 (en) * 2012-10-24 2016-01-05 Seagate Technology Llc Method to shorten hash chains in Lempel-Ziv compression of data with repetitive symbols
KR20140054948A (ko) * 2012-10-30 2014-05-09 한국전자통신연구원 임베디드 시스템을 위한 오픈씨엘 응용 소프트웨어 개발 지원 도구 구성 및 방법
US9389868B2 (en) 2012-11-01 2016-07-12 International Business Machines Corporation Confidence-driven selective predication of processor instructions
US9436475B2 (en) * 2012-11-05 2016-09-06 Nvidia Corporation System and method for executing sequential code using a group of threads and single-instruction, multiple-thread processor incorporating the same
US8826254B2 (en) * 2012-11-08 2014-09-02 Concurix Corporation Memoizing with read only side effects
US9113358B1 (en) 2012-11-19 2015-08-18 Google Inc. Configurable network virtualization
US8984542B2 (en) * 2012-11-30 2015-03-17 Facebook, Inc. Method and system for binding objects in dynamic programming languages using caching techniques
US9268668B1 (en) 2012-12-20 2016-02-23 Google Inc. System for testing markup language applications
US9274935B1 (en) 2013-01-15 2016-03-01 Google Inc. Application testing system with application programming interface
US10496775B2 (en) * 2013-01-31 2019-12-03 General Electric Company Method and system for use in dynamically configuring data acquisition systems
US9052888B2 (en) 2013-02-21 2015-06-09 International Business Machines Corporation Vectorization in an optimizing compiler
US11507574B1 (en) 2013-03-13 2022-11-22 Actian Netherlands B.V. Adaptive selection of a processing method based on observed performance for improved and robust system efficiency
US10275255B2 (en) 2013-03-15 2019-04-30 Intel Corporation Method for dependency broadcasting through a source organized source view data structure
WO2014150806A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for populating register view data structure by using register template snapshots
US9811342B2 (en) 2013-03-15 2017-11-07 Intel Corporation Method for performing dual dispatch of blocks and half blocks
US9886279B2 (en) 2013-03-15 2018-02-06 Intel Corporation Method for populating and instruction view data structure by using register template snapshots
WO2014151652A1 (en) 2013-03-15 2014-09-25 Soft Machines Inc Method and apparatus to allow early dependency resolution and data forwarding in a microprocessor
US9632825B2 (en) 2013-03-15 2017-04-25 Intel Corporation Method and apparatus for efficient scheduling for asymmetrical execution units
US10140138B2 (en) 2013-03-15 2018-11-27 Intel Corporation Methods, systems and apparatus for supporting wide and efficient front-end operation with guest-architecture emulation
WO2014150991A1 (en) 2013-03-15 2014-09-25 Soft Machines, Inc. A method for implementing a reduced size register view data structure in a microprocessor
US9569216B2 (en) 2013-03-15 2017-02-14 Soft Machines, Inc. Method for populating a source view data structure by using register template snapshots
WO2014150971A1 (en) * 2013-03-15 2014-09-25 Soft Machines, Inc. A method for dependency broadcasting through a block organized source view data structure
US9891924B2 (en) 2013-03-15 2018-02-13 Intel Corporation Method for implementing a reduced size register view data structure in a microprocessor
CN105122206B (zh) 2013-03-15 2018-11-09 英特尔公司 用于支持推测的访客返回地址栈仿真的方法和装置
KR102063656B1 (ko) 2013-03-15 2020-01-09 소프트 머신즈, 인크. 블록들로 그룹화된 멀티스레드 명령어들을 실행하기 위한 방법
KR102083390B1 (ko) 2013-03-15 2020-03-02 인텔 코포레이션 네이티브 분산된 플래그 아키텍처를 이용하여 게스트 중앙 플래그 아키텍처를 에뮬레이션하는 방법
US9904625B2 (en) 2013-03-15 2018-02-27 Intel Corporation Methods, systems and apparatus for predicting the way of a set associative cache
US9021443B1 (en) 2013-04-12 2015-04-28 Google Inc. Test automation API for host devices
US9552382B2 (en) 2013-04-23 2017-01-24 Exablox Corporation Reference counter integrity checking
US9298433B2 (en) * 2013-05-02 2016-03-29 Facebook, Inc. Optimizing intermediate representation of script code for fast path execution
US10127138B2 (en) 2013-06-06 2018-11-13 Microsoft Technology Licensing, Llc. Debugging native code by transitioning from execution in native mode to execution in interpreted mode
WO2014201270A1 (en) 2013-06-12 2014-12-18 Exablox Corporation Hybrid garbage collection
WO2014205286A1 (en) 2013-06-19 2014-12-24 Exablox Corporation Data scrubbing in cluster-based storage systems
US9934242B2 (en) 2013-07-10 2018-04-03 Exablox Corporation Replication of data between mirrored data sites
US10453534B2 (en) * 2013-08-07 2019-10-22 Qualcomm Technologies International, Ltd. Patching of programmable memory
US9268670B1 (en) 2013-08-08 2016-02-23 Google Inc. System for module selection in software application testing including generating a test executable based on an availability of root access
US9740716B2 (en) * 2013-08-21 2017-08-22 Oracle International Corporation System and method for dynamically selecting a garbage collection algorithm based on the contents of heap regions
US9229858B2 (en) 2013-10-08 2016-01-05 Red Hat, Inc. Concurrent garbage collector thread
US10248556B2 (en) 2013-10-16 2019-04-02 Exablox Corporation Forward-only paged data storage management where virtual cursor moves in only one direction from header of a session to data field of the session
US9053228B1 (en) 2013-10-22 2015-06-09 The Mathworks, Inc. Determining when to evaluate program code and provide results in a live evaluation programming environment
US9985829B2 (en) 2013-12-12 2018-05-29 Exablox Corporation Management and provisioning of cloud connected devices
DE102013021655A1 (de) * 2013-12-18 2015-06-18 Giesecke & Devrient Gmbh Verfahren und Vorrichtung zur Bearbeitung von Wertdokumenten
US20150186168A1 (en) * 2013-12-30 2015-07-02 Unisys Corporation Dedicating processing resources to just-in-time compilers and instruction processors in a dynamic translator
US9524178B2 (en) * 2013-12-30 2016-12-20 Unisys Corporation Defining an instruction path to be compiled by a just-in-time (JIT) compiler
US9213563B2 (en) * 2013-12-30 2015-12-15 Unisys Corporation Implementing a jump instruction in a dynamic translator that uses instruction code translation and just-in-time compilation
WO2015102631A1 (en) * 2014-01-02 2015-07-09 Hewlett Packard Development Company, L.P. Distributed kernel thread list processing for kernel patching
US9367415B1 (en) 2014-01-20 2016-06-14 Google Inc. System for testing markup language applications on a device
US9491229B1 (en) 2014-01-24 2016-11-08 Google Inc. Application experience sharing system
US9170922B1 (en) 2014-01-27 2015-10-27 Google Inc. Remote application debugging
US9774582B2 (en) 2014-02-03 2017-09-26 Exablox Corporation Private cloud connected device cluster architecture
US9830324B2 (en) 2014-02-04 2017-11-28 Exablox Corporation Content based organization of file systems
JP5988444B2 (ja) 2014-02-14 2016-09-07 インターナショナル・ビジネス・マシーンズ・コーポレーションInternational Business Machines Corporation 最適化したバイナリー・モジュールをテストする方法、並びに、当該最適化したバイナリー・モジュールをテストするためのコンピュータ及びそのコンピュータ・プログラム
US9703948B2 (en) * 2014-03-28 2017-07-11 Intel Corporation Return-target restrictive return from procedure instructions, processors, methods, and systems
WO2015163931A1 (en) * 2014-04-24 2015-10-29 Hewlett-Packard Development Company, L.P. Dynamically applying a patch to a computer application
US10261889B2 (en) 2014-06-25 2019-04-16 Microsoft Technology Licensing, Llc Techniques for edit-and-continue and enhanced optimized debugging on optimized code
US9690626B2 (en) * 2014-06-27 2017-06-27 Vmware, Inc. Processing workloads in single-threaded environments
KR101703984B1 (ko) * 2014-07-18 2017-02-09 주식회사 큐램 메모리 처리 방법, 및 메모리 처리 시스템
US10338914B2 (en) * 2014-09-01 2019-07-02 Hewlett Packard Enterprise Development Lp Dynamically applying a patch to a shared library
US9268543B1 (en) * 2014-09-23 2016-02-23 International Business Machines Corporation Efficient code cache management in presence of infrequently used complied code fragments
US9772824B2 (en) * 2015-03-25 2017-09-26 International Business Machines Corporation Program structure-based blocking
US9389851B1 (en) * 2015-06-02 2016-07-12 Oracle International Corporation System and method for providing consistency between software library repositories
US9880787B2 (en) * 2015-08-06 2018-01-30 Dialog Semiconductor B.V. System and method for memory patching circuits
US20170060924A1 (en) 2015-08-26 2017-03-02 Exablox Corporation B-Tree Based Data Model for File Systems
US9632755B1 (en) 2015-10-06 2017-04-25 International Business Machines Corporation Interface method resolution in object oriented programming models
KR102079499B1 (ko) * 2015-10-20 2020-02-21 엘에스산전 주식회사 Plc 위치 결정 시스템의 축별 제어주기 독립 할당 방법
US9864655B2 (en) 2015-10-30 2018-01-09 Google Llc Methods and apparatus for mobile computing device security in testing facilities
US9733930B2 (en) * 2015-12-21 2017-08-15 Successfactors, Inc. Logical level difference detection between software revisions
US9696973B1 (en) * 2016-02-24 2017-07-04 Semmle Limited Compilation cache with imports scanner
US9846553B2 (en) 2016-05-04 2017-12-19 Exablox Corporation Organization and management of key-value stores
FR3056782B1 (fr) * 2016-09-26 2019-12-13 Airbus Operations Generation de codes applicatifs a partir d'une specification formelle
JP6433468B2 (ja) * 2016-09-28 2018-12-05 本田技研工業株式会社 プログラム作成支援方法
US10108406B2 (en) * 2016-10-24 2018-10-23 International Business Machines Corporation Linking optimized entry points for local-use-only function pointers
US10169016B2 (en) * 2016-10-24 2019-01-01 International Business Machines Corporation Executing optimized local entry points
US10108407B2 (en) * 2016-10-24 2018-10-23 International Business Machines Corporation Loading optimized local entry points for local-use-only function pointers
US10169011B2 (en) * 2016-10-24 2019-01-01 International Business Machines Corporation Comparisons in function pointer localization
US10108404B2 (en) 2016-10-24 2018-10-23 International Business Machines Corporation Compiling optimized entry points for local-use-only function pointers
US10338932B2 (en) 2016-11-15 2019-07-02 Google Llc Bootstrapping profile-guided compilation and verification
US10025694B1 (en) * 2016-12-22 2018-07-17 SafeDK Mobile Ltd. Monitoring activity of software development kits using stack trace analysis
US10244010B2 (en) * 2017-02-16 2019-03-26 Nokia Of America Corporation Data processing apparatus configured to recover a network connection, a method, a system and a non-transitory computer readable medium configured to perform same
US20180275976A1 (en) * 2017-03-22 2018-09-27 Qualcomm Innovation Center, Inc. Link time optimization in presence of a linker script using path based rules
US10846196B1 (en) 2017-06-09 2020-11-24 Azul Systems, Inc. Code optimization for connected managed runtime environments
CN107562775B (zh) * 2017-07-14 2020-04-24 创新先进技术有限公司 一种基于区块链的数据处理方法及设备
US10642971B2 (en) * 2017-09-04 2020-05-05 Cisco Technology, Inc. Methods and systems for ensuring program code flow integrity
CN109710396B (zh) 2017-10-26 2023-08-22 华为技术有限公司 一种信息采集及内存释放的方法及装置
US10564955B2 (en) * 2018-01-03 2020-02-18 Huawei Technologies Co., Ltd. Method to manage multiple versions of parts of a software application and to retire older versions in a dynamically updatable software system
US10402320B1 (en) 2018-02-27 2019-09-03 Oracle International Corporation Verifying the validity of a transition from a current tail template to a new tail template for a fused object
US10613864B2 (en) 2018-03-16 2020-04-07 Texas Instruments Incorporated Processor with hardware supported memory buffer overflow detection
US11716558B2 (en) 2018-04-16 2023-08-01 Charter Communications Operating, Llc Apparatus and methods for integrated high-capacity data and wireless network services
US10908910B2 (en) 2018-07-27 2021-02-02 Oracle International Corporation Lazy copying of runtime-managed stack frames
CN110908790B (zh) * 2018-09-14 2022-02-22 旺宏电子股份有限公司 存储器存储装置及其操作方法
US11175802B2 (en) * 2018-09-21 2021-11-16 Sap Se Configuration object deletion manager
US11129213B2 (en) 2018-10-12 2021-09-21 Charter Communications Operating, Llc Apparatus and methods for cell identification in wireless networks
KR20200053318A (ko) * 2018-11-08 2020-05-18 삼성전자주식회사 인공 신경망의 연산 처리 그래프를 관리하는 시스템 및 이를 이용한 연산 처리 그래프를 관리하는 방법
US10956133B2 (en) * 2018-11-28 2021-03-23 International Business Machines Corporation Static optimization of production code for dynamic profiling
US11182205B2 (en) * 2019-01-02 2021-11-23 Mellanox Technologies, Ltd. Multi-processor queuing model
US11129171B2 (en) 2019-02-27 2021-09-21 Charter Communications Operating, Llc Methods and apparatus for wireless signal maximization and management in a quasi-licensed wireless system
US11048549B2 (en) * 2019-04-04 2021-06-29 Google Llc Transferral of process state and/or components in computing environments
CN112015491B (zh) * 2019-05-30 2022-08-09 华为技术有限公司 实现函数跳转的方法、装置及计算机存储介质
CN114375313A (zh) * 2019-07-19 2022-04-19 帝人株式会社 热塑性树脂和包含该热塑性树脂的光学构件
US11720340B2 (en) 2019-07-30 2023-08-08 Hewlett-Packard Development Company, L.P. Hash map of executable control blocks
CN110443053B (zh) * 2019-07-31 2023-03-14 四川效率源信息安全技术股份有限公司 一种基于密钥循环表及映射表的密钥生成方法
US11070420B2 (en) * 2019-09-13 2021-07-20 Pacific Track, LLC System, device, and method for configuring the handling of events
US11182149B2 (en) * 2019-09-30 2021-11-23 International Business Machines Corporation Just-in-time code patching
US11526358B2 (en) * 2019-10-15 2022-12-13 Raytheon Company Deterministic execution replay for multicore systems
US11026205B2 (en) 2019-10-23 2021-06-01 Charter Communications Operating, Llc Methods and apparatus for device registration in a quasi-licensed wireless system
US11301221B2 (en) * 2019-12-13 2022-04-12 Sap Se Rapid code compiling system
US11537429B2 (en) * 2019-12-19 2022-12-27 Red Hat, Inc. Sub-idle thread priority class
RU2729210C1 (ru) * 2020-01-28 2020-08-05 Акционерное общество «Информационные спутниковые системы» имени академика М.Ф. Решетнёва» Комплекс тестирования программного обеспечения электронных устройств
CN111680289B (zh) * 2020-04-29 2023-04-14 中国科学院信息工程研究所 一种链式哈希栈运算方法及装置
EP3940565A1 (en) * 2020-07-15 2022-01-19 Hewlett-Packard Development Company, L.P. System management states
US11573894B2 (en) 2020-10-29 2023-02-07 Oracle International Corporation Tracking garbage collection states of references
US11573794B2 (en) * 2021-03-25 2023-02-07 Oracle International Corporation Implementing state-based frame barriers to process colorless roots during concurrent execution
US11875193B2 (en) 2021-03-25 2024-01-16 Oracle International Corporation Tracking frame states of call stack frames including colorless roots
US11513954B2 (en) 2021-03-25 2022-11-29 Oracle International Corporation Consolidated and concurrent remapping and identification for colorless roots
CN113127001B (zh) * 2021-04-28 2024-03-08 上海米哈游璃月科技有限公司 一种代码编译过程监控方法、装置、设备和介质
US11734171B2 (en) 2021-05-19 2023-08-22 Oracle International Corporation Snapshot at the beginning marking in Z garbage collector
CN113190466A (zh) * 2021-06-08 2021-07-30 科东(广州)软件科技有限公司 自动化测试方法、装置、设备及介质
CN117377949A (zh) * 2021-06-30 2024-01-09 华为技术有限公司 用于提供上下文敏感的、非侵入性数据处理优化框架的方法和系统
US11847035B2 (en) 2021-08-23 2023-12-19 International Business Machines Corporation Functional test of processor code modification operations

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11237991A (ja) * 1997-10-06 1999-08-31 Sun Microsyst Inc コンパイル済アクティベーションを動的に逆最適化する方法及び装置
JPH11327906A (ja) * 1998-03-24 1999-11-30 Sun Microsyst Inc 動的リンキング及び動的ロ―ディングの存在下において動的にディスパッチされたコ―ルの静的結合

Family Cites Families (167)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4367685A (en) * 1980-09-08 1983-01-11 Frame Scott W Process and apparatus for precisely metering quantities of granular or pulverulent solids
US4525780A (en) * 1981-05-22 1985-06-25 Data General Corporation Data processing system having a memory using object-based information and a protection scheme for determining access rights to such information
US4675829A (en) 1984-07-27 1987-06-23 Intellicorp Corporation Method and apparatus for building knowledge-based systems
JPS6260037A (ja) * 1985-09-09 1987-03-16 Nec Corp コンパイラの目的プログラムの自動検査方式
US4831517A (en) * 1986-10-10 1989-05-16 International Business Machines Corporation Branch and return on address instruction and methods and apparatus for implementing same in a digital data processing system
JPH01155438A (ja) * 1987-12-12 1989-06-19 Hitachi Ltd コンパイラ試験方式
JP2666847B2 (ja) * 1988-06-06 1997-10-22 日本電気株式会社 異種言語間連絡方式
US4924408A (en) * 1988-08-19 1990-05-08 International Business Machines Corporation Technique for compilation of knowledge bases
EP0416331B1 (en) 1989-08-31 1995-05-17 Yokogawa Electric Corporation Line computer
JPH03186945A (ja) * 1989-12-18 1991-08-14 Oki Electric Ind Co Ltd プログラム実行特性の測定方法
JPH04540A (ja) * 1990-04-17 1992-01-06 Toshiba Corp デバック装置
JPH044434A (ja) * 1990-04-21 1992-01-08 Mitsubishi Electric Corp プログラムのトレース方法
GB2246883B (en) * 1990-08-07 1995-01-11 Matsushita Electric Ind Co Ltd Inference processor
JP2901720B2 (ja) * 1990-08-10 1999-06-07 株式会社日立製作所 オブジェクトコード比較方法
US5301325A (en) 1991-03-07 1994-04-05 Digital Equipment Corporation Use of stack depth to identify architechture and calling standard dependencies in machine code
US5450575A (en) 1991-03-07 1995-09-12 Digital Equipment Corporation Use of stack depth to identify machine code mistakes
JPH04287134A (ja) * 1991-03-15 1992-10-12 Nec Corp 簡易トレース情報取得方式
US5293614A (en) * 1991-04-08 1994-03-08 Texas Instruments Incorporated System and method for hard real-time garbage collection requiring a write barrier but no read barrier
US5193180A (en) * 1991-06-21 1993-03-09 Pure Software Inc. System for modifying relocatable object code files to monitor accesses to dynamically allocated memory
JP2921190B2 (ja) 1991-07-25 1999-07-19 日本電気株式会社 並列実行方式
JPH05233326A (ja) * 1991-12-19 1993-09-10 Internatl Business Mach Corp <Ibm> コンピュータシステムにおいて事象を取り扱う方法及びシステム
JPH05324399A (ja) * 1992-03-23 1993-12-07 Toshiba Corp 情報監視装置
US5515538A (en) * 1992-05-29 1996-05-07 Sun Microsystems, Inc. Apparatus and method for interrupt handling in a multi-threaded operating system kernel
US5457681A (en) * 1992-06-05 1995-10-10 Washington University ATM-Ethernet portal/concentrator
US5442792A (en) 1992-08-07 1995-08-15 Hughes Aircraft Company Expert system compilation method
JPH06119203A (ja) * 1992-10-06 1994-04-28 Oki Electric Ind Co Ltd デバック行削除装置
EP0664905B1 (de) * 1992-10-15 1996-04-03 Siemens Aktiengesellschaft Verfahren zur durchfürhung von tests an auf einem rechner parallel ablauffähigen objekten eines objektorientierten programmes
JPH06187143A (ja) * 1992-10-23 1994-07-08 Sony Corp 電子装置
JPH06139107A (ja) * 1992-10-30 1994-05-20 Nec Corp ブレイクアドレス検出回路
JP3199876B2 (ja) * 1992-11-20 2001-08-20 株式会社東芝 プログラム解析システムおよび方法
JPH06168111A (ja) * 1992-11-30 1994-06-14 Fuji Facom Corp デバッグ文の自動作成方式
US5560003A (en) * 1992-12-21 1996-09-24 Iowa State University Research Foundation, Inc. System and hardware module for incremental real time garbage collection and memory management
DE69327448T2 (de) 1992-12-21 2004-03-04 Sun Microsystems, Inc., Mountain View Verfahren und Vorrichtung für Teilaufgaben in verteiltem Verarbeitungssystem
US5367685A (en) 1992-12-22 1994-11-22 Firstperson, Inc. Method and apparatus for resolving data references in generated code
US5603030A (en) 1993-01-07 1997-02-11 Microsoft Corporation Method and system for destruction of objects using multiple destructor functions in an object-oriented computer system
JPH06222952A (ja) * 1993-01-27 1994-08-12 Toshiba Corp デバッグ支援装置
US5452457A (en) 1993-01-29 1995-09-19 International Business Machines Corporation Program construct and methods/systems for optimizing assembled code for execution
JPH06274375A (ja) * 1993-03-20 1994-09-30 Hitachi Ltd システム評価装置
US5537573A (en) * 1993-05-28 1996-07-16 Rambus, Inc. Cache system and method for prefetching of data
US5632034A (en) * 1993-06-01 1997-05-20 International Business Machines Corporation Controlling method invocation sequence through virtual functions in an object-oriented class library
CA2123924A1 (en) * 1993-06-02 1994-12-03 Charles Douglas Blewett Specifying contexts in callback style programming
US6126329A (en) * 1993-06-08 2000-10-03 Rational Software Coporation Method and apparatus for accurate profiling of computer programs
US5469574A (en) 1993-06-18 1995-11-21 International Business Machines Corporation Method and system for interfacing interpreted applications with compiled procedures using signature files
US5748961A (en) * 1993-07-12 1998-05-05 Digital Equipment Corporation Efficient method and apparatus for compiling and linking modules of computer code in a large software system
US5892944A (en) * 1993-07-20 1999-04-06 Kabushiki Kaisha Toshiba Program execution and operation right management system suitable for single virtual memory scheme
US5721854A (en) 1993-11-02 1998-02-24 International Business Machines Corporation Method and apparatus for dynamic conversion of computer instructions
JP3480973B2 (ja) * 1993-11-30 2003-12-22 富士通株式会社 並列処理システムの動作解析装置
US5761511A (en) * 1994-01-28 1998-06-02 Sun Microsystems, Inc. Method and apparatus for a type-safe framework for dynamically extensible objects
US5590329A (en) * 1994-02-04 1996-12-31 Lucent Technologies Inc. Method and apparatus for detecting memory access errors
US5732273A (en) * 1995-08-11 1998-03-24 Digital Equipment Corporation System for monitoring compute system performance
JPH07262044A (ja) * 1994-03-25 1995-10-13 Hitachi Ltd イベントトレース解析方法
JPH07271631A (ja) * 1994-03-31 1995-10-20 Fujitsu Ltd デバッガ
AUPM519694A0 (en) * 1994-04-19 1994-05-12 Griffith University Method for testing and debugging computer programs
US5835743A (en) * 1994-06-30 1998-11-10 Sun Microsystems, Inc. Application binary interface and method of interfacing binary application program to digital computer
US6341293B1 (en) * 1994-07-13 2002-01-22 Object Technology Licensing Corp Real-time computer “garbage collector”
US6006033A (en) * 1994-08-15 1999-12-21 International Business Machines Corporation Method and system for reordering the instructions of a computer program to optimize its execution
US5613120A (en) 1994-10-20 1997-03-18 Silicon Graphics, Inc. System and method for enabling, without recompilation, modification of class definitions and implementations in an object-oriented computer program
US5590332A (en) 1995-01-13 1996-12-31 Baker; Henry G. Garbage collection, tail recursion and first-class continuations in stack-oriented languages
US5511190A (en) * 1995-01-20 1996-04-23 Tandem Computers, Inc. Hash-based database grouping system and method
JPH08202579A (ja) * 1995-01-23 1996-08-09 Toshiba Corp プログラミング支援装置及びプログラミング支援方法
EP0729097A1 (en) * 1995-02-07 1996-08-28 Sun Microsystems, Inc. Method and apparatus for run-time memory access checking and memory leak detection of a multi-threaded program
US5655122A (en) * 1995-04-05 1997-08-05 Sequent Computer Systems, Inc. Optimizing compiler with static prediction of branch probability, branch frequency and function frequency
US5619698A (en) * 1995-05-05 1997-04-08 Apple Computer, Inc. Method and apparatus for patching operating systems
JPH08320795A (ja) * 1995-05-24 1996-12-03 Fuji Xerox Co Ltd プログラム制御システム
US5835771A (en) * 1995-06-07 1998-11-10 Rogue Wave Software, Inc. Method and apparatus for generating inline code using template metaprograms
US5805899A (en) * 1995-07-06 1998-09-08 Sun Microsystems, Inc. Method and apparatus for internal versioning of objects using a mapfile
US5675804A (en) 1995-08-31 1997-10-07 International Business Machines Corporation System and method for enabling a compiled computer program to invoke an interpretive computer program
GB9526129D0 (en) * 1995-12-21 1996-02-21 Philips Electronics Nv Machine code format translation
US6301652B1 (en) * 1996-01-31 2001-10-09 International Business Machines Corporation Instruction cache alignment mechanism for branch targets based on predicted execution frequencies
US5848274A (en) 1996-02-29 1998-12-08 Supercede, Inc. Incremental byte code compilation system
US5764989A (en) * 1996-02-29 1998-06-09 Supercede, Inc. Interactive software development system
US5815720A (en) 1996-03-15 1998-09-29 Institute For The Development Of Emerging Architectures, L.L.C. Use of dynamic translation to collect and exploit run-time information in an optimizing compilation system
US6138238A (en) * 1997-12-11 2000-10-24 Sun Microsystems, Inc. Stack-based access control using code and executor identifiers
US6151703A (en) * 1996-05-20 2000-11-21 Inprise Corporation Development system with methods for just-in-time compilation of programs
US5815718A (en) 1996-05-30 1998-09-29 Sun Microsystems, Inc. Method and system for loading classes in read-only memory
US5946487A (en) * 1996-06-10 1999-08-31 Lsi Logic Corporation Object-oriented multi-media architecture
US6189048B1 (en) * 1996-06-26 2001-02-13 Sun Microsystems, Inc. Mechanism for dispatching requests in a distributed object system
US5761513A (en) * 1996-07-01 1998-06-02 Sun Microsystems, Inc. System and method for exception handling in dynamically linked programs
US6067577A (en) * 1996-09-30 2000-05-23 Apple Computer, Inc. Dynamic method resolution for native methods in a dynamic object-oriented programming language
US6041179A (en) * 1996-10-03 2000-03-21 International Business Machines Corporation Object oriented dispatch optimization
US5835958A (en) * 1996-10-29 1998-11-10 Sun Microsystems, Inc. Method and apparatus for dynamically sizing non-contiguous runtime stacks
US5857104A (en) 1996-11-26 1999-01-05 Hewlett-Packard Company Synthetic dynamic branch prediction
US5950221A (en) * 1997-02-06 1999-09-07 Microsoft Corporation Variably-sized kernel memory stacks
US5905855A (en) * 1997-02-28 1999-05-18 Transmeta Corporation Method and apparatus for correcting errors in computer systems
JPH10240581A (ja) * 1997-02-28 1998-09-11 Fujitsu Ltd Cpu時間測定装置
US5948059A (en) * 1997-03-21 1999-09-07 International Business Machines Corporation Method and apparatus for synchronizing multimedia messages in different servers
US5920876A (en) 1997-04-23 1999-07-06 Sun Microsystems, Inc. Performing exact garbage collection using bitmaps that identify pointer values within objects
US5757690A (en) * 1997-04-23 1998-05-26 Exponential Technology, Inc. Embedded ROM with RAM valid bits for fetching ROM-code updates from external memory
JP3138658B2 (ja) * 1997-04-28 2001-02-26 日本電気アイシーマイコンシステム株式会社 タスク・トレース装置
US6175916B1 (en) * 1997-05-06 2001-01-16 Microsoft Corporation Common-thread inter-process function calls invoked by jumps to invalid addresses
US6330659B1 (en) * 1997-11-06 2001-12-11 Iready Corporation Hardware accelerator for an object-oriented programming language
US5842016A (en) * 1997-05-29 1998-11-24 Microsoft Corporation Thread synchronization in a garbage-collected system using execution barriers
US6094664A (en) 1997-05-30 2000-07-25 Sun Microsystems Method and apparatus for optimizing the null pointer exception in an object-oriented programming environment with statically typed variables
US6199075B1 (en) * 1997-05-30 2001-03-06 Sun Microsystems, Inc. Method and apparatus for generational garbage collection of a heap memory shared by multiple processors
US6138210A (en) * 1997-06-23 2000-10-24 Sun Microsystems, Inc. Multi-stack memory architecture
US5873105A (en) * 1997-06-26 1999-02-16 Sun Microsystems, Inc. Bounded-pause time garbage collection system and method including write barrier associated with a source instance of a partially relocated object
US5873104A (en) 1997-06-26 1999-02-16 Sun Microsystems, Inc. Bounded-pause time garbage collection system and method including write barrier associated with source and target instances of a partially relocated object
US6513156B2 (en) * 1997-06-30 2003-01-28 Sun Microsystems, Inc. Interpreting functions utilizing a hybrid of virtual and native machine instructions
US6105040A (en) 1997-06-30 2000-08-15 Sun Microsystems, Inc. Method and apparatus for managing stored objects
US6317872B1 (en) * 1997-07-11 2001-11-13 Rockwell Collins, Inc. Real time processor optimized for executing JAVA programs
US6173276B1 (en) * 1997-08-21 2001-01-09 Scicomp, Inc. System and method for financial instrument modeling and valuation
GB9717715D0 (en) * 1997-08-22 1997-10-29 Philips Electronics Nv Data processor with localised memory reclamation
US6557091B2 (en) * 1997-08-22 2003-04-29 Koninklijke Philips Electronics N.V. Data processor with localized memory reclamation
US6112304A (en) * 1997-08-27 2000-08-29 Zipsoft, Inc. Distributed computing architecture
US6275938B1 (en) * 1997-08-28 2001-08-14 Microsoft Corporation Security enhancement for untrusted executable code
US6366876B1 (en) * 1997-09-29 2002-04-02 Sun Microsystems, Inc. Method and apparatus for assessing compatibility between platforms and applications
US6072953A (en) * 1997-09-30 2000-06-06 International Business Machines Corporation Apparatus and method for dynamically modifying class files during loading for execution
US6047125A (en) * 1997-10-01 2000-04-04 Sun Microsystems, Inc. Garbage collection system for improved use of memory by removal of reference conflicts
US5970249A (en) * 1997-10-06 1999-10-19 Sun Microsystems, Inc. Method and apparatus for performing byte-code optimization during pauses
US6079018A (en) * 1997-10-08 2000-06-20 Agorics, Inc. System and method for generating unique secure values for digitally signing documents
GB9721659D0 (en) * 1997-10-14 1997-12-10 Philips Electronics Nv Space-limited marking structure for tracing garbage collectors
US6260077B1 (en) * 1997-10-24 2001-07-10 Sun Microsystems, Inc. Method, apparatus and program product for interfacing a multi-threaded, client-based API to a single-threaded, server-based API
US5966702A (en) 1997-10-31 1999-10-12 Sun Microsystems, Inc. Method and apparatus for pre-processing and packaging class files
JP3377419B2 (ja) * 1997-11-11 2003-02-17 インターナショナル・ビジネス・マシーンズ・コーポレーション 命令列生成方法及び装置、変換方法、及びコンピュータ
US6170083B1 (en) * 1997-11-12 2001-01-02 Intel Corporation Method for performing dynamic optimization of computer code
US6664978B1 (en) * 1997-11-17 2003-12-16 Fujitsu Limited Client-server computer network management architecture
US6175957B1 (en) * 1997-12-09 2001-01-16 International Business Machines Corporation Method of, system for, and computer program product for providing efficient utilization of memory hierarchy through code restructuring
US6108797A (en) * 1997-12-11 2000-08-22 Winbond Electronics Corp. Method and system for loading microprograms in partially defective memory
US6349406B1 (en) * 1997-12-12 2002-02-19 International Business Machines Coporation Method and system for compensating for instrumentation overhead in trace data by computing average minimum event times
US6081665A (en) * 1997-12-19 2000-06-27 Newmonics Inc. Method for efficient soft real-time execution of portable byte code computer programs
US6412105B1 (en) * 1997-12-31 2002-06-25 Elbrus International Limited Computer method and apparatus for compilation of multi-way decisions
US6044403A (en) * 1997-12-31 2000-03-28 At&T Corp Network server platform for internet, JAVA server and video application server
US6141768A (en) * 1998-03-12 2000-10-31 Winbond Electronics Corp. Self-corrective memory system and method
US6658492B1 (en) 1998-03-20 2003-12-02 Sun Microsystems, Inc. System and method for reducing the footprint of preloaded classes
US6704927B1 (en) * 1998-03-24 2004-03-09 Sun Microsystems, Inc. Static binding of dynamically-dispatched calls in the presence of dynamic linking and loading
US6148391A (en) * 1998-03-26 2000-11-14 Sun Microsystems, Inc. System for simultaneously accessing one or more stack elements by multiple functional units using real stack addresses
US6052739A (en) * 1998-03-26 2000-04-18 Sun Microsystems, Inc. Method and apparatus for object-oriented interrupt system
US6374286B1 (en) * 1998-04-06 2002-04-16 Rockwell Collins, Inc. Real time processor capable of concurrently running multiple independent JAVA machines
US6189141B1 (en) * 1998-05-04 2001-02-13 Hewlett-Packard Company Control path evaluating trace designator with dynamically adjustable thresholds for activation of tracing for high (hot) activity and low (cold) activity of flow control
US6047295A (en) * 1998-05-05 2000-04-04 International Business Machines Corporation Computer system, program product and method of managing weak references with a concurrent mark sweep collector
US6098080A (en) * 1998-05-05 2000-08-01 International Business Machines Corporation Computer system, program product and method of collecting interned data with a mark sweep collector
US6735761B1 (en) * 1998-05-15 2004-05-11 International Business Machines Corporation Compile method frame detection method and device code discarding method and computer
US6223202B1 (en) * 1998-06-05 2001-04-24 International Business Machines Corp. Virtual machine pooling
US6209066B1 (en) * 1998-06-30 2001-03-27 Sun Microsystems, Inc. Method and apparatus for memory allocation in a multi-threaded virtual machine
US6205465B1 (en) * 1998-07-22 2001-03-20 Cisco Technology, Inc. Component extensible parallel execution of multiple threads assembled from program components specified with partial inter-component sequence information
ATE323305T1 (de) * 1998-07-24 2006-04-15 Sun Microsystems Inc Verfahren und vorrichtung zur durchführung einer deterministischen speicherzuordnungsantwort in einem computer-system
US6327704B1 (en) * 1998-08-06 2001-12-04 Hewlett-Packard Company System, method, and product for multi-branch backpatching in a dynamic translator
US6253215B1 (en) * 1998-08-17 2001-06-26 Sun Microsystems Method, apparatus, and article of manufacture for facilitating resource management for applications having two types of program code
US6269425B1 (en) * 1998-08-20 2001-07-31 International Business Machines Corporation Accessing data from a multiple entry fully associative cache buffer in a multithread data processing system
US6327701B2 (en) * 1998-09-15 2001-12-04 Sun Microsystems, Inc. Method and apparatus for finding bugs related to garbage collection in a virtual machine
DE19843640A1 (de) * 1998-09-23 2000-03-30 Siemens Ag Verfahren zum Konfigurieren eines konfigurierbaren Hardware-Blocks
US6381735B1 (en) * 1998-10-02 2002-04-30 Microsoft Corporation Dynamic classification of sections of software
US6499137B1 (en) * 1998-10-02 2002-12-24 Microsoft Corporation Reversible load-time dynamic linking
US6308318B2 (en) * 1998-10-07 2001-10-23 Hewlett-Packard Company Method and apparatus for handling asynchronous exceptions in a dynamic translation system
US6317756B1 (en) * 1998-10-07 2001-11-13 International Business Machines Corporation On-the-fly garbage collector
US6654953B1 (en) * 1998-10-09 2003-11-25 Microsoft Corporation Extending program languages with source-program attribute tags
US20020147969A1 (en) * 1998-10-21 2002-10-10 Richard A. Lethin Dynamic optimizing object code translator for architecture emulation and dynamic optimizing object code translation method
US6625635B1 (en) * 1998-11-02 2003-09-23 International Business Machines Corporation Deterministic and preemptive thread scheduling and its use in debugging multithreaded applications
US6351844B1 (en) * 1998-11-05 2002-02-26 Hewlett-Packard Company Method for selecting active code traces for translation in a caching dynamic translator
GB9825102D0 (en) * 1998-11-16 1999-01-13 Insignia Solutions Plc Computer system
US6463580B1 (en) * 1998-11-18 2002-10-08 Intel Corporation Parallel processing utilizing highly correlated data values
US6353829B1 (en) * 1998-12-23 2002-03-05 Cray Inc. Method and system for memory allocation in a multiprocessing environment
US6412081B1 (en) * 1999-01-15 2002-06-25 Conexant Systems, Inc. System and method for providing a trap and patch function to low power, cost conscious, and space constrained applications
US7111290B1 (en) * 1999-01-28 2006-09-19 Ati International Srl Profiling program execution to identify frequently-executed portions and to assist binary translation
US6317816B1 (en) * 1999-01-29 2001-11-13 International Business Machines Corporation Multiprocessor scaleable system and method for allocating memory from a heap
US6338133B1 (en) * 1999-03-12 2002-01-08 International Business Machines Corporation Measured, allocation of speculative branch instructions to processor execution units
US6629113B1 (en) * 1999-06-30 2003-09-30 International Business Machines Corporation Method and system for dynamically adjustable and configurable garbage collector
US6480862B1 (en) * 1999-04-23 2002-11-12 International Business Machines Corporation Relation-based ordering of objects in an object heap
US6381738B1 (en) * 1999-07-16 2002-04-30 International Business Machines Corporation Method for optimizing creation and destruction of objects in computer programs
US6615253B1 (en) * 1999-08-31 2003-09-02 Accenture Llp Efficient server side data retrieval for execution of client side applications
US6529909B1 (en) * 1999-08-31 2003-03-04 Accenture Llp Method for translating an object attribute converter in an information services patterns environment
US6539396B1 (en) * 1999-08-31 2003-03-25 Accenture Llp Multi-object identifier system and method for information service pattern environment
US6529948B1 (en) * 1999-08-31 2003-03-04 Accenture Llp Multi-object fetch component
US6457111B1 (en) * 1999-12-14 2002-09-24 International Business Machines Corporation Method and system for allocation of a persistence indicator for an object in an object-oriented environment
US6671795B1 (en) * 2000-01-21 2003-12-30 Intel Corporation Method and apparatus for pausing execution in a processor or the like
US6651248B1 (en) * 2000-09-01 2003-11-18 International Business Machines Corporation Method and apparatus for efficient interface method dispatch
US6978285B2 (en) * 2002-08-22 2005-12-20 Intel Corporation Methods and apparatus for concurrent enumeration of an object reference root set

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH11237991A (ja) * 1997-10-06 1999-08-31 Sun Microsyst Inc コンパイル済アクティベーションを動的に逆最適化する方法及び装置
JPH11327906A (ja) * 1998-03-24 1999-11-30 Sun Microsyst Inc 動的リンキング及び動的ロ―ディングの存在下において動的にディスパッチされたコ―ルの静的結合

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102955735A (zh) * 2011-08-24 2013-03-06 英业达股份有限公司 基本输入输出系统测试方法

Also Published As

Publication number Publication date
US20020108107A1 (en) 2002-08-08
GB9825102D0 (en) 1999-01-13
AU2846999A (en) 2000-06-05
US20020112227A1 (en) 2002-08-15
US20020108106A1 (en) 2002-08-08
US20020029357A1 (en) 2002-03-07
JP4783471B2 (ja) 2011-09-28
US20020040470A1 (en) 2002-04-04
US8631219B2 (en) 2014-01-14
WO2000029937A8 (en) 2001-12-20
US6901587B2 (en) 2005-05-31
WO2000029937A2 (en) 2000-05-25
US6925637B2 (en) 2005-08-02
JP2003526135A (ja) 2003-09-02
US20020049865A1 (en) 2002-04-25
EP1208425A2 (en) 2002-05-29
US20080016507A1 (en) 2008-01-17
US20120278581A1 (en) 2012-11-01
US7069549B2 (en) 2006-06-27
EP1208425B1 (en) 2008-09-03
US7080366B2 (en) 2006-07-18
US7058929B2 (en) 2006-06-06
US7007005B2 (en) 2006-02-28
DE69939495D1 (de) 2008-10-16
US6862728B2 (en) 2005-03-01
US6766513B2 (en) 2004-07-20
US20020104077A1 (en) 2002-08-01
US8127280B2 (en) 2012-02-28
US20020032822A1 (en) 2002-03-14
US7039738B2 (en) 2006-05-02
US20020032719A1 (en) 2002-03-14
US6691303B2 (en) 2004-02-10
US20020165848A1 (en) 2002-11-07
US20020042807A1 (en) 2002-04-11

Similar Documents

Publication Publication Date Title
JP4783471B2 (ja) クラスが有するメソッドを呼出して実行するコンピュータ・システムが行う方法
US6093216A (en) Method of run-time tracking of object references in Java programs
US8402224B2 (en) Thread-shared software code caches
KR101872625B1 (ko) 동적 타입 어레이 객체들에 액세스할 시의 크기 의존적 타입
US6968546B2 (en) Debugging support using dynamic re-compilation
US7934204B2 (en) Partitioning code in program code conversion
US20020144245A1 (en) Static compilation of instrumentation code for debugging support
US20060095483A1 (en) Modified computer architecture with finalization of objects
EP1190315B1 (en) Facilitating garbage collection during object versioning for space and time dimensional computing
KR100577366B1 (ko) 이종의 자바 메소드를 실행하는 방법 및 장치
GB2404044A (en) Partitioning code in program code conversion to account for self-modifying code
US6931638B2 (en) Method and apparatus to facilitate sharing optimized instruction code in a multitasking virtual machine
US9898268B2 (en) Enhanced local commoning
KR20070083024A (ko) 가상 머신 환경에서의 메소드 호출 방법 및 상기 방법을수행하는 가상 머신이 탑재된 시스템
Stilkerich An OSEK Operating System Interface and Memory Management for Java
Matthews Papers on Poly/ML
AU2005236088A1 (en) Modified computer architecture with finalization of objects

Legal Events

Date Code Title Description
A131 Notification of reasons for refusal

Free format text: JAPANESE INTERMEDIATE CODE: A131

Effective date: 20101201

A601 Written request for extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A601

Effective date: 20110221

A602 Written permission of extension of time

Free format text: JAPANESE INTERMEDIATE CODE: A602

Effective date: 20110224

A521 Request for written amendment filed

Free format text: JAPANESE INTERMEDIATE CODE: A523

Effective date: 20110519

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20110609

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20110708

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20140715

Year of fee payment: 3

R150 Certificate of patent or registration of utility model

Free format text: JAPANESE INTERMEDIATE CODE: R150

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

S531 Written request for registration of change of domicile

Free format text: JAPANESE INTERMEDIATE CODE: R313531

R350 Written notification of registration of transfer

Free format text: JAPANESE INTERMEDIATE CODE: R350

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

R250 Receipt of annual fees

Free format text: JAPANESE INTERMEDIATE CODE: R250

EXPY Cancellation because of completion of term