JP2009211187A - 情報処理装置 - Google Patents

情報処理装置 Download PDF

Info

Publication number
JP2009211187A
JP2009211187A JP2008051265A JP2008051265A JP2009211187A JP 2009211187 A JP2009211187 A JP 2009211187A JP 2008051265 A JP2008051265 A JP 2008051265A JP 2008051265 A JP2008051265 A JP 2008051265A JP 2009211187 A JP2009211187 A JP 2009211187A
Authority
JP
Japan
Prior art keywords
code
subroutine
execution
address
content
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
JP2008051265A
Other languages
English (en)
Inventor
Shinya Iguchi
慎也 井口
Takatoshi Kato
崇利 加藤
Nobuaki Obinata
宣昭 小日向
Hiroshi Nakakoshi
洋 中越
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.)
Hitachi Ltd
Original Assignee
Hitachi Ltd
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 Hitachi Ltd filed Critical Hitachi Ltd
Priority to JP2008051265A priority Critical patent/JP2009211187A/ja
Publication of JP2009211187A publication Critical patent/JP2009211187A/ja
Pending legal-status Critical Current

Links

Images

Landscapes

  • Devices For Executing Special Programs (AREA)

Abstract

【課題】コンテンツの実行速度を向上させる情報処理装置を提供する。
【解決手段】本発明の携帯電話機101は、スクリプト或いはJavaプログラム107のサブルーチンごとに、ネイティブコード131、第1コード119、及び第2コード121を記憶するメモリと仮想マシン153と、プロセッサ113と、第1コード119から第2コード121を生成するプリコンパイル回路173とを備える。この各種コードは、該当する種類を表すコードタイプが記述されたヘッダ部250を有するとともに、他のサブルーチンへのジャンプ先アドレスとして特殊アドレスが記述されており、前記特殊アドレスは、特殊アドレス識別子と前記他のサブルーチンの先頭アドレスを含む。さらに、携帯電話機101は、プロセッサ113の特殊アドレスへのアクセスを検出した場合、メモリ117上に存在するコードの種類に応じて、該コードの処理方法を切り替えるサブルーチン管理手段を備える。
【選択図】図1

Description

