(57)【特許請求の範囲】
【請求項１】
命令実行がプログラム順序に関係なく行われるプロセッサであって、
命令を実行し、実行終了した命令について終了情報を送信する実行手段と、
前記実行手段が送信した終了情報を受信し、実行終了した命令に対する結果を前記プログラム順に並べ直して命令実行を確定し、確定した命令について命令実行が確定したことを通知する完了命令情報を送信するリタイア手段と、
前記リタイア手段から前記完了命令情報を受信し、該完了命令情報を用いてシグネチャを生成するシグネチャ生成手段と、
を備え、
並列にアウト・オブ・オーダで実行される命令が所定量完了した後にシグネチャを取得して、検証を行うことを特徴とするプロセッサ。
【請求項２】
更に、前記シグネチャ生成手段で生成されたシグネチャを格納するシグネチャ・レジスタを備え、
一定の命令数毎に前記実行手段が発生するタスクスイッチにより、前記シグネチャ・レジスタに格納された値を読み出して、比較検証することを特徴とする請求項１記載のプロセッサ。
【請求項３】
前記シグネチャ生成手段は、前記完了命令情報のうち、メモリへの書き込み情報のみを抽出したという情報を用いてシグネチャを生成することを特徴とする請求項１または請求項２記載のプロセッサ。
【請求項４】
前記シグネチャ生成手段で生成されたシグネチャを格納する、複数のシグネチャ・レジスタと、
いずれの仮想マシンで実行されたか、またはいずれのプロセスで実行されたか、を示す仮想マシンＩＤまたはプロセスＩＤに基づいて、前記生成されたシグネチャをいずれの前記シグネチャ・レジスタに格納するかを選択する選択手段と、
を備えることを特徴とする請求項１記載のプロセッサ。
【請求項５】
命令を実行し、実行終了した命令についての終了情報を送信する実行手段と、
前記実行手段が送信した終了情報を受信し、実行終了した命令に対する結果を前記プログラム順に並べ直して命令実行を確定し、確定した命令について命令実行が確定したことを通知する完了命令情報を送信するリタイア手段と、
前記リタイア手段から前記完了命令情報を受信し、該完了命令情報を用いてシグネチャを生成するシグネチャ生成手段と、
を備える、命令実行がプログラム順序に関係なく行われるプロセッサを複数接続して構成される多重化システムにおいて、
ある特定の前記プロセッサが、並列にアウト・オブ・オーダで実行される命令の、一定量の処理が完了後、それぞれの前記プロセッサで生成される前記シグネチャを複数以上収集し、該収集したシグネチャを比較し一致検証を行う検証手段を備えることを特徴とする多重化システム。
【請求項６】
命令実行がプログラム順序に関係なく行われるプロセッサにおけるシグネチャの生成方法であって、
命令が実行され、実行終了した命令の結果が前記プログラム順に並べ直されて命令実行が確定された、ということを示す完了命令情報を用いてシグネチャを生成し、並列にアウト・オブ・オーダで実行される命令が所定量完了した後にシグネチャを取得する、
ことを特徴とするプロセッサにおけるシグネチャの生成方法。
【請求項７】
前記プロセッサは、生成されたシグネチャを格納するシグネチャ・レジスタを複数備え、
命令実行時の状態により、前記生成されたシグネチャを格納するレジスタを前記複数のシグネチャ・レジスタから選択して格納することを特徴とする請求項６記載のシグネチャの生成方法。
【請求項８】
命令実行がプログラム順序に関係なく行われるプロセッサを複数接続して構成される多重化システムにおける検証方法であって、
それぞれの前記プロセッサは、命令が実行され、実行終了した命令の結果が前記プログラム順に並べ直されて命令実行が確定された、ということを示す完了命令情報を用いてシグネチャを生成し、
ある特定の前記プロセッサが、並列にアウト・オブ・オーダで実行される命令の、一定量の処理が完了後、それぞれの前記プロセッサで生成される前記シグネチャを複数以上収集し、該収集したシグネチャを比較し一致検証を行う、
ことを特徴とする多重化システムにおける検証方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、高信頼の求められるコンピュータシステムで採用されている多重実行検証を容易にする技術に関する。
【背景技術】
【０００２】
近年、コンピュータシステムは社会に広く普及し、社会的インフラとしてなくてはならないものとなってきている。それに伴い、コンピュータシステムの信頼性は重要性を増してきている。一方で従来より続いてきた、コンピュータシステムに対する性能向上の要求も強く、コンピュータシステムは性能向上と信頼性の両者を兼ね備えたシステムであることが求められている。
【０００３】
コンピュータシステムを構成するＬＳＩ（Ｌａｒｇｅ  Ｓｃａｌｅ  Ｉｎｔｅｇｒａｔｉｏｎ）は、年々微細化・低電圧化を進めることにより動作周波数を向上させ、性能向上の要求に応えている。しかしその一方で、微細化、低電圧化は外乱に対する影響を受けやすくなり、個々のＬＳＩ単体でみた場合の信頼性は低下する傾向にある。たとえば宇宙放射線によりＬＳＩ内部で保持しているデータが反転してしまうソフトエラーと呼ばれる現象は、ＬＳＩが高集積化されるに従って頻度が向上することが知られており、現在でも重要な問題となってきている。
【０００４】
そのため個々のＬＳＩの信頼性低下を補うべく、信頼性が要求されるシステムでは、信頼性向上のための構造的な工夫が用いられている。たとえば先に挙げたソフトエラーの例では、メモリの内容が１ビット反転しても元に戻すことができるためのエラー訂正コードが多くの計算機で用いられている。
【０００５】
エラー訂正コードはメモリに限定された信頼性向上のための工夫であるが、計算機の実行結果そのものの信頼性を向上させるための工夫として広く用いられている手法が多重実行方式である。
【０００６】
多重実行方式は同じプログラムを複数回実行し、実行結果が一致するかどうかを検証し、複数で一致した結果を採用することによって結果の正当性を保証する方式である（図１１参照）。入力として同じデータを与えれば、計算途中で故障等の問題が発生しない限り、計算結果は同じものとなるはずである。したがって、複数の計算結果の一致を確認することにより、計算途中で故障等の問題が発生しているという確率を低下させることができる。
【０００７】
複数の実行結果を比較して違いが発見された場合、三つ以上の実行結果があれば、多数決を用いて適切と思われる結果を選択することができる。二つの場合は、実行を再度やり直したり、ユーザに対して警告を出すなどの手法が用いられる。さらに、特許文献１では、複数の計算ユニットで同時に実行を行っている場合に、他の実行結果と異なる結果を出力した実行ユニットには故障が発生しているものとみなしてシステムから切り離すなどの高度な処理が可能な構成を開示している。
【０００８】
このようにコンピュータシステムにおいて信頼性を向上するために、多重実行方式が用いられてきたが、多重実行方式では、実行の一致検証をどのように行うか、ということが非常に重要なポイントとなる。
【０００９】
多重実行方式では「プログラムの実行」→「結果の一致検証」という手続きを経て、初めてプログラムの実行が信頼に足るものであるとして確定される。そのため、結果の一致検証に時間がかかれば、その分だけプログラムの実行が確定するまで時間がかかることになり、コンピュータシステムの性能低下を招く。そのため、実行の一致検証は高速に行われる必要がある。
【００１０】
そこで重要となるのが検証に用いる「実行結果」の選択と検証の手段である。実行結果として何を用いるかという問題は、どういうレベルで多重化するのかという問題に等しい。
【００１１】
一方、検証の手段とは、どのような比較方法を用いるかということである。
これまでに、多重実行方式として「シグネチャ・チェック」が提案されてきた。
シグネチャとは、ひと固まりの情報から特徴的な部分を抜き出して生成されるコードのことである。マイクロプロセッサから出力される実行結果は膨大な量になるため、そのままでは実行結果を完全に比較することは困難である。そこで、出力データからシグネチャを生成し、シグネチャのみの比較によって出力データ全体の比較の代わりをさせるというのが「シグネチャ・チェック」方式である。
【００１２】
シグネチャの生成方法には様々な方法がある。たとえば、チェックサムをとる、ＣＲＣ（Ｃｙｃｒｉｃ  Ｒｅｄｕｎｄａｎｃｙ  Ｃｈｅｃｋ）を取る、ＬＦＳＲ（Ｌｉｎｅａｒ
Ｆｅｅｄｂａｃｋ  Ｓｈｉｆｔ  Ｒｅｇｉｓｔｅｒ）を取るなどの手法によってシグネチャを生成することができる。
【００１３】
「シグネチャ・チェック」方式は、出力結果を完全に比較する方法に比べて検出能力が劣る。しかしその分、一致検査にかかる時間は非常に短くて済む。故障の発生頻度が非常に低いことを考慮し、シグネチャの生成方法として適切な方法を用いれば、十分高い精度で出力結果の一致を検査することが可能である。また、「シグネチャ・チェック」方式では、シグネチャをどのように生成するかが問題となるが、ソフトウェアによってシグネチャを生成する方法は、シグネチャの生成に出力結果の一致検査よりも多くの時間がかかってしまうため、シグネチャ・チェックの利点が失われてしまう。従来の「シグネチャ・チェック」方式による多重化高信頼システムには次のような問題がある。
【００１４】
特許文献２では、マイクロプロセッサの内部状態からシグネチャを生成し、シグネチャを利用した多重化高信頼システムを構築している。
【００１５】
特許文献２の開示のシステムでは、シグネチャの生成はマイクロプロセッサの状態、たとえばパイプラインの状態や実行中の命令、実行によって出力されたデータなどから行われる。しかし現在のマイクロプロセッサは内部構造が複雑になっており、実行結果が同じでもマイクロプロセッサの内部状態が異なる場合が少なくない。たとえば、現在の高速なマイクロプロセッサで用いられているｏｕｔ−ｏｆ−ｏｒｄｅｒ実行では、命令の順序はマイクロプロセッサがある程度自由に変更することができる。したがって、同じプログラムを実行してもプロセッサ内部では他のプロセッサと違う順序で命令を実行している可能性がある。また、近年のマイクロプロセッサはキャッシュを大量に内蔵しているが、キャッシュの量によっても動作は変わってくる。特にキャッシュの一部が物理的に故障した場合、その部分のみを切り離して実行を継続する機能が備わっているマイクロプロセッサでは、キャッシュサイズが同一のプロセッサ同士であっても内部的には異なる動きをする可能性がある。したがって、マイクロプロセッサの内部状態を用いたシグネチャ生成方法は、現代のマイクロプロセッサから構成されるコンピュータシステムに応用することができない。
【００１６】
特許文献３でも同様に、シグネチャを用いたマイクロプロセッサに関する技術が開示さ
れている。特許文献３の開示のシステムでは、シグネチャはレジスタ・ファイルの書き込みから生成される。レジスタ・ファイルの書き込みは、シグネチャ生成器に送られると同時に、スタック状に構成されたレジスタに保存される。ある一定期間が経過すると、二つあるいはそれ以上のプロセッサのシグネチャ同士が比較され、一致していればスタック状のレジスタが一段進み、レジスタ・ファイルへの書き込みが実際に反映されるという方式を取る。これによって、高信頼システムを構築している。
【００１７】
特許文献３の開示のシステムは、スタック状になったレジスタ・ファイルを用いる。これによってレジスタ・ファイルへの書き込み反映がシグネチャの一致検査の後に行われることを保証し、高信頼実行を可能としている。しかし一方で、スタック状のレジスタ・ファイルは大量のメモリを必要とし、さらにシグネチャの一致検査回路、不一致の際のやり直し回路など、マイクロプロセッサに様々な付加回路を必要とする。そのため、現状のマイクロプロセッサに対して大幅な変更が必要となり、大きなコストがかかる。
【００１８】
また特許文献３では、ｏｕｔ−ｏｆ−ｏｒｄｅｒプロセッサへの応用も言及されているが、実行順序が入れ替わった命令列から累積的に生成されるシグネチャを一致させる必要があることから、シグネチャの生成方法として順序に依存しない方式（たとえばチェックサムなど）を用いなければならない。これは、他の、順序に依存する方式（たとえばＣＲＣやＬＦＳＲなど）と比べて検出能力の低い方式であり、故障検出の能力が低下するという問題がある。
【特許文献１】特開平１１−０８５７１３号公報
【特許文献２】特開平０６−８３６６３号公報
【特許文献３】特開２００２−３１２１９０号公報
【発明の開示】
【発明が解決しようとする課題】
【００１９】
以上のことから、本発明の課題は、シグネチャ・チェックを用いた多重化実行方式による多重化高信頼システムにおいて、従来システムの問題を解決することにある。
すなわち、現在の高速なマイクロプロセッサであるｏｕｔ−ｏｆ−ｏｒｄｅｒプロセッサを用いた多重化システムにおけるシグネチャ生成を、容易かつ比較的安価に実現できる方法を提供することにある。
【００２０】
更に、提案するシグネチャ方法により生成されたシグネチャを用いて信頼性を検証することにより高性能かつ高信頼な多重化システムを提供する。
【課題を解決するための手段】
【００２１】
このシグネチャ生成方法の特徴は、命令が実行され、実行終了した命令の結果がプログラム順に並べ直されて命令実行が確定された、ということを示す完了命令情報を用いてシグネチャを生成するところにある。具体的には、ｏｕｔ−ｏｆ−ｏｒｄｅｒプロセッサの内部にハードウェア的にシグネチャ生成回路を設け、該シグネチャ生成回路が、ｏｕｔ−ｏｆ−ｏｒｄｅｒプロセッサのリタイアユニットから得られる完了命令情報を受信し、該完了命令情報に基づいてシグネチャを生成する。
【００２２】
このように、シグネチャは命令実行が確定したことに基づいて生成されるため、特に命令の実行順序がプログラム順序によらないｏｕｔ−ｏｆ−ｏｒｄｅｒ実行を行うマイクロプロセッサにおいても正確にシグネチャを生成することができる。また、シグネチャを生成するためのハードウェアは比較的簡易な回路で実現可能で、ハードウェアコストも低減できる。
【００２３】
また、上記構成を備えるマイクロプロセッサによって構成される多重化システムにおい
て、一定量の処理に対応して生成されるシグネチャを収集し、比較し、一致検証を行うことを特徴とする。
【００２４】
これにより、ｏｕｔ−ｏｆ−ｏｒｄｅｒ実行を行うマイクロプロセッサを用いた高性能多重化システムの信頼性を高めることが可能である。
【発明の効果】
【００２５】
本シグネチャ生成方法によれば、シグネチャは命令実行が確定したことに基づいて生成されるため、特に命令の実行順序がプログラム順序によらないｏｕｔ−ｏｆ−ｏｒｄｅｒ実行を行うマイクロプロセッサにおいても正確にシグネチャを生成することができる。また、シグネチャを生成するためのハードウェアは比較的簡易な回路で実現可能で、ハードウェアコストも低減できる。
【００２６】
また、ｏｕｔ−ｏｆ−ｏｒｄｅｒ実行を行うマイクロプロセッサで構成される多重化システムにおいて信頼性を検証することが可能となり、高性能かつ高信頼な多重化システムを提供することが可能となる。
【発明を実施するための最良の形態】
【００２７】
以下、図面を参照して、本発明の実施の形態について説明する。
図１に実施例の多重化システムの全体構成を示す。これから実施例１および実施例２について説明するが、図１はいずれの実施例にも共通な構成である。また、本実施例では多重化システムの構成として複数のプロセッサが並列に動作するシステム構成を説明するが、多重化システムはこれに限定されるものではなく、一つのプロセッサで同じ処理をｎ回繰り返す、という多重化システムの構成であってもかまわない。
【００２８】
さて、図１の多重化システム１０は、複数のプロセッサ０（１１−０）〜プロセッサＮ（１１−Ｎ）を含む。各プロセッサ１１には、プログラムやユーザデータなどがデータ記憶部１２から入力され、命令実行などの処理が行われる。また各プロセッサ１１ではシグネチャが生成される。そして、各プロセッサにおいて同じ量の処理が終了した時点、たとえば各プロセッサで一定の命令数の実行が終了した時点で、複数のプロセッサのうち例えばプロセッサ０（１１−０）が、他のプロセッサ１（１１−１）〜プロセッサＮ（１１−Ｎ）のシグネチャを、通信路１３を介して収集し、一致検証を行う。一致検証において、一致しないシグネチャがある場合には例えば一致しないシグネチャを生成したプロセッサの動作を停止させたり、ユーザに警告するなどのエラー処理を行う。
【００２９】
図２に、図１に示した実施例におけるプロセッサの詳細な構成を示す。これは、ｏｕｔ−ｏｆ−ｏｒｄｅｒプロセッサの一般的な構成である。
プログラムはＬ２キャッシュ２８、Ｌ１命令キャッシュ２６を経由して、フェッチ＆デコードユニット２５に取り込まれ、解析される。解析した結果はスケジュール＆命令発行ユニット２２に送られ、そこでプログラム実行順序によらないスケジューリングがおこなわれ、適切な実行ユニット２４で実行される。
【００３０】
リタイアユニット２１に備えられるリオーダーバッファ２９では、スケジュール＆命令発行ユニット２２でばらばらになる前のプログラム順序を記憶しておく。実行ユニット２４での実行が完了すると、命令完了情報はリタイアユニット２１に送られる。リタイアユニット２１では、リオーダーバッファ２９の情報を元に、終了した結果を元のプログラム順序に並べ直し、実行を確定していく。
【００３１】
したがって、マイクロプロセッサ内部でどのような順序で命令を実行しようとも、実行結果はリタイアユニット２１によってリオーダーバッファ２９に並べられたプログラム順
に確定される。逆に言えば、リタイアユニット２１から情報をもらえば、内部の命令実行順序によらず、プログラム順序で実行終了情報が得られることになる。
【００３２】
そこで、本実施例１では、図３に示すようにｏｕｔ−ｏｆ−ｏｒｄｅｒ実行のマイクロプロセッサ内部でリタイアユニット２１から、プログラム順序の実行終了情報である完了命令情報（通常はＲｅｔｉｒｅ命令情報と呼ばれる）をもらい、該完了命令情報に基づいてシグネチャを生成する回路等をマイクロプロセッサ１１に追加する。
【００３３】
図３において、シグネチャ生成回路３１は、チェックサム、ＣＲＣ、ＬＦＳＲなどのコーディング手段によってシグネチャを生成する。生成されたシグネチャは、シグネチャ・レジスタ３３に保存され、次のシグネチャ生成あるいはプログラムからの読み出しに提供される。
【００３４】
シグネチャ有効／無効制御ビット３２はプログラムからセットされる１ビットから成る制御ビットである。このビットが有効状態のときのみシグネチャ・レジスタ３３の値は更新され、無効の場合は命令実行が完了しようともシグネチャ・レジスタ３３の値は更新されない。
【００３５】
シグネチャ生成回路３１は、リタイアユニット２１から、命令実行が確定した命令に関する情報である、完了命令情報を受け取る。完了命令情報の中身としては例えば次のようなものが挙げられる。
・命令種別
・使用するレジスタ番号（読み出し、書き込み）
・レジスタへの書き込みデータ
・メモリへの読み出し、書き込みのアドレスおよびデータ
・インストラクション・ポインタ（ＩＰ：Ｉｎｓｔｒｕｃｔｉｏｎ  Ｐｏｉｎｔｅｒ）
【００３６】
図３に示したシグネチャ・レジスタ３３を備えるプロセッサによって構成される多重化システムは、図４のように処理が行われる。尚、図４に示した処理は実行ユニット２４によってソフトウェア的に実行されるものである。
【００３７】
まず、図４において、Ｓ４１〜Ｓ４５までの処理は図１に示した多重化システムの各プロセッサでそれぞれ実行される処理である。
Ｓ４１で、シグネチャ・レジスタ３３をクリアする。そして、Ｓ４２で、シグネチャ有効／無効制御ビット３２を「有効」にセットする。Ｓ４３で命令実行され、これに伴いシグネチャ生成回路３１にてシグネチャが生成され、シグネチャ・レジスタ３３に保存される。
【００３８】
各プロセッサで実行されるプログラムは「同じ量の処理が終了した時点」で割り込みを発生し、タスクスイッチを起こす。タスクスイッチが発生すると、Ｓ４４でシグネチャ有効／無効ビット３２が「無効」となり、Ｓ４５でシグネチャ・レジスタ３３を読み出す。
【００３９】
読み出されたシグネチャ・レジスタ３３の値は、図１に示した通信路１３を介して、いずれかのプロセッサ１１の実行ユニット２４に回収される（Ｓ４６）。
そして、Ｓ４７で回収されたシグネチャ・レジスタ３３の値を比較して、すべて一致する場合には各プロセッサで処理された命令実行が信頼できるものとして次の処理へ進む。いずれかのシグネチャが不一致の場合には、Ｓ４８でエラー処理を行う。このエラー処理では、たとえば、不一致の値を出力したプロセッサの動作を停止させたり、ユーザに警告を発するなどの処理を行う。
【００４０】
このように多重化システムの検証処理は、「同じ量の処理が終了した時点」で割りこみが発生して、複数のシグネチャ・レジスタ３３の値を比較処理することで実現されるが、この「同じ量の処理が終了した時点」について説明しておく。
【００４１】
図１に示したようなシステムで複数のプロセッサで別々に動作する場合でも、クロックが高速化し、プロセッサが複雑になり内部の動作の同一性が保てないため、完全に同じタイミングで各プロセッサの処理をとめることはできない。また、図１のように別々のプロセッサで同じ処理を並列に行うのではなく、一つのプロセッサで同じ処理をｎ回繰り返して、それらの結果を比較するという多重化システムも考えられるため、時間的タイミング以外の何らかの「一定量」の基準が必要となる。
【００４２】
この「一定量」の基準として、まずアプリケーション側で処理を区切る方法が考えられる。しかしこれはアプリケーションの改変が必要となるため、別の方法として、一定数の命令実行を基準とする方法がある。現代のプロセッサには、指定した命令数を実行すると割り込みを上げることができるものがあるため、本実施例ではこの機能を使って、一定命令数（たとえば１０，０００命令など）を実行した時点で割りこみをあげ、その時点の各シグネチャ・レジスタの値を比較する。つまり図４のＳ４３でプロセッサが一定の命令数を実行すると割り込みが発生し、Ｓ４４、Ｓ４５の処理が各プロセッサで行われて、複数あるプロセッサのうち一つのプロセッサにシステム内のシグネチャ・レジスタ３３の値が回収され（Ｓ４６）、シグネチャ・レジスタ３３の値が比較されて、システムの検証が行われる。
【００４３】
以上のように、実施例１の構成について説明したが、実施例１において、シグネチャ生成回路３１がシグネチャを生成する際に用いる、リタイアユニット２１から受け取る完了命令情報のより詳しい中身によって、実施例１を実施例１（Ａ）と実施例１（Ｂ）に区別して以下説明する。
【００４４】
まず、実施例１（Ａ）の完了命令情報は、インストラクション・ポインタ（ＩＰ）と、命令の種類と、使用するレジスタ番号と、レジスタへの書き込みデータと、使用するメモリ・アドレスと、メモリへの書き込みデータとから成る。
【００４５】
実施例１（Ａ）のリタイアユニット２１の構成を図５に示す。
リタイアユニット２１は、命令順序保存ユニット５１、完了処理ユニット５２、リオーダーバッファ５３を備える。命令順序保存ユニット５１には、スケジュール＆命令発行ユニット２２からプログラム命令に関わる情報が送られてくる。そして、命令順序保存ユニット５１からプログラム命令に関わる情報として、ＩＰ、命令の種類、レジスタ番号／メモリ・アドレスがリオーダーバッファ５３に保存される。
【００４６】
完了処理ユニット５２には、実行ユニット２４から実行が終了した命令についての情報が送られてくる。そして、完了処理ユニット５２は、実行ユニット２１から送られた実行が終了した命令についての情報に基づいて該当するリオーダーバッファ５３を選択し読み出し、完了命令情報としてシグネチャ生成回路３１に出力する。上述したように完了命令情報は、インストラクション・ポインタ（ＩＰ）と、命令の種類と、使用するレジスタ番号と、レジスタへの書き込みデータと、使用するメモリ・アドレスと、メモリへの書き込みデータとから成る。そして、シグネチャ生成回路３１では、完了命令情報に基づいてシグネチャを生成する。
【００４７】
このように実施例１（Ａ）の完了命令情報は、リオーダーバッファ５３に保存される情報をそのまま完了命令情報として用いるものであるが、完了命令情報の中にはプログラム実行に影響を与えない内部状態を示す情報がある。そこで、実施例１（Ｂ）では、マイク
ロプロセッサの内部状態がどのようなものであっても外部への出力であるメモリ書き込みのみが一致していれば動作は一致しているとみなし、シグネチャ生成回路への入力としてメモリへのメモリ書き込み情報のみを用いる構成とする。
【００４８】
実施例１（Ｂ）のリタイアユニット２１の構成を図６に示す。
実施例１（Ａ）と同様に、リタイアユニット２１は、命令順序保存ユニット５１、完了処理ユニット５２、リオーダーバッファ５３を備える。命令順序保存ユニット５１には、スケジュール＆命令発行ユニット２２からプログラム命令に関わる情報が送られてくる。そして、命令順序保存ユニット５１からプログラム命令に関わる情報として、ＩＰ、命令の種類、レジスタ番号／メモリ・アドレスがリオーダーバッファ５３に保存される。
【００４９】
完了処理ユニット５２には、実行ユニット２４から実行が終了した命令についての情報が送られてくる。そして、完了処理ユニット５２は、実行ユニット２１から送られた実行が終了した命令についての情報に基づいて該当するリオーダーバッファ５３を完了命令情報として読み出す。
【００５０】
実施例１（Ｂ）では、読み出された完了命令情報は、メモリ書き込み命令抽出ユニット６１に入力される。そして、メモリ書き込み命令抽出ユニット６１によりメモリに書き込みを行う命令についてだけ抽出され、更に、書き込みを行うメモリ・アドレスと、メモリへの書き込みデータとからなる情報を完了命令情報としてシグネチャ生成回路３１に出力する。シグネチャ生成回路３１では、出力された完了命令情報に基づいてシグネチャを生成する。
【００５１】
実施例１（Ｂ）のように、シグネチャ生成回路３１への入力を限定することによって、シグネチャ生成回路の構成を簡単にすることが可能であり、また、プログラム実行に影響を与えない内部状態の不一致をシステムの故障と検出することを防ぐことが可能となる。
【００５２】
以上のように、実施例１について詳細に説明した。
ところで、実施例１を仮想マシンやプロセス単位で多重実行する多重化高信頼システムに適用する場合、図４に示したＳ４３の命令実行処理において、図７に示すような処理が行われる。
【００５３】
まず、Ｓ７１で、仮想マシンまたはプロセスの切り替えイベントが発生すると、次に、Ｓ７２で、シグネチャ有効／無効制御ビット３２を「無効」にする。そして、Ｓ７３で現在のシグネチャ・レジスタ３３の値をメモリ等に保存する。
【００５４】
Ｓ７４で、切り替え先の仮想マシンまたはプロセスに対応するシグネチャ・レジスタ３３の値をメモリ等から読み出す。Ｓ７５で、シグネチャ・レジスタ３３に読み出した値を設定する。Ｓ７６で、シグネチャ有効／無効制御ビットを「有効」にする。そして、Ｓ７７で次の仮想マシンまたはプロセスの処理が実行される。
【００５５】
このように、仮想マシンまたはプロセスの実行が切り替わるたびに、シグネチャ・レジスタの内容を退避し、次に実行される仮想マシンに対応するシグネチャ・レジスタの値をメモリ等から読み出して設定し直す処理が必要となる。このような処理が仮想マシンまたはプロセスの切り替え毎に発生することによりシステム全体の処理の高速化が妨げられてしまう恐れがある。このような問題を解決する方法として、次に実施例２の構成を示す。
【００５６】
図８に、実施例２のプロセッサの構成を示す。実施例１の図３と同様に、ｏｕｔ−ｏｆ−ｏｒｄｅｒ実行のマイクロプロセッサ内部でリタイアユニット２１から、プログラム順序の実行終了情報である完了命令情報をもらい、完了命令情報に基づき、シグネチャを生
成する回路等を図２のマイクロプロセッサ１１に追加する。また、シグネチャ生成回路８１、シグネチャ有効／無効制御ビット８２を備えることは実施例１と同様である。
【００５７】
実施例２は、シグネチャ・レジスタ８３を複数本用意するところに特徴がある。それぞれのシグネチャ・レジスタ（８３−０〜８３−ｎ）がシグネチャ生成回路８１で生成されたシグネチャを保持することができ、プログラムから読み書きできるものとする。
【００５８】
また、新たにシグネチャ・レジスタ８３を選択する選択回路８４を設け、複数本あるシグネチャ・レジスタ８３のうちどれを使うかを選択できるようにする。選択のキーとなるデータはリタイアユニット２１から得られる実行が確定した命令の属する仮想マシンＩＤあるいはプロセスＩＤを用いる。
【００５９】
図９に、実施例２のリタイアユニット２１の構成を示す。
実施例１と同様に、リタイアユニット２１は、命令順序保存ユニット９１、完了処理ユニット９２、リオーダーバッファ９３を備える。
【００６０】
実施例１との違いは、実行ユニット２４から完了処理ユニット９２に対し、実行が終了した命令についての情報と、その命令を実行した仮想マシンのＩＤが送られてくる点である。そして、リオーダーバッファ９３に仮想マシンＩＤを格納する領域があり、仮想マシンＩＤも保存される。
【００６１】
完了命令情報の読み出しは、実行ユニット２４から送られてくる実行が終了した命令についての情報に基づいてリオーダーバッファ９３から選択されて出力されるが、その際に仮想マシンＩＤがシグネチャ生成回路８１へ出力される。そしてシグネチャ生成回路８１に出力される仮想マシンＩＤを選択キーとして、複数本あるシグネチャ・レジスタ０〜ｎ（８３−０〜８３−ｎ）のうちどれを使うかを選択する。
【００６２】
尚、複数プロセスで実行する場合は、仮想マシンＩＤの代わりにプロセスＩＤが実行ユニット２４から送られてくることになるが、以下仮想マシンの場合を例に説明をすることにする。
【００６３】
例えば、複数の仮想マシンを時分割で切り替えて実行している場合を考える。この場合、ある仮想マシンの命令実行は割り込み等によって中断され、他の仮想マシンの命令実行へと切り替えられる可能性がある。今仮に、仮想マシンＡと仮想マシンＢが時分割で並行に動作しており、仮想マシンＡの命令実行に対応するシグネチャは、シグネチャ・レジスタ０（８３−０）に格納され、仮想マシンＢの命令実行に対応するシグネチャは、シグネチャ・レジスタ１（８３−１）に格納されるものとする。更に、仮想マシンＩＤは、レジスタ・ファイル２３内の仮想マシンＩＤレジスタに保存されており、実行ユニット２４によって実行された命令は、この仮想マシンＩＤレジスタと一緒にリタイアユニット２１に送られ、リタイアユニット２１内のリオーダーバッファ９３に格納される。なお、仮想マシンＩＤは、仮想マシンＡを実行しているか、仮想マシンＢを実行しているかを表すＩＤで、仮想マシンＡに対応するＩＤは０、仮想マシンＢに対応するＩＤは１とする。
【００６４】
仮想マシンＡの命令実行が開始されると、実行ユニット２４によって実行された命令は、仮想マシンＩＤレジスタの値０とともにリタイアユニット２１に送られ、リオーダーバッファ９３に格納され、命令の完了を待つ。この命令がリタイアユニット２１で完了すると、リタイアユニット２１は、シグネチャ生成回路８１に対して、完了命令情報とともに仮想マシンＡに対応するＩＤである０という値も同時に送る。シグネチャ・レジスタに付随する選択回路８４では、この０という値を元にシグネチャ・レジスタを選択するので、シグネチャ・レジスタ０（８３−０）が選択される。その結果、選択されたシグネチャ・レジスタ０（８３−０）に保存されていたシグネチャ・レジスタの値と、リタイアユニット２１から送られてきた完了命令情報を元に新たなシグネチャが生成され、シグネチャ・レジスタ０（８３−０）に保存される。
【００６５】
今、割り込みによって実行される仮想マシンがＡからＢへ切り替わると、レジスタ・ファイル内の仮想マシンＩＤレジスタの値も、仮想マシンＡを表すＩＤである０から、仮想マシンＢを表すＩＤである１へと書き換えられる。この状態で命令が実行ユニット２４によって実行されると、実行された命令情報は仮想マシンＢを表すＩＤである１とともに、リタイアユニット２１へ送られる。リタイアユニット２１でこの命令が完了すると、その完了命令情報は仮想マシンＢを表すＩＤである１とともにシグネチャ生成回路８１へ送られる。その結果、先ほどと同様、シグネチャ・レジスタに付随する選択回路８４ではシグネチャ・レジスタ１（８３−１）が選択されるので、新たなシグネチャは、シグネチャ・レジスタ１（８３−１）の内容と完了命令情報を元に生成され、シグネチャ・レジスタ１（８３−１）へ保存されることになる。
【００６６】
以上のように、複数のシグネチャ・レジスタと選択回路を用意することで、仮想マシンが切り替わった場合でも、シグネチャ・レジスタの値をメモリへ退避したり、メモリからシグネチャ・レジスタの値を復帰したりする必要がなく、簡単に仮想マシンごとのシグネチャを別々に記録することが可能となる。このことは、実施例１のフロー（図７）に対応する実施例２のフローを図１０からも明らかである。
【００６７】
図１０において、まず、Ｓ１０１で仮想マシンの切り替えイベントが発生する。次にＳ１０２で、シグネチャ有効／無効制御ビット８２を「無効」にする。そして、Ｓ１０３でレジスタ・ファイル内の仮想マシンＩＤレジスタの値が、実行する仮想マシンＩＤに書き換えられる。
【００６８】
Ｓ１０４でシグネチャ有効／無効制御ビット８２を「有効」にする。そして、Ｓ１０５で次の仮想マシンの処理が実行される。
このように、実施例１のフローである図７では、仮想マシンの実行が切り替わる度に、シグネチャ・レジスタの内容を退避したり、値をシグネチャ・レジスタに復帰したりする処理が必要であったが、実施例２のフローである図１０では仮想マシンの切り替え毎にシグネチャ・レジスタの値を保存、クリアする必要がなくなり、容易に複数の仮想マシンが混在する環境でシグネチャ生成を行うことが可能となることがわかる。
【００６９】
そして、上述のように生成され、複数のシグネチャ・レジスタに保存されているシグネチャによって、実施例１の図４で示したのと同様に、多重化システムの検証が行われる。実施例２は、実施例１とは異なり複数の仮想マシンがそれぞれ処理を実行しているが、仮想マシンごとに実行した命令をカウントしておいて、所定の命令数になった時点で割りこみを発生し、複数あるプロセッサのうち一つのプロセッサにシステム内のシグネチャ・レジスタの値を回収して比較処理を行う。その際、各プロセッサの物理的なタイミングはバラバラでも構わず、その場合は早く終わった仮想マシンが、遅い仮想マシンの実行終了を待つことになる（あるいは、待たずに投機的に次の処理を進める）。
【００７０】
以上、実施例１、実施例２について詳細に説明した。実施例１および実施例２を実現するには、従来のマイクロプロセッサにシグネチャ生成回路とシグネチャ有効／無効制御ビットとシグネチャ・レジスタを付加するだけでよく、簡易な回路で、また比較的安価に実現可能であることがわかる。
【００７１】
本実施例によれば、ｏｕｔ−ｏｆ−ｏｒｄｅｒ実行を行うプロセッサにおいても正確にシグネチャを生成することが可能である。また、本シグネチャ生成方法は容易かつ比較的
安価に実現できる。
【００７２】
また、ｏｕｔ−ｏｆ−ｏｒｄｅｒ実行を行うマイクロプロセッサで構成される多重化システムにおいて信頼性を検証することが可能となり、高性能かつ高信頼な多重化システムを提供することが可能となる。
【００７３】
尚、本発明は上述した実施例に限定されることはなく、その要旨を逸脱しない範囲で様々な応用が可能であることはいうまでもない。最初にも述べたが本実施例では多重化システムとして図１のように複数のプロセッサが並列に動作するシステム構成を示して説明をしたが、一つのプロセッサで同じ処理をｎ回繰り返し、生成されるシグネチャを比較するという構成の多重化システムでもかまわない。その場合、図４では、Ｓ４１からＳ４５の処理をｎ回繰り返し、それぞれの処理に対応するシグネチャを生成し、他のレジスタ等に保存しておき、その後Ｓ４６でシグネチャを回収して比較、検証処理を行うことになる。また、実施例２では、完了命令情報は実施例１（Ａ）と同様であったが、実施例２においても完了命令情報が実施例１（Ｂ）のようにメモリへのメモリ書き込み情報のみを用いる構成にしてもかまわない。このように本発明は本発明は上述の実施形態に限定されるものではなく、その要旨を変更しない範囲内で適宜変形して実施できる。
【００７４】
以上の実施例１および実施例２を含む実施形態に関し、更に以下の付記を開示する。
（付記１）
命令実行がプログラム順序に関係なく行われるプロセッサであって、
命令を実行し、実行終了した命令について終了情報を送信する実行手段と、
前記実行手段が送信した終了情報を受信し、実行終了した命令に対する結果を前記プログラム順に並べ直して命令実行を確定し、確定した命令について命令実行が確定したことを通知する完了命令情報を送信するリタイア手段と、
前記リタイア手段から前記完了命令情報を受信し、該完了命令情報を用いてシグネチャを生成するシグネチャ生成手段と、
を備えることを特徴とするプロセッサ。
（付記２）
更に、前記シグネチャ生成手段で生成されたシグネチャを格納するシグネチャ・レジスタを備え、
一定の命令数毎に前記実行手段が発生するタスクスイッチにより、前記シグネチャ・レジスタに格納された値を読み出して、比較検証することを特徴とする付記１記載のプロセッサ。
（付記３）
前記シグネチャ生成手段は、前記完了命令情報のうち、前記マイクロプロセッサの外部に影響を与える情報を用いてシグネチャを生成することを特徴とする付記１または付記２記載のプロセッサ。
（付記４）
前記外部に影響を与える情報とは、前記完了命令情報のうちメモリへの書き込み情報のみを抽出したものであることを特徴とする付記３記載のプロセッサ。
（付記５）
前記シグネチャ生成手段で生成されたシグネチャを格納する、複数のシグネチャ・レジスタと、
命令実行時の状態に基づいて、前記生成されたシグネチャをいずれの前記シグネチャ・レジスタに格納するかを選択する選択手段と、
を備えることを特徴とする付記１記載のプロセッサ。
（付記６）
前記命令実行の状態とは、いずれの仮想マシンで実行されたか、またはいずれのプロセスで実行されたか、を示す仮想マシンＩＤまたはプロセスＩＤであることを特徴とする付
記５記載のプロセッサ。
（付記７）
命令を実行し、実行終了した命令についての終了情報を送信する実行手段と、
前記実行手段が送信した終了情報を受信し、実行終了した命令に対する結果を前記プログラム順に並べ直して命令実行を確定し、確定した命令について命令実行が確定したことを通知する完了命令情報を送信するリタイア手段と、
前記リタイア手段から前記完了命令情報を受信し、該完了命令情報を用いてシグネチャを生成するシグネチャ生成手段と、
を備える、命令実行がプログラム順序に関係なく行われるプロセッサを複数接続して構成される多重化システムにおいて、
ある特定の前記プロセッサが、一定量の処理に対応してそれぞれの前記プロセッサで生成される前記シグネチャを複数以上収集し、該収集したシグネチャを比較し一致検証を行う検証手段を備えることを特徴とする多重化システム。
（付記８）
命令実行がプログラム順序に関係なく行われるプロセッサにおけるシグネチャの生成方法であって、
命令が実行され、実行終了した命令の結果が前記プログラム順に並べ直されて命令実行が確定された、ということを示す完了命令情報を用いてシグネチャを生成する、
ことを特徴とするプロセッサにおけるシグネチャの生成方法。
（付記９）  
前記完了命令情報のうち、前記プロセッサの外部に影響を与える情報のみを用いて前記シグネチャを生成することを特徴とする付記８記載の生成方法。
（付記１０）
前記プロセッサは、生成されたシグネチャを格納するシグネチャ・レジスタを複数備え、
命令実行時の状態により、前記生成されたシグネチャを格納するレジスタを前記複数のシグネチャ・レジスタから選択して格納することを特徴とする付記８または付記９記載のシグネチャの生成方法。
（付記１１）
命令実行がプログラム順序に関係なく行われるプロセッサを複数接続して構成される多重化システムにおける検証方法であって、
それぞれの前記プロセッサは、命令が実行され、実行終了した命令の結果が前記プログラム順に並べ直されて命令実行が確定された、ということを示す完了命令情報を用いてシグネチャを生成し、
ある特定の前記プロセッサが、一定量の処理に対応してそれぞれの前記プロセッサで生成される前記シグネチャを複数以上収集し、該収集したシグネチャを比較し一致検証を行う、
ことを特徴とする多重化システムにおける検証方法。
【図面の簡単な説明】
【００７５】
【図１】多重化システムの全体構成を示す図である。
【図２】プロセッサの構成を示す図である。
【図３】実施例１のプロセッサの構成（一部）を示す図である。
【図４】実施例１のプロセッサによって構成される多重化システムの処理の流れを示す図である。
【図５】実施例１（Ａ）の構成を示す図である。
【図６】実施例１（Ｂ）の構成を示す図である。
【図７】実施例１を仮想マシンやプロセス単位で多重実行する多重化高信頼システムに適用する場合の処理の流れを示す図である。
【図８】実施例２のプロセッサの構成（一部）を示す図である。
【図９】実施例２の構成を示す図である。
【図１０】実施例２の処理の流れを示す図である。
【図１１】従来の多重実行方式を示す図である。
【符号の説明】
【００７６】
１０      多重化システム
１１      プロセッサ
１２      データ記憶部
１３      通信路
２１      リタイアユニット
２２      スケジュール＆命令発行ユニット
２３      レジスタファイル
２４      実行ユニット
２５      フェッチ＆デコードユニット
２６      Ｌ１命令キャッシュ
２７      Ｌ１データキャッシュ
２８      Ｌ２キャッシュ
２９      リオーダーバッファ
３１      シグネチャ生成回路
３２      シグネチャ有効／無効制御ビット
３３      シグネチャ・レジスタ
５１      命令順序保存ユニット
５２      完了処理ユニット
５３      リオーダーバッファ
６１      メモリ書込命令抽出ユニット
８１      シグネチャ生成回路
８２      シグネチャ有効／無効制御ビット
８３      シグネチャ・レジスタ
８４      選択回路
９１      命令順序保存ユニット
９２      完了処理ユニット
【図１】
0005315748.tif 000002
【図２】
0005315748.tif 000003
【図３】
0005315748.tif 000004
【図４】
0005315748.tif 000005
【図５】
0005315748.tif 000006
【図６】
0005315748.tif 000007
【図７】
0005315748.tif 000008
【図８】
0005315748.tif 000009
【図９】
0005315748.tif 000010
【図１０】
0005315748.tif 000011
【図１１】
0005315748.tif 000012