(57)【特許請求の範囲】
【請求項１】
メモリの第１記憶領域に格納する第１のデータの誤り検出データを誤らせて生成した第１の情報を前記第１のデータに付加し、第２記憶領域に格納する第２のデータの誤り検出情報を誤らせて生成した第２の情報を前記第２のデータに付加する情報付加部と、
前記第１記憶領域と前記第２記憶領域のうち、前記第２記憶領域を利用可能とする際に、前記第１の情報は書き換えずに、前記第２の情報を前記第２のデータの誤り検出情報に書き換えることで前記第２の情報を消去する消去部と、
前記メモリに格納されたデータを読み出した場合に、読み出した前記データに付加された情報を用いて、読み出した前記データについての誤り検出処理を行う誤り検出部と、
を備えたことを特徴とする情報処理装置。
【請求項２】
利用可能な領域として確保されている前記第２記憶領域を開放する領域開放部と、
前記領域開放部により開放された前記第２記憶領域に格納する第３のデータの誤り検出情報を誤らせて生成した第３の情報を前記第３のデータに付加する情報再付加部と
をさらに備えたことを特徴とする請求項１に記載の情報処理装置。
【請求項３】
前記誤り検出部は、前記領域開放部が開放しようとする領域に格納されているデータに誤り検出情報を誤らせて生成した情報が付加されているか否かを判定し、誤り検出情報を誤らせて生成した情報が付加されている場合にはエラーを検出することを特徴とする請求項２に記載の情報処理装置。
【請求項４】
前記メモリはエラーチェック領域を有するメモリであり、
前記情報付加部は、前記第２のデータの前記エラーチェック領域に所定のエラーを示すエラー情報を書き込むことで前記第２のデータへの第２の情報の付加を行い、
前記消去部は、前記第２のデータの前記エラーチェック領域の前記第２の情報を前記第２のデータの誤り検出情報に書き換える、
ことを特徴とする請求項１〜３のいずれか一つに記載の情報処理装置。
【請求項５】
メモリの第１記憶領域に格納する第１のデータの誤り検出データを誤らせて生成した第１の情報を前記第１のデータに付加し、第２記憶領域に格納する第２のデータの誤り検出情報を誤らせて生成した第２の情報を前記第２のデータに付加し、
前記第１記憶領域と前記第２記憶領域のうち、前記第２記憶領域を利用可能とする際に、前記第１の情報は書き換えずに、前記第２の情報を前記第２のデータの誤り検出情報に書き換えることで前記第２の情報を消去し、
前記メモリに格納されたデータを読み出した場合に、読み出した前記データに付加された情報を用いて、読み出した前記データについての誤り検出処理を行う、
ことを特徴とする情報処理装置制御方法。
【請求項６】
メモリの第１記憶領域に格納する第１のデータの誤り検出データを誤らせて生成した第１の情報を前記第１のデータに付加し、第２記憶領域に格納する第２のデータの誤り検出情報を誤らせて生成した第２の情報を前記第２のデータに付加し、
前記第１記憶領域と前記第２記憶領域のうち、前記第２記憶領域を利用可能とする際に、前記第１の情報は書き換えずに、前記第２の情報を前記第２のデータの誤り検出情報に書き換えることで前記第２の情報を消去し、
前記メモリに格納されたデータを読み出した場合に、読み出した前記データに付加された情報を用いて、読み出した前記データについての誤り検出処理を行う、
処理をコンピュータに実行させることを特徴とする情報処理装置制御プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、情報処理装置、情報処理装置制御方法及び情報処理装置制御プログラムに関する。
【背景技術】
【０００２】
近年、複数のプロセスを並行して動作させるマルチプロセスを実行するマルチプロセッサシステムが提供されている。マルチプロセスを実行するマルチプロセッサシステムでは、各プロセスが同じ範囲のメモリを使用する共有メモリシステムが用いられる場合がある。
【０００３】
このような、共有メモリを用いるマルチプロセッサシステムでは、各プロセスのメモリの不正使用によりメモリ内容が破壊されるおそれがある。そこで、メモリの不正使用によるメモリ破壊を防止するいくつかの方法が提案されている。従来のメモリの不正使用を防止する方法は、ソフトウェアによる保護とハードウェアによる保護に大別される。
【０００４】
ソフトウェアによる保護は、メモリを参照する場合に、ポインタだけでなく鍵をセットにして用いることでメモリの不正使用を防止している。例えば、ｍａｌｌｏｃなどのメモリ確保の際に、メモリ領域のポインタとともに鍵となる整数値が生成され、正しい鍵とセットでポインタを用いなければメモリにアクセスできないようにしている。また、ハードウェアによる保護は、ハードウェアのＭＭＵ（Memory  Management  Unit）にメモリ保護の機能を追加することにより実現される。
【０００５】
なお、メモリへのアクセスを制御する方法として、メモリ上のアクセスできる領域を仮想計算機毎にベースレジスタと上限レジスタを用いて制限する従来技術がある。また、近年、メモリのエラーに対応するために、エラーを検出して訂正するＥＣＣ（Error  Check  and  Correct）機能が付いたＥＣＣメモリが提供されている。そして、このようなＥＣＣメモリにおける従来技術として、ＥＣＣメモリに対してＥＣＣコードを自由に書き込む技術がある。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特開昭６１−２６１５２号公報
【特許文献２】特公昭６２−２２１９９号公報
【発明の概要】
【発明が解決しようとする課題】
【０００７】
しかしながら、従来のソフトウェアによる保護では、メモリ参照のたびに鍵を照合する処理がソフトウェアによって行われるため、この処理によるオーバーヘッドが大きくなり、情報処理装置の処理速度が低下してしまう。
【０００８】
また、ＭＭＵの処理は、例えば数キロバイト〜数メガバイトなどといった大きなサイズのページ単位で行われる。そのため、従来のハードウェアによる保護では、メモリの保護もページ単位で行われ、ソフトウェアが管理するメモリの単位と比較して粒度が粗すぎるため、ソフトウェアに適したメモリ保護を行うことが困難である。
【０００９】
１つの側面では、本発明は、メモリの不正使用を防止するハードウェア機構を有する情報処理装置、情報処理装置制御方法及び情報処理装置制御プログラムを提供することを目的とする。
【課題を解決するための手段】
【００１０】
本願の開示する情報処理装置、情報処理装置制御方法及び情報処理装置制御プログラムは、一つの態様において、情報付加部は、メモリの第１記憶領域に格納する第１のデータの誤り検出データを誤らせて生成した第１の情報を前記第１のデータに付加し、第２記憶領域に格納する第２のデータの誤り検出情報を誤らせて生成した第２の情報を前記第２のデータに付加する。消去部は、前記第１記憶領域と前記第２記憶領域のうち、前記第２記憶領域を利用可能とする際に、前記第１の情報は書き換えずに、前記第２の情報を前記第２のデータの誤り検出情報に書き換えることで前記第２の情報を消去する。誤り検出部は、前記メモリに格納されたデータを読み出した場合に、読み出した前記データに付加された情報を用いて、読み出した前記データについての誤り検出処理を行う。
【発明の効果】
【００１１】
一つの態様によれば、ハードウェア機構によりメモリの不正使用を防止することができる。
【図面の簡単な説明】
【００１２】
【図１】図１は、実施例１に係る情報処理装置のブロック図である。
【図２】図２は、演算器と命令制御部の詳細を表すブロック図である。
【図３】図３は、ＥＣＣ生成部１４の詳細を表すブロック図である。
【図４Ａ】図４Ａは、ヒープ領域を確保した時点でのヒープ領域に格納されているデータの状態を示す図である。
【図４Ｂ】図４Ｂは、１つのプロセスに対してメモリ領域を確保した場合のヒープ領域に格納されているデータの状態を示す図である。
【図４Ｃ】図４Ｃは、複数のプロセスに対してメモリ領域を確保した場合のヒープ領域に格納されているデータの状態を示す図である。
【図５】図５は、実施例１に係る情報処理装置におけるヒープ領域獲得時の処理のフローチャートである。
【図６】図６は、実施例１に係る情報処理装置におけるメモリ領域の確保の要求があった場合の処理のフローチャートである。
【図７】図７は、実施例１に係る情報処理装置におけるメモリ領域の開放の要求があった場合の処理のフローチャートである。
【図８】図８は、マークの付加及び消去の処理並びにそれらの処理に付随するエラーを時系列で表した図である。
【図９】図９は、実施例２に係る情報処理装置のブロック図である。
【図１０】図１０は、実施例３に係る情報処理装置のブロック図である。
【発明を実施するための形態】
【００１３】
以下に、本願の開示する情報処理装置、情報処理装置制御方法及び情報処理装置制御プログラムの実施例を図面に基づいて詳細に説明する。なお、以下の実施例により本願の開示する情報処理装置、情報処理装置制御方法及び情報処理装置制御プログラムが限定されるものではない。
【実施例１】
【００１４】
図１は、実施例１に係る情報処理装置のブロック図である。図１に示すように、本実施例に係る情報処理装置は、プロセッサコア１及びメモリ２を有している。本実施例では、メモリ２に８バイト単位でデータを格納する場合で説明する。また、ＥＣＣの誤り訂正符合は、本実施例では１バイトの場合で説明する。
【００１５】
プロセッサコア１は、演算器１１、レジスタ１２、命令制御部１３、ＥＣＣ生成部１４及びエラー検出部１５を有している。
【００１６】
演算器１１は、命令制御部１３からの演算命令を受けて、演算を行う。そして、演算器１１は、演算結果をレジスタ１２に格納する。
【００１７】
図２は、命令制御部の詳細を表すブロック図である。図２におけるプログラム５は、例えば、複数のプロセスを実行し、各プロセスが共有メモリを使用するプログラムである。プログラム５は、ヒープ領域獲得部５１、領域確保部５２、領域開放部５３及びデータ処理部５４を有している。また、命令制御部１３は、マーク付加部１３１及びマーク消去部１３２を有している。
【００１８】
ヒープ領域獲得部５１は、メモリ２のメモリ資源の管理を行うカーネルからヒープ領域を獲得する。ヒープ領域とは、メモリ２の中で確保可能なメモリ領域として割り当てられた領域である。ヒープ領域獲得部５１は、ヒープ領域に割り当てたメモリ領域の情報を管理テーブルに登録する。
【００１９】
また、ヒープ領域獲得部５１は、ヒープ領域に対するマーク付加の指示を命令制御部１３のマーク付加部１３１に通知する。ヒープ領域獲得部５１は、ヒープ領域をマークを付加したデータで埋めるまでマーク付加の指示を繰り返しマーク付加部１３１に通知する。ここで、マークとは、例えば、メモリの使用不可又はメモリの不正使用から保護されている状態を示す識別情報をいう。データに対するマークの付加については後で詳細に説明する。このマークが、「誤り検出情報を誤らせて生成した情報」の一例にあたる。
【００２０】
領域確保部５２は、ヒープ領域におけるプロセスが使用するメモリ領域の確保の要求を確保するサイズとともにプロセスから受ける。ヒープ領域におけるプロセスが使用するメモリ領域の確保とは、例えばＣ言語における「ｍａｌｌｏｃ」などである。そして、領域確保部５２は、管理テーブルを参照し、ヒープ領域における未割り当ての領域の中からメモリ領域確保の要求をしたプロセスに割り当てるメモリ領域を決定する。そして、領域確保部５２は、ヒープ領域内の確保したメモリ領域の情報を管理テーブルに登録する。この領域確保部５２がヒープ領域内にプロセスが使用するメモリ領域として確保したメモリ領域が、「第２記憶領域」の一例にあたる。さらに、領域確保部５２が確保した領域以外のヒープ領域内の領域が、「第１記憶領域」の一例にあたる。
【００２１】
また、領域確保部５２は、決定した確保するメモリ領域におけるマーク消去の指示を命令制御部１３のマーク消去部１３２に通知する。領域確保部５２は、確保したメモリ領域におけるデータに付加されたマークが全て消去できるまでマーク消去の指示を繰り返しマーク消去部１３２に通知する。データに対するマークの消去については後で詳細に説明する。
【００２２】
さらに、領域確保部５２は、確保したメモリ領域の先頭アドレスをメモリ領域確保の要求をしたプロセスに通知する。
【００２３】
領域開放部５３は、使用しているメモリ領域の開放の要求をプロセスから受ける。使用しているメモリ領域の開放の要求とは、例えばＣ言語における「ｆｒｅｅ」などである。領域開放部５３は、メモリ領域開放を要求したプロセス用に確保しているメモリ領域を特定する。そして、領域開放部５３は、ヒープ領域内の特定したメモリ領域の確保の情報を管理テーブルから削除する。
【００２４】
また、領域開放部５３は、開放するメモリ領域に対するマーク再付加の指示をマーク付加部１３１に通知する。領域開放部５３は、開放するメモリ領域をマークを再付加したデータで埋めるまでマーク再付加の指示を繰り返しマーク付加部１３１に通知する。データに対するマークの再付加については後で詳細に説明する。
【００２５】
データ処理部５４は、各プロセスによるメモリ２へのデータの格納や読出しを実行する。データの格納とは、例えば、Ｃ言語のストア命令の実行などである。また、データの読出しとは、例えば、Ｃ言語のロード命令の実行などである。そして、データ処理部５４は、各プロセスに割り当てられたメモリ領域に対して、データの格納や読出しなどのデータ処理を各プロセスに割り当てられたメモリ領域に対して行う。具体的には、データ処理部５４は、データの格納行うプロセスに対して確保されているメモリ領域の空いている領域の中から指定されたデータを書き込むアドレスを決定する。そして、データ処理部５４は、データの書込みの指示を命令制御部１３へ通知する。また、データ処理部５４は、データの読出しの指示をエラー検出部１５に通知する。
【００２６】
マーク付加部１３１は、ヒープ領域に対するマーク付加の指示をヒープ領域獲得部５１から受ける。そして、マーク付加部１３１は、ヒープ領域に格納する後述の仮のデータにおける特定の３ビットを反転させる指示をＥＣＣ生成部１４のビット反転部１４１に通知する。ここで、本実施例では、マーク付加部１３１は、マークの付加として正常なデータの特定の３ビットを反転させているが、特定のエラーが検出される情報であれば他の情報でもよく、例えば、３ビット以上の数のビットを反転させてもよい。
【００２７】
また、マーク付加部１３１は、マーク再付加の指示を領域開放部５３から受ける。そして、マーク付加部１３１は、解放するメモリ領域に格納する仮のデータにおける特定の３ビットを反転させる指示をＥＣＣ生成部１４のビット反転部１４１に通知する。このマーク付加部１３１が、「情報付加部」及び「情報再付加部」の一例である。
【００２８】
マーク消去部１３２は、マーク消去の指示を領域確保部５２にから受ける。そして、マーク消去部１３２は、確保するメモリ領域に格納するデータに対応する誤り訂正用符号の生成として通常の誤り訂正用符号生成を行う指示をビット反転部１４１に通知する。このマーク消去部１３２が、「消去部」の一例にあたる。
【００２９】
図３は、ＥＣＣ生成部１４の詳細を表すブロック図である。図３に示すように、ＥＣＣ生成部１４は、ビット反転部１４１、コード生成部１４２及びデータ格納部１４３を有している。
【００３０】
ＥＣＣ生成部１４は、ヒープ領域を確保する場合、仮のデータを取得する。ここで、仮のデータは、例えば、付加したマークの内容を示すためのマーク補助情報などでもよいし、空のデータでもよい。仮のデータはＥＣＣ生成部１４が生成してもよいし、レジスタ１２から読み出してもよい。
【００３１】
ビット反転部１４１は、ヒープ領域確保の場合、仮のデータにおける特定の３ビットを反転させる指示を命令制御部１３のマーク付加部１３１から受ける。また、ビット反転部１４１は、仮のデータをレジスタ１２から取得する。そして、ビット反転部１４１は、取得した仮のデータの予め決められた特定の３ビットを反転させる。その後、ビット反転部１４１は、特定の３ビットを反転させた仮のデータをコード生成部１４２へ出力する。
【００３２】
また、ビット反転部１４１は、メモリ領域確保の場合、確保するメモリ領域に格納するデータに対応して、通常の誤り訂正用符号生成を行う指示をマーク消去部１３２から受ける。そして、ビット反転部１４１は、レジスタ１２から取得したデータに変更を加えずにコード生成部１４２へ出力する。すなわち、メモリ領域確保の場合、ビット反転部１４１は、通常のデータ格納命令（例えば、Ｃ言語における「ストア命令」）の場合と同様の動作を行う。
【００３３】
また、ビット反転部１４１は、データの書込みの場合（例えば、Ｃ言語における「ストア命令」の場合）、指定されたアドレスに格納するデータをコード生成部１４２へ出力する。
【００３４】
また、ビット反転部１４１は、メモリ領域開放の場合、仮のデータにおける特定の３ビットを反転させる指示を命令制御部１３のマーク付加部１３１から受ける。そして、ビット反転部１４１は、開放するメモリ領域に格納する仮のデータの予め決められた特定の３ビットを反転させる。その後、ビット反転部１４１は、特定の３ビットを反転させた仮のデータをコード生成部１４２へ出力する。
【００３５】
コード生成部１４２は、ヒープ領域確保の場合、特定の３ビットを反転させた仮のデータの入力をビット反転部１４１から受ける。そして、コード生成部１４２は、受信した特定の３ビットを反転させた仮のデータから、ヒープ領域の全領域に格納していく仮のデータに付加する誤り訂正用符号である１バイトのチェックコードを生成する。そして、コード生成部１４２は、生成した１バイトのチェックコードをデータ格納部１４３へ出力する。
【００３６】
また、コード生成部１４２は、メモリ領域確保の場合、レジスタ１２から取得された変更が加えられていないデータの入力をビット反転部１４１から受ける。そして、コード生成部１４２は、受信したデータから、確保したメモリ領域に格納するデータに付加する誤り訂正用符号である１バイトのチェックコードを生成する。そして、コード生成部１４２は、生成した１バイトのチェックコードをデータ格納部１４３へ出力する。
【００３７】
また、コード生成部１４２は、データ書込みの場合（例えば、Ｃ言語における「ストア命令」の場合）、レジスタ１２から取得したデータをビット反転部１４１から受信する。そして、コード生成部１４２は、受信したデータから１バイトのチェックコードを生成する。そして、コード生成部１４２は、生成した１バイトのチェックコードをデータ格納部１４３へ出力する。
【００３８】
コード生成部１４２は、メモリ領域開放の場合、特定の３ビットを反転させた仮のデータの入力をビット反転部１４１から受ける。そして、コード生成部１４２は、受信した特定の３ビットが反転させられた仮のデータから、開放したメモリ領域に格納する仮のデータに付加する誤り訂正用符号である１バイトのチェックコードを生成する。そして、コード生成部１４２は、生成した１バイトのチェックコードをデータ格納部１４３へ出力する。
【００３９】
データ格納部１４３は、ヒープ領域確保の場合、８バイトの仮のデータをレジスタ１２から受信する。さらに、データ格納部１４３は、ヒープ領域の全領域に格納していく仮のデータに付加する誤り訂正用符号である１バイトのチェックコードをコード生成部１４２から取得する。そして、データ格納部１４３は、コード生成部１４２から取得した仮のデータの特定の３ビットを反転させて生成した１バイトのチェックコードを取得した仮のデータに付加する。このように、例えば、仮のデータの特定の３ビットを反転させて生成したチェックコードをデータに付加することを「マークの付加」という。その後、データ格納部１４３は、マークを付加した仮のデータを順番に、メモリ２のヒープ領域の全領域を網羅するように格納していく。すなわち、データ格納部１４３は、マークを付加した仮のデータでヒープ領域の全ての領域を埋める。ここで、マーク付加では、正常なデータの特定の３ビットを反転させ生成したチェックコードをデータに付加させているので、マークを付加したデータに対してチェックを行った場合、ＥＣＣエラーが発生することになる。マークを付加した所定のサイズのデータをヒープ領域に格納していくことが、「メモリ上の第１領域において所定領域毎にエラーを発生させるマークを付加する」ことの一例にあたる。
【００４０】
図４Ａは、ヒープ領域を確保した時点でのヒープ領域に格納されているデータの状態を示す図である。図４Ａのメモリ２０１は、ヒープ領域を確保した時点でのメモリ２内のヒープ領域の状態を表している。メモリ２０１の中の各ボックスは、８バイトのデータ＋１バイトのチェックコードが格納された領域を表している。そして、ボックス２１１のように斜線で網掛けされたボックスは、１バイトのチェックコードとして仮のデータの特定の３ビットを反転させて生成したチェックコードが付加されたデータを表している。すなわち、ボックス２１１のように斜線で網掛けされたボックスは、マークが付加されたデータが格納されていることを示している。メモリ２０１のように、ヒープ領域を確保した時点では、ヒープ領域は全てマークが付加されたデータで埋められている。この状態では、ヒープ領域内のいずれのアドレスにおいても、マークが付加されたデータが参照される。
【００４１】
データ格納部１４３は、メモリ領域確保の場合、確保したメモリ領域に格納する８バイトのデータをレジスタ１２から受信する。さらに、データ格納部１４３は、受信した各データに付加する誤り訂正用符号である１バイトのチェックコードをコード生成部１４２から取得する。そして、データ格納部１４３は、コード生成部１４２から取得した仮のデータを変更せずに使用して生成した１バイトのチェックコードを取得したデータに付加する。このチェックコードの付加により、データの特定の３ビットを反転させて生成したチェックコードが確保したメモリ領域に格納するデータから除かれる。このように、データの特定の３ビットを反転させて生成したチェックコードをデータから除くことを「マークの消去」という。そして、データ格納部１４３は、確保したメモリ領域にマークを消去したデータを格納していく。これにより、データ格納部１４３は、マークを消去したデータで確保したメモリ領域を埋める。確保したメモリ領域をマークを消去したデータで埋めることが、「第２領域において所低領域毎に付加されているマークを消去する」ことの一例にあたる。
【００４２】
図４Ｂは、１つのプロセスに対してメモリ領域を確保した場合のヒープ領域に格納されているデータの状態を示す図である。図４Ｂのメモリ２０２は、１つのプロセスに対してメモリ領域を確保した場合のメモリ２内のヒープ領域の状態を表している。領域２２１は、１つのプロセスに対して確保されたメモリ領域である。領域２２１に示される網掛けの無いボックスは、マークが消去されたデータが格納されていることを示している。すなわち、メモリ２０２のように、プロセスに対してメモリ領域を確保した場合、確保されたメモリ領域はマークが消去されたデータで埋められている。そして、メモリ２０２の領域２２１以外の領域は、マークが付加されたデータで埋められている。この状態で、例えば、領域２２１が割り当てられたプロセスの処理において、プロセスが領域２２１以外の領域を参照した場合、そのプロセスは、マークが付加されたデータを参照する。
【００４３】
また、図４Ｃは、複数のプロセスに対してメモリ領域を確保した場合のヒープ領域に格納されているデータの状態を示す図である。領域２３１は、あるプロセスに対して確保されたメモリ領域である。また、領域２３２は、他のプロセスに対して確保されたメモリ領域である。また、領域２３３は、さらに他のプロセスに対して確保されたメモリ領域である。図４Ｃに示すように、複数のプロセスに対してメモリ領域を割り当てる場合、確保したそれぞれのメモリ領域が連続しないように割り当てる。具体的には、領域２３１と領域２３２との間にマークが付加された領域２３４が挟まっている。また、領域２３２と領域２３３との間にマークが付加された領域２３５が挟まっている。このようにすることで、例えば、領域２３２を参照している場合に、参照先のポインタが領域２３２の外にはみ出した場合、参照を行っているプロセスは、マークが付加された領域２３４又は２３５を参照することになり、間違ってマークが付加されていない他のプロセスの領域を参照することは無い。そのため、オーバーランなどによる破壊も防止することができる。
【００４４】
メモリ領域に対するデータの書込みの場合、参照したアドレスのデータにマークが付加されていなければ、データ格納部１４３は、レジスタ１２に格納されたデータをレジスタ１２から読み出す。さらに、データ格納部１４３は、読み出したデータに対応するチェックコードをコード生成部１４２から取得する。そして、データ格納部１４３は、読み出したデータに取得したチェックコードを付加し、メモリ２内の指定されたアドレスに格納する。
【００４５】
データ格納部１４３は、メモリ領域開放の場合、８バイトの仮のデータをレジスタ１２から受信する。さらに、データ格納部１４３は、開放するメモリ領域に格納していく仮のデータに付加する誤り訂正用符号である１バイトのチェックコードをコード生成部１４２から取得する。そして、データ格納部１４３は、コード生成部１４２から取得した仮のデータの特定の３ビットを反転させて生成した１バイトのチェックコードを取得した仮のデータに付加する。このように、マークを消去したメモリ領域に対して、再度仮のデータの特定の３ビットを反転させて生成したチェックコードをデータに付加することを「マークの再付加」という。開放するメモリ領域に格納されているデータにマークが付加されていれば、データ格納部１４３は、マークを再付加した仮のデータを順番に、メモリ２における開放するメモリ領域に格納していく。これにより、データ格納部１４３は、マークを再付加したデータで開放したメモリ領域を埋める。マークを再付加したデータで開放したメモリ領域を埋めることが、「開放された第２領域において所定領域毎にマークを再付加する」ことの一例にあたる。
【００４６】
プログラム５がデータの格納を行う場合、データの格納に先駆け、エラー検出部１５は、データ処理部５４によりデータの格納先として指定されたメモリ２内のアドレスからデータを読み出す。そして、エラー検出部１５は、読み出したデータにマークが付加されているか否かを判定する。エラー検出部１５は、参照したアドレスのデータにマークが付加されている場合は、エラーを検出する。例えば、エラー検出部１５は、確保されていないメモリ領域にプログラム５がアクセスした場合などは、プログラム５による未割り当ての領域へのアクセス違反を検出する。また、エラー検出部１５は、他のプロセスに対して確保されたメモリ領域を、プロセスが参照した場合などは、メモリ使用違反を検出する。また、エラー検出部１５は、既に開放されているメモリ領域にプログラム５がアクセスした場合には、開放済み領域へのアクセス違反を検出する。そして、エラー検出部１５は、個々のエラーのレポートをレジスタ１２に登録する。ここで、本実施例では、データの格納の場合にも、エラー検出部１５が格納先に指定されているアドレスからデータを読み出してマークの有無を判定しているが、これは他の方法でもよい。例えば、ＥＣＣ生成部１４のデータ格納部１４３に、データを格納する際に、格納先のアドレスに格納されているデータにマークが付加されているか否かを判定させてもよい。
【００４７】
プログラム５がデータの読出しを行った場合、エラー検出部１５は、指定されたアドレスのメモリ領域から読み出されたデータもエラーがあるか否かを判定する。具体的には、エラー検出部１５は、メモリ領域から読み出されたデータにマークが付加されている場合、エラーを検出し、レジスタ１２にエラーのレポートを登録する。例えば、プログラム５が確保されていないメモリ領域を参照した場合などは、メモリ２から読み出されたデータに含まれるマークをエラー検出部１５が検出することにより、アクセス違反を検出する。また、アドレスを指定したプロセス以外のプロセスに対して確保されたメモリ領域をプログラム５が参照した場合などにおいても、エラー検出部１５はメモリ使用違反を検出する。また、エラー検出部１５は、プログラム５が既に開放されているメモリ領域にアクセスした場合にも、メモリ２から読み出されたデータに含まれるマークを検出することにより、開放済み領域へのアクセス違反を検出する。そして、エラー検出部１５は、個々のエラーのレポートをレジスタ１２に登録する。
【００４８】
これに対して、プログラム５が参照したメモリ領域にマークが消去されたデータが格納されている場合、エラー検出部１５は、指定されたデータをメモリ２から読み出す。そして、エラー検出部１５は、読み出したデータをレジスタ１２に格納する。
【００４９】
また、プログラム５がメモリ領域の開放をおこなった場合、エラー検出部１５は、これから開放しようとしているメモリ領域からデータを読み出し、読み出した各データにマークが付加されているか否かを判定する。そして、これから開放しようとしているメモリ領域に格納されているデータに既にマークが付加されている場合、エラー検出部１５は、二重開放違反のエラーを検出する。このエラー検出部１５が、「誤り検出部」の一例にあたる。
【００５０】
次に、図５を参照して、本実施例に係る情報処理装置におけるヒープ領域獲得時の処理の流れについて説明する。図５は、実施例１に係る情報処理装置におけるヒープ領域獲得時の処理のフローチャートである。
【００５１】
ヒープ領域獲得部５１は、カーネルからヒープ領域を獲得する（ステップＳ１０１）。ヒープ領域獲得５１は、データに対するマークの付加をマーク付加部１３１に通知する。
【００５２】
マーク付加部１３１は、仮のデータにおける特定の３ビットを反転させる指示をビット反転部１４１に通知する。ＥＣＣ生成部１４は、取得した仮のデータにおける特定の３ビットを反転させたデータから仮のデータに対応する１バイトのチェックコードを生成する。そして、ＥＣＣ生成部１４は、生成した１バイトのチェックコードをレジスタ１２から取得した仮のデータに付加し、ヒープ領域に格納していく。ＥＣＣ生成部１４は、ヒープ領域獲得部５１によるマーク付加部１３１の制御にしたがい、メモリ２の中のヒープ領域として獲得した領域の全てにマークを付加する（ステップＳ１０２）。
【００５３】
この状態で、メモリ２のヒープ領域に対するデータの格納や読出しをプログラム５が行うと、エラー検出部１５は、指定されたアドレスを有するメモリ領域からデータを読み出す（ステップＳ１０３）。
【００５４】
この場合、プログラム５により参照されたメモリ領域にはマークが付加されたデータが格納されているので、エラー検出部１５は、読み出したデータにマークが付加されていることを検出し、未割り当て領域へのアクセス違反を検出する（ステップＳ１０４）。
【００５５】
ここで、図５では、未割り当て領域へのアクセス違反の検出の処理を説明するために、ステップＳ１０３及びＳ１０４を記載したが、未割り当て領域へのアクセス違反が行われなければ、ステップＳ１０３及びＳ１０４は実行されなくてもよい。
【００５６】
次に、図６を参照して、本実施例に係る情報処理装置におけるメモリ領域の確保の要求があった場合の処理の流れについて説明する。図６は、実施例１に係る情報処理装置におけるメモリ領域の確保の要求があった場合の処理のフローチャートである。ここでは、メモリ領域の確保の要求として、Ｃ言語のｍａｌｌｏｃを例に説明する。
【００５７】
領域確保部５２は、プロセスからのｍａｌｌｏｃ要求を受信する（ステップＳ２０１）。
【００５８】
領域確保部５２は、要求されたサイズの領域をメモリ２上のヒープ領域に確保する（ステップＳ２０２）。そして、領域確保部５２は、データのマークの消去をマーク消去部１３２に指示する。
【００５９】
マーク消去部１３２は、通常の誤り訂正符号の生成の指示をビット反転部１４１に通知する。ＥＣＣ生成部１４は、レジスタ１２から取得したデータに対応する１バイトのチェックコードを生成する。そして、ＥＣＣ生成部１４は、生成した１バイトのチェックコードをレジスタ１２から取得したデータに付加し、確保した領域に格納していく。ＥＣＣ生成部１４は、領域確保部５２によるマーク消去部１３２に制御に従い、メモリ２の中のヒープ領域における確保したメモリ領域の全てのデータのマークを消去する（ステップＳ２０３）。
【００６０】
領域確保部５２は、確保した領域の先頭のアドレスをｍａｌｌｏｃ要求を出したプロセスに返す（ステップＳ２０４）。
【００６１】
メモリ２に対するデータの格納や読出しの命令がプログラム５からなされると、エラー検出部１５が、指定されたアドレスを有するメモリ領域からデータを読み出す（ステップＳ２０５）。
【００６２】
エラー検出部１５は、プログラム５により参照されたアドレスから読み出したデータにマークが付加されているか否かを判定する（ステップＳ２０６）。
【００６３】
マークが付加されていない場合（ステップＳ２０６：否定）、エラー検出部１５は、メモリ使用可と判定する（ステップＳ２０７）。これに対して、マークが付加されている場合（ステップＳ２０６：肯定）、エラー検出部１５は、メモリ使用違反を検出する（ステップＳ２０８）。
【００６４】
次に、図７を参照して、本実施例に係る情報処理装置におけるメモリ領域の開放の要求があった場合の処理の流れについて説明する。図７は、実施例１に係る情報処理装置におけるメモリ領域の開放の要求があった場合の処理のフローチャートである。ここでは、メモリ領域の開放の要求として、Ｃ言語のｆｒｅｅを例に説明する。
【００６５】
領域開放部５３は、プロセスからのｆｒｅｅ要求を受信する（ステップＳ３０１）。領域開放部５３は、開放を指定されたメモリ領域を特定する。さらに、領域開放部５３は、マーク付加部１３１にマークの再付加を指示する。マーク付加部１３１は、仮のデータにおける特定の３ビットを反転させる指示をビット反転部１４１に通知する。
【００６６】
エラー検出部１５は、開放するメモリ領域に格納されているデータにマークが付加されているか否かを判定する（ステップＳ３０２）。
【００６７】
マークが付加されていない場合（ステップＳ３０２：否定）、ＥＣＣ生成部１４は、レジスタ１２から取得した仮のデータにおける特定の３ビットを反転させたデータから仮のデータに対応する１バイトのチェックコードを生成する。そして、ＥＣＣ生成部１４は、生成した１バイトのチェックコードを仮のデータに付加し、開放したメモリ領域に格納していく。ＥＣＣ生成部１４は、領域開放部５３によるマーク付加部１３１の制御にしたがい、メモリ２の中のヒープ領域における開放したメモリ領域の全てにマークを再付加する（ステップＳ３０３）。 
【００６８】
領域開放部５３は、開放したメモリ領域を管理テーブルから削除する（ステップＳ３０４）。
【００６９】
この状態で、開放されたメモリ領域に対するデータの格納や読出しの命令がプログラム５からなされると、エラー検出部１５が、開放されたメモリ領域からデータを読み出す（ステップＳ３０５）。
【００７０】
この場合、読み出されたメモリにはマークが付加されたデータが格納されているので、エラー検出部１５は、開放済みのメモリ領域へのアクセス違反を検出する（ステップＳ３０６）。
【００７１】
これに対して、開放要求があったメモリ領域のデータにマークが付加されている場合（ステップＳ３０２：肯定）、エラー検出部１５は、二重開放違反を検出する（ステップＳ３０７）。
【００７２】
ここで、図７では、開放済み領域へのアクセス違反の検出の処理を説明するために、ステップＳ３０５及びＳ３０６を記載したが、開放済み領域へのアクセス違反が行われなければ、ステップＳ３０５及びＳ３０６は実行されなくてもよい。
【００７３】
次に、図８を参照して、時系列での各処理の実行及びそれに付随するエラーの発生について説明する。図８は、マークの付加及び消去の処理並びにそれらの処理に付随するエラーを時系列で表した図である。図８は矢印の向かう方向に時間が経過している。また、二重線で囲われたボックスはエラーの検出を表している。
【００７４】
時刻３０１でプロセスが開始され、ヒープ領域獲得部５１は、ヒープ領域をカーネルから獲得する。
【００７５】
ＥＣＣ生成部１４は、ヒープ領域として獲得された領域の全てにマークを付加したデータを格納する（ステップＳ３１１）。ここでは、マークが付加されたデータをあるメモリ領域に格納することを、メモリにマークを付加するという。
【００７６】
この状態で、プログラム５が、マークが付加されたメモリを参照する（ステップＳ３１２）。この場合、エラー検出部１５は、マークが付加されたメモリからデータを読み出す。
【００７７】
この場合、プロセスが使用する領域として確保されておらず、マークが付加された状態であるメモリからデータを読み出すため、エラー検出部１５は、未割り当ての領域へのアクセス違反を検出する（ステップＳ３１３）。
【００７８】
時刻３０２で、プロセスからのｍａｌｌｏｃの要求を受けて、領域確保部５２がメモリ領域を確保する。
【００７９】
ＥＣＣ生成部１４は、確保したメモリ領域に格納されているデータのマークを消去する（ステップＳ３２１）。ここでは、あるメモリ領域に格納されているデータのマークを消去することを、メモリのマークを消去するという。
【００８０】
プロセスは、データのストア又はロードを行うためにメモリを参照する（ステップＳ３２２）。エラー検出部１５は、プロセスにより指定されたアドレスからデータを読み出す。
【００８１】
エラー検出部１５は、読み出したデータにマークが付加されているか否かを判定する（ステップＳ３２３）。マークが付加されていなければ（ステップＳ３２３：否定）、プロセスにより参照されたメモリはそのプロセスが使用するように確保されたメモリ領域であるので、エラー検出部１５は、そのメモリ領域が使用可であると判定する（ステップＳ３２４）。その後、ＥＣＣ生成部１４又はエラー検出部１５は、プロセスにより参照されたメモリへのデータの格納やデータの読み出しを行う。これに対して、マークが付加されていれば（ステップＳ３２３：肯定）、プロセスにより参照されたメモリ領域はプロセスが使用するように確保されたメモリ領域でないので、エラー検出部１５は、メモリ使用違反を検出する（ステップＳ３２５）。
【００８２】
時刻３０３で、領域開放部５３はプロセスからのｆｒｅｅの要求を受けてメモリ領域を解放する。
【００８３】
ＥＣＣ生成部１４は、開放したメモリ領域にマークが付加されたデータを再度格納する（ステップＳ３３１）。ここでは、あるメモリ領域にマークが付加されたデータをメモリに再度格納することを、メモリへのマークの再付加という。
【００８４】
この状態で、プログラム５は、マークが再付加されたメモリ領域を参照する（ステップＳ３３２）。そして、エラー検出部１５は、マークが再付加されたメモリからデータを読み出す。
【００８５】
この場合、データを読み出したメモリ領域は既に開放されており、マークが再付加された状態であるメモリ領域からデータを読み出すことになるため、エラー検出部１５は、開放済み領域へのアクセス違反を検出する（ステップＳ３３３）。
【００８６】
さらに、時刻３０４で、プロセスからのｆｒｅｅの要求を受けて、領域開放部５３が既に開放されているメモリ領域に対して再度開放を行う。
【００８７】
エラー検出部１５は、開放されたメモリ領域に格納されているデータにマークが付加されているかを確認する。この場合、既に開放されているメモリに対してさらに開放を行っているので、エラー検出部１５は、開放されたメモリにマークが付加されていることを検出する。これにより、エラー検出部１５は、既に開放済みのメモリをさらに開放しようとしていると判定する（ステップＳ３４１）。そこで、エラー検出部１５は、二重開放違反を検出する（ステップＳ３４２）。
【００８８】
以上に説明したように、本実施例に係る情報処理装置は、ヒープ領域として獲得したメモリ領域の全てにマークを付加したデータを格納する。その後、情報処理装置は、プロセスが使用する領域として確保したメモリ領域のデータのマークを消去する。さらに、確保したメモリ領域を開放する場合、開放するメモリ領域の全てにマークを付加したデータを再度格納する。これにより、使用領域として確保されていない領域にアクセスした場合、アクセスするメモリに格納されたデータにマークが付いているので、アクセス違反が発生していることが直ぐに分かる。また、開放済みのメモリ領域を再度開放しようとしても、そのメモリ領域に格納されているデータにマークが付いているので、開放できない領域であることが直ぐに分かる。
【００８９】
さらに、これらのエラー検出は、ＥＣＣを用いて特定の値を有する誤り訂正符号が付加されているか否かを判定するので、ハードウェアによる処理によって検出することが可能である。したがって、本実施例に係る情報処理装置は、未割り当て領域へのアクセス、開放済み領域へのアクセス及び二重開放といったメモリ使用違反をハードウェアによって高速に検出することが可能となる。
【００９０】
また、ＥＣＣをデータに対するマークの付加に利用しているので、例えば８バイト毎のメモリ使用についてチェックすることができる。このため、本実施例に係る情報処理装置は、数キロバイト〜数メガバイトなどといった大きなサイズのページ単位でのＭＭＵの処理に比べて細かい粒度でメモリの不正使用の検出を行うことができる。
【００９１】
すなわち、本実施例に係る情報処理装置によれば、従来のソフトウェアによるメモリ保護に比べて高速で、且つ、従来のＭＭＵによる処理に比べて細かい粒度でメモリを保護することができる。これにより、高い性能が必要とされる大規模ソフトウェアにおけるメモリ破壊を発生させるバグの検出が容易となり、大規模ソフトウェアの品質確保が容易となる。
【実施例２】
【００９２】
図９は、実施例２に係る情報処理装置のブロック図である。本実施例に係る情報処理装置は、実施例１に係る情報処理装置に加えてキャッシュメモリ３及びメモリコントローラ４をさらに有している。本実施例に係る情報処理装置において、実施例１にかかる情報処理装置と同じ機能を有する各部については説明を省略する。
【００９３】
キャッシュメモリ３は、データＲＡＭ（Random  Access  Memory）３１、第２エラー検査器３２、第３エラー検査器３３及び第４エラー検査器３４を有している。また、メモリコントローラ４は、第１エラー検査器４１及び第５エラー検査器４２を有している。キャッシュメモリ３とメモリコントローラ４との間がチップの境界となる場合がある。そして、チップ間通信においてエラーの発生する率が高いため、本実施例の情報処理装置は、エラーを発生する可能性が高いチップの境界にエラー検査器を配置して、エラーが発生した場所を特定することができるように構成されている。
【００９４】
データの格納、データの読出し及びメモリの開放の要求をソフトウェアから受けた場合、第１エラー検査器４１は、メモリ２から対応するデータを読み出す。そして、第１エラー検査器４１は、読み出したデータのエラーをチェックする。このとき、第１エラー検査器４１は、ＥＣＣ生成部１４及び他のエラー検査器によって付加されたマークはエラーとしては検出しない。ここで、他のエラー検査器とは、第２エラー検査器３２、第３エラー検査器３３、第４エラー検査器３４及び第５エラー検査器４２である。エラーが検出されない場合には、第１エラー検査器４１は、受信したデータに変更を加えずに第２エラー検査器３２に送信する。
【００９５】
これに対して、読み出したデータにエラーが発生している場合には、第１エラー検査器４１は、予め決められた誤り符合の特定の３ビットを反転させエラーフラグ１を表す誤り訂正符号であるマークをデータに付加する。このデータをエラーフラグ１が付加されたデータと呼ぶ。このエラーフラグ１を表す誤り訂正符号のマークをデータに付加するために反転させる特定の３ビットは、ＥＣＣ生成部１４及び他のエラー検査器がマーク付けするために反転させる特定の３ビットとは異なる。さらに、第１エラー検査器４１は、データ領域にエラーフラグ１を表すマーク補助情報を格納する。そして、第１エラー検査器４１は、エラーフラグ１を付加したデータを第２エラー検査器３２に送信する。
【００９６】
第２エラー検査器３２は、第１エラー検査器４１からデータを受信する。そして、第２エラー検査器３２は、受信したデータのエラーをチェックする。このとき、第２エラー検査器３２は、ＥＣＣ生成部１４及び他のエラー検査器によって付加されたマークはエラーとしては検出しない。ここで、他のエラー検査器とは、第１エラー検査器４１、第３エラー検査器３３、第４エラー検査器３４及び第５エラー検査器４２である。エラーが検出されない場合には、第２エラー検査器３２は、受信したデータに変更を加えずにデータＲＡＭ３１に格納する。
【００９７】
これに対して、受信したデータにエラーが発生している場合には、第２エラー検査器３２は、予め決められた誤り符合の特定の３ビットを反転させエラーフラグ２を表す誤り訂正符号であるマークをデータに付加する。このデータをエラーフラグ２が付加されたデータと呼ぶ。このエラーフラグ２を表す誤り訂正符号のマークをデータに付加するために反転させる特定の３ビットは、ＥＣＣ生成部１４及び他のエラー検査器がマーク付けするために反転させる特定の３ビットとは異なる。さらに、第２エラー検査器３２は、データ領域にエラーフラグ２を表すマーク補助情報を格納する。そして、第２エラー検査器３２は、エラーフラグ２を付加したデータをデータＲＡＭ３１に格納する。
【００９８】
第３エラー検査器３３は、データＲＡＭ３１から第２エラー検査器３２によって格納されたデータを読み出す。そして、第３エラー検査器３３は、読み出したデータのエラーをチェックする。このとき、第３エラー検査器３３は、ＥＣＣ生成部１４及び他のエラー検査器によって付加されたマークはエラーとしては検出しない。ここで、他のエラー検査器とは、第１エラー検査器４１、第２エラー検査器３２、第４エラー検査器３４及び第５エラー検査器４２である。エラーが検出されない場合には、第３エラー検査器３３は、受信したデータに変更を加えずにエラー検出部１５に送信する。
【００９９】
これに対して、読み出したデータにエラーが発生している場合には、第３エラー検査器３３は、予め決められた誤り符合の特定の３ビットを反転させエラーフラグ３を表す誤り訂正符号であるマークをデータに付加する。このデータをエラーフラグ３が付加されたデータと呼ぶ。このエラーフラグ３を表す誤り訂正符号のマークをデータに付加するために反転させる特定の３ビットは、ＥＣＣ生成部１４及び他のエラー検査器がマーク付けするために反転させる特定の３ビットとは異なる。さらに、第３エラー検査器３３は、データ領域にエラーフラグ３を表すマーク補助情報を格納する。そして、第３エラー検査器３３は、エラーフラグ３を付加したデータをエラー検出部１５に送信する。
【０１００】
データの格納、データの読出し及びメモリの開放の要求をソフトウェアから受けた場合、エラー検出部１５は、メモリ２から読み出したデータにＥＣＣ生成部１４が付加したマークが付加されているか否かを判定する。そして、エラー検出部１５は、マークの有無により、メモリ使用違反が発生しているか否かを判定する。メモリ使用違反が発生している場合には、エラー検出部１５は、メモリ使用違反発生を通知するレポートをレジスタ１２に登録する。
【０１０１】
ＥＣＣ生成部１４は、ヒープ領域の獲得時、メモリ領域の開放時及びデータの格納時に、データをキャッシュメモリ３のデータＲＡＭ３１に格納する。ＥＣＣ生成部１４は、マークが付加されたデータ及びマークが消去されたデータのいずれもデータＲＡＭ３１に格納する。
【０１０２】
第４エラー検査器３４は、データＲＡＭ３１に格納されたデータを読み出す。そして、第４エラー検査器３４は、読み出したデータのエラーをチェックする。このとき、第４エラー検査器３４は、ＥＣＣ生成部１４及び他のエラー検査器によって付加されたマークはエラーとしては検出しない。ここで、他のエラー検査器とは、第１エラー検査器４１、第２エラー検査器３２、第３エラー検査器３３及び第５エラー検査器４２である。エラーが検出されない場合には、第４エラー検査器３４は、読み出したデータに変更を加えずに第５エラー検査器４２に送信する。
【０１０３】
これに対して、読み出したデータにエラーが発生している場合には、第４エラー検査器３４は、予め決められた誤り符合の特定の３ビットを反転させエラーフラグ４を表す誤り訂正符号であるマークをデータに付加する。このデータをエラーフラグ４が付加されたデータと呼ぶ。このエラーフラグ４を表す誤り訂正符号のマークをデータに付加するために反転させる特定の３ビットは、ＥＣＣ生成部１４及び他のエラー検査器がマーク付けするために反転させる特定の３ビットとは異なる。さらに、第４エラー検査器３４は、データ領域にエラーフラグ４を表すマーク補助情報を格納する。そして、第４エラー検査器３４は、エラーフラグ４を付加したデータを第５エラー検査器４２に送信する。
【０１０４】
第５エラー検査器４２は、第４エラー検査器３４からデータを受信する。そして、第５エラー検査器４２は、受信したデータのエラーをチェックする。このとき、第５エラー検査器４２は、ＥＣＣ生成部１４及び他のエラー検査器によって付加されたマークはエラーとしては検出しない。ここで、他のエラー検査器とは、第１エラー検査器４１、第２エラー検査器３２、第３エラー検査器３３及び第４エラー検査器３４である。エラーが検出されない場合には、第５エラー検査器４２は、受信したデータに変更を加えずにメモリ２に格納する。
【０１０５】
これに対して、受信したデータにエラーが発生している場合には、第５エラー検査器４２は、予め決められた誤り符合の特定の３ビットを反転させエラーフラグ５を表す誤り訂正符号であるマークをデータに付加する。このデータをエラーフラグ５が付加されたデータと呼ぶ。このエラーフラグ５を表す誤り訂正符号のマークをデータに付加するために反転させる特定の３ビットは、ＥＣＣ生成部１４及び他のエラー検査器がマーク付けするために反転させる特定の３ビットとは異なる。さらに、第５エラー検査器４２は、データ領域にエラーフラグ５を表すマーク補助情報を格納する。そして、第５エラー検査器４２は、エラーフラグ５を付加したデータをメモリ２に格納する。
【０１０６】
以上に説明したように、本実施例に係る情報処理装置は、各所に配置されたエラー検査器でエラーを検出し、独自のチェックコードを生成してデータに付加する。このため、本実施例に係る情報処理装置は、どこでエラーが発生したかを特定することが容易となる。また、本実施例に係る情報処理装置は、メモリの使用状態を表すマークを、各エラー検査器が生成するチェックコードとは異なるチェックコードを用いて生成するので、エラーの発生箇所の特定とともにメモリの不正使用を容易に確認することができる。
【実施例３】
【０１０７】
図１０は、実施例３に係る情報処理装置のブロック図である。本実施例に係る情報処理装置は、実施例２に係る情報処理装置においてメモリの使用状態のマークの付加をメモリコントローラ４が実行する構成である。本実施例に係る情報処理装置は、実施例２に係る情報処理装置に加えてマーク制御部４３をさらに有している。本実施例に係る情報処理装置において、実施例１及び実施例２にかかる情報処理装置と同じ機能を有する各部については説明を省略する。
【０１０８】
ＥＣＣ生成部１４は、ヒープ領域を獲得した場合、ヒープ領域として獲得したメモリ領域のアドレス及び仮のデータの特定の３ビットを反転させて生成したチェックコードを、メモリコントローラ４のマーク制御部４３に通知する。さらに、ＥＣＣ生成部１４は、ヒープ領域として獲得したメモリ領域に格納するデータに生成したチェックコードを付加してメモリ２に格納する指示をマーク制御部４３に通知する。
【０１０９】
そして、ＥＣＣ生成部１４は、生成したチェックコードの付加を行わずにデータＲＡＭ３１に仮のデータを格納する。
【０１１０】
また、ＥＣＣ生成部１４は、プロセスに対してメモリ領域を確保した場合、確保したメモリ領域のアドレス、データに対応する生成したチェックコード及びマーク消去の指示を、メモリコントローラ４のマーク制御部４３に通知する。
【０１１１】
そして、ＥＣＣ生成部１４は、マークの消去を行わずにデータＲＡＭ３１にレジスタ１２１から読み出したデータを格納する。
【０１１２】
また、ＥＣＣ生成部１４は、メモリ領域を開放した場合、開放したメモリ領域のアドレス、仮のデータの特定の３ビットを反転させて生成したチェックコード及びマーク再付加の指示を、メモリコントローラ４のマーク制御部４３に通知する。
【０１１３】
そして、ＥＣＣ生成部１４は、マークの再付加を行わずにデータＲＡＭ３１に仮のデータを格納する。
【０１１４】
マーク制御部４３は、ヒープ領域獲得時、ヒープ領域のアドレス及びチェックコードの情報をＥＣＣ生成部１４から受信する。さらに、マーク制御部４３は、チェックコードを付加してメモリ２に格納する指示をＥＣＣ生成部１４から受ける。そして、マーク制御部４３は、第５エラー検査器４２から受信したデータに対して受信したチェックコードを用いてマークを付加し、ヒープ領域のアドレスを有するメモリ２の領域にデータを格納していく。マーク制御部４３は、ヒープ領域の全ての領域にマークを付加したデータを格納する。
【０１１５】
マーク制御部４３は、メモリ領域の確保時、確保したメモリ領域のアドレス、チェックコードの情報及びマークの消去の指示をＥＣＣ生成部１４から受ける。そして、マーク制御部４３は、第５エラー検査器４２から受信したデータに対してＥＣＣ生成部１４から受信したチェックコードを付加してマークを消去し、確保したメモリ領域のアドレスを有するメモリ２の領域にデータを格納していく。マーク制御部４３は、確保したメモリ領域の全ての領域にマークを付加したデータを格納する。
【０１１６】
マーク制御部４３は、メモリ領域開放時、開放したメモリ領域のアドレス、チェックコードの情報及びマークの再付加の指示をＥＣＣ生成部１４から受ける。そして、マーク制御部４３は、第５エラー検査器４２から受信したデータに対して受信したチェックコードを用いてマークを付加し、開放したメモリ領域のアドレスを有するメモリ２の領域にデータを格納していく。マーク制御部４３は、開放したメモリ領域の全ての領域にマークを付加したデータを格納する。
【０１１７】
以上に説明したように、本実施例に係る情報処理装置は、プロセッサコアがメモリコントローラにマークの付加及び削除を指示し、それを契機にメモリコントローラがマークの付加又は削除を繰り返す。これにより、マーク生成及び削除によるプロセッサコアの負荷を軽減でき、また、プロセッサコアとメモリとの間のバスへの負荷を軽減することができる。
【符号の説明】
【０１１８】
１  プロセッサコア
２  メモリ
３  キャッシュメモリ
４  メモリコントローラ
５  プログラム
１１  演算器
１２  レジスタ
１３  命令制御部
１４  ＥＣＣ生成部
１５  エラー検出部
５１  ヒープ領域獲得部
５２  領域確保部
５３  領域開放部
５４  データ処理部
１３１  マーク付加部
１３２  マーク消去部
１４１  ビット反転部
１４２  コード生成部
１４３  データ格納部
【図１】
0005464226.tif 000002
【図２】
0005464226.tif 000003
【図３】
0005464226.tif 000004
【図４Ａ】
0005464226.tif 000005
【図４Ｂ】
0005464226.tif 000006
【図４Ｃ】
0005464226.tif 000007
【図５】
0005464226.tif 000008
【図６】
0005464226.tif 000009
【図７】
0005464226.tif 000010
【図８】
0005464226.tif 000011
【図９】
0005464226.tif 000012
【図１０】
0005464226.tif 000013