本発明は、携帯電話、カーナビゲーション装置、及びテレビ受像機等の情報処理装置内で動作するJITコンパイラを備えた仮想マシンに関する。
近年、ユーザの要望するコンテンツは、ダウンロード可能なアプリケーションとして又はそのまま利用できるWebアプリケーションとして、ホームページ上で提供されることが多い。これらのコンテンツには、文書編集ソフト、表計算ソフト、及びメール送受信ソフト等のコンピュータプログラムだけでなく、ゲーム、小説、動画、アニメーション等のソフトウェアも含まれる。
しかしながら、このアプリケーション及びそれを表示するブラウザは、主に閲覧を目的として作られているため、画面デザイン、操作性、応答性の面において、Windows(登録商標)等のデスクトップアプリケーションに劣っていた。そこで、これらの課題を改善するため、JavaScript(登録商標。非特許文献1参照)、Ajax(非特許文献2参照)などの技術を用いて、既存のデスクトップアプリケーションと同等な性能を持つRich Internet Application(RIA、非特許文献3参照)と呼ばれるWebアプリケーションが開発されている。
また、高度なアニメーションや動画を表示させることができるメディアプレイヤーと呼ばれるアプリケーション実行環境が、ブラウザのプラグインとして、又は単体のアプリケーションとして開発されている(非特許文献4参照)。このメディアプレイヤーを用いることによっても、既存のデスクトップアプリケーションと同等なアプリケーション実行環境を実現することができる。
これらのブラウザ及びメディアプレイヤーは、CPUを内蔵し、ソフトウェアに制御されて動作するパーソナルコンピュータ(PC)以外の機器、いわゆる組込み機器においても広く用いられている。組込み機器としては、例えば、携帯電話機、その他の携帯情報機器、カーナビゲーション装置、家庭用電話機、携帯ゲーム機、家庭用ゲーム機、HDDレコーダ等の個人用機器、及びカラオケ機器、ロボット、鉄道等の輸送機器、ロケット、プラント制御装置等の業務用機器がある。
上記ブラウザ及びメディアプレイヤーは、HTML、XML、Java(登録商標)、JavaScript等の標準的な技術を採用していることから、コンテンツの作成時には、OS等のアーキテクチャの違いを意識する必要がない。従って、一度開発されたコンテンツは、任意の端末で変更せずに動作させることが原理的には可能となり、開発負担の大幅な軽減及び互換性の向上を実現している。
上記コンテンツを組込み機器向けに開発する際には、PC向けの場合とは異なり、CPUの処理速度、メモリの容量、画像表示能力等の面において、PCと比較してリソースが厳しく制限される点を考慮しなければならない。特に、RIAの開発においては、JavaScript等のスクリプト言語やJavaで動作を記述することが多い。しかし、スクリプト言語は、C++などと比較して、記述量が少ないため、開発効率は良いという利点がある一方で、同一環境での実行速度が数倍遅いという問題がある。実行速度が遅いという問題については、Javaで記述されたプログラム(Javaプログラム)にも共通する。
この問題の一因としては、スクリプト言語で記述されたコードを含むプログラム及びJavaプログラムが、組込み機器等の情報処理装置のOSが直接実行できるネイティブコードとは異なる形式で配布されることが挙げられる。これらのプログラムのコードは、OSやハードウェア等のアーキテクチャに依存しないバイナリ形式のJavaバイトコードと呼ばれる中間コードに一旦コンパイルされ、この中間コードの状態で配布される。
すなわち、中間コードの形式のプログラムは、インタプリタ方式又はJust-In-Timeコンパイル(JITコンパイル)方式で実行される。具体的には、インタプリタ方式の場合、例えばソフトウェアで構成したインタプリタが、中間コードをネイティブコードに逐次変換し(例えば、コード単位で変換し)ながら実行する。JITコンパイル方式の場合、例えばソフトウェアで構成したJITコンパイラが、中間コードをネイティブコードに一旦変換し(例えば、サブルーチン単位で変換し)てから実行する。
更に詳細には、インタプリタ方式とJITコンパイル方式のいずれにおいても、生成されたネイティブコードは、実際にはCPUによって実行される。PC等の多くの情報処理装置には、このインタプリタとJITコンパイラを備えた仮想マシンが搭載されている。JavaScriptの場合、ブラウザに搭載されたスクリプトエンジンがスクリプトを解釈し、インタプリタ形式で実行する態様が多い。いずれにしても、ネイティブコードへコンパイル済みの状態で配布されるプログラムと比較すれば、インタプリタ形式で実行する場合には処理完了までの時間が長くなり、JITコンパイルで実行する場合にはコンパイル完了までのオーバーヘッドが発生するため、実行速度が遅くなる。今後、Java(登録商標)やスクリプト言語を用いたコンテンツの開発が大規模化してくると、この問題の解決が重要になる。
また、中間コード及びネイティブコードの両形式が混在するプログラムを実行する際の注意点として、CPUが中間コードへ直接ジャンプすることにより暴走等のエラーが生ずるおそれがあることが挙げられる。かかるプログラムを実行する情報処理装置は、CPUから呼び出されたサブルーチンのネイティブコードが存在するのかどうかを判断するための機能を備えている。そして、呼び出されたサブルーチンを実行する際には、先ず上記の判断を行い、ネイティブコードが存在すれば、そのネイティブコードの先頭アドレスをCPUに送り、ネイティブコードが存在しなければ、仮想マシンで実行すべき中間コードの先頭アドレスをCPUに送る。その後、CPUが直接実行するか又は仮想マシンによって実行される。従って、上記判断に長時間を要すると、前述の実行速度の問題が大きくなる。以下、これらの問題の解決に貢献し得る従来技術の例を示す。
(1)特許文献1[特開2006−202317号公報]
特許文献1には、バイトコードとネイティブコードがメモリ上に混在する場合において、コンパイルされているか否か及びネイティブコードの格納アドレスの検索を容易にすることにより、処理の高速化を図る技術が開示されている。具体的には、バイトコードがコンパイルされているか否かを判断するための情報と、コンパイルされたネイティブコードのアドレスを検索する検索テーブルをメモリ上に備えておき、バイトコードの実行時に、この検索テーブルを検索することにより、コンパイルの要否の判断やネイティブコードの格納アドレスの検索を容易(高速)に行うという技術である。
(2)特許文献2[特許第3816961号公報]
特許文献2には、バーチャルマシン命令(中間コードと思われる)をネイティブ命令のシーケンスに変換するため、例えばネイティブ命令がフルコードによって表わされた翻訳テーブルと、各バーチャルマシン命令について翻訳テーブルに対応するシーケンスの始点を示すコードインデックステーブルとを備えたデータ処理装置が開示されている。これらのテーブルは、例えば、メモリとプロセッサコアとの間に位置するプリプロセッサ内のコンバータに備えられるようである。この装置においては、コンバータは、バーチャルマシン命令を受けると、そのバーチャルマシン命令を用いて、コードインデックステーブル内でネイティブ命令のシーケンスの始点(アドレス)を検索する。そして、コンバータは、そのアドレスにアクセスしてネイティブ命令を読み出してプロセッサコアへ供給する。
"Introduction to JavaScript"、[online]、Refsnes Data、[2008年2月7日検索]、インターネット<URL:http://www.w3schools.com/js/js#intro.asp> "Ajax(programming)"、[online]、2008年2月6日、Wikipedia、[2008年2月7日検索]、インターネット<URL:http://en.wikipedia.org/wiki/AJAX> "Rich Internet application"、[online]、2008年2月3日、Wikipedia、[2008年2月7日検索]、インターネット<URL:http://en.wikipedia.org/wiki/Rich#Internet#application> "Java processor"、[online]、2008年1月22日、Wikipedia、[2008年2月7日検索]、インターネット<URL:http://en.wikipedia.org/wiki/Java#processor> 特開2006−202317号公報 特許第3816961号公報
しかしながら、(1)の技術には、JITコンパイル時のオーバーヘッドが解消されていないうえに、検索テーブルの検索時にCPUによるメモリへのアクセスが頻発することにより、実行速度が低下するという問題がある。
また、(2)の技術においても、バーチャルマシン命令を受けたコンバータがコードインデックステーブル内を検索する必要があり、その検索時間が処理のオーバーヘッドとなる。さらに、同技術では、バーチャル命令(中間コード)に対応するネイティブ命令を、プリプロセッサに設けた翻訳テーブル内に予め格納するため、大容量の記憶媒体をメインメモリのほかに設ける必要があり、コストや消費電力の面から見て現実的ではない。
そこで、本発明は、コンテンツの実行速度を向上させる情報処理装置を提供することを目的とする。
本発明は、コンテンツを構成するサブルーチンのコンパイル状況を簡易な方法で判断可能とすることにより、コンテンツの実行速度を向上させる。
上記の課題を解決するため、本発明の情報処理装置は、コンテンツに含まれる複数のサブルーチンごとに、プロセッサで実行可能なネイティブコード、前記ネイティブコードの元となるOSに依存しない第1コード、及び前記第1コードを前記ネイティブコードへ変換する過程で生成される第2コードのうち、少なくともいずれか1種類のコードを記憶するメモリであって、前記コードは、該当する種類を表すコードタイプが記述されたコード情報格納部を有するとともに、他のサブルーチンへのジャンプ先アドレスとして特殊アドレスが記述されており、前記特殊アドレスは、特殊アドレス識別子と前記他のサブルーチンの先頭アドレスを含む、メモリと、前記第1コードをインタプリタ方式で実行するインタプリタ機能、及び前記第2コードをネイティブコードへ変換してから実行するJITコンパイル機能を備えた仮想マシンと、前記ネイティブコードを実行するプロセッサと、前記第1コードから前記第2コードを生成するプリコンパイル回路と、前記コンテンツの実行中に前記プロセッサがアクセスしたアドレスに前記特殊アドレス識別子が含まれている場合に前記特殊アドレスであると判断し、前記メモリ上に当該他のサブルーチンのコードとして、ネイティブコードが記憶されていれば、該ネイティブコードが前記プロセッサで実行されるように第1の実行制御を行い、ネイティブコードが記憶されておらず第2コードが記憶されていれば、該第2コードが前記仮想マシンのJITコンパイル機能で実行され、生成されたネイティブコードが前記メモリに格納されるように第2の実行制御を行い、第1コードだけが記憶されていれば、該第1コードが前記仮想マシンのインタプリタ機能で実行されるとともに、前記プリコンパイル回路で第2コードに変換され、該第2コードが前記メモリに格納されるように第3の実行制御を行うサブルーチン管理手段とを備え、前記サブルーチン管理手段は、前記コード情報格納部に記述されているコードタイプを利用して前記第1乃至第3の実行制御を切り替えることを特徴とする。
本発明の実施形態では、前記サブルーチン管理手段は、前記第1又は第2の実行制御によりサブルーチンのコードが変換されたときは、該コードのコード情報格納部に変換後のコードの先頭アドレスが記述されるように記録制御を行い、前記コンテンツの実行中に前記プロセッサがアクセスしたアドレスに前記特殊アドレス識別子が含まれている場合に前記特殊アドレスであると判断し、当該他のサブルーチンのコードのコード情報格納部を検査し、第1コードを表すコードタイプが記述されており、且つ第2コードの先頭アドレスが記述されていないときは、前記第3の実行制御を行い、第1コードを表すコードタイプが記述されており、且つ第2コードの先頭アドレスが記述されており、且つ該先頭アドレスで特定される第2コードのコード情報格納部にネイティブコードの先頭アドレスが記述されていないとき、又は第2コードを表すコードタイプが記述されており、且つネイティブコードの先頭アドレスが記述されていないときは、前記第2の実行制御を行い、第1コードを表すコードタイプが記述されており、且つ第2コードの先頭アドレスが記述されており、且つ該先頭アドレスで特定される第2コードのコード情報格納部にネイティブコードの先頭アドレスが記述されているとき、又は第2コードを表すコードタイプが記述されており、且つネイティブコードの先頭アドレスが記述されているときは、前記第1の実行制御を行うように構成することができる。
別の実施形態では、前記サブルーチン管理手段は、前記第3の実行制御を行う際、前記サブルーチンごとに定められる前記第1コードを前記第2コードへ変換する優先度に基づいて、前記プリコンパイル回路を制御する構成を採用することができる。この場合において、前記メモリは、前記優先度に応じて、前記プリコンパイル回路の動作速度を定めた動作速度定義表を記憶し、さらに、前記プリコンパイル回路で処理される第1コードに対応するサブルーチンの優先度を用いて、前記動作速度定義表から動作速度を判断し、該動作速度に従って前記プリコンパイル回路が動作するように制御を行うプリコンパイル制御手段を備えた構成を採用することができる。
また、上記優先度としては、前記コンテンツの実行中に呼び出されたサブルーチンごとの回数であり、又は前記コンテンツの実行中に各サブルーチンが呼び出された際のスタックフレームの数を所定の値から減じた値を採用することができる。
或いは、上記優先度としては、前記コンテンツに含まれる各サブルーチンの第1コードを第2コードへ変換するのに要する時間に基づいて、又は前記コンテンツの実行中に各サブルーチンが呼び出される頻度に基づいて、各サブルーチンの第1コード内に予め記述された値を採用することもできる。
本発明の実施形態では、前記プリコンパイル制御手段は、前記プリコンパイル回路の動作速度を下げたとき、該プリコンパイル回路への供給電圧を、その動作を維持できる電圧値の範囲内で下げるように構成することができる。
別の実施形態では、前記プリコンパイル制御手段は、バス内のデータ伝送量又はプロセッサによる前記メモリへのアクセス頻度を監視し、前記データ伝送量又は前記アクセス頻度が所定の基準を超えている間、前記プリコンパイル回路の動作を停止するように構成することができる。
また別の実施形態では、前記サブルーチン管理手段は、前記第3の実行制御によりサブルーチンの第1コードが第2コードに変換されたとき、該第2コードのコード情報格納部に変換元となる第1コードの先頭アドレスが記述されるように前記記録制御を行い、前記第2の実行制御の対象となる第2コードの変換元の第1コードのサイズが所定の値より大きいときは、その第2コードが前記仮想マシンのJITコンパイル機能でネイティブコードに変換されて前記メモリに格納されるとともに、その第2コードのコード情報格納部に記述されている変換元の第1コードの先頭アドレスに基づいて、該第1コードが別スレッドで前記インタプリタ機能によって実行されるように前記第2の実行制御を行う構成を採用することができる。
さらにまた別の実施形態として、前記コード情報格納部の内容を記憶するキャッシュメモリを備え、前記サブルーチン管理手段は、前記コード情報格納部に替えて、前記キャッシュメモリに記憶されている情報に基づいて前記第1乃至第3の実行制御を行うとともに、前記キャッシュメモリに対して前記記録制御を行う構成を採用することができる。
前記第1コードは、スタックマシン用のコードであり、前記第2コードは、前記第1コードから生成されるレジスタマシン用のコードを含むことができる。また、前記第2コードは、前記サブルーチンの実行過程で呼び出される他のサブルーチンの第1コードを、呼び出し元のサブルーチンの第1コード内にインライン展開して成るコードを含むことができる。
本発明の実施形態として、前記サブルーチン管理手段は、前記コンテンツの実行中にサブルーチンのネイティブコードが呼び出された場合、その呼び出し元のサブルーチンのコードに記述されているジャンプ先アドレスを表す特殊アドレスを、該ネイティブコードの先頭アドレスに置き換える構成を採用することができる。
別の実施形態では、前記JITコンパイル機能は、前記第2コードの実行過程で呼び出される他のサブルーチンの第1コード、第2コード、又はネイティブコードを、呼び出し元の第2コード内にインライン展開し、これをネイティブコードへ変換する構成を採用することができる。
また別の実施形態としては、前記メモリは、前記サブルーチンごとに複数のコンテンツとの対応関係を表すサブルーチン共用表を記憶し、前記サブルーチン管理手段は、前記優先度に替えて、前記サブルーチン共用表に基づいて、対応するコンテンツの数が多いサブルーチンから順に、その第1コードが第2コードに変換されるように前記第3の実行制御を行う構成を採用することができる。
さらに別の実施形態では、前記サブルーチン管理手段は、前記優先度に替えて、前記コンテンツの実行中に呼び出されたサブルーチンのうち最後に呼び出されたサブルーチンから順に、その第1コードが第2コードに変換されるように前記第3の実行制御を行う構成を採用することができる。
またさらに別の実施形態では、前記コンテンツに対応する表示物を表示するディスプレイを備え、前記サブルーチン管理手段は、前記優先度に替えて、前記ディスプレイ上で、中央の表示物、最前面の表示物、又は最も大きい表示物に対応するコンテンツに含まれるサブルーチンの第1コードから優先的に第2コードが生成されるように前記第3の実行制御を行う構成を採用することができる。この場合、前記ディスプレイ上に表示される矢印等の指示部を移動させ、及び前記表示物を前記指示部によって選択するための操作部をさらに備え、前記サブルーチン管理手段は、前記ディスプレイ上で、前記指示部と重っている表示物又は前記指示部によって選択された表示物に対応するコンテンツに含まれるサブルーチンの第1コードから優先的に第2コードが生成されるように前記第3の実行制御を行う構成を採用することができる。
上記態様によれば、コンテンツを構成するサブルーチンのコンパイル状況を簡易な方法で判断することが可能となるため、コンテンツの実行速度が格段に向上する。
具体的には、各サブルーチンのコード内に、他のサブルーチンへのジャンプ先アドレスとしての当該他のサブルーチンの先頭アドレスを含む特殊アドレスと、該当するコードの種類を表すコードタイプを記述しておく。プロセッサがその特殊アドレスにアクセスすると、サブルーチンの呼び出しが発生したことをサブルーチン管理手段が検出し、メモリ内を検索することなく、特殊アドレスに含まれる先頭アドレスで特定されるコードのコード情報格納部に記述されたコードタイプに基づいて、そのコードの種類に応じた処理が行われるように制御される。従って、コンパイル状況の確認及び処理方法の判断のためのメモリ内の検索が不要となり、コンテンツの実行速度を格段に向上することができる。
本発明によれば、コンテンツの実行速度を格段に向上することができる。
以下、本発明の実施例において、複数のサブルーチンを含んで構成されるコンテンツとして、Javaプログラムを携帯電話機で実行する方法を説明する。その説明において、音声通話機能、メール送受信機能、スケジュール管理機能、及び撮像機能など、携帯電話機が通常備える機能については、図示及び説明を省略する。また、一般に、オブジェクト指向プログラミングでは、サブルーチンに相当するプログラムをメソッドと呼ぶことがあるが、ここではプログラミングの指向性にかかわらず、いずれもサブルーチンと呼ぶこととする。
[実施例1]
図1は、本発明を適用した携帯電話機101の基本構成を示す。
携帯電話機101は、バス103を解して互いに接続された各種のハードウェア105、並びにこれを制御するプログラム及び携帯電話機101で実行される複数のコンテンツ107等の各種のソフトウェア109を含んで構成される。
具体的には、携帯電話機101は、
ユーザによる操作の受け付け、画面表示、通信、及び入出力等の機能を有する周辺機能部111と、
ソフトウェア109に含まれる再生アプリ125等の各種のプログラムを実行するプロセッサ113と、
携帯電話機101の電源遮断中においても、ソフトウェア109の一部又は全部のデータを記録する不揮発性記録媒体115と、
起動中のソフトウェア109に関するデータを格納するメモリ117と、
スクリプト及びJavaプログラムを構成する、プロセッサ113で実行可能なネイティブコード131の元となるOSに依存しないバイトコード(以下「第1コード」という。)119を、ネイティブコード131に変換する過程で生成されるコード(以下「第2コード」という。)121に変換したり、コンテンツ107の実行中に呼び出されたサブルーチンのコードの種類(第1コード119、第2コード121、ネイティブコード131)に基づいて、後述のインタプリタ157やJITコンパイラ159で実行することをプロセッサ113に依頼するなど、各種の処理を行う実行コード処理部123と
を含んで構成される。
周辺機能部111としては、例えば、操作ボタン、タッチパネル、ディスプレイ、マイク、スピーカー、及びネットワーク接続手段を採用することができる。
不揮発性記録媒体115としては、例えば、フラッシュメモリ、ハードディスク読取装置(HDD)、Magnetoresistive Random Access Memory(MRAM)、Ferroelectric Random Access Memory(FeRAM)等の記録媒体を採用することができる。メモリ117としては、Static Random Access Memory(SRAM)、Dynamic Random Access Memory(DRAM)、MRAM等の記録媒体を採用することができる。これらのハードウェアは、製造時点における価格、記憶容量、消費電力、読み書きの速度等の条件を考慮して選ぶのがよい。
携帯電話機101は、ハードウェア105を制御するプログラム及び携帯電話機101で実行されるスクリプト及びJavaプログラム等のソフトウェア109をメモリ117上に持つ。具体的には、ソフトウェア109には、Javaプログラム等のコンテンツ107(後述の第1コード119を含む。)、再生アプリ125、及びOS127、並びにコンテンツ107の実行時等に適時参照される三種類の表として、コンテンツ管理表201、サブルーチン管理表203、及び動作速度定義表301が含まれる。
プロセッサ113は、サブルーチン管理プログラム133を実行することで、後述のサブルーチン管理回路171を制御し、サブルーチン管理回路171とともにサブルーチン管理手段を構成する。プロセッサ113は、また、プリコンパイル制御プログラム135を実行することで、後述のプリコンパイル制御回路175を制御し、プリコンパイル制御回路175とともにサブルーチン制御手段を構成する。
コンテンツ107は、Javaプログラムを実行するのに必要なプログラム及びデータとして、例えば、第1コード119、第2コード、ネイティブコード131、各種バイナリデータ141、及びテキストデータ143により構成される。本実施例では、コンテンツ107を構成するサブルーチンの第1コード119、第2コード、及びネイティブコード131のことをまとめて実行コード145という。コンテンツ107の種類としては、ゲーム、動画、アニメーション等のほかにも、文書編集ソフトや表計算ソフトといった一般にアプリケーションと呼ばれるプログラムも含まれる。
第1コード119は、コンテンツ107を実行する携帯電話機101のアーキテクチャ(例えば、OS)に依存しない形式のプログラムコードであり、複数のサブルーチンで構成される。なお、本実施例でいうサブルーチンには、メインルーチンが含まれる。スクリプト及びJavaプログラムの第1コード119は、携帯電話機101のプロセッサ113が実行できる形式のネイティブコード131ではなく、アーキテクチャに依存しない形式にコンパイルされているため、実行時には、携帯電話機101のプロセッサ113に対応する形式のネイティブコード131に再度コンパイルする必要がある。
各種バイナリデータ141は、動画、静止画、音声、ベクトル、3D描画データ、各種設定データ、及び文字列から構成される。テキストデータ143は、文字列形式のデータであり、例えばXML等の言語を用いれば、テキストデータを直接組み込んだ状態で、各種データを表現することができる。
再生アプリ125は、コンテンツ107を実行するブラウザや各種メディアプレイヤー等のプログラムである。この再生アプリ125は、コンテンツ107に含まれる動画、音声、静止画などのデータを再生する各種データ再生部151と、第1コード119及び第2コード121を実行するコード実行部(仮想マシン)153、そしてこれらの機能がOS127及びハードウェア105にアクセスする際に利用するドライバI/F155を含んで構成される。
コード実行部(仮想マシン)153は、インタプリタ157及びJITコンパイラ159で構成され、後述する条件に応じていずれか又は両方を起動するとともに、必要に応じて実行コード処理部123にアクセスする。
インタプリタ157は、コンテンツ107の実行中に呼び出されたサブルーチンについて、その第1コード119を解析してネイティブコード131へ変換しながらプロセッサ113に順次実行させる処理を、例えば、コード単位で逐次実行するプログラムである。
JITコンパイラ159は、コンテンツ107の実行中に呼び出されたサブルーチンについて、その第2コードをネイティブコードへ一旦変換してから、そのネイティブコード131をCPUに実行させる処理を、例えば、サブルーチン単位又はループ処理単位で実行するプログラムである。また、JITコンパイラ159は、第2コード121をネイティブコード131に変換するためだけに動作し、ネイティブコード131を実行しないこともできる。例えば、本実施例では、コンテンツ107の実行中にサブルーチンの第2コード121が呼び出された場合において、その第2コード121の変換元となる第1コード119のサイズが予め決めておいた所定の値より大きいときは、第2コード121の処理とは別に、その第1コード119が別スレッドでインタプリタ157によって実行される。この場合、インタプリタ157による実行が優先され、JITコンパイラ159は、第2コード121からネイティブコード131を生成するために動作し、生成したネイティブコード131の実行は行わないものとする。
ドライバI/F155は、コード実行用I/F161及びデータ再生用I/F163で構成されている。コード実行用I/F161は、ハードウェア105の実行コード処理部123へアクセスするために利用される。データ再生用I/F163は、各種データ再生部151がコンテンツデータを再生する際に各種ハードウェア105へアクセスするために利用される。
OS127は、携帯電話機101等の組込み機器向けの基本ソフトウェアである。OS127の例としては、Linux、WindowsEmbedded、Symbian等のソフトウェアが挙げられる。また、OS127は、再生アプリ125がハードウェア105にアクセスするために必要なドライバ165を搭載している。
ドライバ165は、コード実行用ドライバ167及びデータ再生用ドライバ169で構成される。コード実行用ドライバ167は、コンテンツ107の実行時に再生アプリ125がハードウェア105へアクセスするための機能を提供する。データ再生用ドライバ169は、コンテンツ107の実行以外のデータ処理時に、再生アプリ125がハードウェア105へアクセスするための機能を提供する。
コード実行部153のインタプリタ157及びJITコンパイラ159は、必要に応じて、コード実行用I/F161を介してコード実行用ドライバ167へアクセスし、各種ハードウェア105を呼び出すことができる。その際、必要なハードウェア105が存在しなければ、ソフトウェアエミュレータを起動し、必要な機能を再現させることができる。従って、ハードウェア105では実現されない他のハードウェアの機能が必要になる場合は、ソフトウェア109として、ソフトウェアエミュレータを備えておくのがよい。
コンテンツ管理表201は、各コンテンツ107のIDとコンテンツ名を管理する。サブルーチン管理表203は、コンテンツ107を構成する各サブルーチンについて、コードサイズや配布元(ダウンロード元のサーバURLなど)等の情報を管理する。動作速度定義表301は、実行コード処理部123による第1コード119から第2コード121への変換処理(プリコンパイル)の制御方法を定める。これらの表の詳細については後述する。
ソフトウェア109には、これらのほかにも、後述する、実行コード処理部123の処理により生成される第2コード121、及び仮想マシン129の処理により生成されるネイティブコード131が含まれる。さらに、ソフトウェア109は、サブルーチンのコードの種類(第1コード119、第2コード121、ネイティブコード131)に応じた処理の命令や各サブルーチンのコード内にある別のサブルーチンへのジャンプ先アドレスを後述の特殊アドレスに書き換える処理の命令等の各種命令が組み合わされたサブルーチン管理プログラム133と、第1コード119から第2コード121を生成する後述のプリコンパイル回路173の制御命令等の各種命令が組み合わされたプリコンパイル制御プログラム135とを含む。
実行コード処理部123は、
サブルーチン管理プログラム133を実行するプロセッサ113の制御のもと、コンテンツ107を構成する各サブルーチンについて、各実行コード145の情報を管理するコード情報格納部としての後述のヘッダ部250(図2)から、第1コード、第2コード、及びネイティブコード131のうち該当するコードの種類、及びコンテンツ107の実行中に呼び出された回数等の情報をキャッシュして管理するとともに、サブルーチンの実行コード145の種類に応じた処理が実行されるように制御を行うサブルーチン管理手段を構成するサブルーチン管理回路171と、
第1コード119を第2コード121へ変換するプリコンパイル回路173と、
プリコンパイル制御プログラム135を実行するプロセッサ113の制御のもと、プリコンパイル回路173の動作を制御するプリコンパイル制御手段を構成するプリコンパイル制御回路175と
を含んで構成される。
サブルーチン管理回路171は、上記の情報を格納し、その内容を高速に検索するための記憶装置としてキャッシュメモリ(例えば、連想メモリ)177を備えている。本実施例では、キャッシュメモリ177上に格納される上記の情報をヘッダキャッシュと呼ぶ。各サブルーチンのコード内のヘッダ部250とヘッダキャッシュとの間では、所定のタイミングで、内容の書き換え又は入れ替えが行われる。これにより、ヘッダキャッシュには、少なくともメモリ117上に格納される各サブルーチンの実行コード145のヘッダ部250の情報の一部若しくは全部が格納される。ヘッダキャッシュの内容については後述する。
プリコンパイル回路173は、第1コード119をネイティブコード131にコンパイルする際に生成される第2コード121を得るための手段である。プリコンパイル回路173による処理(プリコンパイル)により生成される第2コード121とは、例えば、以下のとおりである。
(1)スタックマシン用の第1コード119から生成されるレジスタマシン用のコード
(2)サブルーチンの実行過程で呼び出される他のサブルーチンの第1コード119を、呼び出し元のサブルーチンの第1コード119内にインライン展開して成るコード
(3)メモリ117上に、第1コード119における不要な記述、文法上の瑕疵、又は誤記等の修正を要する記載の修正方法を定めた修正辞書を記憶させておき、その修正辞書に基づいて第1コードを最適化したコード
ただし、上記以外の方法であっても、プリコンパイルの従来の方法があれば、それをプリコンパイル回路173によるプリコンパイルに適用することも勿論可能である。
図2は、コンテンツ107の実行時におけるメモリ117及び不揮発性記録媒体115の構成、各サブルーチンの実行コード145の構成、並びに特殊アドレスの構成を示す。
メモリ117には、コンテンツ107、再生アプリ125、OS127、コンテンツ管理表201、サブルーチン管理表203、動作速度定義表301、サブルーチン管理プログラム133、及びプリコンパイル制御プログラム135が格納されており、携帯電話機101の動作時に適宜参照され又は実行される。この図では、コンテンツ107として、Aコンテンツ107a,Bコンテンツ107b等の複数のコンテンツが格納されている状態を示す。メモリ117上のこれらのデータは、携帯電話機101の起動時及びコンテンツ107の起動時に、不揮発性記録媒体115からメモリ117上にロードされる。また、コンテンツ107を構成する実行コード145のうち、第2コード121及びネイティブコード131は、本実施例では、コンテンツ終了時に削除され、コンテンツ107が実行されるたびに生成されるものとするが、メモリ117及び不揮発性記録媒体115の空き容量が十分にあれば、コンテンツ107の実行が終了しても保持されるように構成してもよい。
また、サブルーチン管理プログラム133を実行するプロセッサ113の制御のもとでサブルーチン管理回路171が各サブルーチンの実行コード145の処理方法を選択し、第1コード119は、インタプリタ157によって解釈されながら逐次実行されるとともに、プリコンパイル回路173で第2コード121に変換されてメモリ117に格納される。第2コード121についても、サブルーチン管理回路171が処理方法を選択し、JITコンパイラ159によって実行されるとともに、生成されるネイティブコード131がメモリ117に格納される。
不揮発性記録媒体115には、OSイメージファイル401、再生アプリ125、コンテンツ107、サブルーチン管理プログラム133、プリコンパイル制御プログラム135、及びその他のアプリ/データ403等のデータが保存されている。これらのデータは、例えば、携帯電話機101の起動時やコンテンツ107の起動時等のタイミングで、メモリ117上に読み込まれ、携帯電話機101の電源遮断時やコンテンツ107の実行終了時等のタイミングで、メモリ117から変更箇所が書き戻される。
各サブルーチン実行コード145は、各実行コードに関する情報を管理するコード情報格納部としてのヘッダ部250と、具体的な処理内容が記述されたコード部252とから構成される。本実施例では、ヘッダ部250は、サブルーチン管理プログラム133を実行するプロセッサ113の制御のもとでサブルーチン管理回路171によって生成される。
ヘッダ部250は、コードタイプ256、処理ステート268、実行中フラグ270、終了アドレス272、及びチェックサム274を含んで構成される。
コードタイプ256は、各実行コード145のコードの種類、すなわち第1コード119、第2コード121、及びネイティブコード131のうち該当する種類を表すIDである。具体的には、図3に示すように、コードタイプ256として記述される各IDは以下の意味を表す。
(1)0:第1コード
(2)1:第2コード
(3)2:ネイティブコード
処理ステート258は、実行コード145が第1コード119又は第2コード121である場合に、第2コード121へのプリコンパイル又はネイティブコード131へのコンパイルが行われる条件を表す処理条件280、処理条件280を満たすかどうかを判断する場合等の所定のタイミングで参照される優先度282、プリコンパイル又はコンパイルの処理の状態を表す処理状態フラグ284、実行コード145が第2コード121又はネイティブコード131である場合に、変換前の第1コード119又第2コード121の先頭アドレスを表すオリジナルアドレス286、実行コード145が第コード119又は第2コード121である場合に、変換後の第2コード121又はネイティブコード131の先頭アドレスを表す変換済みコードアドレス288を含んで構成される。
処理条件280は、コンテンツ107の実行中にサブルーチンの第1コード119又は第2コード121が呼び出された場合において、その第1コード119又は第2コード121を第2コード112又はネイティブコード131へそれぞれ変換すべきかどうかを判断するための条件を表す。本実施例では、例えば、図3に示すように、処理条件280として記述される各IDは以下の意味を表す。
(1)1:コンテンツ起動時
(2)2:実行時
(3)3:優先度が所定の値を超えている時
(4)4:処理不要
従って、第1コード119の処理条件のIDが、“1”の場合はコンテンツ起動時にプリコンパイルされ、“2”の場合は実行時すなわち呼び出された時にプリコンパイルされ、“3”の場合は呼び出された際に後述の優先度が所定の値を超えていればプリコンパイルされ、“4”の場合は呼び出されてもプリコンパイルされない。本実施例では、上記優先度として、各実行コード145の呼び出された回数(実行回数)を採用し、コンテンツ107の実行中に呼び出されたサブルーチンの実行コード145の上記IDが“3”の場合、その優先度が所定の値として記述された値(例えば、50)を超えている時に限り、プリコンパイルされることとする。また、呼び出された実行コード145が第2コード121の場合も、これと同様に判断され、コンパイルが行われる。なお、上記IDが“3”の場合の条件は適宜変更が可能であり、例えば、メモリ117に所定の空き容量がある時などの条件を採用することができる。
優先度282は、本実施例では、前述のとおり、各実行コード145の実行回数を採用しているが、各実行コード145を第2コード121又はネイティブコード131へ変換する優先度を表し得る他の値を採用することもできる。
処理状態フラグ282は、プリコンパイル又はコンパイルの処理の状態を表すIDであり、各IDは以下の意味を表す。
(1)0:未変換
(2)1:変換中
(3)2:変換済み
例えば、第2コード121については、上記IDが“0”の場合はコンパイル処理が行われておらず、“1”の場合はコンパイル処理の最中であり、“2”の場合はコンパイルが完了してネイティブコード131が存在することを表す。
実行中フラグ284は、サブルーチンの各実行コード145がプロセッサ113によって実行されているかどうかを表すIDであり、各IDは以下の意味を表す。
(1)0:プロセッサが実行している
(2)1:プロセッサが実行していない
終了アドレス272は、各サブルーチンの実行コード145の終了アドレスである。チェックサム274は、第1コード119については、コンテンツ107の配布時にコンテンツ提供者から発行される値をそのまま採用してもよいし、後述のコンテンツ転送処理(図7)におけるヘッダ部生成処理(ST705)において、サブルーチン管理回路171によって計算されるように構成することができる。第2コード121及びネイティブコード131のチェックサム274の値については、それらのコードが生成されたときに又はコンテンツ107の起動時にプロセッサ113又はサブルーチン管理回路171によって計算されるように構成することができる。
コード部252は、第1コード119及び第2コード121については、コード本体290のみで構成され、ネイティブコード131については、後述の方法で記述されるジャンプ先アドレス変換命令292及びコード本体290で構成される。ジャンプ先アドレス変換命令292とは、サブルーチンの第1コード119の生成時において、サブルーチンの第1コード119がプリコンパイル回路173で第2コード121に変換される過程において、又は第2コード121が仮想マシン153のJITコンパイラ159でネイティブコード131に変換される過程において、その第1コード119若しくは第2コード121から生成されるネイティブコード131がコンテンツ107の実行中に呼び出されたときに実行される命令である。具体的には、その呼び出し元のサブルーチンの実行コード145に記述されている当該ネイティブコード131の特殊アドレスを、そのネイティブコード131の先頭アドレスに置き換えるという内容の命令である。この場合、ネイティブコード131のコード本体290の先頭アドレスに書き換えるのが好ましい。コード本体290の先頭アドレスは、ネイティブコード131の先頭アドレスに、ヘッダ部250及びジャンプ先アドレス変換命令292の合計サイズを加算して求めることができる。
本実施例で採用する特殊アドレスは、例えばメモリ117上に存在しないエリア(特殊アドレス空間)296を指すアドレスである。具体的には、この特殊アドレスは、図2に示すように、サブルーチンの実行コード145の先頭アドレスと、当該先頭アドレスで特定されるサブルーチンが実行コード145の種類に応じて処理される必要があることを示す文字列としての特殊アドレス識別子とを含んで構成される。本実施例では、特殊アドレスに含まれる特殊アドレス識別子は、特殊アドレス空間296がメモリ117上の物理アドレスの範囲外のエリアを表すこととなるように、例えば、“A0000000”等の文字列で構成される。従って、コンテンツ107のメモリ117上における物理アドレスが“111F”〜“FEBF”の範囲で設定されていれば、特殊アドレス空間296は、“A0000000111F”〜“A0000000FEBF”の範囲の特殊アドレスで表わされる。
上記特殊アドレスを採用する理由は、次のとおりである。プロセッサ113が特殊アドレスにアクセスした場合、すなわちサブルーチン内で他のサブルーチンを呼び出した場合、当該他のサブルーチンのコードは、第1コード119や第2コード121のように、プロセッサ113がそのまま実行することができないものである可能性があるため、そのような実行コード145に該当するかどうかを検査する必要があるからである。また、プロセッサ113がそのまま実行できない実行コード145に該当する場合は、サブルーチンの実行コード145の種類に応じた処理が行われるように制御される必要がある。
従来の技術によれば、バイトコードアドレス(本実施例における第1コード119の先頭アドレスに相当するアドレス)の一部をインデックスとし、そのバイトコードから生成したネイティブコードの先頭アドレスを記憶するテーブルをメモリ上に用意しておき、バイトコードが呼び出されるたびに、そのテーブル内を検索し、ネイティブコードの有無及びネイティブコードが存在する場合はその先頭アドレスを判断していた。従って、バイトコードの呼び出しのたびに、プロセッサ等のデバイスがメモリにアクセスすることとなり、処理速度が低下していた。
一方、本実施例では、特殊アドレスに含まれる先頭アドレスで特定される実行コード145に予めヘッダ部250を設け、そのヘッダ部250内に、実行コード145の種類を表すコードタイプや変換後の実行コード145の先頭アドレス等を記述しておく構成を採用している。これにより、サブルーチンから他のサブルーチンが呼び出された場合、メモリ117内を検索しなくても、ヘッダ部250内を検査するだけで、そのサブルーチンに関し、メモリ117上に存在する実行コード145の種類及び先頭アドレスを判断することができ、コンテンツ107の実行速度が格段に向上する。
図4は、メモリ117に格納されるコンテンツ管理表201及びサブルーチン管理表203と、キャッシュメモリ177に格納されるヘッダキャッシュ205の構成を示す。以下、これらの表の内容について説明する。
コンテンツ管理表201は、コンテンツID欄207及びコンテンツ名欄209で構成される各種の項目を有する。コンテンツID欄207には、携帯電話機101内に保存されているコンテンツ107を識別するコンテンツIDが格納される。コンテンツ名欄209には、各コンテンツの名前が格納される。コンテンツ管理表201は、各コンテンツのIDと名前を管理するのに用いられる。
コンテンツIDの付与方法としては、例えば、携帯電話機101で利用可能なコンテンツダウンロードサービス等の各種サービス内で共通のIDを、サービス提供者が一元的に定める方法と、携帯電話機101内でのみ通用するIDを、携帯電話機101が独自に又はサービス提供者が付与する方法がある。後者の場合、例えば、コンテンツ107をダウンロードした順に、通し番号を付す方法がある。
サブルーチン管理表203は、ハッシュ値管理表237、第1コードサイズ管理表239、ダウンロード元管理表241、サブルーチン共用表243の4種類の表を含んで構成される。これらの表は、必要とされる機能に応じて適宜組み合わせて利用される。
ハッシュ値管理表237は、サブルーチンID欄245とハッシュ値欄247で構成される各種の項目を有する。
サブルーチンID欄245には、コンテンツ107に含まれる各サブルーチンを識別するIDが格納される。このIDの付与方法としては、携帯電話機101で利用可能なコンテンツダウンロードサービス等の各種サービス内で共通のIDを、サービス提供者が一元的に定める方法と、携帯電話機101内でのみ通用するIDを、携帯電話機101が独自に又はサービス提供者が付与する方法がある。後者の場合、例えば、コンテンツ107のダウンロード時に若しくはコンテンツの最初の実行時に、サブルーチンの先頭から通し番号若しくはランダムな番号を付す方法がある。
ハッシュ値欄247には、各サブルーチンの第1コードに付与されるハッシュ値が格納される。このハッシュ値の生成方法としては、例えば、それぞれの第1コード119全文に基づいてハッシュ関数を用いて生成する方式、又は各第1コードの改変を検出できる最小限の間隔で抽出した1バイトの値に基づいてハッシュ関数を用いて生成する方式が適用可能である。上記改変を検出できる最小限の間隔は、例えば、数バイトから数十バイトの間隔である。このハッシュ値は、コンテンツ107を提供するサーバ側で付与してもよいし、携帯電話機101内で、上記の方法により付与するように構成してもよい。
第1コードサイズ管理表239は、ブルーチンID欄251と第1コードサイズ欄253で構成される各種の項目を有する。サブルーチンID欄251には、各サブルーチンのサブルーチンIDが格納される。第1コードサイズ欄253には、各サブルーチンの第1コードのサイズが格納される。
ダウンロード元管理表241は、サーバURL欄255、サブルーチンID欄257、及びサーバ通知欄259で構成される各種の項目を有し、サブルーチンを含むコンテンツ107のダウンロード元であるサーバに関する情報を管理する。
サーバURL欄255には、ダウンロード元であるサーバのURLが格納される。サブルーチンID欄257には、各サブルーチンのサブルーチンIDが格納される。サーバ通知欄259には、各サブルーチンが携帯電話機101に存在すること(たとえば、ダウンロードが完了したこと)をサーバに通知したか否かを示すフラグが格納される。このフラグが、”yes”の場合は通知済み、”no”の場合は未通知であることを示す。
サブルーチン共用表243は、サブルーチンID欄261、共用数欄263、及び対応コンテンツID欄265で構成される各種の項目を有し、各サブルーチンを共用している複数のコンテンツ107を把握するために利用される。
サブルーチンID欄261には、各サブルーチンのサブルーチンIDが格納される。共用数欄263には、各サブルーチンを利用しているコンテンツの数が格納される。対応コンテンツID欄265には、各サブルーチンを利用するコンテンツのコンテンツIDが格納される。
サブルーチン共用表243は、コンテンツのダウンロード時及び削除時に、サブルーチン管理回路171によって、そのコンテンツに含まれる各サブルーチンが他のコンテンツで利用されているかどうかが判断され、更新される。
ヘッダキャッシュ205は、ヘッダ情報欄267及びキャッシュアウトカウント欄281で構成される各種の項目を有する。ヘッダキャッシュ205は、各サブルーチンの実行コード145に関する情報を格納する。本実施例では、ヘッダキャッシュ205内にある実行コード145ごとの情報をエントリという。
ヘッダ情報欄267は、サブ項目として、開始アドレス欄271、終了アドレス欄273、コードタイプ欄275、処理ステート欄277、実行中フラグ欄279、及びチェックサム欄280を有する。これらの欄には、コンテンツ107の実行開始時に及びコンテンツ107の実行中における所定のタイミングで、サブルーチンの実行コード145のヘッダ部250からデータが転送され、適宜格納される。なお、ヘッダキャッシュ205内の各項目には、ヘッダ部250(図2)内で同じ項目名が付されている項目のデータが格納される。
また、処理ステート欄277に格納されるデータには、コンテンツ107のサブルーチンごとに定められる優先度282(図2)として、コンテンツ107の実行中に呼び出されたサブルーチンの実行コード145ごとの回数(実行回数)が含まれており、各実行コード145が呼び出されるたびに、該当するエントリの優先度の値がインクリメントされる(“1”が加算される)。本実施例では、原則としてサブルーチンの各実行コード145の実行回数を優先度として取り扱う。
ヘッダキャッシュ205のキャッシュアウトカウント欄281にも、コンテンツ107の実行中に呼び出されたサブルーチンの実行コード145ごとの回数(実行回数)が格納される。本実施例では、後述の方法によって、実行コード145のヘッダ部250のデータがメモリ117からヘッダキャッシュ205へ転送される際には、キャッシュアウトカウント欄281には値が格納されず、初期値が“0”に設定されることとする。そして、エントリがヘッダキャッシュ205に格納された後、そのエントリに対応するサブルーチンの実行コード145が呼び出されるたびに、該当するエントリのキャッシュアウトカウント欄281の値に“1”が加算される。尚、このとき、呼び出されていない他のエントリのキャッシュアウトカウントを“1”減算する方法も考えられる。
上記のとおり、各実行コード145のヘッダ部250内の優先度282は、エントリがキャッシュメモリ177とメモリ117との間で転送されても、クリアされずに累積するが、キャッシュアウトカウントは、エントリがヘッダキャッシュ205に格納される際に値が“0”にクリアされるという相違点を持たせている。これにより、優先度は、コンテンツ107内に存在する全てのサブルーチンに着目して各サブルーチンの第1コード119のプリコンパイルすべき順番を表し、キャッシュアウトカウントは、ヘッダキャッシュ205内に存在するエントリに着目して各サブルーチンの第1コード119のプリコンパイルすべき順番を表すことができる。
なお、キャッシュアウトカウントは、後述の方法で、メモリ117へ書き戻すエントリを決定する際には、適宜減算されるが、“0”以下には減算されないものとする。また、一定の値を超えると、そのエントリに対応する実行コード145が呼び出されても、加算されないものとする。
ヘッダキャッシュ205は、コンテンツ実行時において、例えば次のように利用される。コンテンツ107の実行中にサブルーチンが呼び出され、プロセッサ113が特殊アドレスにアクセスすると、サブルーチン管理回路171はその特殊アドレスに基づいて該当する実行コード145の先頭アドレスを特定し、その先頭アドレスとヘッダキャッシュ205内の開始アドレス欄271の各アドレスとを照合する。呼び出されている実行コード145のエントリがヘッダキャッシュ205内に存在する場合は、サブルーチン管理回路171は、処理ステート欄277の情報に基づいて処理条件等を判断し、その実行コード145がコードの種類に応じて処理されるように制御を行う。なお、サブルーチンごとの処理条件280(図2)は、ヘッダキャッシュ205の処理ステート欄277のデータに含まれている。このように、呼び出されたサブルーチンの実行コード145の種類の判断や、処理条件280等の判断をヘッダキャッシュ205を用いて行うため、メモリ117へアクセスする必要がなく、当該判断等の処理を高速化できる。なお、該当するエントリがヘッダキャッシュ205内に存在しない場合は、後述の方法で、呼び出されている実行コード145のヘッダ部250のデータがメモリ117から転送され、上記の判断等の処理が再度行われる。
図5は、プリコンパイル回路173の動作速度を定める動作速度定義表301の一例を示す。この表は、プリコンパイル対象のサブルーチンの第1コード119を処理する際に、プリコンパイル制御回路175がプリコンパイル回路173の動作速度を制御するために利用される。
動作速度欄303、優先度範囲欄305、及びサブルーチン定義値欄307で構成される各種の項目を有する。
動作速度欄303には、プリコンパイル回路173の動作速度を表す値が格納される。本実施例では、この値が大きいほど、プリコンパイル回路173が高速で動作することを意味する。
実行回数範囲欄305には、各動作速度が適用されるサブルーチンの実行コード145の呼び出された回数(実行回数。本実施例では、原則としてこの値を優先度として取り扱っている。)の範囲が格納される。例えば、実行回数が0〜50の範囲内にあるサブルーチンの第1コード119は、これに対応する動作速度“1”で動作するプリコンパイル回路173によってプリコンパイルされる。
サブルーチン定義値欄307には、例えば、以下の(1)〜(3)の情報に基づいて、各サブルーチンの第1コード119の生成時に付与される値が格納される。
(1)コンテンツ107に含まれる各サブルーチンの第1コード119を第2コード121へ変換するのに要する時間
(2)コンテンツ107に含まれる各サブルーチンの第1コード119をネイティブコード131へ変換するのに要する時間
(3)コンテンツ107の実行中に各サブルーチンが呼び出される頻度。
上記の情報に基づいて付与されるサブルーチン定義値は、例えば、第1コード119を生成する際に用いるコンパイラの機能によって、第1コード119内に記述することができる。例えば、任意の箇所にコメントとして埋め込んだり、その際にヘッダ部250を生成して埋め込むことができる。実施例では、コンテンツ107の実行中に呼び出されたサブルーチンの第1コード119のヘッダ部250内にサブルーチン定義値が記述されていれば、例外的に、そのサブルーチン定義値を、第1コード119から第2コード121を生成する優先度として抽出し、これに基づいてプリコンパイル回路173の動作速度を判断し、記述されていなければ実行回数(優先度)で判断することとしている。なお、サブルーチン定義値として“3”が付与されているサブルーチンの第1コード119は、動作速度“3”で動作するプリコンパイル回路173によってプリコンパイルされる。
動作速度定義表301を作成する際には、例えば、サブルーチンの実行回数及びサブルーチン定義値の値が大きくなるに連れて、プリコンパイル回路173の動作速度が大きくなるようにするのがよい。具体的には、サブルーチンの実行回数又はサブルーチン定義値の値が大きくなるに連れて、プリコンパイル回路173のクロック(動作周波数)を増加させる方法を採用することができる。また、サブルーチンの実行回数又はサブルーチン定義値の値が小さくなるに連れて、プリコンパイル回路173のクロックを大きな値で分周する方法を採用することができる。
そして、サブルーチンの実行回数又はサブルーチン定義値に基づいて決定される動作速度が小さければ、プリコンパイル制御回路175がプリコンパイル回路173を低速で動作させ、さらに、動作を維持できる電圧値の範囲内で供給電圧を下げることにより、消費電力を低く抑えることができる。なお、プリコンパイル回路173の動作速度を決定するための判断材料としては、サブルーチンごとの実行回数とサブルーチン定義値のいずれか一方だけを用いて判断するように構成してもよい。
図6は、携帯電話機101が起動してから停止するまでの間における、プロセッサ113及びサブルーチン管理回路171の処理のフローチャートを示す。携帯電話機101の電源が“ON”になると、ハードウェア105が初期化(メモリ117のクリアなど)され、本処理が開始する。
まず、プロセッサ113は、OSイメージファイル401及び再生アプリ125を不揮発性記録媒体115からメモリ117へ転送し(ST601)、OS127を起動させる(ST602)。
プロセッサ113は、ユーザが操作ボタン等の周辺機能部111を操作するなど、何らかのきっかけによりコンテンツ107の実行が指示されるまで待機し(ST603の判断が“N”の場合)、実行が指示されると(ST603の判断が“Y”の場合)、再生アプリ125を起動する(ST604)。
そして、サブルーチン管理プログラム133を実行するプロセッサ113の制御のもとで、サブルーチン管理回路171が後述のコンテンツ転送処理(図7)を行う(ST605)。コンテンツ転送処理(ST605)では、実行対象のコンテンツ107が不揮発性記録媒体115からメモリ117へロードされる。この際、各サブルーチンには、ヘッダ部250が付加されるとともに、各サブルーチン内に記述されたジャンプ先アドレスが後述の方法(図7)で特殊アドレスに書き換えられる。
次に、プロセッサ113は、メモリ117上に記憶されたコンテンツ107のサブルーチンの実行コード145からヘッダ部250のデータ(ヘッダ情報)を抽出し、キャッシュメモリ177上のヘッダキャッシュ205へ転送する(ST606)。なお、ヘッダキャッシュ205へ転送されるヘッダ情報は、実行対象のコンテンツ107に含まれるサブルーチンのすべての実行コード145に関するでデータでもよいし、コンテンツ107を構成するサブルーチンの先頭から順に抽出した所定の個数(例えば、50個)のサブルーチンの実行コード145に関するデータでもよいし、ヘッダ部250に格納される優先度282の値の大きいものから順に選んだ所定の個数のサブルーチンの実行コード145のデータを採用することもできる。
プロセッサ113は、サブルーチン管理回路171によるコンテンツ107のデータのメモリ117への転送が終了すると、続いてサブルーチン管理回路171に後述のコンテンツ実行支援処理を実行させる(ST607)。プロセッサ113は、サブルーチン管理回路171によるコンテンツ実行支援処理(ST607)の結果に基づいて、コンテンツ107を実行する。
プロセッサ113は、コンテンツ107を実行している間、ユーザが操作ボタン等の周辺機能部111を操作することにより、何らかの処理を実行すべき指示(イベント)が発生したかどうかを監視し(ST608の判断が“N”の場合)、イベントが発生した場合(ST608の判断が“Y”の場合)、そのイベントの内容が、別のコンテンツ107の実行指示かどうかを判別する(ST609)。
そのイベントが別のコンテンツ107の実行指示だった場合(ST609の判断が“Y”の場合)、プロセッサ113は、後述のコンテンツ終了処理を実行し(ST610)、当該別のコンテンツ107の転送処理が行われる(ST605)。
そのイベントが別のコンテンツ107の実行指示ではなかった場合(ST609の判断が“N”の場合)、プロセッサ113は、携帯電話機101の電源OFF等のシステム終了指示だったかどうか判断し(ST611)し、システム終了指示ではなかった場合は(ST611の判断が“N”の場合)、指示されたイベントを処理する(ST612)。
一方、システム終了指示がされた場合(ST611の判断が“Y”の場合)、プロセッサ113は、終了するコンテンツ107に関するヘッダキャッシュ205上のエントリをメモリ117へ書き戻し(ST613)、コンテンツ107のデータのうち、各サブルーチンの実行コード145のヘッダ部250のデータなど、変更されたデータを不揮発性記録媒体115へ書き戻し(ST614)、OS終了処理を実行する(ST614)。その後、ハードウェア105への電源供給が遮断され、携帯電話機101が停止する。なお、ST614においては、変更されたデータとして、新たに生成された第2コード121及びネイティブコード131のデータを不揮発性記録媒体115へ書き戻すように構成することもできる。
図7は、サブルーチン管理プログラム133を実行するプロセッサ113の制御のもとでサブルーチン管理回路171が行うコンテンツ転送処理(図6のST605)のフローチャートを示す。
本処理は、ユーザが操作ボタン等の周辺機能部111を操作するなど、何らかのきっかけによりコンテンツ107の実行が指示されることにより、プロセッサ113が、そのコンテンツ107のデータが不揮発記録媒体115からメモリ117へ転送し始めた場合に行われる。また、この処理の前提として、本実施例では、コンテンツ107のサブルーチンの各実行コード145には、他のサブルーチンへのジャンプ先アドレス、及び同一サブルーチン内でのジャンプ先アドレスとして、サブルーチンの先頭を基準とする相対アドレス(以下「初期アドレス」という。)が割り当てられているものとする。さらに、サブルーチンの実行コード145が不揮発性記録媒体115からメモリ117へ転送されると、OS127が、サブルーチンの各実行コード145のメモリ117上の格納開始アドレス(ベースアドレス)及び上記初期アドレスに基づいて、サブルーチンの各実行コード145の先頭アドレス及び各実行コード145内に記述さているジャンプ先アドレスをメモリ117上の絶対アドレス(物理アドレス)に変換するものとする。
なお、このコンテンツ転送処理の際には、図8に示す先頭アドレス管理テーブル850及びジャンプ先アドレス管理テーブル855が利用されるため、これらのテーブルについて予め説明する。
図8は、サブルーチンの各実行コード145について、初期アドレス、メモリ117上へ格納された時に割り当てられる物理アドレス、及び後述の変数(i)の値を管理する先頭アドレス管理テーブル850及びジャンプ先アドレス管理テーブル855の構成を示す。
先頭アドレス管理テーブル850は、初期アドレス欄851及び物理アドレス欄852で構成される各種の項目を有する。初期アドレス欄851には、サブルーチンの実行コード145の初期アドレスのうち、サブルーチンの実行コード145の先頭アドレスが格納される。物理アドレス欄852には、サブルーチンの実行コード145のメモリ117の物理アドレスが格納される。
ジャンプ先アドレス管理テーブル855は、初期アドレス欄856、物理アドレス欄857、及び変数欄858で構成される各種の項目を有する。初期アドレス欄856には、サブルーチンの実行コード145の初期アドレスのうち、サブルーチンの実行コード145に記述されている、他のサブルーチンへのジャンプ先アドレスや、同一実行コード145内でのジャンプ先アドレスが格納される。物理アドレス欄857には、サブルーチンの実行コード145に記述されているジャンプ先アドレスのメモリ117の物理アドレスが格納される。そして、変数欄858には、後述の変数“i”の値が格納される。
続いて、コンテンツ転送処理(図7)の手順を説明する。まず、サブルーチン管理回路171は、プロセッサ113が不揮発性記録媒体117からコンテンツ107のデータを読み出すと、変数“i”を初期化し(ST701)、サブルーチンの実行コード145ごとに検査を開始する(ST702)。
次に、サブルーチン管理回路171は、サブルーチンの実行コード145がヘッダ部250(図2)を有するかどうかを検査する(ST703)。ヘッダ部145を有するかどうかの検査は、例えば、実行コード145の先頭にコードタイプ256の値が記述されているかどうかを基準にして行うことができる。
ST703の検査の結果、そのサブルーチンの実行コード145がヘッダ部250を有していない場合(ST703の判断が“N”の場合)、サブルーチン管理回路171は、そのサブルーチンの実行コード145の先頭にヘッダ部250(図2)を生成する(ST704)。なお、本実施例において、ヘッダ部250を有していない実行コード145とは、例えば、初めて実行されるコンテンツ107に含まれる第1コード119である。サブルーチン管理回路171が生成するヘッダ部250は、例えば以下のとおりである。
(1)コードタイプ:“0”
(2)処理条件:“0”〜“3”のいずれか
(3)優先度:“0”
(4)処理状態フラグ:“0”
(5)オリジナルコードアドレス:この第1コード119の先頭アドレス
(6)変換済みコードアドレス:null
(7)実行中フラグ:“1”
(8)終了アドレス:この第1コード119の終了アドレス
(9)チェックサム:チェックサム(プロセッサ113又はサブルーチン管理回路171によって計算される)。
上記(2)の処理条件については、サブルーチンごとに、コンテンツ107の実行中に呼び出される回数やプリコンパイルに要する時間等の事情を考慮して設定するのが好ましい。従って、処理条件は、サブルーチンの第1コード119の生成時に予め定めておき、例えばその第1コード119の先頭に、コメント等の形式で予め記述しておくことができる。そして、上記処理(ST704)の実行時に、その第1コード119の先頭に記述されている情報を参照して、処理条件としてヘッダ部250に書き込むようにすることができる。或いは、サブルーチンIDと処理条件とを対応付けて構成した処理条件管理表(図示省略)をメモリ117上に記憶し、ST704の処理の際にこの表を参照して、各サブルーチンの処理条件を決定することも可能である。
上記(9)のチェックサムは、第1コード19については、このヘッダ部生成処理(ST704)の際にプロセッサ113又はサブルーチン管理回路171によって計算するように構成することができる。
サブルーチン管理回路171は、実行コード145にヘッダ部250を生成すると、変数“i”をインクリメントする(“1”を加算する。ST705)。
サブルーチン管理回路171は、検査中のサブルーチンがヘッダ部250を既に有している場合(ST703の判断が“Y”の場合)又はST705の後、検査中の実行コード145をメモリ117へ転送する(ST706)。サブルーチンの実行コード145のデータをメモリ117へ格納すると、その実行コード145に関する初期アドレスに基づいて、OS127が物理アドレスを割り当てる。例えば、検査対象の実行コード145の先頭アドレスを表す初期アドレスが“FFEF3C”で、メモリ117上のベースアドレスが“1000000000”の場合には、物理アドレスは“1000FFEF3C”となる。
サブルーチン管理回路171は、検査対象の実行コード145のデータをメモリ117へ転送すると、先頭アドレス管理テーブル850及びジャンプ先アドレス管理テーブル855に、当該実行コード145に関する、初期アドレス、物理アドレス、変数“i”の値を格納する(ST707)。
具体的には、先頭アドレス管理テーブル850のうち、初期アドレス欄851には、検査対象の実行コード145の先頭アドレスを表す初期アドレスが格納される。物理アドレス欄852には、検査対象の実行コード145のメモリ117上の物理アドレスが格納される。
また、ジャンプ先アドレス管理テーブル855のうち、初期アドレス欄851には、検査対象の実行コード145に記述されているジャンプ先アドレスを表す各初期アドレスが格納される。物理アドレス欄852には、それらの初期アドレスに基づいて割り当てられたメモリ117上の物理アドレスが格納される。そして、変数欄858には、変数“i”の値が格納される。
サブルーチン管理回路171は、先頭アドレス管理テーブル850にデータを格納すると、全てのサブルーチンの実行コード145について検査が完了したかどうかを判断し(ST708)、検査が完了していない場合(ST708の判断が“N”の場合)、次のサブルーチンの実行コード145を探索して(ST709)、上記の処理(ST703〜ST707)を繰り返す。
一方、サブルーチン管理回路171は、全てのサブルーチンの実行コード145の検査が完了した場合(ST708の判断が“Y”の場合)、コンテンツ107のサブルーチンの先頭から実行コード145を検査し、実行コード145内にジャンプ先アドレスが記述されているかどうかを検査する(ST709)。このジャンプ先アドレスには、他のサブルーチンへのジャンプ先アドレスのほかに、同一実行コード145内のループ先アドレスやエスケープ先アドレスが含まれる。
そのサブルーチンの実行コード145内にジャンプ先アドレスが記述されている場合(ST709の判断が“Y”の場合)、そのジャンプ先アドレスを、ヘッダサイズを考慮したアドレスに書き換える(ST710)。ST704で生成されたヘッダ部250のサイズに応じてメモリ117上のデータの格納位置が変化するため、この変化に基づいてジャンプ先アドレスを調整する必要があるからである。
具体的には、そのジャンプ先アドレスが、他のサブルーチンの実行コード145へのジャンプ先アドレスの場合、サブルーチン管理回路171は、ジャンプ先アドレス管理テーブル855(図8)を参照して、そのジャンプ先アドレス(物理アドレス)に対応する初期アドレスを抽出し、その初期アドレスを用いて先頭アドレス管理テーブル850内を検索して、該当する実行コード145の物理アドレスを抽出してジャンプ先アドレスを書き換える。
また、そのジャンプ先アドレスが、検査対象の実行コード145内の任意の位置へのジャンプ先アドレスの場合には、サブルーチン管理回路171は、ジャンプ先アドレス管理テーブル855(図8)を参照して、そのジャンプ先アドレス(物理アドレス)を抽出し、その物理アドレスの値に下記割増量を加算して得られるアドレスを用いてジャンプ先アドレスを書き換える。
[割増量]
offset=(ヘッダサイズ)*(変数欄858の値)。
なお、そのジャンプ先アドレスが、検査対象の実行コード145内のジャンプ先アドレスの場合には、サブルーチン管理回路171は、実行コード145をメモリ117へ転送した直後(ST706の後)に、そのジャンプ先アドレス(物理アドレス)に下記割増量を加算して得られるアドレスを用いてジャンプ先アドレスを書き換えるように構成してもよい。この構成を採用する場合、ジャンプ先アドレス管理テーブル855における変数欄858を用いなくてもよい。
[割増量]
offset=(ヘッダサイズ)*(変数“i”の値)。
そして、サブルーチン管理回路171は、検査中のサブルーチンの実行コード145内にある全てのジャンプ先アドレスを書き換えたかどうかを検査し(ST711)、未変換のジャンプ先アドレスがあれば(ST711の判断が“Y”の場合)、次のアドレスを探索し(ST712)、前述の方法でアドレスの書き換え処理(ST710)を行う。サブルーチン管理回路171は、このようにして、検査中のサブルーチンの実行コード145内のすべてのジャンプ先アドレスを書き換える。なお、アドレス書き換え処理(ST710)は、例えば、メモリ117内でデータ構造が変化した際に、その変化に応じて、サブルーチンの各実行コード145内に記述されている物理アドレスを含め、各物理アドレスを自動的に変換する機能をOS127が有している場合は、行わないように構成することができる。
検査中のサブルーチンの実行コード145内にあるすべてのジャンプ先アドレスを変更した場合(ST711の判断が“Y”の場合)、サブルーチン管理回路171は、それらのジャンプ先アドレスのなかに、他のサブルーチンの実行コード145へのジャンプ先アドレスが含まれているかどうかを検査する(ST713)。例えば、各ジャンプ先アドレスの値と、検査対象の実行コード145のメモリ117上の格納エリアとを比較し、ジャンプ先アドレスが実行コード145のメモリ117上の格納エリアの範囲外のエリアを表していれば、他のサブルーチンの実行コード145へのジャンプ先アドレスであると判断することができる。
その検査の結果、実行コード145内にあるジャンプ先アドレスのなかに、他のサブルーチンの実行コード145へのジャンプ先アドレスが含まれている場合(ST713の判断が“Y”の場合)、サブルーチン管理回路171は、そのジャンプ先アドレスに特殊アドレス識別子を付加することにより、そのジャンプ先アドレスを特殊アドレスに書き換える(ST714)。
そして、サブルーチン管理回路171は、検査中のサブルーチンの実行コード145内にある、他のサブルーチンへのジャンプ先アドレスをすべて書き換えたかどうかを判断し(ST715)、未変換のジャンプ先アドレスがあれば(ST715の判断が“N”の場合)、次のアドレスを探索し(ST716)、前述のようにアドレス変換処理(ST714)を行う。サブルーチン管理回路171は、このようにして、検査中のサブルーチンの実行コード145内に記述されている、他のサブルーチンの実行コード145へのジャンプ先アドレスのすべてを特殊アドレスに書き換える。
サブルーチン管理回路171は、検査中のサブルーチンの実行コード145内に記述されている、他のサブルーチンの実行コード145へのジャンプ先アドレスをすべて変換した後(ST715の判断が“Y”の場合)、実行対象のコンテンツ107に含まれるすべてのサブルーチンの実行コード145を検査したかどうかを判断する(ST717)。そして、未検査のサブルーチンの実行コード145がある場合(ST718の判断が“N”の場合)、次のサブルーチンを探索し(ST718)、その実行コード145について上記の処理を繰り返す(ST709〜ST716)。
サブルーチン管理回路171は、実行対象のコンテンツ107に含まれるサブルーチンのすべての実行コード145について、上記の処理を行った場合(ST717の判断が“Y”の場合)、プロセッサ113によって不揮発性記録媒体115から転送される各種データ141,143をメモリ117へ転送し(ST719)、コンテンツ転送処理が終了する。
図9は、サブルーチン管理プログラム133を実行するプロセッサ113の制御のもとでサブルーチン管理回路171が行うコンテンツ実行支援処理(図6のST607)のフローチャートを示す。本処理は、コンテンツ107の実行が開始され、プロセッサ113から特定のデータにアクセスするためのアドレスが発行されたときに行われる。
まず、サブルーチン管理回路171は、プロセッサ113から発行されたアドレスが、特殊アドレスの範囲内の値かどうかを判断する(ST801)。サブルーチン管理回路171は、プロセッサ113から発行されたアドレスが特殊アドレスの範囲外であると判断した場合(ST801の判断が“N”の場合)、該当するアドレスのデータをメモリ117から抽出し、プロセッサ113へ転送する(ST802)。
一方、プロセッサ113から発行されたアドレスが特殊アドレスの範囲内であると判断した場合(ST801の判断が“Y”の場合)、サブルーチン管理回路171は、そのアドレスが特殊アドレス識別子(図2)を含むかどうか、すなわち本実施例の場合は上位数ビットが特殊アドレス識別子(例えば、“A0000000”)と一致するかどうかを検査する(ST803)。サブルーチン管理回路171は、プロセッサ113から発行されたアドレスの上位数ビットが特殊アドレス識別子と一致しない場合(ST803の判断が“N”の場合)、プロセッサ113にエラー(例えば、“エントリ無し”という内容の例外命令)を通知し(ST804)、コンテンツ実行支援処理を終了する。
プロセッサ113から発行されたアドレスが特殊アドレスに該当する場合、すなわちそのアドレスの上位数ビットが特殊アドレス識別子と一致する場合(ST803の判断が“Y”の場合)、サブルーチン管理回路171は、その特殊アドレスからサブルーチンの実行コード145の先頭アドレスを抽出し(ST805)、ヘッダキャッシュ205内の開始アドレス271の値を参照して、該当するエントリを検索する(ST807)。
サブルーチン管理回路171は、ヘッダキャッシュ205内の検索の結果、該当するエントリが存在するかどうかを判断し(ST807)、該当するエントリが存在しない場合は、後述のヘッダキャッシュ入れ替え処理を実行する(ST808)。
ヘッダキャッシュ205内に該当するエントリが存在する場合(ST807の判断が“Y”の場合)、サブルーチン管理回路171は、そのエントリに対応するサブルーチンの実行コード145に基づいてチェックサムを算出し、ヘッダキャッシュ205のチェックサム欄280に格納されている値と比較し、チェックサムが不正かどうか、すなわち両者の値が一致しないかどうかを検査する(ST809)。そして、サブルーチン管理回路171は、チェックサムが不正の場合、すなわち算出したチェックサムの値とヘッダキャッシュ205のチェックサム欄280の値とが一致しない場合(ST809の判断が“Y”の場合)、プロセッサ113へエラー(例えば、“エントリ無し”という内容の例外命令)を通知し(ST804)、コンテンツ実行支援処理を終了する。
一方、チェックサムが正しい場合、すなわち算出したチェックサムの値とヘッダキャッシュ205のチェックサム欄280の値とが一致する場合(ST809の判断が“N”の場合)、サブルーチン管理回路171は、ヘッダキャッシュ205における該当するエントリの情報を更新する(ST810)。具体的には、ヘッダ情報欄267の処理ステート欄277に含まれる優先度の値に“1”を加算し、キャッシュアウトカウント欄281の値に“1”を加算する。
次に、サブルーチン管理回路171は、ヘッダキャッシュ205内にある実行対象のサブルーチンのエントリに着目し、そのエントリのコードタイプ欄275の値が“2”かどうか、すなわちサブルーチンのネイティブコード131が呼び出されているのかどうかを判断する(ST811)。
その判断の結果、ネイティブコード131が呼び出されている場合(ST811の判断が“Y”の場合)、サブルーチン管理回路171は、メモリ117からネイティブコード131のデータを抽出し、プロセッサ113へ転送する(ST812)。これにより、プロセッサ113によってネイティブコード131が実行される。また、ネイティブコード131が実行されると、このネイティブコード131内に後述の方法で記述されたジャンプ先アドレス変換命令292(図2)も実行される。ジャンプ先アドレス変換命令が実行されることにより、呼び出し元のサブルーチンの実行コード145に記述されている当該ネイティブコード131の特殊アドレスが、このネイティブコード131のコード本体290(図2)の先頭アドレスに置き換えられる。
従って、その呼び出し元のサブルーチンの実行コード145から上記ネイティブコード131が再度呼び出される際には、特殊アドレスではなく、ネイティブコード131の先頭アドレスへ直接アクセスすることができ、サブルーチン管理回路171による上記判断が不要となるため、処理が更に高速化する。
一方、呼び出されたサブルーチンがネイティブコード131ではない場合(ST811の判断が“N”の場合)、サブルーチン管理回路171は、ヘッダキャッシュ205内にある実行対象のサブルーチンのエントリのコードタイプ欄275の値が“1”かどうか、すなわちサブルーチンの第2コード121が呼び出されているのかどうかを判断する(ST813)。
ST813の判断の結果、第2コード121が呼び出されている場合(ST813の判断が“Y”の場合)、サブルーチン管理回路171は、ヘッダキャッシュ205内で該当するエントリの処理ステート欄277に格納されている処理状態フラグが“2”かどうか、すなわち、実行対象の第2コード121がネイティブコード131に変換済みかどうかを判断する(ST814)。
ST814の判断の結果、実行対象の第2コード121からネイティブコード131が既に生成されている場合(ST814の判断が“Y”の場合)、サブルーチン管理回路171は、ヘッダキャッシュ205の処理ステート欄277から、ネイティブコード131のアドレスを表す変換済みコードアドレス288(図2)を抽出し、これに基づいてネイティブコード131のデータをメモリ117から抽出してプロセッサ113へ転送する(ST815)。
一方、ST814の判断の結果、実行対象の第2コード121からネイティブコード131がまだ生成されていない場合(ST814の判断が“N”の場合)、サブルーチン管理回路171は、その第2コード121に適用すべき処理の内容を決定するため、後述の処理内容選択処理を実行する(ST816)。この処理内容選択処理を実行することにり、実行対象の第2コード121がまだJITコンパイラ159で処理されていなければ、JITコンパイラ159で処理すべき内容の命令がプロセッサ113へ発行される。
サブルーチン管理回路171は、処理内容選択処理(ST816)を実行するとともに、実行対象の第2コード121の元となる第1コード119のサイズが、所定の条件を満たすかどうか(例えば、予め定めておいたサイズより大きいかどうか)を判断する(ST817)。この判断は、実行対象のサブルーチンのサブルーチンIDに基づいて、メモリ117内の第1コードサイズ管理表239(図4)を検索し、その第2コード121の元となる第1コード119のサイズを抽出することにより行うことができる。なお、本実施例では、サブルーチンIDは、コードの種類にかかわらずサブルーチンごとに一定であるものとする。
ST817の判断の結果、実行対象の第2コード121の元となる第1コード119のサイズが、予め定めたサイズより大きい場合(ST817の判断が“Y”の場合)、サブルーチン管理回路171は、実行対象の第2コード121に関するヘッダキャッシュ205のエントリを参照し、処理ステート欄277内に記述されている変換元となる第1コード119の先頭アドレスに基づいてコード本体190(図2)の先頭アドレスを抽出する(ST818)。そして、サブルーチン管理回路171は、抽出した第1コード119の先頭アドレスを、スタックにプッシュし(ST819)、その第1コード119のインタプリタ実行をプロセッサ113に依頼する(ST820)。
なお、第1コード119のコード本体290の先頭アドレスは、例えば、実行対象の第2コード121に関するヘッダキャッシュ205の処理ステート欄277に含まれるオリジナルコードアドレス286(図2)のアドレス値を抽出し、そのアドレス値から第1コード119のヘッダ部250のサイズを減算することにより得ることができる。なお、第1コード119のヘッダ部250のサイズ(本実施例では、一定値である)は、メモリ117上に別途記憶させておけばよい。
これにより、その第2コード121がJITコンパイラ159でネイティブコード131へ変換されるとともに、その第2コード121の元となる第1コード119がインタプリタ157で逐次解釈されながら実行される。コードのサイズが、或る程度大きい場合は、第2コードをJITコンパイラ159でコンパイルしてから実行するよりも、第1コード119をインタプリタ157で実行した方が処理速度が向上するというメリットがある。なお、本実施例では、処理対象のサブルーチンについて、第1コード119のインタプリタ157による実行と、第2コード121のJITコンパイラ159による実行を別スレッドで同時に行う場合、第1コード119のインタプリタ157による実行を優先し、JITコンパイラ159はネイティブコード131の生成だけのために動作する。
一方、ST817の判断の結果、実行対象の第2コード121の元となる第1コード119のサイズが、予め定めておいたサイズより小さい(ST817の判断が“N”の場合)、コンテンツ実行支援処理は終了する。
ST813の判別処理に戻り、呼び出されたサブルーチンが第2コード121ではない場合(ST813の判断が“N”の場合)、サブルーチン管理回路171は、ヘッダキャッシュ205内にある実行対象のサブルーチンのエントリのコードタイプ欄275の値が “0”かどうか、すなわちサブルーチンの第1コード119が呼び出されているのかどうかを判断する(ST821)。
ST821の判断の結果、呼び出されたサブルーチンが第1コード119ではない場合(ST821の判断が“N”の場合)、サブルーチン管理回路171は、プロセッサ113に対しエラー(例えば、“コードタイプ不正”という内容の例外命令)を通知し(ST822)、コンテンツ実行支援処理は終了する。
一方、ST821の判断の結果、呼び出されたサブルーチンが第1コード119である場合(ST821の判断が“Y”の場合)、サブルーチン管理回路171は、ヘッダキャッシュ205の処理ステート欄277内に記述されている処理状態フラグが“2”かどうか、すなわち、実行対象の第1コード119が既に第2コード121に変換されているかどうかを判断する(ST823)。
ST823の判断の結果、実行対象の第1コード119から生成された第2コード121が既に存在する場合(ST823の判断が“Y”の場合)、サブルーチン管理回路171は、後述のヘッダキャッシュ入れ替え処理を実行する(ST824)。
一方、ST823の判断の結果、実行対象の第1コード119が第2コード121に変換されていない場合(ST823の判断が“N”の場合)、サブルーチン管理回路171は、後述の処理内容選択処理(ST825)を実行する。第1コード119に対して処理内容選択処理を実行すると、その第1コード119がプリコンパイル回路173でプリコンパイルされている最中か又は既にプリコンパイルされた場合でなければ、プリコンパイル待ちの状態に設定され、所定のタイミングでプリコンパイルされることになる。
サブルーチン管理回路171は、処理内容選択処理(ST825)を実行するとともに、スタックに実行対象の第1コード119のコード本体290(図2)の先頭アドレスをプッシュし(ST819)、当該第1コード119のインタプリタ157による実行をプロセッサ113に依頼する(ST820)。なお、第1コード119のコード本体290の先頭アドレスは、例えば、当該第1コード119の呼び出し時にプロセッサ113から発行された特殊アドレスに含まれる先頭アドレスから、ヘッダ部250のサイズを減算することにより得ることができる。
上記ST825,ST819,ST820の処理により、プロセッサ113から呼び出されたサブルーチンの第1コード119は、インタプリタ157で逐次解釈されて実行されるとともに、プリコンパイル回路173で第2コード121に変換されることになる。
図10は、サブルーチン管理プログラム133を実行するプロセッサ113の制御のもとでサブルーチン管理回路171により行われるヘッダキャッシュ205の更新処理(図9のST808)のフローチャートを示す。この処理では、サブルーチンの呼び出しが発生した際に、必要に応じて、メモリ117上の各実行コード145のヘッダ部250とヘッダキャッシュ205との間でデータの入れ替えが行われる。
本処理が呼ばれると、まず、以下のようにパラメータを初期化する(ST801)。
(1)探索位置[pos]=キャッシュの先頭
(2)最小キャッシュアウトカウント値[min]=予め定めた値(例えば、格納可能なキャッシュアウトカウントの最大値[max])
(3)最小キャッシュアウトカウント値を持つエントリ位置[posmin]=キャッシュの先頭。
続いて、posのエントリ[ent]のキャッシュアウトカウント[ent.Cnt]から“1”を減算し(ST902)、ent.Cntが最小キャッシュアウトカウント値[min]より小さいかどうかを判断する(ST903)。
ent.Cntがminより小さい場合(ST903の判断が“Y”の場合)、minにent.Cntを設定し(ST904)、posminにposを設定する(ST905)。
ent.Cntがminより大きい場合(ST903の判断が“N”の場合)又はST905の後、ent.Cntが“0”かどうかを判断し(ST906)、ent.Cntが“0”ではない場合(ST906の判断が“N”の場合)は、全てのエントリを検索し終わったかどうかを判断する(ST907)。全エントリの検索が終了していない場合(ST907の判断が“N”の場合)、posに“1”を加算し(ST908)、次のエントリについて上記の処理を行う。
ent.Cntが“0”の場合(ST906の判断が“Y”の場合)、そのエントリをメモリ117上にある対応するサブルーチンの実行コード145のヘッダ部250へ書き戻す(ST909)。また、全エントリの検索が終了した場合(ST907の判断が“Y”の場合)、posminのエントリをメモリ117上にある対応するサブルーチンの実行コード145のヘッダ部250へ書き戻し(ST910)、posにposminを設定する(ST911)。
これらの処理により、キャッシュアウトカウント値の最も小さいエントリが、殆ど参照されていないエントリとして検出され、ヘッダキャッシュ205からメモリ117へ書き戻すべきエントリを合理的に判断することができる。
ST909又はST911の後、プロセッサ113が参照しようとしているサブルーチンの実行コード145をメモリ117内で検索して、該当するサブルーチンの実行コード145からヘッダ部250のデータを抽出し(ST912)、そのエントリをヘッダキャッシュ805内のposが示す位置へ読み込み(ST913)、ヘッダキャッシュ205の更新処理が終了する。
図11は、サブルーチン管理プログラム133を実行するプロセッサ113の制御のもとでサブルーチン管理回路171により行われる処理内容選択処理(図9のST816,ST824)のフローチャートを示す。
本処理が呼び出されると、サブルーチン管理回路171は、まず、実行対象の第1コード119又は第2コード121に関するヘッダキャッシュ205のエントリの処理ステート欄277を参照し、処理条件(図3の上から三番目の表)が成立しているかどうかを判断する(ST1001)。処理条件が成立していない場合(ST1001の判断が“N”の場合)、サブルーチン管理回路171は、この処理内容選択処理を終了する。
一方、ST1001の判断の結果、実行対象の第1コード119又は第2コード121に関する処理条件が成立していると判断した場合(ST1001の判断が“Y”の場合)、サブルーチン管理回路171は、実行対象のサブルーチンの実行コード145について、ヘッダキャッシュ205の処理ステート欄277内に記述されている処理状態フラグが“0”かどうかを判断する(ST1002)。具体的には、サブルーチン管理回路171は、実行対象のサブルーチンに関するヘッダキャッシュ205のエントリの内容に基づいて、第1コード119が処理対象のサブルーチンであれば、第2コード121へ変換されておらず且つ変換途中でもないかどうか、また、第2コード121が処理対象サブルーチンであれば、ネイティブコード131へ変換されておらず且つ変換途中でもないかどうかを判断する。
ST1002の判断の結果、実行対象のサブルーチンの実行コード145の処理状態フラグが“0”の場合(ST1002の判断が“Y”の場合)、サブルーチン管理回路171は、この処理内容選択処理を終了する。
一方、実行対象のサブルーチンの実行コード145の処理状態フラグが“0”ではない場合(ST1002の判断が“N”の場合)、サブルーチン管理回路171は、実行対象のサブルーチンのコードタイプが“0”かどうか、すなわち第1コード119が処理対象のサブルーチンかどうかを判断する(ST1003)。
ST1003の判断の結果、処理対象のサブルーチンが第1コード119ではない場合(ST1003の判断が“N”の場合)、すなわち第2コード121が処理対象のサブルーチンである場合には、サブルーチン管理回路171は、その第2コード121のコード本体290(図2)の先頭アドレスをスタックにプッシュする(ST1004)。第2コード121のコード本体290の先頭アドレスは、例えば、プロセッサ113から発行された特殊アドレスに含まれる第2コード121の先頭アドレスからヘッダ部250のサイズを減算して得ることができる。第2コード121のヘッダ部250のサイズは、予め計算してメモリ117に記憶させておいてもよいし、必要に応じて計算してもよい。
そして、サブルーチン管理回路171は、その第2コード121をJITコンパイラ159でネイティブコード131へ変換するため、JITコンパイラ159による処理をプロセッサ113に依頼する(ST1005)。
ST1003の判断の結果、サブルーチン管理回路171は、第1コード119が処理対象のサブルーチンである場合(ST1003の判断の結果が“Y”の場合)、又はST1005の後、実行対象のサブルーチンに関するヘッダキャッシュ205のエントリのうち、処理ステート欄280のデータに含まれる処理状態フラグを“1”に設定する(ST1006)。なお、サブルーチンの第1コード119に関するエントリの処理状態フラグを“1”に設定することにより、この第1コード119は、後述のプリコンパイル回路173によるプリコンパイル処理の待ち状態に設定される。
図12は、プリコンパイル時における実行コード処理部123の動作のフローチャートを示す。本フローチャートに示す動作は、コンテンツ107の実行が開始された後、ヘッダキャッシュ入れ替え処理(図9のST808)やヘッダ情報267の更新処理(図9のST810)によって、ヘッダキャッシュ205のエントリの内容が変化した場合に開始する。また、この動作が行われている間は、ヘッダキャッシュ205のエントリの内容が再度変化しても、同様の動作が重複して行われることはないものとする。
まず、サブルーチン管理回路171は、ヘッダキャッシュ205のエントリの内容が変化するのを待ち(ST1101)、エントリの変化を検出すると(ST1101の判断が“Y”の場合)、変化したエントリに対応するサブルーチンのコードタイプが“0”で、且つ処理状態フラグが“1”かどうかを判断する(ST1102)。すなわち、サブルーチン管理回路171は、処理対象のサブルーチンがプリコンパイル待ち状態の第1コード119であるかどうかを判断する。
ST1102の判断の結果、処理対象のサブルーチンがプリコンパイル待ち状態の第1コード119ではない場合(ST1102の判断が“N”の場合)、本動作は終了する。
ST1102の判断の結果、処理対象のサブルーチンがプリコンパイル待ち状態の第1コード119である場合(ST1102の判断が“Y”の場合)、サブルーチン管理回路171は、メモリ117の空き容量が十分あるかどうかを調べる(ST1103)。
メモリ117の空き容量が不十分であれば(ST1103の判断が“N”の場合)、この動作が終了する。メモリ117の空き容量の判定方法としては、例えば、メモリ117の使用量があらかじめ定めた閾値を超えた場合にメモリ不足と判定するなどの方法を適用することができる。
メモリ117の空き容量が十分あれば(ST1103の判断が“Y”の場合)、サブルーチン管理回路171は、プリコンパイル制御回路175に対し、パラメータの初期設定を行う(ST1104)。このパラメータは、例えば、動作速度定義表301の値である。なお、動作速度定義表301は、メモリ117上に格納されているので、パラメータを設定する処理を省略し、プリコンパイル制御回路175が必要に応じてメモリ117上の動作速度定義表301を参照するように構成してもよい。また、動作速度定義表301をキャッシュメモリ177上に格納しておき、これを参照するように構成してもよい。このパラメータの設定は、プロセッサ113が行うように構成してもよい。パラメータの設定(ST1104)が完了すると、サブルーチン管理回路171は、プリコンパイル制御回路175を起動する(ST1105)。
次に、サブルーチン管理回路171は、プリコンパイル待ちのサブルーチンの実行コード145の優先度を用いてプリコンパイル対象のエントリ選択する(ST1106)。本実施例では、優先度は、ヘッダキャッシュ205の処理ステート欄277内にある優先度の値を採用することができる。そして、優先度の高いサブルーチンから順に、第1コード119を第2コード121へ変換するのがよい。なお、プリコンパイル待ち状態のサブルーチンの第1コード119が一個しか存在しない場合は、ST1106の判断において、その第1コード119が選択されることになる。
サブルーチン管理回路171がプリコンパイルの対象エントリを選択した後、プリコンパイル制御回路175は、インタプリタ実行のバックグラウンドでプリコンパイルを実行できるシステム状態かどうかを調べる(ST1107)。バックグラウンドで実行できない場合とは、例えば、
(1)バス103の負荷(データ伝送量)が予め定めた閾値より高い場合
(2)メモリ117を複数搭載する場合において、プリコンパイル対象の第1コード119が存在するメモリ117へのプロセッサ113によるアクセス頻度が、予め定めた閾値より高い場合
などが考えられる。
プリコンパイルをインタプリタ実行のバックグラウンドで実行できない場合(ST1107の判断が“N”の場合)は、システム状態が回復するまで待機する。プリコンパイルをインタプリタ実行のバックグラウンドで実行できる場合(ST1107の判断が“Y”の場合)、サブルーチン管理回路171は、プリコンパイル結果としての第2コード121を格納するためのメモリ117上のアドレス(プリコンパイル結果格納アドレス)にヘッダ部250(図2)を生成する(ST1108)。生成されるヘッダ部250の内容は、以下のとおりである。
(1)コードタイプ:“1”
(2)処理条件:例えば、変換元となる第1コード119の処理条件と同じ値
(3)優先度:“0”
(4)処理状態フラグ:“0”
(5)オリジナルコードアドレス:元となる第1コード119の先頭アドレス。
(6)変換済みコードアドレス:null
(7)実行中フラグ:“1”
(8)終了アドレス:この第2コード121の終了アドレス
(9)チェックサム:チェックサム(プロセッサ113又はサブルーチン管理回路171によって計算される)。
なお、プリコンパイル結果格納アドレスは、メモリ117上で、プリコンパイル対象の第1コード119が格納されているエリアの直後に設定(図2)すればよいが、コンテンツ107のデータを格納するエリアとは別のエリアに設定することも可能である。
その後、プリコンパイル制御回路175は、プリコンパイル回路173を起動し(ST1109)、後述(図14)のプリコンパイル回路173の動作速度制御を開始する(ST1110)。
プリコンパイル制御回路175は、プリコンパイル回路173の動作速度制御を開始すると、さらにシステム状態を監視し、システム状態が悪化したかどうかを検査する(ST1111)。システム状態が悪化すると(ST1111の判断が“Y”の場合)、プリコンパイル回路173によるプリコンパイル処理を一時停止させる(ST1112)。ここで、システム状態の悪化とは、例えば、バス103の負荷があらかじめ定めた閾値より高い場合や、メモリ117を複数搭載する場合において、プリコンパイル対象の第1コード119が存在するメモリ117へのプロセッサ113によるアクセス頻度が予め定めた基準より高い場合などが考えられる。
システム状態が悪化しなければ(ST1111の判断が“N”の場合)、プリコンパイル回路171にプリコンパイルを継続させ(ST1113)、プリコンパイルが完了したかどうかを判断する(ST1114)。プリコンパイルが完了していなければ(ST1114の判断が“N”の場合)、ST1110へ戻る。プリコンパイルが完了した場合(ST1114の判断が“Y”の場合)、サブルーチン管理回路171は、プリコンパイルを行った第1コード119に対応するヘッダキャッシュ205上のエントリを更新する(ST1115)。具体的には、更新するエントリの内容は以下のとおりである。
(1)処理状態フラグ:“2”
(2)変換済みコードアドレス:プリコンパイル結果格納アドレス。
そして、サブルーチン管理回路171は、プリコンパイル待ちの他のサブルーチンのエントリ、すなわちコードタイプが“0”で、且つ処理状態フラグが“1”のエントリがほかにも存在するかどうかを調べる(ST1116)。
ST1116の判断の結果、プリコンパイル待ちの他のサブルーチンのエントリが存在する場合(ST1116の判断が“Y”の場合)、ST1106へ戻る。プリコンパイル待ちの他のサブルーチンのエントリが存在しない場合(ST1106の判断が“N”の場合)、プリコンパイル制御回路175は、プリコンパイル回路171を停止する(ST1117)。そして、プリコンパイル制御回路175の動作が停止し(ST1118)、この動作が終了する。
図13は、プリコンパイルの開始から終了までの間におけるプリコンパイル回路173による処理のフローチャートを示す。この処理は、プリコンパイル制御回路175によってプリコンパイル回路173が起動されること(図12のST1109)により開始する。
プリコンパイル回路173は、処理対象のサブルーチンの第1コード119のプリコンパイルを開始すると(ST1201)、エラーが発生したかどうかを検出する(ST1202)。エラーが発生した場合(ST1202の判断が“Y”の場合)、途中まで生成したコードを破棄し(ST1203)、プリコンパイル処理を中止する。エラーの内容としては、例えば、第2コード格納用のメモリ領域が不足した場合や、第1コードに不正な値が入っていた等の理由によりコンパイルエラーが発生した場合などの不具合が考えられる。
一方、プリコンパイルが正常に終了すると(ST1202の判断が“N”で、ST1204の判断が“Y”の場合)、プリコンパイル回路173は、生成した第2コード121を、図12のST1108でメモリ117上に生成したヘッダ部250の直後へ格納する(ST1205)。メモリ117への格納方法としては、プリコンパイルの最中に生成される第2コード121をメモリ117へ逐次格納するように構成してもよい。また、メインルーチンについては、コンテンツ109の実行時に一度しか実行されない場合が多いため、ヘッダ部250の処理条件280(図2)を“4”に設定し、プリコンパイルを行わず、インタプリタ157でのみ実行するように構成するのがよい。
図14は、プリコンパイル制御回路175によるプリコンパイル回路173の動作速度制御処理のフローチャートを示す。
プリコンパイル制御回路175は、プリコンパイル回路173が第1コード119のプリコンパイルを行う際(例えば、図12のST1113など)、その第1コード119内(例えば、ヘッダ部250のなか)にサブルーチン定義値が書き込まれているかどうかを調べる(ST1301)。第1コード119内にサブルーチン定義値が存在する場合(ST1301の判断が“Y”の場合)、例外的にその値を、第1コード119から第2コード121を生成する優先度として抽出し(ST1302)、この優先度を動作速度定義表(図5)に照らして動作速度を抽出する(ST1303)。
第1コード119内にサブルーチン定義値が存在しない場合(ST1301の判断が“N”の場合)、その第1コード119に対応するサブルーチンの優先度を、ヘッダキャッシュ205の処理ステート欄277から抽出し(ST1304)、取得した優先度を動作速度定義表(図5)に照らし、その優先度に応じた動作速度を抽出する(ST1305)。
プリコンパイル制御回路175は、ST1303又はST1305で抽出した動作速度の値に従って、プリコンパイル回路173の動作速度を制御するとともに、動作速度を下げる場合は、プリコンパイル回路173の動作を維持できる電圧値の範囲内で同回路173への供給電圧値を下げる(ST1306)。
図15は、仮想マシン153のインタプリタ157によるサブルーチンの第1コード119のインタプリタ実行処理のフローチャートを示す。本処理は、サブルーチン管理回路171がプロセッサ113に対してインタプリタ実行を依頼すること(図9のST820)により開始する。
本処理が開始すると、プロセッサ113は、仮想マシン153のインタプリタ157を起動し、スタックから処理対象の第1コード119の先頭アドレスを読み込み(ST1401)、そのアドレスに基づいて、処理対象の第1コード119のデータを読み込み(ST1402)、その読み込んだ第1コード119のデータを解析しながら逐次実行する(ST1403)。
図16は、サブルーチンの第2コード121をネイティブコード131へ変換する際の、プロセッサ113及びサブルーチン管理回路171による処理のフローチャートを示す。本処理は、サブルーチン管理回路171がプロセッサ113に対してJITコンパイラ159によるサブルーチンの第2コード121の処理を指示したこと(図11のST1005)により開始する。
まず、プロセッサ113は、メモリ117の空き容量が十分かどうかを判断し(ST1501)、メモリ117の空き容量が不十分であれば(ST1501の判断が“N”の場合)、処理対象の第2コード121をネイティブコード131へ変換せずに本処理が終了する。メモリ117の空き容量の判定方法としては、例えば、メモリ117の使用量が予め定めた閾値を超えた場合にメモリ不足と判定するなどの方法を適用することができる。
メモリ117の空き容量が十分あれば(ST1501の判断が“Y”の場合)、プロセッサ113は、サブルーチン管理プログラム133に基づいて、サブルーチン管理回路171に対し、コンパイル結果としてのネイティブコード131を格納するためのメモリ117上のアドレス(コンパイル結果格納アドレス)にヘッダ部250(図2)を生成させる(ST1502)。生成されるヘッダ部250の内容は、以下のとおりである。
(1)コードタイプ:“2”
(2)処理条件:例えば、“null”
(3)優先度:“0”
(4)処理状態フラグ:“0”
(5)オリジナルコードアドレス:変換元となる第2コード121の先頭アドレス
(6)変換済みコードアドレス:null
(7)実行中フラグ:“1”
(8)終了アドレス:このネイティブコード131の終了アドレス
(9)チェックサム:チェックサム(プロセッサ113又はサブルーチン管理回路171によって計算される)。
なお、コンパイル結果格納アドレスは、メモリ117上で、コンパイル対象の第2コード121の直後に設定(図2)すればよいが、コンテンツ107のデータを格納するエリアとは別のエリアに設定することも可能である。
その後、プロセッサ113は、仮想マシン153のJITコンパイラ159を起動し、サブルーチン管理回路171によって予めスタックにプッシュされている第2コード121の先頭アドレスを抽出し、そのアドレスに基づいて取得した第2コード121のデータをネイティブコード131へ変換し、実行する(ST1503)。なお、本実施例では、処理対象のサブルーチンについて、第1コード119のインタプリタ157による実行と、第2コード121のJITコンパイラ159による実行を別スレッドで同時に行う場合(図9のST818〜ST820)、第1コード119のインタプリタ157による実行がJITコンパイラ159のネイティブコード131の生成より優先される。
この際、JITコンパイラ159は、処理対象のサブルーチンの第2コード121をネイティブコードに変換する過程において、そのネイティブコード131がコンテンツ107の実行中に呼び出されたときに実行されるジャンプ先アドレス変換命令292(図2)をコード内に記述する。具体的には、ネイティブコード131の呼び出し元のサブルーチンの実行コード145に記述されている当該ネイティブコード131の特殊アドレスを、該ネイティブコード131のコード本体290の先頭アドレスに置き換えるという内容の命令をコード内に記述する。これにより、コンテンツ107の実行中にサブルーチンのネイティブコード131が呼び出された場合、プロセッサ113は、特殊アドレスではなく、そのネイティブコード131のコード本体290の先頭アドレスに直接アクセスすることができるため、コンテンツ107の実行速度を更に向上させることができる。
そして、サブルーチン管理回路171は、JITコンパイラ159によって生成されたネイティブコード131を、メモリ117上に生成したヘッダ部250の直後に格納し(ST1504)、元となる第2コード121のヘッダキャッシュ205内のエントリを以下のとおり更新し、本処理が終了する。
(1)処理状態フラグ:“2”
(2)変換済みコードアドレス:コンパイル結果格納アドレス。
図17は、サブルーチン管理回路171によるコンテンツ終了処理のフローチャートを示す。この処理は、例えば、ユーザによってコンテンツ107の終了が指示されたとき、或るコンテンツ107の実行中に、別のコンテンツを実行するとき(図6のST610)又はサーバから別のコンテンツをダウンロードして実行するとき(図6のST610)のいずれかのタイミングで実行される。実施例の携帯電話機101は携帯型の組込み機器であるため、プロセッサ113やメモリ117等のハードウェア105のリソースが厳しく制限されるため、別のコンテンツを実行する際には、この終了処理を行うことにより、実行中のコンテンツ107を強制的に終了して、メモリ117等のリソースを開放する。
まず、コンテンツ107の終了が指示されると、ヘッダキャッシュ205から終了するコンテンツ107に対応するエントリをメモリ117上にある対応する実行コード145のヘッダ部250へ書き戻す(ST1601)。そして、メモリ117の空き容量が十分にあるかどうかを検査する(ST1602)。容量が十分ある状態とは、例えば、別のコンテンツをメモリ117上にロードできるだけの容量が空いていることをいう。メモリ117上に十分な空き容量がある場合(ST1602の判断が“Y”の場合)、コンテンツ終了処理を終了する。
メモリ117上に十分な空き容量がない場合(ST1602の判断が“N”の場合)、不揮発性記録媒体115内にこのコンテンツ107が存在するかどうかを判断する(ST1603)。不揮発性記録媒体115内にこのコンテンツ107が存在する場合(ST1603の判断が“Y”の場合)、このコンテンツ107をメモリ117上から削除し(ST1604)、コンテンツ終了処理を終了する。
不揮発性記録媒体115内にこのコンテンツ107が存在しない場合(ST1603の判断が“N”の場合)、ユーザによる保存の指示があったかどうかを判断する(ST1605)。ユーザによる保存の指示があった場合(ST1605の判断が“Y”の場合)、不揮発性記録媒体115にコンテンツ107を保存し(ST1606)、そのコンテンツ107をメモリ117上から削除し(ST1604)、コンテンツ終了処理を終了する。
一方、ユーザによる保存の指示がなかった場合(ST1605の判断が“N”の場合)、コンテンツ107をメモリ117上から削除し(ST1604)、コンテンツ終了処理を終了する。なお、ST1604の処理では、サブルーチン共用表243に基づいて、終了するコンテンツ107の実行コード145が他のコンテンツとの間で共用されていると判断される場合、その共用されている実行コード145をメモリ117上に保持するように構成することができる。
なお、ST1602〜ST1606の処理は、プロセッサ113が行うように構成してもよい。
以上の説明(図1〜図17)を整理すると、実施例の携帯電話機101は、以下の構成を有する。
(1)スクリプト或いはJavaプログラム(コンテンツ)107に含まれる複数のサブルーチンごとに、プロセッサ113で実行可能なネイティブコード131、ネイティブコード131の元となるOS127に依存しない第1コード119、及び第1コード119をネイティブコード131へ変換する過程で生成される第2コード121のうち、少なくともいずれか1種類の実行コード145を記憶するメモリ117であって、その実行コード145は、該当する種類を表すコードタイプが記述されたコード情報格納部としてのヘッダ部250を有するとともに、他のサブルーチンへのジャンプ先アドレスとして特殊アドレスが記述されており、その特殊アドレスは、特殊アドレス識別子と上記他のサブルーチンの先頭アドレスを含む、メモリを備える。また、このメモリ117には、サブルーチンごとに定められる第1コード119を第2コード121へ変換する優先度に応じて、プリコンパイル回路173の動作速度を定めた動作速度定義表301(図5)が記憶される。
(2)各サブルーチンの実行コード145のヘッダ部250の内容をヘッダキャッシュ205として記憶するキャッシュメモリ177を備える。
(3)第1コード119をインタプリタ方式で実行するインタプリタ157、及び第2コード121をコンパイルしてから実行するJITコンパイラ159を有する仮想マシン153を備える。
(4)第1コード119から第2コード121を生成するプリコンパイル回路173を備える。
(5)スクリプト或いはJavaプログラム107の実行中にプロセッサ113がアクセスしたアドレスに特殊アドレス識別子が含まれている場合に特殊アドレスであると判断し、メモリ117上に当該他のサブルーチンの実行コード145として、ネイティブコード131が記憶されていれば、そのネイティブコードがプロセッサ131で実行されるように第1の実行制御を行い、ネイティブコード131が記憶されておらず第2コード121が記憶されていれば、その第2コード121が仮想マシン153のJITコンパイル機能(JITコンパイラ159)で実行され、生成されたネイティブコード131がメモリ117に格納されるように第2の実行制御を行い、第1コード119だけが記憶されていれば、その第1コード119が仮想マシン153のインタプリタ機能(インタプリタ157)で実行されるとともに、プリコンパイル回路173で第2コード121に変換され、その第2コード121がメモリ117に格納されるように第3の実行制御を行うサブルーチン管理手段(サブルーチン管理プログラム133を実行するプロセッサ113がサブルーチン管理回路171を制御するこで実現する手段)を備える。このサブルーチン管理手段は、コード情報格納部としてのヘッダ部250に記述されているコードタイプを利用して第1乃至第3の実行制御を切り替えている。
(6)サブルーチン管理回路171は、サブルーチン管理プログラム133を実行するプロセッサ113の制御のもとで、第1又は第2の実行制御によりサブルーチンの実行コード145が変換されたときは、その実行コード145のヘッダ部250に変換後の実行コード145の先頭アドレスが記述されるように記録制御を行う。また、サブルーチン管理回路171は、スクリプト或いはJavaプログラム107の実行中にプロセッサ113がアクセスしたアドレスに特殊アドレス識別子が含まれている場合に特殊アドレスであると判断し、当該他のサブルーチンの実行コード145のヘッダ部250を検査し、第1コード119を表すコードタイプが記述されており、且つ第2コード121の先頭アドレスが記述されていないときは、第3の実行制御を行い、第1コード119を表すコードタイプが記述されており、且つ第2コード121の先頭アドレスが記述されており、且つ該先頭アドレスで特定される第2コード121のヘッダ部250にネイティブコード131の先頭アドレスが記述されていないときは、第2の実行制御を行い、第1コード119を表すコードタイプが記述されており、且つ第2コード121の先頭アドレスが記述されており、且つ該先頭アドレスで特定される第2コード121のヘッダ部250にネイティブコード131の先頭アドレスが記述されているときは、第1の実行制御を行う。
(7)サブルーチン管理回路171は、サブルーチン管理プログラム133を実行するプロセッサ113の制御のもとで、第3の実行制御を行う際、サブルーチンごとに定められる第1コード119を第2コード121へ変換する優先度に基づいて、プリコンパイル回路173を制御する。なお、サブルーチンごとの優先度のデータは、キャッシュメモリ177上のヘッダキャッシュ205に記憶されており、サブルーチン管理回路171は、これを参照して優先度を判断することができる。
(8)プリコンパイル回路173で処理される第1コード119に対応するサブルーチンの優先度を用いて、動作速度定義表301から動作速度を判断し、その動作速度に従ってプリコンパイル回路173が動作するように制御を行うプリコンパイル制御手段(プリコンパイル制御プログラム135を実行するプロセッサ113がプリコンパイル制御回路175を制御することで実現する手段)を備える。また、プリコンパイル制御回路175は、プリコンパイル回路173の動作速度を下げたとき、プリコンパイル回路173への供給電圧を、その動作を維持できる電圧値の範囲内で下げる。実施例では、優先度として、コンテンツ107の実行中に呼び出されたサブルーチンごとの回数を採用している。
(9)サブルーチン管理回路171は、サブルーチン管理プログラム133を実行するプロセッサ113の制御のもとで、コンテンツ107の実行中にサブルーチンのネイティブコード131が呼び出された場合、その呼び出し元のサブルーチンの実行コード145に記述されているジャンプ先アドレスを表す特殊アドレスを、そのネイティブコード131のコード本体290の先頭アドレスに置き換える。具体的には、サブルーチンの第2コード121が仮想マシン153のJITコンパイラ159でネイティブコード131に変換される過程において、そのネイティブコード131がコンテンツ107の実行中に呼び出されたときに実行されるジャンプ先アドレス変換命令292(図2)がコード内に記述されるように構成する。その命令は、そのネイティブコード131の呼び出し元であるサブルーチンの実行コード145に記述されている当該ネイティブコード131の特殊アドレスを、そのネイティブコード131のコード本体290の先頭アドレスに置き換えるという内容の命令である。例えば、このジャンプ先アドレス変換命令292は、サブルーチン管理プログラム133の処理の一部を用いて記述されるように構成してもよいし、これとは別にプロセッサ113によって実行される専用のプログラムを用いて記述されるように構成することもできる。また、ジャンプ先アドレス変換命令292がネイティブコード131内に記述される構成を採用しない構成、例えば、ネイティブコード131が実行されるたびに、プロセッサ113又はサブルーチン管理回路171が所定のプログラムを実行し、その呼び出し元のサブルーチンの実行コード145に記述されている当該ネイティブコード131の特殊アドレスを、当該ネイティブコード131のコード本体290の先頭アドレスに書き換える構成を採用することもできる。
(10)メモリ117は、各サブルーチンの第1コード119のサイズを管理する第1コードサイズ管理表239を記憶しており、サブルーチン管理回路171は、サブルーチン管理プログラム133を実行するプロセッサ113の制御のもとで、第3の実行制御によりサブルーチンの第1コード119が第2コード121に変換されたとき、その第2コード121に関するヘッダキャッシュ205のエントリに、変換元となる第1コード119の先頭アドレスが記述されるように記録制御を行う。そして、第2の実行制御の対象となる第2コード121の変換元の第1コード119のサイズを第1コードサイズ管理表から抽出した結果、そのサイズが所定の値より大きいときは、その第2コード121が仮想マシン153のJITコンパイラ159でネイティブコードに変換されてメモリ117に格納されるとともに、その第2コード121のヘッダ部250に記述されている変換元の第1コード119の先頭アドレスに基づいて、その第1コード119が別スレッドでインタプリタ157で実行されるように前記第2の実行制御を行う。
以上のように、本実施例では、各サブルーチンの実行コード145内に、他のサブルーチンの先頭アドレス及び当該先頭アドレスで特定されるサブルーチンが実行コード145の種類に応じて処理される必要があることを示す特殊アドレス識別子を含んで構成された特殊アドレスを記述しておき、さらに該当する実行コード145の種類を表すコードタイプをヘッダ部250に記述しておき、ヘッダ部250の情報をキャッシュメモリ177上のヘッダキャッシュ205に格納する。これにより、プロセッサ113がその特殊アドレスにアクセスすると、サブルーチン管理回路171は、サブルーチンの呼び出しが発生したことを検出し、メモリ117内を検索することなく、特殊アドレスに含まれる先頭アドレスで特定される実行コード145に関するヘッダキャッシュ205内のエントリに記述されたコードタイプに基づいて、その実行コード145の種類に応じた処理が行われるように制御を行う。このように、コンパイル状況の確認及び処理対象の実行コード145の先頭アドレスの判断のためのメモリ117内の検索が不要となり、コンテンツ107の実行速度を格段に向上することができる。
また、コンテンツ107の実行中にネイティブコード131が呼び出された場合、呼び出し元のサブルーチンの実行コード145内に記述された特殊アドレスがネイティブコード131のコード本体290の先頭アドレスに書き換えられるため、同じ呼び出し元からの呼び出しが再び発生したときには、ネイティブコード131のコード本体290の先頭アドレスに直接アクセスできるため、コンテンツ107の実行速度が向上する。
さらに、第1コード119を第2コード121へ変換する処理(プリコンパイル)を、プリコンパイル専用の回路(プリコンパイル回路173)を用いて行うことにより、インタプリタ157による第1コード119の処理とは完全に独立した状態(プロセッサ113が使用されない状態)で、プリコンパイルを行うことができる。従って、プリコンパイルとインタプリタ157による各処理を同時に実行しても、いずれも処理速度が低下することがない。さらに、JITコンパイラ159は、予めプリコンパイルされた第2コード121をコンパイルすることになるため、JITコンパイルの処理速度の向上を図ることができる。
[実施例2]
次に、実施例2として、本発明を適用した携帯電話機101を用いて、コンテンツ配信サーバ1701から既存コンテンツ107又は新しいコンテンツ1703のデータを受信する方法を説明する。実施例2においては、実施例1で説明した携帯電話機101の機能については説明を省略するとともに、同じ要素については同一の符号を付した。
図18は、携帯電話機101及びコンテンツ配信サーバ1701のそれぞれの構成及び連携方法を示す。携帯電話機101とコンテンツ配信サーバ1701は、インターネット等の通信ネットワークを介して接続される。
携帯電話機101は、サブルーチン管理表203のうち、ハッシュ値管理表237及びダウンロード元管理表241については、これらを組み合わせて構成したクライアントサブルーチンリスト1705として有している。
クライアントサブルーチンリスト1705は、各サブルーチンのダウンロード元のURL(サーバURL)、サブルーチンID、ハッシュ値、及びサーバ通知状況を格納する。実施例2では、サブルーチンID、サブルーチン名、及びハッシュ値は、コンテンツ配信サーバ1701側でサブルーチンごとに付与される。
コンテンツ配信サーバ1701は、複数のコンテンツ107,1703等のほかに、
コンテンツ107,1703に含まれるサブルーチンごとに、サブルーチンID、サブルーチン名、及びハッシュ値を管理するサーバサブルーチンリスト1707と、
各サブルーチンに対して一意なIDを割り当てるサブルーチンIDカウンタ1709と、
サーバサブルーチンリスト1707に、各サブルーチンの情報が初めて登録されるとき及び変更されたサブルーチンの情報が登録されたときに、そのサブルーチンに対してハッシュ値を生成し、サーバサブルーチンリストへ登録するハッシュ値生成部1710と、
Webサーバが通常備える各種機能を有するとともに、携帯電話機101との間でコンテンツ等の情報通信を行うために必要な各種機能を有する配信機能部1711と
を含んで構成される。
サーバ側のコンテンツ1703も、第1コード1713と、テキストデータ及び各種バイナリデータ等で構成されるその他のデータ1715によって構成される。
ハッシュ値生成部1710によるハッシュ値の生成方法としては、例えば、各サブルーチンの第1コード1713の全文に基づいてハッシュ関数を用いて生成する方式、又は各第1コード1713の改変を検出できる最小限の間隔で抽出した1バイトの値に基づいてハッシュ関数を用いて生成する方式が適用可能である。上記改変を検出できる最小限の間隔は、例えば、数バイトから数十バイトの間隔である。
また、コンテンツ配信サーバ1701は、コンテンツ107,1703等のコンテンツIDとこれらに含まれるサブルーチンごとのサブルーチンIDとを管理する、コンテンツ管理表(図2)201と同様のサーバコンテンツ表(図示省略)を備えている。コンテンツ配信サーバ1701は、携帯電話機101へコンテンツ107,1703のサブルーチンの第1コード119,1713等のデータを送信する際に、各サブルーチンに対応するコンテンツIDの情報も併せて送信する。
次に、図18及び図19を用いて、携帯電話機101がコンテンツ配信サーバ1701からコンテンツ107,1703のデータをダウンロードする方法を説明する。図18には、図19で説明する処理を図示したので、適時参照されたい。
図19は、携帯電話機101のサブルーチン管理回路171(図1)によるコンテンツ登録処理のフローチャートを示す。この処理は、ユーザの指示により、携帯電話機101からコンテンツ配信サーバ1701側へコンテンツの配信を要求した場合に実行される。具体的には、ユーザが携帯電話機101を用いて、ダウンロード可能な複数のコンテンツ107,1703等が表示されたウェブサイトへアクセスし、所望のコンテンツをダウンロードする操作を行った場合に実行される。
まず、サブルーチン管理回路171は、ユーザの指示に応じて、コンテンツ配信サーバ1701に対し、ダウンロードしようとするコンテンツに関するサーバサブルーチンリスト1707の情報の送信を要求し(ST1801)、その情報が送信されるまで待機する(ST1802)。
サーバサブルーチンリスト1707の情報を受信すると(ST1702の判断が“Y”の場合)、サーバサブルーチンリスト1707とクライアントサブルーチンリスト1705とを比較し、ハッシュ値に基づいて、両リスト1705,1707内で重複するサブルーチンを検出する(ST1803)。ここで、重複するサブルーチンがない場合、そのコンテンツは、新しくダウンロードするコンテンツ1703である。
一方、重複するサブルーチンが存在する場合、ダウンロードしようとしているコンテンツは、既に携帯電話機101にダウンロードされているが、そのダウンロードの後に修正され若しくは追加されたサブルーチンを含むコンテンツ107、又は携帯電話機101にダウンロードされていないが、幾つかのサブルーチンが既にインストールされている別のコンテンツとの間で共用されているコンテンツ1703である。
サブルーチン管理回路171は、ST1803で検出したサブルーチンの重複情報をコンテンツ配信サーバ1701へ通知し(ST1804)、サーバ側から送信されるデータの受信が開始するまで待機する(ST1805)。コンテンツ配信サーバ1701からは、重複しないサブルーチンの第1コード119,1713等のデータが送信される。サブルーチン管理回路171は、受信を開始すると(ST1805の判断が“Y”の場合)、そのデータを不揮発性記録媒体115へダウンロードする(ST1806)。そして、ダウンロードが完了すると、ダウンロードしたデータをメモリ117上に転送する(ST1807)。
次に、サブルーチン管理回路171は、ダウンロードしたデータが、新しいコンテンツのデータかどうかを判断する(ST1808)。そして、新しいコンテンツ1703のデータ1713,1715をダウンロードした場合(ST1808の判断が“Y”の場合)、そのコンテンツ1703にコンテンツIDを割り当て、コンテンツ管理表201(図4)にその情報を登録する(ST1809)。この際、既存のコンテンツ107との間で幾つかのサブルーチンを共用することになった場合、その共用関係を動的にライブラリ化する(サブルーチン共用表243に登録する)ように構成しておくのがよい。
既存のコンテンツ107のデータをダウンロードした場合(ST1808の判断が“N”の場合)、又はST1809の後、サブルーチン管理手段を構成するサブルーチン管理回路171は、ダウンロードしたコンテンツ1703の各サブルーチンに関する情報に基づいて、クライアントサブルーチンリスト1705を更新する(ST1811)。具体的には、クライアントサブルーチンリスト1705の各項目に対して以下の値を格納する。
(1)サーバURL欄:ダウンロード元であるコンテンツ配信サーバ1701のURLを格納する
(2)サブルーチンID欄:サーバで割り当てられたサブルーチンIDを格納する
(3)ハッシュ値欄:サーバから受信したサーバサブルーチンリストの情報に基づいて、ハッシュ値を格納する
(4)サーバ通知欄:ST1804で重複するサブルーチンとして通知された場合は、“yes”に設定する。新たにダウンロードしたサブルーチンの場合は、“no”に設定する。
上記の構成によれば、携帯電話機101でコンテンツ107,1703をダウンロードするとき、そのコンテンツ107,1703に含まれる各サブルーチンの識別子(ここではハッシュ値)を用いて、サブルーチン単位でダウンロード済みかどうかを判断することができる。そして、ダウンロード済みのサブルーチンに関する情報をコンテンツ配信サーバ1701へ通知し、サーバ側で重複しない(未送信の)サブルーチンを特定して送信するように構成することにより、必要なデータだけをダウンロードすることができ、コンテンツ107,1703のダウンロード時の通信量を大幅に削減することができる。
また、携帯電話機101では、クライアントサブルーチンリスト1705内でサブルーチンの重複情報の通知の有無をフラグ(サーバ通知)で管理しているため、コンテンツのダウンロード時にコンテンツ配信サーバ1701から送信されるサーバサブルーチンリスト1707への返答の際には、未通知の重複情報だけを送信すればよくなり、通信量を削減することができる。
さらに、コンテンツ配信サーバ1701側で、携帯電話機101から送信されるサブルーチンの重複情報を携帯電話機101等の端末別に管理するのがよい。これにより、それ以降のコンテンツ107,1703等のダウンロード時には、そのコンテンツに関するサーバサブルーチンリスト1707のうち、未送信の情報だけを携帯電話機101側へ送信すればよくなり、通信量を削減することができる。
以上、本発明の実施例を説明したが、実現可能な実施形態はこれに限られない。以下、本発明の実施形態の変形例を示す。
[画像処理用の実行コードを含む場合]
図20は、実行対象のコンテンツ107に画像処理プログラムが含まれる場合における、実行コード処理部123による処理のフローチャートを示す。
プリコンパイル回路173は、サブルーチン管理回路171によって選択されたサブルーチンの第1コード119のデータ(例えば、ループ単位や関数単位のデータ)をメモリ117から取得すると(ST1901)、画像処理用コードパターンに一致するかどうかを検査する(ST1902)。この検査においては、例えば、画像処理プログラムのサブルーチンの実行コードを表す幾つかのパターンを予めメモリ117上に又はキャッシュメモリ177上に記憶させておき、必要に応じて参照するのがよい。
上記検査の結果、処理対象の第1コード119のデータが画像処理用コードパターンに一致した場合(ST1902の判断が“Y”の場合)、サブルーチン管理回路171は、その第1コード119に基づいてシェーダを生成し(ST1903)、周辺機能部111内の映像処理モジュール(図示省略。例えば、GPU[Graphics Processing Unit])へ転送する(ST1904)。
一方、上記の検査の結果、処理対象の第1コード119のデータが画像処理用コードパターンに一致しなかった場合(ST1902の判断が“N”の場合)、プリコンパイル回路173は、その第1コード119についてプリコンパイルを実行する(ST1905)。このプリコンパイルの処理は、図13で説明した方法で行われる。
このように、画像処理用コードを映像処理モジュールで処理させることで、プロセッサ113の処理量を軽減することができる。
[ジャンプ先アドレス変換命令292(図2)の記述方法]
実施例では、JITコンパイラ159で第2コード121をネイティブコード131に変換する過程において、ジャンプ先アドレス変換命令292をコード内に記述していたが、これに限られず、以下の方法で記述することもできる。
(1)第1コード119の作成時(ソースコードの作成時など)に、プログラマによって、その第1コード119のコード本体290に記述する
(2)第1コード119の作成時に、ソースコードから第1コード119を生成するためのプログラム(コンパイラなど)を用いて、その第1コード119のコード本体290に記述する
(3)プリコンパイル回路173で第1コード119を第2コード121へ変換する過程において、サブルーチン管理手段による制御のもとで、そのコード内のコード本体290に相当する箇所に記述する
(4)コンテンツ転送処理(図7)の過程において、サブルーチン管理手段による制御のもとで、各サブルーチンの実行コード145のコード本体290に記述する。
[情報処理装置の例]
上記実施例では、本発明を携帯電話機に適用したが、本発明は、各種の情報処理装置に適用が可能である。特に、PCと比較して、CPUの処理速度、メモリの容量、及び画像表示能力など、実装可能な各種デバイスの能力が厳しく制限されるいわゆる組込み機器に適用すれば、本発明の効果が一層高まる。組込み機器の例としては、例えば、PDAや携帯ゲーム機等の携帯情報端末、携帯電話機、カーナビゲーション装置、家庭用電話機、家庭用ゲーム機、テレビ受像機、HDDレコーダ等の個人用機器、及びカラオケ機器、ロボット、鉄道等の輸送機器、ロケット、プラント制御装置等の業務用機器が挙げられる。これらのなかでも、携帯用に作られた組込み機器は、上記リソースの制限の問題が大きいため、本発明を適用するのが特に好ましい。
[キャッシュメモリを用いない構成]
実施例では、キャッシュメモリ177上にヘッダキャッシュ205を持ち、このキャッシュ上で各サブルーチンの実行コード145の優先度の検索等の処理を行ったが、キャッシュメモリ177を備えない構成も可能である。この場合、ヘッダキャッシュ205を用いて行う処理に替えて、メモリ117上の各サブルーチンの実行コード145のヘッダ部250のデータを用いて前述の各種の処理を行えばよい。具体的には、サブルーチン管理手段は、キャッシュメモリ177上のヘッダキャッシュ205に替えて、メモリ117上のヘッダ部250のデータに基づいて第1乃至第3の実行制御を行い、また、メモリ117上のヘッダ部250に対して記録制御を行うように構成すればよい。
[JITコンパイルの方法]
実施例では、仮想マシン129のJITコンパイラ159は、実行対象のサブルーチン(第2コード121)をネイティブコード131へ変換するだけであったが、次のような処理も可能である。すなわち、JITコンパイラ159は、実行対象のサブルーチンの実行過程で参照される他のサブルーチンがあるときは、その第1コード119、第2コード121、又はネイティブコード131を参照元のサブルーチンの第2コード121内にインライン展開し、これをネイティブコード131へ変換することができる。
[プリコンパイルの方法]
実施例では、プリコンパイルの方法として、サブルーチンの実行過程で参照される他のサブルーチンの第1コードを、参照元のサブルーチンの第1コード内にインライン展開する方法を示したが、この処理をさらに細かく制御することも可能である。例えば、第1コード119等の各サブルーチンの実行コード145のサイズを、サブルーチン管理表203若しくはヘッダキャッシュ205で管理することにより、又は第1コード119の所定の箇所(例えば、ヘッダ部250)に記述することにより、予め定めた閾値より容量の小さい第1コード119だけをインライン展開することも可能である。
[プロセッサ113との接続方法]
周辺機能部111とプロセッサ113間、サブルーチン管理回路171とプロセッサ113間など、各種のハードウェア105間を、バス103を介さずに直結することも可能である。特に、サブルーチン管理回路171内のヘッダキャッシュ205は、サブルーチンの呼び出しのたびにプロセッサ113によって参照されるため、サブルーチン管理回路171とプロセッサ113間を直結すれば、アクセス速度の向上及びバス103の負荷の低減を図ることができる。
[実行コード処理部123の構成]
実施例では、実行コード処理部123の構成として、サブルーチン管理回路171、プリコンパイル回路173、及びプリコンパイル制御回路175をそれぞれ別個に図示したが、これに限られない。これら三つの回路は、任意に組み合わせて1個の回路として又は2個の回路として構成することもできる。
[優先度]
優先度の変形例としては、以下の値を採用することができる。
(1)コンテンツ107の実行中に各サブルーチンの実行コード145が呼び出された際のメモリ117のスタックフレームの数を所定の値から減じた値
(2)各サブルーチンを共用しているコンテンツ107の数
(3)各サブルーチンの処理内容に応じて定められた値。
上記(1)の値を採用する場合、各サブルーチンに関する上記スタックフレームの数が、サブルーチン管理手段を構成するサブルーチン管理回路171によって、各サブルーチンの実行コード145のヘッダ部250又はヘッダキャッシュ205に書き込まれるように構成しておくのがよい。また、実施例における動作速度定義表301で定めた動作速度の値を基準にして、プリコンパイル回路173の動作速度が適切となるように、上記所定の値を調整するのがよい。或いは、これとは逆に、所定の値に基づいて算出される優先度を基準とし、動作速度定義表301における動作速度の値を調整してもよい。いずれの場合においても、プリコンパイル制御回路175は、各サブルーチンの実行コード145のヘッダ部250又はヘッダキャッシュ205に書き込まれている優先度を用いて、動作速度定義表301から動作速度を判断し、この動作速度でプリコンパイル回路173を動作させることができる。
この変形例においては、例えば、複数のサブルーチンが入れ子になっている場合、最後のほうで参照されるサブルーチンについては、そのスタックフレームが未処理の複数のサブルーチンのスタックフレーム上にプッシュされ(積み上げられ)るため、スタックフレームの数が大きくなり、これを所定の値から減じると、結果的に小さな値が得られる。これとは逆に、頻繁に参照され(早い段階で呼び出され)るサブルーチンについては、スタックフレームの数が小さくなり、これを所定の値から減じると、結果的に大きな値が得られる。従って、早くプリコンパイルすべきである頻繁に参照されるサブルーチンの優先度が高くなり、プリコンパイルを急ぐ必要のないあまり参照されないサブルーチンの優先度が低くなる。これにより、プリコンパイルの優先度の低いサブルーチンをプリコンパイルする際には、プリコンパイル回路175の動作速度を落とすことにより、消費電力を低く抑えることができる。
上記(2)の値を採用する場合、サブルーチンと複数のコンテンツ107との対応関係を表すサブルーチン共用表243(図2)を、メモリ117上に又はキャッシュメモリ177上に持たせておく。そして、サブルーチン管理回路171は、複数のコンテンツ107を同時に実行する場合において、いずれかのコンテンツ107の実行中にサブルーチンが呼び出されたが、処理待ちのサブルーチンの第1コード119があるときは、サブルーチン共用表243に基づいて、それらのサブルーチンのうち対応するコンテンツ107の数が多いサブルーチンから順に、プリコンパイル回路173がその第1コードから第2コードを生成するように制御を行うのがよい。
上記(3)の値を採用する場合、サブルーチンの第1コード119内の所定の箇所(コード本体290やヘッダ部250)に、当該サブルーチンが実行されることにより実現される処理の内容を表す属性を予め記載しておく。また、メモリ117に、その属性ごとに第1コード119から第2コード121を生成する優先順位を定めた属性管理表を記憶しておく。そして、コンテンツ107の実行中にサブルーチンが呼び出されたが、プリコンパイル待ち(処理状態フラグが“1”)のサブルーチンの第1コード119が存在するときは、サブルーチン管理回路171は、それらの第1コード119に記載された属性を用いて属性管理表から優先順位を特定し、その優先順位に従って第1コード119から第2コード121が生成されるように第3の実行制御を行うことができる。
なお、実施例において優先度を用いて説明したその他の処理についても、上記(1)〜(3)の値を用いて実行することができる。
[コンテンツの種類]
実施例では、実行するコンテンツとして、全体又はその一部にスクリプト又はJavaプログラムを含むプログラムを採用しているが、一部又は全体がスクリプトである任意のコンテンツを採用することができる。ここで、スクリプトは、JS(JavaScript)、PHP(Hypertext Preprocessor)、Perl(Practical Extraction and Report Language)、ActionScript、又はVBScript(Visual Basic Script)等のスクリプト言語で記述されたプログラムを示す。従って、その一部にスクリプトを含むHtmlファイルを扱うことも可能である。これらのプログラムを採用する場合、ソースコードを第1コードとして扱い、前述のように、例えば呼び出し先のサブルーチンの第1コードを、呼び出し元の第1コード内にインライン展開するなどの方法により、第2コードを生成することができる。また、各スクリプトを実行するためのコード実行部153をソフトウェアで構成するのがよい。この場合において、いわゆるサーバサイドスクリプトに該当するプログラムを採用する場合には、再生アプリ125に又はこれとは別にサーバサイドスクリプトをクライアント端末で実行するための機能を持たせればよい。代替手段としては、コード実行部153にWEBサーバの機能を持たせることにより対応可能である。
また、HTMLファイルを第1コード119として扱う場合には、サブルーチン管理回路171が特定のタグで囲まれた領域をサブルーチンとして識別できるように構成しておき、識別したサブルーチンごとにハッシュ値を計算しておく構成を採用することができる。これにより、例えば、携帯電話機101がコンテンツ107としてHTMLファイルをダウンロードする際に、そのハッシュ値に基づいて、変更された(重複しない)サブルーチンを特定し、その変更部分だけをダウンロードすることができる。この方法を採用することにより、差分データの取得処理を高速化することができる。なお、このような処理を利用する組み込みシステムとしては、例えば、予め決められたウェブサイトのデータを定期的に取得するように構成されたWeb巡回ロボットなどが考えられる。
[キャッシュ更新処理]
実施例では、ヘッダキャッシュ205内の先頭位置から順にエントリを参照し、キャッシュアウトカウント値が“0”又は最小のエントリを1つ検出し、メモリ117上にある対応するサブルーチンの実行コード145のヘッダ部250のデータと入れ替えていたが、次のようなアルゴリズムを採用することができる。すなわち、メモリ117へ書き戻す方法としては、ヘッダキャッシュ205内を検索し、キャッシュアウトカウントが“0”のエントリを全て書き戻す方法、起動してから一定時間実行されていないコンテンツに対応するエントリを優先的に書き戻す方法がある。ヘッダキャッシュ205へデータを格納する方法としては、各サブルーチンから参照される別のサブルーチンを特定する呼び出し関係表を作成しておき、この表に基づいて、呼び出されたサブルーチンとそのサブルーチンから参照される別のサブルーチンの各エントリを格納する方法がある。
[サブルーチン定義値]
実施例では、第1コード生成時にコンパイラを用いてサブルーチン定義値を第1コード内に埋め込む方法を提示したが、これに限られない。例えば、プログラマ自身がソースコードにサブルーチン定義値を書き込んでもよい。或いは、或るサブルーチンの第1コードから呼び出される別のサブルーチンの数や頻度及び別のサブルーチンからこのサブルーチンが呼び出される回数や頻度を判断してサブルーチン定義値を付与するプログラムを用意し、これを用いてサブルーチン定義値をサブルーチンの第1コード内に書き込んでもよい。そのプログラムは、サブルーチンの第1コードを第2コードへ変換するのに要する時間に基づいてサブルーチンを定義値を付与するものであってもよい。
[プリコンパイルの順序]
実施例では、プリコンパイル対象の第1コード119が複数存在する場合、すなわちコードタイプが“0”で、処理状態フラグが“1”のサブルーチンのエントリが処理待ちの状態で複数存在する場合、優先度の高いサブルーチンから順に第1コード119をプリコンパイルしたが、これに限られない。プリコンパイルは、例えば、以下のいずれかの方法で行うことが可能である。
(1)コンテンツ107の実行中にサブルーチンが呼び出されたが、それより前に呼び出されたサブルーチンの第1コード119が第2コード121へ変換されておらず、処理待ち状態になっているときは、プリコンパイル回路173は、それらのサブルーチンのうち最後に呼び出されたサブルーチンの第1コード119から順に第2コード121へ変換することができる。
(2)携帯電話機101のハードウェア105として、コンテンツ107に対応する表示物を表示するディスプレイを備えておく。そして、コンテンツ107の実行中にサブルーチンが呼び出されたが、それより前に呼び出されたサブルーチンの第1コード119から第2コード121が生成されておらず、処理待ち状態になっているときは、サブルーチン管理回路171は、上記ディスプレイ上で、中央の表示物、最前面の表示物、又は最も大きい表示物に対応するコンテンツに含まれるサブルーチンの第1コード119から優先的に第2コード121が生成されるように第3の実行制御を行うことができる。
(3)携帯電話機101のハードウェア105として、ディスプレイ上に表示される矢印等の指示部を移動させ、及び表示物を指示部によって選択するための操作部をさらに備えておく。そして、コンテンツ107の実行中にサブルーチンが呼び出されたが、プリコンパイル待ちのサブルーチンが存在するときは、サブルーチン管理回路171は、ディスプレイ上で、指示部と重っている表示物又は指示部によって選択された表示物に対応するコンテンツ107に含まれるサブルーチンの第1コード119から優先的に第2コード121が生成されるように第3の実行制御を行うことができる。
本発明を適用した携帯電話機の基本構成を示す図。 コンテンツの実行時におけるメモリ及び不揮発性記録媒体の構成、各サブルーチンの実行コードの構成、並びに特殊アドレスの構成を示す図。 コードタイプ、処理条件、処理状態フラグ、及び実行中フラグを表すIDとそれぞれの意味を示す表。 メモリに格納されるコンテンツ管理表及びサブルーチン管理表と、キャッシュメモリに格納されるヘッダキャッシュの構成を示す。 プリコンパイル回路の動作速度を定める動作速度定義表。 携帯電話機が起動してから停止するまでの間における、プロセッサ及びサブルーチン管理回路の処理のフローチャート。 サブルーチン管理プログラムを実行するプロセッサの制御のもとでサブルーチン管理回路が行うコンテンツ転送処理のフローチャート。 メモリ上に格納されるサブルーチンの実行コードごとのアドレスを管理するアドレス管理テーブルの構成を示す図。 サブルーチン管理プログラムを実行するプロセッサの制御のもとでサブルーチン管理回路が行うコンテンツ実行支援処理のフローチャート。 サブルーチン管理プログラムを実行するプロセッサの制御のもとでサブルーチン管理回路により行われるヘッダキャッシュの更新処理のフローチャート。 サブルーチン管理プログラムを実行するプロセッサの制御のもとでサブルーチン管理回路により行われる処理内容選択処理のフローチャート。 プリコンパイル時における実行コード処理部の動作のフローチャート。 プリコンパイルの開始から終了までの間におけるプリコンパイル回路による処理のフローチャート。 プリコンパイル制御回路によるプリコンパイル回路の動作速度制御処理のフローチャート。 仮想マシンのインタプリタによるサブルーチンの第1コードのインタプリタ実行処理のフローチャート。 サブルーチンの第2コードをネイティブコードへ変換する際の、プロセッサ及びサブルーチン管理回路による処理のフローチャート。 サブルーチン管理回路によるコンテンツ終了処理のフローチャート。 携帯電話機及びコンテンツ配信サーバのそれぞれの構成及び連携方法を示す図。 携帯電話機のサブルーチン管理回路によるコンテンツ登録処理のフローチャート。 実行対象のコンテンツに画像処理プログラムが含まれる場合における、実行コード処理部による処理のフローチャート。
符号の説明
101…携帯電話機
103…バス
105…ハードウェア
107,1303…コンテンツ
109…ソフトウェア
111…周辺機能部
113…プロセッサ
115…不揮発性記録媒体
117…メモリ
119,1313…第1コード
121…第2コード
123…実行コード処理部
125…再生アプリ
127…OS、129…仮想マシン
131…ネイティブコード
133…サブルーチン管理プログラム
135…プリコンパイル制御プログラム
153…仮想マシン
159…JITコンパイラ
171…サブルーチン管理回路
173…プリコンパイル回路
177…連想メモリ
201…コンテンツ管理表
203…サブルーチン管理表
205…ヘッダキャッシュ
237…ハッシュ値管理表
239…第1コードサイズ管理表
241…ダウンロード元管理表
243…サブルーチン共用表
301…動作速度定義表
1301…コンテンツ配信サーバ
1305…クライアントサブルーチンリスト
1307…サーバサブルーチンリスト

