JPH076095A - 高信頼メモリアドレス指定方法 - Google Patents
高信頼メモリアドレス指定方法Info
- Publication number
- JPH076095A JPH076095A JP14350093A JP14350093A JPH076095A JP H076095 A JPH076095 A JP H076095A JP 14350093 A JP14350093 A JP 14350093A JP 14350093 A JP14350093 A JP 14350093A JP H076095 A JPH076095 A JP H076095A
- Authority
- JP
- Japan
- Prior art keywords
- memory
- address
- memory block
- access
- accessed
- 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.)
- Pending
Links
Landscapes
- Storage Device Security (AREA)
Abstract
(57)【要約】
【目的】 任意のアドレスにある任意のサイズのメモリ
ブロックにポインタを介してアクセスする場合に、プロ
グラムの実行速度を低下させずにメモリブロックへの不
当なアクセスを防止する高信頼アドレス指定方法を提供
する。 【構成】 メモリのアクセスにおいて、ポインタに格納
されるアドレス情報にアクセスモード、アクセス可能な
範囲を示すメモリブロック長を含め、アクセスするメモ
リブロックの先頭アドレス105、メモリブロック長1
06、アクセスモード107を制限付きアドレス108
として一括して扱う。これにより、アクセス可能なメモ
リ領域を任意に制限し、アクセス可能な範囲を越えてメ
モリをアクセスした場合、あるいは指定されたアクセス
モード以外でアクセスした場合に、プロセッサ例外を起
こすことで、ハードウェアにより誤ったメモリのアクセ
スを防止し、プログラムの実行速度を低下させずにメモ
リを保護する。
ブロックにポインタを介してアクセスする場合に、プロ
グラムの実行速度を低下させずにメモリブロックへの不
当なアクセスを防止する高信頼アドレス指定方法を提供
する。 【構成】 メモリのアクセスにおいて、ポインタに格納
されるアドレス情報にアクセスモード、アクセス可能な
範囲を示すメモリブロック長を含め、アクセスするメモ
リブロックの先頭アドレス105、メモリブロック長1
06、アクセスモード107を制限付きアドレス108
として一括して扱う。これにより、アクセス可能なメモ
リ領域を任意に制限し、アクセス可能な範囲を越えてメ
モリをアクセスした場合、あるいは指定されたアクセス
モード以外でアクセスした場合に、プロセッサ例外を起
こすことで、ハードウェアにより誤ったメモリのアクセ
スを防止し、プログラムの実行速度を低下させずにメモ
リを保護する。
Description
【0001】
【産業上の利用分野】本発明は、マイクロプロセッサ等
のアドレス計算とメモリアクセス時のアクセス可能な範
囲のチェックに好適な高信頼のメモリアドレス指定方法
に関するものである。
のアドレス計算とメモリアクセス時のアクセス可能な範
囲のチェックに好適な高信頼のメモリアドレス指定方法
に関するものである。
【0002】
【従来の技術】プロセッサとメモリを有する処理装置に
おける従来のメモリアドレス指定方法を、図9に示す。
ここで、プロセッサとしては、以下に示すマイクロプロ
セッサを想定して説明する。
おける従来のメモリアドレス指定方法を、図9に示す。
ここで、プロセッサとしては、以下に示すマイクロプロ
セッサを想定して説明する。
【0003】メモリはバイト単位でアドレスされる。汎
用レジスタとプログラムカウンタ(PC)を持ち、レジ
スタのうちの2つはスタックポインタ、フレームポイン
タとして用いる。説明を簡単にするため、スタックは老
番地に向かって伸びるものとする。すなわちpush命令の
場合ではアドレスが加算され、pop命令の場合では減算
される。メモリアドレスの際のアドレッシングモードは
オフセット付きレジスタ間接のみを想定する。
用レジスタとプログラムカウンタ(PC)を持ち、レジ
スタのうちの2つはスタックポインタ、フレームポイン
タとして用いる。説明を簡単にするため、スタックは老
番地に向かって伸びるものとする。すなわちpush命令の
場合ではアドレスが加算され、pop命令の場合では減算
される。メモリアドレスの際のアドレッシングモードは
オフセット付きレジスタ間接のみを想定する。
【0004】図9を用いて、従来のオフセット付きレジ
スタ間接アドレッシングモードについて説明する。従来
のそれは、アクセスするメモリのアドレスを、レジスタ
101の内容とオフセット値102で指定するもので、
これらの和(メモリブロックの先頭アドレス+オフセッ
ト値)を実際にアクセスするメモリのアドレスとする。
これを実効アドレス103と呼ぶ。オフセットの指定は
イミーディエイト値、レジスタ等で指定可能である。以
下の説明では簡単のため、オフセット値としてイミーデ
イエイト値のみを用いる。レジスタ101をRn、オフ
セット値を<offset>とするとき、アドレス指定は(R
n)+<offset>と表現する。(Rn)はレジスタRn
の内容を示す。アドレス指定は、命令中に含まれる。
スタ間接アドレッシングモードについて説明する。従来
のそれは、アクセスするメモリのアドレスを、レジスタ
101の内容とオフセット値102で指定するもので、
これらの和(メモリブロックの先頭アドレス+オフセッ
ト値)を実際にアクセスするメモリのアドレスとする。
これを実効アドレス103と呼ぶ。オフセットの指定は
イミーディエイト値、レジスタ等で指定可能である。以
下の説明では簡単のため、オフセット値としてイミーデ
イエイト値のみを用いる。レジスタ101をRn、オフ
セット値を<offset>とするとき、アドレス指定は(R
n)+<offset>と表現する。(Rn)はレジスタRn
の内容を示す。アドレス指定は、命令中に含まれる。
【0005】ここで、以下の従来技術を説明するため
に、用語を定義する。ある連続したメモリの領域をメモ
リブロックと呼ぶこととする。メモリブロックの先頭の
アドレスを示すデータをポインタと呼ぶ。高水準プログ
ラミング言語(例えばC)における構造体、配列等のよ
うにソフトウェアからみて論理的にまとまったデータを
格納するメモリブロックをソフトウェアメモリブロック
と呼ぶ。メモリブロックに対して、“読み出しのみ(書
き込みできない)”、“書き込み可能”等の属性をつけ
ることができる。この属性をアクセスモードと呼ぶ。
に、用語を定義する。ある連続したメモリの領域をメモ
リブロックと呼ぶこととする。メモリブロックの先頭の
アドレスを示すデータをポインタと呼ぶ。高水準プログ
ラミング言語(例えばC)における構造体、配列等のよ
うにソフトウェアからみて論理的にまとまったデータを
格納するメモリブロックをソフトウェアメモリブロック
と呼ぶ。メモリブロックに対して、“読み出しのみ(書
き込みできない)”、“書き込み可能”等の属性をつけ
ることができる。この属性をアクセスモードと呼ぶ。
【0006】従来のプロセッサにおいてメモリブロック
にアクセスモードを設定する方式(メモリ保護機構と呼
ぶ)としては、ロックとキーによるメモリ管理機構によ
るもの、仮想記憶機構におけるページ属性によるもの、
等がある。これらの方式においては、アクセスモードを
設定できるメモリブロックのサイズは大きい(数KB〜
数10KB以上ものが多い)。また、アクセスモードを
設定できる可能なメモリブロックの大きさは、固定長で
あることが多い。例えば、仮想記憶機能ではページ単位
に制限される。メモリブロックの大きさを可変長にでき
る場合でも、そのサイズは大きく、メモリブロックの数
にも制限がある。したがって、従来方式では小規模のメ
モリブロック、任意の大きさのメモリブロック、任意の
アドレスにあるメモリブロックのアクセス保護を行なう
ことはできない。
にアクセスモードを設定する方式(メモリ保護機構と呼
ぶ)としては、ロックとキーによるメモリ管理機構によ
るもの、仮想記憶機構におけるページ属性によるもの、
等がある。これらの方式においては、アクセスモードを
設定できるメモリブロックのサイズは大きい(数KB〜
数10KB以上ものが多い)。また、アクセスモードを
設定できる可能なメモリブロックの大きさは、固定長で
あることが多い。例えば、仮想記憶機能ではページ単位
に制限される。メモリブロックの大きさを可変長にでき
る場合でも、そのサイズは大きく、メモリブロックの数
にも制限がある。したがって、従来方式では小規模のメ
モリブロック、任意の大きさのメモリブロック、任意の
アドレスにあるメモリブロックのアクセス保護を行なう
ことはできない。
【0007】上記のようなチェックをソフトウェアで行
うことも可能であるが、これらのチェックは1回のメモ
リアクセスに対し、少なくとも数ステップのプロセッサ
の命令を実行するため、オバーヘッドが極めて大きくな
り、プログラムの実行速度を低下させるので、実用的で
はなかった。
うことも可能であるが、これらのチェックは1回のメモ
リアクセスに対し、少なくとも数ステップのプロセッサ
の命令を実行するため、オバーヘッドが極めて大きくな
り、プログラムの実行速度を低下させるので、実用的で
はなかった。
【0008】
【発明が解決しようとする課題】前述したように、従来
の保護機構でソフトウェアメモリブロックの保護を実現
しようとすると、次の(1),(2)に述べるような問
題点がある。説明のために、従来のメモリ保護機構でア
クセスモードを設定できるメモリブロックをハードウェ
アメモリブロックと呼ぶ。
の保護機構でソフトウェアメモリブロックの保護を実現
しようとすると、次の(1),(2)に述べるような問
題点がある。説明のために、従来のメモリ保護機構でア
クセスモードを設定できるメモリブロックをハードウェ
アメモリブロックと呼ぶ。
【0009】(1)ハードウェアメモリブロックとソフ
トウェアメモリブロックの単位が一致しない。
トウェアメモリブロックの単位が一致しない。
【0010】一般に、ハードウェアメモリブロックは固
定長でサイズが大きいのに対し、ソフトウェアメモリブ
ロックは、可変長でその大きさも小さい(数10バイト
程度のものが多い)。
定長でサイズが大きいのに対し、ソフトウェアメモリブ
ロックは、可変長でその大きさも小さい(数10バイト
程度のものが多い)。
【0011】(2)ハードウェアメモリブロックとソフ
トウェアメモリブロックで配置できるアドレスが異な
る。
トウェアメモリブロックで配置できるアドレスが異な
る。
【0012】仮想記憶機構におけるページのように、ハ
ードウェアメモリブロックは配置できるアドレスに制限
があるのに対し、ソフトウェアメモリブロックでは任意
の位置に配置できることが要求される。
ードウェアメモリブロックは配置できるアドレスに制限
があるのに対し、ソフトウェアメモリブロックでは任意
の位置に配置できることが要求される。
【0013】本発明は、上記問題点を解決するためにな
されたものであり、その目的は、任意のアドレスにある
任意のサイズのメモリブロックにポインタを介してアク
セスする場合に、プログラムの実行速度を低下させるこ
となく、メモリブロックへの不当なアクセスを防止する
高信頼なメモリアドレス指定方法を提供することにあ
る。
されたものであり、その目的は、任意のアドレスにある
任意のサイズのメモリブロックにポインタを介してアク
セスする場合に、プログラムの実行速度を低下させるこ
となく、メモリブロックへの不当なアクセスを防止する
高信頼なメモリアドレス指定方法を提供することにあ
る。
【0014】
【課題を解決するための手段】上記の目的を達成するた
めの本発明の高信頼メモリアドレス指定方法は、プロセ
ッサとメモリを有する処理装置において、連続したメモ
リの領域であるメモリブロックの先頭アドレスとメモリ
ブロック長とアクセスモードからからなる制限付きアド
レスにより指定されるデータをプロセッサとメモリ間で
転送し、前記制限付きアドレス内の前記先頭アドレスと
前記メモリブロック長を用いてアクセス領域を演算する
手段によりメモリ領域を定め、該メモリ領域を越えて前
記メモリをアクセスした場合、あるいは前記アクセスモ
ードにより指定されたアクセスモード以外で前記メモリ
をアクセスした場合にプロセッサ例外を起こすことを特
徴とする。
めの本発明の高信頼メモリアドレス指定方法は、プロセ
ッサとメモリを有する処理装置において、連続したメモ
リの領域であるメモリブロックの先頭アドレスとメモリ
ブロック長とアクセスモードからからなる制限付きアド
レスにより指定されるデータをプロセッサとメモリ間で
転送し、前記制限付きアドレス内の前記先頭アドレスと
前記メモリブロック長を用いてアクセス領域を演算する
手段によりメモリ領域を定め、該メモリ領域を越えて前
記メモリをアクセスした場合、あるいは前記アクセスモ
ードにより指定されたアクセスモード以外で前記メモリ
をアクセスした場合にプロセッサ例外を起こすことを特
徴とする。
【0015】
【作用】本発明の高信頼メモリアドレス指定方法では、
メモリのアクセスにおいて、ポインタに格納されるアド
レス情報にアクセスモード、アクセス可能な範囲を示す
サイズデータ(メモリブロック長)を含めて、アクセス
するメモリブロックの先頭アドレス、メモリブロック
長、アクセスモードをメモリアドレスとして一括して扱
うことにより、アクセス可能なメモリ領域を任意に制限
し、アクセス可能な範囲を越えてメモリをアクセスした
場合、あるいは指定されたアクセスモード以外でアクセ
スした場合に、プロセッサ例外を起こすことで、ハード
ウェアのチェックにより誤ったメモリのアクセスを防止
し、プログラムの実行速度を低下させることなく、メモ
リの保護を実現する。
メモリのアクセスにおいて、ポインタに格納されるアド
レス情報にアクセスモード、アクセス可能な範囲を示す
サイズデータ(メモリブロック長)を含めて、アクセス
するメモリブロックの先頭アドレス、メモリブロック
長、アクセスモードをメモリアドレスとして一括して扱
うことにより、アクセス可能なメモリ領域を任意に制限
し、アクセス可能な範囲を越えてメモリをアクセスした
場合、あるいは指定されたアクセスモード以外でアクセ
スした場合に、プロセッサ例外を起こすことで、ハード
ウェアのチェックにより誤ったメモリのアクセスを防止
し、プログラムの実行速度を低下させることなく、メモ
リの保護を実現する。
【0016】
【実施例】以下、本発明の実施例を、図面を参照して詳
細に説明する。
細に説明する。
【0017】図1は本発明の一実施例の高信頼なメモリ
アドレスの指定方法を示す説明図である。図1におい
て、104はアクセスデータ長、105は制限付きアド
レス中のメモリブロックの先頭アドレス、106は制限
付きアドレス中のメモリブロック長、107は制限付き
アドレス中のアクセスモード、108は制限付きアドレ
ス、109はアクセス可能メモリ、110はアクセス範
囲違反例外を示す。
アドレスの指定方法を示す説明図である。図1におい
て、104はアクセスデータ長、105は制限付きアド
レス中のメモリブロックの先頭アドレス、106は制限
付きアドレス中のメモリブロック長、107は制限付き
アドレス中のアクセスモード、108は制限付きアドレ
ス、109はアクセス可能メモリ、110はアクセス範
囲違反例外を示す。
【0018】本実施例では、以下に示すマイクロプロセ
ッサを想定して説明する。
ッサを想定して説明する。
【0019】メモリはバイト単位でアドレスされる。汎
用レジスタとプログラムカウンタ(PC)を持ち、レジ
スタのうちの2つはスタックポインタ、フレームポイン
タとして用いる。説明を簡単にするため、スタックは老
番地に向かって伸びるものとする。すなわちpush命令の
場合ではアドレスは加算され、pop命令の場合では減算
される。ただし、本発明はスタックが若番地に向かって
伸びる場合も適用可能である。メモリアドレスの際のア
ドレッシングモードは、オフセット付きレジスタ間接の
みを想定する。他のアドレッシングモードも混在するこ
とは可能であるが、本発明の方式を適用できない場合が
ある。ジャンプ命令のジャンプ先等の命令フェッチのア
ドレッシングについては本発明の適用外である。
用レジスタとプログラムカウンタ(PC)を持ち、レジ
スタのうちの2つはスタックポインタ、フレームポイン
タとして用いる。説明を簡単にするため、スタックは老
番地に向かって伸びるものとする。すなわちpush命令の
場合ではアドレスは加算され、pop命令の場合では減算
される。ただし、本発明はスタックが若番地に向かって
伸びる場合も適用可能である。メモリアドレスの際のア
ドレッシングモードは、オフセット付きレジスタ間接の
みを想定する。他のアドレッシングモードも混在するこ
とは可能であるが、本発明の方式を適用できない場合が
ある。ジャンプ命令のジャンプ先等の命令フェッチのア
ドレッシングについては本発明の適用外である。
【0020】本実施例のオフセット付きレジスタ間接ア
ドレッシングモードにおいても、アクセスするメモリの
アドレスを、レジスタの内容とオフセット値で指定し、
これらの和(メモリブロックの先頭アドレス+オフセッ
ト値)を実際にアクセスするメモリの実効アドレスとす
る。オフセットの指定はイミーディエイト値、レジスタ
等で指定可能であるが、本発明では規定しない。以下の
説明では簡単のため、オフセット値としてイミーデイエ
イト値のみを用いる。本実施例のレジスタをRn、オフ
セット値を<offset>とするとき、アドレス指定は(R
n)+<offset>と表現する。(Rn)はレジスタRn
の内容を示す。アドレス指定は、命令中に含まれる。
ドレッシングモードにおいても、アクセスするメモリの
アドレスを、レジスタの内容とオフセット値で指定し、
これらの和(メモリブロックの先頭アドレス+オフセッ
ト値)を実際にアクセスするメモリの実効アドレスとす
る。オフセットの指定はイミーディエイト値、レジスタ
等で指定可能であるが、本発明では規定しない。以下の
説明では簡単のため、オフセット値としてイミーデイエ
イト値のみを用いる。本実施例のレジスタをRn、オフ
セット値を<offset>とするとき、アドレス指定は(R
n)+<offset>と表現する。(Rn)はレジスタRn
の内容を示す。アドレス指定は、命令中に含まれる。
【0021】次に、本発明の実施例を説明するための用
語を定義する。ある連続したメモリの領域をメモリブロ
ックと呼ぶこととする。メモリブロックの先頭のアドレ
スを示すデータをポインタと呼ぶ。高水準プログラミン
グ言語(例えばC)における構造体、配列等のようにソ
フトウェアからみて論理的にまとまったデータを格納す
るメモリブロックをソフトウェアメモリブロックと呼
ぶ。メモリブロックに対して、“読み出しのみ(書き込
みできない)”、“書き込み可能”等の属性をつけるこ
とができる。この属性をアクセスモードと呼ぶ。マイク
ロプロセッサ(CPU)とメモリとの間でデータを転送
する場合、データの大きさを命令中に指定することがで
きるものとする。データの大きさをアクセスデータ長1
04とよぶことにする。アクセスデータ長104はバイ
ト単位で示す。
語を定義する。ある連続したメモリの領域をメモリブロ
ックと呼ぶこととする。メモリブロックの先頭のアドレ
スを示すデータをポインタと呼ぶ。高水準プログラミン
グ言語(例えばC)における構造体、配列等のようにソ
フトウェアからみて論理的にまとまったデータを格納す
るメモリブロックをソフトウェアメモリブロックと呼
ぶ。メモリブロックに対して、“読み出しのみ(書き込
みできない)”、“書き込み可能”等の属性をつけるこ
とができる。この属性をアクセスモードと呼ぶ。マイク
ロプロセッサ(CPU)とメモリとの間でデータを転送
する場合、データの大きさを命令中に指定することがで
きるものとする。データの大きさをアクセスデータ長1
04とよぶことにする。アクセスデータ長104はバイ
ト単位で示す。
【0022】本実施例では、メモリにアクセスするため
のアドレスが、アクセス先のメモリブロックの先頭アド
レス105、メモリブロック長106、アクセスモード
107を含むものとする。すなわち、従来と同様のメモ
リブロック先頭アドレス105にアクセスモード107
とメモリブロック長106のフィールドを追加する。こ
れを制限付きアドレス108と呼ぶ。制限付きアドレス
によりアクセス可能なメモリブロックを制限付きアドレ
スのアクセス可能メモリ109と呼ぶ。データの実効ア
ドレスを制限付きアドレスの内容とオフセット値により
で求める。この実効アドレスとアクセスデータ長104
によりアクセスされるデータが、制限付きアドレスのア
クセス可能メモリ109に含まれていない時、すなわち
オフセット<offset′>がメモリブロック長を越えてい
るようなアクセス範囲((Rn)+<offset′>)の
時、プロセッサ例外(アクセス範囲違反例外110)を
おこすようにする。
のアドレスが、アクセス先のメモリブロックの先頭アド
レス105、メモリブロック長106、アクセスモード
107を含むものとする。すなわち、従来と同様のメモ
リブロック先頭アドレス105にアクセスモード107
とメモリブロック長106のフィールドを追加する。こ
れを制限付きアドレス108と呼ぶ。制限付きアドレス
によりアクセス可能なメモリブロックを制限付きアドレ
スのアクセス可能メモリ109と呼ぶ。データの実効ア
ドレスを制限付きアドレスの内容とオフセット値により
で求める。この実効アドレスとアクセスデータ長104
によりアクセスされるデータが、制限付きアドレスのア
クセス可能メモリ109に含まれていない時、すなわち
オフセット<offset′>がメモリブロック長を越えてい
るようなアクセス範囲((Rn)+<offset′>)の
時、プロセッサ例外(アクセス範囲違反例外110)を
おこすようにする。
【0023】本実施例による上記の方法を実現するため
のプロセッサの構成例を図2の内部ブロック図で示す。
図2において、201はレジスタ0及びスタックポイン
タ、202はレジスタ1及びフレームポインタ、203
はレジスタ2、204はレジスタ3、205はアドレス
フィールドの長さ、206はメモリブロック長フィール
ドの長さ、207はアクセスモード、208はオフセッ
ト付きレジスタ間接アドレッシングにおけるレジスタ
(以下、BR)の選択、209はアクセス可能メモリ範
囲のチェック、210はアクセス範囲違反例外、211
はメモリアドレスの計算、212はアクセスモードの比
較、213はアクセスモード違反例外、214はメモリ
のアクセス、215は命令解析部、216はプログラム
カウンタ、217はメモリアクセスユニット、218は
メモリ、219はマイクロプロセッサ、を示す。
のプロセッサの構成例を図2の内部ブロック図で示す。
図2において、201はレジスタ0及びスタックポイン
タ、202はレジスタ1及びフレームポインタ、203
はレジスタ2、204はレジスタ3、205はアドレス
フィールドの長さ、206はメモリブロック長フィール
ドの長さ、207はアクセスモード、208はオフセッ
ト付きレジスタ間接アドレッシングにおけるレジスタ
(以下、BR)の選択、209はアクセス可能メモリ範
囲のチェック、210はアクセス範囲違反例外、211
はメモリアドレスの計算、212はアクセスモードの比
較、213はアクセスモード違反例外、214はメモリ
のアクセス、215は命令解析部、216はプログラム
カウンタ、217はメモリアクセスユニット、218は
メモリ、219はマイクロプロセッサ、を示す。
【0024】本実施例におけるマイクロプロセッサは前
述のとおりであるが、図2に示すように、ここでは簡単
のため汎用レジスタは4つのレジスタ201〜204を
持つものとする(本発明を適用するためには、最低限ス
タックポインタとフレームポインタ用の2つのレジスタ
があればよく、2つ以上ならいくらあってもよい)。R
0はスタックポインタ(SP)201、R1はフレーム
ポインタ(FP)202として使用する。各レジスタは
制限付きアドレスを格納可能である。レジスタのビット
長は、アドレスを格納するために必要なビット長すなわ
ちアドレスフィールド長さ(AL)205、メモリブロ
ック長を格納するフィールド長さ(BL)206、アク
セスモードを格納するフィールド長さ(ML)207の
和とする。一般の32ビットマイクロプロセッサにおい
ては、ALは32である。本発明ではMLは2とする。
アクセスモードが0の場合は“アクセス制限なし”、1
のときは“読み出しのみ”、2の場合は“書き込みの
み”、3の場合は“アクセス不可”とする。最後のケー
スは、後述するようにメモリブロックのアクセス権(ケ
ーバビリティ)の委譲機構の実現に用いることができ
る。本発明は小規模メモリの管理と保護を目的としてお
り、BLは10程度でも実用上効果がある。なおメモリ
ブロック長が0の場合は、メモリブロック長は無限大と
みなす(従来方式と同様)。
述のとおりであるが、図2に示すように、ここでは簡単
のため汎用レジスタは4つのレジスタ201〜204を
持つものとする(本発明を適用するためには、最低限ス
タックポインタとフレームポインタ用の2つのレジスタ
があればよく、2つ以上ならいくらあってもよい)。R
0はスタックポインタ(SP)201、R1はフレーム
ポインタ(FP)202として使用する。各レジスタは
制限付きアドレスを格納可能である。レジスタのビット
長は、アドレスを格納するために必要なビット長すなわ
ちアドレスフィールド長さ(AL)205、メモリブロ
ック長を格納するフィールド長さ(BL)206、アク
セスモードを格納するフィールド長さ(ML)207の
和とする。一般の32ビットマイクロプロセッサにおい
ては、ALは32である。本発明ではMLは2とする。
アクセスモードが0の場合は“アクセス制限なし”、1
のときは“読み出しのみ”、2の場合は“書き込みの
み”、3の場合は“アクセス不可”とする。最後のケー
スは、後述するようにメモリブロックのアクセス権(ケ
ーバビリティ)の委譲機構の実現に用いることができ
る。本発明は小規模メモリの管理と保護を目的としてお
り、BLは10程度でも実用上効果がある。なおメモリ
ブロック長が0の場合は、メモリブロック長は無限大と
みなす(従来方式と同様)。
【0025】以下、上記構成における各部の処理動作を
説明する。
説明する。
【0026】実効アドレスを求めるためのアドレス計算
は、図3に示すように行なう。図3において、301は
命令中からベースアドレスを求める処理、302はアク
セス範囲のチェック、303はアクセス範囲違反例外、
304は実効アドレスの計算305はアクセスモードの
チェック、306はアクセスモード違反例外、307は
正常メモリ処理を示す。また、→は代入を、アルファベ
ット大文字の記号はプロセッサの内部レジスタを示す。
なお、網がけ部が、本発明の実施例の範囲を示してい
る。
は、図3に示すように行なう。図3において、301は
命令中からベースアドレスを求める処理、302はアク
セス範囲のチェック、303はアクセス範囲違反例外、
304は実効アドレスの計算305はアクセスモードの
チェック、306はアクセスモード違反例外、307は
正常メモリ処理を示す。また、→は代入を、アルファベ
ット大文字の記号はプロセッサの内部レジスタを示す。
なお、網がけ部が、本発明の実施例の範囲を示してい
る。
【0027】まず、図2の命令解析部215が命令の取
り出しを行い、命令からベースアドレスを格納するレジ
スタを求める(301)。これをレジスタBRとしてB
Rの選択208を行う。BRのメモリブロック長フィー
ルドの内容(MBL)と、命令に含まれるオフセット
(OFS)およびアクセスデータ長(DL)を加算(O
FS+DL)したもの(ABL)とを比較する(20
9,302)。前者(MBL)より後者(ABL)が小
さいか等しい場合は、正常処理としてメモリアクセスを
行なう(307)。そうでない場合、アクセス範囲例外
210,303とする。上記と並行して、BRのメモリ
ブロック先頭アドレスフィールドの内容(BA)と命令
中のオフセット(OFS)を211で加算し、アクセス
するメモリ218の実効アドレスを求めておく(30
4)。このアドレス計算と並行して、命令のアクセスモ
ード(AM)とレジスタ内のアクセスモード(AC)を
比較する(212,305)。たとえばstore(メモリ
への書き込み)命令において、書き込み先を示す制限付
きアドレスのアクセスモードが1(読み出しのみ)であ
れば、アクセスモード違反例外213,306となる。
り出しを行い、命令からベースアドレスを格納するレジ
スタを求める(301)。これをレジスタBRとしてB
Rの選択208を行う。BRのメモリブロック長フィー
ルドの内容(MBL)と、命令に含まれるオフセット
(OFS)およびアクセスデータ長(DL)を加算(O
FS+DL)したもの(ABL)とを比較する(20
9,302)。前者(MBL)より後者(ABL)が小
さいか等しい場合は、正常処理としてメモリアクセスを
行なう(307)。そうでない場合、アクセス範囲例外
210,303とする。上記と並行して、BRのメモリ
ブロック先頭アドレスフィールドの内容(BA)と命令
中のオフセット(OFS)を211で加算し、アクセス
するメモリ218の実効アドレスを求めておく(30
4)。このアドレス計算と並行して、命令のアクセスモ
ード(AM)とレジスタ内のアクセスモード(AC)を
比較する(212,305)。たとえばstore(メモリ
への書き込み)命令において、書き込み先を示す制限付
きアドレスのアクセスモードが1(読み出しのみ)であ
れば、アクセスモード違反例外213,306となる。
【0028】アクセスしようとするアドレスがアクセス
可能メモリの範囲内にあり、アクセスモードのチェック
でも違反がなければ、メモリアクセスユニット217に
より、メモリ218に対してメモリアクセスを行なう
(214,307)。
可能メモリの範囲内にあり、アクセスモードのチェック
でも違反がなければ、メモリアクセスユニット217に
より、メモリ218に対してメモリアクセスを行なう
(214,307)。
【0029】次に、制限付きアドレスによるスタックポ
インタ(SP)とフレームポインタ(FP)の処理を説
明する。
インタ(SP)とフレームポインタ(FP)の処理を説
明する。
【0030】スタックポインタ(SP)、フレームポイ
ンタ(FP)の内容を制限付きアドレスとし、以下で述
べるpush命令、pop命令を拡張することでスタックエリ
アのオーバフローのチェックをハードウェア的に行なう
ことができる。フレームポインタとスタックポインタの
更新は、制限付きアドレスのサイズと、メモリブロック
先頭アドレスの更新を同時に行なう。以下にスタックポ
インタの更新処理を示す。なお制限付きアドレスを格納
するポインタpのメモリブロック長指定部をP.size、
メモリブロック先頭アドレス指定部をP.addrとする。
ンタ(FP)の内容を制限付きアドレスとし、以下で述
べるpush命令、pop命令を拡張することでスタックエリ
アのオーバフローのチェックをハードウェア的に行なう
ことができる。フレームポインタとスタックポインタの
更新は、制限付きアドレスのサイズと、メモリブロック
先頭アドレスの更新を同時に行なう。以下にスタックポ
インタの更新処理を示す。なお制限付きアドレスを格納
するポインタpのメモリブロック長指定部をP.size、
メモリブロック先頭アドレス指定部をP.addrとする。
【0031】push:P.size−n→P.size;P.addr
+n→P.addr pop :P.size+n→P.size;P.addr−n→P.ad
dr ここで、nはアクセスデータ長を示す。
+n→P.addr pop :P.size+n→P.size;P.addr−n→P.ad
dr ここで、nはアクセスデータ長を示す。
【0032】push命令で、P.size<nの時は、(スタ
ックオーバーフローで)例外となる。
ックオーバーフローで)例外となる。
【0033】以下にフレームポインタの更新処理を図4
(1),(2)を用いて説明する。図4において、40
1はフレームを、402はフレーム・リンク・リストを
示す。図4では、プロシージャpがプロシージャqを、
プロシージャqはプロシージャrを呼び出し、現在プロ
シージャrを実行中とする。図4に示すように、link/
unlk命令は、高水準プログラミング言語(例えばC)の
プロシージャ(あるいは関数)を呼び出す際に、パラメ
タとプロシージャのローカルデータの領域(あわせてフ
レーム401と呼ぶ)をスタック上に割り付けると同時
に、これらの領域をリンクするリスト402を形成する
ために用いられる。ここで、asizeは制限付きアドレス
全体を格納するのに必要なバイト数である。またdisp
は、割り付けられるローカルデータの領域のサイズであ
る(デイスプレースメントと呼ぶ)。→は代入を示す。
link命令はプロシージャの呼び出しときに用いられ、un
lk命令はプロシージャからの戻りの際に用いられる(フ
レームの解放)。
(1),(2)を用いて説明する。図4において、40
1はフレームを、402はフレーム・リンク・リストを
示す。図4では、プロシージャpがプロシージャqを、
プロシージャqはプロシージャrを呼び出し、現在プロ
シージャrを実行中とする。図4に示すように、link/
unlk命令は、高水準プログラミング言語(例えばC)の
プロシージャ(あるいは関数)を呼び出す際に、パラメ
タとプロシージャのローカルデータの領域(あわせてフ
レーム401と呼ぶ)をスタック上に割り付けると同時
に、これらの領域をリンクするリスト402を形成する
ために用いられる。ここで、asizeは制限付きアドレス
全体を格納するのに必要なバイト数である。またdisp
は、割り付けられるローカルデータの領域のサイズであ
る(デイスプレースメントと呼ぶ)。→は代入を示す。
link命令はプロシージャの呼び出しときに用いられ、un
lk命令はプロシージャからの戻りの際に用いられる(フ
レームの解放)。
【0034】・link FP,dispFPで示されるレジス
タの現在の内容をスタックにpushする。その後、そのレ
ジスタに更新されたスタック・ポインタの値をロードす
る。最後にデイスプレースメントをスタック・ポインタ
に加える。詳細な動作を以下に示す(図4(2)中の
(a))。
タの現在の内容をスタックにpushする。その後、そのレ
ジスタに更新されたスタック・ポインタの値をロードす
る。最後にデイスプレースメントをスタック・ポインタ
に加える。詳細な動作を以下に示す(図4(2)中の
(a))。
【0035】SP.size−asize→SP.size; S
P.addr+asize→SP.addr;FP→(SP) SP→FP; SP.size−disp→SP.size; SP.addr+disp→
SP.addr・unlk FP FPで示されるレジスタの内容をスタック・ポインタに
ロードし、ついでそのレジスタにスタックの先頭から取
り出した制限付きアドレスをロードする。詳細な動作を
以下に示す(図4(2)中の(b))。
P.addr+asize→SP.addr;FP→(SP) SP→FP; SP.size−disp→SP.size; SP.addr+disp→
SP.addr・unlk FP FPで示されるレジスタの内容をスタック・ポインタに
ロードし、ついでそのレジスタにスタックの先頭から取
り出した制限付きアドレスをロードする。詳細な動作を
以下に示す(図4(2)中の(b))。
【0036】FP→SP (SP)→FP;SP.size+asize→SP.size;
SP.addr−asize→SP.addr なお、前述したように、本発明はスタックの伸びる方向
がどちらでも適用可能である。上記の例は、老番地に向
かって伸びるものとしているが、若番地に向かって伸び
る場合は、メモリブロック先頭アドレス指定部の演算の
加減を逆にする。
SP.addr−asize→SP.addr なお、前述したように、本発明はスタックの伸びる方向
がどちらでも適用可能である。上記の例は、老番地に向
かって伸びるものとしているが、若番地に向かって伸び
る場合は、メモリブロック先頭アドレス指定部の演算の
加減を逆にする。
【0037】メモリとプロセッサ(CPU)の間でデー
タ(制限付きアドレスを除く)を転送する命令で、上述
したオフセット付きレジスタ間接アドレッシングモード
を用いるもの(たとえばpush,pop,load,store,queu
e操作)は、すべて上述したアドレスのチェックを行な
う。
タ(制限付きアドレスを除く)を転送する命令で、上述
したオフセット付きレジスタ間接アドレッシングモード
を用いるもの(たとえばpush,pop,load,store,queu
e操作)は、すべて上述したアドレスのチェックを行な
う。
【0038】次に、制限付きアドレスを扱うための命令
について図5(1),(2)を用いて説明する。
について図5(1),(2)を用いて説明する。
【0039】制限付きアドレスを扱うために、次の命令
を設ける。ここで、P1,P2は制限付アドレスを格納
したメモリのアドレス、あるいは制限付アドレスを格納
したレジスタとする。h1,h2,h3,h4は、制限
付アドレスのメモリブロック長を増減させる値を示す
(イミーディエイト値、レジスタ、メモリアドレス等の
いずれかとする)。
を設ける。ここで、P1,P2は制限付アドレスを格納
したメモリのアドレス、あるいは制限付アドレスを格納
したレジスタとする。h1,h2,h3,h4は、制限
付アドレスのメモリブロック長を増減させる値を示す
(イミーディエイト値、レジスタ、メモリアドレス等の
いずれかとする)。
【0040】decmba(decrement memory block addr
ess) decmba P1,h1 P1.addr−h1→P1.addr;P1.size+h1→P
1.size 制限付きアドレスを減算する。これに応じて、メモリブ
ロック長は大きくなる(図5(1)中の(a))。
ess) decmba P1,h1 P1.addr−h1→P1.addr;P1.size+h1→P
1.size 制限付きアドレスを減算する。これに応じて、メモリブ
ロック長は大きくなる(図5(1)中の(a))。
【0041】incmba(increment memory block addr
ess) incmba P1,h2 P1.addr+h2→P1.addr;P1.size−h2→P
1.size 制限付きアドレスを加算する。これに応じて、メモリブ
ロック長は小さくなる(図5(1)中の(b))。
ess) incmba P1,h2 P1.addr+h2→P1.addr;P1.size−h2→P
1.size 制限付きアドレスを加算する。これに応じて、メモリブ
ロック長は小さくなる(図5(1)中の(b))。
【0042】decmbs(increment memory block siz
e) decmbs P2,h3 P2.size−h3→P2.size 制限付きアドレスのサイズを減算する。これに応じて、
メモリブロック長は小さくなる(図5(2)中の
(c))。
e) decmbs P2,h3 P2.size−h3→P2.size 制限付きアドレスのサイズを減算する。これに応じて、
メモリブロック長は小さくなる(図5(2)中の
(c))。
【0043】incmbs(decrement memory block siz
e) incmbs P2,h4 P2.size+h4→P2.size 制限付きアドレスのサイズを加算する。これに応じて、
メモリブロック長は大きくなる(図5(2)中の
(d))。
e) incmbs P2,h4 P2.size+h4→P2.size 制限付きアドレスのサイズを加算する。これに応じて、
メモリブロック長は大きくなる(図5(2)中の
(d))。
【0044】 制限付きアドレスをレジスタrに設定する。ここで<ad
dr>はメモリブロックのアドレス、<size>はメモリブ
ロックの大きさ、<mode>はアクセスモードである。
dr>はメモリブロックのアドレス、<size>はメモリブ
ロックの大きさ、<mode>はアクセスモードである。
【0045】 レジスタrに含まれる制限付きアドレスをアクセスモー
ドを設定する。ここで<mode>はアクセスモードであ
る。
ドを設定する。ここで<mode>はアクセスモードであ
る。
【0046】以下に、本発明の適用例(1)〜(4)を
示す。
示す。
【0047】(1)構造体、配列、定数データへのアク
セス プログラミング言語Cのソースプログラムの制限付アド
レスを用いたアセンブラコードの生成例を示す。なおア
センブラ命令で、…以降はコメントを示す。以下の例で
示すアセンブラ命令の中で、これまでに説明していない
ものについて示す。
セス プログラミング言語Cのソースプログラムの制限付アド
レスを用いたアセンブラコードの生成例を示す。なおア
センブラ命令で、…以降はコメントを示す。以下の例で
示すアセンブラ命令の中で、これまでに説明していない
ものについて示す。
【0048】store.word<addr><value> addrで示されるメモリにvalueで示される値を格納す
る。ここでwordはアクセスデータ長を示し、ここでは4
バイトを示すものとする。wordの他にbyte等の指定も可
能である。valueとしてはイミーディエイト値、レジス
タ、メモリアドレス等のいずれかとする。
る。ここでwordはアクセスデータ長を示し、ここでは4
バイトを示すものとする。wordの他にbyte等の指定も可
能である。valueとしてはイミーディエイト値、レジス
タ、メモリアドレス等のいずれかとする。
【0049】move <r1> <r2> レジスタr2の内容をr1に格納する。
【0050】以下において、例1は誤ったタイプ変換に
よる不当なメモリアクセスを検出する例である。例2は
配列のインデクスが上限を越えてアクセスするエラーを
検出する例である。例3はリードオンリーのデータに新
たにデータを代入することを防止する例である。
よる不当なメモリアクセスを検出する例である。例2は
配列のインデクスが上限を越えてアクセスするエラーを
検出する例である。例3はリードオンリーのデータに新
たにデータを代入することを防止する例である。
【0051】例1)誤ったタイプ変換による不当なメモ
リアクセスの検出 ・ソースプログラム struct s1 {int a; int b;}; struct s2 {int x; int y; int
z;}; struct s1 d1; struct s2 *d2; d1.b=1; d2=(struct s2*)&d1; d2→z=3; …割り付けられていないフィールドへ
のアクセス ・アセンブラ命令 d1の割付アドレスを1000とする。R2にd1の先
頭アドレス,レジスタR3にd2の先頭アドレスが入
る。
リアクセスの検出 ・ソースプログラム struct s1 {int a; int b;}; struct s2 {int x; int y; int
z;}; struct s1 d1; struct s2 *d2; d1.b=1; d2=(struct s2*)&d1; d2→z=3; …割り付けられていないフィールドへ
のアクセス ・アセンブラ命令 d1の割付アドレスを1000とする。R2にd1の先
頭アドレス,レジスタR3にd2の先頭アドレスが入
る。
【0052】loada R2,1000,8,0→
制限付アドレス…アドレス:1000、サイズ:8、ア
クセスモード:書き込み可能 store.word (R2)+4,1 movea R3,R2 store.word (R3)+8,3 →例外 例2)配列のインデクスが上限を越えてアクセスするエ
ラーの検出 ・ソースプログラム char a[4]; a[1]=1; a[5]=5; …配列オーバフロー ・アセンブラ命令 aの割付アドレスを2000とする。レジスタR2にa
の先頭アドレスが入る。
制限付アドレス…アドレス:1000、サイズ:8、ア
クセスモード:書き込み可能 store.word (R2)+4,1 movea R3,R2 store.word (R3)+8,3 →例外 例2)配列のインデクスが上限を越えてアクセスするエ
ラーの検出 ・ソースプログラム char a[4]; a[1]=1; a[5]=5; …配列オーバフロー ・アセンブラ命令 aの割付アドレスを2000とする。レジスタR2にa
の先頭アドレスが入る。
【0053】loada R2,2000,16,0 store.word (R2)+4,1 store.word (R2)+20,3 →例外 例3)リードオンリーのデータへの代入の検出 ・ソースプログラム const int b=100; b=200; …定数データへの値の代入 ・アセンブラ命令 bの割付アドレスを3000とする。r2にaの先頭ア
ドレスが入る。
ドレスが入る。
【0054】loada R2,3000,4,2
…読み出しのみ store.word (R2),200 →例外 (2)スレッドのスタック 本適用例は、スレッドのスタックのポインタを制限付き
アドレスで実現する例である。本適用例を図6を用いて
説明する。図6において、601はスレッドのスタック
のベースアドレス、602はスレッドのスタックの大き
さ(スタック長)、611はスタックの限界を示す。ス
レッドは同一メモリ空間上で動作する並列プログラムの
実行単位である。同一メモリ空間上にあるため、論理空
間毎に割り付けたプロセスのように、論理アドレス変換
機構により、スタックのオーバフローをチェックするこ
とはできない。スタックの実行開始時に、スタックポイ
ンタに、スタックのベースアドレス601とスタック長
602をそれぞれメモリブロック先頭アドレスアドレス
部、メモリブロック長部として設定する。
…読み出しのみ store.word (R2),200 →例外 (2)スレッドのスタック 本適用例は、スレッドのスタックのポインタを制限付き
アドレスで実現する例である。本適用例を図6を用いて
説明する。図6において、601はスレッドのスタック
のベースアドレス、602はスレッドのスタックの大き
さ(スタック長)、611はスタックの限界を示す。ス
レッドは同一メモリ空間上で動作する並列プログラムの
実行単位である。同一メモリ空間上にあるため、論理空
間毎に割り付けたプロセスのように、論理アドレス変換
機構により、スタックのオーバフローをチェックするこ
とはできない。スタックの実行開始時に、スタックポイ
ンタに、スタックのベースアドレス601とスタック長
602をそれぞれメモリブロック先頭アドレスアドレス
部、メモリブロック長部として設定する。
【0055】スタックポインタの更新に、push/pop命
令でlink/unlk命令(プロシージャの呼び出しとプロシ
ージャからの戻り)のみを用いる限り、SP.addr+S
P.sizeは常にスタックの限界611を示しており、ま
たSPもレジスタであるので、オフセット付きSP間接
アドレッシングモードによりスタック上のデータにアク
セスする限り、スタックオーバフローを例外により検出
することができる。
令でlink/unlk命令(プロシージャの呼び出しとプロシ
ージャからの戻り)のみを用いる限り、SP.addr+S
P.sizeは常にスタックの限界611を示しており、ま
たSPもレジスタであるので、オフセット付きSP間接
アドレッシングモードによりスタック上のデータにアク
セスする限り、スタックオーバフローを例外により検出
することができる。
【0056】(3)共有バッファ 本適用例は、共有バッファを複数のタスクがアクセスす
る場合のエラーを防止する例である。並列処理単位であ
るタスクが異なる論理空間上で割り付けられているもの
とする。タスク間の通信において、通信用のメッセージ
のコピーによるオーバヘッドを削減するために、メッセ
ージバッファを共用空間におくのが効果的である。この
際、ひとつのメッセージバッファに2つ以上のタスクが
同時にアクセスするエラーが起こる可能性がある。制限
付アドレスを用いて、このエラーを防止することができ
る。
る場合のエラーを防止する例である。並列処理単位であ
るタスクが異なる論理空間上で割り付けられているもの
とする。タスク間の通信において、通信用のメッセージ
のコピーによるオーバヘッドを削減するために、メッセ
ージバッファを共用空間におくのが効果的である。この
際、ひとつのメッセージバッファに2つ以上のタスクが
同時にアクセスするエラーが起こる可能性がある。制限
付アドレスを用いて、このエラーを防止することができ
る。
【0057】本適用例を図7を用いて説明する。図7に
おいて、603は送信側タスク、604は受信側タス
ク、605は共有バッファであるメッセージバッファ
(メッセージ用メモリブロック)、606は送信処理を
示す。本適用例では、送信側タスク603が受信側タス
ク604にメッセージを送るものとする。メッセージバ
ッファ(メッセージ用メモリブロック)は、両者からア
クセス可能な共有メモリ空間におく。送信側タスク60
3がメッセージバッファ605にデータを書き込み、送
信処理を行う。プログラムの安全性を高めるため、送信
後は、送信側タスク603がメッセージバッファ605
にアクセスを禁止する必要がある。このためメッセージ
バッファ605へのアクセスは制限付きアドレスを用い
て行ない、送信後アクセスモードをアクセス不可とする
ことで(606)、送信側タスク603で以降のアクセ
スを禁止することができる。これはメッセージバッファ
のケーバビリティの委譲とみなすことができる。
おいて、603は送信側タスク、604は受信側タス
ク、605は共有バッファであるメッセージバッファ
(メッセージ用メモリブロック)、606は送信処理を
示す。本適用例では、送信側タスク603が受信側タス
ク604にメッセージを送るものとする。メッセージバ
ッファ(メッセージ用メモリブロック)は、両者からア
クセス可能な共有メモリ空間におく。送信側タスク60
3がメッセージバッファ605にデータを書き込み、送
信処理を行う。プログラムの安全性を高めるため、送信
後は、送信側タスク603がメッセージバッファ605
にアクセスを禁止する必要がある。このためメッセージ
バッファ605へのアクセスは制限付きアドレスを用い
て行ない、送信後アクセスモードをアクセス不可とする
ことで(606)、送信側タスク603で以降のアクセ
スを禁止することができる。これはメッセージバッファ
のケーバビリティの委譲とみなすことができる。
【0058】(4)レイヤにまたがるプロトコルデータ
の一括管理 本適用例は、通信プログラムにおいてレイヤにまたがる
プロトコルデータへのアクセスエラーを防止する例であ
る。本適用例を図8を用いて説明する。図8において、
607はプロトコルデータ先頭へのデータの追加、60
8はプロトコルデータ後尾へのデータの追加、609は
上位レイヤへのデータの引き継ぎ、610は下位レイヤ
へのデータの引き継ぎを示す。
の一括管理 本適用例は、通信プログラムにおいてレイヤにまたがる
プロトコルデータへのアクセスエラーを防止する例であ
る。本適用例を図8を用いて説明する。図8において、
607はプロトコルデータ先頭へのデータの追加、60
8はプロトコルデータ後尾へのデータの追加、609は
上位レイヤへのデータの引き継ぎ、610は下位レイヤ
へのデータの引き継ぎを示す。
【0059】コンピュータ間の通信プログラムにおいて
は、通常、プロトコル高位(ここではN+1レイヤ)の
レイヤのデータの前後に情報を付加して(607,60
8)、低位のレイヤ(ここではNレイヤ)のデータとす
る。レイヤ間でデータを引き継ぐ際に、そのデータをコ
ピーするとオーバヘッドが大きい。最初に最下位レイヤ
で必要なバッファを確保し、それをレイヤ間で共有する
ことで、データコピーのオーバヘッドを削減できる。し
かし、各レイヤ間で使う領域は独立しているので、それ
らを不当にアクセスしないように、制限付きアドレスを
用いる。まず最下位レイヤで必要な最大長のバッファを
確保し、その先頭を制限付きアドレスで示すように設定
する。上位レイヤに引き継ぐ場合は、incmba,decmbs命
令によりアクセス可能な範囲を上位レイヤでアクセスす
る部分に縮小してから、制限付きアドレスをバッファの
先頭として上位レイヤの処理プログラムに引き継ぐ(6
09)。下位レイヤに引き継ぐ場合は、decmba,incmbs
命令によりアクセス可能な範囲を下位レイヤでアクセス
できる部分に拡大してから、制限付きアドレスをバッフ
ァの先頭として下位レイヤの処理プログラムに引き継ぐ
(610)。
は、通常、プロトコル高位(ここではN+1レイヤ)の
レイヤのデータの前後に情報を付加して(607,60
8)、低位のレイヤ(ここではNレイヤ)のデータとす
る。レイヤ間でデータを引き継ぐ際に、そのデータをコ
ピーするとオーバヘッドが大きい。最初に最下位レイヤ
で必要なバッファを確保し、それをレイヤ間で共有する
ことで、データコピーのオーバヘッドを削減できる。し
かし、各レイヤ間で使う領域は独立しているので、それ
らを不当にアクセスしないように、制限付きアドレスを
用いる。まず最下位レイヤで必要な最大長のバッファを
確保し、その先頭を制限付きアドレスで示すように設定
する。上位レイヤに引き継ぐ場合は、incmba,decmbs命
令によりアクセス可能な範囲を上位レイヤでアクセスす
る部分に縮小してから、制限付きアドレスをバッファの
先頭として上位レイヤの処理プログラムに引き継ぐ(6
09)。下位レイヤに引き継ぐ場合は、decmba,incmbs
命令によりアクセス可能な範囲を下位レイヤでアクセス
できる部分に拡大してから、制限付きアドレスをバッフ
ァの先頭として下位レイヤの処理プログラムに引き継ぐ
(610)。
【0060】
【発明の効果】本発明では、メモリブロック長の比較は
アドレス計算と並行し行なうことができ、また単純な処
理であるため、従来のプロセッサの実行速度を低下させ
ずに、小規模のメモリブロック、任意の大きさのメモリ
ブロック、任意のアドレスにあるメモリブロックのアク
セス保護を行うことを可能にする。これにより、従来、
ソフトウェアでしか行えなかった不当なデータのアクセ
スのチェックをハードウェアで行うことができるように
なる。従来のこれらのチェックは、1回のメモリアクセ
スに対し少なくとも数ステップのプロセッサの命令を実
行するため、実用的でなかった。本発明を用いること
で、プログラムの実行速度を低下させることなく、不当
なメモリアクセスを検出することにより、プログラムの
信頼性を向上させることができる。
アドレス計算と並行し行なうことができ、また単純な処
理であるため、従来のプロセッサの実行速度を低下させ
ずに、小規模のメモリブロック、任意の大きさのメモリ
ブロック、任意のアドレスにあるメモリブロックのアク
セス保護を行うことを可能にする。これにより、従来、
ソフトウェアでしか行えなかった不当なデータのアクセ
スのチェックをハードウェアで行うことができるように
なる。従来のこれらのチェックは、1回のメモリアクセ
スに対し少なくとも数ステップのプロセッサの命令を実
行するため、実用的でなかった。本発明を用いること
で、プログラムの実行速度を低下させることなく、不当
なメモリアクセスを検出することにより、プログラムの
信頼性を向上させることができる。
【図1】本発明の一実施例を示す説明図
【図2】本発明の方法を実現するマイクロプロセッサの
内部構成例を示すブロック図
内部構成例を示すブロック図
【図3】上記実施例における実効アドレスを求める手順
を示す図
を示す図
【図4】(1),(2)は上記実施例におけるスタック
ポインタとフレームポインタの更新処理を示す図
ポインタとフレームポインタの更新処理を示す図
【図5】(1),(2)は上記実施例におけるサイズ付
きアドレスを扱う命令の処理を示す図
きアドレスを扱う命令の処理を示す図
【図6】本発明の適用例(2)を示す図
【図7】本発明の適用例(3)を示す図
【図8】本発明の適用例(4)を示す図
【図9】従来技術の説明図
104…アクセスデータ長 105…制限付きアドレス中のメモリブロックの先頭ア
ドレス 106…制限付きアドレス中のメモリブロック長 107…制限付きアドレス中のアクセスモード 108…制限付きアドレス 109…アクセス可能メモリ 110…アクセス範囲違反例外 201…レジスタ0及びスタックポインタ 202…レジスタ1及びフレームポインタ 203…レジスタ2 204…レジスタ3 205…アドレスフィールドの長さ 206…メモリブロック長フィールドの長さ 207…アクセスモード 208…オフセット付きレジスタ間接アドレッシングに
おけるレジスタ(BR)の選択 209…アクセス可能メモリ範囲のチェック 210…アクセス範囲違反例外 211…メモリアドレスの計算 212…アクセスモードの比較 213…アクセスモード違反例外 214…メモリのアクセス 301…命令中からベースアドレスを求める処理 302…アクセス範囲のチェック 303…アクセス範囲違反例外 304…実効アドレスの計算 305…アクセスモードのチェック 306…アクセスモード違反例外 307…正常メモリ処理 401…フレーム 402…フレーム・リンク・リスト 601…スレッドのスタックのベースアドレス 602…スレッドのスタックの大きさ(スタック長) 603…送信側タスク 604…受信側タスク 605…メッセージバッファ(メッセージ用メモリブロ
ック) 606…送信処理 607…プロトコルデータ先頭へのデータの追加 608…プロトコルデータ後尾へのデータの追加 609…上位レイヤへのデータの引き継ぎ 610…下位レイヤへのデータの引き継ぎ 611…スタックの限界
ドレス 106…制限付きアドレス中のメモリブロック長 107…制限付きアドレス中のアクセスモード 108…制限付きアドレス 109…アクセス可能メモリ 110…アクセス範囲違反例外 201…レジスタ0及びスタックポインタ 202…レジスタ1及びフレームポインタ 203…レジスタ2 204…レジスタ3 205…アドレスフィールドの長さ 206…メモリブロック長フィールドの長さ 207…アクセスモード 208…オフセット付きレジスタ間接アドレッシングに
おけるレジスタ(BR)の選択 209…アクセス可能メモリ範囲のチェック 210…アクセス範囲違反例外 211…メモリアドレスの計算 212…アクセスモードの比較 213…アクセスモード違反例外 214…メモリのアクセス 301…命令中からベースアドレスを求める処理 302…アクセス範囲のチェック 303…アクセス範囲違反例外 304…実効アドレスの計算 305…アクセスモードのチェック 306…アクセスモード違反例外 307…正常メモリ処理 401…フレーム 402…フレーム・リンク・リスト 601…スレッドのスタックのベースアドレス 602…スレッドのスタックの大きさ(スタック長) 603…送信側タスク 604…受信側タスク 605…メッセージバッファ(メッセージ用メモリブロ
ック) 606…送信処理 607…プロトコルデータ先頭へのデータの追加 608…プロトコルデータ後尾へのデータの追加 609…上位レイヤへのデータの引き継ぎ 610…下位レイヤへのデータの引き継ぎ 611…スタックの限界
Claims (1)
- 【請求項1】 プロセッサとメモリを有する処理装置に
おいて、連続したメモリの領域であるメモリブロックの
先頭アドレスとメモリブロック長とアクセスモードから
からなる制限付きアドレスにより指定されるデータをプ
ロセッサとメモリ間で転送し、前記制限付きアドレス内
の前記先頭アドレスと前記メモリブロック長を用いてア
クセス領域を演算する手段によりメモリ領域を定め、該
メモリ領域を越えて前記メモリをアクセスした場合、あ
るいは前記アクセスモードにより指定されたアクセスモ
ード以外で前記メモリをアクセスした場合にプロセッサ
例外を起こすことを特徴とする高信頼メモリアドレス指
定方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP14350093A JPH076095A (ja) | 1993-06-15 | 1993-06-15 | 高信頼メモリアドレス指定方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
JP14350093A JPH076095A (ja) | 1993-06-15 | 1993-06-15 | 高信頼メモリアドレス指定方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
JPH076095A true JPH076095A (ja) | 1995-01-10 |
Family
ID=15340171
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
JP14350093A Pending JPH076095A (ja) | 1993-06-15 | 1993-06-15 | 高信頼メモリアドレス指定方法 |
Country Status (1)
Country | Link |
---|---|
JP (1) | JPH076095A (ja) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2000034871A1 (fr) * | 1998-12-07 | 2000-06-15 | Sony Corporation | Ordinateur, support enregistre comportant un programme de verification de la validite des adresses et procede de verification de la validite des adresses |
JP2006252343A (ja) * | 2005-03-11 | 2006-09-21 | Nec Computertechno Ltd | エミュレータ、エミュレータにおけるアドレス計算例外検出方法、プログラム |
CN1315062C (zh) * | 2002-06-07 | 2007-05-09 | 松下电器产业株式会社 | 处理器装置、使用它的信息处理装置、编译装置及其方法 |
-
1993
- 1993-06-15 JP JP14350093A patent/JPH076095A/ja active Pending
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2000034871A1 (fr) * | 1998-12-07 | 2000-06-15 | Sony Corporation | Ordinateur, support enregistre comportant un programme de verification de la validite des adresses et procede de verification de la validite des adresses |
US6832257B1 (en) | 1998-12-07 | 2004-12-14 | Sony Corporation | Computer, recorded medium on which address validity checking program is recorded, and address validity checking method |
JP4516693B2 (ja) * | 1998-12-07 | 2010-08-04 | アルボス テクノロジーズ リミテッド リミテッド ライアビリティ カンパニー | コンピュータ、アドレス有効性照合プログラムを記録した記録媒体、及びアドレス有効性照合方法 |
CN1315062C (zh) * | 2002-06-07 | 2007-05-09 | 松下电器产业株式会社 | 处理器装置、使用它的信息处理装置、编译装置及其方法 |
JP2006252343A (ja) * | 2005-03-11 | 2006-09-21 | Nec Computertechno Ltd | エミュレータ、エミュレータにおけるアドレス計算例外検出方法、プログラム |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US7467271B2 (en) | Operating system permitting limited access to a system page | |
US6928555B1 (en) | Method and apparatus for minimizing file scanning by anti-virus programs | |
CA1266532A (en) | Method to share copy on write segment for mapped files | |
US8359575B2 (en) | Protection domains for a computer operating system | |
US6996677B2 (en) | Method and apparatus for protecting memory stacks | |
JP4571710B2 (ja) | ディスパッチテーブル構造のための方法と装置 | |
US20110145358A1 (en) | Shared java jar files | |
US20060095483A1 (en) | Modified computer architecture with finalization of objects | |
EP0472487A2 (en) | Apparatus and method for controlling access to data using domains | |
US7822723B2 (en) | Method, system, program and data structure for controlling access to sensitive functions | |
US5732404A (en) | Flexible expansion of virtual memory addressing | |
US5901311A (en) | Access key protection for computer system data | |
JP2005316599A (ja) | 割込制御装置 | |
US6499094B1 (en) | Management of memory heap space for data files accessible to programs operating in different addressing modes | |
US6792596B2 (en) | Method and system for protecting resource central programs | |
JPH0622015B2 (ja) | データ処理システムの制御方法 | |
US5953529A (en) | Data processor with a debug device and a stack area control unit and corresponding data processing method | |
JPH076095A (ja) | 高信頼メモリアドレス指定方法 | |
US20020013907A1 (en) | Method of preventing stack manipulation attacks during function calls | |
US5404450A (en) | Communications processor system with control of downloaded tasks | |
EP1713000A1 (en) | Memory protection system | |
KR20000006402A (ko) | 클래스로우더 | |
KR20000076125A (ko) | 메모리 관리 유니트가 제공된 마이크로 컴퓨터 | |
JP6827244B1 (ja) | 監査装置、監査方法、監査プログラムおよび監査システム | |
JP2003288129A (ja) | メモリ管理方法、メモリ装置、コンピュータシステム、コンパイラ及びプログラム |