(57)【要約】【課題】不変オブジェクトに対する書き込みの発生を検出しない非検出書込処理により管理情報をアクセスしてオブジェクトを管理する。【解決手段】対象プログラムを実行させるための装置であって、オブジェクトの値およびオブジェクトの管理情報を対応付けて記憶する記憶部と、対象プログラムから、オブジェクトの値が不変であることを条件として最適化した最適化コードと、オブジェクトの値が変更された場合に実行される非最適化コードとを生成するコード生成部と、対象プログラムを最適化コードにより実行させている場合において、オブジェクトに対する値の書き込みが発生したことに応じて、対象プログラムの実行を、最適化コードによる実行から非最適化コードによる実行に切り替える切替部と、オブジェクトに対する書き込みの発生を検出しない非検出書込処理により管理情報をアクセスしてオブジェクトを管理する管理部と、を備える装置を提供する。【選択図】図１
2011013985.tif 000002
【特許請求の範囲】
【請求項１】
コンピュータにより対象プログラムを実行させるためのプログラムであって、
当該プログラムは、前記コンピュータを、
オブジェクトの値およびオブジェクトの管理情報を対応付けて記憶する記憶部と、
前記対象プログラムから、前記オブジェクトの値が不変であることを条件として最適化した最適化コードと、前記オブジェクトの値が変更された場合に実行される非最適化コードとを生成するコード生成部と、
前記対象プログラムを前記最適化コードにより実行させている場合において、前記オブジェクトに対する値の書き込みが発生したことに応じて、前記対象プログラムの実行を、前記最適化コードによる実行から前記非最適化コードによる実行に切り替える切替部と、
前記オブジェクトに対する書き込みの発生を検出しない非検出書込処理により前記管理情報をアクセスして前記オブジェクトを管理する管理部と、
して機能させるプログラム。
【請求項２】
前記切替部は、前記対象プログラムを前記非最適化コードによる実行から前記最適化コードによる実行に切り替える場合に、前記オブジェクトの値に対する書き込みの発生を検出可能に設定する請求項１に記載のプログラム。
【請求項３】
前記切替部は、前記対象プログラムを前記最適化コードにより実行させる場合に、前記オブジェクトを、前記記憶部内において、特権書込命令による書き込みの発生を検出せず、非特権書込命令による書き込みの発生を検出する非特権書込禁止領域に配置し、
前記コード生成部は、前記対象プログラムによる前記オブジェクトの値への書き込みを前記非特権書込命令に変換し、
前記管理部は、前記オブジェクトの管理情報に対する書き込みを前記特権書込命令により処理する
請求項１または２に記載のプログラム。
【請求項４】
前記切替部は、前記対象プログラムを前記非最適化コードにより実行させる場合に、前記オブジェクトを、前記記憶部内において、前記特権書込命令および前記非特権書込命令による書込の発生を検出しない書込許可領域に配置する請求項３に記載のプログラム。
【請求項５】
前記記憶部は、前記オブジェクトの管理情報の少なくとも一部として、前記対象プログラムから前記オブジェクトの値への書き込みが制限されているか否かを示す書込制限情報を記憶し、
前記管理部は、前記対象プログラムから前記オブジェクトの値への書き込みが制限されている旨の前記書込制限情報が記憶されている場合に前記対象プログラムを前記最適化コードにより実行させ、前記対象プログラムから前記オブジェクトの値への書き込みが制限されていない旨の前記書込制限情報が記憶されている場合に前記対象プログラムを前記非最適化コードにより実行させ、
前記切替部は、前記対象プログラムを前記非最適化コードにより実行させる場合に前記対象プログラムから前記オブジェクトの値への書き込みが制限されていない旨の前記書込制限情報を前記オブジェクトの管理情報内に書き込み、前記対象プログラムを前記最適化コードにより実行させる場合に前記対象プログラムから前記オブジェクトの値への書き込みが制限されている旨の前記書込制限情報を前記オブジェクトの管理情報内に書き込む、
請求項４に記載のプログラム。
【請求項６】
前記記憶部は、前記オブジェクトの管理情報の一部として、前記オブジェクトを最適化対象とするか否かを示す最適化情報を記憶し、
前記コード生成部は、前記オブジェクトの値が不変であることを条件として最適化する場合に、前記オブジェクトを最適化対象とする旨を示す最適化情報を前記オブジェクトに対して設定し、
前記切替部は、前記オブジェクトに対応付けて前記オブジェクトを最適化対象とする旨を示す前記最適化情報が記憶されている場合に、前記対象プログラムを前記最適化コードによる実行に切り替える
請求項５に記載のプログラム。
【請求項７】
前記切替部は、前記記憶部に記憶された複数の前記オブジェクトのそれぞれを検査して前記対象プログラムにより使用されていない前記オブジェクトを前記記憶部内から解放するガベージ・コレクション中において、検査対象である前記書込許可領域の前記オブジェクトに対応付けて前記オブジェクトを最適化する旨を示す前記最適化情報が記憶されている場合に、前記オブジェクトを前記非特権書込禁止領域に移動させる請求項６に記載のプログラム。
【請求項８】
前記切替部は、前記非特権書込禁止領域に配置した前記オブジェクトに対する書き込みが発生したことに応じて、当該オブジェクトに対して、前記オブジェクトの値への書き込みが制限されていない旨を示す前記書込制限情報および当該オブジェクトを最適化対象としない旨を示す前記最適化情報を設定する請求項７に記載のプログラム。
【請求項９】
前記切替部は、前記ガベージ・コレクション中において、検査対象である前記非特権書込禁止領域の前記オブジェクトに対応付けて、前記オブジェクトを最適化しない旨を示す前記最適化情報が記憶されている場合に、前記オブジェクトを前記書込許可領域に移動させる請求項８に記載のプログラム。
【請求項１０】
前記切替部は、前記対象プログラムを前記最適化コードにより実行させる場合に、前記オブジェクトを、仮想メモリ空間上における書き込みを禁止する書込禁止仮想領域および書き込みを許可する書込許可仮想領域の両方にマッピングされた物理メモリ領域に配置し、
前記コード生成部は、前記対象プログラムによる前記オブジェクトの値への書き込みを前記書込禁止仮想領域を介して処理させるコードを生成し、
前記管理部は、前記オブジェクトの管理情報への書き込みを前記書込許可仮想領域を介して処理する
請求項１または２に記載のプログラム。
【請求項１１】
前記切替部は、前記対象プログラムを前記非最適化コードにより実行させる場合に、前記オブジェクトを、前記記憶部内において、前記書込許可仮想領域にマッピングされた物理メモリ領域に移動させる請求項１０に記載のプログラム。
【請求項１２】
前記切替部は、最適化対象となる複数の前記オブジェクトのそれぞれが記憶される前記書込禁止仮想領域内のアドレス位置および前記書込許可仮想領域内のアドレス位置を、前記仮想メモリ空間上において予め設定されたオフセット分ずらして配置し、
前記管理部は、前記オブジェクトの前記書込禁止仮想領域内のアドレス位置および前記オフセットから前記書込許可仮想領域内のアドレス位置を算出して、算出したアドレス位置を用いて前記オブジェクトの管理情報を書き込む
請求項１０または１１に記載のプログラム。
【請求項１３】
前記書込禁止仮想領域を介した前記オブジェクトに対する書き込みが検出されたことに応じて、当該書き込みを前記書込許可仮想領域を介して実行する書込処理部を更に備え、
前記管理部は、前記オブジェクトの管理情報への書込頻度が予め設定された基準頻度未満の場合に前記書込禁止仮想領域を介して前記オブジェクトの管理情報へ書き込み、前記書込頻度が前記基準頻度以上の場合においては前記オブジェクトが前記書込禁止仮想領域および前記書込許可仮想領域にマッピングされた物理メモリ領域に配置されていることを条件として前記書込許可仮想領域を介して前記オブジェクトの管理情報へ書き込む
請求項１２に記載のプログラム。
【請求項１４】
対象プログラムを実行させるための装置であって、
オブジェクトの値およびオブジェクトの管理情報を対応付けて記憶する記憶部と、
前記対象プログラムから、前記オブジェクトの値が不変であることを条件として最適化した最適化コードと、前記オブジェクトの値が変更された場合に実行される非最適化コードとを生成するコード生成部と、
前記対象プログラムを前記最適化コードにより実行させている場合において、前記オブジェクトに対する値の書き込みが発生したことに応じて、前記対象プログラムの実行を、前記最適化コードによる実行から前記非最適化コードによる実行に切り替える切替部と、
前記オブジェクトに対する書き込みの発生を検出しない非検出書込処理により前記管理情報をアクセスして前記オブジェクトを管理する管理部と、
を備える装置。
【請求項１５】
対象プログラムを実行させるための方法であって、
オブジェクトの値およびオブジェクトの管理情報を対応付けて記憶部によって記憶する段階と、
前記対象プログラムから、前記オブジェクトの値が不変であることを条件として最適化した最適化コードと、前記オブジェクトの値が変更された場合に実行される非最適化コードとを、コード生成部によって生成する段階と、
前記対象プログラムを前記最適化コードにより実行させている場合において、前記オブジェクトに対する値の書き込みが発生したことに応じて、前記対象プログラムの実行を、前記最適化コードによる実行から前記非最適化コードによる実行に切替部によって切り替える段階と、
前記オブジェクトに対する書き込みの発生を検出しない非検出書込処理により前記管理情報をアクセスして前記オブジェクトを管理部によって管理する段階と、
を備える方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、プログラム、装置、および方法に関する。
【背景技術】
【０００２】
オブジェクト指向言語の１つであるＪａｖａ（登録商標）においては、ＪＶＭ（Ｊａｖａ（登録商標）  Ｖｉｒｔｕａｌ  Ｍａｃｈｉｎｅ）は、中間言語で記述されたＪａｖａ（登録商標）プログラムであるバイト・コードを、インタープリタによって実行することに代えて、プロセッサが直接実行できるネイティブ・コードにコンパイルして、より高速に実行させる。
【先行技術文献】
【特許文献】
【０００３】
【特許文献１】米国特許出願公開第２００６／０１５５７９１号公報
【非特許文献】
【０００４】
【非特許文献１】Ａｊｅｅｔ  Ｓｈａｎｋａｒ  ｅｔ  ａｌ．，  Ｒｕｎｔｉｍｅ  Ｓｐｅｃｉａｌｉｚａｔｉｏｎ  Ｗｉｔｈ  Ｏｐｔｉｍｉｓｔｉｃ  Ｈｅａｐ  Ａｎａｌｙｓｉｓ，  ＯＯＰＳＬＡ'０５，  Ｏｃｔｏｂｅｒ  １６−２０，  ２００５，  Ｓａｎ  Ｄｉｅｇｏ，  Ｃａｌｉｆｏｒｎｉａ，  ＵＳＡ．
【発明の概要】
【発明が解決しようとする課題】
【０００５】
ＪＶＭがバイト・コードをコンパイルする場合、当該バイト・コードがアクセスするオブジェクトの値が一定期間不変であると仮定することにより最適化が可能な場合がある。そこで、ＪＶＭは当該最適化を行うとともに、当該オブジェクトへの書き込みを検出したら当該最適化を無効とする。その場合、ソフトウェアによる書き込みの検出は、検出の処理コストが高い。また、ページ保護機構を使った書き込みの検出は、領域の属性を書込可能にして再び元に戻す属性変更コストと、そのためのスレッド停止のコストが問題となる。
【課題を解決するための手段】
【０００６】
上記課題を解決するために、本発明の第１の態様においては、コンピュータにより対象プログラムを実行させるためのプログラムであって、当該プログラムは、コンピュータを、オブジェクトの値およびオブジェクトの管理情報を対応付けて記憶する記憶部と、対象プログラムから、オブジェクトの値が不変であることを条件として最適化した最適化コードと、オブジェクトの値が変更された場合に実行される非最適化コードとを生成するコード生成部と、対象プログラムを最適化コードにより実行させている場合において、オブジェクトに対する値の書き込みが発生したことに応じて、対象プログラムの実行を、最適化コードによる実行から非最適化コードによる実行に切り替える切替部と、オブジェクトに対する書き込みの発生を検出しない非検出書込処理により管理情報をアクセスしてオブジェクトを管理する管理部として機能させるプログラムを提供する。
【０００７】
なお、上記の発明の概要は、本発明の必要な特徴の全てを列挙したものではない。また、これらの特徴群のサブコンビネーションもまた、発明となりうる。
【図面の簡単な説明】
【０００８】
【図１】図１は、本実施形態に係る装置１００の構成の一例を示す。
【図２】図２は、本実施形態に係る記憶部１２０の構成の一例を示す。
【図３Ａ】図３Ａは、本実施形態において、コード生成部１３０が最適化コードを生成する対象であるＪａｖａ（登録商標）プログラムの一例を示す。
【図３Ｂ】図３Ｂは、本実施形態において、コード生成部１３０が生成する最適化コードで使用される命令の擬似コードの一例を示す。
【図３Ｃ】図３Ｃは、本実施形態において、図３ＡのＪａｖａ（登録商標）プログラムに対してコード生成部１３０が生成する最適化コードの擬似コードの一例である。
【図４Ａ】図４Ａは、本実施形態において、コード生成部１３０が最適化コードを生成する対象であるＪａｖａ（登録商標）プログラムの他の一例を示す。
【図４Ｂ】図４Ｂは、本実施形態において、図４ＡのＪａｖａ（登録商標）プログラムに対してコード生成部１３０が生成する最適化コードの擬似コードの一例である。
【図５Ａ】図５Ａは、本発明の第１の実施形態に係る、コード生成部１３０の処理フローの一例を示す。
【図５Ｂ】図５Ｂは、本発明の第１の実施形態に係る、切替部１５０の処理フローの一例を示す。
【図５Ｃ】図５Ｃは、本発明の第１の実施形態に係る、切替部１５０および書込検出部１６０の処理フローの一例を示す。
【図６】図６は、本発明の第２の実施形態に係る記憶部１２０の一例を示す。
【図７Ａ】図７Ａは、本発明の第２の実施形態に係る、コード生成部１３０の処理フローの一例を示す。
【図７Ｂ】図７Ｂは、本発明の第１の実施形態に係る、切替部１５０の処理フローの一例を示す。
【図７Ｃ】図７Ｃは、本発明の第２の実施形態に係る、切替部１５０および書込検出部１６０の処理フローの一例を示す。
【図８Ａ】図８Ａは、本実施形態に係る、ステップＳ７２０の後の記憶部１２０の一例を示す。
【図８Ｂ】図８Ｂは、本実施形態に係る、ステップＳ７２２の後の記憶部１２０の一例を示す。
【図９】図９は、本実施形態に係るコンピュータ１９００のハードウェア構成の一例を示す。
【発明を実施するための形態】
【０００９】
以下、発明の実施の形態を通じて本発明を説明するが、以下の実施形態は特許請求の範囲にかかる発明を限定するものではない。また、実施形態の中で説明されている特徴の組み合わせの全てが発明の解決手段に必須であるとは限らない。
【００１０】
図１は、本実施形態に係る装置１００の構成の一例を示す。装置１００は、コード格納部１１０、記憶部１２０、コード生成部１３０、コード実行部１４０、切替部１５０、書込検出部１６０、管理部１７０、および書込処理部１８０を備える。コード格納部１１０は、装置１００が実行するプログラム・コードを格納する。コード格納部１１０は、コンピュータが備えるハードディスク・ドライブ等の不揮発性格納装置であってもよい。コード格納部１１０は、プログラム・コードとして、Ｊａｖａ（登録商標）言語のバイト・コードのような中間コードを格納してもよい。
【００１１】
記憶部１２０は、オブジェクトの値およびオブジェクトの管理情報を対応付けて記憶する。ここで、記憶部１２０は、コンピュータが備えるメモリであってもよい。また、記憶部１２０は、オブジェクトとして、Ｊａｖａ（登録商標）言語のクラス・インスタンスのメモリ・イメージを記憶してもよい。記憶部１２０は、オブジェクトの管理情報を、オブジェクト・データの近傍（例えば直前、同一ページ）に配置されるオブジェクト・ヘッダに格納してもよい。
【００１２】
コード生成部１３０は、対象プログラムから、オブジェクトの値が不変であることを条件として最適化した最適化コードと、オブジェクトの値が変更された場合に実行される非最適化コードとを生成する。コード生成部１３０は、ＪＶＭによって実現されてもよい。コード生成部１３０は、対象プログラムの実行時に、当該対象プログラムの実行プロファイルに基づいて、当該オブジェクトに対応するクラスの中間コードである対象プログラムから最適化コードおよび／または非最適化コードを生成してもよい。
【００１３】
コード実行部１４０は、対象プログラムを実行する。コード実行部１４０は、ＪＶＭによって実現されてもよい。コード実行部１４０は、コード生成部１３０によって生成された最適化コードまたは非最適化コードを実行してもよい。
【００１４】
切替部１５０は、対象プログラムを非最適化コードによる実行から最適化コードによる実行に切り替える場合に、オブジェクトの値に対する書き込みの発生を検出可能に設定してもよい。切替部１５０は、例えばシステム・コールＡＰＩを利用して、仮想メモリ機構で利用されるページ・テーブル・エントリ（ＰＴＥ）内に格納される特権レベル・フィールドおよび／または書き込み禁止を指示するアクセス権フィールド等のページ属性を設定することによって、オブジェクトの値に対する書き込みの発生を、書込命令の特権違反例外およびアクセス権違反例外等の例外として検出可能に設定してもよい。
【００１５】
書込検出部１６０は、記憶部１２０に対してアクセスした書込命令を検出する。切替部１５０は、システム・コールＡＰＩを利用して、書込命令が発生する特権違反例外またはアクセス権違反例外に応じて実行されるＳＥＧＶ（Ｓｅｇｍｅｎｔａｔｉｏｎ  Ｖｉｏｌａｔｉｏｎ）ハンドラ等、書込命令が発生する例外に応じて実行されるハンドラとして、書込検出部１６０を予め登録してもよい。書込検出部１６０は、最適化コードまたは非最適化コードの実行に係る特権レベルよりも高い特権レベルを伴う書込のみを許可してもよい。
【００１６】
切替部１５０は、対象プログラムを最適化コードにより実行させている場合において、オブジェクトに対する値の書き込みが発生したことに応じて、対象プログラムの実行を、最適化コードによる実行から非最適化コードによる実行に切り替える。切替部１５０は、ＳＥＧＶハンドラにおいて、当該対象プログラムの最適化コードによる実行を非最適化コードによる実行に切り替えてもよい。こうすると、書き込みが発生しない限り、コード実行部１４０は最適化コードを実行可能となる。
【００１７】
管理部１７０は、オブジェクトに対する書き込みの発生を検出しない非検出書込処理により管理情報をアクセスしてオブジェクトを管理する。管理部１７０は、オブジェクトに対応するページの特権レベルよりも高い特権レベルの書込命令等の、特権違反例外を発生しない書込命令を使用して、オブジェクトの管理情報にアクセスしてもよい。管理部１７０は、アクセス権違反例外を発生しない論理メモリ空間内のアドレスを使用して、オブジェクトの管理情報にアクセスしてもよい。こうすると、管理部１７０によるオブジェクトに対する書き込みを書込検出部１６０が検出しないので、管理部１７０は当該オブジェクトの管理情報をより高速にアクセスできる。
【００１８】
書込処理部１８０は、書込禁止仮想領域を介したオブジェクトに対する書き込みが検出されたことに応じて、書込許可仮想領域を介して当該書き込みを実行する。書込処理部１８０は、アクセス権違反例外を発生しない論理メモリ空間内のアドレスを使用して、オブジェクトの管理情報にアクセスしてもよい。こうすると、書込検出部１６０は書込処理部１８０によるオブジェクトに対する書き込みを検出しないので、管理部１７０は管理情報をより高速にアクセスできる。
【００１９】
図２は、本実施形態に係る記憶部１２０の構成の一例を示す。記憶部１２０は、ヒープ２１０を有する。記憶部１２０は、１または複数のオブジェクト・ポインタ（ｏｏｐ）２２０ａ〜ｃを有してもよい。ヒープ２１０は、対象プログラムによって使用されるオブジェクト等を記憶する領域である。
【００２０】
ヒープ２１０は、１または複数のオブジェクト２１２ａ〜ｂを有する。１または複数のオブジェクト２１２ａ〜ｂは、それぞれオブジェクト・ヘッダ２１４ａ〜ｂを含む。オブジェクト・ポインタ２２０ａ〜ｃは、それぞれオブジェクト２１２ａ〜ｂの１つのアドレスを保持する。オブジェクト・ポインタ２２０ａ〜ｃは、一例としてそれぞれがオブジェクト２１２ａ〜ｂの１つへの参照（ｒｅｆｅｒｅｎｃｅ）であってもよい。
【００２１】
記憶部１２０は、オブジェクト２１２ａ〜ｂの各々に対して、当該オブジェクトのロックを保持するスレッドのスレッドＩＤを、オブジェクト・ヘッダ２１４ａ〜ｂに記憶してもよい。アプリケーション・スレッドの停止期間を最小化するように設計されたコンカレントＧＣ（ガベッジ・コレクタ）によって切替部１５０が実現される場合、記憶部１２０は、オブジェクト２１２ａ〜ｂの各々に対して、コンカレントＧＣが利用する状態変数を、オブジェクト・ヘッダ２１４ａ〜ｂに記憶してもよい。
【００２２】
記憶部１２０は、オブジェクトの管理情報の一部として、オブジェクトを最適化対象とするか否かを示す最適化情報を記憶する。記憶部１２０は、最適化情報として、オブジェクト２１２ａ〜ｂがライト・バリア（ｗｒｉｔｅ  ｂａｒｒｉｅｒ）の設定対象であることを指示するｂｅｃｏｍｅ＿ｂａｒｒｉｅｒフラグを、当該オブジェクトのオブジェクト・ヘッダ２１４ａ〜ｂに記憶してもよい。
【００２３】
図３Ａは、本実施形態において、コード生成部１３０が最適化コードを生成する対象であるＪａｖａ（登録商標）プログラムの一例を示す。図３ＡのＪａｖａ（登録商標）プログラムは、入力された配列ａに対して、ａの値を変換表ｍａｐで変換した値が１に等しくなるまで、プロセッサに配列ａ内を探索させる。
【００２４】
図３Ｂは、本実施形態において、コード生成部１３０が生成する最適化コードで使用される命令の擬似コードの一例を示す。より詳細には、図３Ｂは、ＩＢＭ  Ｓｙｓｔｅｍ  ｚ（登録商標）が有するＴＲＴ（Ｔｒａｎｓｌａｔｉｏｎ  ａｎｄ  Ｔｅｓｔ）命令の擬似コードを示す。ＴＲＴ命令は、第１オペランドで与えられる配列ａに対して、第２オペランドで与えられる変換表ｔａｂｌｅによる変換値が値０と異なるまで、プロセッサに配列ａ内を探索させる。このように、プロセッサがマイクロ・プログラムを使用して処理するＣＩＳＣ命令を、コード生成部１３０は、生成する最適化コードにおいて利用してもよい。
【００２５】
図３Ｃは、本実施形態において、図３ＡのＪａｖａ（登録商標）プログラムに対してコード生成部１３０が生成する最適化コードの擬似コードの一例である。記憶部１２０は、オブジェクトの管理情報の少なくとも一部として、対象プログラムからオブジェクトの値への書き込みが制限されているか否かを示す書込制限情報を記憶してもよい。記憶部１２０は、当該書込制限情報として、対応するオブジェクトが書込禁止であることを指示するｒｅａｄ＿ｏｎｌｙフラグを、当該オブジェクトのオブジェクト・ヘッダに記憶してもよい。図３Ｃの擬似コードにおいては、変換表ｍａｐが、ｒｅａｄ＿ｏｎｌｙフラグを有している。
【００２６】
切替部１５０は、対象プログラムを非最適化コードにより実行させる場合に対象プログラムからオブジェクトの値への書き込みが制限されていない旨の書込制限情報をオブジェクトの管理情報内に書き込み、対象プログラムを最適化コードにより実行させる場合に対象プログラムからオブジェクトの値への書き込みが制限されている旨の書込制限情報をオブジェクトの管理情報内に書き込む。切替部１５０は、当該書込制限情報として当該オブジェクトのｒｅａｄ＿ｏｎｌｙフラグの値に書き込んでもよい。
【００２７】
管理部１７０は、対象プログラムからオブジェクトの値への書き込みが制限されている旨の書込制限情報が記憶されている場合に対象プログラムを最適化コードにより実行させ、対象プログラムからオブジェクトの値への書き込みが制限されていない旨の書込制限情報が記憶されている場合に対象プログラムを非最適化コードにより実行させる。管理部１７０は、対象オブジェクトのｒｅａｄ＿ｏｎｌｙフラグに依存する最適化コードおよび非最適化コードの間の分岐コードとして実現されてもよい。また、管理部１７０は、これに代えて、当該オブジェクトのクラスが有するメソッド毎に、当該メソッドをパラメータとするｉｎｖｏｋｅｖｉｒｔｕａｌ命令によって呼び出される最適化コードまたは非最適化コードのアドレスを保持する複数の仮想メソッド・テーブルを切り替えることによって実現されてもよい。
【００２８】
コード生成部１３０は、ＴＲＴ命令を利用して図３ＡのＪａｖａ（登録商標）プログラムを最適化することを目的として、変換表ｍａｐに対応する配列ｃｏｍｐｉｌｅｒ＿ｍａｐを作成する最適化コードを生成してもよい。コード生成部１３０は、ＴＲＴ命令および配列ｃｏｍｐｉｌｅｒ＿ｍａｐを利用しない非最適化コードと、当該最適化コードおよび当該非最適化コードの間の分岐コードとをさらに生成してもよい。
【００２９】
コード実行部１４０は、変換表ｍａｐが新たに書き換えられない限り、一度作成された配列ｃｏｍｐｉｌｅｒ＿ｍａｐを何度でも利用できる。変換表ｍａｐに対応するｒｅａｄ＿ｏｎｌｙフラグがセットされている（値がｔｒｕｅである）場合、変換表ｍａｐは新たに書き換えられていないものとみなし、コード実行部１４０は、ＴＲＴ命令および配列ｃｏｍｐｉｌｅｒ＿ｍａｐを利用して配列ａ内を探索する。一方、変換表ｍａｐに対応するｒｅａｄ＿ｏｎｌｙフラグがセットされていない（値がｆａｌｓｅである）場合、コード実行部１４０は、変換表ｍａｐが新たに書き換えられたものとみなし、ＴＲＴ命令および配列ｃｏｍｐｉｌｅｒ＿ｍａｐを利用しない非最適化コードを実行する。
【００３０】
図４Ａは、本実施形態において、コード生成部１３０が最適化コードを生成する対象であるＪａｖａ（登録商標）プログラムの他の一例を示す。当該Ｊａｖａ（登録商標）プログラムは、Ｊａｖａ（登録商標）  Ｇｒａｎｄｅ  Ｆｏｒｕｍが配布するベンチマーク・スイートの一部である。
【００３１】
図４Ｂは、本実施形態において、図４ＡのＪａｖａ（登録商標）プログラムに対してコード生成部１３０が生成する最適化コードの擬似コードの一例である。当該Ｊａｖａ（登録商標）プログラム内で、変数ｓｉｚｅ、配列ｄａｔａｓｉｚｅｓ＿Ｍ、配列ｄａｔａｓｉｚｅｓ＿Ｎ、および配列ｄａｔａｓｉｚｅｓ＿ｎｚに対応するｒｅａｄ＿ｏｎｌｙフラグがセットされている場合、コード生成部１３０は、最適化コードにおいて、配列ｒｏｗおよび配列ｃｏｌの値を求める剰余演算に代えて、定数による剰余演算を実行してもよい。こうすると、配列境界チェックおよびロード命令を省略または減少することにより、コード実行部１４０は当該Ｊａｖａ（登録商標）プログラムをより高速に実行できる。さらに、コード生成部１３０は、定数による剰余演算に代えて、定数による乗算および加減算を利用する最適化コードを生成してもよい。こうすると、コード実行部１４０は、剰余演算を使用しない分だけ、当該Ｊａｖａ（登録商標）プログラムをさらに高速に実行できる。
【００３２】
図５Ａは、本発明の第１の実施形態に係る、コード生成部１３０の処理フローの一例を示す。まず、コード生成部１３０は、オブジェクトの値が不変であることを条件として最適化する場合に、オブジェクトを最適化対象とする旨を示す最適化情報をオブジェクトに対して設定する（Ｓ５１０）。コード生成部１３０は、当該オブジェクトに対応するオブジェクト・ヘッダ内のｂｅｃｏｍｅ＿ｂａｒｒｉｅｒフラグをセットしてもよい。オブジェクトの対象プログラムがメソッドである場合、コード生成部１３０は、メソッドの呼出しプロファイルに基づいて、オブジェクトの値が不変であると仮定してもよい。
【００３３】
また、コード生成部１３０は、メソッドの呼出しプロファイルを参照してｂｅｃｏｍｅ＿ｂａｒｒｉｅｒフラグをセットしたオブジェクトへの書込命令を確認した場合に、ｂｅｃｏｍｅ＿ｂａｒｒｉｅｒフラグをリセットしてもよい。これにより、オブジェクトの値に対する書込命令が実行される蓋然性が高い場合、コード生成部１３０は当該オブジェクトを最適化対象から外すことができる。
【００３４】
次に、コード生成部１３０は、ｂｅｃｏｍｅ＿ｂａｒｒｉｅｒフラグがセットされたオブジェクトの対象プログラムの最適化コードを生成する（Ｓ５１５）。ステップＳ６２０において、コード生成部１３０は、対象プログラムによるオブジェクトの値への書き込みを非特権書込命令に変換する。ここで、非特権書込命令とは、非特権書込禁止領域に対する書込みが特権違反例外を発生する命令である。非特権書込命令による非特権書込禁止領域に対する書込みが発生した場合に、書込検出部１６０は、当該書込みの対象アドレスおよび対象データを特権違反例外とともに検出可能であってもよい。
【００３５】
ここで、管理部１７０は、オブジェクトの管理情報に対する書き込みを特権書込命令により処理してもよい。特権書込命令とは、非特権書込禁止領域に対する書き込みが許可されている命令である。
【００３６】
図５Ｂは、本発明の第１の実施形態に係る、切替部１５０の処理フローの一例を示す。まず、切替部１５０は、記憶部１２０に記憶された複数のオブジェクトのそれぞれを検査して対象プログラムにより使用されていないオブジェクトを記憶部１２０内から解放するガベージ・コレクション中において、オブジェクトの対象プログラムを最適化コードにより実行させることを指示するｂｅｃｏｍｅ＿ｂａｒｒｉｅｒフラグがセットされているかどうかを判定する（Ｓ５２０）。
【００３７】
オブジェクトの対象プログラムを最適化コードにより実行させる場合に、切替部１５０は、当該オブジェクトにライト・バリアを設定することを目的として、当該オブジェクトを、記憶部１２０内において、特権書込命令による書き込みの発生を検出せず、非特権書込命令による書き込みの発生を検出する非特権書込禁止領域に配置する（Ｓ５２２）。一例では、ｂｅｃｏｍｅ＿ｂａｒｒｉｅｒフラグがセットされている場合（Ｓ５２０：Ｙｅｓ）、切替部１５０は、当該ガベージ・コレクション中において、検査対象である書込許可領域のオブジェクトに対応付けてオブジェクトを最適化する旨を示す最適化情報が記憶されている場合に、オブジェクトを非特権書込禁止領域に移動させる（Ｓ５２２）。
【００３８】
続いて、切替部１５０は、オブジェクトに対応付けてオブジェクトを最適化対象とする旨を示す最適化情報が記憶されている場合に、対象プログラムを最適化コードによる実行に切り替える（Ｓ５２４）。切替部１５０は、当該オブジェクトのｒｅａｄ＿ｏｎｌｙフラグをセットすることによって、対象プログラムを最適化コードによる実行に切り替えてもよい。
【００３９】
一方、オブジェクトのｂｅｃｏｍｅ＿ｂａｒｒｉｅｒフラグがセットされておらず、対象プログラムを非最適化コードにより実行させる場合（Ｓ５２０：Ｎｏ）、切替部１５０は、当該オブジェクトを、記憶部１２０内において、特権書込命令および非特権書込命令による書込の発生を検出しない書込許可領域に配置する（Ｓ５２６）。
【００４０】
図５Ｃは、本発明の第１の実施形態に係る、切替部１５０および書込検出部１６０の処理フローの一例を示す。書込検出部１６０は、非特権書込禁止領域に配置されたオブジェクトへの書き込みを検出したときに、切替部１５０に当該書き込みの発生を通知する（Ｓ５３０）。
【００４１】
切替部１５０は、非特権書込禁止領域に配置したオブジェクトに対する書き込みが発生したことに応じて、当該オブジェクトに対して、オブジェクトの値への書き込みが制限されていない旨を示す書込制限情報および当該オブジェクトを最適化対象としない旨を示す最適化情報を設定する。一例では、書込検出部１６０から通知された書き込みの発生に対して、切替部１５０は対応するオブジェクトのｒｅａｄ＿ｏｎｌｙフラグおよびｂｅｃｏｍｅ＿ｂａｒｒｉｅｒフラグをリセットする（Ｓ５３２）。こうすると、コード実行部１４０は、当該オブジェクトに対して非最適化コードを実行する。
【００４２】
切替部１５０は、ガベージ・コレクション中において、検査対象である非特権書込禁止領域のオブジェクトに対応付けて、オブジェクトを最適化しない旨を示す最適化情報が記憶されている場合に、オブジェクトを書込許可領域に移動させてもよい。一例では、切替部１５０は、ガベージ・コレクション中において、ｂｅｃｏｍｅ＿ｂａｒｒｉｅｒがリセットされた非特権書込禁止領域内のオブジェクトを書込許可領域に移動して、対応するｒｅａｄ＿ｏｎｌｙフラグをリセットし、対応するオブジェクト・ポインタを更新してもよい（Ｓ５３４）。切替部１５０は、ガベージ・コレクション中において、ヒープ内の１つまたは複数のオブジェクトをマーク・アンド・スイープするときに、当該移動を実施しても良い。こうすると、切替部１５０は、本実施形態に伴うオブジェクトの移動回数の増加を抑制できる。
【００４３】
図６は、本発明の第２の実施形態に係る記憶部１２０の一例を示す。切替部１５０は、対象プログラムを最適化コードにより実行させる場合に、オブジェクトを、仮想メモリ空間上における書き込みを禁止する書込禁止仮想領域および書き込みを許可する書込許可仮想領域の両方にマッピングされた物理メモリ領域に配置する。記憶部１２０は、ヒープ２１０内に１または複数のオブジェクト２１２ａ〜ｂを有する。さらに、記憶部１２０は、仮想メモリ空間上における書き込みを禁止する書込禁止仮想領域の一例であるＣｏｎｓｔａｎｔ  ｏｂｊｅｃｔｓ  ｒｅｆｅｒｅｎｃｅ  ａｒｅａ（ＣＯＲＡ）６１０、仮想メモリ空間上における書き込みを許可する書込許可仮想領域の一例であるＣｏｎｓｔａｎｔ  ｏｂｊｅｃｔｓ  ｃｏｐｙ  ａｒｅａ（ＣＯＣＡ）６２０、およびＣＯＲＡ６１０およびＣＯＣＡ６２０の両方にマッピングされる物理メモリ領域６３０、および値が不変であると仮定されたオブジェクトが登録されるＣｏｎｓｔａｎｔ  ｏｂｊｅｃｔｓ  ｒｅｍｅｎｂｅｒ  ｓｅｔ（ＣＯＲＳ）６４０を有する。
【００４４】
例えば、商用Ｕｎｉｘ（登録商標）の１つであるＡＩＸ（登録商標）において、共有メモリ空間を確保するｓｈｍａｔシステム・コールＡＰＩを利用することによって、切替部１５０は、物理メモリ領域６３０にマッピングされたＣＯＣＡ６２０を予め確保してもよい。さらに、書込禁止領域の確保を指示するＳＨＭ＿ＲＤＯＮＬＹフラグと共にｓｈｍａｔシステム・コールＡＰＩを利用することによって、切替部１５０は、同一の物理メモリ領域６３０にマッピングされたＣＯＲＡ６１０を予め確保してもよい。
【００４５】
ここで、切替部１５０は、最適化対象となる複数のオブジェクトのそれぞれが記憶される書込禁止仮想領域内のアドレス位置および書込許可仮想領域内のアドレス位置を、仮想メモリ空間上において予め設定されたオフセット分ずらして配置してもよい。こうすると、切替部１５０は、当該オフセットの加減算によって、書込禁止仮想領域内のアドレス位置および書込許可仮想領域内のアドレス位置を容易に変換できる。
【００４６】
図７Ａは、本発明の第２の実施形態に係るコード生成部１３０の処理フローの一例を示す。まず、コード生成部１３０は、値が不変であると仮定するオブジェクトを切替部１５０に通知する（Ｓ７１０）。ステップＳ５１０と同様、コード生成部１３０は、当該オブジェクトに対応するオブジェクト・ヘッダ内のｂｅｃｏｍｅ＿ｂａｒｒｉｅｒフラグをセットすることによって、切替部１５０に通知してもよい。
【００４７】
オブジェクトの値が不変であると仮定するか否かを判定することを目的として、コード生成部１３０は、当該オブジェクトに対応するクラスが有するメソッドの呼出しプロファイルを利用してもよい。例えば、Ｊａｖａ（登録商標）言語の標準ライブラリに含まれるクラスの１つであるＨａｓｈｔａｂｌｅクラスのオブジェクトに対して、コード生成部１３０は、当該オブジェクトが保持するキー値に対して対応するオブジェクトを返すｇｅｔメソッドが所定の期間に多数呼ばれていると判定したときに、ｇｅｔメソッドの最適化コードを生成してもよい。コード生成部１３０は、メソッドの呼出しプロファイルとして、当該メソッドの呼出し地点（ｃａｌｌ  ｓｉｔｅ）に複数のメソッド・ルック・アップ結果を保持するｐｏｌｙｍｏｒｐｈｉｃ  ｉｎｌｉｎｅ  ｃａｃｈｅ（ＰＩＣ）を利用してもよい。
【００４８】
次に、コード生成部１３０は、値が不変であると仮定するオブジェクトの対象プログラムの最適化コードを生成する（Ｓ７１５）。コード生成部１３０は、対象プログラムによる当該オブジェクトの値への書き込みを、書込禁止仮想領域を介して処理させるコードを生成してもよい。
【００４９】
図７Ｂは、本発明の第１の実施形態に係る、切替部１５０の処理フローの一例を示す。まず、切替部１５０は、ガベッジ・コレクション中において、ｂｅｃｏｍｅ＿ｂａｒｒｉｅｒフラグがセットされたオブジェクトを、ＣＯＲＳ６４０に登録する（Ｓ７２０）。切替部１５０は、当該オブジェクトを指示するオブジェクト・ポインタをＣＯＲＳ６４０に登録してもよい。
【００５０】
次に、切替部１５０は、ガベッジ・コレクション中において、当該オブジェクトをＣＯＣＡ６２０に移動し、当該オブジェクトのｒｅａｄ＿ｏｎｌｙフラグをセットし、対応するオブジェクト・ポインタを更新する（Ｓ７２２）。切替部１５０は、第１の実施形態と同様、ガベージ・コレクション中において、ヒープ内のオブジェクトをマーク・アンド・スイープするときに、当該移動を実施しても良い。こうすると、切替部１５０は、本実施形態の実施に伴うオブジェクトの移動回数の増加を抑制できる。
【００５１】
管理部１７０は、書込許可仮想領域を介してオブジェクトの管理情報への書き込みを処理してもよい。これにより、管理部１７０は、書込検出部１６０による書き込み検出を回避できる。
【００５２】
また、管理部１７０は、オブジェクトの書込禁止仮想領域内のアドレス位置およびオフセットから書込許可仮想領域内のアドレス位置を算出して、算出したアドレス位置を用いてオブジェクトの管理情報を書き込んでもよい。これにより、管理部１７０は、オフセット・アドレス値指定付き書込命令と、オブジェクトの書込禁止仮想領域内のアドレスとを使用して、書込許可仮想領域からオブジェクト管理情報を書き込むことができる。また、管理部１７０は、オブジェクトの管理情報への書込頻度が予め設定された基準頻度未満の場合に書込禁止仮想領域を介してオブジェクトの管理情報へ書き込み、書込頻度が基準頻度以上の場合においてはオブジェクトが書込禁止仮想領域および書込許可仮想領域にマッピングされた物理メモリ領域に配置されていることを条件として書込許可仮想領域を介してオブジェクトの管理情報へ書き込んでもよい。
【００５３】
図７Ｃは、本発明の第２の実施形態に係る、切替部１５０および書込検出部１６０の処理フローの一例を示す。まず、書込検出部１６０は、オブジェクトへの書き込みの発生を切替部１５０に通知する（Ｓ７３０）。
【００５４】
次に、切替部１５０は、当該通知に応じて、コード実行部１４０に全スレッドを停止させる（Ｓ７３２）。切替部１５０がオブジェクト・ポインタを安全に更新すること等を目的として、コード実行部１４０は、全てのＧＣルートがＧＣに観測可能であり、ヒープ内の全てのオブジェクトが整合していることが保証される最適化または非最適化コード内の点であるセーフ・ポイント（ｓａｆｅｐｏｉｎｔ）において、各スレッドを停止してもよい。
【００５５】
次に、切替部１５０は、対象プログラムを非最適化コードにより実行させる場合に、オブジェクトを、記憶部１２０内において、書込許可仮想領域にマッピングされた物理メモリ領域に移動させる。一例では、切替部１５０は、書き込みの発生が通知されたオブジェクトをＣＯＣＡ６２０外のヒープ２１０に移動し、当該オブジェクトに対応するオブジェクト・ポインタを更新する（Ｓ７３４）。次に、切替部１５０は、ＣＯＲＳ６４０への当該オブジェクトの登録を削除する（Ｓ７３６）。
【００５６】
次に、コード実行部１４０に当該オブジェクトの対象プログラムを非最適化コードにより実行させることを目的として、切替部１５０は当該オブジェクトのｒｅａｄ＿ｏｎｌｙフラグおよびｂｅｃｏｍｅ＿ｂａｒｒｉｅｒフラグをリセットし、全スレッドの停止を解除する（Ｓ７３８）。
【００５７】
なお、ステップＳ７１５において、コード生成部１３０は、生成する最適化コードにおいて、切替部１５０によって書込禁止仮想領域に配置されたオブジェクトのロックを取得するための待機用コードを外し、それに代えて、例えばＪａｖａ（登録商標）プログラムにおける当該オブジェクトをパラメータとするｓｙｎｃｈｒｏｎｉｚｅｄブロックである、当該ロックに対応するコード・ブロックの前後に、セーフ・ポイントを配置してもよい。また、コード生成部１３０は、生成する最適化コードにおいて、オブジェクトのロックを取得するための待機用コードを外すことに代えて、当該オブジェクトのｒｅａｄ＿ｏｎｌｙフラグの値がｆａｌｓｅである場合に、コード実行部１４０に当該待機用コードを実行させる分岐コードを生成してもよい。さらに、ｓｙｎｃｈｒｏｎｉｚｅｄブロック内において、実行スレッドが待機（ｗａｉｔ）する可能性がある場合、コード生成部１３０は、当該ｓｙｎｃｈｒｏｎｉｚｅｄブロックの直前で当該オブジェクトのｒｅａｄ＿ｏｎｌｙフラグの値をｆａｌｓｅにするコードを挿入してもよい。
【００５８】
さらに、ステップＳ７３２において、書込検出部１６０が検出した書込みを行ったスレッドが対象オブジェクトのロックを保持していないならば、切替部１５０は、コード実行部１４０に、当該オブジェクトのロックを保持する実行中のスレッドを、当該ロックに対応するコード・ブロック外のセーフ・ポイントで停止させるとともに、それら以外の実行中のスレッドを、次のセーフ・ポイントで停止させてもよい。また、当該書込みを行ったスレッドが対象オブジェクトのロックを保持しているならば、切替部１５０は、コード実行部１４０に、他の実行中のスレッドを、次のセーフ・ポイントで停止させてもよい。
【００５９】
コード実行部１４０は、各スレッドが対象オブジェクトのロックを保持するか否かを判定することを目的として、各スレッドが到達するセーフ・ポイントにおいて、当該オブジェクトが、当該スレッドによってロックが保持される全てのオブジェクトを登録したハッシュ・テーブルに含まれるか否かを判定してもよい。具体的には、コード実行部１４０は、ロックが保持される全てのオブジェクトのポインタを管理するハッシュ・テーブル等の中に、対象オブジェクトのポインタが含まれるか否かを判定する。また、当該スレッドによってロックが保持される全てのオブジェクトの数が十分少ない場合、コード実行部１４０は、ハッシュ・テーブル等を使用することに代えて、ポインタ値の直接比較によって、各スレッドが対象オブジェクトのロックを保持するか否かを判定してもよい。こうすると、コード実行部１４０は、処理コストの高いロックが外された最適化コードを実行できる。このことは、例えば、Ｊａｖａ（登録商標）標準ライブラリにおいて多用され、かつ実行時にロックを取得する、Ｈａｓｈｔａｂｌｅクラスが有するｇｅｔメソッドの、特に多スレッド環境におけるボトルネックの解消に対して効果的である。
【００６０】
図８Ａは、本発明の第２の実施形態に係る、ステップＳ７２０の後の記憶部１２０の一例を示す。より詳細には、図８Ａは、ステップＳ７２０において、ｂｅｃｏｍｅ＿ｂａｒｒｉｅｒフラグがセットされたオブジェクト２１２ａを、切替部１５０がＣＯＲＳ６４０に登録した後の記憶部１２０の一例を示す。ＣＯＲＳ６４０は、値が不変であると仮定されたオブジェクト２１２ａの論理アドレスを保持するオブジェクト・ポインタ２２０ａを有する。
【００６１】
図８Ｂは、本発明の第２の実施形態に係る、ステップＳ７２２の後の記憶部１２０の一例を示す。より詳細には、図８Ａは、ステップＳ７２２において、ｂｅｃｏｍｅ＿ｂａｒｒｉｅｒフラグがセットされたオブジェクト２１２ａを、オブジェクト２１２ａのコピーであるオブジェクト８１２ａを生成することによって切替部１５０が移動し、オブジェクト８１２ａを指示するオブジェクト・ポインタ８２０ａを、切替部１５０がＣＯＲＳ６４０に登録した後の記憶部１２０の一例を示す。物理メモリ領域６３０は、オブジェクト８１２ａの実体であるオブジェクト８１２ｂを格納する。オブジェクト８１２ｂは、ＣＯＣＡ６２０の領域に、オブジェクト８１２ｃとして自動的にマッピングされる。管理部１７０は、オブジェクト８１２ｃにアクセスすることによって、オブジェクト８１２ｂの管理情報に書き込み処理してもよい。
【００６２】
なお、第１の実施形態および第２の実施形態において、コード実行部１４０が非特権書込禁止領域または書込禁止仮想領域に書き込みを行ったときにコンディション・フラグをセットする書込命令を、装置１００が有する場合、アクセス例外の発生確率とアクセス例外の処理コストと、当該コンディション・フラグのチェックに要する処理コストとに基づいて、コード生成部１３０は、非特権書込禁止領域への非特権書込命令または書込禁止仮想領域へ書込命令に代えて、当該コンディション・フラグをセットする書込命令を利用する最適化コードを生成してもよい。
【００６３】
コード生成部１３０は、コンディション・フラグをセットする書込命令として、例えばＳＴ（Ａｄｄｒ），ｄａｔａ，ｃｏｎｔ＿ｒｅｇのような形式の書込命令を利用する最適化コードを生成してもよい。ここで、ｃｏｎｄ＿ｒｅｇはコンディション・フラグを格納するレジスタを指定するオペランドである。書込命令が成功した場合、プロセッサはｃｏｎｄ＿ｒｅｇに値０を設定してもよい。また、書込命令が失敗した場合、プロセッサはｃｏｎｄ＿ｒｅｇに対応する例外を指示する値を設定してもよい。例外は、例えばＳＥＧＶ例外およびページ・フォールト（ＰＦ）例外等の、書込命令の結果に依存して発生しうる任意の例外であってもよい。
【００６４】
書込検出部１６０は、例外の発生を検出することに代えて、コンディション・フラグをセットする書込命令を実行した後に、ｃｏｎｄ＿ｒｅｇがセットされていることを検出してもよい。書込検出部１６０は、コンディション・フラグをセットする書込命令の後に、当該コンディション・フラグをチェックすることを目的として実行されるチェック・ポイントとして実現されてもよい。
【００６５】
ｃｏｎｄ＿ｒｅｇがセットされていることを書込検出部１６０が検出した場合に、切替部１５０は、コード実行部１４０に対象プログラムの最適化コードに代えて非最適化コードを実行させてもよい。こうすると、アクセスするオブジェクトの値が不変であると仮定した最適化コードの実行速度が十分高速であり、かつ非特権書込命令による非特権書込禁止領域への書込みまたは書込禁止仮想領域への書込みの発生確率が比較的高いときに、コード実行部１４０は、対象プログラムをより高速に実行できる。
【００６６】
図９は、本実施形態に係るコンピュータ１９００のハードウェア構成の一例を示す。本実施形態に係るコンピュータ１９００は、ホスト・コントローラ２０８２により相互に接続されるＣＰＵ２０００、ＲＡＭ２０２０、グラフィック・コントローラ２０７５、及び表示装置２０８０を有するＣＰＵ周辺部と、入出力コントローラ２０８４によりホスト・コントローラ２０８２に接続される通信インターフェイス２０３０、ハードディスク・ドライブ２０４０、及びＤＶＤドライブ２０６０を有する入出力部と、入出力コントローラ２０８４に接続されるＲＯＭ２０１０、フレキシブルディスク・ドライブ２０５０、及び入出力チップ２０７０を有するレガシー入出力部とを備える。
【００６７】
ホスト・コントローラ２０８２は、ＲＡＭ２０２０と、高い転送レートでＲＡＭ２０２０をアクセスするＣＰＵ２０００及びグラフィック・コントローラ２０７５とを接続する。ＣＰＵ２０００は、ＲＯＭ２０１０及びＲＡＭ２０２０に格納されたプログラムに基づいて動作し、各部の制御を行う。グラフィック・コントローラ２０７５は、ＣＰＵ２０００等がＲＡＭ２０２０内に設けたフレーム・バッファ上に生成する画像データを取得し、表示装置２０８０上に表示させる。これに代えて、グラフィック・コントローラ２０７５は、ＣＰＵ２０００等が生成する画像データを格納するフレーム・バッファを、内部に含んでもよい。
【００６８】
入出力コントローラ２０８４は、ホスト・コントローラ２０８２と、比較的高速な入出力装置である通信インターフェイス２０３０、ハードディスク・ドライブ２０４０、ＤＶＤドライブ２０６０を接続する。通信インターフェイス２０３０は、ネットワークを介して他の装置と通信する。ハードディスク・ドライブ２０４０は、コンピュータ１９００内のＣＰＵ２０００が使用するプログラム及びデータを格納する。ＤＶＤドライブ２０６０は、ＤＶＤ２０９５からプログラム又はデータを読み取り、ＲＡＭ２０２０を介してハードディスク・ドライブ２０４０に提供する。
【００６９】
また、入出力コントローラ２０８４には、ＲＯＭ２０１０と、フレキシブルディスク・ドライブ２０５０、及び入出力チップ２０７０の比較的低速な入出力装置とが接続される。ＲＯＭ２０１０は、コンピュータ１９００が起動時に実行するブート・プログラム、及び／又は、コンピュータ１９００のハードウェアに依存するプログラム等を格納する。フレキシブルディスク・ドライブ２０５０は、フレキシブルディスク２０９０からプログラム又はデータを読み取り、ＲＡＭ２０２０を介してハードディスク・ドライブ２０４０に提供する。入出力チップ２０７０は、フレキシブルディスク・ドライブ２０５０を入出力コントローラ２０８４へと接続すると共に、例えばパラレル・ポート、シリアル・ポート、キーボード・ポート、マウス・ポート等を介して各種の入出力装置を入出力コントローラ２０８４へと接続する。
【００７０】
ＲＡＭ２０２０を介してハードディスク・ドライブ２０４０に提供されるプログラムは、フレキシブルディスク２０９０、ＤＶＤ２０９５、又はＩＣカード等の記録媒体に格納されて利用者によって提供される。プログラムは、記録媒体から読み出され、ＲＡＭ２０２０を介してコンピュータ１９００内のハードディスク・ドライブ２０４０にインストールされ、ＣＰＵ２０００において実行される。
【００７１】
コンピュータ１９００にインストールされ、コンピュータ１９００を装置１００として機能させるプログラムは、コード格納部１１０と、記憶部１２０と、コード生成部１３０と、コード実行部１４０と、切替部１５０と、書込検出部１６０と、管理部１７０と、書込処理部１８０とを備える。これらのプログラム又はモジュールは、ＣＰＵ２０００等に働きかけて、コンピュータ１９００を、コード格納部１１０と、記憶部１２０と、コード生成部１３０と、コード実行部１４０と、切替部１５０と、書込検出部１６０と、管理部１７０と、書込処理部１８０としてそれぞれ機能させる。
【００７２】
これらのプログラムに記述された情報処理は、コンピュータ１９００に読込まれることにより、ソフトウェアと上述した各種のハードウェア資源とが協働した具体的手段であるコード格納部１１０と、記憶部１２０と、コード生成部１３０と、コード実行部１４０と、切替部１５０と、書込検出部１６０と、管理部１７０と、書込処理部１８０として機能する。そして、これらの具体的手段によって、本実施形態におけるコンピュータ１９００の使用目的に応じた情報の演算又は加工を実現することにより、使用目的に応じた特有の装置１００が構築される。
【００７３】
一例として、コンピュータ１９００と外部の装置等との間で通信を行う場合には、ＣＰＵ２０００は、ＲＡＭ２０２０上にロードされた通信プログラムを実行し、通信プログラムに記述された処理内容に基づいて、通信インターフェイス２０３０に対して通信処理を指示する。通信インターフェイス２０３０は、ＣＰＵ２０００の制御を受けて、ＲＡＭ２０２０、ハードディスク・ドライブ２０４０、フレキシブルディスク２０９０、又はＤＶＤ２０９５等の記憶装置上に設けた送信バッファ領域等に記憶された送信データを読み出してネットワークへと送信し、もしくは、ネットワークから受信した受信データを記憶装置上に設けた受信バッファ領域等へと書き込む。このように、通信インターフェイス２０３０は、ＤＭＡ（ダイレクト・メモリ・アクセス）方式により記憶装置との間で送受信データを転送してもよく、これに代えて、ＣＰＵ２０００が転送元の記憶装置又は通信インターフェイス２０３０からデータを読み出し、転送先の通信インターフェイス２０３０又は記憶装置へとデータを書き込むことにより送受信データを転送してもよい。
【００７４】
また、ＣＰＵ２０００は、ハードディスク・ドライブ２０４０、ＤＶＤドライブ２０６０（ＤＶＤ２０９５）、フレキシブルディスク・ドライブ２０５０（フレキシブルディスク２０９０）等の外部記憶装置に格納されたファイルまたはデータベース等の中から、全部または必要な部分をＤＭＡ転送等によりＲＡＭ２０２０へと読み込ませ、ＲＡＭ２０２０上のデータに対して各種の処理を行う。そして、ＣＰＵ２０００は、処理を終えたデータを、ＤＭＡ転送等により外部記憶装置へと書き戻す。このような処理において、ＲＡＭ２０２０は、外部記憶装置の内容を一時的に保持するものとみなせるから、本実施形態においてはＲＡＭ２０２０および外部記憶装置等をメモリ、記憶部１２０、または記憶装置等と総称する。本実施形態における各種のプログラム、データ、テーブル、データベース等の各種の情報は、このような記憶装置上に格納されて、情報処理の対象となる。なお、ＣＰＵ２０００は、ＲＡＭ２０２０の一部をキャッシュメモリに保持し、キャッシュメモリ上で読み書きを行うこともできる。このような形態においても、キャッシュメモリはＲＡＭ２０２０の機能の一部を担うから、本実施形態においては、区別して示す場合を除き、キャッシュメモリもＲＡＭ２０２０、メモリ、及び／又は記憶装置に含まれるものとする。
【００７５】
また、ＣＰＵ２０００は、ＲＡＭ２０２０から読み出したデータに対して、プログラムの命令列により指定された、本実施形態中に記載した各種の演算、情報の加工、条件判断、情報の検索・置換等を含む各種の処理を行い、ＲＡＭ２０２０へと書き戻す。例えば、ＣＰＵ２０００は、条件判断を行う場合においては、本実施形態において示した各種の変数が、他の変数または定数と比較して、大きい、小さい、以上、以下、等しい等の条件を満たすかどうかを判断し、条件が成立した場合（又は不成立であった場合）に、異なる命令列へと分岐し、またはサブルーチンを呼び出す。
【００７６】
また、ＣＰＵ２０００は、記憶装置内のファイルまたはデータベース等に格納された情報を検索することができる。例えば、第１属性の属性値に対し第２属性の属性値がそれぞれ対応付けられた複数のエントリが記憶装置に格納されている場合において、ＣＰＵ２０００は、記憶装置に格納されている複数のエントリの中から第１属性の属性値が指定された条件と一致するエントリを検索し、そのエントリに格納されている第２属性の属性値を読み出すことにより、所定の条件を満たす第１属性に対応付けられた第２属性の属性値を得ることができる。
【００７７】
以上に示したプログラム又はモジュールは、外部の記録媒体に格納されてもよい。記録媒体としては、フレキシブルディスク２０９０、ＤＶＤ２０９５の他に、ＤＶＤ又はＣＤ等の光学記録媒体、ＭＯ等の光磁気記録媒体、テープ媒体、ＩＣカード等の半導体メモリ等を用いることができる。また、専用通信ネットワーク又はインターネットに接続されたサーバシステムに設けたハードディスク又はＲＡＭ等の記憶装置を記録媒体として使用し、ネットワークを介してプログラムをコンピュータ１９００に提供してもよい。
【００７８】
以上、本発明を実施の形態を用いて説明したが、本発明の技術的範囲は上記実施の形態に記載の範囲には限定されない。上記実施の形態に、多様な変更または改良を加えることが可能であることが当業者に明らかである。その様な変更または改良を加えた形態も本発明の技術的範囲に含まれ得ることが、特許請求の範囲の記載から明らかである。
【００７９】
特許請求の範囲、明細書、および図面中において示した装置、システム、プログラム、および方法における動作、手順、ステップ、および段階等の各処理の実行順序は、特段「より前に」、「先立って」等と明示しておらず、また、前の処理の出力を後の処理で用いるのでない限り、任意の順序で実現しうることに留意すべきである。特許請求の範囲、明細書、および図面中の動作フローに関して、便宜上「まず、」、「次に、」等を用いて説明したとしても、この順で実施することが必須であることを意味するものではない。
【符号の説明】
【００８０】
１００  装置、１１０  コード格納部、１２０  記憶部、１３０  コード生成部、１４０  コード実行部、１５０  切替部、１６０  書込検出部、１７０  管理部、１８０  書込処理部、２１０  ヒープ、２１２ａ〜ｂ  オブジェクト、２１４ａ〜ｂ  オブジェクト・ヘッダ、２２０ａ〜ｃ  オブジェクト・ポインタ、６１０  ＣＯＲＡ、６２０  ＣＯＣＡ、６３０  物理メモリ領域、６４０  ＣＯＲＳ、８１２ａ  オブジェクト、８２０ａ  オブジェクト・ポインタ、１９００  コンピュータ、２０００  ＣＰＵ、２０１０  ＲＯＭ、２０２０  ＲＡＭ、２０３０  通信インターフェイス、２０４０  ハードディスク・ドライブ、２０５０  フレキシブルディスク・ドライブ、２０６０  ＤＶＤドライブ、２０７０  入出力チップ、２０７５  グラフィック・コントローラ、２０８０  表示装置、２０８２  ホスト・コントローラ、２０８４  入出力コントローラ、２０９０  フレキシブルディスク、２０９５  ＤＶＤ
【図１】
2011013985.tif 000003
【図２】
2011013985.tif 000004
【図３Ａ】
2011013985.tif 000005
【図３Ｂ】
2011013985.tif 000006
【図３Ｃ】
2011013985.tif 000007
【図４Ａ】
2011013985.tif 000008
【図４Ｂ】
2011013985.tif 000009
【図５Ａ】
2011013985.tif 000010
【図５Ｂ】
2011013985.tif 000011
【図５Ｃ】
2011013985.tif 000012
【図６】
2011013985.tif 000013
【図７Ａ】
2011013985.tif 000014
【図７Ｂ】
2011013985.tif 000015
【図７Ｃ】
2011013985.tif 000016
【図８Ａ】
2011013985.tif 000017
【図８Ｂ】
2011013985.tif 000018
【図９】
2011013985.tif 000019