Claims (19)

  1. コンテンツに含まれる複数のサブルーチンごとに、プロセッサで実行可能なネイティブコード、前記ネイティブコードの元となるOSに依存しない第1コード、及び前記第1コードを前記ネイティブコードへ変換する過程で生成される第2コードのうち、少なくともいずれか1種類のコードを記憶するメモリであって、前記コードは、該当する種類を表すコードタイプが記述されたコード情報格納部を有するとともに、他のサブルーチンへのジャンプ先アドレスとして特殊アドレスが記述されており、前記特殊アドレスは、特殊アドレス識別子と前記他のサブルーチンの先頭アドレスを含む、メモリと、
    前記第1コードをインタプリタ方式で実行するインタプリタ機能、及び前記第2コードをネイティブコードへ変換してから実行するJITコンパイル機能を備えた仮想マシンと、
    前記ネイティブコードを実行するプロセッサと、
    前記第1コードから前記第2コードを生成するプリコンパイル回路と、
    前記コンテンツの実行中に前記プロセッサがアクセスしたアドレスに前記特殊アドレス識別子が含まれている場合に前記特殊アドレスであると判断し、前記メモリ上に当該他のサブルーチンのコードとして、ネイティブコードが記憶されていれば、該ネイティブコードが前記プロセッサで実行されるように第1の実行制御を行い、ネイティブコードが記憶されておらず第2コードが記憶されていれば、該第2コードが前記仮想マシンのJITコンパイル機能で実行され、生成されたネイティブコードが前記メモリに格納されるように第2の実行制御を行い、第1コードだけが記憶されていれば、該第1コードが前記仮想マシンのインタプリタ機能で実行されるとともに、前記プリコンパイル回路で第2コードに変換され、該第2コードが前記メモリに格納されるように第3の実行制御を行うサブルーチン管理手段とを備え、
    前記サブルーチン管理手段は、前記コード情報格納部に記述されているコードタイプを利用して前記第1乃至第3の実行制御を切り替える情報処理装置。
  2. 前記サブルーチン管理手段は、前記第1又は第2の実行制御によりサブルーチンのコードが変換されたときは、該コードのコード情報格納部に変換後のコードの先頭アドレスが記述されるように記録制御を行い、前記コンテンツの実行中に前記プロセッサがアクセスしたアドレスに前記特殊アドレス識別子が含まれている場合に前記特殊アドレスであると判断し、当該他のサブルーチンのコードのコード情報格納部を検査し、第1コードを表すコードタイプが記述されており、且つ第2コードの先頭アドレスが記述されていないときは、前記第3の実行制御を行い、第1コードを表すコードタイプが記述されており、且つ第2コードの先頭アドレスが記述されており、且つ該先頭アドレスで特定される第2コードのコード情報格納部にネイティブコードの先頭アドレスが記述されていないときは、前記第2の実行制御を行い、第1コードを表すコードタイプが記述されており、且つ第2コードの先頭アドレスが記述されており、且つ該先頭アドレスで特定される第2コードのコード情報格納部にネイティブコードの先頭アドレスが記述されているときは、前記第1の実行制御を行う情報処理装置。
  3. 前記サブルーチン管理手段は、前記第3の実行制御を行う際、前記サブルーチンごとに定められる前記第1コードを前記第2コードへ変換する優先度に基づいて、前記プリコンパイル回路を制御する請求項1又は2に記載の情報処理装置。
  4. 前記メモリは、前記優先度に応じて、前記プリコンパイル回路の動作速度を定めた動作速度定義表を記憶し、
    さらに、前記プリコンパイル回路で処理される第1コードに対応するサブルーチンの優先度を用いて、前記動作速度定義表から動作速度を判断し、該動作速度に従って前記プリコンパイル回路が動作するように制御を行うプリコンパイル制御手段を備えた
    請求項3に記載の情報処理装置。
  5. 前記優先度は、前記コンテンツの実行中に呼び出されたサブルーチンごとの回数であり、又は前記コンテンツの実行中に各サブルーチンが呼び出された際のスタックフレームの数を所定の値から減じた値である請求項3又は4に記載の情報処理装置。
  6. 前記優先度は、前記コンテンツに含まれる各サブルーチンの第1コードを第2コードへ変換するのに要する時間に基づいて、又は前記コンテンツの実行中に各サブルーチンが呼び出される頻度に基づいて、各サブルーチンの第1コード内に予め記述された値である請求項3又は4に記載の情報処理装置。
  7. 前記プリコンパイル制御手段は、前記プリコンパイル回路の動作速度を下げたとき、該プリコンパイル回路への供給電圧を、その動作を維持できる電圧値の範囲内で下げる請求項4乃至6のいずれかに記載の情報処理装置。
  8. 前記プリコンパイル制御手段は、バス内のデータ伝送量又はプロセッサによる前記メモリへのアクセス頻度を監視し、前記データ伝送量又は前記アクセス頻度が所定の基準を超えている間、前記プリコンパイル回路の動作を停止する請求項4乃至7のいずれかに記載の情報処理装置。
  9. 前記サブルーチン管理手段は、前記第3の実行制御によりサブルーチンの第1コードが第2コードに変換されたとき、該第2コードのコード情報格納部に変換元となる第1コードの先頭アドレスが記述されるように前記記録制御を行い、前記第2の実行制御の対象となる第2コードの変換元の第1コードのサイズが所定の値より大きいときは、その第2コードが前記仮想マシンのJITコンパイル機能でネイティブコードに変換されて前記メモリに格納されるとともに、その第2コードのコード情報格納部に記述されている変換元の第1コードの先頭アドレスに基づいて、該第1コードが別スレッドで前記インタプリタ機能によって実行されるように前記第2の実行制御を行う請求項1乃至8のいずれかに記載の情報処理装置。
  10. さらに、前記コード情報格納部の内容を記憶するキャッシュメモリを備え、
    前記サブルーチン管理手段は、前記コード情報格納部に替えて、前記キャッシュメモリに記憶されている情報に基づいて前記第1乃至第3の実行制御を行うとともに、前記キャッシュメモリに対して前記記録制御を行う請求項1乃至9のいずれかに記載の情報処理装置。
  11. 前記サブルーチン管理手段は、前記記録制御として、前記優先度が前記キャッシュメモリに記憶されるように制御を行い、
    前記プリコンパイル制御手段は、前記キャッシュメモリに記憶されている優先度を用いて、前記動作速度定義表から動作速度を判断する
    請求項10に記載の情報処理装置。
  12. 前記第1コードは、スタックマシン用のコードであり、
    前記第2コードは、前記第1コードから生成されるレジスタマシン用のコードを含む
    請求項1乃至11のいずれかに記載の情報処理装置。
  13. 前記第2コードは、前記サブルーチンの実行過程で呼び出される他のサブルーチンの第1コードを、呼び出し元のサブルーチンの第1コード内にインライン展開して成るコードを含む請求項1乃至12のいずれかに記載の情報処理装置。
  14. 前記サブルーチン管理手段は、前記コンテンツの実行中にサブルーチンのネイティブコードが呼び出された場合、その呼び出し元のサブルーチンのコードに記述されているジャンプ先アドレスを表す特殊アドレスを、該ネイティブコードの先頭アドレスに置き換える請求項1乃至13のいずれかに記載の情報処理装置。
  15. 前記JITコンパイル機能は、前記第2コードの実行過程で呼び出される他のサブルーチンの第1コード、第2コード、又はネイティブコードを、呼び出し元の第2コード内にインライン展開し、これをネイティブコードへ変換する請求項1乃至14のいずれかに記載の情報処理装置。
  16. 前記メモリは、前記サブルーチンごとに複数のコンテンツとの対応関係を表すサブルーチン共用表を記憶し、
    前記サブルーチン管理手段は、前記優先度に替えて、前記サブルーチン共用表に基づいて、対応するコンテンツの数が多いサブルーチンから順に、その第1コードが第2コードに変換されるように前記第3の実行制御を行う
    請求項3乃至15のいずれかに記載の情報処理装置。
  17. 前記サブルーチン管理手段は、前記優先度に替えて、前記コンテンツの実行中に呼び出されたサブルーチンのうち最後に呼び出されたサブルーチンから順に、その第1コードが第2コードに変換されるように前記第3の実行制御を行う請求項3乃至15のいずれかに記載の情報処理装置。
  18. 前記コンテンツに対応する表示物を表示するディスプレイを備え、
    前記サブルーチン管理手段は、前記優先度に替えて、前記ディスプレイ上で、中央の表示物、最前面の表示物、又は最も大きい表示物に対応するコンテンツに含まれるサブルーチンの第1コードから優先的に第2コードが生成されるように前記第3の実行制御を行う
    請求項3乃至15のいずれかに記載の情報処理装置。
  19. 前記ディスプレイ上に表示される矢印等の指示部を移動させ、及び前記表示物を前記指示部によって選択するための操作部をさらに備え、
    前記サブルーチン管理手段は、前記ディスプレイ上で、前記指示部と重っている表示物又は前記指示部によって選択された表示物に対応するコンテンツに含まれるサブルーチンの第1コードから優先的に第2コードが生成されるように前記第3の実行制御を行う
    請求項18に記載の情報処理装置。
