"機械語プログラムを実行するプログラム実行装置であって、機械語コードと、当該機械語コードに従ってアクセスされる論理アドレス範囲と当該論理アドレス範囲へのアクセス頻度とが対応付けられたアクセス頻度情報とを含む前記機械語プログラムを読み込むプログラムロード部と、論理アドレス範囲と物理アドレス範囲との対応関係を表すエントリを有するアドレス変換テーブルを作成するアドレス変換テーブル作成部と、前記アドレス変換テーブルのエントリのうち、前記機械語コードに従ってアクセスされる論理アドレス範囲が格納されたエントリをTLBTranslationLookasideBufferに登録するTLB登録部とを備え、前記アドレス変換テーブル作成部は、前記アクセス頻度情報に基づいてアクセス頻度が高いと判断した論理アドレス範囲が格納されるエントリのサイズを当該論理アドレス範囲に応じたサイズに設定することを特徴とするプログラム実行装置。請求項1のプログラム実行装置において、前記アドレス変換テーブル作成部は、前記アドレス変換テーブルのエントリのうちアクセス頻度が高い論理アドレス範囲が格納されるエントリのサイズを、当該論理アドレス範囲を格納可能でかつ最小となるサイズに設定することを特徴とするプログラム実行装置。請求項1のプログラム実行装置において、前記アドレス変換テーブル作成部は、前記アドレス変換テーブルのエントリのうちアクセス頻度が低い論理アドレス範囲が格納されるエントリのサイズを、デフォルトのサイズに設定することを特徴とするプログラム実行装置。請求項1のプログラム実行装置において、前記アドレス変換テーブル作成部は、前記アドレス変換テーブルのエントリのうちアクセス頻度が閾値以上である論理アドレス範囲が格納されるエントリをロック候補に設定するものであり、前記TLB登録部は、前記アドレス変換テーブルのエントリのうちロック候補に設定されたエントリをTLBのロック領域に登録することを特徴とするプログラム実行装置。請求項1のプログラム実行装置において、前記アドレス変換テーブル作成部は、前記アドレス変換テーブルのエントリがアクセス頻度の順となるように前記アドレス変換テーブルを作成することを特徴とするプログラム実行装置。ソースプログラムをコンパイルして機械語プログラムを生成するコンパイラシステムであって、前記ソースプログラムを解析して、前記ソースプログラム内の少なくとも1つの変数によってアクセスされる論理アドレス範囲および当該論理アドレス範囲へのアクセス頻度を取得するアクセス頻度解析部と、前記論理アドレス範囲と前記アクセス頻度とを対応付けてアクセス頻度情報を生成し、前記アクセス頻度情報と機械語コードとを含む前記機械語プログラムを出力する出力部とを備えていることを特徴とするコンパイラシステム。請求項6のコンパイラシステムにおいて、前記アクセス頻度解析部は、前記変数が出現する関数が呼び出される回数に基づいて前記アクセス頻度を算出することを特徴とするコンパイラシステム。請求項7のコンパイラシステムにおいて、前記アクセス頻度解析部は、前記変数がループ処理内に出現する場合に、当該ループのネスト数を加味して前記アクセス頻度を算出することを特徴とするコンパイラシステム。請求項8のコンパイラシステムにおいて、前記アクセス頻度解析部は、前記関数が呼び出される回数および前記ループのネスト数のそれぞれに重み付けして前記アクセス頻度を算出することを特徴とするコンパイラシステム。上記特許文献1に記載された技術によると、複数のプログラムについて、テキスト部をマージした全体サイズおよびデータ部をマージした全体サイズのそれぞれに基づいてTLBエントリのページサイズが設定される。一方、特許文献2に記載された技術によると、TLBエントリのページサイズは、複数のプログラムのテキスト部のうちサイズが最も大きいテキスト部を格納できるサイズに設定される。このように、従来の技術では、プログラム内のテキスト部等のサイズが大きくなるにつれて、TLBエントリのページサイズが大きくなる。TLBエントリにおいて、ページサイズがテキスト部等のサイズよりも大きい部分は、プログラムによって使用されないアドレス範囲がマッピングされるため無駄な領域となる。TLBエントリのページサイズとテキスト部等のサイズとの関係によっては、無駄な領域がより増大することになる。つまり、従来の技術では、有限であるTLBリソースを効率良く利用することができず、複数のアプリケーションを並行して実行する場合に、各アプリケーションがアクセスするアドレス範囲をTLBに格納できなくなるおそれがある。そのため、単体のアプリケーションを実行する場合にはTLBミスヒットの発生率を低下させることができるが、複数のアプリケーションを並行して実行する場合にTLBミスヒットの発生率が増加するおそれがある。かかる点に鑑みて、本発明は、複数のアプリケーションを並行して実行する場合でもTLBミスヒットの発生率を低減することを課題とする。上記課題を解決するため本発明によって次のような解決手段を講じた。すなわち、機械語プログラムを実行するプログラム実行装置は、機械語コードと、当該機械語コードに従ってアクセスされる論理アドレス範囲と当該論理アドレス範囲へのアクセス頻度とが対応付けられたアクセス頻度情報とを含む機械語プログラムを読み込むプログラムロード部と、論理アドレス範囲と物理アドレス範囲との対応関係を表すエントリを有するアドレス変換テーブルを作成するアドレス変換テーブル作成部と、アドレス変換テーブルのエントリのうち、機械語コードに従ってアクセスされる論理アドレス範囲が格納されたエントリをTLBに登録するTLB登録部とを備えている。そして、アドレス変換テーブル作成部は、アクセス頻度情報に基づいてアクセス頻度が高いと判断した論理アドレス範囲が格納されるエントリのサイズを当該論理アドレス範囲に応じたサイズに設定する。これによると、アドレス変換テーブル作成部は、アドレス変換テーブルのエントリのうち、アクセス頻度の高い論理アドレス範囲を格納するエントリのサイズを、その論理アドレス範囲に応じたサイズに設定することができる。そして、TLB登録部によって、TLBにアドレス変換テーブルのエントリが登録される。これにより、アクセス頻度が高い論理アドレス範囲が格納されるTLBエントリのサイズは、その論理アドレス範囲に応じたサイズに設定される。つまり、複数のアプリケーションによって複数の論理アドレス範囲にアクセスされる場合でも、複数の論理アドレス範囲のうちアクセス頻度が高い論理アドレス範囲が格納されるTLBエントリのサイズが大きくなるように設定される。したがって、TLBを効率良く利用することができるため、TLBミスヒットを抑制することができる。好ましくは、アドレス変換テーブル作成部は、アドレス変換テーブルのエントリのうちアクセス頻度が高い論理アドレス範囲が格納されるエントリをロック候補に設定するものであり、TLB登録部は、アドレス変換テーブルのエントリのうちロック候補のエントリをTLBのロック領域に登録する。これによると、アクセス頻度が高い論理アドレス範囲が格納されるTLBエントリがロックされるため、当該TLBエントリの内容が変更されなくなる。そのため、TLBミスヒットをさらに抑制することができる。また、上記課題を解決するために本発明が講じた手段として、ソースプログラムをコンパイルして機械語コードを生成するコンパイラシステムは、ソースプログラムを解析して、ソースプログラム内の少なくとも1つの変数によってアクセスされる論理アドレス範囲へのアクセス頻度を取得するアクセス頻度解析部と、論理アドレス範囲とアクセス頻度とを対応付けてアクセス頻度情報を生成し、アクセス頻度情報と機械語コードとを含む機械語プログラムを出力する出力部とを備えている。これによると、コンパイラシステムによって、アクセス頻度情報と機械語コードとを含む機械語プログラムが生成される。そして、この機械語プログラムに含まれる機械語コードを上記プログラム実行装置で実行する場合にTLBミスヒットが抑制されるため、機械語コードの実行速度を向上させることができる。本発明によると、複数のアプリケーションを並行して実行する場合でもTLBミスヒットの発生率を低減することができる。図1は、本発明の一実施形態に係るプログラム実行装置を備えたアドレス変換装置の構成図である。図1に示すアドレス変換装置は、CPU3およびプログラム実行装置であるオペレーティングシステム以下、OSと称する。10で構成することができる。CPU3は、論理アドレス空間1内の論理アドレスを物理アドレス空間2内の物理アドレスに変換するTLB5が内蔵されたMMU4を備えている。TLB5は、論理アドレスと物理アドレスとページサイズとが対応付けられたエントリを有する。すなわち、TLB5のエントリには、ページサイズで示されるサイズの論理アドレス範囲と物理アドレス範囲とが格納可能である。本実施形態では、TLB5のエントリを更新等する処理はOS10のソフトウェア処理によって行われるものとする。OS10は、機械語プログラム20を読み込んで実行する。具体的に、OS10は、プログラムロード部11と、アドレス変換テーブル作成部12と、アドレス変換テーブル13と、TLB登録部14とを備えている。プログラムロード部11は、機械語プログラム20をロードして、実行可能ファイルである機械語コード21を図示しないプログラム実行部に出力する一方、アクセス頻度情報22をアドレス変換テーブル作成部12に出力する。プログラムロード部11は、複数の機械語プログラム20を並行してロードすることが可能である。アクセス頻度情報22とは、機械語コード21によってアクセスされる、少なくとも1つの論理アドレス範囲とその論理アドレス範囲へのアクセス頻度との関係を示す情報である。アドレス変換テーブル作成部12は、論理アドレス空間1内の論理アドレスと、物理アドレス空間2内の物理アドレスと、ページサイズとが対応付けられたエントリを有するアドレス変換テーブル13を作成する。すなわち、アドレス変換テーブル13のエントリには、ページサイズで示されるサイズの論理アドレス範囲と物理アドレス範囲とが格納可能である。また、アドレス変換テーブル作成部12は、アクセス頻度情報22に基づいて、論理アドレス範囲へのアクセス頻度が高いかどうかを判断する。アドレス変換テーブル作成部12は、例えば、論理アドレス範囲へのアクセス頻度が、相対的に高いかどうか、あるいは閾値よりも高いかどうかで判断することができる。そして、アドレス変換テーブル作成部12は、論理アドレス範囲へのアクセス頻度が高いと判断した場合、アドレス変換テーブル13のエントリのうち、その論理アドレス範囲が格納されるエントリのページサイズをその論理アドレス範囲に応じたサイズにする。これにより、アドレス変換テーブルが最適化される。アドレス変換テーブル作成部12は、アドレス変換テーブル13のエントリがアクセス頻度の昇順あるいは降順となるようにアドレス変換テーブル13を作成してもよい。TLB登録部14は、アドレス変換テーブル13のエントリのうち、機械語コード21に従ってアクセスされる論理アドレス範囲が格納されたエントリをTLB5に登録する。つまり、TLBエントリのうち、アクセス頻度が高い論理アドレス範囲が格納されるエントリのページサイズが論理アドレス範囲に応じた大きさに設定されることになる。アドレス変換テーブル作成部12は、アクセス頻度情報22に基づいて、機械語コード21の実行時にアクセスされる論理アドレス範囲のうち、最もアクセス頻度が高い論理アドレス範囲を検出し、当該論理アドレス範囲が格納されたエントリをロック候補に設定してもよい。具体的に、図2に示すように、アドレス変換テーブル13に、エントリがロック候補であるかどうかを示すロック候補フラグを追加する。そして、アドレス変換テーブル作成部12は、アドレス変換テーブル13のエントリをロック候補にする場合にロック候補フラグを例えば‘1’に設定し、ロック候補ではないエントリのロック候補フラグを例えば‘0’に設定する。TLB登録部14は、アドレス変換テーブル13のエントリのうち、ロック候補フラグが‘1’であるエントリに格納された論理アドレス範囲と物理アドレス範囲とをTLB5のロック領域に登録する。また、TLB登録部14は、アドレス変換テーブル13のエントリのうち、ロック候補フラグが‘0’であるエントリをTLB5の非ロック領域に登録する。ここで、ロック領域とは、TLB5のエントリのうち、新たに登録されるエントリによる上書きが禁止されているエントリである。次に、アドレス変換テーブル作成部12における処理例を図3を参照して説明する。なお、機械語コード21に従って複数の論理アドレス範囲がアクセスされているときにページフォルトが発生した場合を例に挙げる。ページフォルトは、アドレス変換テーブル13において、アクセスされた論理アドレス範囲が物理アドレス範囲にマッピングされていないときに発生する。まず、ページフォルトが発生したときに、アクセス頻度情報22に基づいて、機械語コード21に従ってアクセスされた論理アドレス範囲がアクセス頻度の高い論理アドレス範囲かどうかが判断されるS301。アクセス頻度の高い論理アドレス範囲である場合S301のYes肢、その論理アドレス範囲を格納できるサイズでかつ最小となるページサイズが選択される。ページサイズとして、例えば、4KB,8KB,16KB,32KBのいずれかが選択可能である場合、アクセス頻度の高い論理アドレス範囲が10KBの場合は16KBのページサイズが選択される。そして、物理アドレス空間1から、選択されたページサイズ分の物理アドレスが取得されてアドレス変換テーブル13のエントリに格納されるS302。これにより、ページフォルトに係る論理アドレス範囲が物理アドレス範囲にマッピングされる。その後、機械語コード21に従ってアクセスされた複数の論理アドレス範囲のうち、ページフォルトが発生したときにアクセスされた論理アドレス範囲が、最もアクセス頻度の高い論理アドレス範囲であるかどうかが判断されるS303。その論理アドレス範囲が最もアクセス頻度の高い論理アドレス範囲である場合S303のYes肢、その論理アドレス範囲が格納されたエントリはロック候補となるS304。つまり、そのエントリのロック候補フラグに‘1’が設定される。また、ページフォルトが発生したときにアクセスされた論理アドレス範囲が最もアクセス頻度の高い論理アドレス範囲でない場合S303のNo肢、そのアドレス範囲が格納されたエントリのロック候補フラグに‘0’が設定される。一方、ページフォルトが発生したときに、機械語コード21に従ってアクセスされた論理アドレス範囲のアクセス頻度が高くない場合S301のNo肢、デフォルトのページサイズとして例えば4KBが選択されるS305。以上のように、アドレス変換テーブル13のエントリのうち、アクセス頻度の高い論理アドレス範囲が格納されるエントリのページサイズが大きくなるため、内部フラグメンテーションが発生しにくくなる。なお、S303およびS304において、最もアクセス頻度の高い論理アドレス範囲が格納されるエントリをロック候補にするようにしたが、論理アドレス範囲へのアクセス頻度が閾値以上の場合に、その論理アドレス範囲が格納されるエントリをロック候補にしてもよい。次に、TLB登録部14における処理例を図4を参照して説明する。まず、TLB登録部14によって、アドレス変換テーブル13のロック候補フラグが参照されて、アドレス変換テーブル13のエントリのうちTLB5に登録すべきエントリがロック候補であるかどうかが判断されるS401。ロック候補である場合S401のYes肢、TLB5のロック領域に空きがあるかどうかが判断されるS402。TLB5のロック領域に空きがある場合S402のYes肢、TLB5のロック領域にアドレス変換テーブル13のロック候補のエントリが登録されるS403。ロック候補のエントリが複数存在する場合は、TLB登録部14の処理順でロック候補のエントリがTLB5のロック領域に登録されるようにしてもよい。TLB5のロック領域に空きがない場合S402のNo肢、アドレス変換テーブル13のロック候補のエントリはTLB5の非ロック領域に登録されるS404。一方、TLB5に登録すべきアドレス変換テーブル13のエントリがロック候補でない場合S401のNo肢、そのエントリはTLB5の非ロック領域に登録されるS404。以上、本実施形態に係るOS10によると、アクセスされる論理アドレス範囲の数が増加しても、頻繁にアクセスされる論理アドレス範囲が格納されるTLBエントリのみ、そのページサイズが大きくなるため、TLB5を効率良く利用することができる。したがって、TLBミスヒットを抑制することができる。さらに、アクセス頻度の高い論理アドレス範囲が格納されるTLBエントリをロックすることで、当該論理アドレス範囲へのアクセス時に必ずTLBヒットになる。なお、OS10における機械語コード21の処理が終了した場合、TLB登録部14は、TLB5のロック領域に登録されているエントリのうち機械語コード21の実行中に参照されていたエントリを非ロック領域に移動することが好ましい。この場合、アドレス変換テーブル作成部12は、TLB5の非ロック領域に移動されたエントリに相当するアドレス変換テーブル13のエントリをロック候補から非ロック候補に変更する。図5は、図1に示す機械語プログラム20を生成するコンパイラシステムの構成を示すブロック図である。図5に示すコンパイラシステム30は、ソースプログラムである高級言語プログラム27をコンパイルして機械語プログラム20を生成する。コンパイラシステム30は、構文解析部31と、最適化部32と、コード生成部34と、出力部35とで構成することができる。構文解析部31は、図6に示すC言語等で記述された高級言語プログラム27をトークンに分解し、分解したトークンに基づいて高級言語プログラム27の構造を解析して中間コードを生成する。図5に戻り、最適化部32は、機械語コード21の実行時間等が最小化されるように中間コードを効率の高いコードに変換する。また、最適化部32は、アクセス頻度解析部33を備えている。アクセス頻度解析部33は、図6に示す高級言語プログラム27内で用いられる変数a,b,cのそれぞれに関する情報を抽出する。具体的に、各変数a,b,cの先頭アドレスおよびサイズに基づいて、各変数a,b,cによってアクセスされる論理アドレス範囲を取得する。また、アクセス頻度解析部33は、各変数a,b,cが、取得された論理アドレス範囲にアクセスする頻度を算出する。なお、アクセス頻度解析部33を最適化部32の外部に設けてもよい。この場合、最適化部32を省略してもよい。図5に戻り、コード生成部34は、機械語コード21を生成する。出力部35は、論理アドレス範囲とアクセス頻度との対応付けを行ってアクセス頻度情報22を生成し、図7に示すような機械語コード21とアクセス頻度情報22とからなる機械語プログラム20を出力する。ここで、図7に示すアクセス頻度情報22のうち、符号23は高級言語プログラム27内の各変数a,b,c,の先頭アドレスを表す。符号24は、各変数a,b,cのサイズを表す。符号25は、各変数a,b,cのアクセス頻度を表す。各変数a,b,cの先頭アドレス23およびサイズ24で示される内容が論理アドレス範囲である。出力部35は、アクセス頻度情報22を機械語プログラム20から分離して別ファイルに出力してもよい。次に、アクセス頻度解析部33によってアクセス頻度25が算出されるときの処理例を図8および図9を参照して説明する。まず、高級言語プログラム27内の関数のうち、図9Aに示すテーブル36に未登録の関数があるかどうかが判断されるS801。テーブル36に未登録の関数がある場合S801のYes肢、その関数名とその関数が呼び出される合計回数とがテーブル36に登録されるS802。例えば、図6の場合、高級言語プログラム27内で関数func1は1回のみ呼び出されるため、呼び出される合計回数は‘1’となる。そして、高級言語プログラム27内の関数において用いられる変数と、その変数がループ処理内に出現する場合にはそのループのネスト数とが、関数名に関連付けられて図9Bに示すテーブル37に登録されるS803。例えば、図6の場合、関数func1内で変数aが出現する位置におけるループのネスト数は‘1’であるため、関数func1にa,1が関連付けられてテーブル37に登録される。以後、S801の処理に戻り、S801からS803の処理が繰り返される。以上により、テーブル36,37が作成される。なお、変数がループ処理以外の箇所に出現する場合、ネスト数を‘1’とすればよい。一方、テーブル36に未登録の関数がない場合S801のNo肢、テーブル36,37に基づいてアクセス頻度が算出されるS804。具体的に、テーブル36およびテーブル37に共通する関数名について、テーブル36の関数が呼び出される回数に対する重みを表すパラメータをm、テーブル37のループネスト数に対する重みを表すパラメータをnとすると、アクセス頻度fは、f=テーブル36の関数が呼び出される回数×mテーブル37のループネスト数×nで表される計算式で算出することができる。したがって、図6に示す高級言語プログラム27内で用いられる変数a,b,cのそれぞれのアクセス頻度fa,fb,fcは、テーブル36,37より、fa=1×m1×n=mnfb=1×m2×n=m2nfc=2×m2×n=2m2nのように算出することができる。そして、各変数a,b,cと各変数のアクセス頻度とが図9Cに示すテーブル38に登録される。ここで、図7に示すアクセス頻度25は、パラメータm=10,パラメータn=20として、fa=mn=1020=30fb=m2n=102×20=50fc=2m2n=2×102×20=60のように算出された値である。以上、本実施形態に係るコンパイラシステム30で生成された機械語プログラム20を図1に示すOS10で実行する際に、TLBミスヒットを極力少なくすることができる。一般に、高級言語プログラムにおいて、変数が出現するループのネスト数および変数が用いられる関数が呼び出される回数は静的であることが多く、ループ回数は動的であることが多い。ループのネスト数および関数の呼び出し回数の増加はアクセス頻度25の増加につながることから、これらに基づいてアクセス頻度25を算出することが好ましいが、関数の呼び出し回数のみに基づいてアクセス頻度25を算出してもよい。また、パラメータmおよびパラメータnの値は任意である。なお、高級言語プログラムにおいて、変数が出現するループのループ回数が静的である場合には、そのループ回数をアクセス頻度25としてもよい。また、コンパイラシステム30は、関数の呼び出し回数およびループのネスト数の他に、アクセス頻度25の増減に影響を与える動的情報をプロファイル等から読み込んでアクセス頻度25を算出してもよい。"