(57)【要約】【課題】  セキュリティホールの発生原因と言われるバッファオーバーラン現象を防止し、コンピュータウイルスや不正アクセスを抑制することのできるコンピュータシステムのＣＰＵ（中央処理装置）を提供する。【解決手段】  記憶装置のどのアドレスまで現時点で使用しているかを示し、記憶装置を使用するごとに、未使用の記憶装置のアドレスを示すように値を演算する機能を有するスタックレジスタ装置を複数備えるコンピュータシステムのＣＰＵ（中央処理装置）１００であって、プログラムが使用するデータ処理に用いる第一のスタックレジスタ装置Ｒ１と、サブルーチンコールを行う際に書き込む戻りアドレスの格納に用いる第二のスタックレジスタ装置Ｒ３とを少なくとも備える。
2005020069.tif 000002
【特許請求の範囲】
【請求項１】
記憶装置のどのアドレスまで現時点で使用しているかを示し、記憶装置を使用するごとに、未使用の記憶装置のアドレスを示すように値を演算する機能を有するスタックレジスタ装置を複数備えるコンピュータシステムのＣＰＵ（中央処理装置）であって、
プログラムが使用するデータ処理に用いる第一のスタックレジスタ装置と、
サブルーチンコールを行う際に書き込む戻りアドレスの格納に用いる第二のスタックレジスタ装置とを少なくとも備えることを特徴とするコンピュータシステムのＣＰＵ。
【請求項２】
前記第一及び／または第二のスタックレジスタ装置は、
記憶装置を使用するごとに、アドレスを減算ではなく加算し、未使用の記憶装置のアドレスを示すことを特徴とする請求項１に記載されたコンピュータシステムのＣＰＵ。
【請求項３】
前記第一のスタックレジスタ装置と第二のスタックレジスタ装置の両方、または、いずれか一方を使用可能な状態に切り替える第一のスイッチ装置を備え、
前記第一のスイッチ装置により、第一のスタックレジスタ装置と第二のスタックレジスタ装置のいずれか一方が使用可能な状態になされた際は、該使用可能なスタックレジスタ装置は、サブルーチンコールを行う際の戻りアドレスの管理とプログラムが使用するデータ処理とを行うレジスタとして使用されることを特徴とする請求項１または請求項２に記載されたコンピュータシステムのＣＰＵ。
【請求項４】
所定値を記憶する加算値記憶装置を備え、
プログラムから前記第一のスタックレジスタ装置と第二のスタックレジスタ装置のいずれか一方にデータが書き込まれた際、該データに対し前記所定値を加算または減算した結果を、他のスタックレジスタ装置に格納する処理が行なわれることを特徴とする請求項１乃至請求項３のいずれかに記載されたコンピュータシステムのＣＰＵ。
【請求項５】
プログラムから第一のスタックレジスタ装置と第二のスタックレジスタ装置のいずれか一方にデータが書き込まれた際、スタック用に割り振られたメモリ領域のゼロ番地側の開始アドレスを取得し、前記加算値記憶装置が記憶する所定値を決定する処理が行なわれることを特徴とする請求項４に記載されたコンピュータシステムのＣＰＵ。
【請求項６】
スタック用に割り振られたメモリ領域の開始アドレスと終了アドレスの情報を格納するアドレス格納装置を備え、
前記アドレス格納装置が格納するアドレス情報により決定されたメモリ領域に対し、サブルーチンコールの格納アドレスの書き込みを許可し、それ以外のデータの書き込みを禁止することを特徴とする請求項１乃至請求項５のいずれかに記載されたコンピュータシステムのＣＰＵ。
【請求項７】
前記第一及び／または第二のスタックレジスタ装置が示すメモリの確保方向をメモリの高位方向と低位方向のいずれかに動作させる設定を行う第二のスイッチ装置を備えることを特徴とする請求項１乃至請求項６のいずれかに記載されたコンピュータシステムのＣＰＵ。
【請求項８】
前記第一のスタックレジスタ装置と第二のスタックレジスタ装置のいずれか一方が、サブルーチンコールを行う際の戻りアドレスの管理とプログラムが使用するデータ処理とを行うレジスタとして使用されている状態から、前記請求項４および請求項５に記載された処理が行なわれることにより、前記第一のスイッチ装置の設定が変更され、他方のスタックレジスタ装置が使用可能な状態となることを特徴とする請求項５乃至請求項７のいずれかに記載されたコンピュータシステムのＣＰＵ。
【発明の詳細な説明】
【技術分野】
【０００１】  本発明は、コンピュータウイルスに感染しにくい、安全性の高いコンピュータシステムのＣＰＵ（中央処理装置）に関する。
【背景技術】
【０００２】  インターネットの普及に従い、企業、個人用途のコンピュータシステムの多くが、ネットワークに接続し、相互にデータのやり取りをするに至っている。
しかしながら、コンピュータシステムに対し、外部より悪意あるネットワーク利用者が接続し、システム管理者が気付かないうちに、コンピュータシステムが書き換えられる問題が頻繁に発生している。また、所謂コンピュータウイルスと呼ばれる悪意ある実行形式のデータ（プログラム）がシステムに書き込まれるという問題も多く、これらは深刻な社会問題となっている。
尚、コンピュータシステムや、悪意あるネットワーク接続者による行為については、非特許文献１〜４にそれぞれ記載されている。
【非特許文献１】「ハッカー・プログラミング大全」，ＵＮＹＵＮ著
【非特許文献２】「ＯＰＥＲＡＴＩＮＧ  ＳＹＳＴＥＭ  Ｉｎｔｅｒｎａｌｓ  ａｎｄＤｅｓｉｇｎ」，Ｗｉｌｌｉａｍ  Ｓｔａｌｉｎｇｓ，Ｐｈ．Ｄ．著
【非特許文献３】「インテル・アーキテクイチャ最適化マニュアル」，米インテル社
【非特許文献４】「ＩＡ−３２  Ｉｎｔｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ  Ｓｏｆｔｗａｒｅ  Ｄｅｖｅｌｏｐｅｒ’ｓ  Ｍａｎｕａｌ」，米インテル社
【発明の開示】
【発明が解決しようとする課題】
【０００３】  前記したような悪意あるネットワーク接続者による行為は、コンピュータシステムに存在するセキュリティホールを利用して行われる。このセキュリティホールとは、インターネットを通じた不正アクセス及び、コンピュータウイルスによりコンピュータシステムを破壊改造するための警備の穴である。
現在では、世界中のコンピュータシステムにおいて、多数のセキュリティホールが存在し、前記したように、これを利用した不正アクセス、コンピュータウイルスが社会問題となっている。【０００４】  セキュリティホールの発生原因の一つは、バッファオーバーラン現象にあると言われている。このバッファオーバーラン現象について説明すると、例えば、ある電子メールの送付ソフトにおいて、送付先の入力可能なメールアドレスの最大文字数が５０文字とする。
ここで、送付先のメールアドレスに、１０００文字の長さのメールアドレスを指定すると、（想定していない）５０文字を超えた９５０文字のデータがメモリ領域を超えて書き込まれ、これによりコンピュータの制御が破綻を来たす。このような現象がバッファオーバーラン現象と呼ばれている。【０００５】  更に、バッファオーバーラン現象について、詳細に説明する。図１は、一般的なコンピュータにおいて、プログラムを実行する際に使用する記憶装置（メモリとも呼ぶ）の構成を模式的に示した図である。【０００６】  図１のメモリ構成のうち、プログラムは領域Ａ１１に格納される。そして、プログラムのデータ処理に使用する領域として、領域Ａ１２、Ａ１３、Ａ１４を確保する。このうち、領域Ａ１２は、プログラム全体で使用するデータの読み書きに使用する。領域Ａ１３は、プログラムを実行する上で、適時データ領域を確保したいときに使用し、プログラムの実行中にメモリ中の領域が伸縮する。また、領域Ａ１４は、スタックメモリと呼称する特殊なメモリ領域であって、プログラムを構成するサブルーチンと呼ばれる小さい構成のプログラムの実行管理と、サブルーチンが一時的に使用するデータの管理を行うための領域である。
尚、サブルーチンとは当文書において次のように定義する。
サブルーチンとはスタックメモリに事前にサブルーチンを実行し終わったら実行すべき次のプログラムの開始アドレスを格納して実行するプログラムと規定するものとする。サブルーチンコールとはこのサブルーチンを呼び出すこと、つまり実行する事を示すものとする。【０００７】  図２に、サンプルプログラムと共に、領域Ａ１４のスタックメモリの働きを模式的に示す。尚、サンプルプログラムはＣ言語により記述されている。
前記サンプルプログラムは、プログラム１２行目でｔｅｓｔという名称のサブルーチン（子プログラム）を呼び出し、それを実行する構成となっている。また、そのサブルーチン実行時に、引数と呼ばれるデータを４つ渡している。即ち、その引数は、‘Ｔ’、‘Ｅ’、‘Ｓ’、‘Ｔ’の４つである。これらのデータは、スタックメモリ上の領域Ａ２１、Ａ２２、Ａ２３、Ａ２４に書き込まれる。【０００８】  このサンプルプログラム実行時において、前記引数がスタックメモリに書き込まれた後、サブルーチン‘ｔｅｓｔ’に制御が移行する。また、このとき、サブルーチン実行終了後にプログラム１３行目に制御が戻るように、スタックメモリの領域Ａ２５に、プログラム１３行目を示すアドレスデータを記憶する。【０００９】  そして、プログラム１４行目から始まるサブルーチン‘ｔｅｓｔ’の実行においては、先ず、プログラム１４行目、１６行目において初期設定が行われる。次いで、１７行目において、変数ｓに‘Ａ’という値が代入される。この値は、スタックメモリの領域Ａ２６に書き込まれる。【００１０】  そして、プログラム１８行目においては、故意に、変数ｓの存在するメモリ領域をアドレス指定し、そこからゼロ（０）を１００文字、メモリに書き込むよう指示している。すなわち、これが実行されると、領域Ａ２１〜Ａ２６を含め、１００文字分の全ての内容が、ゼロに上書きされ、その結果プログラムの流れが破壊される。【００１１】  すなわち、プログラム１９行目において、本来ならば、領域Ａ２５に格納されている、呼び出し元の１３行目のアドレスに戻り、１３行目からの処理に続くのであるが、実際には、領域Ａ２５にはゼロが書き込まれており、プログラムはゼロ番地から実行しようとする。その結果、コンピュータに障害が生じる。【００１２】  以上、説明したように、本来設定されたメモリの領域を超えて不正に書き込まれる現象をバッファオーバーランと呼んでいる。尚、このような脆弱性が現在のＣＰＵ（中央処理装置）には存在しており、コンピュータウイルスや不正アクセスは、前記した現象を利用してコンピュータシステムに不正を働く。また、実際のコンピュータウイルスや不正アクセスにあっては、メモリへの上書きにおいて、自身に都合のよいメモリアドレスを書き込み、ここにプログラムの制御が移行するように仕向け、不正を働くようにしている。【００１３】  本発明は、前記したような事情のもとになされたものであり、セキュリティホールの発生原因と言われるバッファオーバーラン現象を防止し、コンピュータウイルスや不正アクセスを抑制することのできるコンピュータシステムのＣＰＵ（中央処理装置）を提供することを目的とする。
【課題を解決するための手段】
【００１４】  前記した課題を解決するため、本発明に係るコンピュータシステムのＣＰＵ（中央処理装置）は、記憶装置のどのアドレスまで現時点で使用しているかを示し、記憶装置を使用するごとに、未使用の記憶装置のアドレスを示すように値を演算する機能を有するスタックレジスタ装置を複数備えるコンピュータシステムのＣＰＵ（中央処理装置）であって、プログラムが使用するデータ処理に用いる第一のスタックレジスタ装置と、サブルーチンコールを行う際に書き込む戻りアドレスの格納に用いる第二のスタックレジスタ装置とを少なくとも備えることに特徴を有する。【００１５】  このように、アドレス処理を専用に行う第二のスタックレジスタ装置を設け、プログラムの流れを決定するアドレスデータをそのスタックに格納するよう構成したため、アドレス以外のデータを格納する第一のスタックレジスタ装置が不正に上書きされ、バッファオーバーフロー現象が生じる危険があってもプログラム全体の流れの不正な変化を防止することができる。
【発明の効果】
【００１６】  本発明によれば、プログラムの不具合により、スタック上のデータを連続上書きし、その内容を破壊したときに、被害をデータ処理用のスタック装置内に限定することができる。その結果、アドレス格納専用スタックの内容を保護し、バッファオーバーフロー現象が生じる危険があってもプログラム全体の流れの不正な変化を防止することができる。
【発明を実施するための最良の形態】
【００１７】  以下、本発明のコンピュータシステムのＣＰＵに係る実施の形態について説明する。先ず、図３乃至図１３に基づいて本発明に係る第一の実施の形態について説明する。
図３は、本発明に係るＣＰＵの概略構成図の一例である。この構成は、米国インテル社のＩＡ３２と呼ぶＣＰＵの構成を基本とする。【００１８】  図３に示すＣＰＵ１００において、レジスタ・セット１００ａは、ＣＰＵが持つ汎用レジスタのひと揃いを示す。
また、インストラクション・レジスタ（Ｉｎｓｔｒｕｃｔｉｏｎ  Ｒｅｇｉｓｔｅｒ）１００ｂは、ＣＰＵ１００がメモリより読み取った、次に実行する命令を格納し、その内容に従い、ＣＰＵコントロール部１００ｄが必要とする制御信号をＣＰＵ内部および外部に配る。【００１９】  ＡＬＵ（Ａｒｉｔｈｍｅｔｉｃ  Ｌｏｇｉｃａｌ  Ｕｎｉｔ）１００ｃは、算術論理演算機構である。即ち、ＣＰＵ１００内部で必要とする論理演算、算術演算を行なう。また、ＣＰＵ１００内部においてブラックボックスとして存在している。
アドレス・バッファ（Ａｄｄｒｅｓｓ  Ｂｕｆｆｅｒ）１００ｅは、ＣＰＵ１００が外部バスと接続する時の中継を行なう。即ち、この機構は外部バスを制御するためのアドレス情報の中継を行なう。
また、データ・バッファ（Ｄａｔａ  Ｂｕｆｆｅｒ）１００ｆは、ＣＰＵ１００が外部バスと接続する時の中継を行なう。即ち、この機構は外部バスを制御するためのデータ情報の中継を行なう。【００２０】  本発明に係るＣＰＵ１００においては、前記レジスタ・セット１００ａに特徴を有し、例えばＩＡ３２が有するレジスタ・セットの構成を基本とする。図４はＩＡ３２が有するレジスタ・セットの概略構成図、図５は図４の構成を基本とするレジスタ・セット１００ａの概略構成図である。
尚、本発明は、スタックレジスタを備えた全てのＣＰＵに適用できるが、ここでは、ＩＡ３２を例にとり本発明を説明する。【００２１】  図４に示すＩＡ３２が有するレジスタ・セット２００ａは、スタックレジスタＲ１１（３２ビット表現でＥＳＰのレジスタ）と、プログラムカウンタＲ１２（３２ビット表現でＥＩＰのレジスタ）を備える。プログラムカウンタＲ１２は、ＣＰＵがこれから実行したいプログラムのメモリのアドレスを示すものである。
また、図中に示す３２ビット表現名でのＥＡＸ、ＥＢＸ、ＥＣＸ、ＥＤＸ、ＥＳＩ、ＥＤＩ、ＥＢＰの各レジスタは、汎用レジスタである。ＥＡＸ、ＥＢＸ、ＥＤＸは、主に一般的な演算に使用する。ＥＣＸは、一般的な演算に加えてカウンタ処理用に機能の拡張を行っている汎用レジスタである。ＥＳＩ、ＥＤＩは、インデックス参照と呼ぶ機能を強化した汎用レジスタである。また、ＥＢＰは、スタックレジスタＲ１１と連動して使用する機能を強化した汎用レジスタである。【００２２】  図５に示すＣＰＵ１００が有するレジスタ・セット１００ａは、図４の構成に、アドレス処理専用スタックレジスタＲ３（第二のスタックレジスタ装置）を追加した構成とする。また、図４の構成と同様に、スタックレジスタＲ１（第一のスタックレジスタ装置）と、プログラムカウンタＲ２を備える。但し、図５に示すスタックレジスタＲ１は、図４のスタックレジスタＲ１１よりも機能を削減された構成となされる。その削減された機能とは、サブルーチンコールの際の戻りアドレスをスタックに格納する処理（機能）、及びサブルーチンコールを終了するときに格納した戻りアドレスを取得する処理（機能）である。スタックレジスタＲ１におけるその他の機能についてはスタックレジスタＲ１１と同様である。【００２３】  尚、従来のコンピュータプログラムとのより高い互換性を保つため、ダミーの戻りアドレスをスタックレジスタＲ１に格納するようにしてもよい。但し、この場合、ダミーとしてスタックレジスタＲ１に書き込むのみであり、プログラムの戻り値としては使用しない。実際のプログラムの戻り値として使用するのは、アドレス処理専用スタックレジスタＲ３に格納された値である。【００２４】  また、図６に、ＣＰＵ１００において、プログラムを実行する際に使用する記憶装置の構成を模式的に示す。この図６においては、実行したプログラムに割り振られるメモリ領域を示している。即ち、図示するように、０番地から順に、プログラム領域Ａ３１、データ領域Ａ３２、ヒープ領域Ａ３３、アドレス処理専用スタック領域Ａ３７、スタック領域（データ処理専用スタック領域）Ａ３４、引数領域Ａ３５、環境変数領域Ａ３６等が割り振られる。【００２５】  図６の構造を図１の従来構造と比較すると、アドレス処理専用スタック領域Ａ３７が増設されている。このアドレス処理専用スタック領域Ａ３７は、アドレス処理専用スタックレジスタＲ３と連動しており、アドレス処理専用スタックレジスタＲ３は、常にスタック領域Ａ３７のメモリを示している。【００２６】  このような構造のＣＰＵ１００において、図２に示したサンプルプログラムを実行すると、プログラム１２行目において、４つの引数‘Ｔ’、‘Ｅ’、‘Ｓ’、‘Ｔ’が、図７に示すスタック領域（データ処理専用スタック領域）Ａ３４内の領域Ａ４１、Ａ４２、Ａ４３、Ａ４４に書き込まれる。そして、サブルーチン‘ｔｅｓｔ’が終了した時点でプログラム１３行目に戻るよう、図７に示すアドレス処理専用スタック領域Ａ３７の領域Ａ４５に、プログラム１３行目を示すメモリのアドレスを保存するようになされる。【００２７】  そして、プログラム１４行目から始まるサブルーチン‘ｔｅｓｔ’の実行においては、先ず、プログラム１４行目、１６行目において初期設定が行われる。次いで、１７行目において、変数ｓに‘Ａ’という値が代入される。この値は、スタックメモリの領域Ａ１２に書き込まれる。【００２８】  そして、プログラム１８行目においては、故意に、変数ｓの存在するメモリ領域から、ゼロ（０）を１００文字、メモリに書き込むよう指示しており、これが実行されると、Ａ４１〜Ａ４６を含め、１００文字全ての内容が、ゼロに上書きされる。
しかしながら、プログラムの流れを決定するアドレス処理専用スタック領域Ａ３７の領域Ａ４５は、前記ゼロが上書きされた領域とは異なる領域に存在するため影響を受けない。【００２９】  続いて、サブルーチンコールで行うアドレス処理が発生する際のＣＰＵ１００の動作について、さらに図８のフロー図に基づき説明する。【００３０】  先ず、現在のプログラムカウンタＲ２の内容を、アドレス処理専用スタックレジスタＲ３が示すアドレスに書き込む（ステップＳ１）。尚、従来のＣＰＵでは、スタックレジスタＲ１１の示すアドレスに書き込むよう構成されている。【００３１】  アドレス処理専用スタックレジスタＲ３の示すメモリにデータが書き込まれたため、アドレス処理専用スタックレジスタＲ３の保持する内容を減算し、未使用のメモリを示すようにする（ステップＳ２）。
次いで、プログラムカウンタＲ２にサブルーチンコールしたいプログラムのアドレスをセットする（ステップＳ３）。以後、ＣＰＵの実行は、サブルーチンに移行する。【００３２】  また、サブルーチンコールを終了し、呼び出し元に戻るとき（リターン処理）にも、アドレス処理専用スタックレジスタＲ３が作動する。続いて、その処理について図９のフロー図に基づき説明する。【００３３】  アドレス処理専用スタックレジスタＲ３の保持する値を加算して、図８のステップＳ１にて戻りアドレスを書き込んだアドレスを示すようにする（ステップＳ１１）。
図８のステップＳ１で書き込んだアドレスがアドレス処理専用スタックレジスタＲ３の示すアドレスに格納されている。このアドレス（即ち、アドレス処理専用スタックが示したアドレス）を読み取る（ステップＳ１２）。【００３４】  次いで、プログラムカウンタＲ２にステップＳ１１で読み込んだ値を設定する（ステップＳ１３）。以後、ＣＰＵ１００の実行は、呼び出し元のプログラムに移行し、サブルーチンコールは終了する。【００３５】  以上、説明した第一の実施の形態によれば、アドレス処理専用スタックレジスタＲ３を設け、プログラムの流れを決定するアドレスデータをアドレス処理専用スタックレジスタＲ３の示すメモリ領域に格納するよう構成したため、アドレス以外のデータを格納するスタックが不正に上書きされ、バッファオーバーフロー現象が生じる危険があってもプログラム全体の流れの不正な変化を防止することができる。【００３６】  尚、前記第一の実施の形態において、図６に示した、プログラムを実行する際に使用する記憶装置の構成は、一例であって、これに限定されるものではない。例えば、図１０乃至図１３にそれぞれ示す他の構成を用いても、第一の実施の形態と同様の作用効果を得ることができる。【００３７】  続いて、図１４乃至図２１に基づき、本発明に係る第二の実施の形態について説明する。この第二の実施の形態において示すＣＰＵ１００は、前記第一の実施の形態で示した構成に加え、従来から存在するソフトウエアを問題なく動作させるための手段を備える構成となされる。【００３８】  即ち、従来のソフトウエアは、ＣＰＵ内に１つのみ存在するスタックレジスタ装置の制御しか行わない。したがって、前記第一の実施形態のように、２つのスタックレジスタ装置が存在し常に機能する場合には、誤動作が発生する。そこで、この第二の実施の形態においては、従来のソフトウエアに対しても問題なく動作するＣＰＵ１００の構成及び動作について説明する。【００３９】  図１４は、本発明に係るコンピュータシステムのＣＰＵの第二の実施の形態を示すレジスタ・セットの概略構成図である。図１４の構成においては、第一の実施形態で説明した図５の構成に加え、ＣＰＵ１００の動作状態を設定するレジスタであるスイッチ装置Ｒ４（第一、第二のスイッチ装置を含む）を備える。また、所定値を記憶し格納する加算値記憶装置Ｒ５、保護開始アドレス格納装置Ｒ６、及び保護終了アドレス格納装置Ｒ７の各レジスタを新たに備える。【００４０】  即ち、前記スイッチ装置Ｒ４、加算値記憶装置Ｒ５、保護開始アドレス格納装置Ｒ６、及び保護終了アドレス格納装置Ｒ７の各レジスタ（以下、便宜的に、追加レジスタ群と称す）は、従来のＣＰＵにおいては存在しないものであり、アドレス処理専用スタックレジスタＲ３と共に、本発明に係るＣＰＵ１００の特徴的な構成要件である。
尚、図５には図示しなかったが、図１４に示すセグメントレジスタＲ８、コントロールレジスタＲ９、Ｒ１０は、既存のＣＰＵに備えられているものである。【００４１】  また尚、前記追加レジスタ群を制御する簡単な方法は、それら各レジスタにデータを直接書き込む命令を、ＣＰＵ１００に新たに定義することである。しかしながら、新しい命令を用いるということは、この新しい命令を含むプログラムが、ＣＰＵ１００上でのみ動作し、他のＣＰＵでは動作しないということである。そこで、本発明に係るＣＰＵ１００では、従来のＣＰＵが有する命令のみで前記レジスタ群を制御することのできる機構を実装する。【００４２】  前記追加レジスタ群のうち、スイッチ装置Ｒ４は、ＣＰＵ１００の動作設定を切り替える手段である。即ち、その設定により、前記追加レジスタ群やアドレス処理専用スタックレジスタＲ３を有効とし、機能させるか、または、無効とし、従来通りのＣＰＵ環境にすることができる。例えば、従来通りの環境にしたときには、既存のソフトウエアに対し、従来通りの動作環境を提供することができる。【００４３】  また、ＣＰＵの動作途中において、スイッチを切り替え、前記追加レジスタ群等を機能させたり、あるいは無効にすることもできる。その場合、プログラムカウンタＲ２の内容は保持された状態である。また、プログラム実行中に、スイッチ装置Ｒ４の有する各設定を自由に行うことができる。したがって、ソフトウエアの用途に合わせ、スイッチを切り替え、常に最適な状態でプログラムを実行することができる。【００４４】  図１５Ａ〜Ｇに、スイッチ装置Ｒ４の詳細構成を示す。スイッチ装置Ｒ４は、３２ビットのレジスタ構成である。このうち、ゼロから第６ビットまでの各ビットのオンオフをスイッチとして利用している。【００４５】  図１５Ａ〜Ｇにおいて、各スイッチモードにおける動作を説明している。即ち、図１５Ａは、前記追加レジスタ群、並びにアドレス処理専用スタックレジスタＲ３を使用するか否かの設定について示している。【００４６】  図１５Ｂは、スタックレジスタＲ１とアドレス処理専用スタックレジスタＲ３の役割を決定する設定について示している。
図１５Ｃは、プログラムから、スタックレジスタＲ１へ新しい値の書き込みがあったときに、アドレス処理専用スタックレジスタＲ３への自動設定を行うか否かの設定について示している。【００４７】  図１５Ｄは、アドレス処理専用スタックレジスタＲ３への自動設定の方法の設定について示している。
図１５Ｅは、保護開始アドレス格納装置Ｒ６、保護終了アドレス格納装置Ｒ７の使用の設定について示している。【００４８】  図１５Ｆは、スタックレジスタＲ１の拡張する方向の設定について示している。
そして、図１５Ｇは、アドレス処理専用スタックレジスタＲ３の拡張する方向の設定について示している。即ち、図１５Ｆ、図１５Ｇは第二のスイッチ装置としての機能を示している。【００４９】  図１６は、前記スイッチ装置Ｒ４のオンオフ動作を実現するためのアセンブラ実装例である。尚、図示するプログラムＰ４１、Ｐ４２において、スタックレジスタＲ１はｅｓｐと記載される。
プログラムＰ４１は、本発明に係る各機能に設定を行い、各機能を有効にするためのプログラムである。具体的な処理として、このプログラム４１は、スタックレジスタＲ１に値ゼロを設定する。この実行により、第一のスイッチ装置としてのスイッチ装置Ｒ４がオン状態となり、加算値記憶装置Ｒ５、保護開始アドレス格納装置Ｒ６、及び保護終了アドレス格納装置Ｒ７、アドレス処理専用スタックレジスタＲ３の各レジスタにデータが書き込める状態となる（この状態を拡張設定モードと称す）。【００５０】  一方、プログラムＰ４２は、本発明に係る各機能を無効にするためのプログラムである。即ち、拡張設定モードを解除するためのプログラムである。具体的には、例えば、スタックレジスタＲ１（ｅｓｐレジスタ）に有値を設定し、自身に自身をｍｏｖ命令でコピーする（ｅｓｐの内容をｅｓｐにコピーする）ことによりデータ転送される。これにより、ＣＰＵ１００は従来のＣＰＵと同様の状態となる。【００５１】  このように、スイッチ装置Ｒ４は、少なくともスタックレジスタＲ１に値ゼロが設定されたときに、スイッチオン状態となされる。
また、この条件だけでは、誤動作によりスイッチオンの状態となるおそれがあるため、ダブルトリガ方式となされる。即ち、プログラムＰ４１、Ｐ４２のそれぞれの２行目で行なっている、ｅｓｐレジスタの内容をｅｓｐレジスタにコピーするという無意味な命令が、もう１つのトリガとされる。これら２つのトリガにより、誤動作のない設定を行なう。【００５２】  本発明の係る各機能を使用するには、２通りの方法がある。１つは、ＯＳ（オペレーティングシステム）またはプログラム起動時に明示的に設定を行う方法である。この方法によれば、従来のＯＳまたはプログラムに対しごく僅かの仕様変更のみで実行することができる。既存のソフトウエアを変更する必要があるが、高い互換性を得ることができる。その設定方法について図１７に基づいて説明する。【００５３】  図１７のプログラムＰ５１は、スタックレジスタＲ１にスタック領域を設定するサンプルプログラムである。従来のソフトウエアは、プログラム起動時に必ずこのようにしてスタックレジスタＲ１にスタック領域を設定している。
一方、プログラムＰ５２は、本発明に係る各機能を活用するためのプログラムである。即ち、前記各機能を活用するには、従来プログラムＰ５１のように記述していた部分を、プログラムＰ５２のように記述すればよい。尚、プログラムＰ５２中、ｅｓｐはスタックレジスタＲ１、ｅａｘはスイッチ装置Ｒ４、ｅｃｘは保護開始アドレス格納装置Ｒ６、ｅｄｘは保護終了アドレス格納装置Ｒ７、ｅｓｉはアドレス処理専用スタックレジスタＲ３をそれぞれ示している。【００５４】  このプログラムＰ５２の流れを簡単に説明すると、先ず、ＣＰＵ１００を拡張設定モードにする。そして、スイッチ装置Ｒ４にＣＰＵモードを設定する。次いで、保護開始アドレス格納装置Ｒ６にスタックメモリのゼロ側のアドレス（ＳＴＡＣＫ＿ＬＯＷ）を設定し、保護終了アドレス格納装置Ｒ７にスタックメモリの高位側のアドレス（ＳＴＡＣＫ＿ＬＯＷ＋８０００ｈ）を設定する。そして、アドレス処理専用スタックの開始アドレス（ＳＴＡＣＫ＿ＬＯＷ）を設定し、最後にＣＰＵ１００を元の状態に戻す処理が行なわれる。【００５５】  これにより、本発明に係る各機能を活用することができる。図１８にプログラムＰ５２を使用したときのメモリ配置図を示す。図示するように、スタックレジスタＲ１が示すメモリ領域とは別領域にアドレス処理専用スタックレジスタＲ３が示すメモリ領域が確保される。また、アドレス処理専用スタックは、保護開始アドレス格納装置Ｒ６と保護終了アドレス格納装置Ｒ７とにより指定されたメモリ領域において保護される。即ち、この領域においては、サブルーチンコールの格納アドレス以外のデータの書き込みが禁止される。【００５６】  尚、従来、プログラムＰ５１がＯＳのアプリケーション起動プログラムの中に入っている場合には、ＯＳに対してプログラムＰ５１をＰ５２に変更すればよい。勿論、ＣＰＵが本発明における新機能を実装していない場合であっても、見かけ上、無意味な命令を実行しているだけであり、支障なく従来のプログラムを実行することができる。【００５７】  続いて、本発明の係る各機能を使用するための、もう１つの方法について説明する。
この方法は、プログラム実行中に、スタックレジスタＲ１に対しデータが書き込まれたとき、自動的にアドレス処理専用スタックレジスタＲ３を初期化し使用可能とする方法（自動設定処理と呼ぶ）である。
この方法におけるＣＰＵ１００の動作について、図１９のフロー図に基づき説明する。
尚、図１９においては、図中に示すプログラムＰ７１が実行された際に自動的に行なわれる制御を示している。プログラムＰ７１は、スタックレジスタＲ１に任意の定数ＳＴＡＣＫ＿ＨＩＧＨを設定するプログラムである。【００５８】  先ず、プログラムＰ７１が実行され、スタックレジスタＲ１に任意の定数（ＳＴＡＣＫ＿ＨＩＧＨ）が設定される（図１９のステップＳ７１）。
ここでスタックレジスタＲ１の内容がスタック用に確保したメモリ領域の高位側の最先端にある場合（ステップＳ７２）、スタック領域の設定がなされたと判断し、アドレス処理専用スタックレジスタＲ３に、スタック領域の初期値が設定される（ステップＳ７３）。【００５９】  尚、スタックメモリ領域の最先端アドレスの情報は、ＩＡ３２（Ｉｎｔｅｌ社の３２ビットマイクロプロセッサ）ではプログラムカウンタＲ２を参照することにより得ることができる。ＩＡ３２は、３２ビットで動作するプロテクトモードの時には、プログラムカウンタＲ２、セグメントレジスタＲ８、コントロールレジスタＲ９を参照し、スタック領域を定義するメモリ領域管理情報を得ることができる。尚また、ステップＳ７２の判定処理は省略してもよいが、誤動作防止のために行うのが望ましい。【００６０】  また、ステップＳ７３における、アドレス処理専用スタックレジスタＲ３への値の設定については、スイッチ装置Ｒ４の第３ビットに依存する（図１５Ｄ参照）。即ち、第３ビットがオフ（論理０）のときには、スタック領域として、スタックレジスタＲ１の値を設定する。また、第３ビットがオン（論理１）のときには、スタック領域に設定されたゼロ側の最先端の値を設定するようになされる。尚、この値は、ＩＡ３２においては、プログラムカウンタＲ２、セグメントレジスタＲ８、コントロールレジスタＲ９を参照することにより取得することができる。【００６１】  次いで、アドレス処理専用スタックレジスタＲ３に、加算値記憶装置Ｒ５に記憶された値を加算する（ステップＳ７４）。この加算処理は、スタック領域の最先端を直接入れるリスクを回避するための安全処理である。
尚、この加算値は、加算結果が、スタック用メモリ領域のうち、空き領域に設定されるよう、スタック用メモリ領域のゼロ番地側の開始アドレスを参照して決定される。また、加算値記憶装置Ｒ５には、負数を設定して加算してもよいし、あるいは、スタックレジスタＲ１に設定された値が高位側の値であった場合には、加算値記憶装置Ｒ５の値を正数として減算してもよい。【００６２】  以上の制御により、自動的にアドレス処理専用スタックレジスタＲ３が有効となる。即ち、ＣＰＵ１００においては、従来のＣＰＵと同様に、先ず１つのレジスタ装置だけで動作し、スタックレジスタＲ１にデータ設定がなされた時点で、アドレス処理専用スタックレジスタＲ３が初期化され、使用可能な状態となる。したがって、プログラム実行中にＣＰＵ１００にこの設定がなされることで、従来のソフトウエアを問題なく動作させることができる。【００６３】  尚、アドレス処理専用スタックレジスタＲ３に前記の自動設定処理を行う場合のメモリ配置を図２０に示す。図２０においては、スイッチ装置Ｒ４に対して２進法数値１０１００００（１６進法５０）を設定しているものとする。スタックレジスタＲ１にデータが与えられたとき、図１９のフロー図に示した制御が行なわれ、メモリ配置は図２０のようになる。これにより、既存のソフトウエアに対して高い互換性を自動的に提供することができる。【００６４】  また、図２１は、ＩＡ３２がプロテクトモードと呼称する３２ビットモード時のメモリ領域の確保方法を説明した図である。図中、セグメントセレクタ（Ｓｅｇｍｅｎｔ  Ｓｅｌｅｃｔｏｒ）１３は、図１４におけるセグメントレジスタＲ８に相当する。セグメントセレクタ１３の内容により、ＧＤＴ（グローバルディスクリプタテーブル）１４あるいはＬＤＴ（ローカルディスクリプタテーブル）１５を経由してＬＤＴＲ（ローカルディスクリプタテーブルレジスタ）１６を取得することができる。【００６５】  このＬＤＴＲ１６は、メモリ領域の開始番地、終了番地を示す情報を備えている。したがって、ＩＡ３２において、本発明に係るＣＰＵ１００の機能を実装する際には、メモリ領域の開始番地及び終了番地を必要とするときにはＬＤＴＲＴ６を参照し取得すればよい。【００６６】  以上、説明した第二の実施の形態によれば、スイッチ装置Ｒ４を設けたことにより、本発明に係る構成として追加されたレジスタ群やアドレス処理専用スタックレジスタＲ３の機能を有効とするか無効とするかを切り替えることができ、無効とした場合には、従来のソフトウエアに対し、従来のＣＰＵと同様の動作環境を提供することができる。【００６７】  また、スタックレジスタＲ１のみが使用可能な状態において、実行中のソフトウエアがスタックレジスタＲ１に対しスタック領域の開始アドレスを書き込むことにより、自動的にアドレス処理専用スタックレジスタＲ３に対して初期化設定がなされる。これにより、アドレス処理専用スタックレジスタＲ３を使用可能な状態にすることができる。したがって、従来のソフトウエアを、特別な操作なしに、従来同様に動作させることができ、且つ、バッファオーバーランによる被害を抑制することができる。【００６８】  また、保護開始アドレス格納装置Ｒ��、及び保護終了アドレス格納装置Ｒ７を設け、それらに格納されたアドレス領域においては、サブルーチンコールの格納アドレス以外のデータの書き込みを禁止することで、アドレス処理専用スタックレジスタＲ３が使用するメモリ領域を保護することができる。【００６９】  また、スイッチ装置Ｒ４において、スタックレジスタＲ１及びアドレス処理専用スタックレジスタＲ３が示すメモリの確保方向を低位方向（ゼロ番地方向）と高位方向のいずれかに切り替えることができる。したがって、スタックレジスタＲ１が示すメモリの確保方向を高位方向に設定することにより、バッファオーバーラン現象が発生したときに、データ破壊は未使用の領域に対して行なわれ、被害を最小限に食い止めることができる。【００７０】  尚、前記第二の実施の形態において、スイッチ装置Ｒ４は、ＣＰＵ１００上に備えられた１つのレジスタとして示したが、各設定をそれぞれ別個に行う複数のレジスタとして構成されてもよい。あるいは、メモリ上で、特定番地のビット列をスイッチとして定義し、これをスイッチ装置Ｒ４としてもよい。
【図面の簡単な説明】
【００７１】［図１］図１は、一般的なコンピュータにおいて、プログラムを実行する際に使用する記憶装置（メモリとも呼ぶ）の構成を模式的に示した図である。
［図２］図２は、サンプルプログラム及びスタックメモリの働きを模式的に示す図である。
［図３］図３は、本発明に係るＣＰＵの概略構成図の一例である。
［図４］図４は、米国インテル社のＩＡ３２系ＣＰＵのレジスタ・セットの概略構成図である。
［図５］図５は、第一の実施形態における本発明に係るＣＰＵのレジスタ・セットの概略構成図である。
［図６］図６は、ＣＰＵにおいてプログラムを実行する際に使用する記憶装置の構成を模式的に示す図である。
［図７］図７は、データ処理専用スタック領域とアドレス処理専用スタック領域とを模式的に示す図である。
［図８］図８は、サブルーチンコールで行うアドレス処理が発生する際のＣＰＵの動作を示すフロー図である。
［図９］図９は、サブルーチンコールを終了し、呼び出し元に戻るとき（リターン処理）の動作を示すフロー図である。
［図１０］図１０は、プログラムを実行する際に使用する記憶装置の他の構成例である。
［図１１］図１１は、プログラムを実行する際に使用する記憶装置の他の構成例でる。
［図１２］図１２は、プログラムを実行する際に使用する記憶装置の他の構成例である。
［図１３］図１３は、プログラムを実行する際に使用する記憶装置の他の構成例である。
［図１４］図１４は、第二の実施の形態における本発明に係るＣＰＵのレジスタ・セットの概略構成図である。
［図１５Ａ−Ｇ］図１５Ａ〜Ｇは、スイッチ装置の詳細構成を説明するための図である。
［図１６］図１６は、スイッチ装置のオンオフ動作を実現するためのアセンブラ実装例である。
［図１７］図１７は、ＯＳまたはプログラム起動時に明示的に設定を行うプログラム例である。
［図１８］図１８は、図１７のプログラムを使用したときのメモリ配置図の一例である。
［図１９］図１９は、自動設定処理を行う場合のＣＰＵの動作を説明するためのフロー図である。
［図２０］図２０は、アドレス処理専用スタックレジスタに自動設定処理を行う場合のメモリ配置の一例である。
［図２１］図２１は、ＩＡ３２がプロテクトモードと呼称する３２ビットモード時のメモリ領域の確保方法を説明した図である。
【図１】
2005020069.tif 000003
【図２】
2005020069.tif 000004
【図３】
2005020069.tif 000005
【図４】
2005020069.tif 000006
【図５】
2005020069.tif 000007
【図６】
2005020069.tif 000008
【図７】
2005020069.tif 000009
【図８】
2005020069.tif 000010
【図９】
2005020069.tif 000011
【図１０】
2005020069.tif 000012
【図１１】
2005020069.tif 000013
【図１２】
2005020069.tif 000014
【図１３】
2005020069.tif 000015
【図１４】
2005020069.tif 000016
2005020069.tif 000017
2005020069.tif 000018
【図１６】
2005020069.tif 000019
【図１７】
2005020069.tif 000020
【図１８】
2005020069.tif 000021
【図１９】
2005020069.tif 000022
【図２０】
2005020069.tif 000023
【図２１】
2005020069.tif 000024
【手続補正書】
【提出日】平成16年12月22日(2004.12.22)
【手続補正００１】
【補正対象書類名】特許請求の範囲
【補正対象項目名】特許請求の範囲
【補正方法】変更
【補正の内容】
【請求項１】（補正後）記憶装置のどのアドレスまで現時点で使用しているかを示し、記憶装置を使用するごとに、未使用の記憶装置のアドレスを示すように値を演算する機能を有するスタックレジスタ装置を複数備えるコンピュータシステムのＣＰＵ（中央処理装置）であって、
プログラムが使用するデータ処理に用いる第一のスタックレジスタ装置と、サブルーチンコールを行う際に書き込む戻りアドレスの格納に用いる第二のスタックレジスタ装置と、所定値を記憶する加算値記憶装置とを備え、
プログラムから前記第一のスタックレジスタ装置と第二のスタックレジスタ装置のいずれか一方にデータが書き込まれた際、該データに対し前記加算値記憶装置が記憶する所定値を加算または減算した結果を、他方のスタックレジスタ装置に格納する処理が行なわれることを特徴とするコンピュータシステムのＣＰＵ。
【請求項２】（補正後）プログラムから第一のスタックレジスタ装置と第二のスタックレジスタ装置のいずれか一方にデータが書き込まれた際、スタック用に割り振られたメモリ領域のゼロ番地側の開始アドレスを取得し、前記加算値記憶装置が記憶する所定値を決定する処理が行なわれることを特徴とする請求項１に記載されたコンピュータシステムのＣＰＵ。
【請求項３】前記第一のスタックレジスタ装置と第二のスタックレジスタ装置の両方、または、いずれか一方を使用可能な状態に切り替える第一のスイッチ装置を備え、
前記第一のスイッチ装置により、第一のスタックレジスタ装置と第二のスタックレジスタ装置のいずれか一方が使用可能な状態になされた際は、該使用可能なスタックレジスタ装置は、サブルーチンコールを行う際の戻りアドレスの管理とプログラムが使用するデータ処理とを行うレジスタとして使用されることを特徴とする請求項１または請求項２に記載されたコンピュータシステムのＣＰＵ。
【請求項４】（補正後）前記第一のスタックレジスタ装置と第二のスタックレジスタ装置のいずれか一方が、サブルーチンコールを行う際の戻りアドレスの管理とプログラムが使用するデータ処理とを行うレジスタとして使用されている状態から、前記請求項１および請求項２に記載された処理が行なわれることにより、前記第一のスイッチ装置の設定が変更され、
他方のスタックレジスタ装置が使用可能な状態となることを特徴とする請求項３に記載されたコンピュータシステムのＣＰＵ。
【請求項５】（補正後）前記第一及び／または第二のスタックレジスタ装置が示すメモリの確保方向をメモリの高位方向と低位方向のいずれかに動作させる設定を行う第二のスイッチ装置を備えることを特徴とする請求項１乃至請求項４のいずれかに記載されたコンピュータシステムのＣＰＵ。
【請求項６】スタック用に割り振られたメモリ領域の開始アドレスと終了アドレスの情報を格納するアドレス格納装置を備え、
前記アドレス格納装置が格納するアドレス情報により決定されたメモリ領域に対し、サブルーチンコールの格納アドレスの書き込みを許可し、それ以外のデータの書き込みを禁止することを特徴とする請求項１乃至請求項５のいずれかに記載されたコンピュータシステムのＣＰＵ。
【請求項７】（補正後）前記第一及び／または第二のスタックレジスタ装置は、
記憶装置を使用するごとに、アドレスを減算ではなく加算し、未使用の記憶装置のアドレスを示すことを特徴とする請求項１乃至請求項６のいずれかに記載されたコンピュータシステムのＣＰＵ。
【国際調査報告】
2005020069.tif 000025
2005020069.tif 000026
2005020069.tif 000027
2005020069.tif 000028