(57)【要約】【課題】マルチスレッド実行制御方式でデータ処理を行う情報処理装置は、スレッドプライベート宣言された変数の全てが必ずしも利用されるわけではないため、結果的に、スレッド用に確保された領域への書き込み動作のうちの一部の動作が無駄になってしまう場合がある。【解決手段】スレッド１で利用されるスレッドプライベート変数に対応付けられた第１論理アドレスで指定される領域と、その変数に対応するスレッド２で利用されるスレッドプライベート変数に対応付けられた第２論理アドレスで指定される領域とは、いずれかのスレッドプライベート変数への書き込みが行われるまでは、共通の第１物理アドレスで指定される領域を利用し、いずれかのスレッドプライベート変数への書き込みが行われた後は、それぞれ、第１物理アドレスで指定される領域と第２物理アドレスで指定される領域とを利用する。【選択図】図２
2012043138.tif 000002
【特許請求の範囲】
【請求項１】
アプリケーションプログラムの１つの書き込み命令によりそれぞれアクセスに用いられる、互いに異なる第１論理アドレスと第２論理アドレスとを対応付ける変数情報を取得する変数情報取得手段と、
物理アドレスによって指定される記憶領域を有する記憶手段と、
論理アドレスを物理アドレスに変換するアドレス変換手段と、
前記アドレス変換手段によって変換された物理アドレスを用いてアプリケーションプログラムの命令を実行する命令実行手段と、
第１状態と第２状態とのいずれか一方の状態を示し、前記アドレス変換手段の行うアドレス変換の方法を特定するための状態フラグを記憶するフラグ記憶手段とを備え、
前記アドレス変換手段は、前記状態フラグが前記第１状態を示す場合に、前記第１論理アドレスと前記第２論理アドレスとを第１物理アドレスに変換し、前記状態フラグが前記第２状態を示すときに、前記第１論理アドレスを前記第１物理アドレスに、前記第２論理アドレスを第２物理アドレスに変換し、
前記命令実行手段は、前記状態フラグが第１状態を示す場合において、アプリケーションプログラムによる前記第２論理アドレスへの書き込み命令を実行するとき、当該命令を実行する際に前記状態フラグを前記第２状態とし、アプリケーションプログラムによる前記第１論理アドレスへの書き込み命令を実行するとき、当該命令を実行する際に前記状態フラグを前記第２状態として前記第１物理アドレスによって示される領域に記憶されているデータを前記第２物理アドレスによって示される領域に記憶させる
ことを特徴とする情報処理装置。
【請求項２】
前記情報処理装置は、マルチスレッド実行制御機能を有し、
前記第１論理アドレスと前記第２論理アドレスとは、アプリケーションプログラムによって生成される互いに異なるスレッドで利用される論理アドレスのうち、論理アドレスによって指定される領域の初期値が互いに等しいものである関係を有する
ことを特徴とする請求項１記載の情報処理装置。
【請求項３】
アプリケーションプログラムによって生成される互いに異なるスレッドで利用される論理アドレスの組の中に、指定される領域の初期値が互いに等しい論理アドレスから成るものが存在する場合に、該当する論理アドレスの利用に先駆けて、前記論理アドレスの組を構成する一つの論理アドレスを前記第１論理アドレスとし、前記論理アドレスの組を構成する前記第１論理アドレスでない論理アドレスの一つを前記第２論理アドレスとし、前記第１論理アドレスと前記第２論理アドレスとを対応付けて前記変数情報を生成する変数情報生成手段を備える
ことを特徴とする請求項２記載の情報処理装置。
【請求項４】
前記記憶手段の記憶領域は、複数のページから成り、
前記第２物理アドレスは、前記第１物理アドレスによって指定される領域を含むページと互いに異なるページに含まれる領域を指定するものである
ことを特徴とする請求項２記載の情報処理装置。
【請求項５】
物理アドレスによって指定される記憶領域を有する記憶手段と、第１状態と第２状態とのいずれか一方の状態を示す状態フラグを記憶するためのフラグ記憶手段とを備える情報処理装置に情報処理させるための情報処理方法であって、
アプリケーションプログラムの１つの書き込み命令によりそれぞれアクセスに用いられる、互いに異なる第１論理アドレスと第２論理アドレスとを対応付ける変数情報を取得する変数情報取得ステップと、
論理アドレスを物理アドレスに変換するアドレス変換ステップと、
前記アドレス変換ステップを利用して、アプリケーションプログラムの命令を実行する命令実行ステップとを備え、
前記アドレス変換ステップは、前記状態フラグが前記第１状態を示す場合に、前記第１論理アドレスと前記第２論理アドレスとを第１物理アドレスに変換し、前記状態フラグが前記第２状態を示すときに、前記第１論理アドレスを前記第１物理アドレスに、前記第２論理アドレスを第２物理アドレスに変換し、
前記命令実行ステップは、前記状態フラグが第１状態を示す場合において、アプリケーションプログラムによる前記第２論理アドレスへの書き込み命令を実行するとき、当該命令を実行する際に前記状態フラグを前記第２状態とし、アプリケーションプログラムによる前記第１論理アドレスへの書き込み命令を実行するとき、当該命令を実行する際に前記状態フラグを前記第２状態として前記第１物理アドレスによって示される領域に記憶されているデータを前記第２物理アドレスによって示される領域に記憶させる
ことを特徴とする情報処理方法。
【請求項６】
アプリケーションプログラムの１つの書き込み命令によりそれぞれアクセスに用いられる、互いに異なる第１論理アドレスと第２論理アドレスとを対応付ける変数情報を取得する変数情報取得手段と、
物理アドレスによって指定される記憶領域を有する記憶手段と、
論理アドレスを物理アドレスに変換するアドレス変換手段と、
前記アドレス変換手段によって変換された物理アドレスを用いてアプリケーションプログラムの命令を実行する命令実行手段と、
第１状態と第２状態とのいずれか一方の状態を示し、前記アドレス変換手段の行うアドレス変換の方法を特定するための状態フラグを記憶するフラグ記憶手段とを備え、
前記アドレス変換手段は、前記状態フラグが前記第１状態を示す場合に、前記第１論理アドレスと前記第２論理アドレスとを第１物理アドレスに変換し、前記状態フラグが前記第２状態を示すときに、前記第１論理アドレスを前記第１物理アドレスに、前記第２論理アドレスを第２物理アドレスに変換し、
前記命令実行手段は、前記状態フラグが第１状態を示す場合において、アプリケーションプログラムによる前記第２論理アドレスへの書き込み命令を実行するとき、当該命令を実行する際に前記状態フラグを前記第２状態とし、アプリケーションプログラムによる前記第１論理アドレスへの書き込み命令を実行するとき、当該命令を実行する際に前記状態フラグを前記第２状態として前記第１物理アドレスによって示される領域に記憶されているデータを前記第２物理アドレスによって示される領域に記憶させる
ことを特徴とする集積回路。
【請求項７】
請求項１記載の情報処理装置と、
ストリームの入力を受け付けるストリーム受付部とを備え、
前記命令実行手段の実行するアプリケーションプログラムの命令に、前記ストリーム受付部が受け付けたストリームに含まれるデータを用いて行う処理が含まれている
ことを特徴とするストリーム再生システム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、マルチスレッド実行制御機能を有する情報処理装置に関する。
【背景技術】
【０００２】
コンピュータシステムにおいてループ処理等のイタレーション処理の実行時間を短縮するための技術として、イタレーション処理を複数のスレッドに分担させて並列に実行させる技術がある。
【０００３】
特許文献１には、処理を複数のスレッドに分担させて並列に実行させる場合において、その処理に係る変数にスレッドプライベート宣言された変数があるとき、そのスレッドプライベート宣言された変数を記憶するための領域をスレッドの数だけ確保し、各スレッドは、自スレッド用に確保された領域を利用して処理を行うという技術が開示されている。
【０００４】
この特許文献１に開示されている技術では、スレッド用に確保された領域を初期化する際には、全ての領域に初期値を書き込む必要がある。
しかしながら、各スレッドの処理において、スレッドプライベート宣言された変数の全てが必ずしも利用されるわけではないため、結果的に、スレッド用に確保された領域への初期値の書き込み動作のうちの一部の書き込み動作が無駄になってしまう場合がある。
【０００５】
この書き込み動作の無駄を削減するための技術に、例えば、特許文献２に開示されている技術がある。
特許文献２に開示されている技術は、ＯＳ（Operating System）が記憶領域をページ単位で管理するシステムにおいて、各スレッドの論理ページは、アプリケーションプログラムからの書き込みが発生するまで物理ページを共有し、いずれかの論理ページの領域への書き込みが発生すると、対応する各スレッドの論理ページをそれぞれ新たな物理ページに対応付けて、書き込み発生直前に共用していた物理ページのデータを、新たな物理ページそれぞれに書き込むという技術である。
【０００６】
この特許文献２に開示されている技術を用いることで、アプリケーションプログラムの書き込み命令によって書き込みが行われる領域を含む論理ページ以外のページのデータは、新たな物理ページに書き込まれることがなくなる。
【先行技術文献】
【特許文献】
【０００７】
【特許文献１】特開２００２−９９４２６号公報
【特許文献２】特開平７−１６０５８３号公報
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献２に開示されている技術は、記憶領域をページ単位で取り扱うため、各スレッドの論理ページに新たな物理ページが割り当てられる場合に、その新たな物理ページそれぞれの全ての領域に、共用していた物理ページの全てのデータが書き込まれる。
【０００９】
しかしながら、その新たな物理ページの全てのデータが必ずしも更新されるわけではないため、結果的に、書き込まれる必要のない領域のデータを、物理アドレスによって指定される領域に書き込んでしまうという書き込み動作の無駄が発生してしまうことがある。
【００１０】
そこで、本発明は係る問題に鑑みてなされたものであり、上述の無駄な書き込み動作の発生頻度を、従来よりも少なくすることができる情報処理装置を提供することを目的とする。
【課題を解決するための手段】
【００１１】
上記課題を解決するために本発明に係る情報処理装置は、アプリケーションプログラムの１つの書き込み命令によりそれぞれアクセスに用いられる、互いに異なる第１論理アドレスと第２論理アドレスとを対応付ける変数情報を取得する変数情報取得手段と、物理アドレスによって指定される記憶領域を有する記憶手段と、論理アドレスを物理アドレスに変換するアドレス変換手段と、前記アドレス変換手段によって変換された物理アドレスを用いてアプリケーションプログラムの命令を実行する命令実行手段と、第１状態と第２状態とのいずれか一方の状態を示し、前記アドレス変換手段の行うアドレス変換の方法を特定するための状態フラグを記憶するフラグ記憶手段とを備え、前記アドレス変換手段は、前記状態フラグが前記第１状態を示す場合に、前記第１論理アドレスと前記第２論理アドレスとを第１物理アドレスに変換し、前記状態フラグが前記第２状態を示すときに、前記第１論理アドレスを前記第１物理アドレスに、前記第２論理アドレスを第２物理アドレスに変換し、前記命令実行手段は、前記状態フラグが第１状態を示す場合において、アプリケーションプログラムによる前記第２論理アドレスへの書き込み命令を実行するとき、当該命令を実行する際に前記状態フラグを前記第２状態とし、アプリケーションプログラムによる前記第１論理アドレスへの書き込み命令を実行するとき、当該命令を実行する際に前記状態フラグを前記第２状態として前記第１物理アドレスによって示される領域に記憶されているデータを前記第２物理アドレスによって示される領域に記憶させることを特徴とする。
【発明の効果】
【００１２】
上述の構成を備える本発明に係る情報処理装置は、第１論理アドレスによって指定される領域と第２論理アドレスによって指定される領域とが第１物理アドレスによって指定される領域を共用している場合において、第１論理アドレスによって指定される領域への書き込み、又は第２論理アドレスによって指定される領域への書き込みが発生するとき、第２物理アドレスで指定される領域へのデータの書き込みが行われる。
【００１３】
従って、書き込まれる必要のない領域のデータを、物理アドレスによって指定される領域に書き込んでしまう無駄な書き込み動作の発生頻度を、従来よりも少なくすることができる。
【図面の簡単な説明】
【００１４】
【図１】情報処理装置１００の主要なハードウエア構成を示すブロック図
【図２】情報処理装置１００の主要な機能ブロックの構成を示す機能ブロック図
【図３】アプリケーションプログラムの一例を示す図
【図４】中間コードの一例を示す図
【図５】変数情報のデータ構成図
【図６】アドレス対応テーブルのデータ構成図
【図７】コンパイル処理のフローチャート
【図８】プログラム実行処理のフローチャート
【図９】アドレス対応テーブル生成処理のフローチャート
【図１０】オブジェクトコード実行処理のフローチャートその１
【図１１】オブジェクトコード実行処理のフローチャートその２
【図１２】（Ａ）各状態フラグ６０５が”0”の場合の論理アドレスと物理アドレスとの対応関係を示す図、（Ｂ）各状態フラグ６０５が”1”の場合の論理アドレスと物理アドレスとの対応関係を示す図
【図１３】変形情報処理装置の主要な機能ブロックの構成を示すブロック図
【図１４】変形変数情報のデータ構成図
【図１５】変形アドレス対応テーブルの構成図
【図１６】変形コンパイル処理のフローチャート
【図１７】変形プログラム実行処理のフローチャート
【図１８】変形アドレス対応テーブル生成処理のフローチャート
【図１９】変形オブジェクトコード実行処理のフローチャートその１
【図２０】変形オブジェクトコード実行処理のフローチャートその２
【図２１】（Ａ）各状態フラグ６０５が”0”の場合の論理アドレスと物理アドレスとの対応関係を示す図、（Ｂ）各状態フラグ６０５が”1”の場合の論理アドレスと物理アドレスとの対応関係を示す図
【図２２】（Ａ）各状態フラグ６０５が”0”の場合の論理アドレスと物理アドレスとの対応関係を示す図、（Ｂ）各状態フラグ６０５が”1”の場合の論理アドレスと物理アドレスとの対応関係を示す図
【図２３】ブルーレイ録画再生システム２３００の構成図
【発明を実施するための形態】
【００１５】
＜実施の形態１＞
＜概要＞
以下、本発明に係る情報処理装置の一実施形態として、記憶領域を共用する２つのプロセッサを備え、マルチスレッド実行制御方式でデータ処理を行う情報処理装置について説明する。
【００１６】
この情報処理装置は、例えば、Ｃ言語といった高級言語で記述されたソースプログラムをユーザから指定されると、そのソースプログラムを、マルチスレッド実行制御方式に対応した形式のオブジェクトコードにコンパイルし、ユーザからコンパイルされたオブジェクトコードを指定されると、そのオブジェクトコードを、２つのプロセッサを用いて実行するものである。
【００１７】
また、この情報処理装置は、オブジェクトコードを実行する場合において、互いに対応するスレッドプライベート変数が互いに異なるスレッドで利用されているとき、互いに対応するスレッドプライベート変数のいずれにもアプリケーションプログラムからの書き込みが発生していなければ、それらのスレッドプライベート変数に対応する論理アドレスに１つの物理アドレスを対応付け、互いに対応するスレッドプライベート変数のいずれかにアプリケーションプログラムからの書き込みが発生していれば、スレッドプライベート変数に対応する論理アドレスのそれぞれに、それぞれ互いに異なる物理アドレスを対応付けるというものである。
【００１８】
以下、本実施の形態１に係る情報処理装置の構成について図面を参照しながら説明する。
＜構成＞
図１は、情報処理装置１００の主要なハードウエア構成を示すブロック図である。
【００１９】
同図に示す通り、情報処理装置１００は、半導体集積回路１１０とハードディスク装置１３０と出力装置１３１と入力装置１３２とから構成される。
半導体集積回路１１０は、プロセッサＡ１０１とプロセッサＢ１０２とＲＯＭ（Read Only Memory）１０３とＲＡＭ（Random Access Memory）１０４とハードディスク装置インターフェース１０５と出力装置インターフェース１０６と入力装置インターフェース１０７とバスライン１２０とを集積した集積回路であって、ハードディスク装置１３０と出力装置１３１と入力装置１３２とに接続する。
【００２０】
プロセッサＡ１０１とプロセッサＢ１０２とは、それぞれバスライン１２０と接続し、それぞれＲＯＭ１０３、ＲＡＭ１０４、又はハードディスク装置１３０に記憶されているＯＳ、アプリケーションプログラムといったプログラムを実行することで、ＲＯＭ１０３、ＲＡＭ１０４、ハードディスク装置１３０、出力装置１３１、入力装置１３２を制御して、様々な機能を実現する。
【００２１】
プロセッサＡ１０１、又はプロセッサＢ１０２によって実行されるアプリケーションプログラムは、論理アドレスを用いて記憶領域の指定を行い、アプリケーションプログラムで使用される変数は、全て４Ｂｙｔｅの固定サイズとなっている。
【００２２】
プロセッサＡ１０１、及びプロセッサＢ１０２は、アプリケーションプログラムを実行する場合において記憶領域にアクセスするときには、ＲＡＭ１０４に記憶されているアドレス対応テーブル（後述）を用いて論理アドレスを物理アドレスに変換して、記憶領域へのアクセスを行う。
【００２３】
ＲＯＭ１０３は、バスライン１２０と接続し、プロセッサＡ１０１とプロセッサＢ１０２との動作を規定するプログラムと、プロセッサＡ１０１とプロセッサＢ１０２とが利用するデータとを記憶し、物理アドレスによって記憶領域を指定される。
【００２４】
ＲＡＭ１０４は、バスライン１２０と接続し、プロセッサＡ１０１とプロセッサＢ１０２との動作を規定するプログラムとを一時的に記憶し、プロセッサＡ１０１、又はプロセッサＢ１０２がプログラムを実行することに伴って発生するデータを一時的に記憶し、アドレス対応テーブルを記憶し、物理アドレスによって記憶領域を指定される。
【００２５】
ハードディスク装置インターフェース１０５と出力装置インターフェース１０６と入力装置インターフェース１０７とは、それぞれバスライン１２０と接続し、それぞれバスライン１２０とハードディスク装置１３０との間の信号のやり取りを仲介する機能、バスライン１２０と出力装置１３１との間の信号のやり取りを仲介する機能、バスライン１２０と入力装置１３２との間の信号のやり取りを仲介する機能を有する。
【００２６】
バスライン１２０は、プロセッサＡ１０１とプロセッサＢ１０２とＲＯＭ１０３とＲＡＭ１０４とハードディスク装置インターフェース１０５と出力装置インターフェース１０６と入力装置インターフェース１０７とに接続し、接続される回路間の信号を伝達する機能を有する。
【００２７】
ハードディスク装置１３０は、ハードディスク装置インターフェース１０５と接続し、プロセッサＡ１０１、又はプロセッサＢ１０２によって制御され、内蔵するハードディスクにデータを書き込む機能と、内蔵するハードディスクに書き込まれているデータを読み出す機能とを有する。
【００２８】
出力装置１３１は、出力装置インターフェース１０６と接続し、プロセッサＡ１０１、又はプロセッサＢ１０２によって制御され、内蔵するディスプレイを用いて文字列を表示する機能を有する。
【００２９】
入力装置１３２は、入力装置インターフェース１０７と接続し、プロセッサＡ１０１、又はプロセッサＢ１０２によって制御され、付属するキーボードとマウスとを通じてユーザからの操作コマンドを受け付け、受け付けた操作コマンドをプロセッサＡ１０１、又はプロセッサＢ１０２に送信する機能を有する。
【００３０】
上述のハードウエア構成の情報処理装置１００は、プロセッサＡ１０１とプロセッサＢ１０２とがプログラムを実行することによって、様々な機能を実現する。
以上のようなハードウエアで実現される情報処理装置１００について、以下図面を用いて、その機能構成を説明する。
【００３１】
図２は、情報処理装置１００の主要な機能ブロックの構成を示す機能ブロック図である。
同図に示す通り、情報処理装置１００は、アプリケーションプログラム記憶手段２２１とコンパイル手段２００とオブジェクトコード記憶手段２２２と変数情報記憶手段２２３とプログラム実行手段２１０とデータ記憶手段２２４とから構成される。
【００３２】
アプリケーションプログラム記憶手段２２１は、コンパイル手段２００と接続し、Ｃ言語等の高級言語で記述されたソースプログラムであるアプリケーションプログラムを記憶するための記憶領域であって、ハードディスク装置１３０に内蔵されているハードディスクの一部の領域として実装されている。
【００３３】
コンパイル手段２００は、アプリケーションプログラム記憶手段２２１とオブジェクトコード記憶手段２２２と変数情報記憶手段２２３とに接続し、アプリケーションプログラム記憶手段２２１に記憶されているソースプログラムであるアプリケーションプログラムをコンパイルしてオブジェクトコードと変数情報（後述）とを生成する機能と、生成したオブジェクトコードと変数情報とを、それぞれオブジェクトコード記憶手段２２２と変数情報記憶手段２２３とに記憶させる機能とを有する。
【００３４】
コンパイル手段２００は、第１ユーザ操作受付手段２０１とアプリケーションプログラム読み出し手段２０２とオブジェクトコード生成手段２０３と変数情報生成手段２０４とから構成される。
【００３５】
第１ユーザ操作受付手段２０１は、アプリケーションプログラム読み出し手段２０２と接続し、ユーザによる、アプリケーションプログラムをコンパイルする旨の操作コマンドを受け付ける機能と、受け付けた操作コマンドによって指定されるアプリケーションプログラムを特定する情報をアプリケーションプログラム読み出し手段２０２に出力する機能とを有する。
【００３６】
アプリケーションプログラム読み出し手段２０２は、第１ユーザ操作受付手段２０１とオブジェクトコード生成手段２０３とアプリケーションプログラム記憶手段２２１とに接続し、第１ユーザ操作受付手段２０１から出力される情報で指定されるアプリケーションプログラムを、アプリケーションプログラム記憶手段２２１から読み出してオブジェクトコード生成手段２０３に出力する機能を有する。
【００３７】
オブジェクトコード生成手段２０３は、アプリケーションプログラム読み出し手段２０２と変数情報生成手段２０４とオブジェクトコード記憶手段２２２とに接続し、以下の４つの機能を有する。
【００３８】
機能１：OpenMPをサポートする形式でアプリケーションプログラムをコンパイルするコンパイル機能。
OpenMPの仕様については、例えば、文献「OpenMP C and C++ Application Program Interface version1.0 - October 1998 Document Number004-2229-001」(発行元:OpenMP Architecture ReviewBoard)に記載されている。
【００３９】
機能２：コンパイルするアプリケーションプログラムにスレッドプライベート宣言されている変数がある場合に、そのスレッドプライベート宣言された変数と、スレッド毎に割り当てられたそのスレッドプライベート宣言された変数に対応するスレッドプライベート変数と、それらスレッドプライベート変数を記憶するための領域を示す論理アドレスとの組を変数情報生成手段２０４に出力する機能。
【００４０】
機能３：コンパイルするアプリケーションプログラムにスレッドプライベート宣言されていない変数がある場合に、その変数と、その変数を記憶するための領域を示す論理アドレスとの組を変数情報生成手段２０４に出力する機能。
【００４１】
機能４：コンパイルすることによって生成したオブジェクトコードを、オブジェクトコード記憶手段２２２に書き込む機能。
オブジェクトコード生成手段２０３のコンパイル機能はOpenMPをサポートするため、コンパイル対象のソースプログラムに＃pragma omp parallel形式で記述されるディレクティブが含まれている場合には、生成されるオブジェクトコードは、＃pragma omp parallel文で指定される節が、プロセッサＡ１０１が処理するスレッドと、プロセッサＢ１０２が処理するスレッドとの２つのスレッドとに分割する。
【００４２】
オブジェクトコード生成手段２０３は、ソースプログラムをコンパイルする際に、ソースプログラムから一端中間コードを生成し、生成した中間コードからオブジェクトコードを生成する。
【００４３】
以下、オブジェクトコード生成手段２０３のOpenMPをサポートするコンパイル機能について、図面を参照しながら具体例を用いて説明する。
図３は、アプリケーションプログラム記憶手段２２１に記憶されているアプリケーションプログラムの一例を示す図である。
【００４４】
アプリケーションプログラム３０１には、for文で指定される演算を１００回繰り返す処理が含まれており、この１００回繰り返す処理の部分を、複数のスレッド（ここではプロセッサが２つなので２つのスレッド）の処理に分割するようにコンパイルさせる旨のディレクティブ（＃pragma omp parallelで始まる文）が挿入されている。
【００４５】
また、このディレクティブによって、変数xと変数aと変数sumとがスレッドプライベート宣言されている。
図４は、オブジェクトコード生成手段２０３が、アプリケーションプログラム３０１をコンパイルする際に生成する中間コードである。
【００４６】
同図において、中間コード４００は、オブジェクトコード生成手段２０３が、アプリケーションプログラム３０１をコンパイルする際に生成する中間コードであって、スレッド１の処理４０１とスレッド２の処理４０２と処理４０３とを含んでいる。
【００４７】
オブジェクトコード生成手段２０３は、コンパイル対象のソースプログラムに＃pragma omp parallel形式で記述されるディレクティブが含まれている場合には、＃pragma omp parallel文で指定される節を２つのスレッドの処理に分割した中間コードを生成する。
【００４８】
オブジェクトコード生成手段２０３は、アプリケーションプログラム３０１の中に＃pragma omp parallel形式で記述されるディレクティブを見つけると、＃pragma omp parallel文で指定される節の構文を解析し、for文で指定される演算を１００回繰り返す処理を、for文で指定される演算を５０回繰り返すスレッド１の処理４０１と、for文で指定される演算を５０回繰り返すスレッド２の処理４０２と、最終的な演算結果であるsumを生成する処理４０３とを含む中間コードを生成する。
【００４９】
中間コード生成の際には、スレッドプライベート宣言された変数xをスレッド１用のスレッドプライベート変数x_1とスレッド２用のスレッドプライベート変数x_2とに割り当て、スレッドプライベート宣言された変数aをスレッド１用のスレッドプライベート変数a_1とスレッド２用のスレッドプライベート変数a_2とに割り当て、スレッドプライベート宣言された変数sumをスレッド１用のスレッドプライベート変数sum_1とスレッド２用のスレッドプライベート変数sum_2とに割り当てる。
【００５０】
中間コードが生成されると、オブジェクトコード生成手段２０３は、生成された中間コードからオブジェクトコードを生成する。
再び図２に戻って、情報処理装置１００の機能構成の説明を続ける。
【００５１】
変数情報生成手段２０４は、オブジェクトコード生成手段２０３と変数情報記憶手段２２３とに接続し、以下の２つの機能を有する。
機能１：オブジェクトコード生成手段２０３から出力されるスレッドプライベート宣言された変数とスレッド毎に割り当てられたそのスレッドプライベート宣言された変数に対応するスレッドプライベート変数とそのスレッドプライベート変数を記憶するための領域を示す論理アドレスとの組と、オブジェクトコード生成手段２０３から出力されるスレッドプライベート宣言された変数以外の変数とその変数を記憶するための領域を示す論理アドレスとの組とに基づいて変数情報を生成する機能。
【００５２】
機能２：生成された変数情報を変数情報記憶手段２２３に書き込む機能。
図５は、変数情報生成手段２０４によって生成される変数情報のデータ構成図である。
同図に示されるように、変数情報は、オリジナル変数ＩＤ５０１とスレッド１変数ＩＤ５０２と第１論理アドレス５０３とスレッド２変数ＩＤ５０４と第２論理アドレス５０５とを対応付けたものである。
【００５３】
オリジナル変数ＩＤ５０１は、アプリケーションプログラムで定義されている変数を示す情報である。
スレッド１変数ＩＤ５０２は、対応するオリジナル変数ＩＤ５０１によって示される変数がスレッドプライベート宣言されている場合には、その変数に対応するスレッド１に割り当てられたスレッドプライベート変数を示す情報であり、対応するオリジナル変数ＩＤ５０１によって示される変数がスレッドプライベート宣言されていない場合には、その変数を示す情報である。
【００５４】
第１論理アドレス５０３は、対応するスレッド１変数ＩＤ５０２によって示される変数を記憶するための領域を示す論理アドレスである。
スレッド２変数ＩＤ５０４は、対応するオリジナル変数ＩＤ５０１によって示される変数がスレッドプライベート宣言されている場合には、その変数に対応する、スレッド２に割り当てられたスレッドプライベート変数を示す情報であり、対応するオリジナル変数ＩＤ５０１によって示される変数がスレッドプライベート宣言されていない場合には、空値となる。
【００５５】
第２論理アドレス５０５は、対応するスレッド２変数ＩＤ５０４によって示される変数を記憶するための領域を示す論理アドレスであって、対応するスレッド２変数ＩＤ５０４が空値の場合には、空値となる。
【００５６】
再び図２に戻って、情報処理装置１００の機能構成の説明を続ける。
オブジェクトコード記憶手段２２２は、コンパイル手段２００とプログラム実行手段２１０とに接続し、コンパイル手段２００のオブジェクトコード生成手段２０３から出力されるオブジェクトコードを記憶するための記憶領域であって、ハードディスク装置１３０に内蔵されているハードディスクの一部の領域として実装されている。
【００５７】
変数情報記憶手段２２３は、コンパイル手段２００とプログラム実行手段２１０とに接続し、コンパイル手段２００の変数情報生成手段２０４から出力される変数情報を記憶するための記憶領域であって、ハードディスク装置１３０に内蔵されているハードディスクの一部の領域として実装されている。
【００５８】
データ記憶手段２２４は、プログラム実行手段２１０と接続し、オブジェクトコード記憶手段２２２に記憶されているオブジェクトコードがロードされ、そのオブジェクトコードによって利用されるための記憶領域であって、ＲＡＭ１０４の一部の領域として実装されている。
【００５９】
データ記憶手段２２４の記憶領域は、物理アドレスによって指定される。
プログラム実行手段２１０は、オブジェクトコード記憶手段２２２と変数情報記憶手段２２３とデータ記憶手段２２４とに接続し、オブジェクトコード記憶手段２２２に記憶されているオブジェクトコードを実行する機能を有する。
【００６０】
プログラム実行手段２１０は、第２ユーザ操作受付手段２１１とオブジェクトコードロード手段２１２とアドレス対応テーブル生成手段２１３とアドレス対応テーブル記憶手段２１４とオブジェクトコード実行手段２１５とメモリアクセス手段２１６とから構成される。
【００６１】
第２ユーザ操作受付手段２１１は、オブジェクトコードロード手段２１２と接続し、ユーザによる、オブジェクトコードを実行する旨の操作コマンドを受け付ける機能と、受け付けた操作コマンドによって指定されるオブジェクトコードを特定する情報をオブジェクトコードロード手段２１２に出力する機能とを有する。
【００６２】
オブジェクトコードロード手段２１２は、オブジェクトコード記憶手段２２２と第２ユーザ操作受付手段２１１とアドレス対応テーブル生成手段２１３とオブジェクトコード実行手段２１５とデータ記憶手段２２４とに接続し、以下の４つの機能を有する。
【００６３】
機能１：第２ユーザ操作受付手段２１１から出力される情報で指定されるロード対象のオブジェクトコードを、オブジェクトコード記憶手段２２２から読み出して、そのオブジェクトコードで利用される記憶領域を示す論理アドレスのそれぞれに物理アドレスを対応付けて、対応付けた論理アドレスと物理アドレスとの組をアドレス対応テーブル生成手段２１３に出力する機能。
【００６４】
機能２：ロード対象のオブジェクトコードを、データ記憶手段２２４にロードする機能。
機能３：ロード対象のオブジェクトコードを特定するための情報をアドレス対応テーブル生成手段２１３に出力する機能。
【００６５】
機能４：アドレス対応テーブル生成手段２１３によって生成されるアドレス対応テーブル（後述）を参照して、第１物理アドレス（後述）によって指定されるデータ記憶手段２２４の領域に初期値を代入して初期化する機能。
【００６６】
アドレス対応テーブル生成手段２１３は、変数情報記憶手段２２３とオブジェクトコードロード手段２１２とアドレス対応テーブル記憶手段２１４とに接続し、以下の２つの機能を有する。
【００６７】
機能１：オブジェクトコードロード手段２１２から出力される情報で指定されるオブジェクトコードに対応する変数情報を変数情報記憶手段２２３から読み出す機能。
機能２：変数情報記憶手段２２３から読み出した変数情報と、オブジェクトコードロード手段２１２から出力される論理アドレスと物理アドレスとの組とに基づいて、アドレス対応テーブルを生成してアドレス対応テーブル記憶手段２１４に書き込む機能。
【００６８】
図６は、アドレス対応テーブル生成手段２１３によって生成されるアドレス対応テーブルのデータ構成図である。
同図に示されるように、アドレス対応テーブルは、変数ＩＤ６０１と論理アドレス６０２と第１物理アドレス６０３と第２物理アドレス６０４と状態フラグ６０５と対変数ＩＤ６０６とスレッド番号６０７とを対応付けたものである。
【００６９】
変数ＩＤ６０１は、オブジェクトコードに対応するアプリケーションプログラムで利用される変数を示す情報であって、対応する変数情報に含まれるスレッド１変数ＩＤ５０２（図５参照）、又はスレッド２変数ＩＤ５０４に対応するものである。
【００７０】
論理アドレス６０２は、対応する変数ＩＤ６０１によって示される変数を記憶するための領域を示す論理アドレスである。
第１物理アドレス６０３は、対応する変数ＩＤ６０１によって示される変数がスレッド１で利用されるスレッドプライベート変数である場合には、その変数を記憶するための領域を示す物理アドレスであり、対応する変数ＩＤ６０１によって示される変数がスレッド２で利用されるスレッドプライベート変数である場合には、その変数に対応するスレッド１で利用されるスレッドプライベート変数を記憶するための領域を示す物理アドレスであり、対応する変数ＩＤ６０１によって示される変数が、スレッドプライベート変数でない場合にはその変数を記憶するための領域を示す物理アドレスである。
【００７１】
第２物理アドレス６０４は、対応する変数ＩＤ６０１によって示される変数がスレッド１で利用されるスレッドプライベート変数である場合には、その変数に対応するスレッド２で利用されるスレッドプライベート変数を記憶するための領域を示す物理アドレスであり、対応する変数ＩＤ６０１によって示される変数がスレッド２で利用されるスレッドプライベート変数である場合にはその変数を記憶するための領域を示す物理アドレスであり、対応する変数ＩＤ６０１によって示される変数が、スレッドプライベート変数でない場合には空値となる。
【００７２】
状態フラグ６０５は、”0”又は”1”のいずれか一方の値となるフラグであって、初期状態は”0”に設定されている。
ここで、状態フラグ６０５の値”0”は、対応する第１物理アドレス６０３によって示される領域、及び対応する第２物理アドレス６０４によって示される領域に、オブジェクトコードに含まれる命令によって書き込みが行われたことがないことを示す。
【００７３】
また、状態フラグ６０５の値”1”は、対応する第１物理アドレス６０３によって示される領域、又は対応する第２物理アドレス６０４によって示される領域に、オブジェクトコードに含まれる命令によって書き込みが行われたことがあることを示す。
【００７４】
対変数ＩＤ６０６は、対応する変数ＩＤ６０１によって示される変数がスレッドプライベート変数である場合には、その変数と対になるスレッドプライベート変数を示す情報であり、対応する変数ＩＤ６０１によって示される変数がスレッドプライベート変数でない場合は、空値となる。
【００７５】
スレッド番号６０７は、対応する変数ＩＤによって示される変数がスレッドプライベート変数である場合には、その変数が利用されるスレッドを示す情報であり、対応する変数ＩＤ６０１によって示される変数がスレッドプライベート変数でない場合は、空値となる。
【００７６】
ここではプロセッサの数が２つなので、対変数ＩＤ６０６の値は、”1”、”2”、又は空値のいずれか１つとなる。
再び図２戻って、情報処理装置１００の機能構成の説明を続ける。
【００７７】
アドレス対応テーブル記憶手段２１４は、オブジェクトコードロード手段２１２とアドレス対応テーブル生成手段２１３とメモリアクセス手段２１６とに接続し、アドレス対応テーブルを記憶するための記憶領域であって、ＲＡＭ１０４の一部の領域として実装されている。
【００７８】
オブジェクトコード実行手段２１５は、オブジェクトコードロード手段２１２とメモリアクセス手段２１６とに接続し、オブジェクトコードロード手段２１２によってデータ記憶手段２２４にロードされたオブジェクトコードを実行する機能を有する。
【００７９】
オブジェクトコード実行手段２１５は、オブジェクトコードを実行する場合においてデータ記憶手段２２４にアクセスするときには、メモリアクセス手段２１６を介してデータ記憶手段２２４にアクセスする。
【００８０】
メモリアクセス手段２１６は、オブジェクトコード実行手段２１５とデータ記憶手段２２４とアドレス対応テーブル記憶手段２１４とに接続し、オブジェクトコード実行手段２１５がデータ記憶手段２２４をアクセスするために用いる論理アドレスを、アドレス対応テーブル記憶手段２１４に記憶されているアドレス対応テーブルを用いて物理アドレスに変換し、変換した物理アドレスを用いて、データ記憶手段２２４へのアクセスを行う機能と、アドレス対応テーブル記憶手段２１４に記憶されているアドレス対応テーブルを書き換える機能とを有する。
【００８１】
以上のように構成される情報処理装置１００の行う動作について、以下、図面を参照しながら説明する。
＜動作＞
ここでは、情報処理装置１００の行う動作のうち、特徴的な動作である、コンパイル手段２００の行うコンパイル処理と、プログラム実行手段２１０の行うプログラム実行処理とについて説明する。
【００８２】
＜コンパイル処理＞
コンパイル処理は、ユーザによって指定されるアプリケーションプログラムをアプリケーションプログラム記憶手段２２１から読み出してコンパイルし、オブジェクトコードと変数情報とを生成する処理である。
【００８３】
図７は、コンパイル手段２００の行うコンパイル処理のフローチャートである。
第１ユーザ操作受付手段２０１がユーザからのアプリケーションプログラムをコンパイルする旨の操作コマンドを受け付けると（ステップＳ７００）、受け付けた操作コマンドによって指定されるアプリケーションプログラムを特定する情報をアプリケーションプログラム読み出し手段２０２に出力する。
【００８４】
アプリケーションプログラム読み出し手段２０２は、アプリケーションプログラムを特定する情報を受け取ると、その情報で特定されるアプリケーションプログラムをアプリケーションプログラム記憶手段２２１から読み出して（ステップＳ７１０）、オブジェクトコード生成手段２０３に出力する。
【００８５】
オブジェクトコード生成手段２０３は、アプリケーションプログラムを受け取ると、受け取ったアプリケーションプログラムの構文解析を行い（ステップＳ７２０）、複数のスレッド（ここではプロセッサが２つなので２つのスレッド）の処理に分割するようにコンパイルさせる旨のディレクティブ（＃pragma omp parallelで始まる文）の有無を調べる（ステップＳ７３０）。
【００８６】
ステップＳ７３０において、複数のスレッドの処理に分割するようにコンパイルさせる旨のディレクティブがある場合（ステップＳ７３０：Ｙｅｓ）、オブジェクトコード生成手段２０３は、＃pragma omp parallel文で指定される節をスレッド１用の処理とスレッド２用の処理との２つの処理に分割して中間コードを生成する（ステップＳ７４０）。
【００８７】
オブジェクトコード生成手段２０３は、中間コード生成時に、スレッドプライベート宣言された変数を、スレッド１用のスレッドプライベート変数とスレッド２用のスレッドプライベート変数とに割り当てる。
【００８８】
ステップＳ７３０において、複数のスレッドの処理に分割するようにコンパイルさせる旨のディレクティブがない場合（ステップＳ７３０：Ｎｏ）、オブジェクトコード生成手段２０３は、オブジェクトコードを複数のスレッドの処理に分割することなく、中間コードを生成する（ステップＳ７５０）。
【００８９】
ステップＳ７４０の処理が終了する、又はステップＳ７５０の処理が終了すると、オブジェクトコード生成手段２０３は中間コードからオブジェクトコードを生成し、生成したオブジェクトコードをオブジェクトコード記憶手段２２２に書き込む（ステップＳ７６０）。
【００９０】
オブジェクトコード生成手段２０３は、オブジェクトコード生成時に、アプリケーションプログラムで用いられている変数それぞれについて、変数がスレッドプライベート宣言された変数であれば、そのスレッドプライベート宣言された変数と、スレッド毎に割り当てられたそのスレッドプライベート宣言された変数に対応するスレッドプライベート変数と、そのスレッドプライベート変数を記憶するための領域を示す論理アドレスとの組を変数情報生成手段２０４に出力し、変数がスレッドプライベート宣言されていない変数であれば、その変数と、その変数を記憶するための領域を示す論理アドレスとの組を変数情報生成手段２０４に出力する。
【００９１】
ステップＳ７６０の処理が終わると、変数情報生成手段２０４は、オブジェクトコード生成手段２０３から出力された変数と論理アドレスとの組に基づいて、変数情報を生成し、生成した変数情報を変数情報記憶手段２２３に書き込む（ステップＳ７７０）。
【００９２】
ステップＳ７７０の処理が終わると、コンパイル手段２００は、コンパイル処理を終了する。
＜プログラム実行処理＞
プログラム実行処理は、ユーザによって指定されるオブジェクトコードをオブジェクトコード記憶手段２２２から読み出して、読み出したオブジェクトコードをロードして実行する処理である。
【００９３】
図８は、プログラム実行手段２１０が行うプログラム実行処理のフローチャートである。
第２ユーザ操作受付手段２１１がユーザからのオブジェクトコードを実行する旨の操作コマンドを受け付けると（ステップＳ８００）、受け付けた操作コマンドによって指定されるオブジェクトコードを特定する情報をオブジェクトコードロード手段２１２に出力する。
【００９４】
オブジェクトコードロード手段２１２は、オブジェクトコードを特定する情報を受け取ると、その情報で特定されるオブジェクトコードをオブジェクトコード記憶手段２２２から読み出して、オブジェクトコードで利用される記憶領域を示す論理アドレスのそれぞれに物理アドレスを対応付けて、対応付けた論理アドレスと物理アドレスとの組をアドレス対応テーブル生成手段２１３に出力し、読み出したオブジェクトコードをデータ記憶手段２２４にロードする（ステップＳ８１０）。
【００９５】
ステップＳ８１０の処理が終了すると、アドレス対応テーブル生成手段２１３は、オブジェクトコードロード手段２１２から出力される論理アドレスと物理アドレスとの組と、変数情報記憶手段２２３に記憶されている、オブジェクトコードに対応する変数情報とに基づいて、アドレス対応テーブルを生成する（アドレス対応テーブル生成処理：ステップＳ８２０）。
【００９６】
図９は、ステップＳ８２０であるアドレス対応テーブル生成処理のフローチャートである。
アドレス対応テーブル生成処理は、アドレス対応テーブル生成手段２１３が、変数情報の第１論理アドレス５０３（図５参照）と第２論理アドレス５０５とのそれぞれに対して、物理アドレス等を対応付けてアドレス対応テーブルを生成する処理である。
【００９７】
アドレス対応テーブル生成手段２１３は、オブジェクトコードロード手段２１２から出力される情報で指定されるオブジェクトコードに対応する変数情報を変数情報記憶手段２２３から読み出し、読み出した変数情報に含まれる第１論理アドレス、又は第２論理アドレスの中から１つの論理アドレスを選択する。
【００９８】
１つの論理アドレスを選択すると、アドレス対応テーブル生成手段２１３は、対応付けられている変数がスレッドプライベート変数であるか否かを調べる（ステップＳ９００）。
【００９９】
スレッドプライベート変数であるか否かの判断は、選択されている論理アドレスにスレッド１変数ＩＤ５０２とスレッド２変数ＩＤ５０４との双方が対応付けられているか否かによって判断される。
【０１００】
ステップＳ９００の処理において、対象の変数がスレッドプライベート変数である場合には（ステップＳ９００：Ｙｅｓ）、アドレス対応テーブル生成手段２１３は、対となるスレッドプライベート変数が、生成中のアドレス対応テーブルの中に既に存在していないか存在しているかを調べる（ステップＳ９１０）。
【０１０１】
ステップＳ９１０の処理において、対となるスレッドプライベート変数を示す変数ＩＤが、生成中のアドレス対応テーブルの中に存在していない場合には（ステップＳ９１０：Ｙｅｓ）、アドレス対応テーブル生成手段２１３は、（１）変数情報において対象の変数に対応付けられている第１論理アドレスに対応付けられている物理アドレスを第１物理アドレス６０３（図６参照）とし、（２）変数情報において対象の変数に対応付けられている第２論理アドレスに対応付けられている物理アドレスを第２物理アドレス６０４とし、（３）選択中の論理アドレス６０２に、第１物理アドレス６０３と第２物理アドレス６０４と対応する変数を示す変数ＩＤ６０１とを対応付ける（ステップＳ９２０）。
【０１０２】
ステップＳ９１０の処理において、対となるスレッドプライベート変数を示す変数ＩＤが、生成中のアドレス対応テーブルの中に存在している場合には（ステップＳ９１０：Ｎｏ）、アドレス対応テーブル生成手段２１３は、選択中の論理アドレス６０２に、対となるスレッドプライベート変数を示す変数ＩＤ６０１に対応付けられている第１物理アドレス６０３と第２物理アドレス６０４と、対応する変数を示す変数ＩＤ６０１とを対応付ける（ステップＳ９３０）。
【０１０３】
ステップＳ９２０の処理が終了した場合、又はステップＳ９３０の処理が終了した場合に、アドレス対応テーブル生成手段２１３は、選択中の論理アドレスに、対となるスレッドプライベート変数を示す変数ＩＤを対変数ＩＤ６０６として対応付け（ステップＳ９４０）て、さらに、その論理アドレスが使用されるスレッドを示すスレッド番号６０７を対応付ける（ステップＳ９５０）。
【０１０４】
ステップＳ９００の処理において、対象の変数がスレッドプライベート変数でない場合には（ステップＳ９００：Ｎｏ）、アドレス対応テーブル生成手段２１３は、（１）対応付けられている物理アドレスを第１物理アドレスとし、（２）空値を第２物理アドレスとし、（３）空値を対変数ＩＤとし、（４）空値をスレッド番号として、（５）選択中の論理アドレス６０２に、第１物理アドレス６０３と第２物理アドレス６０４と対変数ＩＤ６０６とスレッド番号６０７とを対応付ける（ステップＳ９６０）。
【０１０５】
ステップＳ９５０の処理が終了した場合、又はステップＳ９６０の処理が終了した場合に、アドレス対応テーブル生成手段２１３は、さらに、選択中の論理アドレスに初期値”0”で初期化された状態フラグ６０５を対応付ける（ステップＳ９７０）。
【０１０６】
ステップＳ９７０の処理が終わると、アドレス対応テーブル生成手段２１３は、変数情報に含まれる第１論理アドレス、又は第２論理アドレスの中に、未だ選択されていない論理アドレスが存在するか否かを調べる（ステップＳ９８０）。
【０１０７】
ステップＳ９８０の処理において、未だ選択されていない論理アドレスが存在する場合には（ステップＳ９８０：Ｙｅｓ）、アドレス対応テーブル生成手段２１３は、未だ選択されていない論理アドレスの中から１つの論理アドレスを選択し（ステップＳ９９０）、再びステップＳ９００の処理に戻って、ステップＳ９００以降の処理を行う。
【０１０８】
ステップＳ９８０の処理において、未だ選択されていない論理アドレスが存在しない場合には（ステップＳ９８０：Ｎｏ）、アドレス対応テーブル生成手段２１３は、そのアドレス対応テーブル生成処理を終了する。
【０１０９】
再び図８に戻って、プログラム実行処理の説明を続ける。
ステップＳ８２０の処理が終わると、アドレス対応テーブル生成手段２１３は、生成したアドレス対応テーブルをアドレス対応テーブル記憶手段に書き込む（ステップＳ８３０）。
【０１１０】
ステップＳ８３０の処理が終わると、オブジェクトコードロード手段２１２は、アドレス対応テーブル生成手段２１３によって生成されたアドレス対応テーブルを参照して、第１物理アドレスによって指定されるデータ記憶手段２２４の領域にのみ初期値を代入して初期化する（ステップＳ８４０）。
【０１１１】
ステップＳ８４０の処理が終わると、オブジェクトコード実行手段２１５は、データ記憶手段２２４にロードされたオブジェクトコードを実行する（オブジェクトコード実行処理：ステップＳ８５０）。
【０１１２】
オブジェクトコード実行手段２１５は、オブジェクトコードを実行する場合において、データ記憶手段２２４への書き込み命令、又はデータ記憶手段２２４からの読み出し命令があるとき、メモリアクセス手段２１６を用いてデータ記憶手段２２４への書き込み、又はデータ記憶手段２２４からの読み出しを行う。
【０１１３】
図１０、図１１は、ステップＳ８５０であるオブジェクトコード実行処理のフローチャートである。
オブジェクトコード実行手段２１５は、オブジェクトコードに含まれる命令を１つずつ順に実行する。
【０１１４】
オブジェクトコード実行手段２１５は、実行対象となる命令が書き込み命令か否かを調べて（ステップＳ１０００）、その命令が書き込み命令である場合には（ステップＳ１０００：Ｙｅｓ）、メモリアクセス手段２１６は、アドレス対応テーブル記憶手段２１４に記憶されているアドレス対応テーブルを参照して、その書き込み命令で指定される論理アドレスに対応する変数がスレッドプライベート変数か否かを調べる（ステップＳ１００５）。
【０１１５】
書き込み命令で指定される論理アドレスに対応する変数がスレッドプライベート変数か否かは、対応する対変数ＩＤ６０６を調べることで判定する。
すなわち、対応する対変数ＩＤ６０６が空値でない場合にはスレッドプライベート変数であると判定し、対応する対変数ＩＤ６０６が空値である場合にはスレッドプライベート変数ではないと判定する。
【０１１６】
ステップＳ１００５の処理において、その書き込み命令で指定される論理アドレスに対応する変数がスレッドプライベート変数である場合に（ステップＳ１００５：Ｙｅｓ）、メモリアクセス手段２１６は、その書き込み命令で指定される論理アドレスと対応する状態フラグ６０５（図６参照）の値が”0”であるか否かを調べる（ステップＳ１０１０）。
【０１１７】
ステップＳ１０１０の処理において、状態フラグ６０５の値が”0”の場合には（ステップＳ１０１０：Ｙｅｓ）、メモリアクセス手段２１６は、その状態フラグ６０５の値を”1”とし、さらに、対応する対変数ＩＤ６０６と等しい変数ＩＤ６０１に対応付けられている状態フラグ６０５の値を”1”とする（ステップＳ１０１５）。
【０１１８】
ステップＳ１０１５の処理が終わると、メモリアクセス手段２１６は、書き込み命令で指定される論理アドレスに対応する変数がスレッド１で利用される変数であるか否かを調べる（ステップＳ１０２０）。
【０１１９】
書き込み命令で指定される論理アドレスに対応する変数がスレッド１で利用される変数であるか否かは、対応するスレッド番号６０７の値を調べることで判定する。
すなわち、対応するスレッド番号６０７の値が”1”であれば、スレッド１で利用される変数であると判定し、”2”又は空値であれば、スレッド１で利用される変数ではないと判定する。
【０１２０】
ステップＳ１０２０の処理において、スレッド１で利用される変数である場合には（ステップＳ１０２０：Ｙｅｓ）、メモリアクセス手段２１６は、第１物理アドレス６０３で指定される領域に書き込まれているデータを、第２物理アドレス６０４で指定される領域に書き込む（ステップＳ１０２５）。
【０１２１】
ステップＳ１０２５の処理が終了した場合、又はステップＳ１００５の処理において、スレッドプライベート変数でない場合に（ステップＳ１００５：Ｎｏ）、メモリアクセス手段２１６は、第１物理アドレスで指定される領域への書き込みを実施する（ステップＳ１０３０）。
【０１２２】
ステップＳ１０２０の処理において、スレッド２で利用される変数である場合には（ステップＳ１０２０：Ｎｏ）、メモリアクセス手段２１６は、第２物理アドレスで指定される領域への書き込みを実施する（ステップＳ１０３５）。
【０１２３】
ステップＳ１０１０の処理において、状態フラグ６０５の値が”1”の場合には（ステップＳ１０１０：Ｎｏ）、メモリアクセス手段２１６は、書き込み命令で指定される論理アドレスに対応する変数がスレッド１で利用される変数であるか否かを調べる（ステップＳ１１００）。
【０１２４】
ステップＳ１１００の処理において、スレッド１で利用される変数である場合には（ステップＳ１１００：Ｙｅｓ）、メモリアクセス手段２１６は、第１物理アドレスで指定される領域への書き込みを実施し（ステップＳ１１１０）、スレッド２で利用される変数である場合には（ステップＳ１１００：Ｎｏ）、メモリアクセス手段２１６は、第２物理アドレスで指定される領域への書き込みを実施する（ステップＳ１１２０）。
【０１２５】
ステップＳ１０００の処理において、その命令が書き込み命令でない場合には（ステップＳ１０００：Ｎｏ）、オブジェクトコード実行手段２１５は、その命令が読み出し命令であるか否かを調べる（ステップＳ１０４０）。
【０１２６】
ステップＳ１０４０の処理において、その命令が読み出し命令である場合には（ステップＳ１０４０：Ｙｅｓ）、メモリアクセス手段２１６は、読み出し命令で指定される論理アドレスに対応する変数がスレッドプライベート変数であるか否かを調べる（ステップＳ１１３０）。
【０１２７】
ステップＳ１１３０の処理において、その読み出し命令で指定される論理アドレスに対応する変数がスレッドプライベート変数である場合には（ステップＳ１１３０：Ｙｅｓ）、その読み出し命令で指定される論理アドレスと対応する状態フラグ６０５の値が”0”であるか否かを調べる（ステップＳ１１４０）。
【０１２８】
ステップＳ１１４０の処理において、状態フラグ６０５の値が”0”の場合（ステップＳ１０４０：Ｙｅｓ）、又はステップＳ１１３０の処理において、スレッドプライベート変数でない場合には（ステップＳ１１３０：Ｎｏ）、メモリアクセス手段２１６は、第１物理アドレスで指定される領域からの読み出しを実施する（ステップＳ１１５０）。
【０１２９】
ステップＳ１１４０の処理において、状態フラグ６０５の値が”1”の場合には（ステップＳ１０４０：Ｎｏ）、メモリアクセス手段２１６は、書き込み命令で指定される論理アドレスに対応する変数がスレッド１で利用される変数であるか否かを調べる（ステップＳ１１６０）。
【０１３０】
ステップＳ１１６０の処理において、スレッド１で利用される変数である場合には（ステップＳ１１６０：Ｙｅｓ）、メモリアクセス手段２１６は、第１物理アドレスで指定される領域からの読み出しを実施し（ステップＳ１１７０）、スレッド２で利用される変数である場合には（ステップＳ１１６０：Ｎｏ）、メモリアクセス手段２１６は、第２物理アドレスで指定される領域からの読み出しを実施する（ステップＳ１１８０）。
【０１３１】
ステップＳ１０４０の処理において、その命令が読み出し命令でない場合には（ステップＳ１０４０：Ｎｏ）、オブジェクトコード実行手段２１５は、データ記憶手段２２４を利用せずにその命令を実行する（ステップＳ１１９０）。
【０１３２】
ステップＳ１０３０の処理が終了した場合、ステップＳ１０３５の処理が終了した場合、ステップＳ１１１０の処理が終了した場合、ステップＳ１１２０の処理が終了した場合、ステップＳ１１５０の処理が終了した場合、ステップＳ１１７０の処理が終了した場合、ステップＳ１１８０の処理が終了した場合、又はステップＳ１１９０の処理が終了した場合には、オブジェクトコード実行手段２１５は、次の命令があるか否かを調べる（ステップＳ１０４５）。
【０１３３】
ステップＳ１０４５の処理において、次の命令がある場合には（ステップＳ１０４５：Ｙｅｓ）、次の命令を選択して（ステップＳ１０５０）、再びステップＳ１０００の処理に戻って、ステップＳ１０００以降の処理を行う。
【０１３４】
ステップＳ１０４５の処理において、次の命令が存在しない場合には（ステップＳ１０４５：Ｎｏ）、オブジェクトコード実行手段２１５は、メモリアクセス手段２１６を用いて行うオブジェクトコード実行処理を終了する。
【０１３５】
再び図８に戻って、プログラム実行処理の説明を続ける。
ステップＳ８５０の処理を終了すると、プログラム実行手段２１０は、そのプログラム実行処理を終了する。
【０１３６】
＜具体例＞
以上のように動作する情報処理装置１００の具体的動作例について、以下、図面を参照しながら説明する。
【０１３７】
ここでは、アドレス対応テーブル記憶手段２１４に記憶されているアドレス対応テーブルが図６で示されるものである場合において、各状態フラグ６０５が”0”で初期化されているときの論理アドレスと物理アドレスとの対応関係と、各状態フラグ６０５が”1”となっているときの論理アドレスと物理アドレスとの対応関係とについて説明する。
【０１３８】
図１２（Ａ）は、各状態フラグ６０５が”0”で初期化されている場合において論理アドレスを物理アドレスに変換するときの、論理アドレスと物理アドレスとの対応関係を示す図で、図１２（Ｂ）は、状態フラグ６０５が”1”である論理アドレスを物理アドレスに変換するときの、論理アドレスと物理アドレスとの対応関係を示す図である。
【０１３９】
図１２（Ａ）、（Ｂ）において、論理アドレス領域１２０１は論理アドレス0x0000 0000を開始アドレスとする４Ｂｙｔｅの領域であって、変数ＩＤ６０１（図６参照）が”x_1”で示されるスレッド１で利用されるスレッドプライベート変数（以下、変数ｘ＿１という。）に割り当てられた領域である。
【０１４０】
論理アドレス領域１２０２は論理アドレス0x0000 0004を開始アドレスとする４Ｂｙｔｅの領域であって、変数ＩＤ６０１が”x_2”で示されるスレッド２で利用されるスレッドプライベート変数（以下、変数ｘ＿２という。）に割り当てられた領域である。
【０１４１】
論理アドレス領域１２０３は論理アドレス0x0000 0008を開始アドレスとする４Ｂｙｔｅの領域であって、変数ＩＤ６０１が”a_1”で示されるスレッド１で利用されるスレッドプライベート変数（以下、変数ａ＿１という。）に割り当てられた領域である。
【０１４２】
論理アドレス領域１２０４は論理アドレス0x0000 000Cを開始アドレスとする４Ｂｙｔｅの領域であって、変数ＩＤ６０１が”a_2”で示されるスレッド２で利用されるスレッドプライベート変数（以下、変数ａ＿２という。）に割り当てられた領域である。
【０１４３】
物理アドレス領域１２１１は物理アドレス0x1000 0000を開始アドレスとする４Ｂｙｔｅの領域であって、物理アドレス領域１２１２は物理アドレス0x1000 0004を開始アドレスとする４Ｂｙｔｅの領域であって、物理アドレス領域１２１３は物理アドレス0x1000 0008を開始アドレスとする４Ｂｙｔｅの領域であって、物理アドレス領域１２１４は物理アドレス0x1000 000Cを開始アドレスとする４Ｂｙｔｅの領域である。
【０１４４】
図１２（Ａ）に示されるように、各状態フラグ６０５が”0”で初期化されている場合において論理アドレスが物理アドレスに変換されるときは、変数ｘ＿１用の論理アドレス領域１２０１と、変数ｘ＿２用の論理アドレス領域１２０２とが、共通の物理アドレス領域１２１１に変換され、変数ａ＿１用の論理アドレス領域１２０３と、変数ａ＿２用の論理アドレス領域１２０４とが、共通の物理アドレス領域１２１３に変換される。
【０１４５】
その後、変数ｘ＿１用の論理アドレス領域１２０１、又は変数ｘ＿２用の論理アドレス領域１２０２への書き込みが行われて、変数ａ＿１用の論理アドレス領域１２０３、又は変数ａ＿２用の論理アドレス領域１２０４への書き込みが行われて、各状態フラグ６０５が”1”に書き換えられると、図１２（Ｂ）に示されるように、対応する状態フラグ６０５が”1”である場合において論理アドレスを物理アドレスに変換されるときには、変数ｘ＿１用の論理アドレス領域１２０１が物理アドレス領域１２１１に変換され、変数ｘ＿２用の論理アドレス領域１２０２が物理アドレス領域１２１２に変換され、変数ａ＿１用の論理アドレス領域１２０３が物理アドレス領域１２１３に変換され、変数ａ＿２用の論理アドレス領域１２０４が物理アドレス領域１２１３に変換される。
【０１４６】
＜まとめ＞
上述の情報処理装置１００によれば、スレッド１で利用されるスレッドプライベート変数に対応付けられた第１論理アドレスで指定される領域と、その変数に対応するスレッド２で利用されるスレッドプライベート変数に対応付けられた第２論理アドレスで指定される領域とは、いずれかのスレッドプライベート変数への書き込みが行われるまでは、共通の第１物理アドレスで指定される領域を利用し、いずれかのスレッドプライベート変数への書き込みが行われた後は、それぞれ、第１物理アドレスで指定される領域と第２物理アドレスで指定される領域とを利用する。
【０１４７】
また、上述の情報処理装置１００によれば、第２物理アドレスで指定される領域へのデータの書き込みは、スレッド１で利用されるスレッドプライベート変数、又はスレッド２で利用されるスレッドプライベート変数のいずれかに書き込みが行われた場合に限って行われる。
【０１４８】
従って、アプリケーションプログラムによって書き込まれる必要のない論理アドレスによって指定される領域のデータを、物理アドレスによって指定される領域に書き込んでしまう無駄な書き込み動作の発生頻度を、従来よりも少なくすることができる。
＜実施の形態２＞
以下、本実施の形態に係る情報処理装置の一実施形態として、実施の形態１に係る情報処理装置１００の一部を変形した実施の形態２に係る変形情報処理装置について説明する。
【０１４９】
変形情報処理装置は、ハードウエア構成が情報処理装置１００と同一であるが、プロセッサＡ１０１、又はプロセッサＢ１０２によって実行されるソフトウエアの一部が、情報処理装置１００におけるソフトウエアから変形されたものとなっている。従って、変形情報処理装置によって実現される機能の一部は、情報処理装置１００によって実現される機能から変形されている。
【０１５０】
この変形情報処理装置は、記憶領域の管理を４０９６Ｂｙｔｅのサイズをもつページ単位で行い、互いに異なるスレッドによって利用される論理領域は、互いに異なる論理ページ群に割り当てられ、互いに異なるスレッドで利用される対応付けられたスレッドプライベート変数を記憶するための領域には、互いに等しいページ内オフセットが割り当てられる。
【０１５１】
以下、本実施の形態２に係る変形情報処理装置の構成について、実施の形態１に係る情報処理装置１００との相違点を中心に、図面を参照しながら説明する。
＜構成＞
図１３は、変形情報処理装置の主要な機能ブロックの構成を示すブロック図である。
【０１５２】
変形情報処理装置は、情報処理装置１００の一部が変形されたものであって、コンパイル手段２００がコンパイル手段１３００に変形され、プログラム実行手段２１０がプログラム実行手段１３１０に変形されたものである。
【０１５３】
コンパイル手段１３００は、オブジェクトコード生成手段２０３がオブジェクトコード生成手段１３０３に変形され、変数情報生成手段２０４が変数情報生成手段１３０４に変形されたものであり、プログラム実行手段１３１０は、オブジェクトコードロード手段２１２がオブジェクトコードロード手段１３１２に変形され、アドレス対応テーブル生成手段２１３がアドレス対応テーブル生成手段１３１３に変形され、メモリアクセス手段２１６がメモリアクセス手段１３１６に変形したものである。
【０１５４】
オブジェクトコード生成手段１３０３は、実施の形態１におけるオブジェクトコード生成手段２０３の一部の機能が変形されたものであり、アプリケーションプログラム読み出し手段２０２と変数情報生成手段１３０４とオブジェクトコード記憶手段２２２とに接続し、オブジェクトコード生成手段２０３の有する機能１と機能４とに加えて、以下の３つの機能を有する。
【０１５５】
機能２ａ：コンパイルするアプリケーションプログラムにスレッドプライベート宣言されている変数がある場合に、そのスレッドプライベート宣言された変数と、スレッド毎に割り当てられたそのスレッドプライベート宣言された変数に対応するスレッドプライベート変数と、それらスレッドプライベート変数を記憶するための領域に対応する論理ページアドレスと、それらスレッドプライベート変数を記憶するための領域を示すページ内オフセットとの組を変数情報生成手段１３０４に出力する機能。
【０１５６】
機能３ａ：コンパイルするアプリケーションプログラムにスレッドプライベート宣言されていない変数がある場合に、その変数と、その変数を記憶するための領域に対応する論理ページアドレスと、その変数を記憶するための領域を示すページ内オフセットとの組を変数情報生成手段１３０４に出力する機能。
【０１５７】
機能５：同一スレッドのスレッドプライベート変数が同一論理ページ群になるように各スレッドプライベート変数に論理ページを割り当て、互いに対応するスレッドプライベート変数が同一ページ内オフセットとなるように各スレッドプライベート変数にページ内オフセットを割り当てる機能。
【０１５８】
変数情報生成手段１３０４は、実施の形態１における変数情報生成手段２０４の一部の機能が変形されたものであり、オブジェクトコード生成手段１３０３と変数情報記憶手段２２３とに接続し、オブジェクトコード生成手段１３０３から出力されるスレッドプライベート宣言された変数とスレッド毎に割り当てられたそのスレッドプライベート宣言された変数に対応するスレッドプライベート変数とそれらスレッドプライベート変数を記憶するための領域に対応する論理ページアドレスとそれらスレッドプライベート変数を記憶するための領域を示すページ内オフセットとの組と、オブジェクトコード生成手段１３０３から出力されるスレッドプライベート宣言された変数以外の変数とその変数を記憶するための領域に対応する論理ページアドレスとその変数を記憶するための領域を示すページ内オフセットとの組とに基づいて変形変数情報を生成する機能と、生成された変形変数情報を変数情報記憶手段２２３に書き込む機能とを有する。
【０１５９】
図１４は、変数情報生成手段１３０４によって生成される変形変数情報のデータ構成図である。
同図に示されるように、変形変数情報は、オリジナル変数ＩＤ１４０１とスレッド１変数ＩＤ１４０２と第１論理ページアドレス１４０３とスレッド２変数ＩＤ１４０４と第２論理ページアドレス１４０５とページ内オフセット１４０６とを対応付けたものである。
【０１６０】
オリジナル変数ＩＤ１４０１とスレッド１変数ＩＤ１４０２とスレッド２変数ＩＤ１４０４とは、それぞれ、実施の形態１における変数情報のオリジナル変数ＩＤ５０１とスレッド１変数ＩＤ５０２とスレッド２変数ＩＤ５０４と同様のものである。従って、ここではそれらの説明を省略する。
【０１６１】
第１論理ページアドレス１４０３は、対応するスレッド１変数ＩＤ１４０２によって示される変数を記憶するための領域を含む論理ページのアドレスである。
第２論理ページアドレス１４０５は、対応するスレッド２変数ＩＤ１４０４によって示される変数を記憶するための領域を含む論理ページのアドレスであって、対応するスレッド２変数ＩＤ１４０４が空値の場合には、空値となる。
【０１６２】
ページ内オフセット１４０６は、対応するスレッド１変数ＩＤ１４０２によって示される変数を記憶するための領域のページ内オフセットであって、対応するスレッド２変数ＩＤ１４０４が空値でない場合には、スレッド１変数ＩＤ１４０２によって示される変数を記憶するための領域のページ内オフセットでもある。
【０１６３】
再び図１３に戻って、変形情報処理装置の機能構成の説明を続ける。
オブジェクトコードロード手段１３１２は、実施の形態１におけるオブジェクトコードロード手段２１２の一部の機能が変形されたものであり、オブジェクトコード記憶手段２２２と第２ユーザ操作受付手段２１１とアドレス対応テーブル生成手段１３１３とオブジェクトコード実行手段２１５とに接続し、オブジェクトコード生成手段２０３の有する機能２と機能３とに加えて、以下の２つの機能を有する。
【０１６４】
機能１ａ：第２ユーザ操作受付手段２１１から出力される情報で指定されるロード対象のオブジェクトコードを、オブジェクトコード記憶手段２２２から読み出して、そのオブジェクトコードで利用される記憶領域を含む論理ページのアドレスのそれぞれに物理ページのアドレスを対応付けて、対応付けた論理ページアドレスと物理ページアドレスとその記憶領域のページ内オフセットとの組をアドレス対応テーブル生成手段１３１３に出力する機能。
【０１６５】
機能４：アドレス対応テーブル生成手段２１３によって生成される変形アドレス対応テーブルを参照して、第１物理ページアドレス（後述）とページ内オフセットとの組によって指定されるデータ記憶手段２２４の領域に初期値を代入して初期化する機能。
【０１６６】
アドレス対応テーブル生成手段１３１３は、実施の形態１におけるアドレス対応テーブル生成手段２１３の一部の機能が変形されたものであり、変数情報記憶手段２２３とオブジェクトコードロード手段１３１２とアドレス対応テーブル記憶手段２１４とに接続し、アドレス対応テーブル生成手段２１３の有する機能１に加えて、以下の機能を有する。
【０１６７】
機能２ａ：変数情報記憶手段２２３から読み出した変数情報と、オブジェクトコードロード手段１３１２から出力される論理ページと物理ページとページ内オフセットとの組とに基づいて、変形アドレス対応テーブルを生成してアドレス対応テーブル記憶手段２１４に書き込む機能。
【０１６８】
図１５は、アドレス対応テーブル生成手段１３１３によって生成される変形アドレス対応テーブルの構成図である。
同図に示されるように、変形アドレス対応テーブルは、変数ＩＤ１５０１と論理ページアドレス１５０２とページ内オフセット１５０３と第１物理ページアドレス１５０４と第２物理ページアドレス１５０５と状態フラグ１５０６と対変数ＩＤ１５０７とスレッド番号１５０８とを対応付けたものである。
【０１６９】
変数ＩＤ１５０１と、状態フラグ１５０６と対変数ＩＤ１５０７とスレッド番号１５０８とは、それぞれ、実施の形態１におけるアドレステーブルの変数ＩＤ６０１と、状態フラグ６０５と対変数ＩＤ６０６とスレッド番号６０７と同様のものである。従って、ここではそれらの説明を省略する。
【０１７０】
論理ページアドレス１５０２は、対応する変数ＩＤ１５０１によって示される変数を記憶するための領域を含む論理ページのアドレスである。
ページ内オフセット１５０３は、対応する変数ＩＤ１５０１によって示される変数を記憶するための領域のページ内アドレスである。
【０１７１】
第１物理ページアドレス１５０４は、対応する変数ＩＤ１５０１によって示される変数がスレッド１で利用されるスレッドプライベート変数である場合には、その変数を記憶するための領域を含む物理ページのアドレスであり、対応する変数ＩＤ１５０１によって示される変数がスレッド２で利用されるスレッドプライベート変数である場合には、その変数に対応するスレッド１で利用されるスレッドプライベート変数を記憶するための領域を含む物理ページのアドレスであり、対応する変数ＩＤ１５０１によって示される変数が、スレッドプライベート変数でない場合にはその変数を記憶するための領域を含む物理ページのアドレスである。
【０１７２】
第２物理ページアドレス１５０５は、対応する変数ＩＤ１５０１によって示される変数がスレッド１で利用されるスレッドプライベート変数である場合には、その変数に対応するスレッド２で利用されるスレッドプライベート変数を記憶するための領域を含む物理ページのアドレスであり、対応する変数ＩＤ１５０１によって示される変数がスレッド２で利用されるスレッドプライベート変数である場合にはその変数を記憶するための領域を含む物理ページのアドレスであり、対応する変数ＩＤ１５０１によって示される変数が、スレッドプライベート変数でない場合には空値となる。
【０１７３】
再び図１３に戻って、変形情報処理装置の機能構成の説明を続ける。
メモリアクセス手段１３１６は、オブジェクトコード実行手段２１５とデータ記憶手段２２４とアドレス対応テーブル記憶手段２１４とに接続し、オブジェクトコード実行手段２１５がデータ記憶手段２２４をアクセスするために用いる論理アドレスを、アドレス対応テーブル記憶手段２１４に記憶されている変形アドレス対応テーブルを用いて物理アドレスに変換し、変換した物理アドレスを用いて、データ記憶手段２２４へのアクセスを行う機能と、アドレス対応テーブル記憶手段２１４に記憶されているアドレス対応テーブルを書き換える機能とを有する
以上のように構成される変形情報処理装置の行う動作について、以下、図面を参照しながら説明する。
【０１７４】
＜動作＞
ここでは、変形情報処理装置の行う動作のうち、特徴的な動作である、コンパイル手段１３００の行う変形コンパイル処理と、プログラム実行手段１３１０の行う変形プログラム実行処理とについて説明する。
【０１７５】
＜変形コンパイル処理＞
変形コンパイル処理は、実施の形態１におけるコンパイル処理の一部が変形されたものであって、ユーザによって指定されるアプリケーションプログラムをアプリケーションプログラム記憶手段２２１から読み出してコンパイルし、オブジェクトコードと変形変数情報とを生成する処理である。
【０１７６】
実施の形態１におけるコンパイル処理では、オブジェクトコードと共に生成されるものが変数情報であったが、変形コンパイル処理では、オブジェクトコードと共に生成されるものが変形変数情報となっている。
【０１７７】
図１６は、コンパイル手段１３００の行う変形コンパイル処理のフローチャートである。
変形コンパイル処理のうち、ステップＳ１６００〜ステップＳ１６５０の処理は、それぞれ実施の形態１におけるコンパイル処理におけるステップＳ７００〜ステップＳ７５０の処理と同様の処理である。従って、これらの処理についての説明を省略する。
【０１７８】
ステップＳ１６４０の処理が終了すると、オブジェクトコード生成手段１３０３は、同一スレッドのスレッドプライベート変数が同一論理ページ群になるように各スレッドプライベート変数に論理ページを割り当てて（ステップＳ１６４３）、互いに対応するスレッドプライベート変数が同一ページ内オフセットとなるように各スレッドプライベート変数にページ内オフセットを割り当てる（ステップＳ１６４８）。
【０１７９】
ステップＳ１６４８の処理が終了する、又はステップＳ１６５０の処理が終了すると、オブジェクトコード生成手段１３０３は中間コードからオブジェクトコードを生成し、生成したオブジェクトコードをオブジェクトコード記憶手段２２２に書き込む（ステップＳ１６６０）。
【０１８０】
オブジェクトコード生成手段１３０３は、オブジェクトコード生成時に、アプリケーションプログラムで用いられている変数それぞれについて、変数がスレッドプライベート宣言されている変数であれば、そのスレッドプライベート宣言された変数と、スレッド毎に割り当てられたそのスレッドプライベート宣言された変数に対応するスレッドプライベート変数と、それらスレッドプライベート変数を記憶するための領域に対応する論理ページアドレスと、それらスレッドプライベート変数を記憶するための領域を示すページ内オフセットとの組を変数情報生成手段１３０４に出力し、変数がスレッドプライベート宣言されていない変数であれば、その変数と、その変数を記憶するための領域に対応する論理ページアドレスと、その変数を記憶するための領域を示すページ内オフセットとの組を変数情報生成手段１３０４に出力する。
【０１８１】
ステップＳ１６６０の処理が終わると、変数情報生成手段１３０４は、オブジェクトコード生成手段１３０３から出力された変数と論理ページアドレスとページ内オフセットの組に基づいて、変形変数情報を生成し、生成した変数情報を変数情報記憶手段２２３に書き込む（ステップＳ１６７０）。
【０１８２】
ステップＳ１６７０の処理が終わると、コンパイル手段１３００は、変形コンパイル処理を終了する。
＜変形プログラム実行処理＞
変形プログラム実行処理は、実施の形態１におけるコンパイル処理の一部が変形されたものであって、ユーザによって指定されるオブジェクトコードをオブジェクトコード記憶手段２２２から読み出して、読み出したオブジェクトコードをロードして実行する処理である。
【０１８３】
実施の形態１におけるプログラム実行処理は、論理アドレスを物理アドレスに変換するためのテーブルとして、図６に示されるアドレス対応テーブルを用いるが、変形プログラム実行処理は、論理アドレスを物理アドレスに変換するためのテーブルとして、図１５に示される変形アドレス対応テーブルを用いる。
【０１８４】
図１７はプログラム実行手段１３０１の行う変形プログラム実行処理のフローチャートである。
変形プログラム実行処理のうち、ステップＳ１７００〜ステップＳ１７１０の処理の処理は、それぞれ実施の形態１におけるプログラム実行処理におけるステップＳ８００〜ステップＳ８１０の処理と同様の処理である。従って、これらの処理についての説明を省略する。
【０１８５】
ステップＳ１７１０の処理が終了すると、アドレス対応テーブル生成手段１３１３は、オブジェクトコードロード手段１３１２から出力される論理ページと物理ページとページ内オフセットとの組と、変数情報記憶手段２２３に記憶されている、オブジェクトコードに対応する変形変数情報とに基づいて、変形アドレス対応テーブルを生成する（変形アドレス対応テーブル生成処理：ステップＳ１７２０）。
【０１８６】
図１８は、ステップＳ１７２０である変形アドレス対応テーブル生成処理のフローチャートである。
変形アドレス対応テーブル生成処理は、アドレス対応テーブル生成手段１３１３が、変形変数情報の第１論理ページアドレス１４０３（図１４参照）とページ内オフセット１４０６との組と、第２論理ページアドレス１４０５とページ内オフセット１４０６との組とのそれぞれに対して、物理ページアドレス等を対応付けて変形アドレス対応テーブルを生成する処理である。
【０１８７】
アドレス対応テーブル生成手段１３１３は、オブジェクトコードロード手段１３１２から出力される情報で指定されるオブジェクトコードに対応する変形変数情報を変数情報記憶手段２２３から読み出し、読み出した変形変数情報に含まれる第１論理ページアドレスとページ内オフセットとの組、又は第２論理ページアドレスとページ内オフセットとの組の中から１つの組を選択する。
【０１８８】
組を選択されると、アドレス対応テーブル生成手段１３１３は、対応付けられているスレッド１変数ＩＤ１４０２、又はスレッド２変数ＩＤ１４０４によって示される変数がスレッドプライベート変数であるか否かを調べる（ステップＳ１８００）。
【０１８９】
スレッドプライベート変数であるか否かの判断は、選択されている論理ページアドレスとページ内オフセットとの組にスレッド１変数ＩＤ１４０２とスレッド２変数ＩＤ１４０４との双方が対応付けられているか否かによって判断される。
【０１９０】
ステップＳ１８００の処理において、対象の変数がスレッドプライベート変数である場合には（ステップＳ１８００：Ｙｅｓ）、アドレス対応テーブル生成手段１３１３は、対となるスレッドプライベート変数が、生成中の変形アドレス対応テーブルの中に既に存在しているか否かを調べる（ステップＳ１８１０）。
【０１９１】
ステップＳ１８１０の処理において、対となるスレッドプライベート変数を示す変数ＩＤが、生成中のアドレス対応テーブルの中に存在していない場合には（ステップＳ１８１０：Ｙｅｓ）、アドレス対応テーブル生成手段１３１３は、（１）変数情報において対象の変数に対応付けられている第１論理ページアドレスに対応付けられている物理ページアドレスを第１物理ページアドレス１５０４（図１５参照）とし、（２）変数情報において対象の変数に対応付けられている第２論理ページアドレスに対応付けられている物理ページアドレスを第２物理ページアドレス１５０５とし、（３）選択中の論理ページアドレス１５０２とページ内オフセット１５０３との組に、第１物理ページアドレス１５０４と第２物理ページアドレス１５０５と対応する変数を示す変数ＩＤ１５０１とを対応付ける（ステップＳ１８２０）。
【０１９２】
ステップＳ１８１０の処理において、対となるスレッドプライベート変数を示す変数ＩＤが、生成中の変形アドレス対応テーブルの中に存在している場合には（ステップＳ１８１０：Ｎｏ）、アドレス対応テーブル生成手段１３１３は、選択中の論理ページアドレスとページ内オフセットとの組に、対となるスレッドプライベート変数を示す変数ＩＤ１５０１に対応付けられている第１物理ページアドレス１５０４と第２物理ページアドレス１５０５と、対応する変数を示す変数ＩＤ１５０１とを対応付ける（ステップＳ１８３０）。
【０１９３】
ステップＳ１８２０の処理が終了した場合、又はステップＳ１８３０の処理が終了した場合に、アドレス対応テーブル生成手段１３１３は、選択中の論理ページアドレスとページ内オフセットとの組に、対となるスレッドプライベート変数を示す変数ＩＤを対変数ＩＤ１５０７として対応付け（ステップＳ１８４０）て、さらに、その論理ページアドレスとページ内オフセットとの組が使用されるスレッドを示すスレッド番号１５０８を対応付ける（ステップＳ１８５０）。
【０１９４】
ステップＳ１８００の処理において、対象の変数がスレッドプライベート変数でない場合には（ステップＳ１８００：Ｎｏ）、アドレス対応テーブル生成手段１３１３は、（１）対応付けられている物理ページアドレスを第１物理ページアドレスとし、（２）空値を第２物理ページアドレスとし、（３）空値を対変数ＩＤとし、（４）空値をスレッド番号として、（５）選択中の論理ページアドレスとページ内オフセットとの組に、第１物理ページアドレス１５０４と第２物理ページアドレス１５０５と対変数ＩＤ１５０７とスレッド番号１５０８とを対応付ける（ステップＳ１８６０）。
【０１９５】
ステップＳ１８５０の処理が終了した場合、又はステップＳ１８６０の処理が終了した場合に、アドレス対応テーブル生成手段１３１３は、さらに、選択中の論理ページアドレスとページ内オフセットとの組に初期値”0”で初期化された状態フラグ１５０６を対応付ける（ステップＳ１８７０）。
【０１９６】
ステップＳ１８７０の処理が終わると、アドレス対応テーブル生成手段１３１３は、変数情報に含まれる第１論理ページアドレスとページ内オフセットとの組、又は第２論理ページアドレスとページ内オフセットとの組の中に、未だ選択されていない組が存在するか否かを調べる（ステップＳ１８８０）。
【０１９７】
ステップＳ１８８０の処理において、未だ選択されていない組が存在する場合には（ステップＳ１８８０：Ｙｅｓ）、アドレス対応テーブル生成手段１３１３は、未だ選択されていない論理ページアドレスとページ内オフセットとの組の中から１つの組を選択し（ステップＳ１８９０）、再びステップＳ１８００の処理に戻って、ステップＳ１８００以降の処理を行う。
【０１９８】
ステップＳ１８８０の処理において、組が存在しない場合には（ステップＳ１８８０：Ｎｏ）、アドレス対応テーブル生成手段１３１３は、その変形アドレス対応テーブル生成処理を終了する。
【０１９９】
再び図１７に戻って、変形プログラム実行処理の説明を続ける。
ステップＳ１７２０の処理が終わると、アドレス対応テーブル生成手段１３１３は、生成した変形アドレス対応テーブルをアドレス対応テーブル記憶手段に書き込む（ステップＳ１７３０）。
【０２００】
ステップＳ１７３０の処理が終わると、オブジェクトコードロード手段１３１２は、アドレス対応テーブル生成手段１３１３によって生成された変形アドレス対応テーブルを参照して、第１物理ページアドレスとページ内オフセットとの組によって指定されるデータ記憶手段２２４の領域にのみ初期値を代入して初期化する（ステップＳ１７４０）。
【０２０１】
ステップＳ１７４０の処理が終わると、オブジェクトコード実行手段２１５は、データ記憶手段２２４にロードされたオブジェクトコードを実行する（変形オブジェクトコード実行処理：ステップＳ１７５０）。
【０２０２】
オブジェクトコード実行手段２１５は、オブジェクトコードを実行する場合において、データ記憶手段２２４への書き込み命令、又はデータ記憶手段２２４からの読み出し命令があるとき、メモリアクセス手段１３１６を用いてデータ記憶手段２２４への書き込み、又はデータ記憶手段２２４からの読み出しを行う。
【０２０３】
図１９、図２０は、ステップＳ１７５０である変形オブジェクトコード実行処理のフローチャートである。
変形オブジェクトコード実行処理における各ステップの処理は、実施の形態１におけるオブジェクトコード実行処理における各ステップの処理において、「メモリアクセス手段２１６」を「メモリアクセス手段１３１６」に読み換え、「アドレス対応テーブル」を「変形アドレス対応テーブル」に読み換え、「論理アドレス」を「論理ページアドレスとページ内オフセットとの組」に読み換え、「第１物理アドレス」を「第１物理ページアドレスとページ内オフセットとの組」に読み換え、「第２物理アドレス」を「第２物理ページアドレスとページ内オフセットとの組」に読み換えたものと同様の処理である。従って、ここでは各処理の説明を省略する。
【０２０４】
再び図１７に戻って、変形プログラム実行処理の説明を続ける。
ステップＳ１７５０の処理を終了すると、プログラム実行手段１３１０は、その変形プログラム実行処理を終了する。
【０２０５】
＜具体例＞
以上のように動作する変形情報処理装置の具体的動作例について、以下、図面を参照しながら説明する。
【０２０６】
ここでは、アドレス対応テーブル記憶手段２１４に記憶されている変形アドレス対応テーブルが図１５で示されるものである場合において、各状態フラグ１５０６が”0”で初期化されているときの論理ページアドレスとページ内オフセットとの組と、物理ページアドレスとページ内オフセットとの組との対応関係と、各状態フラグ１５０６が”1”となっているときの論理ページアドレスとページ内オフセットとの組と、物理ページアドレスとページ内オフセットとの組との対応関係とについて説明する。
【０２０７】
図２１（Ａ）は、各状態フラグ１５０６が”0”で初期化されている場合において論理ページアドレスとページ内オフセットとの組を物理ページアドレスとページ内オフセットとの組に変換するときの、論理アドレスと物理アドレスとの対応関係を示す図で、図１２（Ｂ）は、状態フラグ１５０６が”1”である場合において論理ページアドレスとページ内オフセットとの組を物理ページアドレスとページ内オフセットとの組に変換するときの、論理アドレスと物理アドレスとの対応関係を示す図である。
【０２０８】
図２１（Ａ）、（Ｂ）において、論理アドレス領域２１０１は論理アドレス0x0000 0000を開始アドレスとする４０９６Ｂｙｔｅの領域であって、スレッド１で利用される第１論理ページであり、論理アドレス領域２１０２は論理アドレス0x0000 1000を開始アドレスとする４０９６Ｂｙｔｅの領域であって、スレッド２で利用される第２論理ページである。
【０２０９】
ここで、論理アドレスとは、論理ページアドレスとページ内オフセットとを組み合わせた論理アドレスであって、例えば、論理アドレス0x0000 0000とは、論理ページアドレス0x0000 0とページ内オフセット0x000とを組み合わせた論理アドレスである（以下の、論理アドレス、物理アドレスも同様である。）。
【０２１０】
論理アドレス領域２１１１は、論理アドレス0x0000 0000を開始アドレスとする４Ｂｙｔｅの領域であって、変数ＩＤ１５０１（図１５参照）が”x_1”で示されるスレッド１で利用されるスレッドプライベート変数（以下、変数ｘ＿１という。）に割り当てられた領域である。
【０２１１】
論理アドレス領域２１１２は論理アドレス0x0000 0004を開始アドレスとする４Ｂｙｔｅの領域であって、変数ＩＤ１５０１が”a_1”で示されるスレッド１で利用されるスレッドプライベート変数（以下、変数ａ＿１という。）に割り当てられた領域である。
【０２１２】
論理アドレス領域２１２１は論理アドレス0x0000 1000を開始アドレスとする４Ｂｙｔｅの領域であって、変数ＩＤ１５０１が”x_2”で示されるスレッド２で利用されるスレッドプライベート変数（以下、変数ｘ＿２という。）に割り当てられた領域である。
【０２１３】
論理アドレス領域２１２２は論理アドレス0x0000 1004を開始アドレスとする４Ｂｙｔｅの領域であって、変数ＩＤ１５０１が”a_2”で示されるスレッド２で利用されるスレッドプライベート変数（以下、変数ａ＿２という。）に割り当てられた領域である。
【０２１４】
物理アドレス領域２１３１は物理アドレス0x1000 0000を開始アドレスとする４０９６Ｂｙｔｅの領域であって、スレッド１で利用される第１論理ページ２１０１に対応する第１物理ページであり、物理アドレス領域２１３２は物理アドレス0x1000 1000を開始アドレスとする４０９６Ｂｙｔｅの領域であって、スレッド２で利用される第２論理ページ２１０２に対応する第２物理ページである。
【０２１５】
物理アドレス領域２１４１は物理アドレス0x1000 0000を開始アドレスとする４Ｂｙｔｅの領域であって、物理アドレス領域２１４２は物理アドレス0x1000 0004を開始アドレスとする４Ｂｙｔｅの領域であって、物理アドレス領域２１５１は物理アドレス0x1000 1000を開始アドレスとする４Ｂｙｔｅの領域であって、物理アドレス領域２１５２は物理アドレス0x1000_1004を開始アドレスとする４Ｂｙｔｅの領域である。
【０２１６】
図２１（Ａ）に示されるように、各状態フラグ１５０６が”0”で初期化されている場合において論理アドレスが物理アドレスに変換されるときは、変数ｘ＿１用の論理アドレス領域２１１１と、変数ｘ＿２用の論理アドレス領域２１２１とが、共通の物理アドレス領域２１４１に変換され、変数ａ＿１用の論理アドレス領域２１１２と、変数ａ＿２用の論理アドレス領域２１２２とが、共通の物理アドレス領域２１４２に変換される。
【０２１７】
その後、変数ｘ＿１用の論理アドレス領域２１１１、又は変数ｘ＿２用の論理アドレス領域２１２１への書き込みが行われて、変数ａ＿１用の論理アドレス領域２１１２、又は変数ａ＿２用の論理アドレス領域２１２２への書き込みが行われて、各状態フラグ１５０６が”1”に書き換えられると、図２１（Ｂ）に示されるように、対応する状態フラグ１５０６が”1”である場合において論理アドレスを物理アドレスに変換されるときには、変数ｘ＿１用の論理アドレス領域２１１１が物理アドレス領域２１４１に変換され、変数ｘ＿２用の論理アドレス領域２１２１が物理アドレス領域２１５１に変換され、変数ａ＿１用の論理アドレス領域２１１２が物理アドレス領域２１４２に変換され、変数ａ＿２用の論理アドレス領域２１２２が物理アドレス領域２１５２に変換される。
【０２１８】
＜まとめ＞
上述の変形情報処理装置によれば、スレッド１で利用されるスレッドプライベート変数に対応付けられた第１論理ページアドレスとページ内オフセットとの組で指定される領域と、その変数に対応するスレッド２で利用されるスレッドプライベート変数に対応付けられた第２論理ページアドレスとページ内オフセットとの組で指定される領域とは、いずれかのスレッドプライベート変数への書き込みが行われるまでは、共通の第１物理ページアドレスとページ内オフセットとの組で指定される領域を利用し、いずれかのスレッドプライベート変数への書き込みが行われた後は、それぞれ、第１物理ページアドレスとページ内オフセットとの組で指定される領域と、第２物理ページアドレスとページ内オフセットとの組で指定される領域とを利用する。
【０２１９】
また、上述の変形情報処理装置によれば、第２物理ページアドレスとページ内オフセットとの組で指定される領域へのデータの書き込みは、スレッド１で利用されるスレッドプライベート変数、又はスレッド２で利用されるスレッドプライベート変数のいずれかに書き込みが行われた場合に限って行われる。
【０２２０】
従って、アプリケーションプログラムによって書き込まれる必要のない論理ページアドレスとページ内オフセットとの組によって指定される領域のデータを、物理ページアドレスとページ内オフセットとの組によって指定される領域に書き込んでしまう無駄な書き込み動作の発生頻度を、従来よりも少なくすることができる。
＜補足＞
（１）実施の形態１において、情報処理装置がプロセッサを２つ備える例について説明したが、マルチスレッド実行制御機能を実現することができれば、プロセッサの数は必ずしも２つである必要はなく、例えば、プロセッサを４つや８つ備える構成であっても構わないし、複数のスレッドの処理を並列に実行することができるプロセッサを１つ備える構成であっても構わない。
（２）実施の形態１において、アプリケーションプログラム記憶手段２２１に記憶されているアプリケーションプログラムが、例えばＣ言語で記述されている例について説明したが、OpenMPをサポートする言語であれば、必ずしもＣ言語に限られる必要はなく、例えば、Ｃ＋＋やＦＯＲＴＲＡＮといった言語であっても構わない。
（３）実施の形態１において、アプリケーションプログラム記憶手段２２１に記憶されているアプリケーションプログラムで使用される変数は、記憶するための領域が４Ｂｙｔｅの固定サイズである構成の例について説明したが、論理アドレスを用いて変数を記憶するための領域を一意に決定することができれば、必ずしも４Ｂｙｔｅの固定サイズである必要はなく、例えば、６Ｂｙｔｅの固定サイズであってもよく、さらには、記憶するための領域が可変長サイズであっても、論理アドレスとデータサイズを示す情報との組によって、変数を記憶するための領域を一意に決定するという構成であってもよい。
【０２２１】
可変長サイズの変数の一種として、例えば、複数のデータの集合である配列が考えられる。
（４）実施の形態１において、プロセッサＡ１０１とプロセッサＢ１０２とＲＯＭ１０３とＲＡＭ１０４とハードディスク装置インターフェース１０５と出力装置インターフェース１０６と入力装置インターフェース１０７とバスライン１２０とが、１つの半導体集積回路１１０に集積されている例について説明したが、これらの回路が必ずしも１つの集積回路に集積されている必要はなく、半導体集積回路１１０によって実現される機能を実現することができれば、例えば、各回路がそれぞれ互いに異なる集積回路に集積されている構成であっても構わない。
（５）実施の形態１において、プロセッサＡ１０１又はプロセッサＢ１０２によって実行されるプログラムの中にＯＳが含まれている例について説明したが、情報処理装置１００によって実現される機能と同等の機能を実現することができれば、必ずしもＯＳが含まれている必要はない。
（６）実施の形態１において、アドレス対応テーブルがＲＡＭ１０４の一部の領域として実装されているアドレス対応テーブル記憶手段２１４に記憶されている例について説明したが、メモリアクセス手段２１６によってアクセスされることができれば、アドレス対応テーブルは必ずしもＲＡＭ１０４の一部の領域に記憶されている必要はなく、例えばプロセッサ内部のＴＬＢ（Translation Lookaside Buffer）に記憶されている構成であっても構わないし、半導体集積回路１１０の外部の外付けＲＡＭに記憶されている構成であっても構わない。
（７）実施の形態１において、オブジェクトコード生成手段２０３は、ソースプログラムをコンパイルする際に、ソースプログラムから一端中間コードを生成し、生成した中間コードからオブジェクトコードを生成する構成の例を示したが、オブジェクトコードを生成することができれば、必ずしも一端中間コードを生成しない構成であっても構わない。
（８）実施の形態１において、変数情報生成手段２０４は、生成された変数情報を、オブジェクトコードとは別のファイルとして変数情報記憶手段２２３に書き込む構成の例を示したが、変数情報を書き込むことができれば、必ずしもオブジェクトコードとは別のファイルとしてに書き込む必要はなく、例えば、変数情報をいわゆるシンボリック情報としてオブジェクトコードに含ませて、オブジェクトコード記憶手段２２２に書き込む構成であっても構わない。
（９）実施の形態２において、オブジェクトコード生成手段１３０３は、同一スレッドのスレッドプライベート変数が同一論理ページ群になるように各スレッドプライベート変数に論理ページを割り当て、互いに対応するスレッドプライベート変数が同一ページ内オフセットとなるように各スレッドプライベート変数にページ内オフセットを割り当てる例について説明したが、各スレッドプライベート変数に、それぞれ互いに異なる論理ページとページ内オフセットとの組を割り当てることができれば、必ずしも、同一スレッドのスレッドプライベート変数が同一論理ページ群にならなくても構わないし、対応するスレッドプライベート変数が同一ページ内オフセットとならなくても構わない。
【０２２２】
図２２（Ａ）、（Ｂ）は、スレッド１で利用されるスレッドプライベート変数を記憶するための領域２２１１とスレッド２で利用されるスレッドプライベート変数を記憶するための領域２２１２とが、互いに同じ論理ページ２２０１に割り当てられた場合において、各状態フラグが”0”で初期化されているとき（図２２（Ａ））と、各状態フラグが”1”であるとき（図２２（Ｂ））とにおける、論理アドレスと物理アドレスとの対応関係を示す図である。
（１０）実施の形態１で説明した半導体集積回路１１０は、様々な情報処理装置に利用されることができる
図２３は、半導体集積回路１１０を利用した情報処理装置の一例として、半導体集積回路１１０を利用したブルーレイ録画再生システム２３００の構成図である。
（１１）以下、さらに本発明の一実施形態に係る情報処装置の構成及びその変形例と各効果について説明する。
【０２２３】
（ａ）本発明の一実施形態に係る情報処理装置は、アプリケーションプログラムの１つの書き込み命令によりそれぞれアクセスに用いられる、互いに異なる第１論理アドレスと第２論理アドレスとを対応付ける変数情報を取得する変数情報取得手段と、物理アドレスによって指定される記憶領域を有する記憶手段と、論理アドレスを物理アドレスに変換するアドレス変換手段と、前記アドレス変換手段によって変換された物理アドレスを用いてアプリケーションプログラムの命令を実行する命令実行手段と、第１状態と第２状態とのいずれか一方の状態を示し、前記アドレス変換手段の行うアドレス変換の方法を特定するための状態フラグを記憶するフラグ記憶手段とを備え、前記アドレス変換手段は、前記状態フラグが前記第１状態を示す場合に、前記第１論理アドレスと前記第２論理アドレスとを第１物理アドレスに変換し、前記状態フラグが前記第２状態を示すときに、前記第１論理アドレスを前記第１物理アドレスに、前記第２論理アドレスを第２物理アドレスに変換し、前記命令実行手段は、前記状態フラグが第１状態を示す場合において、アプリケーションプログラムによる前記第２論理アドレスへの書き込み命令を実行するとき、当該命令を実行する際に前記状態フラグを前記第２状態とし、アプリケーションプログラムによる前記第１論理アドレスへの書き込み命令を実行するとき、当該命令を実行する際に前記状態フラグを前記第２状態として前記第１物理アドレスによって示される領域に記憶されているデータを前記第２物理アドレスによって示される領域に記憶させることを特徴とする。
【０２２４】
上述の構成を備える本発明の一実施形態に係る情報処理装置は、第１論理アドレスによって指定される領域と第２論理アドレスによって指定される領域とが第１物理アドレスによって指定される領域を共用している場合において、第１論理アドレスによって指定される領域への書き込み、又は第２論理アドレスによって指定される領域への書き込みが発生するとき、第２物理アドレスで指定される領域へのデータの書き込みが行われる。
【０２２５】
ここで、第１論理アドレスによって指定される領域と第２論理アドレスによって指定される領域と第１物理アドレスによって指定される領域と第２物理アドレスによって指定される領域とは、アプリケーションプログラムの１つの書き込み命令でアクセスされる領域である。
【０２２６】
すなわち、新たに第２物理アドレスで指定される領域へのデータの書き込みは、アプリケーションプログラムの１つの書き込み命令でアクセスされる領域のデータのみの書き込みとなる。
【０２２７】
従って、書き込まれる必要のない領域のデータを、物理アドレスによって指定される領域に書き込んでしまう無駄な書き込み動作の発生頻度を、従来よりも少なくすることができる。
【０２２８】
（ｂ）また、前記情報処理装置は、マルチスレッド実行制御機能を有し、前記第１論理アドレスと前記第２論理アドレスとは、アプリケーションプログラムによって生成される互いに異なるスレッドで利用される論理アドレスのうち、論理アドレスによって指定される領域の初期値が互いに等しいものである関係を有するとしてもよい。
【０２２９】
このような構成にすることによって、互いに異なるスレッドで利用され、互いに共通の初期値を有するスレッドプライベート変数を、互いに共通の物理アドレスで指定される領域に対応付けることができるようになる。
【０２３０】
（ｃ）また、アプリケーションプログラムによって生成される互いに異なるスレッドで利用される論理アドレスの組の中に、指定される領域の初期値が互いに等しい論理アドレスから成るものが存在する場合に、該当する論理アドレスの利用に先駆けて、前記論理アドレスの組を構成する一つの論理アドレスを前記第１論理アドレスとし、前記論理アドレスの組を構成する前記第１論理アドレスでない論理アドレスの一つを前記第２論理アドレスとし、前記第１論理アドレスと前記第２論理アドレスとを対応付けて前記変数情報を生成する変数情報生成手段を備えるとしてもよい。
【０２３１】
このような構成にすることによって、変数情報取得手段によって取得される変数情報を生成することがきるようになる。
（ｄ）また、前記記憶手段の記憶領域は、複数のページから成り、前記第２物理アドレスは、前記第１物理アドレスによって指定される領域を含むページと互いに異なるページに含まれる領域を指定するものであるとしてもよい。
【０２３２】
一般に、アプリケーションプログラムの１つの書き込み命令によりアクセスされる物理アドレスで指定される領域よりも、物理ページの領域の方が広い。
すなわち、物理ページを指定するために必要なビット数の方が、アプリケーションプログラムの１つの書き込み命令によりアクセスされる領域を指定するために必要な物理アドレスのビット数よりも少ない。
【０２３３】
このような構成にすることによって、第１物理アドレスで指定される領域と第の物理アドレスで指定される領域との区別を、それぞれが含まれるページを区別するだけで実現できるようになるため、第１物理アドレスと第２アドレスとを指定するために必要なビット数よりも少ないビット数の物理アドレスで、第１物理アドレスで指定される領域と第の物理アドレスで指定される領域とを区別することができるようになる。
【産業上の利用可能性】
【０２３４】
本発明に係る情報処理装置は、マルチスレッド実行制御機能を有する機器に広く利用することができる。
【符号の説明】
【０２３５】
２００  コンパイル手段
２０１  第１ユーザ操作受付手段
２０２  アプリケーションプログラム読み出し手段
２０３  オブジェクトコード生成手段
２０４  変数情報生成手段
２１０  プログラム実行手段
２１１  第２ユーザ操作受付手段
２１２  オブジェクトコードロード手段
２１３  アドレス対応テーブル生成手段
２１４  アドレス対応テーブル記憶手段
２１５  オブジェクトコード実行手段
２１６  メモリアクセス手段
２２１  アプリケーションプログラム記憶手段
２２２  オブジェクトコード記憶手段
２２３  変数情報記憶手段
２２４  データ記憶手段
【図１】
2012043138.tif 000003
【図２】
2012043138.tif 000004
【図３】
2012043138.tif 000005
【図４】
2012043138.tif 000006
【図５】
2012043138.tif 000007
【図６】
2012043138.tif 000008
【図７】
2012043138.tif 000009
【図８】
2012043138.tif 000010
【図９】
2012043138.tif 000011
【図１０】
2012043138.tif 000012
【図１１】
2012043138.tif 000013
【図１２】
2012043138.tif 000014
【図１３】
2012043138.tif 000015
【図１４】
2012043138.tif 000016
【図１５】
2012043138.tif 000017
【図１６】
2012043138.tif 000018
【図１７】
2012043138.tif 000019
【図１８】
2012043138.tif 000020
【図１９】
2012043138.tif 000021
【図２０】
2012043138.tif 000022
【図２１】
2012043138.tif 000023
【図２２】
2012043138.tif 000024
【図２３】
2012043138.tif 000025