(57)【要約】  複数アクセスによる競合を発生させずに複数のメモリを管理する。マルチコアプロセッサシステム（１００）は、ＣＰＵ（＃０）で実行中のスレッド（０）、ＣＰＵ（＃１）で実行中のスレッド（１）からのメモリ確保要求を管理要求ディスパッチテーブル（１２３）に格納する。メモリ管理スレッド（１２２）は、管理要求ディスパッチテーブル（１２３）から確保要求を順に読み出し、初めにスレッド０用領域（１３１）をメインメモリ（１０３）内に確保し、次にスレッド１用領域（１３２）をＧＰＵメモリ（１０２）内に確保する。
2013021441.tif 000002
【特許請求の範囲】
【請求項１】
複数のデータ処理装置と、
周辺装置と、
前記複数のデータ処理装置および前記周辺装置に共有されるメモリと、
前記周辺装置に対応して設けられる周辺メモリと、
前記複数のデータ処理装置または前記周辺装置で実行されるスレッド情報をシーケンスに格納するヒープ領域から読み出される前記スレッド情報に基づいて前記スレッド情報に基づくスレッドに前記メモリまたは前記周辺メモリの領域を確保するメモリ管理ユニットと
を含むことを特徴とするデータ処理システム。
【請求項２】
前記複数のデータ処理装置の負荷が均衡状態にないときは、前記メモリ管理ユニットの実行を前記複数のデータ処理装置のうちで負荷の最も小さいデータ処理装置に割り当てるスケジューラを含むこと
を特徴とする請求項１に記載のデータ処理システム。
【請求項３】
前記複数のデータ処理装置の負荷が均衡状態にあるときは、前記スレッド情報に基づくスレッドを前記スレッドが過去に割り当てられたデータ処理装置に割り当てるスケジューラを含むこと
を特徴とする請求項１に記載のデータ処理システム。
【請求項４】
前記メモリ管理ユニットは、前記スレッド情報に基づく優先度情報に基づいて前記スレッドに前記メモリまたは前記周辺メモリの領域を確保すること
を特徴とする請求項１乃至請求項３の何れか一に記載のデータ処理システム。
【請求項５】
前記メモリ管理ユニットは、前記優先度情報が高優先を示すとき、前記スレッドに前記メモリまたは前記周辺メモリのうちでメモリアクセス速度が速いメモリの領域を確保すること
を特徴とする請求項４に記載のデータ処理システム。
【請求項６】
前記メモリ管理ユニットは、前記優先度情報が中優先または低優先を示すとき、前記周辺メモリに空きがあるときは前記スレッドに前記周辺メモリの領域を確保すること
を特徴とする請求項４または請求項５に記載のデータ処理システム。
【請求項７】
前記メモリ管理ユニットは、前記スレッド情報に基づくスレッドが前記周辺装置を管理するスレッドであるとき、前記スレッドに前記周辺メモリの領域を確保すること
を特徴とする請求項１乃至請求項６の何れか一に記載のデータ処理システム。
【請求項８】
前記メモリおよび前記周辺メモリの使用状況を管理する上位メモリ管理ユニットを含み、
前記メモリ管理ユニットは、定期的に前記メモリおよび前記周辺メモリの使用状況を前記上位メモリ管理ユニットに通知すること
を特徴とする請求項１乃至請求項７の何れか一に記載のデータ処理システム。
【請求項９】
複数のデータ処理装置のうちの第１データ処理装置は、前記複数のデータ処理装置または周辺装置で実行されるスレッド情報をヒープ領域にシーケンスに格納し、
前記ヒープ領域から読み出される前記スレッド情報に基づいて前記スレッド情報に基づくスレッドに前記複数のデータ処理装置で共有されるメモリまたは前記周辺装置に対応する周辺メモリの領域を確保すること
を特徴とするデータ処理方法。
【請求項１０】
前記スレッド情報に含まれる優先度情報に基づいて、前記スレッドに前記メモリまたは前記周辺メモリの領域を確保すること
を特徴とする請求項９に記載のデータ処理方法。
【請求項１１】
前記優先度情報が高優先を示すとき、前記スレッドに前記メモリまたは前記周辺メモリのうちでメモリアクセス速度が速いメモリの領域を確保すること
を特徴とする請求項１０に記載のデータ処理方法。
【請求項１２】
前記優先度情報が中優先または低優先を示すとき、前記周辺メモリに空きがあるときは前記スレッドに前記周辺メモリの領域を確保すること
を特徴とする請求項１０または請求項１１に記載のデータ処理方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリを管理するデータ処理システム、およびデータ処理方法に関する。
【背景技術】
【０００２】
従来から、携帯電話等の携帯端末のメモリアーキテクチャには、様々なメモリが搭載されている。具体的なメモリの種類としては、ＣＰＵ（Ｃｅｎｔｒａｌ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が主にアクセスするメインメモリとなるＲＡＭ（Ｒａｎｄｏｍ  Ａｃｃｅｓｓ  Ｍｅｍｏｒｙ）の他に、ＧＰＵ（Ｇｒａｐｈｉｃｓ  Ｐｒｏｃｅｓｓｉｎｇ  Ｕｎｉｔ）が用いるＧＲＡＭ（Ｇｒａｐｈｉｃｓ  ＲＡＭ）、ＤＳＰ（Ｄｉｇｉｔａｌ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｏｒ）が用いるバッファ用メモリ、ＬＣＤ（Ｌｉｑｕｉｄ  Ｃｒｙｓｔａｌ  Ｄｉｓｐｌａｙ）コントローラのＶＲＡＭ（Ｖｉｄｅｏ  ＲＡＭ）などが存在する。【０００３】
このような様々なメモリのアクセス方法に関して、たとえば、アプリケーションソフトウェア（以下、「アプリ」と称する）からのメモリアクセスに対してスレッドを生成し、該当のスレッドがメモリアクセスに関する管理を行う技術が開示されている（たとえば、下記特許文献１を参照。）。なお、スレッドとはＣＰＵで行う処理を管理するための基本単位である。
【先行技術文献】
【特許文献】
【０００４】
【特許文献１】特開２００８−１０８０８９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００５】
しかしながら、上述した従来技術において、メモリアクセスの管理をするスレッドを、任意のＣＰＵで実行できるようにすると、同時アクセスによる競合を避けるため、排他制御処理を追加せねばならず、オーバーヘッドが増加するという問題があった。【０００６】
本発明は、上述した従来技術による問題点を解消するため、複数アクセスによる競合を発生させずに複数のメモリを管理できるデータ処理システム、およびデータ処理方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
上述した課題を解決し、目的を達成するため、本発明の一側面によれば、複数のデータ処理装置と、周辺装置と、複数のデータ処理装置および周辺装置に共有されるメモリと、周辺装置に対応して設けられる周辺メモリと、複数のデータ処理装置または周辺装置で実行されるスレッド情報をシーケンスに格納するヒープ領域から読み出されるスレッド情報に基づいてスレッド情報に基づくスレッドにメモリまたは周辺メモリの領域を割り当てるメモリ管理ユニットとを含むデータ処理システム、およびデータ処理方法が提案される。
【発明の効果】
【０００８】
本発明の一側面によれば、複数アクセスによる競合を発生させずに複数のメモリを管理できるという効果を奏する。
【図面の簡単な説明】
【０００９】
【図１】図１は、マルチコアプロセッサシステムの動作例を示す説明図である。
【図２】図２は、マルチコアプロセッサシステムのハードウェア例を示すブロック図である。
【図３】図３は、マルチコアプロセッサシステムのソフトウェア例を示すブロック図である。
【図４】図４は、マルチコアプロセッサシステムの機能例を示すブロック図である。
【図５】図５は、管理要求ディスパッチテーブルの記憶内容の一例を示す説明図である。
【図６】図６は、メモリ使用テーブルの記憶内容の一例を示す説明図である。
【図７】図７は、スレッド動作履歴テーブルの一例を示す説明図である。
【図８】図８は、負荷が均衡状態でない場合のスレッド割当方法の一例を示す説明図である。
【図９】図９は、負荷が均衡状態である場合のスレッド割当方法の一例を示す説明図である。
【図１０】図１０は、メモリの確保方法の一例を示す説明図（その１）である。
【図１１】図１１は、メモリの確保方法の一例を示す説明図（その２）である。
【図１２】図１２は、メモリ管理要求処理手順の一例を示すフローチャートである。
【図１３】図１３は、メモリ管理スレッドの処理手順の一例を示すフローチャートである。
【図１４】図１４は、スケジューラによる割当対象スレッドの割当先ＣＰＵ選択処理の一例を示すフローチャートである。
【図１５】図１５は、メモリ確保先選択処理の一例を示すフローチャートである。
【図１６】図１６は、本実施の形態にかかるコンピュータを用いたシステムの適用例を示す説明図である。
【発明を実施するための形態】
【００１０】
以下に添付図面を参照して、開示のデータ処理システム、およびデータ処理方法の実施の形態を詳細に説明する。なお、本実施の形態にかかるデータ処理システムの例として、複数のＣＰＵを有するマルチコアプロセッサシステムにて説明を行う。マルチコアプロセッサとは、コアが複数搭載されたプロセッサである。コアが複数搭載されていれば、複数のコアが搭載された単一のプロセッサでもよく、シングルコアのプロセッサが並列されているプロセッサ群でもよい。なお、本実施の形態では、説明を単純化するため、シングルコアのプロセッサが並列されているプロセッサ群を例に挙げて説明する。
【００１１】
図１は、マルチコアプロセッサシステムの動作例を示す説明図である。マルチコアプロセッサシステム１００は、ＣＰＵ＃０と、ＣＰＵ＃１と、ＧＰＵ１０１と、ＧＰＵメモリ１０２と、メインメモリ１０３と、を含む。以下、接尾記号“＃ｎ”が付随された記号は、ｎ番目のＣＰＵに対応する記号であることを示している。ＣＰＵ＃０とＣＰＵ＃１は、ローカルバス１１２で接続されており、ＧＰＵ１０１とＧＰＵメモリ１０２は、ローカルバス１１３で接続されている。ローカルバス１１２とローカルバス１１３とメインメモリ１０３は、バス１１１で接続されている。メインメモリ１０３は、アクセス速度が高速なメモリであり、ＧＰＵメモリ１０２は、アクセス速度が低速なメモリである。なお、ＣＰＵ以外の装置を周辺装置と称する。また、周辺装置に対応して設けられるメモリを周辺メモリと称する。図１の例では、ＧＰＵメモリ１０２が周辺メモリとなる。
【００１２】
また、ＣＰＵ＃０は、高優先度のスレッド０を実行し、ＣＰＵ＃１は、低優先度のスレッド１とメモリ管理スレッド１２２を実行する。ＣＰＵ＃０、ＣＰＵ＃１は、スレッド０、スレッド１によるｍａｌｌｏｃ（）関数等といったメモリ確保要求を実行すると、ダミーデバイスドライバ１２１＃０、ダミーデバイスドライバ１２１＃１を実行する。
【００１３】
ダミーデバイスドライバ１２１は、個々の周辺機器における通常のデバイスドライバと同一のインターフェースを有するＡＰＩ（Ａｐｐｌｉｃａｔｉｏｎ  Ｐｒｏｇｒａｍｍｉｎｇ  Ｉｎｔｅｒｆａｃｅ）である。スレッドは、ダミーデバイスドライバ１２１に対して通常のデバイスドライバと同一の操作を行うことができる。ダミーデバイスドライバ１２１は、メモリ確保要求を受け付けると、メインメモリ１０３に格納されている管理要求ディスパッチテーブル１２３にスレッド情報を付与したメモリ確保要求を格納する。スレッド情報とは、スレッドの名称、スレッドの優先度情報等が含まれた情報である。
【００１４】
メモリ管理スレッド１２２は、管理要求ディスパッチテーブル１２３からメモリ確保要求を順に読み出し、メモリ確保要求のスレッド情報に基づいて、メインメモリ１０３、または、ＧＰＵメモリ１０２の領域を確保する。
【００１５】
図１の例では、メモリ管理スレッド１２２は、初めにスレッド０用領域１３１をメインメモリ１０３内に確保し、次にスレッド１用領域１３２をＧＰＵメモリ１０２内に確保する。このように、マルチコアプロセッサシステム１００は、複数のＣＰＵで実行中のスレッドからのメモリ確保要求を管理要求ディスパッチテーブル１２３に格納し、確保要求を順に読み出し、メインメモリ１０３や周辺装置のメモリに割り当てる。これにより、マルチコアプロセッサシステム１００は、複数アクセスによる競合を発生させずにメモリ確保できる。図２〜図１５にて、図１で示した動作を行うマルチコアプロセッサシステム１００について説明を行う。
【００１６】
図２は、マルチコアプロセッサシステムのハードウェア例を示すブロック図である。図２において、携帯電話などの携帯端末を想定するマルチコアプロセッサシステム１００は、ＣＰＵ＃０と、ＣＰＵ＃１と、ＧＰＵ１０１と、ＧＰＵメモリ１０２と、メインメモリ１０３と、ＤＳＰ２０１と、ＤＳＰメモリ２０２と、を含む。ＤＳＰ２０１とＤＳＰメモリ２０２は、ローカルバス２０３で接続されている。また、マルチコアプロセッサシステム１００は、ＲＯＭ（Ｒｅａｄ‐Ｏｎｌｙ  Ｍｅｍｏｒｙ）２０４と、ＲＡＭ２０５と、フラッシュＲＯＭ２０６と、フラッシュＲＯＭコントローラ２０７と、フラッシュＲＯＭ２０８と、を含む。
【００１７】
また、マルチコアプロセッサシステム１００は、ユーザやその他の機器との入出力装置として、ディスプレイ２０９と、Ｉ／Ｆ（Ｉｎｔｅｒｆａｃｅ）２１０と、キーボード２１１と、を含む。また、各部はバス１１１によってそれぞれ接続されている。なお、図１に示したメインメモリ１０３は、ＲＡＭ２０５であってもよいし、ＲＡＭ２０５の一部であってもよい。また、メインメモリ１０３は、ＣＰＵ＃０、ＣＰＵ＃１、ＧＰＵ１０１、ＤＳＰ２０１、等から共有してアクセスできるメモリである。
【００１８】
ここで、ＣＰＵ＃０、ＣＰＵ＃１は、マルチコアプロセッサシステム１００の全体の制御を司る。ＣＰＵ＃０、ＣＰＵ＃１は、シングルコアのプロセッサを並列して接続した全てのＣＰＵを指している。なお、マルチコアプロセッサシステム１００は、３つ以上のＣＰＵを含んでいてもよい。ＣＰＵ＃０〜ＣＰＵ＃ｎは、それぞれ専用のキャッシュメモリを有している。
【００１９】
ＲＯＭ２０４は、ブートプログラムなどのプログラムを記憶している。ＲＡＭ２０５は、ＣＰＵ＃０、ＣＰＵ＃１のワークエリアとして使用される。フラッシュＲＯＭ２０６は、読出し速度が高速なフラッシュＲＯＭであり、たとえば、ＮＯＲ型フラッシュメモリである。フラッシュＲＯＭ２０６は、ＯＳ（Ｏｐｅｒａｔｉｎｇ  Ｓｙｓｔｅｍ）などのシステムソフトウェアやアプリなどを記憶している。たとえば、ＯＳを更新する場合、マルチコアプロセッサシステム１００は、Ｉ／Ｆ２１０によって新しいＯＳを受信し、フラッシュＲＯＭ２０６に格納されている古いＯＳを、受信した新しいＯＳに更新する。
【００２０】
フラッシュＲＯＭコントローラ２０７は、ＣＰＵ＃０、ＣＰＵ＃１の制御にしたがってフラッシュＲＯＭ２０８に対するデータのリード／ライトを制御する。フラッシュＲＯＭ２０８は、データの保存、運搬を主に目的としたフラッシュＲＯＭであり、たとえば、ＮＡＮＤ型フラッシュメモリである。フラッシュＲＯＭ２０８は、フラッシュＲＯＭコントローラ２０７の制御で書き込まれたデータを記憶する。データの具体例としては、マルチコアプロセッサシステム１００を使用するユーザがＩ／Ｆ２１０を通して取得した画像データ、映像データなどや、また本実施の形態にかかるデータ処理方法を実行するプログラムなどを記憶してもよい。フラッシュＲＯＭ２０８は、たとえば、メモリカード、ＳＤカードなどを採用することができる。
【００２１】
ディスプレイ２０９は、カーソル、アイコンあるいはツールボックスをはじめ、文書、画像、機能情報などのデータを表示する。ディスプレイ２０９は、たとえば、ＴＦＴ液晶ディスプレイなどを採用することができる。
【００２２】
Ｉ／Ｆ２１０は、通信回線を通じてＬＡＮ（Ｌｏｃａｌ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、ＷＡＮ（Ｗｉｄｅ  Ａｒｅａ  Ｎｅｔｗｏｒｋ）、インターネットなどのネットワーク２１２に接続され、ネットワーク２１２を介して他の装置に接続される。そして、Ｉ／Ｆ２１０は、ネットワーク２１２と内部のインターフェースを司り、外部装置からのデータの入出力を制御する。Ｉ／Ｆ２１０には、たとえばモデムやＬＡＮアダプタなどを採用することができる。
【００２３】
キーボード２１１は、数字、各種指示などの入力のためのキーを有し、データの入力を行う。また、キーボード２１１は、タッチパネル式の入力パッドやテンキーなどであってもよい。
【００２４】
このように、マルチコアプロセッサシステム１００は、ＣＰＵ群だけを見ると、共有メモリアーキテクチャとなるが、ＧＰＵ１０１、ＤＳＰ２０１等といった、メモリに対して行うマスタを複数有する分散メモリアーキテクチャとなる。さらに、メインメモリ１０３、ＧＰＵメモリ１０２、ＤＳＰメモリ２０２は、各マスタから互いにアクセス可能な共有空間として扱われており、複雑な入れ子型階層となる。
【００２５】
図３は、マルチコアプロセッサシステムのソフトウェア例を示すブロック図である。マルチコアプロセッサシステム１００は、ＯＳが提供するソフトウェアとして、カーネル３０１、スケジューラ３０２、メモリ管理スレッド１２２、ＤＳＰダミーデバイスドライバ３０３、ＧＰＵダミーデバイスドライバ３０４を実行する。また、メモリ管理スレッド１２２は、メインメモリ管理部３１１、ＤＳＰメモリ管理部３１２、ＧＰＵメモリ管理部３１３を含む。
【００２６】
なお、カーネル３０１、ＤＳＰダミーデバイスドライバ３０３、ＧＰＵダミーデバイスドライバ３０４は、ＣＰＵ＃０、ＣＰＵ＃１それぞれで実行される。具体的に、ＣＰＵ＃０は、カーネル３０１＃０、ＤＳＰダミーデバイスドライバ３０３＃０、ＧＰＵダミーデバイスドライバ３０４＃０を実行する。また、ＣＰＵ＃１は、カーネル３０１＃１、ＤＳＰダミーデバイスドライバ３０３＃１、ＧＰＵダミーデバイスドライバ３０４＃１を実行する。スケジューラ３０２は、ＣＰＵ＃０、ＣＰＵ＃１のいずれが動作してもよいが、本実施の形態ではマルチコアプロセッサシステム１００でのマスタＣＰＵとなるＣＰＵ＃０が実行する。メモリ管理スレッド１２２は、ＣＰＵ＃０、ＣＰＵ＃１のいずれかが実行する。
【００２７】
カーネル３０１は、ＯＳの中核となる機能を有する。たとえば、カーネル３０１は、アプリが起動された場合、プログラムコードをメインメモリ１０３内に展開する。スケジューラ３０２は、マルチコアプロセッサシステム１００内で実行されるスレッドを各ＣＰＵに割り当て、次に実行するスレッドを選択する機能を有する。たとえば、スケジューラ３０２は、スレッド０をＣＰＵ＃０に割り当て、スレッド１をＣＰＵ＃１に割り当てる。
【００２８】
ＤＳＰダミーデバイスドライバ３０３、ＧＰＵダミーデバイスドライバ３０４は、それぞれ、ＧＰＵ１０１、ＤＳＰ２０１のデバイスドライバに対するダミーデバイスドライバ１２１である。
【００２９】
メインメモリ管理部３１１、ＤＳＰメモリ管理部３１２、ＧＰＵメモリ管理部３１３は、それぞれ、メインメモリ１０３、ＤＳＰメモリ２０２、ＧＰＵメモリ１０２を管理する機能を有する。具体的に、メインメモリ管理部３１１、ＤＳＰメモリ管理部３１２、ＧＰＵメモリ管理部３１３は、各メモリの物理アドレス、確保可能な物理アドレス範囲を記憶している。たとえば、メインメモリ管理部３１１は、メインメモリ１０３への確保要求、解放要求に応じて、使用状況を更新する。ＤＳＰメモリ管理部３１２、ＧＰＵメモリ管理部３１３も、それぞれ、ＤＳＰメモリ２０２、ＧＰＵメモリ１０２の使用状況を更新する。
【００３０】
（マルチコアプロセッサシステム１００の機能）
次に、マルチコアプロセッサシステム１００の機能について説明する。図４は、マルチコアプロセッサシステムの機能例を示すブロック図である。マルチコアプロセッサシステム１００は、格納部４０１と、判断部４０２と、割当部４０３と、上位メモリ管理部４０４と、メモリ管理部４０５と、更新部４１１と、読出部４１２と、選択部４１３と、確保部４１４と、通知部４１５と、を含む。この制御部となる機能（格納部４０１〜通知部４１５）は、記憶装置に記憶されたプログラムをＣＰＵ＃０、ＣＰＵ＃１が実行することにより、その機能を実現する。記憶装置とは、具体的には、たとえば、図２に示したＲＯＭ２０４、ＲＡＭ２０５、フラッシュＲＯＭ２０６、フラッシュＲＯＭ２０８などである。
【００３１】
なお、格納部４０１は、ダミーデバイスドライバ１２１の機能である。また判断部４０２と割当部４０３は、スケジューラ３０２の機能であり、上位メモリ管理部４０４はメモリ管理スレッド１２２の機能であり、メモリ管理部４０５はメインメモリ管理部３１１〜ＧＰＵメモリ管理部３１３の機能である。さらに、更新部４１１と読出部４１２と選択部４１３は、上位メモリ管理部４０４に含まれ、確保部４１４と通知部４１５は、メモリ管理部４０５に含まれる。また、図４では、判断部４０２と割当部４０３がＣＰＵ＃０の機能であり、上位メモリ管理部４０４がＣＰＵ＃１の機能として図示されているが、判断部４０２と割当部４０３がＣＰＵ＃１の機能であり、上位メモリ管理部４０４がＣＰＵ＃０の機能であってもよい。
【００３２】
また、マルチコアプロセッサシステム１００は、管理要求ディスパッチテーブル１２３と、メモリ使用テーブル４２１と、スレッド動作履歴テーブル４２２と、にアクセス可能である。
【００３３】
管理要求ディスパッチテーブル１２３は、動的に確保可能なメモリであるヒープ領域に存在し、ＣＰＵ＃０、ＣＰＵ＃１、ＧＰＵ１０１、ＤＳＰ２０１で実行されるスレッド情報とメモリ管理要求とを格納している。なお、管理要求ディスパッチテーブル１２３の詳細については、図５にて後述する。メモリ使用テーブル４２１は、メインメモリ１０３、および周辺メモリの空き状況を格納している。なお、メモリ使用テーブル４２１の詳細については、図６にて後述する。スレッド動作履歴テーブル４２２は、各スレッドがどのＣＰＵで動作したかという情報を記憶している。なお、スレッド動作履歴テーブル４２２の詳細については、図７にて後述する。
【００３４】
格納部４０１は、複数のデータ処理装置または周辺装置で実行されるスレッド情報をヒープ領域にシーケンスに格納する機能を有する。たとえば、格納部４０１は、ＣＰＵ＃０、ＣＰＵ＃１、ＧＰＵ１０１、ＤＳＰ２０１で実行されるスレッド情報を管理要求ディスパッチテーブル１２３に格納する。スレッド情報をシーケンスに格納するとは、スレッド情報を順番に格納していくことである。
【００３５】
判断部４０２は、複数のデータ処理装置の負荷が均衡状態にあるか否かを判断する機能を有する。たとえば、判断部４０２は、ＣＰＵ＃０とＣＰＵ＃１の負荷が均衡状態にあるか否かを判断する。判断方法の一例として、たとえば、判断部４０２は、ＯＳが有している負荷量判定機能を利用して、スレッドがＣＰＵを占有している時間をＣＰＵごとに算出し、各ＣＰＵの負荷量を基に判断する。各ＣＰＵの負荷量が均等、または、閾値を元に均等と近似できる場合、判断部４０２は、均衡状態であると判断し、各ＣＰＵの負荷量が閾値以上離れた値となった場合、均衡状態にないと判断する。なお、判断結果は、ＲＡＭ２０５、フラッシュＲＯＭ２０６といった記憶領域に記憶される。
【００３６】
割当部４０３は、判断部４０２によって負荷均衡状態にない場合、上位メモリ管理部４０４、メモリ管理部４０５の実行を、複数のデータ処理装置のうちで負荷の最も小さいデータ処理装置に割り当てる機能を有する。たとえば、割当部４０３は、ＣＰＵ＃０とＣＰＵ＃１が負荷均衡状態にない場合、メモリ管理スレッド１２２を負荷の小さいＣＰＵに割り当てる。
【００３７】
また、割当部４０３は、判断部４０２によって負荷均衡状態にある場合、上位メモリ管理部４０４、メモリ管理部４０５の実行を、過去に割り当てられたデータ処理装置または周辺装置に割り当ててもよい。たとえば、割当部４０３は、ＣＰＵ＃０とＣＰＵ＃１が負荷均衡状態にある場合、スレッド動作履歴テーブル４２２を参照して、過去に割り当てられたＣＰＵに割り当てる。
【００３８】
上位メモリ管理部４０４は、メインメモリ１０３および周辺メモリの使用状況を管理する機能を有する。たとえば、上位メモリ管理部４０４は、メモリ管理部４０５にメモリの使用状況を問い合わせ、メモリ管理部４０５から使用状況の通知を受け付ける。
【００３９】
メモリ管理部４０５は、メモリを管理する機能を有する。メモリ管理部４０５は、メインメモリ１０３、ＧＰＵメモリ１０２、ＤＳＰメモリ２０２、といったメモリごとに存在する。メモリ管理部４０５は、各メモリに対して、論物変換を行って、領域の確保、再確保、解放、リード、ライト等を行う。
【００４０】
更新部４１１は、通知された使用状況から、メモリ使用テーブル４２１を更新する機能を有する。たとえば、更新部４１１は、メモリ管理部４０５から通知された使用状況をメモリ使用テーブル４２１に格納する。
【００４１】
読出部４１２は、ヒープ領域からスレッド情報を読み出す機能を有する。たとえば、読出部４１２は、管理要求ディスパッチテーブル１２３からスレッド情報を読み出す。なお、読出結果は、ＲＡＭ２０５、フラッシュＲＯＭ２０６といった記憶領域に記憶される。
【００４２】
選択部４１３は、ヒープ領域から読み出されるスレッド情報に基づいてスレッド情報に基づくスレッドからのメモリ確保要求に対する確保先を、メモリまたは周辺メモリから選択する機能を有する。また、選択部４１３は、スレッドからのメモリ確保要求に対する確保先を、スレッド情報に基づく優先度情報に基づいて選択してもよい。たとえば、選択部４１３は、優先度が高優先度であれば、高速なメインメモリ１０３を確保先として選択する。また、選択部４１３は、低優先度であれば、メインメモリ１０３より低速なＤＳＰメモリ２０２を確保先に選択する。
【００４３】
また、選択部４１３は、スレッド情報に基づくスレッドが周辺装置で実行されるスレッドであるとき、メモリ確保要求に対する確保先として、周辺メモリを選択してもよい。なお、選択結果は、ＲＡＭ２０５、フラッシュＲＯＭ２０６といった記憶領域に記憶される。
【００４４】
確保部４１４は、選択部４１３によって選択された確保先のメモリ内の領域を確保する機能を有する。たとえば、確保部４１４は、メインメモリ１０３が確保先に選択された場合、メインメモリ１０３内の領域を確保する。なお、確保された領域は、要求元のスレッドに通知される。
【００４５】
通知部４１５は、メモリの使用状況を上位メモリ管理部４０４に通知する機能を有する。たとえば、メインメモリ管理部３１１の機能となる通知部４１５は、メインメモリ１０３の使用状況を上位メモリ管理部４０４に通知する。同様に、ＤＳＰメモリ管理部３１２の機能となる通知部４１５は、ＤＳＰメモリ２０２の使用状況を上位メモリ管理部４０４に通知する。また、ＧＰＵメモリ管理部３１３の機能となる通知部４１５は、ＧＰＵメモリ１０２の使用状況を上位メモリ管理部４０４に通知する。
【００４６】
図５は、管理要求ディスパッチテーブルの記憶内容の一例を示す説明図である。図５では、管理要求ディスパッチテーブル１２３の記憶内容について説明を行う。管理要求ディスパッチテーブル１２３はメモリごとに存在する。
【００４７】
本実施の形態では、管理要求ディスパッチテーブル１２３は、メインメモリ１０３、ＧＰＵメモリ１０２、ＤＳＰメモリ２０２、という３つのメモリに対する管理要求を記憶する。メインメモリ１０３の管理要求は管理要求ディスパッチテーブル１２３＿Ｍが記憶し、ＧＰＵメモリ１０２の管理要求は管理要求ディスパッチテーブル１２３＿Ｇが記憶し、ＤＳＰメモリ２０２の管理要求は管理要求ディスパッチテーブル１２３＿Ｄが記憶する。以下、管理要求ディスパッチテーブル１２３＿Ｍについて説明を行うが、管理要求ディスパッチテーブル１２３＿Ｇ、管理要求ディスパッチテーブル１２３＿Ｄも同様の記憶内容となるため、説明を省略する。
【００４８】
図５で示す管理要求ディスパッチテーブル１２３＿Ｍは、レコード１２３＿Ｍ−１〜レコード１２３＿Ｍ−ｎを格納している。ｎは自然数である。管理要求ディスパッチテーブル１２３＿Ｍは、要求元スレッドＩＤ、要求メモリサイズという２つのフィールドを含む。要求元スレッドＩＤフィールドには、メモリ確保要求を行ったスレッドが格納される。要求メモリサイズフィールドには、メモリ確保要求が行われたバイト数が格納される。たとえば、レコード１２３＿Ｍ−１は、スレッド０から３２［バイト］のメモリ確保要求を格納している。
【００４９】
また、管理要求ディスパッチテーブル１２３＿Ｍは、動的に確保可能なメモリであるヒープ領域に存在し、各レコードがポインタで接続された構造となっている。具体的に、レコード１２３＿Ｍ−１が、レコード１２３＿Ｍ−２へのポインタを有している。同様に、レコード１２３＿Ｍ−２が、レコード１２３＿Ｍ−３へのポインタを有しており、レコード１２３＿Ｍ−３が、レコード１２３＿Ｍ−４へのポインタを有している。また、レコード１２３＿Ｍ−ｎが、レコード１２３＿Ｍ−１へのポインタを有している。
【００５０】
なお、図５で示した管理要求ディスパッチテーブル１２３は、メモリの管理要求として、メモリ確保要求を図示したが、他のメモリの管理要求として、メモリの再確保要求、メモリの解放要求が含まれてもよい。さらに、メモリの管理要求として、メモリへのリード、ライト要求が含まれてもよい。この場合、管理要求ディスパッチテーブル１２３の１レコードが保持するフィールドとしては、要求元スレッドＩＤフィールドと、各要求の引数と、である。各要求の引数としては、たとえば、メモリの再確保要求であれば、ｒｅａｌｌｏｃ（）関数の引数である、割当済みのアドレスと要求メモリサイズであり、メモリの解放要求であれば、ｆｒｅｅ（）関数の引数である、解放対象のアドレスである。
【００５１】
図６は、メモリ使用テーブルの記憶内容の一例を示す説明図である。メモリ使用テーブル４２１は、メモリ種別ごとの空き容量を記憶するテーブルである。図６で示すメモリ使用テーブル４２１には、レコード４２１−１〜レコード４２１−３が登録されている。また、レコード４２１−１〜レコード４２１−３は、ＣＰＵ＃０、ＣＰＵ＃１で実行されるスレッドからのアクセス速度の順序で登録されている。たとえば、図６で示すレコード４２１−１〜レコード４２１−３は、降順にて登録されているが、昇順で登録されていてもよい。
【００５２】
メモリ使用テーブル４２１は、メモリ種別、空き容量という２つのフィールドを含む。メモリ種別フィールドには、各メモリを識別する識別情報が格納される。空き容量フィールドには、メモリの空き容量が格納される。
【００５３】
たとえば、レコード４２１−１は、メモリ群のうちアクセス速度が最も速いメインメモリ１０３の空き容量が５０［Ｍバイト］であることを示している。次に、レコード４２１−２は、アクセス速度が次に速いＧＰＵメモリ１０２の空き容量が１０［Ｍバイト］であることを示している。最後に、レコード４２１−３は、アクセス速度が遅いＤＳＰメモリ２０２の空き容量が２０［Ｍバイト］であることを示している。
【００５４】
図７は、スレッド動作履歴テーブルの一例を示す説明図である。スレッド動作履歴テーブル４２２は、スレッドが過去に動作した履歴を記憶するテーブルである。図７で示すスレッド動作履歴テーブル４２２は、レコード４２２−１〜４２２−５を格納している。スレッド動作履歴テーブル４２２は、スレッドＩＤ、動作ＣＰＵＩＤという２つのフィールドを含む。スレッドＩＤフィールドは、動作したスレッドのＩＤが格納される。動作ＣＰＵＩＤフィールドには、スレッドが動作したＣＰＵＩＤが格納される。
【００５５】
たとえば、図７で示すスレッド動作履歴テーブル４２２は、メモリ管理スレッド１２２とスレッド１がＣＰＵ＃１で２回動作しており、スレッド０がＣＰＵ＃０で１回動作していることを示している。
【００５６】
マルチコアプロセッサシステム１００は、図４で示した機能、図５〜図７で示した記憶内容を使用して、スレッドの割当、メモリの確保を行う。図８、図９にて、スレッドの割当方法の一例を示し、図１０、図１１にて、メモリの確保方法の一例を示す。
【００５７】
図８は、負荷が均衡状態でない場合のスレッド割当方法の一例を示す説明図である。図８で示すマルチコアプロセッサシステム１００は、ＣＰＵ＃０がスレッド０を実行し、ＣＰＵ＃１がスレッド１とスレッド２を実行している。この状態で、メモリ管理スレッド１２２を割り当てる場合、図８のマルチコアプロセッサシステム１００の状態は、各ＣＰＵの負荷が均衡状態にないため、スケジューラ３０２は、負荷の最も小さいＣＰＵにメモリ管理スレッド１２２を割り当てる。
【００５８】
図９は、負荷が均衡状態である場合のスレッド割当方法の一例を示す説明図である。図９で示すマルチコアプロセッサシステム１００は、ＣＰＵ＃０がスレッド０とスレッド２を実行し、ＣＰＵ＃１がスレッド１とスレッド３を実行している。この状態で、メモリ管理スレッド１２２を割り当てる場合、図９のマルチコアプロセッサシステム１００の状態は、各ＣＰＵの負荷が均衡状態にあるため、スケジューラ３０２は、メモリ管理スレッド１２２が過去に割り当てられたＣＰＵに割り当てる。
【００５９】
図９の例にて、スケジューラ３０２は、スレッド動作履歴テーブル４２２を参照した結果、メモリ管理スレッド１２２が過去にＣＰＵ＃１で２回動作しているため、メモリ管理スレッド１２２をＣＰＵ＃１に割り当てる。なお、過去の動作履歴に基づくことで、各スレッドは同じＣＰＵに割り当てられることが多くなる。
【００６０】
次に、メモリ確保方法の一例について図１０、図１１にて説明する。図１０、図１１で示すスレッド０は、メニュープログラムを想定しており、ＧＰＵ１０１を利用し、優先度が中優先度である。スレッド１は、マルチメディアプログラムを想定しており、ＤＳＰ２０１を利用し、優先度が高優先度である。スレッド３は、通信プログラムを想定しており、優先度が低優先度である。
【００６１】
図１０は、メモリの確保方法の一例を示す説明図（その１）である。初めに、スレッド０を実行するＣＰＵ＃０は、メモリ管理スレッド１２２によってメインメモリ１０３内に割り当てられたスレッド０用領域１００１にアクセスして処理を行っている。なお、スレッド０用領域１００１がメインメモリ１０３内に割り当てられた要因としては、たとえば、割当が行われたときに、ＧＰＵメモリ１０２、ＤＳＰメモリ２０２の空きがなかった場合である。
【００６２】
次に、ＣＰＵ＃０がスレッド０を実行し、ＣＰＵ＃１が高優先度であるスレッド１を実行する場合、メモリ管理スレッド１２２は、優先度の低いスレッドからメモリ確保要求を行う。図１０の場合では、メモリ管理スレッド１２２は、スレッド０のメモリ確保要求を行った後、スレッド１のメモリ確保要求を行う。
【００６３】
初めに、メモリ管理スレッド１２２は、ＧＰＵメモリ管理部３１３を実行して、アクセス速度が低速なＧＰＵメモリ１０２内にスレッド０用領域１００２を確保する。次に、メモリ管理スレッド１２２は、メインメモリ管理部３１１を実行して、アクセス速度が高速なメインメモリ１０３内にスレッド１用領域１００３を確保する。
【００６４】
図１１は、メモリの確保方法の一例を示す説明図（その２）である。図１１で示すマルチコアプロセッサシステム１００は、ＣＰＵ＃０にスレッド０とスレッド２が割り当てられ、ＣＰＵ＃１にスレッド１が割り当てられている。
【００６５】
このとき、メモリ管理スレッド１２２は、初めにスレッド２のメモリ確保要求を行い、次にスレッド０のメモリ確保要求を行い、最後にスレッド１のメモリ確保要求を行う。初めに、メモリ管理スレッド１２２は、ＤＳＰメモリ管理部３１２を実行して、アクセス速度が低速なＤＳＰメモリ２０２内にスレッド２用領域１１０１を確保する。次に、メモリ管理スレッド１２２は、ＧＰＵメモリ管理部３１３を実行して、アクセス速度が中速なＧＰＵメモリ１０２内にスレッド０用領域１１０２を確保する。最後に、メモリ管理スレッド１２２は、メインメモリ管理部３１１を実行して、アクセス速度が高速なメインメモリ１０３内にスレッド１用領域１１０３を確保する。
【００６６】
なお、図１１の状態で、ＧＰＵ１０１を利用する新たなスレッドが動作した結果、マルチコアプロセッサシステム１００は、スレッド０用領域１１０２を解放する場合もある。この場合、ＧＰＵを用いるスレッドがＧＰＵ１０１およびＧＰＵメモリ１０２を初期化する。
【００６７】
図１２は、メモリ管理要求処理手順の一例を示すフローチャートである。メモリ管理要求処理は、各ＣＰＵのダミーデバイスドライバ１２１によって実行されるが、図１２では、ＣＰＵ＃０のダミーデバイスドライバ１２１＃０によって実行されることを想定する。ＣＰＵ＃０は、ユーザスレッドから周辺装置へのアクセス要求を受け付ける（ステップＳ１２０１）。次に、ＣＰＵ＃０は、管理要求ディスパッチテーブル１２３にメモリ管理要求を格納する（ステップＳ１２０２）。続けて、ＣＰＵ＃０は、メモリ管理スレッド１２２に実行要求を通知し（ステップＳ１２０３）、メモリ管理要求処理を終了する。
【００６８】
図１３は、メモリ管理スレッドの処理手順の一例を示すフローチャートである。メモリ管理スレッド１２２は、後述する図１４で示すスケジューラ３０２の割当先ＣＰＵ選択処理によって、ＣＰＵ＃０、ＣＰＵ＃１のいずれかで実行する。図１３では、メモリ管理スレッド１２２はＣＰＵ＃０に実行されることを想定する。
【００６９】
ＣＰＵ＃０は、メモリ管理スレッド１２２が定期実行されたか否かを判断する（ステップＳ１３０１）。定期実行された場合（ステップＳ１３０１：Ｙｅｓ）、ＣＰＵ＃０は、各デバイスのメモリ管理部に使用状況、空き状況を問い合わせる（ステップＳ１３０２）。ＣＰＵ＃０は、各デバイスのメモリ管理部として問い合わせを受け付けた後、メモリ管理スレッド１２２に使用状況、空き状況を通知する（ステップＳ１３０３）。通知を受け付けたＣＰＵ＃０は、通知結果から、メモリ使用テーブル４２１を更新し（ステップＳ１３０４）、メモリ管理スレッド１２２の処理を終了する。
【００７０】
定期実行されていない場合（ステップＳ１３０１：Ｎｏ）、ＣＰＵ＃０は、管理要求ディスパッチテーブル１２３のレコードを読み出す（ステップＳ１３０５）。なお、管理要求ディスパッチテーブル１２３には、複数のレコードが格納されている可能性がある。メモリ確保要求が複数存在する場合、ＣＰＵ＃０は、対応するスレッドの優先度が低いメモリ確保要求から順に読み出してもよい。
【００７１】
優先度が低いスレッドのメモリを確保した後、優先度が高いスレッドのメモリを確保することで、ＣＰＵ＃０は、高いスレッドのメモリが確保できない場合、低いスレッドのメモリをフラッシュＲＯＭ２０６、フラッシュＲＯＭ２０８にスワップアウトする。このように、確保領域を再配置することで、マルチコアプロセッサシステム１００は、記憶領域が断片化を防ぐことができる。もし、優先度が高いスレッドのメモリから順に確保した場合、優先度の低いスレッドからは、優先度の高いスレッドに対して確保された領域を移動することはできず、記憶領域が断片化するおそれがある。
【００７２】
レコードの読出後、ＣＰＵ＃０は、読み出したレコードにメモリ確保要求が存在するか否かを判断する（ステップＳ１３０６）。メモリ確保要求が存在する場合（ステップＳ１３０６：Ｙｅｓ）、ＣＰＵ＃０は、メモリ確保先選択処理を実行する（ステップＳ１３０７）。なお、メモリ確保先選択処理は、図１５にて後述する。
【００７３】
メモリ確保先選択処理実行後、または、メモリ確保要求が存在しない場合（ステップＳ１３０６：Ｎｏ）、ＣＰＵ＃０は、対象となるデバイスのメモリ管理部を実行する（ステップＳ１３０８）。対象となるデバイスのメモリ管理部の実行処理として、たとえば、メモリ管理要求がメモリ確保要求であれば、ＣＰＵ＃０は対象となるメモリに対してメモリ確保を行う。また、対象となるメモリとは、後述するステップＳ１５０４、またはステップＳ１５０５で選択されたメモリとなる。たとえば、メインメモリ１０３が確保先として選択された場合、メインメモリ１０３が対象となるメモリとなる。
【００７４】
続けて、ＣＰＵ＃０は、読み出した管理要求を処理完了テーブルに移行し（ステップＳ１３０９）、スレッド動作履歴テーブル４２２、負荷情報、メモリ使用テーブル４２１を更新し（ステップＳ１３１０）、メモリ管理スレッド１２２の処理を終了する。なお、処理完了テーブルとは、処理が完了したメモリ管理要求を戻り値と併せて格納するテーブルである。ダミーデバイスドライバ１２１は、処理完了テーブル内のメモリ管理要求に対する戻り値を参照して、呼び元のアプリにメモリ管理要求に対する応答を行う。
【００７５】
図１４は、スケジューラによる割当対象スレッドの割当先ＣＰＵ選択処理の一例を示すフローチャートである。スケジューラ３０２は、本実施の形態ではＣＰＵ＃０で実行されることを想定している。なお、割当対象スレッドとなり得るスレッドは、ユーザスレッド、メモリ管理スレッド１２２などである。
【００７６】
ＣＰＵ＃０は、負荷均衡状態が均衡か否かを判断する（ステップＳ１４０１）。負荷が均衡である場合（ステップＳ１４０１：Ｙｅｓ）、ＣＰＵ＃０は、割当対象スレッドが過去に動作したＣＰＵに割当対象スレッドを割り当てる（ステップＳ１４０２）。負荷が均衡でない場合（ステップＳ１４０１：Ｎｏ）、ＣＰＵ＃０は、低負荷ＣＰＵに割当対象スレッドを割り当てる（ステップＳ１４０２）。ステップＳ１４０２、ステップＳ１４０３の終了後、ＣＰＵ＃０は、スレッドの割当先ＣＰＵ選択処理を終了する。
【００７７】
図１５は、メモリ確保先選択処理の一例を示すフローチャートである。メモリ確保先選択処理は、メモリ管理スレッド１２２と同一のＣＰＵで実行される。ここでは、ＣＰＵ＃０が実行することを想定する。ＣＰＵ＃０は、メモリ管理スレッド１２２の呼び元がユーザスレッドか否かを判断する（ステップＳ１５０１）。
【００７８】
ユーザスレッドである場合（ステップＳ１５０１：ユーザスレッド）、ＣＰＵ＃０は、続けて、ユーザスレッドが高優先度か否かを判断する（ステップＳ１５０２）。低優先度、中優先度である場合（ステップＳ１５０２：低優先度、中優先度）、ＣＰＵ＃０は、スレッド動作履歴テーブル４２２を参照して、周辺メモリに空きがあるか否かを判断する（ステップＳ１５０３）。
【００７９】
空きがない場合（ステップＳ１５０３：Ｎｏ）、または、高優先度である場合（ステップＳ１５０２：高優先度）、ＣＰＵ＃０は、メインメモリ１０３と周辺メモリのうち、メインメモリ１０３を確保先として選択する（ステップＳ１５０４）。確保先を選択後、ＣＰＵ＃０は、メモリ確保先選択処理を終了する。空きがある場合（ステップＳ１５０３：Ｙｅｓ）、または、呼び元がデバイスドライバである場合（ステップＳ１５０１：デバイスドライバ）、ＣＰＵ＃０は、メインメモリ１０３と周辺メモリのうち、周辺メモリを確保先として選択する（ステップＳ１５０５）。確保先を選択後、ＣＰＵ＃０は、メモリ確保先選択処理を終了する。
【００８０】
図１６は、本実施の形態にかかるコンピュータを用いたシステムの適用例を示す説明図である。図１６において、ネットワークＮＷは、サーバ１６０１、サーバ１６０２とクライアント１６３１〜クライアント１６３４とが通信可能なネットワークであり、たとえば、ＬＡＮ、ＷＡＮ、インターネット、携帯電話網などを含む。
【００８１】
サーバ１６０２は、クラウド１６２０を有するサーバ群（サーバ１６２１〜サーバ１６２５）の管理サーバである。クライアント１６３１はノート型ＰＣ（Ｐｅｒｓｏｎａｌ  Ｃｏｍｐｕｔｅｒ）である。クライアント１６３２はデスクトップ型ＰＣ、クライアント１６３３は携帯電話機である。携帯電話機として、クライアント１６３３は、スマートフォンであってもよいし、ＰＨＳ（Ｐｅｒｓｏｎａｌ  Ｈａｎｄｙｐｈｏｎｅ  Ｓｙｓｔｅｍ）であってもよい。クライアント１６３４はタブレット型端末である。
【００８２】
図１６のサーバ１６０１、サーバ１６０２、サーバ１６２１〜サーバ１６２５、クライアント１６３１〜クライアント１６３４は、たとえば、実施の形態で説明したデータ処理装置として、本実施の形態にかかるデータ処理システムを実行する。たとえば、サーバ１６２１が最も高速なメモリを有し、サーバ１６２２〜サーバ１６２５が低速なメモリを有している場合を想定する。このとき、データ処理システムは、サーバ１６２１のメモリを本実施の形態におけるメインメモリ１０３とみなし、サーバ１６２２〜サーバ１６２５のメモリを周辺装置のメモリとみなすことで、本実施の形態にかかるデータ処理方法を実行することができる。
【００８３】
以上説明したように、データ処理システム、およびデータ処理方法によれば、複数のデータ処理装置で実行中のスレッドからのメモリ管理要求を共有メモリに格納し、管理要求を順に読み出し、メインメモリや周辺装置のメモリを確保する。これにより、データ処理システム、複数のデータ処理装置からの、複数アクセスによる競合を発生させずにメモリを管理することができる。具体的には、データ処理装置は、共有メモリから順に読み出すため、メモリ管理要求が同じタイミングで呼び出されることがなく、アクセス競合が発生しない。
【００８４】
また、データ処理システムは、データ処理装置の負荷が均衡状態にない場合、メモリ管理を行うメモリ管理スレッドを、データ処理装置のうちで負荷の最も小さいデータ処理装置に割り当ててもよい。これにより、データ処理システムは、アクセス競合を起こさずにメモリ管理処理を負荷分散することができる。従来例におけるデータ処理システムでは、任意のデータ処理装置で複数のメモリを管理しようとすると排他制御処理をせねばならず、オーバーヘッドが増加していた。また、従来例におけるデータ処理システムは、１つのデータ処理装置で複数のメモリの管理を行うとすると、負荷が偏ってしまっていた。
【００８５】
また、データ処理システムは、データ処理装置の負荷が均衡状態にある場合、メモリ管理スレッドを、該当のスレッドが過去に割り当てられたデータ処理装置に割り当ててもよい。これにより、メモリ管理スレッドが割り当てられたデータ処理装置は、キャッシュメモリに残ったスレッドのキャッシュを用いて、高速に処理を行うことができる。
【００８６】
具体的に、メモリ管理スレッドは、プログラムとしてのメモリ管理ルーチンと、データとして確保したメモリ領域のアロケートテーブルを有する。メモリ管理ルーチンがインストラクションキャッシュに残っていた場合、メモリ管理スレッドは、即座に処理を実行することができる。また、アロケートテーブルがデータキャッシュに残っていた場合、メモリ管理スレッドは、テーブル管理を即座に実行することができる。
【００８７】
また、データ処理システムは、メモリ確保要求を行ったスレッドの優先度情報に基づいて、メインメモリまたは周辺メモリのいずれかから領域を確保してもよい。また、データ処理システムは、メモリ確保要求を行ったスレッドが高優先度である場合、メモリアクセス速度が速いメモリの領域を確保してもよい。これにより、データ処理システムは、高速処理を求められるスレッドに対しては、高速アクセスが行えるメモリを使用して、高速処理を行うことができる。
【００８８】
また、データ処理システムは、メモリ確保要求を行ったスレッドが中優先度または低優先度である場合、周辺メモリに空きがあれば、周辺メモリの領域を確保してもよい。周辺メモリは、メインメモリより低速である分、消費電力が小さい。したがって、データ処理システムは、高速処理を行わなくてよい場合、消費電力の小さい周辺メモリを確保することで、消費電力を削減し、電力効率を向上することができる。
【００８９】
また、データ処理システムは、メモリ確保要求を行ったスレッドが周辺装置を管理するスレッドであれば、周辺メモリの領域を確保してもよい。これにより、データ処理システムは、周辺装置を用いるスレッドであっても、周辺装置に対応するスレッドを実行することができる。
【００９０】
また、データ処理システムは、メモリおよび周辺メモリの使用状況を収集してもよい。これにより、データ処理システムは、各周辺メモリの空き容量を確認できるため、メモリに空きがあり、低速なメモリから確保していくことができる。
【００９１】
なお、本実施の形態で説明したデータ処理方法は、予め用意されたプログラムをパーソナル・コンピュータやワークステーション等のコンピュータで実行することにより実現することができる。本データ処理方法を実行するプログラムは、ハードディスク、フレキシブルディスク、ＣＤ−ＲＯＭ、ＭＯ、ＤＶＤ等のコンピュータで読み取り可能な記録媒体に記録され、コンピュータによって記録媒体から読み出されることによって実行される。また本データ処理方法を実行するプログラムは、インターネット等のネットワークを介して配布してもよい。
【符号の説明】
【００９２】
＃０、＃１  ＣＰＵ
１００  マルチコアプロセッサシステム
１０１  ＧＰＵ
１０２  ＧＰＵメモリ
１０３  メインメモリ
１２２  メモリ管理スレッド
１２３  管理要求ディスパッチテーブル
２０１  ＤＳＰ
２０２  ＤＳＰメモリ
４０１  格納部
４０２  判断部
４０３  割当部
４０４  上位メモリ管理部
４０５  メモリ管理部
４１１  更新部
４１２  読出部
４１３  選択部
４１４  確保部
４１５  通知部
４２１  メモリ使用テーブル
４２２  スレッド動作履歴テーブル
【図１】
2013021441.tif 000003
【図２】
2013021441.tif 000004
【図３】
2013021441.tif 000005
【図４】
2013021441.tif 000006
【図５】
2013021441.tif 000007
【図６】
2013021441.tif 000008
【図７】
2013021441.tif 000009
【図８】
2013021441.tif 000010
【図９】
2013021441.tif 000011
【図１０】
2013021441.tif 000012
【図１１】
2013021441.tif 000013
【図１２】
2013021441.tif 000014
【図１３】
2013021441.tif 000015
【図１４】
2013021441.tif 000016
【図１５】
2013021441.tif 000017
【図１６】
2013021441.tif 000018
【国際調査報告】
2013021441.tif 000019
2013021441.tif 000020