(57)【要約】  複数のデバイスによるメモリのアクセス競合を回避する。符号（１０３）で示す時刻ｔ３のマルチコアプロセッサシステム（１００）は、アプリ（＃０）によって実行される処理をＧＰＵ（１０６）に割り当て、アプリ（＃１）によって実行される処理をＣＰＵ（＃０）に割り当てる。続けて、マルチコアプロセッサシステム（１００）は、ＧＰＵ（１０６）がアプリ（＃０）用ポートであるポート（１１３＃０）を経由して、アプリ（＃０）用領域である記憶領域（１１５＃０）にアクセスするようにメモリコントローラ（１１２）を制御する。また、マルチコアプロセッサシステム（１００）は、ＣＰＵ（＃０）がアプリ（＃０）用ポートでないポート（１１３＃１）を経由して、アプリ（＃１）用領域である記憶領域（１１５＃１）にアクセスするようにメモリコントローラ（１１２）を制御する。
2012101760.tif 000002
【特許請求の範囲】
【請求項１】
第１アプリケーションソフトウェア（以下、アプリケーションと称す）内の第１処理を実行する割当先デバイスを登録するテーブルに基づいて前記第１アプリケーション内の前記第１処理を前記割当先デバイスに割り当て、
前記第１アプリケーションで使用されるメモリのポートの識別情報をポート接続器に通知するとともに前記ポート番号をテーブルに登録し、
前記ポートに記憶領域を割り当てるとともに前記記憶領域のアドレスを前記テーブルに登録すること
を特徴とするメモリ制御方法。
【請求項２】
前記第１アプリケーション内の前記第１処理を実行する前記割当先デバイスが前記テーブルに登録されていないとき、前記第１アプリケーションは負荷が最小であるデバイスに割り当てられること
を特徴とする請求項１に記載のメモリ制御方法。
【請求項３】
前記ポートは、前記割当先デバイスが前記テーブルに登録される前記第１アプリケーションに割り当てられる第１ポートと、前記割当先デバイスが前記テーブルに登録されない前記第１アプリケーションに割り当てられる第２ポートとを含むこと
を特徴とする請求項１または請求項２に記載のメモリ制御方法。
【請求項４】
使用されていない前記第１ポートが存在するか否かが判断され、
使用されていない前記第１ポートが存在する場合には、前記第１ポートが前記ポート接続器に通知され、
使用されていない前記第１ポートが存在しない場合には、前記第２ポートを前記ポート接続器に通知すること
を特徴とする請求項１乃至請求項３の何れか一に記載のメモリ制御方法。
【請求項５】
前記割当先デバイスがアクセスするアドレスと前記記憶領域のアドレスとを変換するアドレス変換テーブルをアドレス変換器に通知すること
を特徴とする請求項１乃至請求項４の何れか一に記載のメモリ制御方法。
【請求項６】
前記第１アプリケーションが第２アプリケーションに切り替わるとき、前記テーブルから前記第２アプリケーションに対応するポートの識別情報を取得して前記ポート接続器に通知すること
を特徴とする請求項１乃至請求項５の何れか一に記載のメモリ制御方法。
【請求項７】
前記第１アプリケーション内の前記第１処理が終了するとき、前記テーブルに登録された前記ポートの識別情報および前記アドレスを消去すること
を特徴とする請求項１乃至請求項６の何れか一に記載のメモリ制御方法。
【請求項８】
前記第１アプリケーション内の第１処理が終了するとき、前記テーブルに前記第１処理に続く第２処理が登録されるときは前記テーブルに基づいて前記第２処理に対応する割当先デバイスに割り当てること
を特徴とする請求項１乃至請求項７の何れか一に記載のメモリ制御方法。
【請求項９】
前記第１アプリケーションを実行中に、前記メモリのアクセス回数および前記第１デバイスの使用回数を記録し、
前記アクセス回数、前記使用回数、および前記第１アプリケーションの処理負荷に基づいて前記第１アプリケーションを前記テーブルに登録するか否かを決定すること
を特徴とする請求項１乃至請求項８の何れか一に記載のメモリ制御方法。
【請求項１０】
アプリケーション内の処理を実行する割当先デバイスを登録するテーブルと、
前記テーブルに基づいて前記アプリケーション内の前記処理に割り当てられた前記割当先デバイスとメモリとの間で使用される前記メモリのポートの識別情報が通知されるポート接続器と、
前記ポートに割り当てられる記憶領域を有するメモリと、
前記割当先デバイスがアクセスするアドレスと前記記憶領域のアドレスとを変換するアドレス変換テーブルと、
を含むことを特徴とするシステム。
【請求項１１】
前記ポートの識別情報と前記アドレスとが前記テーブルに登録されること
を特徴とする請求項１０に記載のシステム。
【請求項１２】
前記ポートは、前記割当先デバイスが前記テーブルに登録される第１アプリケーションに割り当てられる第１ポートと、前記割当先デバイスが前記テーブルに登録されない第１アプリケーションに割り当てられる第２ポートとを含むこと
を特徴とする請求項１０または請求項１１に記載のシステム。
【請求項１３】
前記記憶領域は、前記割当先デバイスが前記テーブルに登録されるアプリケーションに割り当てられる第１記憶領域と、前記割当先デバイスが前記テーブルに登録されないアプリケーションに割り当てられる第２記憶領域とを含むこと
を特徴とする請求項１０乃至請求項１２の何れか一に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリアクセスを制御するメモリ制御方法、およびシステムに関する。
【背景技術】
【０００２】
従来から、コンピュータシステムには様々なデバイスが搭載されており、各デバイスがメインメモリへのアクセスを行っている。たとえば、携帯電話の例では、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、ＤＢＢ（Ｄｉｇｉｔａｌ  Ｂａｓｅ  Ｂａｎｄ  ｐｒｏｃｅｓｓｏｒ）と、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）と、ＬＣＤＣ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ  Ｃｏｎｔｒｏｌｌｅｒ）を搭載する。コンピュータシステムで実行されるアプリケーションソフトウェア（以下、「アプリ」と称する）は、ＣＰＵ、ＤＢＢ、ＧＰＵ、ＬＣＤＣといったデバイスを連携動作して、ユーザにサービスを提供する。【０００３】
続けて、具体的な連携動作について説明する。コンピュータシステムは、初めに、ＤＢＢが通信網から取得したデータをメモリに格納する。次に、取得されたデータに対して、ＣＰＵがコーデック処理の前処理を行う。続けて、前処理が行われたデータに対して、ＧＰＵがコーデック処理を行う。コーデック処理が行われたデータに対して、ＣＰＵがコーデック処理の後処理を行う。最後に、ＬＣＤＣが、後処理が行われたデータを読み込み、ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）に出力する。このように、コンピュータシステムは、これらのデバイスをパイプライン式に連携動作させることで、処理性能を向上することができる。【０００４】
しかし、前述の連携動作を行うと、各デバイスがメインメモリに同時にアクセスすることで、アクセス競合が発生する場合があった。アクセス競合が発生すると、メインメモリにアクセスを行ったデバイスのうち、いずれかのデバイスがアクセス待ちを行うため、処理性能が低下する。アクセス競合を避ける技術として、たとえば、デバイス数と等しいメモリを有し、各メモリには、デバイス数に等しいメモリコントローラを有する技術が開示されている（たとえば、下記特許文献１を参照。）。
【先行技術文献】
【特許文献】
【０００５】
【特許文献１】特開２０１０−９７３１１号公報
【発明の概要】
【発明が解決しようとする課題】
【０００６】
しかしながら、上述した従来技術において、特許文献１にかかる技術では、デバイスの数分のメモリとメモリコントローラを要求するため、回路規模が大きくなり、製造コストが増大してしまうという問題があった。【０００７】
本発明は、上述した従来技術による問題点を解消するため、製造コストを増大させずに、複数のデバイスによるメモリのアクセス競合を回避できるメモリ制御方法、およびシステムを提供することを目的とする。
【課題を解決するための手段】
【０００８】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、第１アプリ内の第１処理を実行する割当先デバイスを登録するテーブルに基づいて第１アプリ内の第１処理を割当先デバイスに割り当て、第１アプリで使用されるメモリのポートの識別情報をポート接続器に通知するとともにポート番号をテーブルに登録し、メモリポートに記憶領域を割り当てるとともに記憶領域のアドレスをデーブルに登録するメモリ制御方法は、およびシステムが提案される。
【発明の効果】
【０００９】
本発明の一側面によれば、複数のデバイスによるメモリのアクセス競合を回避できるという効果を奏する。
【図面の簡単な説明】
【００１０】
【図１】図１は、マルチコアプロセッサシステム１００の連携動作の様子を示す説明図である。
【図２】図２は、本実施の形態にかかるマルチコアプロセッサシステム１００のハードウェアとソフトウェアを示すブロック図である。
【図３】図３は、ポート接続器２０８の内部を示す説明図である。
【図４】図４は、アドレス変換器２０９の内部と設定方法の一例を示す説明図である。
【図５】図５は、マルチコアプロセッサシステム１００の機能を示すブロック図である。
【図６】図６は、ポート１１３とポート１１４とメモリブロック２１０の設定例を示す説明図である。
【図７】図７は、アプリシナリオテーブル２１４の記憶内容の一例を示す説明図である。
【図８】図８は、アプリシナリオテーブル２１４の動作に従ったマルチコアプロセッサシステム１００における時刻ｔ１の状態を示す説明図である。
【図９】図９は、アプリシナリオテーブル２１４の動作に従ったマルチコアプロセッサシステム１００における時刻ｔ２の状態を示す説明図である。
【図１０】図１０は、アプリシナリオテーブル２１４の動作に従ったマルチコアプロセッサシステム１００における時刻ｔ３の状態を示す説明図である。
【図１１】図１１は、アプリシナリオテーブル２１４の動作に従ったマルチコアプロセッサシステム１００における時刻ｔ４の状態を示す説明図である。
【図１２】図１２は、アプリシナリオテーブル２１４の動作に従ったマルチコアプロセッサシステム１００における時刻ｔ５の状態を示す説明図である。
【図１３】図１３は、アプリシナリオテーブル２１４の動作に従ったマルチコアプロセッサシステム１００における時刻ｔ６の状態を示す説明図である。
【図１４】図１４は、アプリシナリオテーブル２１４の生成処理を示すフローチャートである。
【図１５】図１５は、メモリ制御処理を示すフローチャート（その１）である。
【図１６】図１６は、メモリ制御処理を示すフローチャート（その２）である。
【図１７】図１７は、メモリ制御処理を示すフローチャート（その３）である。
【図１８】図１８は、メモリ制御処理を示すフローチャート（その４）である。
【図１９】図１９は、メモリ制御処理を示すフローチャート（その５）である。
【発明を実施するための形態】
【００１１】
以下に添付図面を参照して、開示のメモリ制御方法、およびシステムの実施の形態を詳細に説明する。なお本実施の形態にかかるメモリ制御方法を実行するシステムの例として、複数のＣＰＵを有するマルチコアプロセッサシステムにて説明を行う。マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。また、メモリ制御方法を実行するシステムは、コアが単一であるシングルコアプロセッサシステムであってもよい。
【００１２】
図１は、マルチコアプロセッサシステム１００の連携動作の様子を示す説明図である。符号１０１で示す説明図は、ある時刻での連携動作の様子を示した図である。符号１０２で示す説明図は、従来例におけるマルチコアプロセッサシステム１００において、連携動作中の時刻ｔ１と時刻ｔ３の状態を示す説明図である。符号１０３で示す説明図は、本実施の形態におけるマルチコアプロセッサシステム１００において、連携動作中の時刻ｔ１と時刻ｔ３の状態を示す説明図である。
【００１３】
符号１０１で示す説明図では、アプリとして、アプリ＃０とアプリ＃１が存在し、それぞれが連携動作を行うことを想定している。具体的には、アプリ＃０がＤＢＢ１０４によるネットワークからの受信済データ１２１を処理し、アプリ＃１がＣＰＵｓ１０５のうちＣＰＵ＃０からＤＢＢ１０４への送信対象データ１２２を処理する。なお、デバイス間で連携動作を行うソフトウェアであれば、アプリケーションソフトウェア以外のソフトウェアであってもよい。たとえば、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）などの基本ソフトウェアであっても、デバイス間で連携動作する処理が存在すれば、本実施の形態におけるメモリ制御方法を適用できる。
【００１４】
アプリ＃０は、時刻ｔ１にてＤＢＢ１０４が、ネットワークからの受信済データ１２１を処理開始する。時刻ｔ２にて、ＣＰＵ＃０が、受信済データ１２１に対してコーデックデコード処理の前処理を行う。時刻ｔ３にて、ＧＰＵ１０６がコーデック処理を行う。以降、コーデックデコード処理に対する後処理と、表示処理が発生するが、符号１０１で示す説明図では、以降の処理の表示を省略している。また、時刻ｔ３にて、ＣＰＵ＃０が、送信対象データ１２２を生成する。以降、コーデックエンコード処理と、コーデック処理に対する後処理、送信処理が発生するが、符号１０１で示す説明図では、以降の処理の表示を省略している。
【００１５】
次に、符号１０２で示す説明図において、従来例におけるマルチコアプロセッサシステム１００は、ＤＢＢ１０４と、複数のＣＰＵを含むＣＰＵｓ１０５と、ＧＰＵ１０６と、メモリ１０７と、を含む。また、各部はバス１０８にて接続されている。なお、ＤＢＢ１０４と、ＣＰＵｓ１０５と、ＧＰＵ１０６を、メモリにアクセスするデバイスと定義する。たとえば、デバイスには、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）も含まれる。
【００１６】
またメモリ１０７に対する入出力ポートとして、ポート１０９＃０と、ポート１０９＃１が存在する。さらに、メモリ１０７は、ＤＢＢ１０４が管理する記憶領域であるＤＢＢ管理領域１１０とＣＰＵｓ１０５とＧＰＵ１０６が管理する記憶領域であるＣＰＵ・ＧＰＵ管理領域１１１とを含む。対象デバイスがＤＢＢ管理領域１１０にアクセスする場合、対象デバイスはポート１０９＃０を経由してＤＢＢ管理領域１１０にアクセスする。同様に、対象デバイスがＣＰＵ・ＧＰＵ管理領域１１１にアクセスする場合、対象デバイスはポート１０９＃１を経由してＣＰＵ・ＧＰＵ管理領域１１１にアクセスする。
【００１７】
時刻ｔ１において、ＤＢＢ１０４は、ポート１０９＃０を経由してＤＢＢ管理領域１１０内に受信済データ１２１を書き込む。次に、時刻ｔ２にて、ＣＰＵ＃０が、受信済データ１２１をＣＰＵ・ＧＰＵ管理領域１１１にコピーした後、受信済データ１２１に対して前処理を実行する。続けて、時刻ｔ３にて、ＧＰＵ１０６が、受信済データ１２１に対してコーデックデコード処理を実行する。同時に、時刻ｔ３にて、ＣＰＵ＃０が、送信対象データ１２２を生成する。時刻ｔ３では、ＣＰＵ＃０と、ＧＰＵ１０６が同時にポート１０９＃１にアクセスするため、アクセス競合が発生する。
【００１８】
続けて、符号１０３で示す説明図において、本実施の形態におけるマルチコアプロセッサシステム１００は、ＤＢＢ１０４と、ＣＰＵｓ１０５と、ＧＰＵ１０６と、メモリ１０７と、を含む。また、各部はバス１０８にて接続されている。
【００１９】
さらに、本実施の形態におけるマルチコアプロセッサシステム１００では、メモリ１０７とバス１０８の間にメモリコントローラ１１２が存在する。バス１０８とメモリコントローラ１１２間の入出力ポートとして、ポート１１３＃０とポート１１３＃１が存在し、メモリコントローラ１１２とメモリ１０７間の入出力ポートとして、ポート１１４＃０とポート１１４＃１が存在する。また、メモリ１０７は、ポート１１３＃０でアクセスする記憶領域１１５＃０と、ポート１１３＃１でアクセスする記憶領域１１５＃１とを含む。また、本実施の形態におけるマルチコアプロセッサシステム１００では、ポート１１３＃０をアプリ＃０用ポートに設定し、記憶領域１１５＃０をアプリ＃０用領域に設定する。
【００２０】
時刻ｔ１において、ＤＢＢ１０４は、アプリ＃０用ポートに設定されたポート１１３＃０、ポート１１４＃０を経由して、アプリ＃０用領域に設定された記憶領域１１５＃０内に受信済データ１２１を書き込む。次に、時刻ｔ２にて、ＣＰＵ＃０は、記憶領域１１５＃０内の受信済データ１２１に対してコピーをせず、記憶領域１１５＃０内の受信済データ１２１に対して前処理を実行する。続けて、時刻ｔ３にて、ＧＰＵ１０６は、ポート１１３＃０、ポート１１４＃０を経由して、記憶領域１１５＃０内の受信済データ１２１に対してコーデックデコード処理を実行する。同時に、時刻ｔ３にて、ＣＰＵ＃０が、アプリ＃０用ポートでないポート１１３＃１、ポート１１４＃１を経由して、アプリ＃０用領域でない記憶領域１１５＃１に送信対象データ１２２を生成する。
【００２１】
このように、本実施の形態におけるマルチコアプロセッサシステム１００は、メモリの管理領域をアプリごとに分けているため、記憶領域間のコピーが発生せず、記憶領域間のコピーを回避することができる。また、本実施の形態におけるマルチコアプロセッサシステム１００は、特定のアプリが使用するポートを設定しておくことで、異なるアプリを実行中のデバイスが同一のポートにアクセスすることが発生しなくなる。これにより、本実施の形態におけるマルチコアプロセッサシステム１００は、メモリに対するアクセス競合を回避することができる。
【００２２】
なお、以降の記載において、マルチコアプロセッサシステム１００について特に記述のない場合は、本実施の形態におけるマルチコアプロセッサシステム１００に関する説明文である。
【００２３】
（マルチコアプロセッサシステム１００のハードウェア）
図２は、本実施の形態にかかるマルチコアプロセッサシステム１００のハードウェアとソフトウェアを示すブロック図である。図２において、マルチコアプロセッサシステム１００のハードウェアは、ＤＢＢ１０４、ＣＰＵｓ１０５と、ＧＰＵ１０６と、ＬＣＤＣ２０１と、ＬＣＤ２０２と、フラッシュＲＯＭコントローラ２０３と、フラッシュＲＯＭ２０４、キーボード２０５と、を含む。各部は、バス１０８によってそれぞれ接続されている。
【００２４】
さらに、マルチコアプロセッサシステム１００は、メモリ１０７を含む。メモリ１０７は、メモリコントローラ１１２を経由してバス１０８に接続している。バス１０８とメモリコントローラ１１２は、ポート１１３＃０〜ポート１１３＃３によって接続されており、メモリコントローラ１１２とメモリ１０７は、ポート１１４＃０〜ポート１１４＃３によって接続されている。さらに、マルチコアプロセッサシステム１００は、アンテナ２０６と、ＲＦ（Ｒａｄｉｏ  Ｆｒｅｑｕｅｎｃｙ）回路２０７と、を含む。ＲＦ回路２０７は、ＤＢＢ１０４と接続しており、アンテナ２０６は、ＲＦ回路２０７と接続している。
【００２５】
ＤＢＢ１０４は、ＲＦ回路２０７からの通知によって通話の検出を行い、通信、通話機能を担当するプロセッサである。ＣＰＵｓ１０５は、マルチコアプロセッサシステム１００の全体の制御を司る。また、ＣＰＵｓ１０５は、ＣＰＵ＃０〜ＣＰＵ＃２を含む。さらに、ＣＰＵｓ１０５は、１以上のＣＰＵを含んでもよい。また、ＣＰＵ＃０〜ＣＰＵ＃２は、専用のキャッシュメモリを含んでいてもよい。ＧＰＵ１０６は、グラフィック処理に特有なコーデック処理を行う。ＬＣＤＣ２０１は、ＬＣＤ２０２を制御して、画像データ、動画データを表示させる。たとえば、ＬＣＤＣ２０１は、ＶＲＡＭ（Ｖｉｄｅｏ  Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）を読み込んで、ＬＣＤ２０２に表示する。
【００２６】
メモリ１０７は、主記憶装置または補助記憶装置である。具体的には、メモリ１０７は、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）、ＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）、フラッシュＲＯＭといった記憶装置である。ＲＯＭは、ブートプログラムなどのプログラムを記憶している。ＲＡＭは、ＣＰＵｓ１０５のワークエリアとして使用される。フラッシュＲＯＭは、ＯＳなどのシステムソフトウェアやアプリケーションソフトウェア等の実行オブジェクトを記憶している。
【００２７】
また、メモリ１０７は、ポート１１４＃０〜ポート１１４＃３ごとに物理アドレス空間を分断したメモリブロック２１０＃０〜メモリブロック＃３に分けられる。メモリブロック２１０＃０〜メモリブロック２１０＃３は、物理アドレス空間が連続していてもよいし、離れていてもよい。また、メモリ１０７で１つのメモリバンクとして存在してもよいし、１つのメモリブロックが１つのメモリバンクとして存在してもよい。
【００２８】
また、メモリブロック２１０＃０の物理アドレスの範囲は０ｘ００００〜０ｘ００ｆｆである。同様に、メモリブロック２１０＃１の物理アドレスの範囲は０ｘ０１００〜０ｘ０１ｆｆである。メモリブロック２１０＃２の物理アドレスの範囲は０ｘ０２００〜０ｘ０２ｆｆである。メモリブロック２１０＃３の物理アドレスの範囲は０ｘ０３００〜０ｘ０３ｆｆである。
【００２９】
メモリコントローラ１１２は、メモリ１０７へのデータの読み出し、書き込みを制御する機能を有する。本実施の形態にかかるメモリコントローラ１１２は、メモリ１０７にアクセスするポート１１３＃０〜ポート１１３＃３、ポート１１４＃０〜ポート１１４＃３の設定を変更することで、デバイスのメモリ１０７へのアクセスを制御する。
【００３０】
また、メモリコントローラ１１２の内部には、ポート接続器２０８と、アドレス変換器２０９を含む。ポート接続器２０８は、メモリコントローラ１１２の内部に存在し、ポート１１３＃０〜ポート１１３＃３の接続、または非接続を行う。図２の例では、ポート接続器２０８は、ポート１１３＃２とポート１１３＃３を非接続に設定している。ポート接続器２０８の具体的な設定例は、図３にて後述する。
【００３１】
アドレス変換器２０９は、メモリコントローラ１１２の内部に存在し、ポート１１３＃０〜ポート１１３＃３のアドレス変換を行う。アドレス変換器２０９の具体的な変換例は、図４にて後述する。
【００３２】
ＬＣＤ２０２は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。たとえば、ＬＣＤ２０２は、ＴＦＴ（Ｔｈｉｎ  Ｆｉｌｍ  Ｔｒａｎｓｉｓｔｏｒ）液晶ディスプレイなどを採用することができる。
【００３３】
フラッシュＲＯＭコントローラ２０３は、ＣＰＵｓ１０５の制御にしたがってフラッシュＲＯＭ２０４に対するデータのリード／ライトを制御する。フラッシュＲＯＭ２０４は、フラッシュＲＯＭコントローラ２０３の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム１００を使用するユーザがアンテナ２０６を経由して取得した画像データ、映像データや、本実施の形態であるメモリ制御方法を実行するプログラムが格納されていてもよい。フラッシュＲＯＭ２０４は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００３４】
キーボード２０５は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード２０５は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００３５】
アンテナ２０６は、無線信号を送受信する。ＲＦ回路２０７は、高周波処理部であり、アンテナ２０６を介してインターネットなどのネットワークからデータを受信したり、ネットワークへデータを送信したりする。ここでは、ＲＦ回路２０７は、Ａ（Ａｎａｌｏｇ）／Ｄ（Ｄｉｇｉｔａｌ）コンバータやＤ／Ａコンバータなどを含んでいることとし、アンテナ２０６からのデータをディジタル信号に変換したり、ＤＢＢ１０４からのデータをアナログ信号に変換したりする。
【００３６】
次に、マルチコアプロセッサシステム１００で実行されるソフトウェアは、ＯＳ２１１と、動画再生アプリ２１２と、ＧＵＩ（Ｇｒａｐｈｉｃａｌ  Ｕｓｅｒ  Ｉｎｔｅｒｆａｃｅ）アプリ２１３と、を含む。また、マルチコアプロセッサシステム１００の記憶領域には、アプリシナリオテーブル２１４が格納されている。
【００３７】
ＯＳ２１１は、マルチコアプロセッサシステム１００を制御するプログラムである。たとえば、ＯＳ２１１は、ＣＰＵ＃０〜ＣＰＵ＃２が実行するアプリのスケジューリング処理を行う。また、ＯＳ２１１は、アプリが使用するライブラリを提供する。動画再生アプリ２１２は、ユーザがアンテナ２０６等から経由して取得したストリーミング動画、またはフラッシュＲＯＭ２０４に格納してある動画データを再生するソフトウェアである。ＧＵＩアプリ２１３は、ＬＣＤ２０２上にアイコンやメニューで選択項目を表示し、ユーザによるキーボード２０５の操作によって選択項目を選択することで、マルチコアプロセッサシステム１００を操作することを可能とするソフトウェアである。
【００３８】
アプリシナリオテーブル２１４は、メモリ１０７にアクセスするデバイスと、デバイスが実行する処理と、処理が実行される順序とを、ソフトウェアごとに記憶するテーブルである。たとえば、動画再生アプリ２１２が時刻ｔ１にストリーミング動画再生要求を受け、さらに、ＧＵＩアプリ２１３が時刻ｔ３に静止画像のプレビュー画像表示要求を受けた場合を想定する。
【００３９】
このとき、動画再生アプリ２１２は、アプリシナリオテーブル２１４にしたがって、時刻ｔ１ではＤＢＢ１０４で受信処理を実行し、時刻ｔ２ではＣＰＵｓ１０５のうちいずれかのＣＰＵで前処理を実行し、時刻ｔ３ではＧＰＵ１０６でコーデック処理を実行する。さらに、動画再生アプリ２１２は、時刻ｔ４ではＣＰＵｓ１０５のいずれかのＣＰＵで後処理を実行し、時刻ｔ５ではＬＣＤＣ２０１で表示処理を実行する。また、動画再生アプリ２１２は、時刻ｔ１〜時刻ｔ５間にて、ポート１１３＃０、ポート１１４＃１を経由してメモリブロック２１０＃１内の記憶領域２１５＃１にアクセスする。
【００４０】
なお、動画再生アプリ２１２が扱う全データは、ファイルシステムによって、フラッシュＲＯＭ２０４等の補助記憶装置に格納されており、全データの一部が、ＯＳ２１１の機能によって、メモリ１０７に配置される。したがって、記憶領域２１５＃１がメモリブロック２１０＃１をはみ出すことはない。
【００４１】
また、ＧＵＩアプリ２１３は、アプリシナリオテーブル２１４にしたがって、時刻ｔ３ではＣＰＵｓ１０５のうちいずれかのＣＰＵで前処理を実行し、時刻ｔ４ではＧＰＵ１０６でコーデック処理を実行する。さらに、ＧＵＩアプリ２１３は、時刻ｔ５ではＣＰＵｓ１０５のうちのいずれかのＣＰＵで後処理を実行し、時刻ｔ６ではＬＣＤＣ２０１で表示処理を実行する。さらに、ＧＵＩアプリ２１３は、時刻ｔ３〜時刻ｔ６間にて、ポート１１３＃１、ポート１１４＃０を経由してメモリブロック２１０＃０内の記憶領域２１５＃０にアクセスする。
【００４２】
図３は、ポート接続器２０８の内部を示す説明図である。ポート接続器２０８は、メモリコントローラ１１２に含まれ、バス１０８とアドレス変換器２０９の間に存在し、ポート１１３＃０〜ポート１１３＃３、ポート１１４＃０〜ポート１１４＃３の接続、非接続を制御する。ポート１１３＃０〜ポート１１３＃３、ポート１１４＃０〜ポート１１４＃３の接続、非接続は、ＣＰＵ＃０〜ＣＰＵ＃２によってアクセスされる設定レジスタ３０１によって制御される。設定レジスタ３０１は、設定レジスタ３０１＃０〜設定レジスタ３０１＃３を含み、ポート１１３＃０〜ポート１１３＃３、ポート１１４＃０〜ポート１１４＃３の接続、非接続を制御する。
【００４３】
具体的には、設定レジスタ３０１＃０は、スイッチ＃０を制御し、ポート１１３＃０の接続、非接続を設定する。設定レジスタ３０１＃０は、設定値が“使用中”であればポート１１３＃０、ポート１１４＃０を接続にし、設定値が“未使用”であればポート１１３＃０、ポート１１４＃０を非接続にする。他の設定レジスタ３０１も同様に、設定レジスタ３０１＃１〜設定レジスタ３０１＃３が、それぞれ、ポート１１３＃１〜ポート１１３＃３、ポート１１４＃１〜ポート１１４＃３の接続、非接続を行う。接続となったポートは、対象アプリによって使用中のポートとなる。また、非接続となったポートは、未使用となりポート内の結線に電力が供給されなくなる。結果、ポートが不要の場合にポートを非接続とすることで、省電力効果を得ることができる。
【００４４】
図４は、アドレス変換器２０９の内部と設定方法の一例を示す説明図である。符号４０１で示す説明図は、アドレス変換器２０９の内部を示す説明図である。アドレス変換器２０９は、メモリコントローラ１１２に含まれ、ポート接続器２０８とメモリ１０７の間に存在し、ポート１１３＃０〜ポート１１３＃３、ポート１１４＃０〜ポート１１４＃３の論理アドレスと物理アドレスを変換する。各ポートの論理アドレスと物理アドレスの変換は、ＣＰＵ＃０〜ＣＰＵ＃２によってアクセスされる変換レジスタ４０３＃０〜変換レジスタ４０３＃３によって制御される。
【００４５】
具体的には、変換レジスタ４０３＃０は、ＴＬＢ（Ｔｒａｎｓｌａｔｉｏｎ  Ｌｏｏｋａｓｉｄｅ  Ｂｕｆｆｅｒ）＃０を制御する。制御されたＴＬＢ＃０は、ポート１１３＃０、ポート１１４＃０の論理アドレス空間と物理アドレス空間を変換する。同様に、変換レジスタ４０３＃１〜変換レジスタ４０３＃３がＴＬＢ＃１〜ＴＬＢ＃３を制御することで、それぞれ、ポート１１３＃１〜ポート１１３＃３、ポート１１４＃１〜ポート１１４＃３の論理アドレス空間と物理アドレス空間を変換する。
【００４６】
符号４０２で示す説明図は、変換レジスタ４０３の設定例を示す説明図である。変換レジスタ４０３＃０の設定に応じて、ＴＬＢ＃０に設定される内容が変化する。変換レジスタ４０３は、論理アドレス、物理アドレス、という２つのフィールドを含む。論理アドレスフィールドは、アプリからアクセス要求される論理アドレスの値の範囲を格納する。物理アドレスフィールドは、論理アドレスに対応するメモリ１０７内の物理アドレスの範囲を格納する。
【００４７】
ＣＰＵｓ１０５は、変換レジスタ４０３と同フィールドを有するアドレス変換テーブル４０４をアドレス変換器２０９に通知し、通知を受けたアドレス変換器２０９は、アドレス変換テーブル４０４を変換レジスタ４０３に設定する。アドレス変換テーブル４０４の設定例としては、たとえば、アドレス変換テーブル４０４−０〜アドレス変換テーブル４０４−５である。
【００４８】
たとえば、ＣＰＵ＃０〜ＣＰＵ＃２のうちＣＰＵ＃０が変換レジスタ４０３＃０〜変換レジスタ４０３＃３を設定すると想定する。たとえば、ＣＰＵ＃０が、変換レジスタ４０３＃０をアドレス変換テーブル４０４−０に格納した場合、ＴＬＢ＃０の設定はアドレス変換テーブル４０４−０となる。アドレス変換テーブル４０４−０には、論理アドレス空間０ｘ００００〜０ｘ００ｆｆを、メモリブロック２１０＃０の物理アドレス空間０ｘ００００〜０ｘ００ｆｆに変換するレコードが格納されている。
【００４９】
同様に、アドレス変換テーブル４０４−１には、論理アドレス空間０ｘ００００〜０ｘ００ｆｆを、メモリブロック２１０＃１の物理アドレス空間０ｘ０１００〜０ｘ０１ｆｆに変換するレコードが格納されている。また、アドレス変換テーブル４０４−２には、論理アドレス空間０ｘ００００〜０ｘ００ｆｆを、メモリブロック２１０＃２の物理アドレス空間０ｘ０２００〜０ｘ０２ｆｆに変換するレコードが格納されている。また、アドレス変換テーブル４０４−３には、論理アドレス空間０ｘ００００〜０ｘ００ｆｆを、メモリブロック２１０＃３の物理アドレス空間０ｘ０３００〜０ｘ０３ｆｆに変換するレコードが格納されている。
【００５０】
また、アドレス変換テーブル４０４−０〜アドレス変換テーブル４０４−３では、メモリブロック２１０内の全ての物理アドレスを変換していたが、一部のアドレス範囲を変換してもよい。たとえば、アドレス変換テーブル４０４−４には、論理アドレス空間０ｘ００００〜０ｘ００３ｆを、メモリブロック２１０＃１の物理アドレス空間０ｘ０１８０〜０ｘ０１ｂｆに変換するレコードが格納されている。同様に、アドレス変換テーブル４０４−５には、論理アドレス空間０ｘ００００〜０ｘ００２ｆを、メモリブロック２１０＃０の物理アドレス空間０ｘ００ａ０〜０ｘ００ｃｆに変換するレコードが格納されている。
【００５１】
たとえば、変換レジスタ４０３＃０にアドレス変換テーブル４０４−１が設定された場合を想定する。このとき、アドレス変換器２０９は、ポート１１３＃０を経由したアクセスに対して、デバイスがアクセスしようとしている論理アドレスを、ポート１１４＃１を経由したメモリブロック２１０＃１内の物理アドレスに変換する。
【００５２】
したがって、アドレス変換器２０９を経由してメモリ１０７にアクセスする対象アプリは、対象アプリ用に確保された記憶領域の物理アドレスのアドレスを意識せず、常に固定のアドレスとなる論理アドレスに対してアクセスを行うことができる。
【００５３】
（マルチコアプロセッサシステム１００の機能）
次に、マルチコアプロセッサシステム１００の機能について説明する。図５は、マルチコアプロセッサシステム１００の機能を示すブロック図である。マルチコアプロセッサシステム１００は、検出部５０１と、割当部５０２と、決定部５０３と、制御部５０４と、登録部５０５と、を含む。この制御部となる機能（検出部５０１〜登録部５０５）は、記憶装置に記憶されたプログラムをＣＰＵｓ１０５が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、メモリ１０７、フラッシュＲＯＭ２０４などである。
【００５４】
また、図５に示すアプリシナリオテーブル２１４は、ＣＰＵ＃０内に記載されているが、マルチコアプロセッサシステム１００起動時には、メモリ１０７、フラッシュＲＯＭ２０４といった記憶装置に記憶されている。図５ではマルチコアプロセッサシステム１００起動後に、アプリシナリオテーブル２１４は、ＣＰＵ＃０のキャッシュメモリにコピーされた状態を想定している。なお、図５に示す検出部５０１〜登録部５０５は、ＣＰＵ＃０の機能として表示されているが、ＣＰＵｓ１０５のうち他のＣＰＵの機能であってもよい。
【００５５】
検出部５０１は、第１アプリが起動されることを検出する機能を有する。たとえば、検出部５０１は、アプリ＃０が起動されることを検出する。なお、検出されたという情報は、ＣＰＵ＃０のレジスタ、キャッシュメモリなどの記憶領域に記憶される。
【００５６】
割当部５０２は、第１アプリで使用されるメモリ１０７へのポートを割り当てるとともに、ポートに対応する記憶領域を割り当てる機能を有する。たとえば、割当部５０２は、アプリ＃０で使用されるポートを、ポート１１３のうちポート１１３＃１に割り当てつつ、アプリ＃０が使用する記憶領域として、記憶領域２１５＃０を割り当てる。なお、割り当てられたポートの識別情報、記憶領域のアドレス等は、ＣＰＵ＃０のレジスタ、キャッシュメモリなどの記憶領域に記憶される。
【００５７】
また、割当部５０２は、検出部５０１によって検出された第１アプリがアプリシナリオテーブル２１４に登録されている場合、ポート１１３のうちシナリオ情報が有るアプリ用の第１ポートを割り当ててもよい。また、割当部５０２は、検出部５０１によって検出された第１アプリがアプリシナリオテーブル２１４に登録されていない場合、ポート１１３のうちシナリオ情報が無いアプリ用の第２ポートを割り当ててもよい。なお、シナリオ情報とは、対象アプリが実行される際の処理順序に関する情報である。シナリオ情報の具体的な詳細については、図７にて説明する。
【００５８】
同様に、割当部５０２は、第１アプリがアプリシナリオテーブル２１４に登録されている場合、メモリ１０７の記憶領域のうちシナリオ情報が有るアプリ用の第１記憶領域を割り当ててもよい。また、割当部５０２は、第１アプリがアプリシナリオテーブル２１４に登録されていない場合、メモリ１０７の記憶領域のうちシナリオ情報が無いアプリ用の第２記憶領域を割り当ててもよい。
【００５９】
たとえば、マルチコアプロセッサシステム１００は、シナリオ情報が有るアプリ用の第１ポートとしてポート１１３＃０、ポート１１３＃１を設定し、シナリオ情報が無いアプリ用の第２ポートとしてポート１１３＃２、ポート１１３＃３を設定しておいてもよい。割当部５０２は、設定内容にしたがって、シナリオ情報が有るアプリに対しては、ポート１１３＃０、ポート１１３＃１のうちいずれか一つのポートを割り当てる。また、割当部５０２は、シナリオ情報が無いアプリに対しては、ポート１１３＃２、ポート１１３＃３のうちいずれか一つのポートを割り当てる。
【００６０】
また、割当部５０２は、第１アプリがシナリオ情報が有るアプリである場合、未使用の第１ポートが存在するか否かを判断する。続けて、割当部５０２は、未使用の第１ポートが存在する場合に未使用の第１ポートを割り当て、未使用の第１ポートが存在しない場合に第２ポートを割り当ててもよい。
【００６１】
たとえば、ポート１１３＃０、ポート１１３＃１が、シナリオ情報が有る他のアプリによって使用中である場合を想定する。このとき、割当部５０２は、第１アプリがシナリオ情報が有るアプリである場合、未使用の第１ポートが存在しないと判断し、第２ポートを割り当てる。なお、割り当てられたポート、記憶領域は、アプリシナリオテーブル２１４に記憶されるほか、ＣＰＵ＃０のレジスタ、キャッシュメモリなどの記憶領域に記憶されてもよい。
【００６２】
決定部５０３は、第１アプリ内の第１処理を実行する割当先デバイスを登録するアプリシナリオテーブル２１４に基づいて第１アプリ内の第１処理に割当先デバイスを割り当てることを決定する機能を有する。たとえば、決定部５０３は、アプリシナリオテーブル２１４のレコード群から起動を検出したアプリ＃０のレコードを参照し、第１処理を実行する割当先デバイスとしてＤＢＢ１０４を割り当てることを決定する。
【００６３】
また、決定部５０３は、第１アプリ内の第１処理を実行する割当先デバイスがアプリシナリオテーブル２１４に登録されていないとき、第１アプリを負荷が最小であるデバイスに割り当ててもよい。なお、決定されたデバイスの識別情報は、ＣＰＵ＃０のレジスタ、キャッシュメモリなどの記憶領域に記憶される。なお、デバイスの負荷の算出方法として、ＣＰＵ＃０が、単位時間あたりのデバイスの実行時間の比率を負荷として算出する。また、別の算出方法として、ＣＰＵ＃０が、デバイスに割り当てられている処理数に基づいて、算出してもよい。または、デバイスに割り当てられている処理に付与されている処理情報の合計を、デバイスの負荷として算出してもよい。なお、処理情報は、事前に各処理を計測しておく。
【００６４】
制御部５０４は、決定部５０３に決定された割当先デバイスが割当部５０２によって割り当てられたポートを経由して割当部５０２によって割り当てられた記憶領域にアクセスするようにメモリコントローラ１１２を制御する機能を有する。
【００６５】
たとえば、割当部５０２によって、ポート１１３＃１と、記憶領域２１５＃０が割り当てられた場合を想定する。このとき、制御部５０４は、ポート１１３＃１が使用されるようにポート接続器２０８を制御しつつ、ポート１１３＃１のアクセス先が記憶領域２１５＃０となるようにアドレス変換器２０９を制御する。具体的に、制御部５０４は、ポート接続器２０８の設定レジスタ３０１＃１を使用中に設定する。続けて、制御部５０４は、割当先デバイスがアクセスする論理アドレスとメモリ１０７内の記憶領域の物理アドレスとを変換するアドレス変換テーブル４０４−５をアドレス変換器２０９の変換レジスタ４０３＃１に設定する。
【００６６】
また、制御部５０４は、対象デバイスにて、第１アプリから第２アプリに切り替わるとき、アプリシナリオテーブル２１４から、第２アプリに対応するポートの識別情報を取得して、ポート接続器２０８に通知してもよい。たとえば、制御部５０４は、ＤＢＢ１０４に対して、アプリ＃０からアプリ＃１に切り替わった場合、アプリ＃１に対応するポートの識別情報を取得して、ポート接続器２０８に通知する。
【００６７】
なお、制御部５０４は、対象デバイスが割り当てられたポートを経由してアクセスするようにメモリコントローラ１１２を制御する機能を有しているが、対象デバイスがメモリコントローラ１１２を制御するように、対象デバイスを制御してもよい。
【００６８】
登録部５０５は、割当部５０２によって割り当てられたポートおよび記憶領域のアドレスを、アプリシナリオテーブル２１４に登録する機能を有する。たとえば、登録部５０５は、割当部５０２によって割り当てられたポート１１３＃１と、記憶領域２１５＃０のアドレスをアプリシナリオテーブル２１４のアプリ＃０のレコード内に登録する。
【００６９】
また、登録部５０５は、第１アプリを実行中に、メモリ１０７へのアクセス回数、およびデバイスの使用回数を記録し、アクセス回数、使用回数、および第１アプリの処理負荷に基づいて第１アプリをアプリシナリオテーブル２１４に登録してもよい。たとえば、登録部５０５は、メモリ１０７へのアクセス回数とデバイスの使用回数が所定の閾値以上である場合に、アプリシナリオテーブル２１４に登録する。
【００７０】
このように、マルチコアプロセッサシステム１００は、メモリ１０７と、メモリ１０７に対して入出力を行うポートを複数有するメモリコントローラ１１２と、メモリ１０７にアクセス可能なデバイス群と、を含むシステムである。そして、マルチコアプロセッサシステム１００は、デバイスが実行する処理をアプリごとに記憶するアプリシナリオテーブル２１４に基づいて、対象アプリの起動を検出する。対象アプリの起動が検出された場合、マルチコアプロセッサシステム１００は、ポート１０３＃０〜ポート１０３＃３のうち未使用のポートを対象アプリが使用するポートとして割り当てつつ、メモリ１０７のうち対象アプリが使用する記憶領域を割り当てる。
【００７１】
割当後、マルチコアプロセッサシステム１００は、アプリシナリオテーブル２１４を参照して、対象アプリに対応する処理が割り当てられるデバイスを割当先デバイスに決定する。決定後、マルチコアプロセッサシステム１００は、決定された割当先デバイスが割り当てられたポートを経由して、割り当てられた記憶領域にアクセスするようにメモリコントローラ１１２を制御する。また、マルチコアプロセッサシステム１００は、割当先デバイスを、割り当てられたポートに対応する記憶領域にアクセスするように制御してもよい。
【００７２】
また、処理が複数存在する場合、アプリシナリオテーブル２１４は、複数の処理と複数の処理を実行するデバイスと複数の処理が実行される順序とを、アプリごとに記憶してもよい。アプリシナリオテーブル２１４に基づいて、マルチコアプロセッサシステム１００は、対象アプリにおいて複数の処理のうち特定の処理が完了したことが検出された場合、特定の処理の次の処理を実行するデバイスを割当先デバイスに決定してもよい。
【００７３】
図６は、ポート１１３とポート１１４とメモリブロック２１０の設定例を示す説明図である。図６で示す説明図では、アプリシナリオテーブル２１４のシナリオ情報が有るアプリか否かに基づいて、ポート１１３、ポート１１４、メモリブロック２１０のうち、使用するポートと、使用される記憶領域を設定する例を示している。なお、シナリオ情報については、図７にて後述する。
【００７４】
マルチコアプロセッサシステム１００は、たとえば、符号６０１で示される範囲のポート１１３とメモリブロック２１０をシナリオ情報が有るアプリ用のポートおよび記憶領域として設定する。具体的に、マルチコアプロセッサシステム１００は、ポート１１３＃０〜ポート１１３＃３のうち、ポート１１３＃０とポート１１３＃１を、シナリオ情報が有るアプリ用のポートとして設定する。また、マルチコアプロセッサシステム１００は、メモリブロック２１０＃０〜メモリブロック２１０＃３のうち、メモリブロック２１０＃０とメモリブロック２１０＃１をシナリオ情報が有るアプリ用の記憶領域として設定する。
【００７５】
たとえば、マルチコアプロセッサシステム１００は、動画再生アプリ２１２が使用するポートを１１３＃０に設定し、動画再生アプリ２１２がアクセスする記憶領域をメモリブロック２１０＃１に設定する。なお、動画再生アプリ２１２は、メモリブロック２１０＃１の中から、動画再生アプリ２１２が使用する記憶領域２１５＃１を確保する。同様に、マルチコアプロセッサシステム１００は、ＧＵＩアプリ２１３が使用するポートを１１３＃１に設定し、ＧＵＩアプリ２１３がアクセスする記憶領域をメモリブロック２１０＃０に設定する。なお、ＧＵＩアプリ２１３は、メモリブロック２１０＃０の中から、ＧＵＩアプリ２１３が使用する記憶領域２１５＃０を確保する。
【００７６】
また、マルチコアプロセッサシステム１００は、符号６０２で示される範囲のポート１１３とメモリブロック２１０をシナリオ情報が無いアプリ用のポートおよび記憶領域として設定する。具体的に、マルチコアプロセッサシステム１００は、ポート１１３＃２とポート１１３＃３を、シナリオ情報が無いアプリ用のポートとして設定する。また、マルチコアプロセッサシステム１００は、メモリブロック２１０＃０〜メモリブロック２１０＃３のうち、メモリブロック２１０＃２とメモリブロック２１０＃３をシナリオ情報が無いアプリ用の記憶領域として設定する。
【００７７】
なお、マルチコアプロセッサシステム１００は、シナリオ情報が無いアプリ用の記憶領域として、メモリブロック２１０＃２とメモリブロック２１０＃３を結合した、メモリブロック２１０＃２−３を設定してもよい。たとえば、図６の例では、マルチコアプロセッサシステム１００にて、シナリオ情報が無いアプリが６つあり、前述のアプリがアクセスする記憶領域として、記憶領域６０３＃０〜記憶領域６０３＃５が確保されている。
【００７８】
図７は、アプリシナリオテーブル２１４の記憶内容の一例を示す説明図である。アプリシナリオテーブル２１４は、対象アプリが実行される際の情報となる処理実行情報をアプリごとに記憶する。処理実行情報は、シナリオ情報、使用ポート、先頭物理アドレスという３つの項目を含む。シナリオ情報は、対象アプリが実行される際の処理順序に関する情報である。具体的に、シナリオ情報には、シナリオ情報が有りか無しかを示す識別子が格納される。シナリオ情報が有りとして登録されている場合、シナリオ情報は、さらに、順序、処理、対象デバイス、という３つのフィールドを含むシナリオ情報テーブル７０１を含む。なお、シナリオ情報は、対象アプリが実行される前に生成されている。
【００７９】
さらに、対象アプリによるメモリ１０７へのアクセス頻度、またはデバイスの使用回数が少ない場合、デバイス間のアクセス競合、またはコピー処理が発生せず、マルチコアプロセッサシステム１００は、本実施のメモリ制御方法を行わなくともよくなる。したがって、このような場合、対象アプリのシナリオ情報が、無しとして登録されてもよい。
【００８０】
順序フィールドには、処理が呼び出される順番が格納されている。処理フィールドには、処理内容を示す情報が格納されている。具体的に、処理フィールドには、関数名、関数への先頭アドレスといった値が格納されている。対象デバイスフィールドには、処理フィールドにて指定された処理によって実行されるデバイスの識別情報が格納されている。また、対象デバイスフィールドには、ＣＰＵｓ１０５が処理フィールドに格納された処理を実行することで、頻繁に呼び出されるデバイスを設定してもよい。
【００８１】
使用ポートには、ポート１１３＃０〜ポート１１３＃３のうち、対象アプリに設定されたポートの識別情報が格納される。ポートの識別情報とは、たとえば、ポート番号といった、ポート１１３を一意に特定できる情報である。先頭物理アドレスには、対象アプリに割り当てられた記憶領域の物理アドレスの先頭値が格納される。なお、使用ポート、先頭物理アドレスは、対象アプリが実行開始する際に設定される。
【００８２】
たとえば、図７に示すアプリシナリオテーブル２１４には、アプリ＃０〜アプリ＃Ｎが登録されている。Ｎは２以上の整数である。さらに、図７に示すアプリシナリオテーブル２１４の状態は、マルチコアプロセッサシステム１００にて、アプリ＃０、アプリ＃１が実行中である状態であることを想定している。
【００８３】
アプリ＃０〜アプリ＃２は、シナリオ情報有りで登録されており、シナリオ情報に、それぞれ、シナリオ情報テーブル７０１＃０〜シナリオ情報テーブル７０１＃２を含む。また、アプリ＃Ｎは、シナリオ情報無しで登録されており、シナリオ情報にシナリオ情報テーブル７０１を含まない。
【００８４】
この状態で、アプリ＃０は、シナリオ情報に沿って、処理の１番目としてＤＢＢ１０４がｆｕｎｃＡを実行し、処理の２番目として、ＣＰＵｓ１０５のいずれかのＣＰＵがｆｕｎｃＢを実行する。さらに、アプリ＃０は、処理の３番目として、ＧＰＵ１０６がｆｕｎｃＣを実行し、処理の４番目として、ＣＰＵｓ１０５のいずれかのＣＰＵがｆｕｎｃＤを実行し、処理の５番目として、ＬＣＤＣ２０１がｆｕｎｃＥを実行する。また、アプリ＃０は、ポート１１３のうち、使用ポートとして、ポート１１３＃０が設定されており、メモリ１０７の物理アドレスとして０ｘ０１８０が割り当てられている。
【００８５】
また、アプリ＃１は、シナリオ情報に沿って、処理の１番目としてＣＰＵｓ１０５のいずれかのＣＰＵがｆｕｎｃＦを実行し、処理の２番目として、ＧＰＵ１０６がｆｕｎｃＧを実行する。さらに、アプリ＃０は、処理の３番目として、ＣＰＵｓ１０５のいずれかのＣＰＵがｆｕｎｃＨを実行し、処理の４番目として、ＬＣＤＣ２０１がｆｕｎｃＩを実行する。また、アプリ＃１は、ポート１１３のうち、使用ポートとして、ポート１１３＃１が設定されており、メモリ１０７の物理アドレスとして０ｘ００ａ０が割り当てられている。
【００８６】
また、アプリ＃２が実行する場合は、シナリオ情報にしたがって、処理の１番目としてＣＰＵｓ１０５のいずれかのＣＰＵがｆｕｎｃＪを実行し、処理を続行して、処理のｎ番目として、ＬＣＤＣ２０１がｆｕｎｃＫを実行することになる。ｎは、１以上の整数である。なお、アプリ＃２は実行開始されていないため、使用ポートと先頭物理アドレスには値が設定されていない。
【００８７】
また、アプリ＃Ｎは、シナリオ情報無しとして登録されたアプリである。アプリ＃Ｎが実行される場合、アプリシナリオテーブル２１４の使用ポートは設定されず、アプリ＃Ｎは、図６で示したシナリオ情報が無いアプリ用のポートの一つを使用してメモリ１０７にアクセスする。アプリ＃Ｎのシナリオ情報は、無しを示す識別子で登録される。また、先頭物理アドレスは、図６で示したシナリオ情報が無いアプリ用の記憶領域から確保された物理アドレスの先頭が設定される。
【００８８】
以降、図８〜図１３にて、図７で示したアプリシナリオテーブル２１４にしたがってアプリ＃０とアプリ＃１が実行する場合の状態を示す。アプリ＃０が実行開始要求を受け、順序１の処理を実行する時刻を時刻ｔ１と想定する。同様に、順序２の処理を実行する時刻を時刻ｔ２と想定し、順序３の処理を実行する時刻を時刻ｔ３と想定し、順序４の処理を実行する時刻を時刻ｔ４と想定し、順序５の処理を実行する時刻を時刻ｔ５と想定する。
【００８９】
さらに、アプリ＃１が時刻ｔ３に実行開始要求を受け、順序１の処理を実行することを想定する。同様に、アプリ＃１が時刻ｔ４に順序２の処理を実行することを想定し、時刻ｔ５に順序３の処理を実行することを想定する。また、アプリ＃１が順序４の処理を実行する時刻を時刻ｔ６と想定する。また、図８〜図１３にて、アプリシナリオテーブル２１４に付随する接尾記号“＿ｔｘ”は、時刻ｔｘでのアプリシナリオテーブル２１４の内容を示している。
【００９０】
また、アプリ＃０とアプリ＃１によって実行される処理のうち、ＣＰＵｓ１０５によって実行される処理は、ＣＰＵｓ１０５のうち、ＣＰＵ＃０によって実行される場合を想定する。なお、ＣＰＵｓ１０５のうち最も負荷の低いＣＰＵが、ＣＰＵｓ１０５によって実行される処理を実行してもよい。
【００９１】
また、シナリオ情報が有るアプリ用のポートの使用状況については、アプリシナリオテーブル２１４にて記憶されているため、どのポートが未使用であるか判断できる。したがって、マルチコアプロセッサシステム１００は、未使用のポートに関しては非接続にすることで、消費電力を削減することができる。シナリオ情報が無いアプリ用のポートの使用状況については、アプリシナリオテーブル２１４にて記憶しておらず、どのポートが未使用であるか判断できないために、ポート接続器２０８は、シナリオ情報が無いアプリ用のポートを常に使用中に設定する。
【００９２】
なお、マルチコアプロセッサシステム１００は、シナリオ情報が無いアプリ用のポートの使用状況も記憶するようにした上で、シナリオ情報が無いアプリ用のポートのうち、使用されていないポートを未使用に設定してもよい。
【００９３】
図８は、アプリシナリオテーブル２１４の動作に従ったマルチコアプロセッサシステム１００における時刻ｔ１の状態を示す説明図である。時刻ｔ１にて、アプリ＃０が実行開始要求を受けると、マルチコアプロセッサシステム１００は、使用ポートとして、シナリオ情報が有るアプリ用のポートからポート１１３＃０を選択する。選択後、マルチコアプロセッサシステム１００は、ポート接続器２０８にポート１１３＃０の使用を通知する。通知を受けたポート接続器２０８は、設定レジスタ３０１＃０を使用中に設定する。
【００９４】
さらに、マルチコアプロセッサシステム１００は、シナリオ情報が有るアプリ用の記憶領域から、メモリブロック２１０＃１を選択する。続けて、マルチコアプロセッサシステム１００は、メモリブロック２１０＃１の空き領域として、記憶領域８０１をアプリ＃０に割り当てる。なお、記憶領域８０１の物理アドレス範囲を、アドレス変換テーブル４０４−４の物理アドレスフィールドに設定された値であると想定する。
【００９５】
割当後、マルチコアプロセッサシステム１００は、アドレス変換テーブル４０４−４をアドレス変換器２０９に通知する。通知を受けたアドレス変換器２０９は、変換レジスタ４０３＃０を、アドレス変換テーブル４０４−４に設定する。設定後、マルチコアプロセッサシステム１００は、設定されたポート１１３＃０、割り当てられた記憶領域８０１の先頭アドレス０ｘ０１８０を、アプリシナリオテーブル２１４に登録する。登録した結果、アプリシナリオテーブル２１４の値は、アプリシナリオテーブル２１４＿ｔ１で示す内容となる。前述の設定により、時刻ｔ１におけるＤＢＢ１０４は、アプリ＃０のｆｕｎｃＡを実行し、ポート１１３＃０を経由して、メモリブロック２１０＃１内の記憶領域８０１にアクセスする。
【００９６】
図９は、アプリシナリオテーブル２１４の動作に従ったマルチコアプロセッサシステム１００における時刻ｔ２の状態を示す説明図である。時刻ｔ２にて、アプリ＃０がＣＰＵｓ１０５のうちＣＰＵ＃０に割り当てられた場合、マルチコアプロセッサシステム１００は、ポート接続器２０８にポート１１３＃０の使用を通知し、アドレス変換テーブル４０４−４をアドレス変換器２０９に通知する。通知を受けたポート接続器２０８は、設定レジスタ３０１＃０を使用中に設定する。同じく通知を受けたアドレス変換器２０９は、変換レジスタ４０３＃０を、アドレス変換テーブル４０４−４に設定する。また、アプリシナリオテーブル２１４＿ｔ２はアプリシナリオテーブル２１４＿ｔ１と等しい内容となる。
【００９７】
なお、時刻ｔ２は、時刻ｔ１以後の時刻となるが、時刻ｔ１の直後でなくてもよい。時刻ｔ２が時刻ｔ１の直後でない場合、時刻ｔ１と時刻ｔ２の間に、他のアプリの実行によって、設定レジスタ３０１＃０と変換レジスタ４０３＃０の設定値が変更されている可能性がある。したがって、マルチコアプロセッサシステム１００は、時刻ｔ２にて再度、ポート１１３＃０の使用とアドレス変換テーブル４０４−４を通知する。もし、時刻ｔ２が時刻ｔ１の直後である場合、マルチコアプロセッサシステム１００は、再通知を行わなくてよい。
【００９８】
前述の設定により、時刻ｔ２におけるＣＰＵ＃０は、アプリ＃０のｆｕｎｃＢを実行し、ポート１１３＃０を経由して、メモリブロック２１０＃１内の記憶領域８０１にアクセスする。このように、マルチコアプロセッサシステム１００は、記憶領域８０１に記憶されたデータを転送せずに、データをＤＢＢ１０４の管理領域からＣＰＵｓ１０５の管理領域に転送したことと同じ効果を生むことができる。
【００９９】
図１０は、アプリシナリオテーブル２１４の動作に従ったマルチコアプロセッサシステム１００における時刻ｔ３の状態を示す説明図である。時刻ｔ３にて、アプリ＃０がＧＰＵ１０６に割り当てられた場合、マルチコアプロセッサシステム１００は、ポート接続器２０８にポート１１３＃０の使用を通知し、アドレス変換テーブル４０４−４をアドレス変換器２０９に通知する。通知を受けたポート接続器２０８は、設定レジスタ３０１＃０を使用中に設定する。同じく通知を受けたアドレス変換器２０９は、変換レジスタ４０３＃０を、アドレス変換テーブル４０４−４に設定する。
【０１００】
さらに、時刻ｔ３にて、アプリ＃１が実行開始要求を受けると、マルチコアプロセッサシステム１００は、使用ポートとして、シナリオ情報が有るアプリ用のポートからポート１１３＃１を選択する。選択後、マルチコアプロセッサシステム１００は、ポート接続器２０８にポート１１３＃１の使用を通知する。通知を受けたポート接続器２０８は、設定レジスタ３０１＃１を使用中に設定する。
【０１０１】
さらに、マルチコアプロセッサシステム１００は、シナリオ情報が有るアプリ用の記憶領域から、メモリブロック２１０＃０を選択する。続けて、マルチコアプロセッサシステム１００は、メモリブロック２１０＃０の空き領域として、記憶領域１００１をアプリ＃１に割り当てる。なお、記憶領域８０１の物理アドレス範囲を、アドレス変換テーブル４０４−５の物理アドレスフィールドに設定された値であると想定する。
【０１０２】
割当後、マルチコアプロセッサシステム１００は、アドレス変換テーブル４０４−５をアドレス変換器２０９に通知する。通知を受けたアドレス変換器２０９は、変換レジスタ４０３＃１を、アドレス変換テーブル４０４−５に設定する。マルチコアプロセッサシステム１００は、設定されたポート１１３＃１、割り当てられた記憶領域１００１の先頭アドレス０ｘ００ａ０を、アプリシナリオテーブル２１４に登録する。登録した結果、アプリシナリオテーブル２１４の内容は、アプリシナリオテーブル２１４＿ｔ３のようになる。
【０１０３】
前述の設定により、時刻ｔ３におけるＧＰＵ１０６は、アプリ＃０のｆｕｎｃＣを実行し、ポート１１３＃０を経由して、メモリブロック２１０＃１内の記憶領域８０１にアクセスする。また、時刻ｔ３におけるＣＰＵ＃０は、アプリ＃１のｆｕｎｃＦを実行し、ポート１１３＃１を経由して、メモリブロック２１０＃０内の記憶領域１００１にアクセスする。このように、マルチコアプロセッサシステム１００は、ＧＰＵ１０６とＣＰＵ＃０が別々のポート、別々の記憶領域にアクセスするため、アクセス競合を回避することができる。また、時刻ｔ３におけるマルチコアプロセッサシステム１００は、時刻ｔ２におけるマルチコアプロセッサシステム１００と同様に、記憶領域８０１に記憶されたデータの転送を行わなくてよい。
【０１０４】
図１１は、アプリシナリオテーブル２１４の動作に従ったマルチコアプロセッサシステム１００における時刻ｔ４の状態を示す説明図である。時刻ｔ４にて、アプリ＃０がＣＰＵｓ１０５のうちＣＰＵ＃０に割り当てられた場合、マルチコアプロセッサシステム１００は、ポート接続器２０８にポート１１３＃０の使用を通知し、アドレス変換テーブル４０４−４をアドレス変換器２０９に通知する。通知を受けたポート接続器２０８は、設定レジスタ３０１＃０を使用中に設定する。同じく通知を受けたアドレス変換器２０９は、変換レジスタ４０３＃０を、アドレス変換テーブル４０４−４に設定する。
【０１０５】
同様に、時刻ｔ４にて、アプリ＃１がＧＰＵ１０６に割り当てられた場合、マルチコアプロセッサシステム１００は、ポート接続器２０８にポート１１３＃１の使用を通知し、アドレス変換テーブル４０４−５をアドレス変換器２０９に通知する。通知を受けたポート接続器２０８は、設定レジスタ３０１＃１を使用中に設定する。同じく通知を受けたアドレス変換器２０９は、変換レジスタ４０３＃１を、アドレス変換テーブル４０４−５に設定する。また、アプリシナリオテーブル２１４＿ｔ４はアプリシナリオテーブル２１４＿ｔ３と等しい内容となる。
【０１０６】
前述の設定により、時刻ｔ４におけるＣＰＵ＃０は、アプリ＃０のｆｕｎｃＤを実行し、ポート１１３＃０を経由して、メモリブロック２１０＃１内の記憶領域８０１にアクセスする。また、時刻ｔ４におけるＧＰＵ１０６は、アプリ＃１のｆｕｎｃＧを実行し、ポート１１３＃１を経由して、メモリブロック２１０＃０内の記憶領域１００１にアクセスする。このように、マルチコアプロセッサシステム１００は、ＣＰＵ＃０とＧＰＵ１０６が別々のポート、別々の記憶領域にアクセスするため、アクセス競合を回避することができる。また、時刻ｔ４におけるマルチコアプロセッサシステム１００は、時刻ｔ３におけるマルチコアプロセッサシステム１００と同様に、記憶領域８０１に記憶されたデータおよび記憶領域１００１に記憶されたデータの転送を行わなくてよい。
【０１０７】
図１２は、アプリシナリオテーブル２１４の動作に従ったマルチコアプロセッサシステム１００における時刻ｔ５の状態を示す説明図である。時刻ｔ５にて、ＬＣＤＣ２０１に割り当てられた場合、マルチコアプロセッサシステム１００は、ポート接続器２０８にポート１１３＃０の使用を通知し、アドレス変換テーブル４０４−４をアドレス変換器２０９に通知する。通知を受けたポート接続器２０８は、設定レジスタ３０１＃０を使用中に設定する。同じく通知を受けたアドレス変換器２０９は、変換レジスタ４０３＃０を、アドレス変換テーブル４０４−４に設定する。また、ＬＣＤＣ２０１がｆｕｎｃＥの終了後、ポートおよび記憶領域の解放を行う。解放の処理については、図１３にて説明を行う。
【０１０８】
同様に、時刻ｔ５にて、アプリ＃１がＣＰＵｓ１０５のうちＣＰＵ＃０に割り当てられた場合、マルチコアプロセッサシステム１００は、ポート接続器２０８にポート１１３＃１の使用を通知し、アドレス変換テーブル４０４−５をアドレス変換器２０９に通知する。通知を受けたポート接続器２０８は、設定レジスタ３０１＃１を使用中に設定する。同じく通知を受けたアドレス変換器２０９は、変換レジスタ４０３＃１を、アドレス変換テーブル４０４−５に設定する。また、アプリシナリオテーブル２１４＿ｔ５はアプリシナリオテーブル２１４＿ｔ４と等しい内容となる。
【０１０９】
前述の設定により、時刻ｔ５におけるＬＣＤＣ２０１は、アプリ＃０のｆｕｎｃＥを実行し、ポート１１３＃０を経由して、メモリブロック２１０＃１内の記憶領域８０１にアクセスする。また、時刻ｔ５におけるＣＰＵ＃０は、アプリ＃１のｆｕｎｃＨを実行し、ポート１１３＃１を経由して、メモリブロック２１０＃０内の記憶領域１００１にアクセスする。このように、マルチコアプロセッサシステム１００は、ＬＣＤＣ２０１とＣＰＵ＃０が別々のポート、別々の記憶領域にアクセスするため、アクセス競合を回避することができる。また、時刻ｔ５におけるマルチコアプロセッサシステム１００は、時刻ｔ４におけるマルチコアプロセッサシステム１００と同様に、記憶領域８０１に記憶されたデータおよび記憶領域１００１に記憶されたデータの転送を行わなくてよい。
【０１１０】
図１３は、アプリシナリオテーブル２１４の動作に従ったマルチコアプロセッサシステム１００における時刻ｔ６の状態を示す説明図である。時刻ｔ５の終了後、アプリ＃０が終了すると、マルチコアプロセッサシステム１００は、使用ポートとしていたポート１１３＃０の解放をポート接続器２０８に通知する。通知を受けたポート接続器２０８は、設定レジスタ３０１＃０を未使用に設定する。さらに、マルチコアプロセッサシステム１００は、アプリ＃０に割り当てられていた記憶領域８０１を解放する。
【０１１１】
また、時刻ｔ６にて、アプリ＃１がＬＣＤＣ２０１に割り当てられた場合、マルチコアプロセッサシステム１００は、ポート接続器２０８にポート１１３＃１の使用を通知し、アドレス変換テーブル４０４−５をアドレス変換器２０９に通知する。通知を受けたポート接続器２０８は、設定レジスタ３０１＃１を使用中に設定する。同じく通知を受けたアドレス変換器２０９は、変換レジスタ４０３＃１を、アドレス変換テーブル４０４−５に設定する。前述の設定により、時刻ｔ６におけるＬＣＤＣ２０１は、アプリ＃１のｆｕｎｃＩを実行し、ポート１１３＃１を経由して、メモリブロック２１０＃０内の記憶領域１００１にアクセスする。
【０１１２】
アプリ＃０によるポートと記憶領域の解放後、マルチコアプロセッサシステム１００は、解放されたポート１１３＃０、解放された記憶領域８０１を、アプリシナリオテーブル２１４から消去する。消去された結果、アプリシナリオテーブル２１４は、アプリシナリオテーブル２１４＿ｔ６で示す内容となる。
【０１１３】
以降、図１４〜図１９にて、アプリシナリオテーブル２１４の生成処理と、アプリシナリオテーブル２１４に応じたメモリ制御処理のフローチャートを示す。アプリシナリオテーブル２１４の生成処理の実行主体とメモリ制御処理の実行主体は、ＣＰＵｓ１０５のどのＣＰＵでもよいが、図１４〜図１９では、説明の簡略化のため、ＣＰＵ＃０が実行すると想定する。なお、アプリシナリオテーブル２１４は、図１４で示す生成処理によって生成されてもよいし、設計者によってあらかじめ生成されていてもよい。
【０１１４】
また、アプリシナリオテーブル２１４の生成処理は対象アプリが起動された場合に実行される。メモリ制御処理は、対象アプリが起動された場合、複数のデバイスのうちいずれか一つとなる対象デバイスにて他のアプリに切り替わった場合、または対象デバイスに割り当てられた対象アプリの関数の処理が終了した場合、のいずれかが発生した場合に実行される。
【０１１５】
図１４は、アプリシナリオテーブル２１４の生成処理を示すフローチャートである。ＣＰＵ＃０は、対象アプリが起動したか否かを判断する（ステップＳ１４０１）。対象アプリが起動していない場合（ステップＳ１４０１：Ｎｏ）、ＣＰＵ＃０は、再びステップＳ１４０１の処理に移行する。アプリが起動した場合（ステップＳ１４０１：Ｙｅｓ）、ＣＰＵ＃０は、アプリシナリオテーブル２１４に対象アプリにシナリオ情報が存在するか、またはシナリオ情報無しと登録されているか否かを判断する（ステップＳ１４０２）。シナリオ情報が存在する、または、シナリオ情報無しと登録されている場合（ステップＳ１４０２：Ｙｅｓ）、ＣＰＵ＃０は、メモリ制御処理を実行する（ステップＳ１４０３）。
【０１１６】
なお、シナリオ情報が存在する場合とは、アプリシナリオテーブル２１４に対象アプリの処理実行情報が存在する場合である。したがって、アプリシナリオテーブル２１４に対象アプリの処理実行情報が存在しない場合、シナリオ情報が存在しないことになる。また、シナリオ情報無しと登録されている場合とは、アプリシナリオテーブル２１４の対象アプリのシナリオ情報に、無しとして登録されている場合である。
【０１１７】
シナリオ情報が存在しない場合（ステップＳ１４０２：Ｎｏ）、ＣＰＵ＃０は、対象アプリの関数ごとに、メモリ１０７へのアクセス回数、処理負荷、デバイスの呼び出し回数を記録する（ステップＳ１４０４）。なお、処理負荷とは、対象アプリがデバイスに割り当てられた単位時間当たりの割合でもよいし、あらかじめ、プロファイル等で測定した値であってもよい。
【０１１８】
記録後、ＣＰＵ＃０は、メモリ１０７へのアクセス回数が閾値より大きいか否かを判断する（ステップＳ１４０５）。アクセス回数が閾値以下の場合（ステップＳ１４０５：Ｎｏ）、ＣＰＵ＃０は、シナリオ情報無しとしてアプリシナリオテーブル２１４に登録する（ステップＳ１４１０）。アクセス回数が閾値より大きい場合（ステップＳ１４０５：Ｙｅｓ）、ＣＰＵ＃０は、続けて、処理負荷が閾値より大きいか否かを判断する（ステップＳ１４０６）。
【０１１９】
処理負荷が閾値以下の場合（ステップＳ１４０６：Ｎｏ）、ＣＰＵ＃０は、ステップＳ１４１０の処理に移行する。処理負荷が閾値より大きい場合（ステップＳ１４０６：Ｙｅｓ）、ＣＰＵ＃０は、さらに、対象アプリの関数が同一のデバイスを複数回呼び出しているか、または、複数のデバイスを呼び出しているか否かを判断する（ステップＳ１４０７）。
【０１２０】
単一のデバイスに対し１度以下の呼び出ししかしていない場合（ステップＳ１４０７：Ｎｏ）、ＣＰＵ＃０は、ステップＳ１４１０の処理に移行する。同一のデバイスを複数回、または、複数のデバイスを呼び出している場合（ステップＳ１４０７：Ｙｅｓ）、ＣＰＵ＃０は、アプリシナリオテーブル２１４にシナリオ情報有りとして登録する（ステップＳ１４０８）。
【０１２１】
続けて、ＣＰＵ＃０は、シナリオ情報テーブル７０１の対象アプリのレコード内の、順序フィールドに対象の関数が実行される順番を設定し、処理フィールドに対象の関数を設定し、対象デバイスフィールドに呼び出されたデバイスを設定する（ステップＳ１４０９）。また、ステップＳ１４０３、ステップＳ１４０９、またはステップＳ１４１０の終了後、ＣＰＵ＃０は、アプリシナリオテーブル２１４の生成処理を終了する。再び対象アプリが起動された場合、ＣＰＵ＃０は、ステップＳ１４０１：Ｙｅｓのルートを処理する。
【０１２２】
なお、ステップＳ１４０５、ステップＳ１４０６の処理における閾値については、たとえば、単位時間当たりにおける閾値であってもよい。たとえば、対象アプリの実行時間が０．５［秒］であり、ステップＳ１４０４にて記録したアクセス回数が７００回、ステップＳ１４０５における閾値が１０００［回／秒］である場合を想定する。このとき、ＣＰＵ＃０は、ステップＳ１４０５の処理を、７００／０．５＝１４００＞１０００から、Ｙｅｓとみなし、Ｙｅｓの処理を続行する。ＣＰＵ＃０は、処理負荷についてもアクセス回数と同様に算出する。
【０１２３】
図１５は、メモリ制御処理を示すフローチャート（その１）である。ＣＰＵ＃０は、イベント発生したか否かを判断する（ステップＳ１５０１）。対象アプリ起動イベントが発生した場合（ステップＳ１５０１：対象アプリ起動）、ＣＰＵ＃０は、対象アプリのシナリオ情報が有りで登録されているか否かを判断する（ステップＳ１５０２）。シナリオ情報が有りで登録されている場合（ステップＳ１５０２：Ｙｅｓ）、ＣＰＵ＃０は、シナリオ情報テーブル７０１に沿って、割当先デバイスを決定する（ステップＳ１５０３）。決定後、ＣＰＵ＃０は、割当先デバイスがＣＰＵｓ１０５か否かを判断する（ステップＳ１５０４）。
【０１２４】
割当先デバイスがＣＰＵｓ１０５である場合（ステップＳ１５０４：Ｙｅｓ）、ＣＰＵ＃０は、負荷最小のＣＰＵを割当先デバイスに決定する（ステップＳ１５０５）。割当先デバイスがＣＰＵｓ１０５でない場合（ステップＳ１５０４：Ｎｏ）、または、負荷最小のＣＰＵを割当先デバイスに決定した場合、ＣＰＵ＃０は、実行中アプリの処理を停止させ、実行中アプリのコンテキストを保存する（ステップＳ１５０６）。なお、コンテキストとは、ＣＰＵのレジスタの値となるプログラムカウンタ、スタックポインタなどといったアプリが使用するデータである。
【０１２５】
また、シナリオ情報が存在しない、または、シナリオ情報が無しと登録されている場合（ステップＳ１５０２：Ｎｏ）、ＣＰＵ＃０は、負荷最小のＣＰＵを割当先デバイスに決定する（ステップＳ１５０７）。決定後、ＣＰＵ＃０は、実行中アプリの処理を停止させ、実行中アプリのコンテキストを保存する（ステップＳ１５０８）。
【０１２６】
ステップＳ１５０６の終了後、ＣＰＵ＃０は、シナリオ情報が有るアプリ用のポートの中に未使用のポートが存在するか否かを判断する（ステップＳ１５０９）。なお、未使用のポートが存在するか否かの判断方法として、たとえば、ＣＰＵ＃０がアプリシナリオテーブル２１４に登録された使用ポートを確認することで、未使用のポートが存在するか否か判断することができる。未使用のポートが存在する場合（ステップＳ１５０９：Ｙｅｓ）、ＣＰＵ＃０は、図１６に示すステップＳ１６０１の処理に移行する。未使用のポートが存在しない場合（ステップＳ１５０９：Ｎｏ）、または、ステップＳ１５０８の処理を終了後、ＣＰＵ＃０は、図１６に示すステップＳ１６０６の処理に移行する。
【０１２７】
また、アプリ切り替えイベントが発生した場合（ステップＳ１５０１：アプリ切り替え）、ＣＰＵ＃０は、図１７に示すステップＳ１７０１の処理に移行する。同様に、対象アプリ内の関数の処理終了イベントが発生した場合（ステップＳ１５０１：アプリ内関数処理終了）、ＣＰＵ＃０は、図１８に示すステップＳ１８０１の処理に移行する。イベントが発生していない場合（ステップＳ１５０１：イベント未発生）、ＣＰＵ＃０は、再びステップＳ１５０１の処理に移行する。
【０１２８】
図１６は、メモリ制御処理を示すフローチャート（その２）である。ステップＳ１５０９：Ｙｅｓの処理を終了後、ＣＰＵ＃０は、ポート接続器２０８に空きポートの割当を通知する（ステップＳ１６０１）。通知を受けたポート接続器２０８は、通知されたポートに対応する設定レジスタ３０１を使用中に設定し（ステップＳ１６０２）、通知元に完了通知を送信する（ステップＳ１６０３）。完了通知を受けたＣＰＵ＃０は、割り当てたポートの識別情報をアプリシナリオテーブル２１４に登録する（ステップＳ１６０４）。登録後、ＣＰＵ＃０は、シナリオ情報が有るアプリ用の記憶領域から、空き記憶領域を割り当てる（ステップＳ１６０５）。
【０１２９】
ステップＳ１５０９：Ｎｏ、またはステップＳ１５０８の処理を終了後、ＣＰＵ＃０は、ポート接続器２０８にシナリオ情報が無いアプリ用のポートの割当を通知する（ステップＳ１６０６）。なお、ステップＳ１６０６の処理後、ポート接続器２０８がステップＳ１６０２、ステップＳ１６０３を実行するが、ポート接続器２０８で実行される処理が同一であるため、ここでは省略している。通知後、ＣＰＵ＃０は、シナリオ情報が無いアプリ用の記憶領域から、空き記憶領域を割り当てる（ステップＳ１６０７）。
【０１３０】
ステップＳ１６０５、または、ステップＳ１６０７の処理を終了後、ＣＰＵ＃０は、割り当てた記憶領域の先頭アドレスをアプリシナリオテーブル２１４に登録する（ステップＳ１６０８）。登録後、ＣＰＵ＃０は、アドレス変換器２０９に、割り当てた記憶領域の物理アドレスを論理アドレスに変換するアドレス変換テーブルを通知する（ステップＳ１６０９）。なお、通知内容には、割り当てられたポートの識別情報も含まれる。
【０１３１】
通知を受けたアドレス変換器２０９は、アドレス変換テーブルを、割り当てられたポートに対応する変換レジスタ４０３に設定し（ステップＳ１６１０）、通知元に完了通知を送信する（ステップＳ１６１１）。完了通知を受けたＣＰＵ＃０は、対象アプリの実行開始を割当先デバイスに通知し（ステップＳ１６１２）、ステップＳ１５０１の処理に移行する。
【０１３２】
図１７は、メモリ制御処理を示すフローチャート（その３）である。特定のデバイスにてアプリ切り替えイベントが発生した場合（ステップＳ１５０１：アプリ切り替え）、ＣＰＵ＃０は、切り替え後に実行されるアプリのシナリオ情報が有りで登録されているか否かを判断する（ステップＳ１７０１）。シナリオ情報が存在しない、またはシナリオ情報が無しで登録されている場合（ステップＳ１７０１：Ｎｏ）、ＣＰＵ＃０は、シナリオ情報が無いアプリ用のポートを割り当てる（ステップＳ１７０２）。
【０１３３】
割当後、または切り替え後に実行されるアプリのシナリオ情報が有りで登録されている場合（ステップＳ１７０１：Ｙｅｓ）、ＣＰＵ＃０は、切り替え後に実行するアプリの接続ポートをポート接続器２０８に通知する（ステップＳ１７０３）。通知後、ＣＰＵ＃０は、実行キューに格納されている切り替え後に実行されるアプリのアドレス変換テーブルをアドレス変換器２０９に通知する（ステップＳ１７０４）。なお、実行キューとは、各デバイスに割り当てられた実行待ちのアプリ群が格納されたキューである。
【０１３４】
また、ステップＳ１７０３にて、図１６で示したポート接続器２０８がステップＳ１６０２、ステップＳ１６０３の処理を実行するが、ポート接続器２０８で実行される処理が同一であるため、図１７では省略している。ステップＳ１７０４の処理後に実行されるアドレス変換器２０９も同様に、処理が図１６と同一であるため、図１７では省略している。通知後、ＣＰＵ＃０は、切り替え後に実行されるアプリの実行を対象デバイスに通知し（ステップＳ１７０５）、ステップＳ１５０１の処理に移行する。
【０１３５】
図１８は、メモリ制御処理を示すフローチャート（その４）である。特定のデバイスにてアプリ内の関数処理終了イベントが発生した場合（ステップＳ１５０１：アプリ内関数処理終了）、ＣＰＵ＃０は、シナリオ情報が有りで登録されているかを判断する（ステップＳ１８０１）。シナリオ情報が存在しない、またはシナリオ情報が無しで登録されている場合（ステップＳ１８０１：Ｎｏ）、ＣＰＵ＃０は、図１９に示すステップＳ１９０５の処理に移行する。シナリオ情報が有りで登録されている場合（ステップＳ１８０１：Ｙｅｓ）、ＣＰＵ＃０は、シナリオ情報テーブルの終了した関数のレコードに、続きのレコードが存在するか否かを判断する（ステップＳ１８０２）。
【０１３６】
続きのレコードが存在する場合（ステップＳ１８０２：Ｙｅｓ）、ＣＰＵ＃０は、シナリオ情報テーブル７０１に沿って、続きのレコードの対象デバイスフィールドに格納されたデバイスを割当先デバイスに決定する（ステップＳ１８０３）。決定後、ＣＰＵ＃０は、割当先デバイスの実行キューに、対象アプリを格納する（ステップＳ１８０４）。格納後、ＣＰＵ＃０は、図１９に示すステップＳ１９０１の処理に移行する。
【０１３７】
続きのレコードが存在しない場合（ステップＳ１８０２：Ｎｏ）、ＣＰＵ＃０は、ポート接続器２０８に、占有していたポートの解放を通知する（ステップＳ１８０５）。通知を受けたポート接続器２０８は、通知されたポートを未使用に設定し（ステップＳ１８０６）、通知元に完了通知を送信する（ステップＳ１８０７）。完了通知を受けたＣＰＵ＃０は、解放したポートの識別情報をアプリシナリオテーブル２１４から消去する（ステップＳ１８０８）。続けて、ＣＰＵ＃０は、占有していた記憶領域を解放し（ステップＳ１８０９）、解放した記憶領域の先頭アドレスをアプリシナリオテーブル２１４から消去する（ステップＳ１８１０）。消去後、ＣＰＵ＃０は、図１９に示すステップＳ１９０１の処理に移行する。
【０１３８】
図１９は、メモリ制御処理を示すフローチャート（その５）である。ステップＳ１８０４、またはステップＳ１８１０の処理終了後、ＣＰＵ＃０は、対象デバイスの実行キューに実行待ちアプリが存在するか否かを判断する（ステップＳ１９０１）。実行待ちアプリが存在しない場合（ステップＳ１９０１：Ｎｏ）、ＣＰＵ＃０は、ステップＳ１５０１の処理に移行する。
【０１３９】
実行待ちアプリが存在する場合（ステップＳ１９０１：Ｙｅｓ）、ＣＰＵ＃０は、次に実行されるアプリの接続ポートをポート接続器２０８に通知する（ステップＳ１９０２）。なお、次に実行されるアプリとは、実行キューに格納されているアプリのうち、いずれかのアプリである。たとえば、ＣＰＵ＃０は、実行キューの先頭に格納されているアプリを次に実行されるアプリとして決定してもよい。
【０１４０】
通知後、ＣＰＵ＃０は、次に実行されるアプリのアドレス変換テーブルをアドレス変換器２０９に通知する（ステップＳ１９０３）。なお、ステップＳ１９０２、ステップＳ１９０３以降に処理されるポート接続器２０８、アドレス変換器２０９の処理は、図１６と同一であるため、図１９では省略している。通知後、ＣＰＵ＃０は、次に実行されるアプリの実行を対象デバイスに通知し（ステップＳ１９０４）、ステップＳ１５０１の処理に移行する。
【０１４１】
シナリオ情報が存在しない、またはシナリオ情報が無しで登録されている場合（ステップＳ１８０１：Ｎｏ）、ＣＰＵ＃０は、占有していた記憶領域を解放する（ステップＳ１９０５）。解放後、ＣＰＵ＃０は、解放した記憶領域の先頭アドレスをアプリシナリオテーブル２１４から消去する（ステップＳ１９０６）。消去後、ＣＰＵ＃０は、対象デバイスの実行キューに実行待ちアプリが存在するか否かを判断する（ステップＳ１９０７）。
【０１４２】
実行待ちアプリが存在する場合（ステップＳ１９０７：Ｙｅｓ）、ＣＰＵ＃０は、次に実行されるアプリの実行を対象デバイスに通知する（ステップＳ１９０８）。通知後、または実行待ちアプリが存在しない場合（ステップＳ１９０７：Ｎｏ）、ＣＰＵ＃０は、ステップＳ１５０１の処理に移行する。
【０１４３】
以上説明したように、メモリ制御方法、およびシステムによれば、複数のポートを有するメモリに対して、アプリの割当先デバイスが処理を実行する際に、アプリ占有のポートを介して各アプリの記憶領域にアクセスするようにメモリコントローラを制御する。これにより、システムは、各デバイスが別々のポートを経由してメモリにアクセスするため、アクセス競合を回避できる。
【０１４４】
また、システムは、対象アプリの処理が複数ある場合、複数の処理のうち特定の処理が終了後、次の処理を実行するデバイスを割当先デバイスに決定し、割当先デバイスに、アプリ占有のポートと記憶領域をアクセスするようにメモリコントローラを制御してもよい。従来例にかかるシステムでは、デバイス間で連携動作を行う場合、各デバイスが管理する記憶領域が異なれば、アクセス競合を回避することができる。しかし、記憶領域が異なる場合、記憶領域間のコピー処理が発生するという問題があった。本実施の形態にかかるシステムは、決定前の割当先デバイスが管理する記憶領域と決定後の割当先デバイスが管理する記憶領域間でのコピー処理を回避することができる。
【０１４５】
また、システムは、対象アプリが占有するポートおよび記憶領域をテーブルに登録してもよい。これにより、システムは、他のアプリがポートを占有する場合に、テーブルを参照して既に対象アプリが占有しているポートを除いたポートに割り当てることができ、アクセス競合を回避することができる。
【０１４６】
また、システムは、対象アプリがテーブルに登録されていないとき、対象アプリを負荷が最小であるデバイスに割り当ててもよい。これにより、システムは、各デバイス間の負荷を均等に近づけることができる。
【０１４７】
また、システムは、対象アプリのシナリオ情報がテーブルに登録されている場合、シナリオ情報が有るアプリ用となる第１ポートを対象アプリに割り当ててもよい。また、システムは、対象アプリのシナリオ情報がテーブルに登録されていない場合、シナリオ情報が無いアプリ用となる第２ポートを対象アプリに割り当ててもよい。同様に、記憶領域においても、システムは、シナリオ情報がテーブルに登録されている場合、シナリオ情報が有るアプリ用となる第１記憶領域を対象アプリに割り当ててもよい。また、システムは、シナリオ情報がテーブルに登録されていない場合、シナリオ情報が無いアプリ用となる第２記憶領域を対象アプリに割り当ててもよい。
【０１４８】
たとえば、システムは、第１ポートに割り当てるアプリとして、頻繁にメモリにアクセスする処理を含むアプリや、複数のデバイス間でデータをコピーする処理を含むアプリを対象とする。これにより、システムは、アクセス競合およびデバイス間のデータコピーが発生しないアプリで全てのポートが占有されてしまうことを回避できる。また、システムは、アクセス競合またはデバイス間のデータコピーが発生するアプリが起動された際に、第１ポートのうち未使用のポートを割り当てることができる。
【０１４９】
また、システムは、シナリオ情報が有るアプリが起動された場合に、未使用の第１ポートが存在するか否かを判断し、未使用ポートが存在しない場合、第２ポートをシナリオ情報が有るアプリに割り当ててもよい。これにより、システムは、第１ポートが全て使用中となった場合でも、シナリオ情報が有るアプリを実行開始することができる。
【０１５０】
また、システムは、デバイスがアクセスする論理アドレスと記憶領域の物理アドレスを変換するアドレス変換テーブルをアドレス変換器に通知してもよい。これにより、対象アプリは、記憶領域がメモリのどの領域に設定されても、常に同一の論理アドレスで実行することができる。
【０１５１】
また、システムは、対象デバイスに割り当てられたアプリが切り替わるとき、テーブルから切替後のアプリに対応するポートの識別情報を取得して、メモリコントローラ内のポート接続器に通知してもよい。これにより、システムは、切り替え後のアプリに関するコピー処理を回避することができる。
【０１５２】
また、システムは、対象デバイスに割り当てられたアプリが終了するとき、テーブルに登録されたポートの識別情報および記憶領域のアドレスを消去してもよい。これにより、システムは、一度使用されたポートおよび記憶領域を、別のアプリが使用するポートおよび記憶領域として割り当てることができる。
【０１５３】
また、システムは、対象アプリを実行中に、メモリのアクセス回数およびデバイスの使用回数を記録し、アクセス回数、使用回数、および対象アプリの処理負荷に基づいて、対象アプリのシナリオ情報をテーブルに登録してもよい。これにより、システムは、シナリオ情報が存在しないアプリであっても、アクセス競合またはデバイス間のコピー処理が発生する場合、次の起動からは占有のポートを割り当てることができ、アクセス競合またはデバイス間のコピー処理を回避することができる。たとえば、システムは、ユーザがネットワークを経由してダウンロードしたアプリ等に対して適用することができる。
【０１５４】
なお、本実施の形態にかかるメモリコントローラのポート数は、最大でもデバイスの個数でよい。本実施の形態にかかるシステムは、メモリコントローラのポート数分、アプリを同時実行することができる。また、本実施の形態にかかるメモリ制御方法は、ソフトウェアによるメモリ制御を行うため、製造コストを抑えることができる。特許文献１にかかる技術では、メモリコントローラを複数搭載するために、製造コストが増大してしまっていた。また、本実施の形態にかかるシステムは、メモリアクセス競合を回避することにより、従来例にかかるシステムに比べて５０％程度の性能向上を見込むことができる。
【０１５５】
なお、本実施の形態で説明したメモリ制御方法は、あらかじめ用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本メモリ制御方法を実行するプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本メモリ制御方法を実行するプログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【０１５６】
＃０、＃１  ＣＰＵ、アプリ
１００  マルチコアプロセッサシステム
１０４  ＤＢＢ
１０５  ＣＰＵｓ
１０６  ＧＰＵ
１０７  メモリ
１０８  バス
１１３  ポート
１１４  ポート
２０１  ＬＣＤＣ
２０８  ポート接続器
２０９  アドレス変換器
２１４  アプリシナリオテーブル
２１５  記憶領域
３０１  設定レジスタ
４０３  変換レジスタ
４０４  アドレス変換テーブル
５０１  検出部
５０２  割当部
５０３  決定部
５０４  制御部
５０５  登録部
【図１】
2012101760.tif 000003
【図２】
2012101760.tif 000004
【図３】
2012101760.tif 000005
【図４】
2012101760.tif 000006
【図５】
2012101760.tif 000007
【図６】
2012101760.tif 000008
【図７】
2012101760.tif 000009
【図８】
2012101760.tif 000010
【図９】
2012101760.tif 000011
【図１０】
2012101760.tif 000012
【図１１】
2012101760.tif 000013
【図１２】
2012101760.tif 000014
【図１３】
2012101760.tif 000015
【図１４】
2012101760.tif 000016
【図１５】
2012101760.tif 000017
【図１６】
2012101760.tif 000018
【図１７】
2012101760.tif 000019
【図１８】
2012101760.tif 000020
【図１９】
2012101760.tif 000021
【国際調査報告】
2012101760.tif 000022
2012101760.tif 000023