(57)【要約】メモリ領域のアドレスを記憶する第１レジスタと、メモリ領域のサイズを記憶する第２レジスタと、領域保護装置に供給されたメモリアドレス及び第１レジスタ内のアドレス値に対する演算機能を実行する演算機能ブロックとを具えたメモリ領域保護装置を開示する。この領域保護装置はさらに、演算機能ブロックの出力を第２レジスタ内のサイズ値と比較する比較器を具え、この比較器は、バス上のメモリアドレスの有効性を信号通知するための出力に結合されている。この領域保護装置は、領域保護装置に対して発行された命令からメモリ領域のアドレス及びメモリ領域のサイズを取り出して、領域保護装置を上記メモリ領域に関連付け、他の命令に応答して領域保護装置をメモリ領域と無関連にするように構成されたコントローラを有する。
2009524140.tif 000002
【特許請求の範囲】
【請求項１】
メモリ領域保護装置において、
メモリ領域の境界アドレスを記憶する第１レジスタと；
前記メモリ領域のサイズを記憶する第２レジスタと；
前記メモリ領域保護装置に供給されたメモリアドレス及び前記第１レジスタ内のアドレス値に対する演算機能を実行する演算機能ブロックと；
前記演算機能ブロックの出力を前記第２レジスタ内の前記サイズと比較する比較器であって、前記供給されたメモリアドレスの有効性を信号通知するための出力端子に結合された比較器と；
前記メモリ領域保護装置に対して発行された１つ以上の命令に応答して、前記メモリ領域の境界アドレスを前記第１レジスタに記憶し、前記メモリ領域のサイズを前記第２レジスタに記憶して、前記メモリ領域保護装置を前記メモリ領域に関連付け、前記メモリ領域保護装置に対して発行された他の命令に応答して、前記メモリ領域保護装置を前記メモリ領域と無関連にするように構成されたコントローラと
を具えていることを特徴とするメモリ領域保護装置。
【請求項２】
さらに、
前記コントローラに応答するマルチプレクサを具え、前記マルチプレクサは、前記第２レジスタに結合された第１入力端子と、最大領域サイズを示す値に結合された第２入力端子と、前記比較器に結合された出力端子とを有することを特徴とする請求項１に記載のメモリ領域保護装置。
【請求項３】
さらに、
関数スコープ識別子を記憶する第３レジスタを具え、
前記演算機能ブロックがさらに、前記メモリ領域保護装置に供給された第２の関数スコープ識別子及び前記第３レジスタに記憶されている前記関数スコープ識別子に対する演算機能を実行するように構成され、
前記マルチプレクサが、固定値源に結合された第３入力端子を有することを特徴とする請求項２に記載のメモリ領域保護装置。
【請求項４】
前記第１レジスタ及び前記第３レジスタが、前記コントローラに応答する第２のマルチプレクサ経由で前記演算機能ブロックに結合されていることを特徴とする請求項３に記載のメモリ領域保護装置。
【請求項５】
さらに、
前記比較器の出力端子に結合された第１入力端子と、前記コントローラの出力端子に結合された第２入力端子と、前記メモリ領域保護装置の出力端子に結合された出力端子とを有する論理和ゲートを具えていることを特徴とする請求項１〜４のいずれかに記載のメモリ領域保護装置。
【請求項６】
データ通信バスと；
前記データ通信バスに結合され、データを記憶するための複数のメモリ領域を有するメモリ装置と；
前記データ通信バスに結合され、前記データを処理する処理装置と；
複数の、請求項１〜５のいずれかに記載のメモリ領域保護装置であって、各々が、前記メモリ装置の前記複数のメモリ領域の１つに関連付け可能であるメモリ領域保護装置と；
前記データ通信バスと前記複数のメモリ領域保護装置との間に結合され、前記処理装置による前記メモリ装置へのアクセスを制御する領域保護装置コントローラであって、前記処理装置と前記複数のメモリ領域保護装置との間で前記命令を伝達するように構成された領域保護装置コントローラと
を具えていることを特徴とする集積回路装置。
【請求項７】
前記複数のメモリ領域保護装置がデイジーチェーンの形に編成され、前記デイジーチェーン内の後続する前記メモリ領域保護装置の前記コントローラは、当該メモリ領域保護装置に先行する前記メモリ領域保護装置の前記コントローラの出力端子に結合された入力端子を有し、前記デイジーチェーンの終端にある前記メモリ領域保護装置の前記コントローラは、前記領域保護装置コントローラに結合されていることを特徴とする請求項６に記載の集積回路装置。
【請求項８】
前記デイジーチェーンの第１部分が、前記複数のメモリ領域保護装置の第１部分で構成され、前記第１部分を構成する前記メモリ領域保護装置の各々が、前記メモリ装置のヒープ領域に関連付け可能であり、前記デイジーチェーンの第２部分が、前記複数のメモリ領域保護装置の第２部分で構成され、前記第２部分を構成する前記メモリ領域保護装置の各々が、前記メモリ装置のスタック領域に関連付け可能であることを特徴とする請求項７に記載の集積回路装置。
【請求項９】
前記集積回路装置がシステム・オン・チップで構成されることを特徴とする請求項６、７または８に記載の集積回路装置。
【請求項１０】
前記集積回路装置がシステム・イン・パッケージで構成されることを特徴とする請求項６、７または８に記載の集積回路装置。
【請求項１１】
請求項６〜１０のいずれかに記載の集積回路装置内の前記処理装置によって実行されるソフトウェア・プログラムにおいて、
前記複数のメモリ領域保護装置の１つを、前記メモリ装置内の１つの前記メモリ領域に関連付けるための第１命令であって、前記メモリ領域のサイズを規定する第１パラメータを含む第１命令と；
前記関連付けられた前記メモリ領域保護装置に、前記メモリ領域の下限アドレスを供給するための第２パラメータと；
メモリアドレス値を規定するパラメータを含み、前記複数のメモリ領域保護装置に、前記メモリアドレス値が前記複数のメモリ領域保護装置のそれぞれに関連付けられた前記メモリ領域内にあるか否かをチェックすることを命令する第２命令と；
前記メモリ装置内の１つの前記メモリ領域の特性に対応する第３パラメータを含み、前記メモリ領域保護装置を前記メモリ領域と無関連にするための第３命令と
を具えていることを特徴とするソフトウェア・プログラム。
【請求項１２】
前記第１命令が前記第２パラメータを含むことを特徴とする請求項１１に記載のソフトウェア・プログラム。
【請求項１３】
さらに、関数スコープ識別子を規定する第４パラメータを含むことを特徴とする請求項１１に記載のソフトウェア・プログラム。
【請求項１４】
前記第１命令が前記第４パラメータを含むことを特徴とする請求項１３に記載のソフトウェア・プログラム。
【請求項１５】
前記第２パラメータ及び前記第４パラメータが、１つ以上の別個の命令中に含まれることを特徴とする請求項１３に記載のソフトウェア・プログラム。
【請求項１６】
前記メモリ領域の特性が、当該メモリ領域に属するメモリアドレスであることを特徴とする請求項１１に記載のソフトウェア・プログラム。
【請求項１７】
前記メモリ領域の特性が、関数スコープ識別子であることを特徴とする請求項１１に記載のソフトウェア・プログラム。
【請求項１８】
請求項１１〜１７のいずれかに記載のソフトウェア・プログラムを具えていることを特徴とするコンピュータ可読記憶媒体。
【請求項１９】
請求項６に記載の集積回路装置を用意するステップと；
第１命令を前記領域保護装置コントローラに対して発行することによって、所定機能の実行用のメモリ領域を前記処理装置に割り当てるステップであって、前記第１命令が前記メモリ領域のサイズを含むステップと；
前記複数のメモリ領域保護装置に前記第１命令を転送して、前記複数のメモリ領域保護装置の１つが前記メモリ領域を保護するために利用可能であるか否かをチェックするステップと；
前記複数のメモリ領域保護装置の１つが、前記メモリ領域を保護するために利用可能である場合に、
前記メモリ領域のサイズを前記第２レジスタに記憶することによって、当該メモリ領域保護装置を前記メモリ領域に関連付け；
当該メモリ領域保護装置に、前記メモリ領域の境界アドレスを供給し；
前記境界アドレスを前記第１レジスタに記憶するステップと；
前記複数のメモリ領域保護装置のすべてが、前記メモリ領域を保護するために利用可能でない場合に、
前記複数のメモリ領域保護装置が利用可能でないことを示す信号を供給するステップと
を具えていることを特徴とするメモリ装置の領域保護方法。
【請求項２０】
さらに、
前記メモリ装置のアドレスに対応するパラメータを含むメモリアクセス命令を、前記領域保護装置コントローラに対して発行するステップと；
前記メモリアクセス命令を前記複数のメモリ領域保護装置に転送して、前記メモリ装置内の、前記複数のメモリ領域保護装置のいずれかに関連する領域内に前記アドレスが存在するか否かをチェックするステップと；
前記アドレスが、前記メモリ領域保護装置のいずれかに関連する領域内に存在する場合に、前記アドレスの有効性の指標を供給するステップと
を具えていることを特徴とする請求項１９に記載の方法。
【請求項２１】
さらに、
前記処理装置による所定機能の実行の完了時に、前記メモリ装置内の前記メモリ領域の特性に対応するパラメータを含む第４命令を、前記領域保護装置コントローラに対して発行することによって、前記処理装置によって使用されたメモリ領域を解放して、前記メモリ領域保護装置を前記メモリ領域と無関連にするステップと；
前記第４命令を前記複数のメモリ領域保護装置に転送して、前記メモリ領域保護装置の１つが前記メモリ領域に関連するか否かをチェックするステップと；
前記メモリ領域保護装置の１つが前記メモリ領域に関連する場合に、当該メモリ領域保護装置を前記メモリ領域と無関連にするステップと
を具えていることを特徴とする請求項１９または２０に記載の方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、メモリの領域を保護する領域保護装置に関するものである。
【０００２】
本発明はさらに、複数の領域保護装置を含む集積回路（ＩＣ）装置に関するものである。
【０００３】
本発明はさらに、こうしたＩＣ装置用の命令セットに関するものである。
【０００４】
本発明はさらに、メモリの領域を保護する方法に関するものである。
【背景技術】
【０００５】
オーディオ及びビデオ機器に対する厳しい要求を満足するために、業界は、完結したシステムの単一チップ上への集積、いわゆるシステム・オン・チップ（ＳｏＣ）、あるいはいわゆるシステム・イン・パッケージ（ＳｉＰ）のような単一パッケージ内への集積に向かって動いている。今日、一般的なＳｏＣは既に、複数の、場合によっては異質のプロセッサコア及び専用ハードウェア周辺回路を具えている。このハードウェア上に、何層かのソフトウェア（ドライバ、オペレーティングシステム、ストリーミング及び制御層）を積み重ねて、家庭用及びモバイル機器に使用される完結したオーディオ／ビデオ応用製品を構築している。
【０００６】
こうした複合型ＳｏＣ応用の開発は、その正確さを検証する必要性を含む。業界では、これらの応用向けの組み込みソフトウェアをデバッグすることがますます困難になっていることが示される傾向が見られる。ＳｏＣ上で実行中のソフトウェアにおけるエラーの箇所を迅速かつ容易に見つけることは、各ソフトウェア・コンポーネント（構成要素）の可観測性の限界により、一般に困難である。その結果、この作業はより高価になる。現在、業界は、プロジェクトの合計時間の平均５０％を、ハードウェア及びソフトウェアの両方のポストシリコン（加工済みシリコンの）デバッグに費やしている。製品化までの時間（短縮）の圧力により、シリコン上のソフトウェア・デバッグに費やす時間及びリソースの量を低減することがより重要になる。
【０００７】
【非特許文献１】”ARM 1156T2F-S Technical Reference Manual”, 2005
【０００８】
不正なメモリアクセスは一般に、ＩＣアーキテクチャ上で実行中のソフトウェアにおける（ランタイム（実行中の））エラーを生じさせ、不正なメモリアクセスに対する保護を提供する保護を提供するＩＣアーキテクチャの例は、ＡＲＭ社の”ARM 1156T2F-S Technical Reference Manual”, 2005中に開示され、インターネット（http://www.arm.com/documentation/ARMProcessor Cores/index.html、2006年1月11日）から検索される。ARM 1156T2-F-Sプロセッサは、ハードウェア上で実現されたメモリ保護装置を含み、ここではメモリが連続領域に分割される。このメモリ保護装置は、ベースアドレス、並びにルックアップテーブル（ＬＵＴ）内の領域毎の領域サイズに対応する５ビットの値を記憶する。メモリアクセス毎に、ＬＵＴをチェックして対応する領域を見つけなければならない。同様に、メモリ割り当て（解放（デアロケーション））時に、ＬＵＴ内の適切なエントリをリセットしなければならない。こうしたメモリ保護アーキテクチャの動作は時間を要することがあり、メモリを、各々が固定のメモリ位置から始まる等しいサイズの連続領域に分割しなければならないことにより、フレキシビリティ（柔軟性）に欠ける。
【発明の開示】
【発明が解決しようとする課題】
【０００９】
本発明は、集積回路装置用のソフトウェア・アプリケーションのより短い開発時間をもたらす、集積回路装置の改善されたデバッグ能力を提供することを追求する。より詳細には、本発明は、ポストシリコンのアプリケーション（応用製品）開発中のランタイム（実行時の）メモリ不正アクセスの問題をデバッグするための方法及びインフラストラクチャ（基盤）を提供することを追求する。
【課題を解決するための手段】
【００１０】
本発明の第１の態様によれば、メモリ領域保護装置（ＲＰＵ：Region Protection Unit）が提供され、このＲＰＵは、メモリ領域の境界アドレスを記憶する第１レジスタと；メモリ領域のサイズを記憶する第２レジスタと；メモリ領域保護装置に供給されたメモリアドレス及び上記第１レジスタ内のアドレス値に対する演算機能を実行する演算機能ブロックと；この演算機能ブロックの出力を上記第２レジスタ内のサイズ値と比較する比較器（コンパレータ）であって、供給されたメモリアドレスの有効性を信号通知するための出力に結合された比較器と；ＲＰＵに対して発行された１つ以上の命令に応答して、ある領域について、メモリ領域境界を上記第１レジスタに記憶し、メモリ領域サイズを上記第２レジスタに記憶して、メモリ領域保護装置を当該領域に関連付け、ＲＰＵに対して発行された他の命令に応答して、メモリ領域保護装置を当該領域と無関連にするように構成されたコントローラとを具えている。
【００１１】
こうしたＲＰＵは、適切な命令を用いてソフトウェアで構成することができるという利点を有し、このことは、例えば、上記領域保護装置に関連するメモリ領域のサイズの意味で、領域保護装置のフレキシビリティを改善し、一方では、この領域保護装置は、メモリ保護アルゴリズムはハードウェアで実現されるということにより、動作中に良好な性能を示す。
【００１２】
上記ＲＰＵはさらに、上記コントローラに応答するマルチプレクサ（多重器）を具えることができ、このマルチプレクサは、上記第２レジスタに結合された第１入力端子と、最大領域サイズを示す値に結合された第２入力端子と、上記比較器に結合された出力端子とを有する。このことはＲＰＵのフレキシビリティをさらに増強する、というのは、種々のＲＰＵを、指定された最大サイズによって示される種々のサイズのメモリ領域を保護するように構成又は設計することができるからである。ＲＰＵがメモリ領域を保護することのできるサイズの意味でのこうした適合性は、所定の最大サイズとＲＰＵに供給された領域サイズとの比較を行わせる専用命令でチェックすることができる。
【００１３】
上記ＲＰＵはヒープ（動的に割り付けられたデータ領域）並びにスタックと関連付けることができる。後者については、ＲＰＵはさらに、関数スコープ（関数の影響アドレス範囲）識別子を記憶するための他のレジスタを具えることができ、上記演算機能ブロックはさらに、領域保護装置に供給された他の関数スコープ識別子に対する演算機能を実行するように構成され、上記マルチプレクサは固定値源（ソース）に結合された第３入力端子を有する。このようにして、すべてのＲＰＵに関数スコープ識別子を供給し、供給された識別子を上記他のレジスタに記憶された値と比較することによって、適切なＲＰＵを見出すこと、及び／またはスタックと無関連にすることができる。
【００１４】
上記第１レジスタ及び上記他のレジスタは、上記コントローラに応答する他のマルチプレクサ経由で上記演算機能ブロックに結合されていることが有利である。このことは、上記コントローラによる適切なレジスタの容易な選択を可能にする。
【００１５】
好適例では、上記ＲＰＵはさらに論理和（ＯＲ）ゲートを具え、この論理和ゲートは、上記比較器に結合された第１入力端子、上記コントローラの出力端子に結合された第２入力端子、及び上記領域保護装置の出力端子に結合された出力端子を有する。このことは、こうしたＲＰＵをＲＰＵのデイジーチェーンの形に結合することを可能にする。例えば、ＲＰＵの１つが有効アドレスを検出し次第、このイベント（事象）を示す信号を、上記論理和ゲート介してすべてのＲＰＵのコントローラを通して波及させることができ、上記デイジーチェーンの終端のＲＰＵは、上記有効アドレスを含むメモリ領域の、上記デイジーチェーン内の１つのＲＰＵへの有効な関連付けを信号通知する。
【００１６】
本発明の他の態様によれば、集積回路（ＩＣ）装置が提供され、この集積回路装置は、データ通信バスと、このバスに結合され、データを記憶するための複数の領域を有するメモリ装置と、このバスに結合され、上記データを処理する処理装置と、各々が上記メモリ装置のある領域に関連付け可能な複数の本発明によるＲＰＵと、上記バスと上記複数のＲＰＵとの間に結合されたＲＰＵコントローラとを具え、このＲＰＵコントローラは、上記処理装置と上記複数のＲＰＵとの間で命令を伝達するように構成されている。
【００１７】
本発明のＩＣ装置は、ＳｏＣのようなシングル（単一）ダイベースのもの、あるいはＳｉＰのようなアセンブリ製品とすることができ、上記メモリ装置の保護のためのハードウェア（ＨＷ）／ソフトウェア（ＳＷ）混成の解決法（ハイブリッド・ソリューション）を具え、上記メモリ装置は単一メモリまたは複数のメモリで構成することができる。この混成の解決法は、ＲＰＵ及びＲＰＵコントローラに対する限定されたＨＷ面積のオーバヘッドという犠牲を払って、動作中、例えばデバッグ中に、メモリ保護アーキテクチャがＩＣ装置の性能に対して少しのオーバヘッドしか与えないことを保証する。
【００１８】
上記複数の領域保護装置はデイジーチェーンの形に編成することが好ましく、ここで、後続する領域保護装置のコントローラは、先行する領域保護装置のコントローラの出力端子に結合された入力端子を有し、デイジーチェーンの終端の領域保護装置のコントローラの出力端子は上記領域保護装置（ＲＰＵ）コントローラに結合されている。このことは、単一命令をＲＰＵコントローラからデイジーチェーン化されたすべてのＲＰＵに同報することを促進し、チェーン内の終端のＲＰＵの出力端子は例えば、ある条件、例えばある領域内のメモリアドレスがＲＰＵの１つによって保護されていることの存在または不在を、この条件が、ＲＰＵ内部のコントローラのデイジーチェーン化された経路を通してカスケード（順次）転送されることにより、ＲＰＵコントローラに信号通知する。
【００１９】
１つの好適例では、上記デイジーチェーンの第１部分は、上記複数の領域保護装置の第１部分から成り、この第１部分を構成する各領域保護装置は上記メモリ装置のヒープ領域に関連付け可能であり、上記デイジーチェーンの第２部分は、上記複数の領域保護装置の第２部分から成り、この第２部分を構成する各領域保護装置は上記メモリ装置のスタック領域に関連付け可能である。本発明のＩＣ装置は、混合されたメモリ・アーキテクチャ、即ち、ヒープ及びスタックを共に使用するアーキテクチャの保護を可能にし、このことは、各々が保護すべきメモリ領域の種類用に最適化された異なる種類のＲＰＵを用いることによって促進される。
【００２０】
本発明の他の態様によれば、本発明の集積回路装置内の上記処理装置によって実行されるソフトウェア・プログラムが提供され、このプログラムは、第１命令、第２命令、及び第３命令を具え、第１命令は、上記複数の領域保護装置からのある領域保護装置を上記メモリ装置のある領域に関連付け、上記領域のサイズを規定するパラメータと、この領域の下限アドレスを上記関連付けられた領域保護装置に供給するための第１の他のパラメータとを含み、第２命令は、メモリアドレス値を含むパラメータを含み、上記複数の領域保護装置に、上記メモリアドレス値がそれぞれの領域保護装置に関連付けられた領域内にあるか否かをチェックすることを命令し、第３命令は、上記メモリ装置のある領域の特性に対応するパラメータを含み、領域保護装置をこの領域と無関連にする。こうしたソフトウェア・プログラムは、ＣＤ−ＲＯＭ、ＤＶＤ、メモリースティック（登録商標）、インターネットでアクセス可能なデータベース、等のようなコンピュータ可読記憶媒体上に記憶することができ、本発明のＩＣ装置に対する高速のメモリ保護を促進する。
【００２１】
上記第１命令はさらに、スタックベースのメモリ領域を保護するＲＰＵと共に使用される関数スコープ識別子を規定する第２の他のパラメータを含み、これらのメモリ領域は一般に、所定の関数スコープに関連する。上記第１命令は、上記第１及び第２の他のパラメータを含むことができ、あるいはまた、上記第１及び第２の他のパラメータは、上記下限アドレスを与えるための第１専用命令、及び上記関数スコープ識別子を与えるための第２専用命令のような１つ以上の別個の命令で構成することができる。
【００２２】
上記第３命令のパラメータの特性は、メモリ（境界）アドレスまたは関数スコープ識別子とすることができ、このことは、ＲＰＵが、当該ＲＰＵを無関連にするための命令を識別することを可能にする。
【００２３】
本発明のさらに他の態様によれば、メモリ装置の領域を保護する方法が提供され、この方法は、本発明の集積回路装置を用意するステップと、メモリ領域を上記処理装置に割り当てて、第１命令を上記領域保護装置（ＲＰＵ）コントローラに対して発行することによって所定機能を実行するステップであって、上記第１命令は上記メモリ領域のサイズを含むステップと、ある領域保護装置が利用可能である場合に、上記メモリ領域のサイズを当該領域保護装置の上記第２レジスタに記憶することによって、この利用可能な領域保護装置を上記メモリ領域に関連付けるステップと、上記メモリ領域の境界アドレスを上記領域保護装置に供給するステップと、この境界アドレスを当該領域保護装置の上記第１レジスタに記憶するステップと、ある領域保護装置が利用不可能である場合に、この領域保護装置が利用不可能であることを示す信号を供給するステップとを具えている。この方法は、ごくわずかなハードウェア及び性能オーバヘッドという犠牲を払って、実行時（ランタイム）のメモリ保護を促進する。
【００２４】
この方法はさらに、メモリアクセス命令を上記領域保護装置コントローラに対して発行するステップであって、この命令が、上記メモリ装置のアドレスに対応するパラメータを含むステップと、このアクセス命令を複数の領域保護装置に転送して、上記アドレスが、上記メモリ装置内の、上記領域保護装置のいずれかに関連するある領域内にあるか否かをチェックするステップと、上記アドレスの有効性の指標を供給するステップとを具えている。このことは、例えば上記処理装置上で実行中のソフトウェアによる、不正なメモリアクセスの迅速な検出を促進する。
【００２５】
上記方法はさらに、上記処理装置による所定機能の実行の完了時に、他の命令を上記領域保護装置コントローラに対して発行することによって、この処理装置によって使用されたメモリ領域を解放するステップであって、この命令は、上記メモリ装置のある領域の特性に対応するパラメータを含み、これにより領域保護装置をこのメモリ領域と無関連にするステップと；上記他の命令を上記複数の領域保護装置に転送して、ある領域保護装置の上記メモリ領域との関連性をチェックするステップと、この領域保護装置が上記メモリ領域に関連する場合に、この領域保護装置を上記メモリ領域と無関連にするステップとを具えている。このことは、例えば上記メモリ領域の境界アドレス、保護されるメモリ領域のアドレス、または関数スコープ識別子を、上記他の命令のパラメータとして供給することによって、ＲＰＵリソースのメモリ保護アーキテクチャからの解放を促進する。
【発明を実施するための最良の形態】
【００２６】
以下、図面を参照した本発明の非限定的な実施例によって、本発明をより詳細に説明する。
【００２７】
なお、各図面は単なる概略的なものであり、一定寸法比で描いたものではない。また、全図面を通して、同一参照番号は同一または同様の部分を示すために使用する。
【実施例１】
【００２８】
図１に、本発明によるＲＰＵ１００の第１実施例を示す。ＲＰＵ１００は、データ線、例えばデータ通信バス１６３に結合された第１レジスタ１１０及び第２レジスタ１２０を有する。第１レジスタ１１０は、ＲＰＵ１００が関連するメモリ領域の境界アドレス値、即ち、このメモリ領域の上限または下限を規定するアドレス値を記憶し、第２レジスタ１２０はこのメモリ領域のサイズを記憶する。ＲＰＵ１００はさらに、演算機能ブロック１４０、例えば減算ユニットを具え、演算機能ブロック１４０は、データ通信バス１６３に結合された第１入力端子、及び第１レジスタ１１０に結合された第２入力端子を有する。演算機能装置１４０の出力端子は比較器（コンパレータ）１５０の入力端子に結合され、比較器１５０は、第２レジスタ１２０に結合された他の入力端子を有する。比較器１５０の出力端子は、随意的な論理和（ＯＲ）ゲートを介してＲＰＵの出力端子１６２に結合されている。ＲＰＵ１００は、第１レジスタ１１０及び第２レジスタ１２０を設定するためのコントローラ１６０を有する。このコントローラは、ＲＰＵの入力端子１６１、クロック信号線１６４、及びデータ入力線１６５に結合され、入力線１６５上で、コントローラ１６０は設定及び動作命令を、処理装置のような外部回路（図示せず）から受信することができる。ＲＰＵ１００は、コントローラ１６０の制御下にあるマルチプレクサ（ＭＵＸ）１５２を具え、ＭＵＸ１５２は、第２レジスタ１２０に結合された第１入力端子と、ＲＰＵ１００が保護することのできるメモリ領域の最大サイズを規定する所定値ＭＡＸＳＩＺＥ＋１に結合された第２入力端子と、比較器１５０の上記他の入力端子に結合された出力端子とを有する。あるいはまた、ＭＡＸＳＩＺＥ＋１はコントローラ１５０または比較器１５０内にハードウェア符号化することができる。ハードウェアベースのＲＰＵ１００は、適切なソフトウェア、即ち、好適にはアプリケーション・プログラム・インタフェース（ＡＰＩ）としてグループ化された一組の命令によって制御して、ＲＰＵ１００を設定し動作させることができる。代表的な命令フロー、及びＲＰＵ１００のハードウェア上でのこれらの命令フローの実現の例は以下に説明する。
【００２９】
初期命令として、コントローラ１６０はリセット命令を受信することができる。この命令は、コントローラ１６０をトリガして、第１レジスタ１１０及び第２レジスタ１２０の内容のようなＲＰＵ１００のすべての内部設定、及びＲＰＵの出力端子１６２において供給される出力信号をクリアする。一般に、ＲＰＵ１００は、ＲＰＵ１００が使用中であるか否かを示す内部フラグ（図示せず）を具えている。このフラグは、この命令の受信時にもリセットされる。
【００３０】
次の命令は、ＲＰＵ１００がこの命令によって指定されたメモリ領域サイズを保護するのに十分であるか否かをＰＲＵ１００に質問するものとすることができる。コントローラ１６０はＲＰＵの入力１６１をチェックして、他のＲＰＵ１００が既にこの割り当てを受け入れているか否かをチェックする。これについては後により詳細に説明する。保護すべきメモリ領域のサイズは、データ通信バス１６３上で利用可能にされ、コントローラ１６０はＭＵＸ１５２のＭＡＸＳＩＺＥ＋１の方の入力を選択する。その結果、比較器１５０は、ＲＰＵ１００をこのメモリ領域に関連付けることができるか否か、即ち、ＲＰＵ１００が十分大きいか否かを示す。関連付けることができる場合には、コントローラ１６０は第１内部フラグ（図示せず）を、ＲＰＵ１００がこの割り当てを受け入れたことを示す値にセットし、同時に、保護すべきメモリ領域のサイズを第２レジスタ１２０に記憶させる。随意的に、コントローラ１６０はその出力１６６をアサート（有効を示す値に）し、これにより、ＲＰＵ出力１６２をアサートされた状態にする。このアサートされた出力は、要求された保護が割り当てられたことを他のＲＰＵ１００に信号通知する。あるいはまた、比較器１５０のアサートされた出力を代わりに、この目的に用いることができる。
【００３１】
一般に、ＲＰＵ１００のＲＰＵ出力端子１６２は、他のＲＰＵ１００のＲＰＵ入力端子１６１に結合されている。このようにして、ＲＰＵの階層的なデイジーチェーンを形成することができる。
【００３２】
こうしたデイジーチェーンでは、２つ以上のＲＰＵが、指定されたメモリ領域の割り当てを同時に受け入れた場合に、より下位のランク、即ち後続または下流側のＲＰＵは、より上位のランク、即ち先行または上流側のＲＰＵからアサートされた出力の受信時に、当該ＲＰＵをこの割り当てと無関連にする。複数のＰＲＵが単一のメモリ領域に関連付けられることを回避するためには、他の（下位ランクの）ＲＰＵが、このようにアサートされた出力信号を次のクロック周期内に受信することが重要である。ＲＰＵ間の信号経路は少数の論理素子しか含まないが、このことは、信号が単一クロックサイクル内にいくつかのＲＰＵコントローラに達し得るが、非常に長いデイジーチェーンの場合は、この信号は必ずしもすべての下流側のＲＰＵに達することができないことを意味する。この目的のために、キャリー・ルックアヘッド信号のような追加的信号経路を設けて、各ＲＰＵによるこの信号の適時の受信を保証することができる。こうした技術自体は既知であり、この理由によりさらに説明しない。
【００３３】
なお、この機能の実行中には、第１レジスタ１１０は０の値を有して、データ通信バス１６３上のメモリ領域サイズを無変更のままで、演算機能ブロック１４０を通過させる。あるいはまた、このモードでは、演算機能ブロック１４０の付近の一組のマルチプレクサ（図示せず）によって演算機能ブロック１４０をバイパスさせる。他の解決法も当業者にとって明らかである。
【００３４】
ＲＰＵが前述した割り当てを受け入れると、保護すべきメモリ領域の境界アドレス、例えば下限アドレスを指定する他の命令を発行する。この命令は、その第１内部フラグをアサートしたＲＰＵ１００、即ち、メモリ保護の割り当てを受け入れたＲＰＵ１００によって取得される。この境界アドレスは、データ通信バス１６３経由で供給され、コントローラ１６０は第１レジスタ１１０にこの値を捕捉させる。コントローラ１６０は他の内部フラグ（図示せず）を、ＲＰＵ１００が現在使用中であることを示す値に設定して、その第１内部フラグをクリアする。このモードでは、コントローラ１６０はその入力信号１６１及び出力信号１６６を使用しない。その代わりに、前に説明したように、上記境界アドレスは、あるメモリ領域を保護するためにＲＰＵが利用可能であるか否かをチェックする命令に含めることもできる。
【００３５】
次に、適切な命令によって信号通知されるチェックアドレスモードでは、ＲＰＵ１００は、データ通信バス１６３経由で受信したアドレスが、ＲＰＵ１００が関連付けられたメモリ領域内に入るか否かをチェックする。この目的のために、コントローラ１６０は演算機能ブロック１４０を起動させ、演算機能ブロック１４０は、第１レジスタ１１０に記憶されたメモリ領域の境界（下限）アドレスを、データ通信バス１６３上で受信したアドレスから減算する。また、コントローラ１６０は、ＭＵＸ１５２の、第２レジスタに結合された方の入力を選択して、比較器１５０が演算機能ブロック１４０の結果を第２レジスタ１２０に記憶された領域サイズ値と比較することを促進し、比較器１５０は、減算ユニットとして、あるいは他の適切な演算機能ブロックとして実現することができる。
【００３６】
比較器１５０の出力は、データ通信バス１６３上のアドレスが、第１レジスタ１１０に記憶された下限アドレス以上であるが、これら２つの値の差は上記メモリ領域のサイズを超えないことを示す信号である。あるいはまた、レジスタ１１０において上限アドレスを用いることができ、この場合には、比較器１５０は、データ通信バス１６３上のアドレスがこの上限アドレス以下であることを信号通知する。要するに、比較器の発生信号は、データ通信バス１６３上のアドレスが、ＲＰＵ１００によって保護されるメモリ領域内にあるか否かを示す。
【００３７】
ＲＰＵの出力端子１６２上で供給される出力信号は、比較器１５０によって供給される信号と、ＲＰＵの入力端子１６１上で受信したカスケード（順次）転送された入力信号との論理和（ＯＲ）である。この信号は、比較器１５０または他のＲＰＵが、データ通信バス１６３上に供給されるアドレスが、このＲＰＵが保護するメモリ領域内に入ることを信号通知した場合にアサートされる。この信号は複数の目的に使用することができる。例えば、有効アドレスの検出の場合には、この信号は、保護されたメモリ領域へのアクセスを許可するために使用することができ、あるいは、指定されたアドレスが有効アドレスであることを示すフラグをセットするために使用することができる。これとは対照的に、無効アドレスについては、（デアサート（無効を示す値に）された）信号が、評価目的で、例えば無効アドレスの指定に至る障害の発生源をトレースバックする（辿る）ために、ＲＰＵアーキテクチャがその一部をなすシステムの動作中断及びその後の状態捕捉をトリガする。
【００３８】
最後に、ＲＰＵ１００をメモリ領域と無関連にする命令を、ＲＰＵ１００に供給することができる。この目的のために、このメモリ領域の特性に対応するパラメータ、例えば第１レジスタ１１０に記憶された保護されるメモリ領域の境界アドレス、あるいはこの領域内にあるアドレスを、データ通信バス１６３に供給する。他の内部フラグをアサートしたＲＰＵ１００、即ち使用中のＲＰＵ１００のコントローラ１６０は、データ通信バス１６３上の値を第１レジスタ１１０に記憶された値と比較することを演算機能ブロック１４０に命令する。これらの値が一致する場合には、コントローラ１６０は自分の他のフラグをデアサートして、ＲＰＵ１００が再び利用可能になったことを示す。またコントローラ１６０は、第１レジスタ１１０及び第２レジスタ１２０の内容を強制的にリセットする。
【実施例２】
【００３９】
ＲＰＵ１００のこの実施例は、ヒープ型のメモリ領域を保護するのに特に適している。図２に、スタック型のメモリ領域を保護するのに特に適したＲＰＵ２００の実施例を示す。ＲＰＵ１００に加えて、ＲＰＵ２００は、ＲＰＵ２００が保護することのできるスタックに関連する機能識別子を記憶する第３レジスタ１３０を具えている。一般に、スタックは特定の関数スコープの一次的変数及び／または内部変数用に用いられる。このスコープの識別子の記憶は有用であり、これについては後により詳細に説明する。ＲＰＵ２００はさらに、ＭＵＸ１５２上に追加的な固定値入力端子を有し、そして、第１レジスタ１１０と第３レジスタ１３０との間の選択を促進するための、コントローラ１６０の制御下にある追加的なＭＵＸ１４２を有する。
【００４０】
ＲＰＵ２００は、ＲＰＵ１００について説明したのと同じ方法でリセットすることができる。ＲＰＵ２００は、ＲＰＵ１００が感応しない専用命令によってスタック型メモリ領域に関連付けることができる。例えば、この命令は、このスタック上にバッファを割り付けた際に呼び出して（コールして）、ＲＰＵ２００をこうしたバッファの保護に割り当てることができる。ＲＰＵ２００をスタック領域に関連付けるメカニズムは、ＲＰＵ１００をヒープ型メモリ領域に関連付けた方法と同様であり、即ち、ＲＰＵ２００にスタック型領域のサイズを供給し、このサイズをそのＭＡＸＳＩＺＥ＋１の値と比較し、等であり、この理由によりさらに説明しない。新たに（メモリ領域に）関連付けられたＲＰＵ２００は、そのメモリ領域の境界アドレスを第１レジスタ１１０への記憶用に供給されるだけでなく、関数スコープ識別子も第３レジスタ１３０への記憶用に供給される。あるアドレスが保護されるスタック型メモリ領域内に入るか否かのチェックは、ＲＰＵ１００におけるのと同じ様式で行われ、これについてもさらに説明しない。
【００４１】
ヒープ型ＲＰＵ１００とスタック型ＰＲＵ２００との主な相違は、後者の型については、複数のＲＰＵ２００を同じ関数スコープに割り当てることができることにある。第３レジスタ内の関数スコープ識別子の存在は、単一の関数スコープに割り当てられたＲＰＵ２００を効率的に無関連にすることを促進する。適切な関数スコープ識別子を含むデアロケーション（領域解放）命令は、モード選択線１６５及びデータ通信バス１６３経由ですべてのＲＰＵに同報され、スタック型ＲＰＵ２００内のコントローラ１６０をトリガして、演算機能ブロック１４０を起動させてＭＵＸ１４２の適切な入力を選択することによって、データ通信バス１６３上の識別子の値を第３レジスタ１３０に記憶された値と比較させる。ＭＵＸ１５２はその固定値入力、例えば「１」に設定され、データ通信バス１６３上の関数スコープ識別子の値と第３レジスタ１３０の値とが同じであれば、比較器１５０は、演算機能ブロック１４０の出力がＭＵＸ１５２によって供給される出力より小さいことを示す信号を生成する。この信号はコントローラ１６０をトリガして、コントローラ１６０の他の内部フラグをリセットさせて、ＲＰＵ２００を、関連するメモリ領域と無関連にさせる。従って、単一命令を用いて、１つの関数スコープを共用するすべてのＲＰＵ２００を同時に、それぞれのメモリ領域と無関連にすることができる。
【００４２】
なお、この時点では、通信バス１６３経由で供給される種々のパラメータ用に符号なし整数を用いることが好ましい。このことは例えば、データ通信バス１６３上の関数スコープ識別子が第３レジスタの値と異なる際に、演算機能ブロック１４０の出力が常に、ＭＵＸ１５２の固定値より大きい値を生成することを保証する。
【実施例３】
【００４３】
図３に、本発明によるＩＣ装置の例を示す。ＩＣ装置３００は処理装置３１０を有し、処理装置３１０は、データ通信バス３２０及びバスアダプタ３３０経由でＲＰＵコントローラ３４０に結合された中央処理装置、あるいは複数の処理装置の１つとすることができる。ＲＰＵコントローラ３４０は、モード選択バス１６５及びデータ通信バス１６３経由で、複数のヒープ型ＲＰＵ１００及び複数のスタック型ＲＰＵ２００に結合されている。ＲＰＵコントローラ３４０は、それぞれのクロック信号線１６４（明瞭さの理由のみで図３には示していない）経由でクロック信号をＲＰＵに供給することもできる。あるいはまた、この信号は別個のクロック発生器（図示せず）によって供給することができる。なお、ヒープ型ＲＰＵ１００とスタック型ＲＰＵ２００との混合の選定は非限定的な例に過ぎない。代案の構成、例えばＲＰＵ１００のみ、あるいはＲＰＵ２００のみを有する構成も同等に実現可能である。図３は、明瞭さの理由のみでＩＣ装置３００のメモリ装置は図示していない。
【００４４】
ＲＰＵコントローラ３４０は、処理装置３１０の、そのデータ入力（data_in）、アドレス（address）、データ出力（data_out）、読出し（read）、及び書込み（write）を経由したメモリアクセスを処理する。これらのポートは、処理装置３１０からの、ＲＰＵ１００及び２００を設定し制御するための命令を受信するためにも使用される。この目的のために、ＲＰＵコントローラ３４０は受信した命令を復号化し、対応するモード選択命令をＲＰＵのモードバス１６５経由でＲＰＵに供給し、処理装置３１０から受信した命令中のパラメータをＲＰＵのデータ通信バス１６３に転送する。
【００４５】
この時点では、このアーキテクチャは上記メモリ装置（図示せず）に記憶されたデータを保護するために使用することができると言え、この安全なデータは保護されないメモリ領域に記憶され、このことは、この安全なデータのアドレスが、ＩＣ装置３００のＲＰＵのいずれかによって保護されるメモリ領域に対応しないことにより、アクセス要求が拒否されることを生じさせる。この安全なデータは、ＩＣ装置３００の専用モードにおいて、メモリ保護装置、即ちＲＰＵコントローラ３４０をスイッチオフして初めてアクセスすることができる。
【００４６】
前に説明したように、ＲＰＵ１００及び２００は、それぞれのＲＰＵ入力端子１６１及びＲＰＵ出力端子１６２を介してデイジーチェーンの形に編成することができる。ヒープ型ＲＰＵ１００はデイジーチェーンの第１部分中で結合され、このチェーンの終端のＲＰＵ１００はその出力端子１６２を、データ線３５２経由でＲＰＵコントローラ３４０のヒープイン（heap_in）入力端子に結合されている。スタック型ＲＰＵ２００はこのデイジーチェーン内の第２部分中で結合され、このチェーン内の終端のＲＰＵ２００はその出力端子１６２を、データ線３５６経由でＲＰＵコントローラのスタックイン（stack_in）入力端子に結合されている。データ線３５２及び３５６は、前に説明したように、デイジーチェーン化されたＲＰＵにおいてカスケード（順次）転送された情報、例えばＲＰＵの１つがメモリ領域保護タスクを受け入れたことの情報、あるいは、ＲＰＵの１つがデータ通信バス１６３上で供給されたアドレスを有効検証したことの情報をＲＰＵコントローラ３４０に伝達するために使用される。
【００４７】
なお、スタック型ＲＰＵ２００はＲＰＵ１００の拡張版であるので、スタック型ＲＰＵ２００はヒープ型メモリ領域を保護するために使用することもできる。このことはＩＣアーキテクチャにおいて、次の方法で利用することができる。論理和（ＯＲ）ゲート３５０は、上記デイジーチェーンの第１部分と第２部分との間に挿入されている。前に説明したように、ＲＰＵが、当該ＲＰＵを保護すべきメモリ領域に関連付けることができるか否かをチェックするモードでは、スタック型ＲＰＵ２００がヒープ型ＲＰＵとして動作することを許可されていない場合には、ＲＰＵコントローラ３４０は、データ線３５４経由でＲＰＵコントローラ３４０のスタック・フォールバックｎ（stack_fallback_n）出力端子に結合された論理和ゲート３５０の入力端子をアサートする。アサートされた論理和ゲート３５０の入力端子は、論理和ゲート３５０の出力端子に結合された第１のスタック型ＲＰＵ２００の入力端子１６１に、より上位のランクのＲＰＵが既に割り当てを受け入れたことを示す信号を受信させる。この値はすべてのＲＰＵ２００を通して波及し、これにより、どのＲＰＵ２００もこの割り当てを受け入れない。
【００４８】
他方では、ＲＰＵ２００がヒープ型メモリ領域を保護する割り当てを受け入れることを許可されている場合には、ＲＰＵコントローラはデータ線３５４をデアサートし、このことは、ヒープ型ＲＰＵ１００及びスタック型ＲＰＵ２００の各々がこの割り当てを受け入れることを許可する。
【００４９】
以下では、処理装置３１０がＩＣ装置３００のＲＰＵアーキテクチャを動作させるための、ＡＰＩに内蔵されるＣ言語型の命令セットの実現例を挙げる。これらの命令は、図１及び図２の詳細な説明において前述した命令の例である。
void rpus_initialize()
この関数は、ＲＰＵのハードウェアをリセットして、すべての設定をクリアする。
bool rpus_heap_enable(void*base, unsigned long int size)
この関数は、バッファがmalloc及びnewのような関数によってヒープ上に割り付けられた際に呼び出される。この関数は、このバッファのベースアドレス及びサイズのような情報を渡す。利用可能なハードウェアベースのＲＰＵ１００または２００のいずれか一方がこのバッファを保護するようにプログラムされ、「真」の論理値が戻されるか、あるいは適切なＲＰＵが利用可能でない場合には「偽」の論理値が戻される。後者の戻り値を用いて、このバッファを代わりにソフトウェアで保護するためのフォールバック・メカニズムを起動することができる。
bool rpus_stack_enable(void*base, unsigned long int size, int func_id)
rpus_heap_enable関数と同様に、この関数は、バッファがスタック上に割り付けられた際に呼び出される。この関数は、スタックバッファのベース（アドレス）及びサイズ、及びこのバッファが割り付けられた関数スコープの識別コードのような情報を伝達する。
bool rpus_check_access(void*pointer)
この関数は、ソフトウェアでのメモリアクセスが存在する際にいつでも呼び出される。このメモリアクセスのアドレスは、メモリマップ入力／出力（ＭＭＩＯ：Memory Map Input/Output）空間を介してハードウェアに伝達される。この関数呼出しは、デイジーチェーン内のハードウェアベースのＲＰＵ１００または２００が、すべての既知の有効領域に対して上記メモリアドレスをチェックすることによって、当該ＲＰＵが当該メモリアドレスを有効検証することができる場合には「真」の論理値を戻し、ＲＰＵが有効検証することができない場合には「偽」の論理値を戻す。追加的なソフトウェアベースの保護を用いる場合には、後者を用いてソフトウェア・フォールバックを起動して、ソフトウェアで保護されるすべての領域に対してメモリアドレスをチェックすることができる。
【００５０】
完結したメモリ保護アーキテクチャをハードウェアで実現する場合には、この命令によって戻される「偽」の論理値を用いて、ソフトウェア・デバッガをトリガして、不正なメモリアクセスが存在することを示すことができる。上記命令のすべてが、関連するデータを、メモリマップ入力／出力（ＭＭＩＯ）空間を介して、基になるＲＰＵハードウェアに伝達することが好ましい。
【００５１】
ＲＰＵアーキテクチャ、即ちＲＰＵコントローラ３４０の代案の実現は、バスを直接観測して、バス上に発生するあらゆるトランザクションのアドレスを自動的に抽出する。ＲＰＵコントローラ３４０の第２の代案の実現は、ＲＰＵコントローラ３４０が、主処理装置３１０とシステムバス３２０との間を橋渡しするモジュールとして特徴付けられ、ＲＰＵコントローラ３４０が、処理装置３１０によって行われるあらゆるメモリアクセスを監視し、条件的に伝えることを可能にする。
bool rpus_heap_disable(void*base)
この関数は、プログラムまたはプログラマが、ヒープ上に割り付けられたメモリを解放する際に呼び出される。この呼出しを用いることは、所定のベースアドレスに割り当てられたＲＰＵ１００または２００を完全に解放し、将来、新たなバッファを保護するために使用することを可能にする。その戻り値は、所定のベースアドレスから始まるバッファを保護していたＲＰＵ１００または２００がハードウェアで存在していた場合には「真」の論理値であり、こうしたＲＰＵが存在しなかった場合には「偽」の論理値である。後者は、ソフトウェアで保護されるバッファのリストを条件探索して、適切なＲＰＵをこのリストから除外するためのみに用いることができる。
void rpud_stack_disable(int function_id)
この関数は、特定関数のスコープの使用終了時に呼び出される。関数スコープの識別コードはハードウェア、特にスタック型ＲＰＵ２００に伝達される。この呼出しを用いて、この関数内に割り付けられたあらゆるスタック型ＲＰＵ２００、従って、上記識別コード（function_id）を完全に解放して将来使用するために利用可能にすることができる。
【００５２】
なお、上述した実施例は本発明を例示するものであり限定するものではなく、当業者は請求項に記載の範囲から逸脱することなしに、代案の実施例を設計することができる。「具えている」等は、請求項に挙げた以外の要素またはステップの存在を排除するものではない。各要素は複数存在し得る。本発明は、いくつかの別個の要素から成るハードウェアによって実現することができる。いくつかの手段を挙げた装置の請求項では、これらの手段のいくつかは同一のハードウェア・アイテムによって具体化することができる。単に、互いに異なる従属請求項中に特定の方策が挙げられていることは、これらの方策の組合せを有利に用いることができないことを示すものではない。
【図面の簡単な説明】
【００５３】
【図１】本発明のＲＰＵの実施例を示す図である。
【図２】本発明のＲＰＵの他の実施例を示す図である。
【図３】本発明のＩＣ装置の実施例を示す図である。
【図１】
2009524140.tif 000003
【図２】
2009524140.tif 000004
【図３】
2009524140.tif 000005
【国際調査報告】
2009524140.tif 000006
2009524140.tif 000007
2009524140.tif 000008