(57)【要約】【課題】システムのリアルタイム性を保つことが可能なメモリ共有システムを提供する。【解決手段】メモリ共有システムはプロセッサ２１４、２１７と命令メモリ２０８、２０９と制御部２２０とを具備する。命令メモリ２０８、２０９はプロセッサ２１４、２１７に対応する。制御部２２０は、メモリ利用情報テーブル２１３と処理負荷計測回路２０７とを備え、プロセッサ２１４、２１７が実行するプログラムを命令メモリ２０８、２０９へロードする。メモリ利用情報テーブル２１３はプロセッサ２１４、２１７が実行するプログラムを命令メモリ２０８、２０９のいずれかに共有／非共有で保持するための共有情報４００を有する。処理負荷計測回路２０７は命令メモリ２０８、２０９のいずれかにロードされたプログラムへのプロセッサ２１４、２１７のアクセス頻度を計測する。プログラムの共有／非共有はその頻度に基づき選択される。【選択図】図１
2014106819.tif 000002
【特許請求の範囲】
【請求項１】
複数のプロセッサと、
前記複数のプロセッサに対応して設けられた複数の命令メモリと、
前記複数のプロセッサが実行するプログラムを前記複数の命令メモリへロードする制御部と
を具備し、
前記制御部は、
前記複数のプロセッサが実行するプログラムを、前記複数の命令メモリのいずれかに、共有又は非共有として保持するための共有情報を有するメモリ利用情報テーブルと、
前記複数の命令メモリのいずれかにロードされたプログラムに前記複数のプロセッサがアクセスする頻度を計測する処理負荷計測回路と
を備え、
前記命令メモリにロードされたプログラムの共有／非共有は、前記処理負荷計測回路の計測結果に基づいて選択され、前記共有情報として記録される
メモリ共有システム。
【請求項２】
請求項１に記載のメモリ共有システムにおいて、
前記命令メモリにロードされたプログラムの前記共有情報は、前記頻度が予め設定された閾値を上回ったとき、非共有に設定される
メモリ共有システム。
【請求項３】
請求項１に記載のメモリ共有システムにおいて、
前記メモリ利用情報テーブルが有する前記共有情報は、
前記複数の命令メモリのいずれかに保持されているプログラムを前記複数のプロセッサがアクセスすることを示す共有設定情報フィールドと、
前記複数の命令メモリのいずれかにロードされたプログラムの、当該命令メモリの領域の先頭アドレスを示す物理先頭アドレスフィールドと、
前記複数の命令メモリのいずれかにロードされたプログラムがアドレッシングされている領域のプログラム先頭アドレスを示すプログラム先頭アドレスフィールドと、
前記複数の命令メモリのいずれかにロードされたプログラムのサイズを示すサイズフィールドと
を有する
メモリ共有システム。
【請求項４】
請求項１に記載のメモリ共有システムにおいて、
前記処理負荷計測回路は、
前記複数の命令メモリのうちの第１命令メモリにロードされた第１プログラムを特定する情報を格納する第１メモリ利用情報レジスタ群と、
前記特定する情報に基づいて、前記第１プログラムに、前記複数のプロセッサのうちの第１プロセッサがアクセスする第１頻度を計測する第１カウンタ回路と、
前記第１頻度を基準値と比較する第１比較回路と、
前記第１頻度が前記基準値を上回った場合、前記メモリ利用情報テーブルにおいて、前記第１プログラムが非共有となるように共有情報を書き換えることを要求する書き換え要求制御回路と
を備える
メモリ共有システム。
【請求項５】
請求項４に記載のメモリ共有システムにおいて、
前記処理負荷計測回路は、
前記基準値と、前記第１頻度の計測開始を示す命令と、前記第１プログラムを示す情報とを格納する第１レジスタ群と、
前記第１プログラムを示す情報に基づいて、前記メモリ利用情報テーブルから前記第１プログラムを特定する情報を取得して、メモリ利用情報レジスタ群へ出力するメモリ利用情報検索要求制御回路と
を更に備える
メモリ共有システム。
【請求項６】
請求項４に記載のメモリ共有システムにおいて、
前記処理負荷計測回路は、
前記第１プログラムを特定する情報を格納する第２メモリ利用情報レジスタ群と、
前記特定する情報に基づいて、前記第１命令メモリにロードされた前記第１プログラムに前記複数のプロセッサのうちの第２プロセッサがアクセスする第２頻度を計測する第２カウンタ回路と、
前記第２頻度を基準値と比較する第２比較回路と
を更に備え、
前記書き換え要求制御回路は、前記第１頻度および前記第２頻度の少なくとも一方が前記基準値を上回った場合、前記メモリ利用情報テーブルにおいて、前記第１プログラムが非共有となるように前記共有情報の書き換えを指示する
メモリ共有システム。
【請求項７】
請求項１に記載のメモリ共有システムにおいて、
前記制御部は、
前記複数のプロセッサのうちの第１プロセッサからのプログラムの呼び出しに応答して、前記複数の命令メモリのうちの前記第１プロセッサに対応する第１命令メモリへ前記プログラムをロードし、
前記メモリ利用情報テーブルにおいて、前記第１プログラムを前記複数のプロセッサ間で共有となるように前記共有情報を設定し、
前記処理負荷計測回路は、
前記第１命令メモリにロードされた前記プログラムに前記複数のプロセッサがアクセスする頻度を計測する
メモリ共有システム。
【請求項８】
請求項７に記載のメモリ共有システムにおいて、
前記制御部は、
前記第１命令メモリにロードされた前記プログラムが非共有に再設定されたとき、前記複数のプロセッサのうちの第２プロセッサからの前記プログラムの呼び出しに応答して、前記複数の命令メモリのうちの前記第２プロセッサに対応する第２命令メモリへ前記プログラムをロードする
メモリ共有システム。
【請求項９】
請求項４に記載のメモリ共有システムにおいて、
前記制御部は、
前記複数のプロセッサのいずれかによるプログラムの実行の指示に応答して、前記メモリ利用情報テーブルを参照して、前記複数の命令メモリのいずれかに当該プログラムがロードされているか否かを検索する共有化制御回路と、
当該プログラムがロードされていない場合、前記共有化制御回路の命令に基づいて、当該プログラムを記憶部から取得して、前記複数の命令メモリのうちの対応するものへロードする転送回路と、
前記共有化制御回路の命令に基づいて、前記ロードされたプログラムに関する共有情報を前記メモリ利用情報テーブルに書き込むメモリ利用情報検索書き込み回路と
更に備える
メモリ共有システム。
【請求項１０】
請求項９に記載のメモリ共有システムにおいて、
前記共有化制御回路は、当該プログラムがロードされている場合、当該プログラムの共有情報の書き換えを命令し、
前記メモリ利用情報検索書き込み回路は、前記書き換え命令に基づいて、前記メモリ利用情報テーブルの当該プログラムの共有情報を共有に書き換える
メモリ共有システム。
【請求項１１】
請求項１に記載のメモリ共有システムを具備し、
前記メモリ共有システムは、
複数のプロセッサの一つとして、一方のネットワークに接続される第１Ｅｔｈｅｒｎｅｔ用コプロセッサと、
前記複数のプロセッサの他の一つとして、他方のネットワークに接続される第２Ｅｔｈｅｒｎｅｔ用コプロセッサと
を備える
ネットワークルータ。
【請求項１２】
複数のプロセッサのうちの第１プロセッサからのプログラムの呼び出しに応答して、前記複数のプロセッサに対応して設けられた複数の命令メモリのうちの前記第１プロセッサに対応する第１命令メモリへ前記プログラムをロードするステップと、
前記第１プログラムを前記複数のプロセッサ間で共有に設定するステップと、
前記第１命令メモリにロードされた前記プログラムに前記複数のプロセッサがアクセスする頻度を計測するステップと、
前記頻度が予め設定された閾値を上回ったとき、前記第１命令メモリにロードされた前記プログラムを非共有に設定するステップと
を具備する
メモリ共有方法。
【請求項１３】
請求項１２に記載のメモリ共有方法において、
前記第１命令メモリにロードされた前記プログラムが非共有に再設定されたとき、前記複数のプロセッサのうちの第２プロセッサからの前記プログラムの呼び出しに応答して、前記複数の命令メモリのうちの前記第２プロセッサに対応する第２命令メモリへ前記プログラムをロードするステップを更に具備する
メモリ共有方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリ共有システムに関し、特に複数のコプロセッサを搭載するシステムに好適に利用できるものである。
【背景技術】
【０００２】
小規模の組み込みシステムやシステムＬＳＩでは、単一のプロセッサで全ての処理を行っている。しかし、近年、システムに求められるアプリケーション処理は、多様化し、複雑化している。そのため、単一プロセッサでは十分な速度でアプリケーション処理を実行することが困難となっている。このような事態を解決する方法の一つとして、プロセッサ内に複数のコプロセッサを設けて一つのシステムとする方法が知られている。
【０００３】
そのような複数のコプロセッサを備えたシステムでは、ある共通の処理を複数のコプロセッサで分散して処理する場合もある。その場合には、各コプロセッサが同一のプログラム処理を行うことになる。しかし、各コプロセッサが使用する命令メモリ領域は各コプロセッサへ別々に割り当てられる。そのため、同じ内容のコプログラムが複数のメモリ領域に多重にロードされることになり、使用されるメモリ領域が増大することになる。その結果、システムＬＳＩのサイズが増加して、コストの増加に直接的に結びつくことになる。
【０００４】
それを解決する技術として特開２００８−２２５６２０号公報（ＵＳ２００８２２２３６６（Ａ１））にメモリ共有システム、方法、および、プログラムが開示されている。このメモリ共有システムは、使用すべきメモリ領域が計算機ごとに分割されたメモリにロードされたプログラムを、複数の計算機間で共有する。このメモリ共有システムは、メモリ利用情報検索手段と、メモリ確保手段とを備えている。メモリ利用情報検索手段は、一の計算機から、メモリへロードすべきプログラムを特定する情報を含むメモリ確保要求が発生すると、次の動作を行う。メモリにロード済みのプログラムについて、プログラムを一意に識別するためのプログラムＩＤを記憶するメモリ利用情報記憶部を参照して、メモリ確保要求が発生したプログラムに対応するプログラムＩＤと一致するプログラムＩＤが記憶されているか否かを判断する。メモリ確保手段は、メモリ利用情報検索手段にて一致するプログラムＩＤが記憶されていると判断されると、プログラムがロードされたメモリ領域を複数の計算機間で共有化する処理を行う。このメモリ共有システムでは、メモリ利用情報検索手段により、プログラムＩＤ、要求元メモリアドレスおよび要求メモリサイズを検索キーとしてメモリ利用情報記憶部を検索する。そして、メモリ利用情報記憶部に該当するエントリがあった場合、メモリ確保手段が、既に確保されているメモリ領域の共有処理を行う。このようにすることで、複数の仮想計算機間で同じプログラムファイルを実行したときに、メモリにロードされるプログラムファイルを共有することができる。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２００８−２２５６２０号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
上記特許文献１の技術では、第１の仮想計算機用として確保された第１の記憶部内の共有すべきメモリ領域に対するアクセス権限を変更して、第２の仮想計算機からもアクセス可能とし、第２の仮想計算機のアクセスアドレスと実計算機でのメモリアドレスとの対応付けを行う。それにより、第１の記憶部内にロード済みの第１のプログラムファイルに、第２の仮想計算機からアクセスできるようにする。同様に、第２の仮想計算機用として確保された第２の記憶部内の共有すべきメモリ領域に対するアクセス権限を変更して、第１の仮想計算機からもアクセス可能とし、第１の仮想計算機のアクセスアドレスと実計算機でのメモリアドレスとの対応付けを行う。それにより、第２の記憶部内にロード済みの第２プログラムファイルに、第１の仮想計算機からアクセスできるようにする。
【０００７】
その結果、第１のプログラムファイルおよび第２のプログラムファイルは、第１の仮想計算機と第２の仮想計算機の両仮想計算機からアクセス可能な状態になっている。その場合、第２の仮想計算機が、第２のプログラムファイルにアクセスしている状態で、第１の仮想計算機からも第２のプログラムファイルへのアクセス要求が発生した場合、第１の仮想計算機のアクセス要求は、第２の仮想計算機のアクセス終了まで待たされることになる。それは第１の仮想計算機の処理能力の低下につながる。同様に、第１の仮想計算機が、第１のプログラムファイルにアクセスしている状態で、第２の仮想計算機からも第１のプログラムファイルへのアクセス要求が発生した場合、第２の仮想計算機のアクセス要求は、第１の仮想計算機のアクセス終了まで待たされることになる。それは第２の仮想計算機の処理能力の低下につながる。
【０００８】
特に、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）などのような第１の仮想計算機および第２の仮想計算機が共通して実行し、更にリアルタイム性が求められるプログラムファイルが両仮想計算機によりアクセスされる場合は、その傾向は顕著になる。すなわち、待たされる側の仮想計算機では、プログラムファイルの実行の遅れにより、リアルタイム性を保つことが困難となる。また、このような仮想計算機処理能力の低下やリアルタイム性の低下は、搭載される仮想計算機数が多くなる程、顕著に現れることとなる。
【０００９】
その他の課題と新規な特徴は、本明細書の記述および添付図面から明らかになるであろう。
【課題を解決するための手段】
【００１０】
一実施の形態によれば、メモリ共有システムは、命令メモリにロードされた共有プログラムの使用頻度を監視して、使用頻度が高い共有プログラムを非共有に変更し、そのプログラムを別の命令メモリへも新たにロードする。
【発明の効果】
【００１１】
前記一実施の形態によれば、メモリ共有システムは、システムのリアルタイム性を保つことができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、実施の形態に係るメモリ共有システムの構成を示すブロック図である。
【図２】図２は、実施の形態に係るメモリ共有システムのコプロセッサ処理負荷計測回路の構成を示すブロック図である。
【図３】図３は、実施の形態に係るメモリ共有システムのメモリ利用情報テーブルの構成を示す表である。
【図４Ａ】図４Ａは、命令メモリＡにロードされたプログラムが共有状態の場合でのメモリ利用情報テーブルの設定例を示す表である。
【図４Ｂ】図４Ｂは、メモリ利用情報テーブルが図４Ａのように設定された状態における命令メモリＡおよび命令メモリＢへのプログラムのロード状態を示す概念図である。
【図５Ａ】図５Ａは、命令メモリＡにロードされたプログラムが非共有設定に変更された場合でのメモリ利用情報テーブルの設定例を示す表である。
【図５Ｂ】図５Ｂは、メモリ利用情報テーブルが図５Ａのように設定された状態における命令メモリＡおよび命令メモリＢへのプログラムのロード状態を示している。
【図６Ａ】図６Ａは、プログラムが新たに命令メモリＡにロードされた場合でのメモリ利用情報テーブルの設定例を示す表である。
【図６Ｂ】図６Ｂは、メモリ利用情報テーブルが図６Ａのように設定された状態における命令メモリＡおよび命令メモリＢへのプログラムのロード状態を示している。
【図７】図７は、実施の形態に係るメモリ共有システムの動作を示すフロー図である。
【図８】図８は、本実施の形態に係るメモリ共有システムをネットワークルータに適用した構成例を示すブロック図である。
【発明を実施するための形態】
【００１３】
（第１の実施の形態）
以下、本実施の形態に係るメモリ共有システムおよびメモリ共有方法に関して、添付図面を参照して説明する。
【００１４】
メモリ共有システム（２００）は、複数のプロセッサ（２１４、２１７）と、複数の命令メモリ（２０８、２０９）と、制御部（２２０）とを具備している。複数のプロセッサ（２１４、２１７）は、いずれもコプロセッサとして機能する。複数の命令メモリ（２０８、２０９）は、複数のプロセッサ（２１４、２１７）に対応して設けられている。制御部（２２０）は、複数のプロセッサ（２１４、２１７）が実行するプログラムを（大容量メモリから）複数の命令メモリ（２０８、２０９）へロードする。制御部（２２０）は、メモリ利用情報テーブル（２１３）と、処理負荷計測回路（２０７）とを備えている。メモリ利用情報テーブル（２１３）は、複数のプロセッサ（２１４、２１７）が実行するプログラムを、複数の命令メモリ（２０８、２０９）のいずれかに、共有又は非共有として保持するための共有情報（４００）を有する。処理負荷計測回路（２０７）は、複数の命令メモリ（２０８、２０９）のいずれかにロードされたプログラムに複数のプロセッサ（２１４、２１７）がアクセスする頻度を計測する。命令メモリ（２０８、２０９）にロードされたプログラムの共有／非共有は、処理負荷計測回路（２０７）の計測結果に基づいて選択され、共有情報（４００）として記録される。
【００１５】
このような構成を有する本実施の形態のメモリ共有システム（２００）は、一つの命令メモリ（２０８）にロードされた共有のプログラムの使用頻度が高い場合、その共有のプログラムを非共有に変更することができる。それにより、その命令メモリ（２０８）に対応するプロセッサ（２１４）は、そのプログラムの実行を待たされることが無くなる。その結果、そのプロセッサ（２１４）のリアルタイム性を保つことができる。また、非共有への変更に伴って、他のプロセッサ（２１７）は、対応する他の命令メモリ（２０９）に別途新たにそのプログラムをロードすることになる。それにより、他のプロセッサ（２１７）は、そのプログラムの実行を待たされることが無くなる。その結果、他のプロセッサ（２１７）のリアルタイム性を保つことができる。以上のようにして、これらのプロセッサ（２１４、２１７）を含むプロセッサシステムのリアルタイム性を保つことができ、処理能力の低下を防止することができる。
また、命令メモリ（２０８）にロードされたプログラムの使用頻度が低い場合、プログラムを共有可能に変更することができる。それにより、命令メモリ（２０８）を効率的に使用することが可能となる。
また、複数の命令メモリ（２０８、２０９）にロードされたプログラムの使用頻度が低い場合、プログラムを共有に変更することができる。それにより、複数の命令メモリ（２０８）を効率的に使用することが可能となる。
【００１６】
以下、本実施の形態に係るメモリ共有システム２００について詳細に説明する。
図１は、本実施の形態に係るメモリ共有システムの構成を示すブロック図である。メモリ共有システム２００は、大容量メモリ２０１と、プロセッサ２１８とを具備している。なお、本実施の形態では、プロセッサ２１８中のコプロセッサの数が２個（後述）である場合を例として説明するが、本実施の形態はその例に限定されるものではなく、更に多くのコプロセッサを有していても良い。
【００１７】
大容量メモリ２０１は、処理プログラム群２０２を格納している。処理プログラム群２０２は、プロセッサ２１８に搭載されるコプロセッサが実行する複数のプログラムである。ここでは、処理プログラム群２０２は、例として、プログラム２０３、プログラム２０４、プログラム２０５およびプログラム２０６を含んでいる。プロセッサ２１８は、処理プログラム群２０２のプログラムを実行する。プロセッサ２１８は、メインプロセッサ２１２と、コプロセッサＡ２１４と、コプロセッサＢ２１７と、制御部２２０と、命令メモリＡ２０８と、命令メモリＢ２０９とを備えている。
【００１８】
メインプロセッサ２１２は、情報処理回路である。メインプロセッサ２１２は、コプロセッサＡ２１４およびコプロセッサＢ２１７を含むプロセッサ２１８全体を制御する。コプロセッサＡ２１４およびコプロセッサＢ２１７は、情報処理回路である。コプロセッサＡ２１４およびコプロセッサＢ２１７は、プロセッサ２１８の分割処理を行うものである。プログラムアクセスのとき、共有化制御回路２１５に対してアクセス先を示すプログラムアドレスを出力する。そして、共有化制御回路２１５により取得されたプログラム２０３、プログラム２０４、プログラム２０５およびプログラム２０６のいずれかを実行する。
【００１９】
命令メモリＡ２０８は、コプロセッサＡ２１４が実行するプログラムを格納する。命令メモリＢ２０９は、コプロセッサＢ２１７が実行するプログラムを格納する。制御部２２０は、コプロセッサＡ２１４、Ｂ２１７が実行するプログラムを大容量メモリ２０１から命令メモリ２０８および命令メモリ２０９へロードする。制御部２２０は、命令メモリＡ２０８および命令メモリＢ２０９のいずれかにロードされたプログラムにコプロセッサＡ２１４、Ｂ２１７がアクセスする頻度を計測する。そして、その計測結果に基づいて、命令メモリＡ２０８および命令メモリＢ２０９にロードされたプログラムの共有／非共有を選択する。制御部２２０は、共有化制御回路２１５と、プログラム転送回路２１１と、メモリアクセス制御回路２１０と、メモリ利用情報検索・書き込み回路２１６と、コプロセッサ処理負荷計測回路２０７と、メモリ利用情報テーブル２１３とを備えている。
【００２０】
共有化制御回路２１５は、コプロセッサＡ２１４およびコプロセッサＢ２１７からのプログラムアクセスを受け、命令メモリＡ２０８および命令メモリＢ２０９に対するプログラム転送要求をプログラム転送回路２１１へ出力する。また、共有化制御回路２１５は、メモリ利用情報テーブル２１３に基づいてコプロセッサＡ２１４とコプロセッサＢ２１７との間のプログラム共有を行う。
【００２１】
具体的には、共有化制御回路２１５は、コプロセッサＡ２１４のプログラムアクセスのとき、メモリ利用情報検索・書き込み回路２１６に対してメモリ利用情報検索要求を出力してメモリ利用情報検索を行う。メモリ利用情報検索では、コプロセッサより出力されるプログラムアドレスで示されるプログラム領域が、命令メモリＡ２０８又は命令メモリＢ２０９に既にロードされているかをメモリ利用情報テーブル２１３で検索する。対象となるプログラムコードを含むプログラムが命令メモリＡ２０８および命令メモリＢ２０９にロードされていない場合、プログラム転送回路２１１に対してプログラム転送要求を出力する。そして、そのプログラムを、命令メモリＡ２０８へ、メモリアクセス制御回路２１０を経由してロードする。それと共に、メモリ利用情報検索・書き込み回路２１６に対してメモリ利用情報書き込み要求を出力する。そして、そのプログラムのプログラム先頭アドレス、そのプログラムがロードされた命令メモリＡ２０８の物理先頭アドレス４０２およびプログラムサイズ４０３をメモリ利用情報テーブル２１３へ登録する。
【００２２】
共有化制御回路２１５は、同様に、コプロセッサＢ２１７のプログラムアクセスのとき、メモリ利用情報検索・書き込み回路２１６に対してメモリ利用情報検索要求を出力することでメモリ利用情報検索を行う。対象となるプログラムコードを含むプログラムが命令メモリＡ２０８および命令メモリＢ２０９にロードされていない場合、プログラム転送回路２１１に対してプログラム転送要求を出力する。そして、そのプログラムを、命令メモリＢ２０９へ、メモリアクセス制御回路２１０を経由してロードする。それと共に、メモリ利用情報検索・書き込み回路２１６に対してメモリ利用情報書き込み要求を出力する。そして、そのプログラムのプログラム先頭アドレス、そのプログラムがロードされた命令メモリＢ２０９の物理先頭アドレス４０２およびプログラムサイズ４０３をメモリ利用情報テーブル２１３へ登録する。
【００２３】
また、上記のメモリ利用情報検索時において、対象のプログラムが命令メモリＡ２０８又は命令メモリＢ２０９にロードされている場合、以下の所定の条件を満たすときは、共有化制御回路２１５は、メモリ利用情報検索・書き込み回路２１６へメモリ利用情報書き込み要求を出力する。メモリ利用情報書き込み要求では、メモリ利用情報テーブル２１３において、そのプログラムがロードされている領域を共有されたプログラム領域として、共有情報ステータス４０１を更新させることで、プログラム共有制御を行う。ただし、上記の所定の条件は、目的のプログラムが他のコプロセッサにより既にロードされ、そのプログラムの情報がメモリ利用情報テーブル２１３に既に登録され、且つ、共有情報ステータス４０１が共有可能なプログラムを示すことである。
【００２４】
プログラム転送回路２１１は、共有化制御回路２１５からプログラム転送要求を受け、コプロセッサＡ２１４又はコプロセッサＢ２１７が実行するプログラムとして、大容量メモリ２０１内のプログラム２０３〜２０６のいずれかを読み出す。そして、メモリアクセス制御回路２１０を介して、命令メモリＡ２０８又は命令メモリＢ２０９へ転送する。
【００２５】
メモリアクセス制御回路２１０は、共有化制御回路２１５からの命令メモリ又は命令メモリＢ２０９へのアクセス要求に基づいて、命令メモリアクセス制御信号を生成し、命令メモリＡ２０８および命令メモリＢ２０９へ出力する。また、プログラム転送回路２１１からのプログラム２０３〜２０６のいずれかを命令メモリＡ２０８又は命令メモリＢ２０９へ転送する。
【００２６】
命令メモリＡ２０８および命令メモリＢ２０９は、それぞれコプロセッサＡ２１４およびコプロセッサＢ２１７に割り当てられた命令メモリであり、各コプロセッサが実行するプログラムを格納される。命令メモリＡ２０８および命令メモリＢ２０９へのプログラム書き込みは、以下のように行う。プログラム転送回路２１１が大容量メモリ２０１内のプログラム２０３〜２０６のいずれかを読み出す。次に、メモリアクセス制御回路２１０が転送先の命令メモリＡ２０８又は命令メモリＢ２０９を決定する。それにより、プログラム転送回路２１１が読み出されたプログラム２０３〜２０６を命令メモリＡ２０８又は命令メモリＢ２０９へ書き込む。また、コプロセッサＡ２１４およびコプロセッサＢ２１７のプログラム実行は、以下のように行う。コプロセッサＡ２１４およびコプロセッサＢ２１７より出力されるアドレスをもとに、共有化制御回路２１５にてアドレス変換を行い、メモリアクセス制御回路２１０において、読み出すプログラムが格納された命令メモリＡ２０８又は命令メモリＢ２０９が決定される。
【００２７】
メモリ利用情報検索・書き込み回路２１６は、メモリ利用情報テーブル２１３に対して、命令メモリＡ２０８および命令メモリＢ２０９へ格納されるプログラムに関する情報を書き込む。また、メモリ利用情報検索・書き込み回路２１６は、命令メモリＡ２０８および命令メモリＢ２０９へ格納されたプログラムに関する情報の検索および書き換えを行う。
【００２８】
具体的には、メモリ利用情報検索・書き込み回路２１６は、共有化制御回路２１５、コプロセッサ処理負荷計測回路２０７およびメインプロセッサ２１２のいずれかからのメモリ利用情報書き込み要求を受け取る。そして、メモリ利用情報テーブル２１３に対するプログラム情報の新規書き込み・更新を行う。特に、メモリ利用情報検索・書き込み回路２１６は、命令メモリＡ２０８又は命令メモリＢ２０９へのプログラム転送時に、メモリ利用情報テーブル２１３の情報を共有化制御回路２１５から受け取り、メモリ利用情報テーブル２１３に登録する。
【００２９】
また、メモリ利用情報検索・書き込み回路２１６は、共有化制御回路２１５、コプロセッサ処理負荷計測回路２０７およびメインプロセッサ２１２のいずれかからのメモリ利用情報検索要求を受け、該当するプログラム情報の検索を行う。そして、検索要求を行った共有化制御回路２１５、コプロセッサ処理負荷計測回路２０７およびメインプロセッサ２１２のいずかに対し、メモリ利用情報テーブル２１３に登録されている情報を検索結果として出力する。特に、メモリ利用情報検索・書き込み回路２１６は、コプロセッサＡ２１４又はコプロセッサＢ２１７のプログラムアクセス時に、メモリ利用情報テーブル２１３の情報検索を行い、アクセス対象のプログラムが格納された命令メモリＡ２０８又は命令メモリＢ２０９の領域を特定する。
【００３０】
メモリ利用情報テーブル２１３は、命令メモリＡ２０８および命令メモリＢ２０９へ格納されたプログラムに関する情報が登録される。具体的には、メモリ利用情報テーブル２１３は、命令メモリＡ２０８および命令メモリＢ２０９へ格納されたプログラムに関する情報として、共有情報ステータス４０１と、プログラム先頭アドレス４０４と、物理先頭アドレス４０２と、プログラムサイズ４０３とを含んでいる。共有情報ステータス４０１は、命令メモリＡ２０８又は命令メモリＢ２０９に転送されたプログラムのコプロセッサ間における共有状態を示す。プログラム先頭アドレス４０４は、処理プログラム群２０２に格納されたプログラムを、コプロセッサプログラムメモリ空間にアドレッシングした仮想メモリ空間であり、プログラム２０３〜２０６の先頭アドレスを示す。物理先頭アドレス４０２は、命令メモリＡ２０８又は命令メモリＢ２０９の物理空間アドレスであり、各プログラムがロードされた命令メモリ領域の先頭アドレスを示す。プログラムサイズ４０３は、命令メモリＡ２０８又は命令メモリＢ２０９に転送されたプログラム２０３〜２０６のサイズを示す。この共有情報ステータス４０１のフィールドでは、プログラム（領域）の共有の有無等の確認およびその書き換えができる。それにより、プログラム（領域）へのアクセス回数の多寡により共有／非共有の設定を容易に変更できる。
【００３１】
コプロセッサ処理負荷計測回路２０７は、命令メモリＡ２０８および命令メモリＢ２０９に格納されたプログラムに対する各プロセッサのアクセス頻度を計測する。コプロセッサ処理負荷計測回路２０７は、その計測結果に基づいて、命令メモリＡ２０８および命令メモリＢ２０９にロードされたプログラムの共有／非共有を選択する。例えば、共有プログラムに対するアクセス回数が多い場合、その共有プログラムを非共有に設定し直す信号を出力する。それにより、アプリケーションの処理速度の低下やリアルタイム性の低下を回避することができる。
【００３２】
具体的には、コプロセッサ処理負荷計測回路２０７は、命令メモリＡ２０８および命令メモリＢ２０９内のプログラム情報をメモリ利用情報検索・書き込み回路２１６を介してメモリ利用情報テーブル２１３より取得する。そして、所定の時間内において、共有されたメモリ領域の任意時間のアクセス頻度を計測する。そして、計測結果が閾値レベルを超えた場合は、メモリ利用情報検索・書き込み回路２１６に対してメモリ利用情報書き込み要求を出力し、該当領域の共有情報ステータスを共有不可の領域として再設定を行う。閾値レベルはメインプロセッサ２１２によって設定され、任意時間におけるコプロセッサのアクセス回数が設定される。最適な閾値レベルの特定には、システム評価等により、アクセス競合による処理能力の低下が発生しないアクセス回数を特定し、設定するなどの方法を取る。
【００３３】
次に、コプロセッサ処理負荷計測回路２０７の構成について更に説明する。図２は、本実施の形態に係るメモリ共有システム２００のコプロセッサ処理負荷計測回路２０７の構成を示すブロック図である。この図の例では、図１においてプロセッサが２個であることに対応して、アクセス回数を検出する構成（メモリ利用情報レジスタ、カウンタ、比較回路）を２組設けている。コプロセッサ処理負荷計測回路２０７は、メモリ利用情報検索要求制御回路３００と、レジスタ群３０１とを備えている。コプロセッサ処理負荷計測回路２０７は、更に、メモリ利用情報レジスタＡ３０２と、メモリ利用情報レジスタＢ３０３と、カウンタ回路Ａ３０４と、カウンタ回路Ｂ３０５と、比較回路３０６と、比較回路３０７と、メモリ利用情報書き込み要求制御回路３０８とを備えている。
【００３４】
レジスタ群３０１は、メインプロセッサ２１２により設定が行われる。レジスタ群３０１は、閾値設定３０９用のレジスタと、カウンタＡ起動３１０用のレジスタと、カウンタＢ起動３１１用のレジスタと、カウンタＡエントリーナンバー３１２用のレジスタと、カウンタＢエントリーナンバー３１３用のレジスタとを含んでいる。
【００３５】
閾値設定３０９用のレジスタは、閾値レベルを設定する値を格納する。詳細には、閾値設定３０９用のレジスタは、メモリ利用情報テーブル２１３へ登録された各プログラム領域に対する、コプロセッサアクセス回数の閾値を設定するレジスタである。閾値設定３０９用のレジスタへ設定された値は、カウンタ回路Ａ３０４、カウンタ回路Ｂ３０５の閾値として使用される。
【００３６】
カウンタＡ起動３１０用のレジスタは、カウンタ回路Ａ３０４の起動要求を行う命令を格納する。詳細には、カウンタＡ起動３１０用のレジスタは、コプロセッサＡ２１４の処理の負荷計測の開始要求を発行するためのレジスタである。カウンタＢ起動３１１用のレジスタは、カウンタ回路Ｂ３０５の起動要求を行う命令を格納する。詳細には、カウンタＢ起動３１１用のレジスタは、コプロセッサＢ２１７の処理の負荷計測の開始要求を発行するためのレジスタである。
【００３７】
カウンタＡエントリーナンバー３１２用のレジスタは、コプロセッサ処理負荷計測を行うプログラム領域を指定する。詳細には、カウンタＡエントリーナンバー３１２用のレジスタには、カウンタ回路Ａ３０４により実行されるコプロセッサＡ２１４の処理負荷計測の対象となるプログラム領域のエントリーナンバー４００が設定される。カウンタＢエントリーナンバー３１３用のレジスタは、コプロセッサ処理負荷計測を行うプログラム領域を指定する。詳細には、カウンタＢエントリーナンバー３１３用のレジスタには、カウンタ回路Ｂ３０５により実行されるコプロセッサＢ２１７の処理負荷計測の対象となるプログラム領域のエントリーナンバー４００が設定される。
【００３８】
メモリ利用情報検索要求制御回路３００は、メモリ利用情報検索・書き込み回路２１６に対してメモリ利用情報検索要求を出力し、メモリ利用情報検索結果を取得する。
【００３９】
具体的には、メモリ利用情報検索要求制御回路３００は、メインプロセッサ２１２がカウンタＡ起動３１０用のレジスタへ負荷計測開始要求を発行したとき、メモリ利用情報検索要求信号を出力する。メモリ利用情報検索要求信号は、カウンタＡエントリーナンバー３１２で指定されるプログラム情報をメモリ利用情報テーブル２１３内で検索する要求を示す。そして、メモリ利用情報テーブル２１３内の検索結果を、メモリ利用情報検索・書き込み回路２１６からメモリ利用情報検索結果信号として取得し、メモリ利用情報レジスタＡ３０２へ出力する。メモリ利用情報検索結果信号は、エントリーナンバー４００、物理先頭アドレス４０２およびサイズ４０３を含む。そして、メモリ利用情報検索要求制御回路３００は、カウンタＡエントリーナンバー３１２に設定された値に一致するプログラム情報（エントリーナンバー４００、物理先頭アドレス４０２、サイズ４０３）をメモリ利用情報レジスタＡ３０２へ設定する。その設定により、カウンタ回路Ａ３０４が起動される。
【００４０】
また、メモリ利用情報検索要求制御回路３００は、メインプロセッサ２１２がカウンタＢ起動３１１用のレジスタへ負荷計測開始要求を発行したとき、メモリ利用情報検索要求信号を出力する。メモリ利用情報検索要求信号は、カウンタＢエントリーナンバー３１３で指定されるプログラム情報をメモリ利用情報テーブル２１３内で検索する要求を示す。そして、メモリ利用情報テーブル２１３内の検索結果を、メモリ利用情報検索・書き込み回路２１６からメモリ利用情報検索結果信号として取得し、メモリ利用情報レジスタＢ３０３へ出力する。メモリ利用情報検索結果信号は、エントリーナンバー４００、物理先頭アドレス４０２およびサイズ４０３を含む。そして、メモリ利用情報検索要求制御回路３００は、カウンタＢエントリーナンバー３１３に設定された値に一致するプログラム情報（エントリーナンバー４００、物理先頭アドレス４０２、サイズ４０３）をメモリ利用情報レジスタＢ３０３へ設定する。その設定により、カウンタ回路Ｂ３０５が起動される。
【００４１】
メモリ利用情報レジスタＡ３０２は、コプロセッサＡ２１４の処理負荷計測対象となるプログラム情報を格納する。メモリ利用情報レジスタＡ３０２は、エントリーナンバー３１４用のレジスタと、物理先頭アドレス３１５用のレジスタと、プログラムサイズ３１６用のレジスタとを含んでいる。メモリ利用情報レジスタＡ３０２は、メモリ利用情報検索要求制御回路３００よりカウンタＡエントリーナンバー３１２およびプログラム情報（物理先頭アドレス４０２、サイズ４０３）を取得する。そして、エントリーナンバー３１４、物理先頭アドレス３１５、プログラムサイズ３１６として保持する。それと共に、保持した物理先頭アドレス３１５およびプログラムサイズ３１６をカウンタ回路Ａ３０４へ、エントリーナンバー３１４をメモリ利用情報書き込み要求制御回路３０８へ出力する。
【００４２】
メモリ利用情報レジスタＢ３０３は、コプロセッサＢ２１７の処理負荷計測対象となるプログラム情報を格納する。メモリ利用情報レジスタＢ３０３は、エントリーナンバー３１７用のレジスタと、物理先頭アドレス３１８用のレジスタと、プログラムサイズ３１９用のレジスタとを含んでいる。メモリ利用情報レジスタＢ３０３は、メモリ利用情報検索要求制御回路３００よりカウンタＢエントリーナンバー３１３およびプログラム情報（物理先頭アドレス４０２、サイズ４０３）を取得する。そして、エントリーナンバー３１７、物理先頭アドレス３１８、プログラムサイズ３１９として保持する。それと共に、保持した物理先頭アドレス３１８およびプログラムサイズ３１９をカウンタ回路Ｂ３０５へ、エントリーナンバー３１７をメモリ利用情報書き込み要求制御回路３０８へ出力する。
【００４３】
カウンタ回路Ａ３０４は、コプロセッサＡ２１４がメモリ利用情報レジスタＡ３０２領域で指定される領域にアクセスした回数をカウントする。具体的には、カウンタ回路Ａ３０４は、メモリ利用情報レジスタＡ３０２から物理先頭アドレス３１５およびプログラムサイズ３１６を取得し、それらのデータに基づいて、コプロセッサＡ２１４によるコプロセッサＡメモリアクセス信号を監視する。それにより、メモリ利用情報レジスタＡ３０２で指定される領域に対してコプロセッサＡ２１４によるアクセスが発生した回数をカウントし、カウント結果を比較回路３０６に出力する。ただし、コプロセッサＡメモリアクセス信号は、コプロセッサＡ２１４によるプログラムアドレスや命令メモリに対するアクセス要求信号に例示される。
【００４４】
カウンタ回路Ｂ３０５は、コプロセッサＢ２１７がメモリ利用情報レジスタＢ３０３領域で指定される領域にアクセスした回数をカウントする。具体的には、カウンタ回路Ｂ３０５は、メモリ利用情報レジスタＢ３０３から物理先頭アドレス３１８およびプログラムサイズ３１９を取得し、それらのデータに基づいて、コプロセッサＢ２１７によるコプロセッサＢメモリアクセス信号を監視する。それにより、メモリ利用情報レジスタＢ３０３で指定される領域に対してコプロセッサＢ２１７によるアクセスが発生した回数をカウントし、カウント結果を比較回路３０７に出力する。ただし、コプロセッサＢメモリアクセス信号は、コプロセッサＢ２１７によるプログラムアドレスや命令メモリに対するアクセス要求信号に例示される。
【００４５】
比較回路３０６は、カウンタ回路Ａ３０４のカウント結果とレジスタ群３０１の閾値設定３０９用のレジスタで指定された閾値との比較を行う。その比較結果は、メモリ利用情報レジスタＡ３０２で指定される領域に対するコプロセッサＡ２１４のアクセス回数が、閾値設定３０９用のレジスタに設定された値に達したか否かを示している。比較回路３０６は、その比較結果をメモリ利用情報書き込み要求制御回路３０８へ出力する。
【００４６】
比較回路３０７は、カウンタ回路Ｂ３０５のカウント結果とレジスタ群３０１の閾値設定３０９用のレジスタで指定された閾値との比較を行う。その比較結果は、メモリ利用情報レジスタＢ３０３で指定される領域に対するコプロセッサＢ２１７のアクセス回数と、閾値設定３０９用のレジスタに設定された値に達したか否かを示している。比較回路３０７は、その比較結果をメモリ利用情報書き込み要求制御回路３０８へ出力する。
【００４７】
メモリ利用情報書き込み要求制御回路３０８は、比較回路３０６および比較回路３０７の比較結果に基づいて、メモリ利用情報テーブル２１３内の情報を更新する。詳細には、メモリ利用情報書き込み要求制御回路３０８は、比較回路３０６や比較回路３０７の結果に基づき、命令メモリＡ２０８や命令メモリＢ２０９の所定の領域へのコプロセッサＡ２１４やコプロセッサＢ２１７のアクセス回数が所定の閾値を上回ったか否かを判定する。すなわち、メモリ利用情報書き込み要求制御回路３０８は、メモリ利用情報レジスタＡ３０２やメモリ利用情報レジスタＢ３０３の情報で指定される領域へのコプロセッサＡ２１４やコプロセッサＢ２１７のアクセス回数が、閾値設定３０９用レジスタの閾値を超えたか否かを判定する。アクセス回数が閾値設定３０９用レジスタの閾値を上回った場合、メモリ利用情報書き込み要求制御回路３０８は、メモリ利用情報検索・書き込み回路２１６に対し、非共有化設定要求を出力する。非共有化設定要求は、メモリ利用情報テーブル２１３内の共有設定情報４０５をＯＦＦに設定する要求である。メモリ利用情報検索・書き込み回路２１６は、その非共有化設定要求に基づいて、メモリ利用情報テーブル２１３を更新する。それにより、アプリケーションの処理速度の低下やリアルタイム性の低下を回避することができる。
【００４８】
また、所定の期間、エントリに対するコプロセッサＡ２１４とコプロセッサＢ２１７のアクセスが全く発生しない場合、すなわちアクセス回数がゼロの場合、メモリ利用情報書き込み要求制御回路３０８は、メモリ利用情報検索・書き込み回路２１６へ、エントリ破棄要求を出力する。メモリ利用情報検索・書き込み回路２１６は、そのエントリ破棄要求に基づいて、対象となるエントリのエントリ情報を破棄する。それにより、破棄されたエントリに新たなプログラム情報を登録することが可能となり、メモリ資源を有効に活用することが可能となる。
【００４９】
上記のコプロセッサ処理負荷計測回路２０７において、メモリ利用情報レジスタとカウンタと比較回路とを組み合わせた構成は検出部と見ることもできる。その検出部により、所望のプログラム（領域）へのアクセス回数が閾値を上回ったか否かを検出することができる。その場合、図２のコプロセッサ処理負荷計測回路２０７は、少なくとも２つの検出部を備えていると見ることができる。また、レジスタ群３０１とメモリ利用情報検索要求制御回路３００とは設定部と見ることもできる。その設定部により、アクセス回数を計測する対象プログラム（領域）を設定することができる。
【００５０】
図３は、本実施の形態に係るメモリ共有システム２００のメモリ利用情報テーブル２１３の構成を示す表である。
【００５１】
メモリ利用情報テーブル２１３は、エントリーナンバー４００のフィールドと、共有情報ステータス４０１のフィールドと、物理先頭アドレス４０２のフィールドと、サイズ４０３のフィールドと、プログラム先頭アドレス４０４のフィールドとを備えている。共有情報ステータス４０１のフィールドは、共有設定情報４０５のフィールドと、コプロセッサＡ利用情報４０６のフィールドと、コプロセッサＢ利用情報４０７のフィールドとを含んでいる。
【００５２】
エントリーナンバー４００は、命令メモリＡ２０８又は命令メモリＢ２０９へロードされたプログラムに対して割り振られた番号を示す。共有設定情報４０５は、各プログラムがロードされたメモリ領域が共有可能であるか否かを示す。コプロセッサＡ利用情報４０６は、コプロセッサＡ２１４が利用している領域であるか否かを示す。コプロセッサＢ利用情報４０７は、コプロセッサＢ２１７が利用している領域であるか否かを示す。物理先頭アドレス４０２は、各プログラムがロードされたメモリ領域の先頭アドレスを示す。サイズ４０３は、ロードされたプログラムのサイズを示す。プログラム先頭アドレス４０４は、コプロセッサＡ２１４又はコプロセッサＢ２１７のプログラム空間において、ロードされたプログラムがアドレッシングされている領域のプログラム先頭アドレスを示す。
【００５３】
エントリーナンバー４００は、命令メモリＡ２０８や命令メモリＢ２０９にロードされたプログラムに対して割り振られる番号であり、それぞれのプログラムに対してユニークな番号となる。共有設定情報４０５は、プログラムがロードされた命令メモリ領域が、コプロセッサ間において共有可能な領域か否かを示しており、共有可能な領域である場合は「ＯＮ」を、共有不可な領域である場合は「ＯＦＦ」をそれぞれ設定される。コプロセッサＡ利用情報４０６は、登録されたプログラムがロードされているメモリ領域をコプロセッサＡ２１４が使用しているか否かを示しており、使用している場合は「ＯＮ」が、使用していない場合は「ＯＦＦ」がそれぞれ設定される。コプロセッサＢ利用情報４０７は、登録されたプログラムがロードされているメモリ領域をコプロセッサＢ２１７が使用しているか否かを示しており、使用している場合は「ＯＮ」が、使用していない場合は「ＯＦＦ」がそれぞれ設定される。このメモリ利用情報テーブル２１３は、この共有情報ステータス４０１のフィールドにより、プログラム（領域）の共有の有無等の確認およびその書き換えが可能である。それにより、プログラム（領域）へのアクセス回数に基づいて、共有／非共有の設定を容易に変更できる。
【００５４】
次に、本実施の形態に係るメモリ共有システム２００の動作（メモリ共有方法）について説明する。
【００５５】
本実施の形態に係るメモリ共有方法は、第１ステップから第４ステップを具備している。第１ステップは、第１プロセッサ（２１４）からのプログラム（２０５）の呼び出しに応答して、その第１プロセッサ（２１４）に対応する第１命令メモリ（２０８）へそのプログラム（２０５）をロードするステップである。ただし、第１プロセッサ（２１４）は、複数のプロセッサ（２１４、２１７）のうちの一つである。第１命令メモリ（２０８）は、複数のプロセッサ（２１４、２１７）に対応して設けられた複数の命令メモリ（２０８、２０９）のうちの第１プロセッサ（２１４）に対応するものである。第２のステップは、第１プログラム（２０５）を複数のプロセッサ（２１４、２１７）間で共有に設定するステップである。第３のステップは、第１命令メモリ（２０８）にロードされたそのプログラム（２０５）に複数のプロセッサ（２１４、２１７）がアクセスする頻度を計測するステップである。第４のステップは、その頻度が予め設定された閾値を上回ったとき、第１命令メモリ（２０８）にロードされたそのプログラム（２０５）を非共有に設定するステップである。
【００５６】
このような構成を有する本実施の形態のメモリ共有方法は、一つの命令メモリ（２０８）にロードされた共有のプログラムの使用頻度が高い場合、その共有のプログラムを非共有に変更することができる。それにより、その命令メモリ（２０８）に対応するプロセッサ（２１４）は、そのプログラムの実行を待たされることが無くなる。その結果、そのプロセッサ（２１４）のリアルタイム性を保つことができる。また、非共有への変更に伴って、他のプロセッサ（２１７）は、対応する他の命令メモリ（２０９）に別途新たにそのプログラムをロードすることになる。それにより、他のプロセッサ（２１７）は、そのプログラムの実行を待たされることが無くなる。その結果、他のプロセッサ（２１７）のリアルタイム性を保つことができる。以上のようにして、これらのプロセッサ（２１４、２１７）を含むプロセッサシステムのリアルタイム性を保つことができ、処理能力の低下を防止することができる。
【００５７】
以下、本実施の形態に係るメモリ共有システム２００の動作について、図４Ａ、図４Ｂ、図５Ａ、図５Ｂ、図６Ａ、図６Ｂ、図７を用いて説明する。ここでは、メモリ共有システム２００において、一つの命令メモリ内で共有されたプログラムを非共有にし、各コプロセッサが、その各プロセッサに対応する命令メモリに対して、独立してアクセスを行う動作について説明する。
【００５８】
図７は、本実施の形態に係るメモリ共有システム２００の動作を示すフロー図である。
（１）ステップＳ０１
メモリ共有システム２００において、メインプロセッサ２１２によりコプロセッサＡ２１４とコプロセッサＢ２１７が起動され、プログラムが実行される。例えば、コプロセッサＡ２１４の命令により、制御部２２０は、大容量メモリ２０１内のプログラム２０３〜２０６のうちの該当するプログラムを命令メモリＡ２０８に格納する。そのとき、メモリ利用情報テーブル２１３を使用して命令メモリＡ２０８内のプログラムが共有化される（共有設定情報４０５が「ＯＮ」になる）。その結果、コプロセッサＡ２１４からだけでなく、コプロセッサＢ２１７からも命令メモリＡ２０８へのアクセスが可能となる。あるいは、コプロセッサＢ２１７の命令により、制御部２２０は、大容量メモリ２０１内のプログラム２０３〜２０６のうちの該当するプログラムを命令メモリＢ２０９に格納する。そのとき、メモリ利用情報テーブル２１３を使用して命令メモリＢ２０９内のプログラムが共有化される（共有設定情報４０５が「ＯＮ」になる）。その結果、コプロセッサＢ２１７からだけでなく、コプロセッサＡ２１４からも命令メモリＢ２０９内のプログラムへのアクセスが可能となる。
【００５９】
具体的には、共有化制御回路２１５は、コプロセッサＡ２１４のプログラムアクセス（プログラムアドレスを含む）の命令により、メモリ利用情報検索・書き込み回路２１６へメモリ利用情報検索要求を出力する。メモリ利用情報検索・書き込み回路２１６は、メモリ利用情報検索要求を受け、プログラムアドレスで示されるプログラム領域が命令メモリＡ２０８又は命令メモリＢ２０９に既にロードされているかをメモリ利用情報テーブル２１３で検索する。メモリ利用情報検索・書き込み回路２１６は、プログラム領域が命令メモリにロードされていないことを共有化制御回路２１５へ返答する。共有化制御回路２１５は、その返答を受け、プログラム転送回路２１１に対してプログラム転送要求を出力する。プログラム転送回路２１１は、共有化制御回路２１５からプログラム転送要求を受け、コプロセッサＡ２１４が実行するプログラムを大容量メモリ２０１から読み出す。プログラム転送回路２１１は、読み出したプログラムを、メモリアクセス制御回路２１０を介して命令メモリＡ２０８へ転送する。それと共に、共有化制御回路２１５は、メモリ利用情報検索・書き込み回路２１６に対してメモリ利用情報書き込み要求を出力する。メモリ利用情報検索・書き込み回路２１６は、共有化制御回路２１５からのメモリ利用情報書き込み要求を受け、メモリ利用情報テーブル２１３に対するプログラム情報の新規書き込みを行う。プログラム情報は、共有情報ステータス４０１、物理先頭アドレス４０２、プログラムサイズ４０３、プログラム先頭アドレス４０４である。
【００６０】
あるいは、共有化制御回路２１５は、コプロセッサＢ２１７のプログラムアクセスの命令により、メモリ利用情報検索・書き込み回路２１６へメモリ利用情報検索要求を出力する。メモリ利用情報検索・書き込み回路２１６は、メモリ利用情報検索要求を受け、プログラムアドレスで示されるプログラム領域が命令メモリＡ２０８又は命令メモリＢ２０９に既にロードされているかをメモリ利用情報テーブル２１３で検索する。メモリ利用情報検索・書き込み回路２１６は、プログラム領域が命令メモリにロードされていないことを共有化制御回路２１５へ返答する。共有化制御回路２１５は、その返答を受け、プログラム転送回路２１１に対してプログラム転送要求を出力する。プログラム転送回路２１１は、共有化制御回路２１５からプログラム転送要求を受け、コプロセッサＢ２１７が実行するプログラムを大容量メモリ２０１から読み出す。プログラム転送回路２１１は、読み出したプログラムを、メモリアクセス制御回路２１０を介して命令メモリＢ２０９へ転送する。それと共に、共有化制御回路２１５は、メモリ利用情報検索・書き込み回路２１６に対してメモリ利用情報書き込み要求を出力する。メモリ利用情報検索・書き込み回路２１６は、共有化制御回路２１５からのメモリ利用情報書き込み要求を受け、メモリ利用情報テーブル２１３に対するプログラム情報の新規書き込みを行う。プログラム情報は、共有情報ステータス４０１、物理先頭アドレス４０２、プログラムサイズ４０３、プログラム先頭アドレス４０４である。
【００６１】
このとき、大容量メモリ２０１内のどのプログラムを初期状態で「共有」に設定（共有設定：「ＯＮ」）するかは予め設定されている。例えば、初期状態では全てのプログラムで「共有」に設定するようにしても良い。あるいは、プログラムと「共有」／「非共有」の設定（共有設定：「ＯＮ」／「ＯＦＦ」）とを関連づけたテーブルを記憶しておき、それに準じてプログラムの初期状態を設定するようにしても良い。これらの情報は、例えば、メインプロセッサ２１２により大容量メモリ２０１に格納されても良い。
【００６２】
図４Ａは、命令メモリＡ２０８にロードされたプログラム２０５が共有状態の場合でのメモリ利用情報テーブル２１３の設定例を示す表である。図４Ｂは、メモリ利用情報テーブル２１３が図４Ａのように設定された状態における命令メモリＡ２０８および命令メモリＢ２０９へのプログラムのロード状態を示している。これらの図は、コプロセッサＡ２１４およびコプロセッサＢ２１７が、プログラム２０３（エントリーナンバー「０」）およびプログラム２０５（エントリーナンバー「２」）を共に使用している状態を示している。なお、プログラム２０４（エントリーナンバー「１」）は共有設定が「ＯＮ」であるが、コプロセッサＢのみが使用している。
【００６３】
図４Ａにおいて、命令メモリＡ２０８へロードされたプログラム２０５について見てみると、エントリーナンバー４００として「２」の番号が設定され、エントリ２のプログラムとして登録されている。そのプログラム２０５のプログラム情報４０８として、共有設定情報４０５は「ＯＮ」に、コプロセッサＡ利用情報４０６は「ＯＮ」に、コプロセッサＢ利用情報４０７は「ＯＮ」に設定されている。すなわち、そのプログラム２０５は、共有可能であり、コプロセッサＡ２１４およびコプロセッサＢ２１７が共に利用している。更に、そのプログラム２０５のプログラム情報４０８として、物理先頭アドレス４０２は「０ｘ４０００」、サイズ４０３は「０ｘ２０００」、プログラム先頭アドレス４０４は「０ｘ６０００」に設定されている。すなわち、プログラム２０５がコプロセッサＡ２１４およびコプロセッサＢ２１７のプログラム空間の「０ｘ６０００」番地から「０ｘ２０００」ワードサイズの空間にアドレッシングされている。そして、命令メモリＡの「０ｘ４０００」から「０ｘ２０００」ワードサイズの空間にロードされている。
【００６４】
（２）ステップＳ０２
この状態において、コプロセッサ処理負荷計測回路２０７は、例えば、プログラム２０５が格納されている命令メモリＡ２０８の「０ｘ４０００」番地から「０ｘ２０００」ワードサイズの空間に対するコプロセッサＢ２１７の処理負荷計測を実行する。
【００６５】
詳細には、メインプロセッサ２１２により、レジスタ群３０１において、閾値設定３０９用レジスタに閾値が格納され、カウンタＡ起動３１０用レジスタにカウンタ回路Ａ３０４の起動要求が格納され、カウンタＢ起動３１１用レジスタにカウンタ回路Ｂ３０５の起動要求が格納される。カウンタＡエントリーナンバー３１２用レジスタにプログラム２０５のエントリーナンバー「２」が格納される。カウンタＢエントリーナンバー３１３用レジスタにプログラム２０５のエントリーナンバー「２」が格納される。これらにより、プログラム２０５について、コプロセッサＡ２１４の処理およびコプロセッサＢ２１７の処理の負荷計測が開始される。
【００６６】
メモリ利用情報検索要求制御回路３００は、メモリ利用情報検索・書き込み回路２１６へメモリ利用情報検索要求信号（カウンタＡエントリーナンバー３１２およびカウンタＢエントリーナンバー３１３を含む）を出力する。メモリ利用情報検索・書き込み回路２１６は、メモリ利用情報検索要求を受け、カウンタＡエントリーナンバー３１２およびカウンタＢエントリーナンバー３１３のプログラム情報をメモリ利用情報テーブル２１３で検索する。メモリ利用情報検索・書き込み回路２１６は、検索されたプログラム情報（エントリーナンバー４００、物理先頭アドレス４０２、サイズ４０３）をメモリ利用情報検索結果として、メモリ利用情報検索要求制御回路３００へ返答する。メモリ利用情報検索要求制御回路３００は、カウンタＡエントリーナンバー３１２に設定された値に一致するプログラム情報（エントリーナンバー４００、物理先頭アドレス４０２、サイズ４０３）をメモリ利用情報レジスタＡ３０２へ設定する。その設定により、カウンタ回路Ａ３０４が起動される。例えば、プログラム２０５の場合、エントリーナンバー４００は「２」、物理先頭アドレス４０２は「０ｘ４０００」、サイズ４０３は「０ｘ２０００」である。また、メモリ利用情報検索要求制御回路３００は、カウンタＢエントリーナンバー３１３に設定された値に一致するプログラム情報（エントリーナンバー４００、物理先頭アドレス４０２、サイズ４０３）をメモリ利用情報レジスタＢ３０３へ設定する。その設定により、カウンタ回路Ｂ３０５が起動される。例えば、プログラム２０５の場合、エントリーナンバー４００は「２」、物理先頭アドレス４０２は「０ｘ４０００」、サイズ４０３は「０ｘ２０００」である。
【００６７】
カウンタ回路Ａ３０４は、メモリ利用情報レジスタＡ３０２から物理先頭アドレス３１５およびプログラムサイズ３１６を取得し、それらのデータに基づいて、コプロセッサＡ２１４によるコプロセッサＡメモリアクセス信号を監視する。例えば、プログラム２０５に対してコプロセッサＡ２１４によるアクセスが発生した回数をカウントし、カウント結果を比較回路３０６に出力する。また、カウンタ回路Ｂ３０５は、メモリ利用情報レジスタＢ３０３から物理先頭アドレス３１８およびプログラムサイズ３１９を取得し、それらのデータに基づいて、コプロセッサＢ２１７によるコプロセッサＢメモリアクセス信号を監視する。例えば、プログラム２０５に対してコプロセッサＢ２１７によるアクセスが発生した回数をカウントし、カウント結果を比較回路３０７に出力する。
【００６８】
（３）ステップＳ０３
コプロセッサ処理負荷計測回路２０７は、処理負荷計測の結果に基づいて、命令メモリＡ２０８のプログラム２０５の領域へのコプロセッサＢ２１７のアクセスが多発しているか否かを判断する。すなわちアクセス回数が閾値を上回ったか否かを判断する（ステップＳ０３）。ただし、アクセス回数は、予め設定された所定の時間内での回数とする。そのような時間は、メインプロセッサ２１２で設定される。
【００６９】
具体的には、比較回路３０６は、カウンタ回路Ａ３０４のカウント結果とレジスタ群３０１の閾値設定３０９用のレジスタで指定された閾値との比較を行う。比較回路３０６は、その比較結果をメモリ利用情報書き込み要求制御回路３０８へ出力する。例えば、プログラム２０５に対してコプロセッサＡ２１４のアクセス回数が、閾値を上回ったか否かを出力する。また、比較回路３０７は、カウンタ回路Ｂ３０５のカウント結果とレジスタ群３０１の閾値設定３０９用のレジスタで指定された閾値との比較を行う。比較回路３０７は、その比較結果をメモリ利用情報書き込み要求制御回路３０８へ出力する。例えば、プログラム２０５に対して、コプロセッサＢ２１７のアクセス回数が、閾値を上回ったか否かを出力する。
【００７０】
（４）ステップＳ０４
メモリ利用情報書き込み要求制御回路３０８は、アクセス回数が閾値を上回ったと判断したとき（ステップＳ０３：Ｙｅｓ）、メモリ利用情報検索・書き込み回路２１６に対して、プログラム２０５の領域の非共有化設定要求を出力する。
【００７１】
具体的には、メモリ利用情報書き込み要求制御回路３０８は、比較回路３０６および比較回路３０７の比較結果に基づいて、アクセス回数が閾値を上回ったと判断する。この例の場合では、比較回路３０６（プロセッサＡ側）および比較回路３０７（プロセッサＢ側）の両方で、同じプログラム２０５に対するアクセス回数を見ている。したがって、比較回路３０６および比較回路３０７のうちの、いずれか一方が閾値を上回ったときにアクセス回数が閾値を上回ったと判断してもよい。いずれか一方が閾値を上回れば、少なくともアクセス回数が少ないプロセッサにおいて処理速度が落ちていると判断できるからである。あるいは、両方が閾値を上回ったときにアクセス回数が閾値を上回ったと判断してもよい。両方が閾値を上回れば、一時的ではなく確実に両プロセッサにおいて処理速度が落ちていと判断できるからである。あるいは、プログラム２０５がロードされた命令メモリＡ２０８に対応するコプロセッサＡ２１４ではない方のコプロセッサＢ２１７のアクセス回数（比較回路３０７）が閾値を上回ったときにアクセス回数が閾値を上回ったと判断してもよい。コプロセッサＢ２１７のアクセス回数の多い場合には、コプロセッサＢ２１７に対応した命令メモリＢ２０９にプログラム２０５をロードしておいた方が効率的だからである。
これらのいずれの判断基準でアクセス回数が閾値を上回ったと判断するかは、例えば、メインプロセッサ２１２がその判断基準をメモリ利用情報書き込み要求制御回路３０８に書き込むことで実現できる。
【００７２】
アクセス回数が閾値を上回った場合、メモリ利用情報書き込み要求制御回路３０８は、メモリ利用情報検索・書き込み回路２１６に対し、非共有化設定要求を出力する。非共有化設定要求は、メモリ利用情報テーブル２１３内の共有設定情報４０５をＯＦＦに設定する要求である。メモリ利用情報検索・書き込み回路２１６は、メモリ利用情報書き込み要求制御回路３０８からの非共有化設定要求（エントリーナンバーを含む）を受け取る。そして、メモリ利用情報テーブル２１３内の該当するエントリーナンバーの共有情報ステータス４０１を書き換える（非共有化設定を行う）。
【００７３】
図５Ａは、命令メモリＡ２０８にロードされたプログラム２０５が非共有設定に変更された場合でのメモリ利用情報テーブル２１３の設定例を示す表である。図５Ｂは、メモリ利用情報テーブル２１３が図５Ａのように設定された状態における命令メモリＡ２０８および命令メモリＢ２０９へのプログラムのロード状態を示している。これらの図は、プログラム２０５のロードされた命令メモリＡ２０８の「０ｘ４０００」番地から「０ｘ２０００」ワードサイズの領域に対し、コプロセッサＢ２１７（又はコプロセッサＡ２１４）のアクセスが多発したことによる対応を示している。すなわち、その領域について、共有設定から非共有化設定に変更が行われたときのメモリ利用情報テーブル２１３を示している。
【００７４】
命令メモリＡ２０８のプログラム２０５の領域に対して非共有化設定が行われた場合、プログラム情報４０８の共有設定情報４０５を「ＯＦＦ」、コプロセッサＢ利用情報４０７を「ＯＦＦ」に再設定を行う。それにより、プログラム２０５の領域がコプロセッサ間で共有することの出来ない領域であり、コプロセッサＢ２１７が使用していない領域として再登録されることとなる。
【００７５】
図６Ａは、プログラム２０５が新たに命令メモリＡ２０９にロードされた場合でのメモリ利用情報テーブル２１３の設定例を示す表である。この図は、プログラム２０５がロードされている命令メモリＡ２０８の「０ｘ４０００」番地から「０ｘ２０００」ワードサイズの領域が非共有化設定された後、別途プログラム２０５が命令メモリＢ２０９にロードされた場合でのメモリ利用情報テーブル２１３の設定例を示している。図６Ｂは、メモリ利用情報テーブル２１３が図６Ａのように設定された状態における命令メモリＡ２０８および命令メモリＢ２０９へのプログラムのロード状態を示している。
【００７６】
図６Ｂに示すように、命令メモリＢ２０９の「０ｘＡ０００」番地から「０ｘ２０００」ワードサイズの領域に対して、既に命令メモリＡ２０８へロードされているプログラム２０５が、別途新たにロードされる。図６Ａに示すように、新たにロードされたプログラム２０５のプログラム情報４０９は、メモリ利用情報テーブル２１３へ新規に登録される。このとき、プログラム情報４０９のエントリーナンバー４００としては、命令メモリＡ２０８へロードされたプログラム２０５のプログラム情報４０８とは別のエントリーナンバーが振り分けられる。プログラム情報４０９としては、共有設定情報４０５は「ＯＦＦ」、コプロセッサＡ利用情報４０６は「ＯＦＦ」、コプロセッサＢ利用情報は「ＯＮ」に設定される。それにより、新たにプログラム２０５がロードされた命令メモリＢ２０９の領域は、コプロセッサ間で共有することの出来ない領域であり、コプロセッサＢ２１７のみが使用する領域として設定される。また、物理先頭アドレス４０２は命令メモリＢ２０９の「０ｘＡ０００」番地、プログラムサイズ４０３は「０ｘ２０００」ワードサイズ、プログラム先頭アドレス４０４は「０ｘ６０００」番地が設定される。それにより、コプロセッサＢ２１７がプログラムアドレス空間の「０ｘ６０００」番地から「０ｘ２０００」ワードサイズの領域へプログラムアクセスを実行する場合、命令メモリＢ２０９の「０ｘＡ０００」番地から「０ｘ２０００」ワードサイズのメモリ空間へアクセスする。
【００７７】
以上のようにして、本実施の形態に係るメモリ共有システム２００は動作する。このような動作は、メモリ共有システム２００の動作が終了するまで継続的に行われる。
【００７８】
このように、本実施の形態によれば、メモリ共有システムは、命令メモリにロードされた共有プログラムの使用頻度を監視して、使用頻度が高い共有プログラムを非共有に変更する。それにより、メモリ共有システムは、システムのリアルタイム性を保つことができる。
【００７９】
上記各実施の形態の係るメモリ共有システム２００の動作では、２つの検出部（メモリ利用情報レジスタ、カウンタ回路、比較回路）が同じエントリーナンバーのプログラム（領域）に対して検出動作を行っている。この場合、例えば、プロセッサＡに対応した命令メモリＡにロードされたプログラムについて、プロセッサＢによるアクセス回数が多い場合だけでなく、プロセッサＡによるアクセス回数が多い場合にも、そのプログラムの非共有化を行うことができる。逆に、プロセッサＢに対応した命令メモリＢにロードされたプログラムについて、プロセッサＡによるアクセス回数が多い場合だけでなく、プロセッサＢによるアクセス回数が多い場合にも、そのプログラムの非共有化を行うことができる。これらにより、メモリ共有システム２００全体として、コプロセッサ処理能力の低下やリアルタイム性の低下を回避することが可能となる。
【００８０】
上記各実施の形態の動作では、２つの検出部が同じタイミングでアクセス回数の監視動作を開始している。ただし、本実施の形態はその例に限定されるものではない。例えば、カウンタＢ起動３１１用のレジスタへの入力時期を遅らせることで、プロセッサＢ側の検出部の動作開始タイミングを遅らせることができる。それにより、各検出部を所望のタイミングで動作させることが可能となる。
【００８１】
上記各実施の形態の動作において、プロセッサＡ側の検出部（メモリ利用情報レジスタ３０２、カウンタ回路３０４、比較回路３０６）が、プロセッサＢに対応する命令メモリＢ２０９にロードされたプログラム（領域）に対するプロセッサＡのアクセス回数を監視してもよい。その場合、プロセッサＢ側の検出部が、プロセッサＡに対応する命令メモリＡ２０８にロードされたプログラム（領域）に対するプロセッサＢのアクセス回数を監視してもよい。このような構成にすることで、アクセス回数が増加している場合には、プロセッサがアクセスする命令メモリを、そのプロセッサに対応した命令メモリに集約することができる。
【００８２】
上記各実施の形態の動作において、メモリ利用情報書き込み要求制御回路３０８が非共有化設定要求を出力している。ただし、本実施の形態はこの例に限定されるものではない。例えば、メモリ利用情報書き込み要求制御回路３０８がアクセス回数の増加をメインプロセッサ２１２へ通知し、メインプロセッサ２１２がメモリ利用情報検索・書き込み回路２１６にメモリ利用情報テーブル２１３を非共有に変更するように指示しても良い。それにより、非共有に設定する条件を自在に変更することができる。
【００８３】
上記各実施の形態では、コプロセッサ処理負荷計測回路２０７において、メモリ利用情報レジスタとカウンタと比較回路とを組み合わせた検出部が２つである場合について説明している。ただし、本実施の形態はこの例に限定されるものではなく、更に多くの検出部（メモリ利用情報レジスタ、カウンタ、比較回路）が存在していても良い。その場合、その検出部の数に応じてレジスタ群３０１のカウンタ起動用のレジスタおよびカウンタエントリーナンバーを設ければよい。それにより、複数の種類の共有プログラム（領域）に対して、アクセス回数の監視を行うことができる。
【００８４】
上記実施の形態では、コプロセッサ処理負荷計測回路２０７において、命令メモリにロードされた共有プログラムの使用頻度を監視して、使用頻度が高い共有プログラムを非共有に変更している。ただし、本実施の形態は、その例に限定されるものではなく、その逆、すなわち、１つの命令メモリにロードされた非共有プログラムの使用頻度を監視して、所定の時間内で、使用頻度が低い非共有プログラムを共有可能に変更することも可能である。あるいは、複数の命令メモリの各々にロードされた同じ非共有プログラムの使用頻度を監視して、所定の時間内で、使用頻度が低い非共有プログラムを共有可能に変更することも可能である。例えば、使用頻度の低いプログラムの検出用に、新たに検出部（メモリ利用情報レジスタ、カウンタ、比較回路）を設け、更に、その検出部に応じてレジスタ群３０１のカウンタ起動用のレジスタおよびカウンタエントリーナンバーを設ける方法が考えられる。それにより、命令メモリを有効に利用することができる。
【００８５】
（第２の実施の形態）
上記第１の実施の形態のメモリ共有システム２００は、コプロセッサを用いて情報処理を行う様々な装置に適用することが可能である。そのような装置としては、ブロードバンドルータ用の組み込みプロセッサ（以下、「ネットワークプロセッサ」ともいう）が例示される。以下では、上記第１の実施の形態のメモリ共有システムをそのようなネットワークプロセッサに適用した例について説明する。
【００８６】
ブロードバンドルータなどのインターネット接続用端末向けの機能を取り込んだネットワークプロセッサは、高スループット、低消費電力が求められている。このようなネットワークプロセッサは、メインＣＰＵ、ネットワーク処理用のコプロセッサ、各種Ｉ／Ｏ機能および付加機能を一つのチップにまとめたものである。チップ内部に実装されているネットワーク処理用コプロセッサは、１０Ｍ／１００Ｍ／１０００ＭｂｐｓのＥｔｈｅｒｎｅｔに対応している。ここで使われるネットワーク処理用コプロセッサは、単なるＭＡＣ（Ｍｅｄｉａ  Ａｃｃｅｓｓ  Ｃｏｎｔｒｏｌ）機能を実現しているだけではなく、メインＣＰＵの負荷を低減させるためのアプリケーション処理機能を持っている。最近では、ＴＣＰ／ＩＰアクセラレート機能、ＤＥＳやＡＥＳなどの暗号化・復号化アルゴリズム処理のアクセラレータ機能を有し、セキュリティを維持したまま高速に通信できるものが増えている。ただし、ＴＣＰはＴｒａｎｓｐｏｒｔ  Ｃｏｎｔｒｏｌ  Ｐｒｏｔｏｃｏｌ、ＩＰはＩｎｔｅｒｎｅｔ  ｐｒｏｔｏｃｏｌの略である。ＤＥＳはｄａｔａ  ｅｎｃｒｙｐｔｉｏｎ  ｓｔａｎｄａｒｄ、ＡＥＳはａｄｖａｎｃｅｄ  ｅｎｃｒｙｐｔｉｏｎ  ｓｔａｎｄａｒｄの略である。ネットワークプロセッサとしては、ＩｎｔｅｌＩＸＰ４２５が例示される。
【００８７】
そのようなネットワークプロセッサは、メインＣＰＵコア、２個のＥｔｈｅｒｎｅｔ用コプロセッサ、音声処理用コプロセッサ、暗号化・復号化用コプロセッサ、汎用Ｉ／Ｏを具備しており、多数のコプロセッサで構成されている。図８は、第１の実施の形態に係るメモリ共有システムを、そのようなネットワークプロセッサを含むネットワークルータに適用した構成例を示すブロック図である。ネットワークルータは、大容量メモリ５０１とネットワークプロセッサ５１８とを具備している。ネットワークプロセッサ５１８は、メインＣＰＵ５１２と、Ｅｔｈｅｒｎｅｔ用コプロセッサＡ５１４と、Ｅｔｈｅｒｎｅｔ用コプロセッサＢ５１７と、制御部５２０と、命令メモリＡ５０８と、命令メモリＢ５０９とを備えている。ネットワークプロセッサ５１８は、更に、キュー管理部５２５と、ＰＣＩコントローラ５２１と、拡張バスコントローラ５２２と、ＳＤＲＡＭコントローラ５２３と、周辺回路２４とを備えている。制御部５２０は、共有化制御回路５１５と、プログラム転送回路（ＤＭＡコントローラ）５１１と、メモリアクセス制御回路５１０と、メモリ利用情報検索・書き込み回路５１６と、コプロセッサ処理負荷計測回路５０７と、メモリ利用情報テーブル５１３とを含んでいる。ただし、音声処理用コプロセッサや暗号化・復号化用コプロセッサについては記載を省略している。
【００８８】
図１のメモリ共有システム２００のプロセッサ５１８と図８のネットワークプロセッサ５１８との対応関係は以下のとおりである。メインＣＰＵ５１２、コプロセッサＡ５１４、コプロセッサＢ５１７、制御部５２０、命令メモリＡ５０８、命令メモリＢ５０９は、メインプロセッサ２１２、コプロセッサＡ２１４、コプロセッサＢ２１７、制御部２２０、命令メモリＡ２０８、命令メモリＢ２０９に対応する。また、制御部５２０の共有化制御回路５１５、プログラム転送回路（ＤＭＡコントローラ）５１１、メモリアクセス制御回路５１０は、制御部２２０の共有化制御回路２１５、プログラム転送回路２１１、メモリアクセス制御回路２１０に対応する。制御部５２０のメモリ利用情報検索・書き込み回路５１６、コプロセッサ処理負荷計測回路５０７、メモリ利用情報テーブル５１３は、メモリ利用情報検索・書き込み回路２１６、コプロセッサ処理負荷計測回路２０７、メモリ利用情報テーブル２１３に対応する。
【００８９】
Ｅｔｈｅｒｎｅｔコントローラとして、一方の側のネットワーク（例示：網側のＷＡＮ）および他方の側のネットワーク（例示：端末側のＬＡＮ）用に、２個のＥｔｈｅｒｎｅｔ用コプロセッサが搭載されている。この図では、例えば、Ｅｔｈｅｒｎｅｔ用コプロセッサＡ５１４とＷＡＮとが接続され、Ｅｔｈｅｒｎｅｔ用コプロセッサＢ５１７とが接続される。両コプロセッサＡ５１４、Ｂ５１７は、Ｅｔｈｅｒｎｅｔプロトコルで定義されたＭＡＣ処理およびＴＣＰ／ＩＰで定義されたアプリケーション処理を行う。両コプロセッサ５１４、５１８は、Ｅｔｈｅｒｎｅｔパケットヘッダ処理が異なる程度で、ほとんど同じ処理を行う。
【００９０】
従来のネットワークプロセッサを備えるシステムにおいて、コプロセッサのプログラムを共有メモリにおいた場合、ＴＣＰ／ＩＰで定義されたアプリケーション処理実行の度に、共有メモリへのアクセスが、両コプロセッサより発生することになる。この場合、一方のコプロセッサが共有メモリにアクセスをしている間は、他方のコプロセッサは共有メモリにアクセス出来ず、アクセス待ち状態となる。これにより、コプロセッサはアプリケーション処理が行えず、パケット処理速度が低下する。
【００９１】
しかし、本実施の形態に係るネットワークプロセッサ５１８（図８）を備えるシステムには、上記第１の実施の形態に係るメモリ共有システムが適用されている。そのため、コプロセッサのプログラムを共有メモリにおいた場合であっても、アクセスが多発するプログラムをコプロセッサ個別のメモリに格納し直すことが出来る。その結果としてアクセス待ち状態が解消されるので、アプリケーションの処理速度の低下を抑制することが出来る。その結果、このネットワークプロセッサ５１８は、高スループットとなり、相対的に電力消費を低減できる。
【００９２】
以上説明されるように、上記各実施の形態では、例えばコプロセッサＡ２１４およびコプロセッサＢ２１７のうちのいずれか一方のコプロセッサがプログラムアクセスを行うとき、メモリ利用情報テーブル２１３へ登録されているプログラム情報を検索する。そして、目的とするプログラムが他方のコプロセッサによって既にロードされ、そのプログラムの情報がメモリ利用情報テーブル２１３に既に登録されており、且つ、共有情報ステータスが共有可能なプログラムを示している場合、以下のようにしてプログラムを共有する。すなわち、メモリ利用情報検索・書き込み回路２１６へメモリ利用情報書き込み要求を出力し、共有されたプログラム領域として共有情報ステータスを更新する。それにより、コプロセッサＡ２１４およびコプロセッサＢ２１７間におけるプログラム共有を行うことが可能である。
【００９３】
また、上記各実施の形態では、アクセス頻度の高いプログラムがコプロセッサ間で共有され、コプロセッサＡ２１４およびコプロセッサＢ２１７が同一の命令メモリに対して同時にアクセスを行うことでコプロセッサ処理能力が低下する場合、当該プログラムを非共有にする。具体的には、コプロセッサ処理負荷計測回路２０７が、メモリ利用情報テーブル２１３へ登録された共有のプログラム領域へのコプロセッサのアクセス回数を計測する。そして、アクセス回数が閾値設定３０９の閾値を超えた場合、計測対象のプログラム領域をコプロセッサ間で共有出来ない領域として非共有設定とする。
【００９４】
このとき、非共有設定されたプログラム領域は、一方のコプロセッサからのみアクセス可能な領域である。そのため、他方のコプロセッサが、そのプログラム領域内にロードされているプログラムを実行する場合、大容量メモリ２０１より同一のプログラムを新たに読み出し、自身の命令メモリへロードする。このため、それぞれのコプロセッサはそのプログラムをアクセスするとき、別々の命令メモリにロードされた同一のプログラムファイルをアクセスすることとなる。その結果、コプロセッサＡ２１４およびコプロセッサＢ２１７が同一の命令メモリをアクセスすることにより引き起こされるコプロセッサ処理能力の低下を回避することが可能となる。
【００９５】
このように、上記各実施の形態によれば、メモリ共有システムおよびネットワークプロセッサは、命令メモリにロードされた共有プログラムの使用頻度を監視して、使用頻度が高い共有プログラムを非共有に変更する。それにより、メモリ共有システムおよびネットワークプロセッサは、アプリケーションの処理速度の低下を抑制でき、システムのリアルタイム性を保つことができる。
【００９６】
以上、本発明者によってなされた発明を実施の形態に基づき具体的に説明したが、本発明は前記実施の形態に限定されるものではなく、その要旨を逸脱しない範囲で種々変更可能であることはいうまでもない。
【符号の説明】
【００９７】
２００：メモリ共有システム
２０１：大容量メモリ
２０２：処理プログラム群
２０３、２０４、２０５、２０６：プログラム
２０７：プロセッサ処理負荷計測回路
２０８、２０９：命令メモリ
２１０：メモリアクセス制御回路
２１１：プログラム転送回路
２１２：メインプロセッサ
２１３：メモリ利用情報テーブル
２１５：共有化制御回路
２１６：メモリ利用情報検索・書き込み回路
２１８：プロセッサ
２２０：制御部
３００：メモリ利用情報検索要求制御回路
３０１：レジスタ群
３０２：メモリ利用情報レジスタＡ
３０３：メモリ利用情報レジスタＢ
３０４：カウンタ回路Ａ
３０５：カウンタ回路Ｂ
３０６、３０７：比較回路
３０８：メモリ利用情報書き込み要求制御回路
３０９：アクセス回数が閾値設定
３１２：カウンタＡエントリーナンバー
３１３：カウンタＢエントリーナンバー
３１４：エントリーナンバー
３１５：物理先頭アドレス
３１６：プログラムサイズ
３１７：エントリーナンバー
３１８：物理先頭アドレス
３１９：プログラムサイズ
４００：エントリーナンバー
４０１：共有情報ステータス
４０２：物理先頭アドレス
４０３：サイズ
４０４：プログラム先頭アドレス
４０５：共有設定情報
４０６：コプロセッサＡ利用情報
４０７：コプロセッサＢ利用情報
４０８：プログラム情報
４０９：プログラム情報
【図１】
2014106819.tif 000003
【図２】
2014106819.tif 000004
【図３】
2014106819.tif 000005
【図４Ａ】
2014106819.tif 000006
【図４Ｂ】
2014106819.tif 000007
【図５Ａ】
2014106819.tif 000008
【図５Ｂ】
2014106819.tif 000009
【図６Ａ】
2014106819.tif 000010
【図６Ｂ】
2014106819.tif 000011
【図７】
2014106819.tif 000012
【図８】
2014106819.tif 000013