JP2008051265A 2008-02-29 2008-02-29 情報処理装置 Pending JP2009211187A (ja)

Priority Applications (1)

Application Number Priority Date Filing Date Title
JP2008051265A JP2009211187A (ja) 2008-02-29 2008-02-29 情報処理装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2008051265A JP2009211187A (ja) 2008-02-29 2008-02-29 情報処理装置

Publications (1)

Publication Number Publication Date
JP2009211187A true JP2009211187A (ja) 2009-09-17

Family

ID=41184305

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2008051265A Pending JP2009211187A (ja) 2008-02-29 2008-02-29 情報処理装置

Country Status (1)

Country Link
JP (1) JP2009211187A (ja)

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2012011228A1 (ja) * 2010-07-23 2012-01-26 パナソニック株式会社 アニメーション描画装置、アニメーション描画プログラム、及びアニメーション描画方法
KR101116939B1 (ko) * 2009-12-10 2012-03-14 주식회사 엘지유플러스 이동 단말기 및 상기 이동 단말기에서 웹 애플리케이션 실행 방법
KR101393152B1 (ko) 2013-01-11 2014-05-08 숭실대학교산학협력단 자바 가상 머신이 탑재된 장치 및 상기 자바 가상 머신이 탑재된 장치에서 바이트코드를 네이티브 코드로 선택적으로 컴파일하는 방법
JP2018503157A (ja) * 2014-11-28 2018-02-01 トムソン ライセンシングThomson Licensing アプリケーション整合性の検証を提供する方法及びデバイス
JP2018503153A (ja) * 2014-11-28 2018-02-01 トムソン ライセンシングThomson Licensing アプリケーションのインテグリティを確かめることを提供する方法及びデバイス

