JP5121896B2 - マルチコアプロセッサシステムおよびマルチコアプロセッサ - Google Patents

マルチコアプロセッサシステムおよびマルチコアプロセッサ Download PDF

Info

Publication number
JP5121896B2
JP5121896B2 JP2010180156A JP2010180156A JP5121896B2 JP 5121896 B2 JP5121896 B2 JP 5121896B2 JP 2010180156 A JP2010180156 A JP 2010180156A JP 2010180156 A JP2010180156 A JP 2010180156A JP 5121896 B2 JP5121896 B2 JP 5121896B2
Authority
JP
Japan
Prior art keywords
memory
state
area
cache
management unit
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
JP2010180156A
Other languages
English (en)
Other versions
JP2012038236A (ja
Inventor
瑛 武田
剛 小高
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Toshiba Corp
Original Assignee
Toshiba Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Toshiba Corp filed Critical Toshiba Corp
Priority to JP2010180156A priority Critical patent/JP5121896B2/ja
Priority to US12/885,754 priority patent/US8380936B2/en
Publication of JP2012038236A publication Critical patent/JP2012038236A/ja
Application granted granted Critical
Publication of JP5121896B2 publication Critical patent/JP5121896B2/ja
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/0802Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
    • G06F12/0804Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches with main memory updating
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal management

Description

本発明の実施形態は、マルチコアプロセッサシステムおよびマルチコアプロセッサに関する。
従来、チップ面積および消費電力の増加を抑制するために、キャッシュの一貫性を維持する機能をハードウェア機構ではなくソフトウェアで実装する技術の開発が求められている。
坪井芳郎、太田裕、山下高廣著、"東芝の次世代SoC「Venezia」ホモジニアス・マルチコアを採用"、日経エレクトロニクス、日経BP社、2008年6月30日、第981号、p.111、113−114
非特許文献1には、メモリアクセスにプロトコルを定義してメモリに状態を与え、状態毎に決められたメモリのアクセスを許可してキャッシュの一貫性を維持する技術が開示されている。この技術は、キャッシュを利用したアクセスおよびキャッシュを利用しないアクセスの両方が可能なメモリ領域を持つシステムに適用される。
本発明は、キャッシュを利用するアクセスのみ許されるメモリ領域にかかるキャッシュの一貫性をソフトウェアで維持するマルチコアプロセッサシステムおよびマルチコアプロセッサを提供することを目的とする。
本願発明の一態様によれば、各々キャッシュを備える複数のプロセッサコアを備えるマルチコアプロセッサと、前記キャッシュを利用したアクセスが可能かつ前記キャッシュを利用しないアクセスが不可能に構成された第1メモリ領域と、を備えている。前記マルチコアプロセッサは、状態管理部と、キャッシュ/メモリ管理部をさらに備えている。前記状態管理部は、前記第1メモリ領域のうちの自マルチコアプロセッサに割り当てられている領域を、プロセッサコアに割り当てられていない第1の状態と、プロセッサコアのうちの1つに割り当てられ、読み出しおよび書き込みが実行される第2の状態と、1つ以上のプロセッサコアに割り当てられ、読み出しおよび書き込みが禁止されている第3の状態と、に分類し、前記夫々の状態間の遷移を実行する。前記キャッシュ/メモリ管理部は、前記状態管理部が前記第2の状態から前記第3の状態に遷移させる際、対応するキャッシュをライトバックする。
第1の実施の形態のマルチコアプロセッサシステムの構成を示すブロック図 キャッシュを利用したアクセスおよびキャッシュを利用しないアクセスの両方が可能なメモリの構成例を説明する図 第1の実施の形態のMAPを説明する図 第1の実施の形態のマルチコアプロセッサシステムの機能構成を説明する図 第1の実施の形態のメモリのメモリ構造を説明する図 メモリアロケート管理情報のデータ構造の一例を説明する図 MAP管理情報のデータ構造の一例を説明する図 状態遷移の一例を説明するフローチャート allocate_private_memoryが呼び出されたときの動作を説明するフローチャート free_private_memoryが呼び出されたときの動作を説明するフローチャート allocate_public_memoryが呼び出されたときの動作を説明するフローチャート free_public_memoryが呼び出されたときの動作を説明するフローチャート open_private_memoryが呼び出されたときの動作を説明するフローチャート close_private_memoryが呼び出されたときの動作を説明するフローチャート open_protected_memoryが呼び出されたときの動作を説明するフローチャート close_protected_memoryが呼び出されたときの動作を説明するフローチャート enter_memory_access_protocolが呼び出されたときの動作を説明するフローチャート leave_memory_access_protocolが呼び出されたときの動作を説明するフローチャート 第2の実施の形態のメモリのメモリ構造を説明する図 第2の実施の形態のMAPを説明する図 allocate_ext_private_memoryが呼び出されたときの動作を説明するフローチャート free_ext_private_memoryが呼び出されたときの動作を説明するフローチャート allocate_ext_public_memoryが呼び出されたときの動作を説明するフローチャート free_ext_public_memoryが呼び出されたときの動作を説明するフローチャート open_ext_private_memoryが呼び出されたときの動作を説明するフローチャート close_ext_private_memoryが呼び出されたときの動作を説明するフローチャート open_ext_protected_memoryが呼び出されたときの動作を説明するフローチャート close_ext_protected_memoryが呼び出されたときの動作を説明するフローチャート enter_ext_memory_access_protocolが呼び出されたときの動作を説明するフローチャート leave_ext_memory_access_protocolが呼び出されたときの動作を説明するフローチャート
以下に添付図面を参照して、本発明の実施の形態にかかるマルチコアプロセッサシステムおよびマルチコアプロセッサを詳細に説明する。なお、これらの実施の形態により本発明が限定されるものではない。
(第1の実施の形態)
図1は、本発明の第1の実施の形態のマルチコアプロセッサシステムの構成を示すブロック図である。
マルチコアプロセッサシステム1は、マルチコアプロセッサ2と、メモリ3とを備えている。マルチコアプロセッサ2およびメモリ3はバスを介して接続されている。なお、夫々の構成要素をバスではなくメッシュなど他のネットワークトポロジーによって夫々接続するように構成してもよい。
マルチコアプロセッサ2は、ユーザタスクを実行するためのコア(プロセッサコア)21を複数備え、夫々のコア21は個別にキャッシュ22を備えている。
メモリ3は、例えばRAM(Random Access Memory)により構成される。メモリ3には、マルチコアプロセッサ2のハードウェア・リソースの管理を行うカーネルプログラム31がロードされている。また、メモリ3には、マルチコアプロセッサ2がメインメモリとして使用できるカーネル管理領域32が確保されている。マルチコアプロセッサ2は、カーネルプログラム31を実行することによって、キャッシュ22の一貫性を保ちつつカーネル管理領域32内のメモリ領域を各コア21に割り当てる。
なお、以降の説明において、マルチコアプロセッサ2が主体となる動作は、マルチコアプロセッサ2(より正確にはコア21)がカーネルプログラム31またはユーザタスク(後述のユーザタスク27)を実行することによって実現される。カーネルプログラム31に基づく動作を、カーネルプログラム31を動作の主体として表現する場合がある。また、カーネルプログラム31をカーネル31と略して表現することもある。また、ユーザタスクに基づく動作を、ユーザタスクを動作の主体として表現する場合がある。
なお、カーネルプログラム31のロード元は、プログラムを予め格納したROM(Read Only Memory)などにより構成される不揮発性メモリ領域や外部記憶装置などであってよい。
図2は、複数コアからキャッシュを利用したアクセスおよびキャッシュを利用しないアクセスの両方が可能なメモリの構成例を説明する図である。例えば、0x00000000〜0xFFFFFFFFまでの4GBのアドレスがマップされたメモリのうち、0x00000000〜0x3FFFFFFFの領域がメインメモリ領域として使用される。各コアは、メインメモリ領域にキャッシュを利用したアクセスを行う場合、メインメモリ領域のアドレスをアクセス先とする。そして、該メインメモリ領域は、0xC0000000〜0xFFFFFFFFのシャドー領域にミラーされている。一方、各コアは、メインメモリ領域にキャッシュを利用しないアクセスを行う場合、シャドー領域のアドレスにアクセスする。このようなメモリを備えるシステムにおいては、非特許文献1に開示されるように、コア間で共有するデータはキャッシュを利用せずに物理メモリに直接アクセスし、各コアが占有するデータはキャッシュを利用してアクセスするといった方法でキャッシュの一貫性が維持される。
図2に示したメモリ構造は、メインメモリとして使用する領域と等しいサイズのシャドー領域を必要とするため、アドレス空間の圧迫を招いてしまう。また、キャッシュを利用しない物理メモリへのアクセスを実行するハードウェアを実装する必要があるため、チップの開発コストが増加してしまう。そこで、第1の実施の形態では、シャドー領域を持たないメモリ、すなわち、キャッシュを利用したアクセスのみ許可されるメモリについて、キャッシュの一貫性を維持できるように、次に説明するメモリアクセスプロトコル(Memory Access Protocol;MAP)を定義する。図3は、第1の実施の形態のMAPを説明する図である。
図3に示すように、メモリ領域に対して次の5つの状態が定義される。
(a)UNMANAGED状態
カーネル管理領域32の領域外となっている状態をUNMANAGED状態と定義する。カーネル31はこの状態のメモリ領域におけるキャッシュの一貫性を管理しない。
(b)INVALID状態(第1の状態)
カーネル31によるユーザタスク(ユーザタスクを実行しているコア21)への割り当てがなされておらず、これから割り当てることが可能な状態をINVALID状態と定義する。具体的には、メモリ割り当て前およびメモリ解放後の状態がこの状態に属する。どのユーザタスクからの書き込み/読み出しアクセスも許可されない。
(c)PRIVATE状態(第2の状態)
キャッシュ22を利用した読み出し/書き込みアクセスが実行される状態をPRIVATE状態と定義する。この状態に遷移させた1つのユーザタスクのみが読み出し/書き込みアクセスできる。
(d)PUBLIC状態(第3の状態)
全てのユーザタスクで共有化された状態であるが、どのユーザタスクからの読み出し/書き込みアクセスも許可されない状態をPUBLIC状態と定義する。ユーザタスクは、データを別のユーザタスクに送信する場合、該データ(が格納されているメモリ領域)をこの状態に遷移させ、受信側のユーザタスクは、この状態におかれたデータをPRIVATE状態か次に説明するPROTECTED状態に遷移させて読み出す。
(e)PROTECTED状態(第4の状態)
読み出しアクセスのみキャッシュ22を利用したアクセスが可能な状態をPROTECTED状態と定義する。この状態の領域には書き込みアクセスは一切出来ない。この状態に遷移させた1つ以上のユーザタスクのみがキャッシュ22を利用した読み出しアクセスを実行できる。
ここで、カーネル管理領域32が含むメモリ領域は、INVALID状態、PRIVATE状態、PUBLIC状態およびPROTECTED状態のうちの何れか1つの状態となっている。そして、INVALID状態とPUBLIC状態との間およびINVALID状態とPRIVATE状態との間は遷移可能となっている。PUBLIC状態は、INVALID状態のほかに、PRIVATE状態との間およびPROTECTED状態との間で遷移が可能となっている。カーネル管理領域32内では、INVALID状態、PRIVATE状態、PUBLIC状態およびPROTECTED状態の各状態の定義に基づくメモリアクセスおよび状態遷移の関係が守られることにより、キャッシュの一貫性が保たれる。
なお、キャッシュの一貫性を維持するための構成として、UNMANAGED状態およびPROTECTED状態は必須の構成要素ではない。しかしながら、PROTECTED状態を設けることによって、複数コア21からの同時読み出しが可能となる。また、カーネル31の管理外の領域をUNMANAGED状態とし、UNMANAGED状態とINVALID状態との間を遷移可能とすることによって、マルチコアプロセッサシステム1は、カーネル31の管理下に置かれるカーネル管理領域32のサイズを動的に変化させることができるようになっている。
図4は、本発明の第1の実施の形態のマルチコアプロセッサシステム1の機能構成を説明する図である。図示するように、マルチコアプロセッサ2は、カーネルプログラム31を実行することにより、状態遷移関数23と、メモリアロケート管理部24と、MAP管理部25と、キャッシュ/メモリ管理部26と、を生成する。また、マルチコアプロセッサ2は、ユーザタスク27を実行する。
状態遷移関数23は、上述のMAPに定義される各状態間の遷移を行うためのAPI(Application Programming Interface)である。状態遷移関数23は、次に示す10個の関数を含む。
(1)allocate_private_memory(size_t size)
allocate_private_memory関数は、INVALID状態のメモリ領域から引数“size”で指定されるサイズのPRIVATE状態のメモリ領域を確保するための関数である。
(2)free_private_memory(void *addr, size_t size)
free_private_memory関数は、先頭アドレス“addr”、サイズ“size”で指定されるPRIVATE状態のメモリ領域をINVALID状態に解放するための関数である。
(3)allocate_public_memory(size_t size)
allocate_public_memory関数は、INVALID状態のメモリ領域から引数“size”で指定されるサイズのPUBLIC状態のメモリ領域を確保するための関数である。
(4)free_public_memory(void *addr, size_t size)
free_public_memory関数は、先頭アドレス“addr”、サイズ“size”で指定されるPUBLIC状態のメモリ領域をINVALID状態に解放するための関数である。
(5)open_private_memory(void *addr, size_t size)
open_private_memory関数は、先頭アドレス“addr”、サイズ“size”で指定されるPUBLIC状態のメモリ領域をPRIVATE状態に遷移させるための関数である。
(6)close_private_memory(void *addr, size_t size)
close_private_memory関数は、先頭アドレス“addr”、サイズ“size”で指定されるPRIVATE状態のメモリ領域をPUBLIC状態に遷移させるための関数である。
(7)open_protected_memory(void *addr, size_t size)
open_protected_memory関数は、先頭アドレス“addr”、サイズ“size”で指定されるPUBLIC状態のメモリ領域をPROTECTED状態に遷移させるための関数である。
(8)close_protected_memory(void *addr, size_t size)
close_protected_memory関数は、先頭アドレス“addr”、サイズ“size”で指定されるPROTECTED状態のメモリ領域をPUBLIC状態に遷移させるための関数である。
(9)enter_memory_access_protocol(void *addr, size_t size)
enter_memory_access_protocol関数は、先頭アドレス“addr”、サイズ“size”で指定されるUNMANAGED状態のメモリ領域をINVALID状態に遷移させるための関数である。
(10)leave_memory_access_protocol(void *addr, size_t size)
leave_memory_access_protocol関数は、先頭アドレス“addr”、サイズ“size”で指定されるINVALID状態のメモリ領域をUNMANAGED状態に遷移させるための関数である。
なお、第1の実施の形態では、(1)allocate_private_memoryおよび(3)allocate_public_memoryを総称してallocate関数ということがある。また、(2)free_private_memoryおよび(4)free_public_memoryを総称してfree関数ということがある。また、(5)open_private_memory、(7)open_protected_memoryを総称してopen関数ということがある。また、(6)close_private_memory、(8)close_protected_memoryを総称してclose関数ということがある。
allocate関数、free関数、enter関数およびleave関数は、ユーザタスク27により呼び出され、enter関数(enter_memory_access_protocol)およびleave関数(leave_memory_access_protocol)はカーネル31自身により呼び出される。
メモリアロケート管理部24およびMAP管理部25は、協働して、カーネル管理領域32をMAPに定義される各状態に分類し、各状態間の遷移を実行する状態管理部として機能する。
メモリアロケート管理部24は、カーネル管理領域32の増減およびカーネル管理領域32内のメモリ領域のユーザタスク27に対する割り当て/解放を管理する。具体的には、メモリアロケート管理部24は、カーネル管理領域32内のメモリ領域に対して、ユーザタスク27に割り当てているか否かを示す2値のisAllocated変数を定義し、カーネル管理領域32内のメモリ領域のisAllocated変数の状態を示すメモリアロケート管理情報33を更新管理する。isAllocated変数は、主にカーネル管理領域32のうちのタスクに割り当てられていない領域を探索する用途で使用される。
図5は、第1の実施の形態のメモリ3のメモリ構造を説明する図である。シャドー領域を持たないメモリ領域(第1メモリ領域)にカーネル管理領域32が確保されている。カーネル管理領域32のうち、isAllocatedが“true”であるメモリ領域は既にユーザタスク27に割り当てられており、PRIVATE状態、PUBLIC状態およびPROTECTED状態のうちの何れか一つの状態が設定される。また、“false”である領域はタスクに割り当てられておらず、INVALID状態が設定される。カーネル管理領域32以外の領域はカーネル31の管理下になく、isAllocated変数が定義されていない。なお、ここでは一例として、isAllocated変数は、予め定められた単位サイズ毎に定義されるものとしている。
図6は、メモリアロケート管理情報33のデータ構造の一例を説明する図である。メモリアロケート管理情報33における“アドレス”欄が示す先頭アドレスと“サイズ”欄が示す領域のサイズとにより一塊のアドレスが連続したカーネル管理領域32が規定される。アドレスが連続した個々のカーネル管理領域32が複数存在する場合は、“アドレス”および“サイズ”が複数セット規定される。“ID”欄は、複数セット規定されている夫々の連続したカーネル管理領域32を区別するためのIDが記述される。“isAllocated”欄には、連続したカーネル管理領域32について、単位サイズ毎に定義されているisAllocated変数の値が記述される。ここでは、“ID0”のカーネル管理領域32のメモリ領域のisAllocated変数は、先頭から“false”、“true”、“false”・・・となっていることを示している。
メモリアロケート管理部24は、enter関数が呼び出されると、メモリアロケート管理情報33に、対応するエントリを追加し、leave関数が呼び出されると、メモリアロケート管理情報33から対応するエントリを削除する。また、allocate/free関数が呼び出されると、対応するエントリのisAllocated変数の値を操作する。
MAP管理部25は、カーネル管理領域32内のキャッシュ一貫性を維持するために、メモリ領域のMAPの状態を管理する。具体的には、MAP管理部25は、メモリ領域の状態を、INVALID状態、PUBLIC状態、PRIVATE状態およびPROTECTED状態の4つの状態に分類してMAP管理情報34に登録し、allocate/free関数およびopen/close関数の呼び出しに対応してMAP管理情報34を更新管理する。
図7は、MAP管理情報34のデータ構造の一例を説明する図である。MAP管理情報34は、ユーザタスク27のID(TASK ID)、状態(STATE)、アドレス、サイズからなるエントリをユーザタスク27毎に登録されたテーブル構造を備えている。
MAP管理部25は、enter関数が呼び出されると、MAP管理情報34に、対応するエントリを追加し、leave関数が呼び出されると、MAP管理情報34から対応するエントリを削除する。
なお、カーネル管理領域32以外の領域は暗黙のうちにUNMANAGED状態であるとし、メモリアロケート管理情報33およびMAP管理情報34の何れにおいても明示的に管理しないようにしている。
また、メモリアロケート管理情報33のデータ構造例としてテーブル構造のものを例に挙げて説明したが、メモリアロケート管理情報33のデータ構造はテーブル構造でなくてもよい。例えば、リスト形式の情報やビットマップ形式の情報であっても構わない。同様に、MAP管理情報34のデータ構造もテーブル構造でなくても構わない。
キャッシュ/メモリ管理部26は、close_private_memoryが呼び出されたとき、キャッシュ22内の該当するキャッシュラインの内容を対応するメモリ領域にライトバックする。また、キャッシュ/メモリ管理部26は、close関数が呼び出されたとき、対応するキャッシュラインを無効化する。
次に、第1の実施の形態のマルチコアプロセッサシステム1の動作を説明する。まず、動作の概要として、状態遷移の一例を説明する。図8は、あるメモリ領域の状態遷移の一例を説明するフローチャートである。
メモリ領域は、カーネル31に管理されていないUNMANAGED状態となっている(S1)。すなわち、このメモリ領域はカーネル管理領域32に含まれていない。次に、カーネル31の管理下に置かれ、メモリ領域のMAPの状態はINVALID状態に遷移する(S2)。すなわち、このメモリ領域はカーネル管理領域32に追加される。次に、ユーザタスク27がallocate_public_memoryを呼び出すと、MAP管理部25の動作により、このメモリ領域の状態はPUBLIC状態に遷移し、前記関数を呼び出したユーザタスク27に割り当てられる(S3)。その後、ユーザタスク27がopen_private_memoryを呼び出すと、このメモリ領域はPRIVATE状態に遷移し、ユーザタスク27はこのメモリ領域に対してキャッシュ22を利用した読み出し/書き込みアクセスを行う(S4)。この間、他のユーザタスク27からのアクセスは許可されないため、アクセスは適切に行われる。そして、ユーザタスク27がclose_private_memoryを呼び出すと、このメモリ領域はPUBLIC状態に戻される(S5)。この時、キャッシュ/メモリ管理部26によって、対応するキャッシュラインは適切にメモリ領域に書き戻される。
その後、別のユーザタスク27がこのメモリ領域を指定してopen_protected_memoryを呼び出すと、MAP管理部25により、このメモリ領域はPROTECTED状態に遷移し、open_protected_memoryを呼び出したユーザタスク27はこのメモリ領域に対してキャッシュ22を利用した読み出しアクセスを行う(S6)。なお、open_protected_memoryの呼び出しは、複数のユーザタスク27が同時に実行することができる。つまり、PUBLIC状態のメモリ領域は、MAP管理情報34上には1つのユーザタスク27に割り当てられているものとして登録されるが、実質的に1つ以上のユーザタスク27に割り当てられていることに等しい。複数のユーザタスク27から同時に呼び出された場合、当該メモリ領域は、呼び出した複数のユーザタスク27に割り当てられる。
読み出しアクセスを終了したユーザタスク27がclose_protected_memoryを呼び出すと、このメモリ領域はPUBLIC状態に戻される(S7)。最後に、何れかのユーザタスク27がfree_public_memoryを呼び出すと、このメモリ領域はINVALID状態に遷移する(S8)。そして、leave_memory_access_protocolを呼び出し、カーネルの管理下から除外されてUNMANAGED状態となり(S9)、一連の動作が終了となる。
このように、第1の実施の形態によれば、キャッシュ22を利用するアクセスのみ許可されるメモリ3を用いて、ソフトウェア機構によってキャッシュ22の一貫性を維持しつつ、複数コア21間でデータを共有することができる。
次に、状態遷移関数23が含む10個の関数が呼び出されたときのマルチコアプロセッサシステム1の動作を個別に説明する。
図9は、allocate_private_memoryが呼び出されたときの動作を説明するフローチャートである。ユーザタスク27がallocate_private_memoryを呼び出すと、メモリアロケート管理部24は、isAllocated変数が“false”となっているメモリ領域(すなわちINVALID状態のメモリ領域)のうちから引数“size”で指定されたサイズの連続したメモリ領域を“true”とし、ユーザタスク27に割り当てる(S11)。連続したINVALID状態の領域がなかったなどにより、指定されたサイズのメモリ領域の割り当てが正常に行われなかった場合(S12、No)、メモリアロケート管理部24は、NULLを返し(S13)、動作が終了となる。
指定されたサイズのメモリ領域の割り当てが正常に行われた場合(S12、Yes)、MAP管理部25は、割り当て先のユーザタスク27のタスクIDと、状態“PRIVATE”と、割り当てられたメモリ領域の先頭アドレスおよびサイズと、からなるエントリをMAP管理情報34に登録することによって、割り当てられたメモリ領域をINVALID状態からPRIVATE状態に遷移させる(S14)。そして、メモリアロケート管理部24は、割り当てたメモリ領域の先頭アドレスを返し(S15)、動作が終了となる。
図10は、free_private_memoryが呼び出されたときの動作を説明するフローチャートである。ユーザタスク27がfree_private_memoryを呼び出すと、メモリアロケート管理部24は、引数“addr”が示すアドレスを先頭アドレスとし、引数“size”が示すサイズを備えるメモリ領域のisAllocated変数を“true”から“false”に変更することによって、このメモリ領域を解放する(S21)。また、MAP管理部25は、MAP管理情報34から対応するエントリを削除することによって、指定されたメモリ領域をPRIVATE状態からINVALID状態に遷移させ(S22)、動作が終了となる。
図11は、allocate_public_memoryが呼び出されたときの動作を説明するフローチャートである。ユーザタスク27がallocate_public_memoryを呼び出すと、メモリアロケート管理部24は、INVALID状態のメモリ領域のうちから引数“size”で指定されたサイズの連続したメモリ領域を“true”とし、ユーザタスク27に割り当てる(S31)。指定されたサイズのメモリ領域の割り当てが正常に行われなかった場合(S32、No)、メモリアロケート管理部24はNULLを返し(S33)、動作が終了となる。
指定されたサイズのメモリ領域の割り当てが正常に行われた場合(S32、Yes)、MAP管理部25は、割り当て先のユーザタスク27のタスクIDと、状態“PUBLIC”と、割り当てられたメモリ領域の先頭アドレスおよびサイズと、からなるエントリをMAP管理情報34に登録することによって、割り当てられたメモリ領域をINVALID状態からPUBLIC状態に遷移させる(S34)。そして、メモリアロケート管理部24は、割り当てたメモリ領域の先頭アドレスを返し(S35)、動作が終了となる。
図12は、free_public_memoryが呼び出されたときの動作を説明するフローチャートである。ユーザタスク27がfree_public_memoryを呼び出すと、メモリアロケート管理部24は、引数“addr”と引数“size”とで指定されるメモリ領域のisAllocated変数を“true”から“false”に変更することによって、この指定されたメモリ領域を解放する(S41)。また、MAP管理部25は、MAP管理情報34から対応するエントリを削除することによって、指定されたメモリ領域をPUBLIC状態からINVALID状態に遷移させ(S42)、動作が終了となる。
図13は、open_private_memoryが呼び出されたときの動作を説明するフローチャートである。ユーザタスク27がopen_private_memoryを呼び出すと、MAP管理部25は、引数“addr”と引数“size”とにより指定されるMAP管理情報34に登録されているメモリ領域の状態をPUBLIC状態からPRIVATE状態に変更する(S51)。そして、MAP管理部25は、状態を変更したメモリ領域の先頭アドレスを返し(S52)、動作が終了となる。
図14は、close_private_memoryが呼び出されたときの動作を説明するフローチャートである。ユーザタスク27がclose_private_memoryを呼び出すと、キャッシュ/メモリ管理部26は、引数“addr”と引数“size”とで指定されたメモリ領域が乗っているキャッシュラインを無効化するとともに、ライトバックを行う(S61)。そして、MAP管理部25は、MAP管理情報34に登録されている当該メモリ領域の状態をPRIVATE状態からPUBLIC状態に変更する(S62)。そして、MAP管理部25は、状態を変更したメモリ領域の先頭アドレスを返し(S63)、動作が終了となる。
図15は、open_protected_memoryが呼び出されたときの動作を説明するフローチャートである。ユーザタスク27がopen_protected_memoryを呼び出すと、MAP管理部25は、引数“addr”と引数“size”とにより指定されるMAP管理情報34に登録されているメモリ領域の状態をPUBLIC状態からPROTECTED状態に変更する(S71)。そして、MAP管理部25は、状態を変更したメモリ領域の先頭アドレスを返し(S72)、動作が終了となる。
図16は、close_protected_memoryが呼び出されたときの動作を説明するフローチャートである。ユーザタスク27がclose_protected_memoryを呼び出すと、キャッシュ/メモリ管理部26は、引数“addr”と引数“size”とで指定されたメモリ領域が乗っている全てのコアのキャッシュラインを無効化する(S81)。そして、MAP管理部25は、MAP管理情報34に登録されている当該メモリ領域の状態をPROTECTED状態からPUBLIC状態に変更する(S82)。そして、MAP管理部25は、状態を変更したメモリ領域の先頭アドレスを返し(S83)、動作が終了となる。
図17は、enter_memory_access_protocolが呼び出されたときの動作を説明するフローチャートである。カーネル31がenter_memory_access_protocolを実行すると、メモリアロケート管理部24は、引数“addr”と引数“size”とにより指定されたメモリ領域のエントリを作成してメモリアロケート管理情報33に登録することによって、当該メモリ領域をUNMANAGED状態からINVALID状態に遷移させ(S91)、動作が終了する。
図18は、leave_memory_access_protocolが呼び出されたときの動作を説明するフローチャートである。カーネル31がleave_memory_access_protocolを実行すると、メモリアロケート管理部24は、引数“addr”と引数“size”とにより指定されたメモリ領域のエントリをメモリアロケート管理情報33から削除することによって、当該メモリ領域をINVALID状態からUNMANAGED状態に遷移させ(S101)、動作が終了する。
なお、カーネル31は、例えば、INVALID状態のメモリ領域が少なくなってくると、enter_memory_access_protocolを呼び出し、INVALID状態のメモリ領域が過剰となると、leave_memory_access_protocolを呼び出すようにするとよい。また、カーネル31は、S11において指定されたサイズのINVALID状態のメモリ領域を割り当てることができなかったとき(すなわちS12、Noのとき)、enter_memory_access_protocolを呼び出して同サイズのINVALID状態のメモリ領域を確保するようにしてもよい。
以上述べたように、第1の実施の形態によれば、メモリアロケート管理部24およびMAP管理部25は協働して、カーネル管理領域32を、コア21に割り当てられていないINVALID状態(第1の状態)と、コア21のうちの1つに割り当てられ、キャッシュ22を利用した読み出しおよび書き込みが実行されるPRIVATE状態(第2の状態)と、1つ以上のプロセッサコアに割り当てられ、読み出しおよび書き込みが禁止されているPUBLIC状態(第3の状態)と、に分類し、各状態間の遷移を実行する。また、キャッシュ/メモリ管理部26は、MAP管理部25がPRIVATE状態からPUBLIC状態に遷移させる際、対応するキャッシュラインをライトバックするように構成した。よって、キャッシュ22を利用するアクセスのみ許されるメモリ領域にかかるキャッシュの一貫性をソフトウェアで維持することができる。つまり、シャドー領域を持たないメモリを備えるマルチコアプロセッサシステムであっても、ソフトウェアによってキャッシュの一貫性を維持することができる。なお、PUBLIC状態と、PRIVATE状態またはPROTECTED状態との間の遷移は、どちらか一方が可能であればよい。
また、MAP管理部25は、1つ以上のコア21に割り当てられ、読み出しアクセスが実行されるPROTECTED状態(第4の状態)とPUBLIC状態との間の遷移を実行するように構成したので、PROTECTED状態に遷移させることによって複数コア21からの同時読み出しを実行することが可能となる。
また、メモリアロケート管理部24は、自マルチコアプロセッサ2に割り当てられていないUNMANAGED領域からPUBLIC状態のメモリ領域を確保/解放するように構成したので、カーネル管理領域32を動的に増減させることができる。
なお、以上の説明においては、マルチコアプロセッサ2がカーネルプログラム31を実行することにより、状態遷移関数23と、メモリアロケート管理部24と、MAP管理部25と、キャッシュ/メモリ管理部26と、を生成するとして説明したが、これらのうちのいくつかをカーネルプログラム31以外のプログラムにより実現するようにしてもよい。例えば、状態遷移関数23とMAP管理部25とをミドルウェアによって実現するようにしても構わない。
(第2の実施の形態)
図2に示すメモリを採用した場合、カーネル管理領域として利用できるメモリ領域がシャドー領域を持つメモリ領域内に限定されてしまう。そこで、第2の実施の形態では、シャドー領域を持つメモリ領域(第2メモリ領域)と、シャドー領域を持たないメモリ領域(第1メモリ領域)とにカーネル管理領域を確保することができるようにした。
第2の実施の形態のマルチコアプロセッサシステムの構成は、第1の実施の形態と同様であるが、メモリにロードされるカーネルプログラムが異なる。なお、同等の構成要素については、詳細な説明を省略する。
図19は、第2の実施の形態のメモリのメモリ構造を説明する図である。第2の実施の形態のメモリは、シャドー領域を持つメモリ領域(第2メモリ領域)と、シャドー領域を持たないメモリ領域(第1メモリ領域)とが確保されており、双方のメモリ領域がカーネル管理領域32として使用できるように構成されている。第2の実施の形態では、上記のメモリ領域のうちのどちらにカーネル管理領域32が確保されてもキャッシュ22の一貫性を維持することができるように、MAPの構成が工夫されている。
図20は、第2の実施の形態のMAPを説明する図である。第2の実施の形態のMAPは、シャドー領域を持たないメモリ領域にアクセスするための第1の実施の形態のMAPに、シャドー領域を持つメモリ領域にアクセスするための以下の4つの状態が追加されて構成されている。
(f)EXT_INVALID状態(第5の状態)
カーネル51によるユーザタスクへの割り当てがなされておらず、これから割り当てることが可能な状態をEXT_INVALID状態と定義する。
(g)EXT_PRIVATE状態(第6の状態)
キャッシュ22を利用した読み出し/書き込みアクセスが実行される状態をEXT_PRIVATE状態と定義する。この状態に遷移させた1つのユーザタスクのみが読み出し/書き込みアクセスできる。
(h)EXT_PUBLIC状態(第7の状態)
キャッシュを利用しない読み出し/書き込みアクセスが実行される状態をEXT_PUBLIC状態と定義する。ユーザタスクは、この状態に遷移させることによって別のユーザタスクとデータを共有することができる。(c)PUBLIC状態と異なる点は、キャッシュを利用しない読み出し/書き込みアクセスを実行できることである。
(i)EXT_PROTECTED状態
キャッシュ22を利用した読み出しアクセスが実行される状態をEXT_PROTECTED状態と定義する。この状態の領域には書き込みアクセスは一切できない。この状態に遷移させた1つ以上のユーザタスクのみが、キャッシュ22を利用した読み出しアクセスを許可される。
第2の実施の形態のマルチコアプロセッサシステムの機能構成は、図4に示した第1の実施形態のマルチプロセッサシステムと同様である。マルチコアプロセッサ2は、カーネルプログラム31を実行することにより、状態遷移関数23と、メモリアロケート管理部24と、MAP管理部25と、キャッシュ/メモリ管理部26と、を生成する。また、マルチコアプロセッサ2は、ユーザタスク27を実行する。
状態遷移関数23は、第1の実施の形態にて説明した関数(1)〜(10)に加え、以下の10個の関数を含む。
(11)allocate_ext_private_memory(size_t size)
allocate_ext_private_memory関数は、EXT_INVALID状態のメモリ領域から引数“size”で指定されるサイズのEXT_PRIVATE状態のメモリ領域を確保するための関数である。
(12)free_ext_private_memory(void *addr, size_t size)
free_ext_private_memory関数は、先頭アドレス“addr”、サイズ“size”で指定されるEXT_PRIVATE状態のメモリ領域をEXT_INVALID状態に解放するための関数である。
(13)allocate_ext_public_memory(size_t size)
allocate_ext_public_memory関数は、EXT_INVALID状態のメモリ領域から引数“size”で指定されるサイズのEXT_PUBLIC状態のメモリ領域を確保するための関数である。
(14)free_ext_public_memory(void *addr, size_t size)
free_ext_public_memory関数は、先頭アドレス“addr”、サイズ“size”で指定されるEXT_PUBLIC状態のメモリ領域をEXT_INVALID状態に解放するための関数である。引数“addr”はシャドー領域内のアドレスで指定される。
(15)open_ext_private_memory(void *addr, size_t size)
open_ext_private_memory関数は、先頭アドレス“addr”、サイズ“size”で指定されるEXT_PUBLIC状態のメモリ領域をEXT_PRIVATE状態に遷移させるための関数である。引数“addr”はシャドー領域内のアドレスで指定される。
(16)close_ext_private_memory(void *addr, size_t size)
close_ext_private_memory関数は、先頭アドレス“addr”、サイズ“size”で指定されるEXT_PRIVATE状態のメモリ領域をEXT_PUBLIC状態に遷移させるための関数である。
(17)open_ext_protected_memory(void *addr, size_t size)
open_ext_protected_memory関数は、先頭アドレス“addr”、サイズ“size”で指定されるEXT_PUBLIC状態のメモリ領域をEXT_PROTECTED状態に遷移させるための関数である。引数“addr”はシャドー領域内のアドレスで指定される。
(18)close_ext_protected_memory(void *addr, size_t size)
close_ext_protected_memory関数は、先頭アドレス“addr”、サイズ“size”で指定されるEXT_PROTECTED状態のメモリ領域をEXT_PUBLIC状態に遷移させるための関数である。
(19)enter_ext_memory_access_protocol(void *addr, size_t size)
enter_ext_memory_access_protocol関数は、先頭アドレス“addr”、サイズ“size”で指定されるUNMANAGED状態のメモリ領域をEXT_INVALID状態に遷移させるための関数である。
(20)leave_ext_memory_access_protocol(void *addr, size_t size)
leave_ext_memory_access_protocol関数は、先頭アドレス“addr”、サイズ“size”で指定されるEXT_INVALID状態のメモリ領域をUNMANAGED状態に遷移させるための関数である。
なお、第2の実施の形態では、(1)allocate_private_memory、(3)allocate_public_memory、(11)allocate_ext_private_memory、(13)allocate_ext_public_memoryを総称してallocate関数ということがある。また、(2)free_private_memory、(4)free_public_memory、(12)free_ext_private_memory、(14)free_ext_public_memoryを総称してfree関数ということがある。また、(5)open_private_memory、(7)open_protected_memory、(15)open_ext_private_memory、(17)open_ext_protected_memoryを総称してopen関数ということがある。また、(6)close_private_memory、(8)close_protected_memory、(16)close_ext_private_memory、(18)close_ext_protected_memoryを総称してclose関数ということがある。
allocate関数、free関数、enter関数およびleave関数は、ユーザタスク27により呼び出され、enter関数(enter_memory_access_protocol、enter_ext_memory_access_protocol)およびleave関数(leave_memory_access_protocol、leave_ext_memory_access_protocol)はカーネル51が自身で呼び出す。
メモリアロケート管理部24は、第1の実施の形態と同様のデータ構造のメモリアロケート管理情報33を更新管理する。なお、メモリアロケート管理部24は、メモリ3のうちのシャドー領域を持つメモリ領域の範囲を認識しており、enter_memory_access_protocolが呼び出されたとき、UNMANAGED状態でかつシャドー領域を持たないメモリ領域をINVALID状態に遷移させる。一方、enter_ext_memory_access_protocolが呼び出されたとき、UNMANAGED状態でかつシャドー領域を持つメモリ領域をEXT_INVALID状態に遷移させる。
MAP管理部25は、図20に示したMAPに基づいてカーネル管理領域32内のメモリ領域の状態を管理する。具体的には、MAP管理部25は、ユーザタスク27に割り当てられたメモリ領域、すなわちisAllocated変数が“true”となっている領域毎に、メモリ領域の状態を、PUBLIC状態、PRIVATE状態、PROTECTED状態、EXT_PUBLIC状態、EXT_PRIVATE状態およびEXT_PROTECTED状態の6つの状態に分類してMAP管理情報34に登録する。また、allocate/free関数およびopen/close関数の呼び出しに対応してMAP管理情報34を更新管理する。MAP管理情報34のデータ構造は図7に示したMAP管理情報34のデータ構造と同じである。
なお、メモリアロケート管理情報33およびMAP管理情報34の何れにおいてもINVALID状態とEXT_INVALID状態とを区別して管理していないが、これらの二つの状態を何れか一方の情報によって区別して管理するようにしてもよい。例えば、メモリアロケート管理情報33の各エントリにシャドー領域の有無を示す情報ビットを備えさせ、isAllocated変数が“false”となっているメモリ領域がEXT_INVALID状態であるかINVALID状態であるかを識別できるようにしてもよい。また、MAP管理情報34においてINVALID状態またはEXT_INVALID状態となっているメモリ領域を管理するようにしてもよい。
キャッシュ/メモリ管理部26は、close_private_memory、close_ext_private_memoryが呼び出されたとき、キャッシュ22内の該当するキャッシュラインの内容を対応するメモリ領域にライトバックする。また、キャッシュ/メモリ管理部26は、close関数が呼び出されたとき、対応するキャッシュラインを無効化する。
さらに、キャッシュ/メモリ管理部26は、allocate_public_memory、close_private_memory、close_protected_memoryが呼び出されたとき、引数“addr”で指定されるメモリ領域の(先頭)アドレスを対応するシャドー領域のアドレスに変換する。また、キャッシュ/メモリ管理部26は、free_public_memory、open_private_memory、open_protected_memory、が呼び出されたとき、引数“addr”で指定されるシャドー領域のアドレスを、対応するメモリ領域のアドレスに変換する。
次に、第2の実施の形態のマルチコアプロセッサシステム1の動作を説明する。図21は、allocate_ext_private_memoryが呼び出されたときの動作を説明するフローチャートである。ユーザタスク27がallocate_ext_private_memoryを呼び出すと、メモリアロケート管理部24は、isAllocated変数が“false”となっているシャドー領域を持つメモリ領域(すなわちEXT_INVALID状態のメモリ領域)のうちから引数“size”で指定されたサイズの連続したメモリ領域を“true”とし、ユーザタスク27に割り当てる(S111)。連続したEXT_INVALID状態のメモリ領域がなかったなどにより、指定されたサイズのメモリ領域の割り当てが正常に行われなかった場合(S112、No)、メモリアロケート管理部24は、NULLを返し(S113)、動作が終了となる。
指定されたサイズのメモリ領域の割り当てが正常に行われた場合(S112、Yes)、MAP管理部25は、割り当て先のユーザタスク27のタスクIDと、状態“EXT_PRIVATE”と、割り当てられたメモリ領域の先頭アドレスおよびサイズと、からなるエントリをMAP管理情報34に登録することによって、割り当てられたメモリ領域をEXT_INVALID状態からEXT_PRIVATE状態に遷移させる(S114)。そして、メモリアロケート管理部24は、割り当てたメモリ領域の先頭アドレスを返し(S115)、動作が終了となる。
図22は、free_ext_private_memoryが呼び出されたときの動作を説明するフローチャートである。図示するように、ユーザタスク27がfree_ext_private_memoryを呼び出すと、メモリアロケート管理部24は、引数“addr”が示すアドレスを先頭アドレスとし、引数“size”が示すサイズを備えるメモリ領域のisAllocated変数を“true”から“false”に変更することによって、このメモリ領域を解放する(S121)。また、MAP管理部25は、MAP管理情報34から対応するエントリを削除することによって、指定されたメモリ領域をEXT_PRIVATE状態からEXT_INVALID状態に遷移させ(S122)、動作が終了となる。
図23は、allocate_ext_public_memoryが呼び出されたときの動作を説明するフローチャートである。ユーザタスク27がallocate_ext_public_memoryを呼び出すと、メモリアロケート管理部24は、EXT_INVALID状態のメモリ領域のうちから引数“size”で指定されたサイズの連続したメモリ領域を“true”とし、ユーザタスク27に割り当てる(S131)。指定されたサイズのメモリ領域の割り当てが正常に行われなかった場合(S132、No)、メモリアロケート管理部24は、NULLを返し(S133)、動作が終了となる。指定されたサイズのメモリ領域の割り当てが正常に行われた場合(S132、Yes)、キャッシュ/メモリ管理部26は、指定されたメモリ領域の先頭アドレスをシャドー領域のアドレスに変換する(S134)。
続いて、MAP管理部25は、割り当て先のユーザタスク27のタスクIDと、状態“EXT_PUBLIC”と、割り当てられたメモリ領域の先頭アドレス(変換前の先頭アドレス)およびサイズと、からなるエントリをMAP管理情報34に登録することによって、割り当てられたメモリ領域をEXT_INVALID状態からEXT_PUBLIC状態に遷移させる(S135)。そして、メモリアロケート管理部24は、割り当てられたメモリ領域の変換後の先頭アドレスを返し(S136)、動作が終了となる。
図24は、free_ext_public_memoryが呼び出されたときの動作を説明するフローチャートである。ユーザタスク27がfree_ext_public_memoryを呼び出すと、キャッシュ/メモリ管理部26は、引数“addr”で指定されるシャドー領域のアドレスを、シャドー領域を持つメモリ領域のアドレスに変換する(S141)。そして、メモリアロケート管理部24は、変換後のアドレスと引数“size”とで指定されるメモリ領域のisAllocated変数を“true”から“false”に変更することによって、この指定されたメモリ領域を解放する(S142)。また、MAP管理部25は、MAP管理情報34から対応するエントリを削除することによって、指定されたメモリ領域をEXT_PUBLIC状態からEXT_INVALID状態に遷移させ(S143)、動作が終了となる。
図25は、open_ext_private_memoryが呼び出されたときの動作を説明するフローチャートである。ユーザタスク27がopen_ext_private_memoryを呼び出すと、キャッシュ/メモリ管理部26は、引数“addr”で指定されるシャドー領域のアドレスを、シャドー領域を持つメモリ領域のアドレスに変換する(S151)。そして、MAP管理部25は、MAP管理情報34に登録されている、変換されたアドレスと引数“size”で指定されるメモリ領域の状態をEXT_PUBLIC状態からEXT_PRIVATE状態に変更する(S152)。そして、MAP管理部25は、変換後のメモリ領域の先頭アドレスを返し(S153)、動作が終了となる。
図26は、close_ext_private_memoryが呼び出されたときの動作を説明するフローチャートである。ユーザタスク27がclose_ext_private_memoryを呼び出すと、キャッシュ/メモリ管理部26は、引数“addr”と引数“size”とで指定されたメモリ領域が乗っているキャッシュラインを無効化するとともに、ライトバックを行う(S161)。そして、キャッシュ/メモリ管理部26は、指定されたメモリ領域のアドレスをシャドー領域のアドレスに変換する(S162)。そして、MAP管理部25は、MAP管理情報34に登録されている当該メモリ領域の状態をEXT_PRIVATE状態からEXT_PUBLIC状態に変更する(S163)。そして、MAP管理部25は、変換後の先頭アドレスを返し(S164)、動作が終了となる。
図27は、open_ext_protected_memoryが呼び出されたときの動作を説明するフローチャートである。ユーザタスク27がopen_ext_protected_memoryを呼び出すと、キャッシュ/メモリ管理部26は、引数“addr”により指定されるシャドー領域のアドレスをシャドー領域を持たないメモリ領域のアドレスに変換する(S171)。そして、MAP管理部25は、変換したアドレスと引数“size”とにより指定されるMAP管理情報34に登録されているメモリ領域の状態をEXT_PUBLIC状態からEXT_PROTECTED状態に変更する(S172)。そして、MAP管理部25は、変換後のアドレスを返し(S173)、動作が終了となる。
図28は、close_ext_protected_memoryが呼び出されたときの動作を説明するフローチャートである。ユーザタスク27がclose_ext_protected_memoryを呼び出すと、キャッシュ/メモリ管理部26は、引数“addr”と引数“size”とで指定されたメモリ領域が乗っている全てのコアのキャッシュラインを無効化する(S181)。そして、キャッシュ/メモリ管理部26は、指定されたメモリ領域のアドレスをシャドー領域のアドレスに変換し(S182)、MAP管理情報34に登録されている当該メモリ領域の状態をEXT_PROTECTED状態からEXT_PUBLIC状態に変更する(S183)。そして、MAP管理部25は、変換後のアドレスを返し(S184)、動作が終了となる。
図29は、enter_ext_memory_access_protocolが呼び出されたときの動作を説明するフローチャートである。カーネル51がenter_ext_memory_access_protocolを実行すると、メモリアロケート管理部24は、引数“addr”と引数“size”とにより指定されたメモリ領域のエントリを作成してメモリアロケート管理情報33に登録することによって、当該メモリ領域をUNMANAGED状態からEXT_INVALID状態に遷移させ(S191)、動作が終了となる。
図30は、leave_ext_memory_access_protocolが呼び出されたときの動作を説明するフローチャートである。カーネル31がleave_ext_memory_access_protocolを実行すると、メモリアロケート管理部24は、引数“addr”と引数“size”とにより指定されたメモリ領域のエントリをメモリアロケート管理情報33から削除することによって、当該メモリ領域をEXT_INVALID状態からUNMANAGED状態に遷移させ(S201)、動作が終了となる。
以上述べたように、第2の実施の形態によれば、メモリアロケート管理部24およびMAP管理部25は協働して、シャドー領域を持つメモリ領域に確保されたカーネル管理領域32を、コア21に割り当てられていないEXT_INVALID状態(第5の状態)と、コア21のうちの1つに割り当てられ、キャッシュ22を利用した読み出しおよび書き込みが実行されるEXT_PRIVATE状態(第6の状態)と、1つ以上のコア21に割り当てられ、キャッシュ22を利用しない読み出しおよび書き込みが実行されるEXT_PUBLIC状態(第7の状態)と、に分類し、EXT_INVALID状態、EXT_PRIVATE状態およびEXT_PUBLIC状態の間の遷移を実行し、キャッシュ/メモリ管理部26は、MAP管理部25がEXT_PRIVATE状態からEXT_PUBLIC状態に遷移させる際、対応するキャッシュラインをライトバックするように構成したので、シャドー領域を持つメモリ領域とシャドー領域を持たないメモリ領域の両方にカーネル管理領域32を置くことができるので、シャドー領域を持つメモリ領域のみメインメモリとして使用するシステムやシャドー領域を持たないメモリ領域のみメインメモリとして使用するシステムに比べてメインメモリとして使用できるメモリ領域を大きくすることができる。
また、メモリアロケート管理部24は、自マルチコアプロセッサに割り当てられていないUNMANAGED領域からEXT_INVALID状態のメモリ領域を確保/解放するように構成したので、シャドー領域を持つメモリ領域に確保したカーネル管理領域32を動的に増減することができるようになる。
本発明のいくつかの実施形態を説明したが、これらの実施形態は、例として提示したものであり、発明の範囲を限定することは意図していない。これら新規な実施形態は、その他の様々な形態で実施されることが可能であり、発明の要旨を逸脱しない範囲で、種々の省略、置き換え、変更を行うことができる。これら実施形態やその変形は、発明の範囲や要旨に含まれるとともに、特許請求の範囲に記載された発明との均等の範囲に含まれる。
1 マルチコアプロセッサシステム、2 マルチコアプロセッサ、3 メモリ、21 コア、22 キャッシュ、23 状態遷移関数、24 メモリアロケート管理部、25 MAP管理部、26 キャッシュ/メモリ管理部、27 ユーザタスク、31 カーネルプログラム、32 カーネル管理領域、33 メモリアロケート管理情報、34 MAP管理情報。

Claims (5)

  1. 各々キャッシュを備える複数のプロセッサコアから成るマルチコアプロセッサと、
    前記キャッシュを利用したアクセスが可能かつ前記キャッシュを利用しないアクセスが不可能に構成された第1メモリ領域を有し、前記複数のプロセッサコアに共有され、前記マルチコアプロセッサとバスを介して接続された共有メモリと、
    を備え、
    前記マルチコアプロセッサは、
    前記第1メモリ領域のうちの自マルチコアプロセッサに割り当てられている領域を、プロセッサコアに割り当てられていない第1の状態と、プロセッサコアのうちの1つに割り当てられ、読み出しおよび書き込みが実行される第2の状態と、1つ以上のプロセッサコアに割り当てられ、読み出しおよび書き込みが禁止されている第3の状態と、に分類し、前記第1乃至第3の状態間の遷移を実行する状態管理部と、
    前記状態管理部が前記第2の状態から前記第3の状態に遷移させる際、対応するキャッシュをライトバックするキャッシュ/メモリ管理部と、
    を備えることを特徴とするマルチコアプロセッサシステム。
  2. 前記共有メモリは、前記キャッシュを利用したアクセスおよび前記キャッシュを利用しないアクセスが可能に構成されている第2メモリ領域をさらに備え、
    前記状態管理部は、前記第2メモリ領域のうちの自マルチコアプロセッサに割り当てられている領域を、プロセッサコアに割り当てられていない第5の状態と、プロセッサコアのうちの1つに割り当てられ、前記キャッシュを利用した読み出しおよび書き込みが実行される第6の状態と、1つ以上のプロセッサコアに割り当てられ、前記キャッシュを利用しない読み出しおよび書き込みが実行される第7の状態と、に分類し、前記第5乃至第7の状態間の遷移を実行し、
    前記キャッシュ/メモリ管理部は、前記状態管理部が前記第6の状態から前記第7の状態に遷移させる際、対応するキャッシュをライトバックする、
    ことを特徴とする請求項1に記載のマルチコアプロセッサシステム。
  3. 前記共有メモリは、前記プロセッサコアが前記キャッシュを利用しないアクセスを行うための前記第2メモリ領域のシャドー領域を備え、
    前記キャッシュ/メモリ管理部は、前記状態管理部が前記第7の状態に遷移させる際および前記状態管理部が前記第7の状態から別の状態に遷移させる際、前記シャドー領域と前記第2メモリ領域との間のアクセス先アドレスの変換を行う、
    ことを特徴とする請求項2に記載のマルチコアプロセッサシステム。
  4. 各々キャッシュを備える複数のプロセッサコアを備え、前記キャッシュを利用したアクセスが可能かつ前記キャッシュを利用しないアクセスが不可能に構成された第1メモリ領域が割り当てられるマルチコアプロセッサであって、
    前記第1メモリ領域のうちの自マルチコアプロセッサに割り当てられた領域を、プロセッサコアに割り当てられていない第1の状態と、プロセッサコアのうちの1つに割り当てられ、読み出しおよび書き込みが実行される第2の状態と、1つ以上のプロセッサコアに割り当てられ、読み出しおよび書き込みが禁止されている第3の状態と、に分類し、前記第1乃至第3の状態間の遷移を実行する状態管理部と、
    前記状態管理部が前記第2の状態から前記第3の状態に遷移させる際、対応するキャッシュをライトバックするキャッシュ/メモリ管理部と、
    を備えることを特徴とするマルチコアプロセッサ。
  5. 前記キャッシュを利用したアクセスおよび前記キャッシュを利用しないアクセスが可能に構成された第2メモリ領域が割り当てられ、
    前記状態管理部は、前記第2メモリ領域のうちの自マルチコアプロセッサに割り当てられた領域を、プロセッサコアに割り当てられていない第5の状態と、プロセッサコアのうちの1つに割り当てられ、前記キャッシュを利用した読み出しおよび書き込みが実行される第6の状態と、1つ以上のプロセッサコアに割り当てられ、前記キャッシュを利用しない読み出しおよび書き込みが実行される第7の状態と、に分類し、前記第5乃至第7の状態間の遷移を実行し、
    前記キャッシュ/メモリ管理部は、前記状態管理部が前記第6の状態から前記第7の状態に遷移させる際、対応するキャッシュをライトバックする、
    ことを特徴とする請求項4に記載のマルチコアプロセッサ。
JP2010180156A 2010-08-11 2010-08-11 マルチコアプロセッサシステムおよびマルチコアプロセッサ Expired - Fee Related JP5121896B2 (ja)

Priority Applications (2)

Application Number Priority Date Filing Date Title
JP2010180156A JP5121896B2 (ja) 2010-08-11 2010-08-11 マルチコアプロセッサシステムおよびマルチコアプロセッサ
US12/885,754 US8380936B2 (en) 2010-08-11 2010-09-20 Multi-core processor system and multi-core processor

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
JP2010180156A JP5121896B2 (ja) 2010-08-11 2010-08-11 マルチコアプロセッサシステムおよびマルチコアプロセッサ

Publications (2)

Publication Number Publication Date
JP2012038236A JP2012038236A (ja) 2012-02-23
JP5121896B2 true JP5121896B2 (ja) 2013-01-16

Family

ID=45565624

Family Applications (1)

Application Number Title Priority Date Filing Date
JP2010180156A Expired - Fee Related JP5121896B2 (ja) 2010-08-11 2010-08-11 マルチコアプロセッサシステムおよびマルチコアプロセッサ

Country Status (2)

Country Link
US (1) US8380936B2 (ja)
JP (1) JP5121896B2 (ja)

Families Citing this family (9)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8788761B2 (en) * 2010-09-24 2014-07-22 Nvidia Corporation System and method for explicitly managing cache coherence
JP5783809B2 (ja) * 2011-06-03 2015-09-24 キヤノン株式会社 情報処理装置、起動方法およびプログラム
CN103279428B (zh) * 2013-05-08 2016-01-27 中国人民解放军国防科学技术大学 一种显式的面向流应用的多核Cache一致性主动管理方法
US8706798B1 (en) * 2013-06-28 2014-04-22 Pepperdata, Inc. Systems, methods, and devices for dynamic resource monitoring and allocation in a cluster system
IN2013CH04449A (ja) 2013-09-30 2015-04-03 Empire Technology Dev Llc
WO2015047427A1 (en) * 2013-09-30 2015-04-02 Empire Technology Development, Llc Data transfer in a multi-core processor
US10303605B2 (en) * 2016-07-20 2019-05-28 Intel Corporation Increasing invalid to modified protocol occurrences in a computing system
US10133669B2 (en) 2016-11-15 2018-11-20 Intel Corporation Sequential data writes to increase invalid to modified protocol occurrences in a computing system
JP2019053617A (ja) * 2017-09-15 2019-04-04 株式会社東芝 システムlsiおよびシステムlsiの故障検出方法

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5933857A (en) 1997-04-25 1999-08-03 Hewlett-Packard Co. Accessing multiple independent microkernels existing in a globally shared memory system
FR2763448B1 (fr) 1997-05-13 1999-07-16 Fihem Espaceur de cellules atm
US6295598B1 (en) 1998-06-30 2001-09-25 Src Computers, Inc. Split directory-based cache coherency technique for a multi-processor computer system
US6449699B2 (en) 1999-03-29 2002-09-10 International Business Machines Corporation Apparatus and method for partitioned memory protection in cache coherent symmetric multiprocessor systems
JP2002055881A (ja) * 2000-08-08 2002-02-20 Hitachi Ltd キャッシュ一致制御の実現方法およびこれを用いたデータ処理装置
JP4043225B2 (ja) * 2001-12-10 2008-02-06 株式会社ルネサステクノロジ キャッシュ装置および方法
US7469321B2 (en) * 2003-06-25 2008-12-23 International Business Machines Corporation Software process migration between coherency regions without cache purges
US7496713B1 (en) 2004-07-21 2009-02-24 Sun Microsystems, Inc. Method and apparatus for maintaining cache coherency in a memory system with shared only cache memories
US7353319B2 (en) * 2005-06-02 2008-04-01 Qualcomm Incorporated Method and apparatus for segregating shared and non-shared data in cache memory banks
US7984241B2 (en) 2005-09-16 2011-07-19 Hewlett-Packard Development Company, L.P. Controlling processor access to cache memory
WO2008155844A1 (ja) * 2007-06-20 2008-12-24 Fujitsu Limited 情報処理装置およびキャッシュ制御方法
JP2011003072A (ja) * 2009-06-19 2011-01-06 Toshiba Corp マルチコアプロセッサシステム

Also Published As

Publication number Publication date
US8380936B2 (en) 2013-02-19
JP2012038236A (ja) 2012-02-23
US20120042133A1 (en) 2012-02-16

Similar Documents

Publication Publication Date Title
JP5121896B2 (ja) マルチコアプロセッサシステムおよびマルチコアプロセッサ
TWI661301B (zh) 記憶體系統及控制非揮發性記憶體之控制方法
US20230333978A1 (en) Memory system and method for controlling nonvolatile memory
US10180908B2 (en) Method and apparatus for virtualized control of a shared system cache
TWI689817B (zh) 記憶體系統及控制方法
US10089238B2 (en) Method and apparatus for a shared cache with dynamic partitioning
US20160019157A1 (en) Method and Apparatus For Flexible Cache Partitioning By Sets And Ways Into Component Caches
TW201820131A (zh) 進程管理方法及裝置
JP2007026094A (ja) 実行装置およびアプリケーションプログラム
TWI785320B (zh) 裝置內標記資料移動系統、資訊處置系統及用於提供裝置內標記資料移動之方法
US20130326180A1 (en) Mechanism for optimized intra-die inter-nodelet messaging communication
US20090037688A1 (en) Communicating between Partitions in a Statically Partitioned Multiprocessing System
JP6674460B2 (ja) 不均一メモリアーキテクチャにおける改善されたレイテンシのためのシステムおよび方法
JP2020530176A (ja) 再構成可能なキャッシュアーキテクチャおよびキャッシュコヒーレンシの方法
US20110225387A1 (en) Unified Virtual Contiguous Memory Manager
US20100325360A1 (en) Multi-core processor and multi-core processor system
US20140201490A1 (en) Method and system for dynamically changing page allocator
KR20150010095A (ko) 운영체제 구성 장치 및 방법
US8762647B2 (en) Multicore processor system and multicore processor
JPWO2013008450A1 (ja) 仮想計算機システム、メモリ管理方法、メモリ管理プログラム、記録媒体および集積回路
US20210373790A1 (en) Inference in memory
US11281612B2 (en) Switch-based inter-device notational data movement system
JP6333370B2 (ja) キャッシュ線中で動的配列データ構造を実装するための方法
US20220058123A1 (en) Methods and nodes for handling memory
JP6551069B2 (ja) 情報処理装置および画像形成装置

Legal Events

Date Code Title Description
A621 Written request for application examination

Free format text: JAPANESE INTERMEDIATE CODE: A621

Effective date: 20120808

TRDD Decision of grant or rejection written
A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

Effective date: 20120925

A01 Written decision to grant a patent or to grant a registration (utility model)

Free format text: JAPANESE INTERMEDIATE CODE: A01

A61 First payment of annual fees (during grant procedure)

Free format text: JAPANESE INTERMEDIATE CODE: A61

Effective date: 20121023

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151102

Year of fee payment: 3

FPAY Renewal fee payment (event date is renewal date of database)

Free format text: PAYMENT UNTIL: 20151102

Year of fee payment: 3

LAPS Cancellation because of no payment of annual fees