Cited By (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101116939B1 (ko) * 2009-12-10 2012-03-14 주식회사 엘지유플러스 이동 단말기 및 상기 이동 단말기에서 웹 애플리케이션 실행 방법
WO2012011228A1 (ja) * 2010-07-23 2012-01-26 パナソニック株式会社 アニメーション描画装置、アニメーション描画プログラム、及びアニメーション描画方法
US8963929B2 (en) 2010-07-23 2015-02-24 Panasonic Intellectual Property Corporation Of America Animation drawing device, computer-readable recording medium, and animation drawing method
JP5715133B2 (ja) * 2010-07-23 2015-05-07 パナソニック インテレクチュアル プロパティ コーポレーション オブアメリカPanasonic Intellectual Property Corporation of America アニメーション描画装置、アニメーション描画プログラム、及びアニメーション描画方法
KR101393152B1 (ko) 2013-01-11 2014-05-08 숭실대학교산학협력단 자바 가상 머신이 탑재된 장치 및 상기 자바 가상 머신이 탑재된 장치에서 바이트코드를 네이티브 코드로 선택적으로 컴파일하는 방법
JP2018503157A (ja) * 2014-11-28 2018-02-01 トムソン ライセンシングThomson Licensing アプリケーション整合性の検証を提供する方法及びデバイス
JP2018503153A (ja) * 2014-11-28 2018-02-01 トムソン ライセンシングThomson Licensing アプリケーションのインテグリティを確かめることを提供する方法及びデバイス

Similar Documents

Publication Publication Date Title
JP2009211190A (ja) 情報処理装置
US9942307B2 (en) Web application script migration
JP5295379B2 (ja) 組み込みプラットフォームにおけるプログラムの動的リンキング方法および組み込みプラットフォーム
CN104781785B (zh) 为应用从中间语言代码生成本机代码
US20130219383A1 (en) Using an Application Cache to Update Resources of Installed Applications
US8887127B2 (en) Web browsing apparatus and method through storing and optimizing JAVASCRIPT® code
JP4376181B2 (ja) プログラム実行処理端末装置
CN105975311B (zh) 一种应用启动方法及装置
CN102279765A (zh) 预编译托存托管代码
US20140365861A1 (en) Prefetching binary data for use by a browser plugin
JP2003157170A (ja) プログラムバイナリをデコードおよび実行する方法
CN102368249B (zh) 一种ie内核浏览器的页面下载控制方法和系统
JP2009211187A (ja) 情報処理装置
KR101453743B1 (ko) 웹 어플리케이션을 위한 사전 캐싱 방법 및 이를 적용한 단말 장치
CN103443763A (zh) 包含对重写虚拟函数的调用的支持的isa桥接
KR100452343B1 (ko) 기계어 코드 실행영역을 포함하는 이동통신 단말기용 파일을 기록하는 저장매체 및 그를 이용한 파일 실행방법
CN116643778B (zh) 一种应用程序优化方法及电子设备
JP5437322B2 (ja) データ言語中の複数の言語の管理
KR101208749B1 (ko) 애플리케이션의 효율적인 압축
WO2022078057A1 (zh) 应用包发布方法、应用方法、装置、介质、服务器及设备
US20170371595A1 (en) Preemptive decompression scheduling for a nand storage device
JPWO2014024255A1 (ja) 端末および動画再生プログラム
JP2009093212A (ja) Webブラウザを用いたコンテンツの再生を制御するプログラム、方法、及びWebサーバ
KR20090121949A (ko) 모바일 콘텐츠 변환 방법 및 시스템
CN112612531A (zh) 应用程序启动方法、装置、电子设备及存储介质