(57)【特許請求の範囲】
【請求項１】
制御プログラムに従った命令を実行する制御プログラム処理部を備えたＣＰＵと、
前記ＣＰＵの外部メモリ上にマッピングされたメモリマップドレジスタと、
前記制御プログラム処理部によるメモリマップドレジスタ書込命令の実行による書込アドレス及び書込データを受信格納して前記書込命令の実行を終了させる出力バッファ部と、
書込アドレスと書込データの保持状態を示す使用状態表示レジスタと、
書込アドレスを保持する書込アドレス保持レジスタと、
書込データを保持する書込データ保持レジスタと、
を有し、前記メモリマップドレジスタ書込命令に続いて実行される読出命令取り出し時に前記出力バッファ部に格納されている書込アドレスと書込データが前記書込アドレス保持レジスタと前記書込データ保持レジスタに転送されて格納されると共に、前記使用状態表示レジスタをデータ保持状態にセットし、前記読出命令取り出しに続く前記読出命令の実行に伴って前記書込データ保持レジスタの書込データを前記メモリマップドレジスタに書込んで該書込み終了と前記読出命令による読出データの応答を同期させる同期バッファ回路部と、を備え、
前記ＣＰＵは、外部割込の発生で前記プログラム処理部の処理を中断して割込プログラムの命令を実行する割込プログラム処理部を備え、
前記割込プログラム処理部は、前記メモリマップドレジスタに対する外部割込みの発生時、前記同期バッファ回路部の使用状態表示レジスタを参照してデータ保持状態を判別した場合、前記制御プログラムへの復帰命令アドレスを、データ保持状態にある書込アドレス及び書込データの書込命令のアドレスに戻し、割込処理の終了で前記書込命令アドレスから前記制御プログラムを実行させ、
前記割込プログラム処理部は、前記制御プログラムによるメモリマップドレジスタ書込命令の実行から、次の読出命令に先立って前記出力バッファ部の書込データ及び書込アドレスを前記同期バッファ回路部に転送した後の前記読出命令の実行までの間に外部割込みが発生した場合、前記同期バッファ回路部の使用状態表示レジスタを参照してデータ保持状態にあるときは、前記制御プログラムへの復帰命令アドレスを１命令戻し、割込処理の終了で前記同期バッファ部に保持していた書込アドレスと書込データの書込命令のアドレスから前記制御プログラムを実行させることを特徴とするプロセッサ装置。
【請求項２】
請求項１記載のプロセッサ装置に於いて、前記同期バッファ回路部は、前記メモリマップドレジスタへの書込動作が正常に終了した場合、前記書込動作の終了後に前記書込データ保持レジスタのデータをダミーの読出データとして前記ＣＰＵに応答することを特徴とするプロセッサ装置。
【請求項３】
請求項１記載のプロセッサ装置に於いて、前記同期バッファ回路部は、前記メモリマップドレジスタへの書込動作で異常が発生した場合、前記書込データ保持レジスタのデータをダミーの読出データとして前記ＣＰＵに応答し、該読出データの応答に同期して前記ＣＰＵに書込動作の異常終了を報告することを特徴とするプロセッサ装置。
【請求項４】
請求項１記載のプロセッサ装置に於いて、前記同期バッファ回路部は、前記メモリマップドレジスタに対する書込動作を行った後に、前記使用状態表示レジスタを非保持状態にクリアすることを特徴とするプロセッサ装置。
【請求項５】
請求項１記載のプロセッサ装置に於いて、前記ＣＰＵの制御プログラム処理部は、前記メモリマップドレジスタに対する複数の書込命令を実行した後に、前記メモリマップドレジスタの読出命令を実行することを特徴とするプロセッサ装置。
【請求項６】
請求項１記載のプロセッサ装置に於いて、前記出力バッファ部は、前記ＣＰＵに内蔵した内部出力バッファと前記ＣＰＵの外部に設けた外部出力バッファで構成され、前記制御プログラム処理部は、前記内部出力バッファに対する書込動作で前記メモリマップドレジスタに対する書込命令を終了し、前記内部出力バッファに格納された書込アドレス及び読出アドレスは、前記書込命令に続く読出命令の実行に先立って前記外部バッファを経由して前記同期バッファ回路部に転送されることを特徴とするプロセッサ装置。
【請求項７】
請求項６記載のプロセッサ装置に於いて、前記内部出力バッファは、前記ＣＰＵの内部に設けた１次キャッシュ部のキャッシュメモリであり、前記外部出力バッファは、前記ＣＰＵの外部に設けた２次キャッシュ部のキャッシュメモリであることを特徴とするプロセッサ装置。
【請求項８】
外部メモリ上にマッピングされたメモリマップドレジスタに対する書込命令をＣＰＵが実行した場合、前記メモリマップドレジスタに対する書込アドレス及び書込データを前記ＣＰＵから出力バッファに書込んで前記書込命令を終了させる書込み過程と、
前記ＣＰＵの書込命令に続く読出命令の実行に続いて、前記出力バッファ部の書込アドレス及び書込データを同期バッファ回路部に転送してその書込アドレス保持レジスタと書込データ保持レジスタの各々に格納すると共に、使用状態表示レジスタをデータ保持状態にセットするバッファ転送過程と、
前記ＣＰＵの読出命令の実行に伴って前記書込データ保持レジスタの書込データを前記メモリマップドレジスタに書き込む書込命令に続いて実行される読出命令取り出し時に前記出力バッファに格納されている書込アドレスと書込データが前記書込アドレス保持レジスタと前記書込データ保持レジスタに転送されて格納されると共に、前記使用状態表示レジスタをデータ保持状態にセットし、前記読出命令取り出しに続く読出命令の実行に伴って前記データ保持レジスタの書込データを前記メモリマップドレジスタに書き込んで該書込終了と前記読出命令による読出データの応答を同期させる同期過程と、
を備え、
外部割込みの発生時、前記同期バッファ回路部の使用状態表示レジスタを参照してデータ保持状態を判別した場合、前記制御プログラムへの復帰命令アドレスを、前記データ保持状態にある書込アドレス及び書込データの書込命令のアドレスに戻し、割込処理の終了で前記書込命令アドレスから前記制御プログラムを実行させる割込処理過程を備え、
前記割込処理過程は、前記制御プログラムによる書込命令の実行から、次の読出命令に先立って前記出力バッファユニットの書込データ及び書込アドレスを前記同期バッファに転送した後の前記読出命令の実行までの間に外部割込みが発生した場合、前記同期バッファ回路部の使用状態表示レジスタを参照してデータ保持状態にあるときは、前記制御プログラムへの復帰命令アドレスを１命令だけ戻し、割込処理の終了で前記同期バッファ部に保持されていた書込アドレスと書込データの書込命令アドレスから前記制御プログラムを実行させることを特徴とするプロセッサ制御方法。
【請求項９】
請求項８記載のプロセッサ制御方法に於いて、前記同期過程は、前記メモリマップドレジスタへの書込動作が正常に終了した場合、前記ＣＰＵの読出命令の終了に同期して前記書込データ保持レジスタのデータをダミーの読出データとして前記ＣＰＵに応答することを特徴とするプロセッサ制御方法。
【請求項１０】
請求項９記載のプロセッサ制御方法に於いて、前記同期過程は、前記メモリマップドレジスタへの書込動作で異常が発生した場合、前記書込データ保持レジスタのデータをダミーの読出データとして前記ＣＰＵに応答し、該読出データの応答に同期して前記ＣＰＵに書込動作の異常終了を報告することを特徴とするプロセッサ制御方法。
【請求項１１】
請求項８記載のプロセッサ制御方法に於いて、前記同期過程は、前記メモリマップドレジスタに対するデータ書込みを行った後に、前記使用状態表示レジスタを非保持状態にクリアすることを特徴とするプロセッサ方法。
【発明の詳細な説明】
【０００１】
【産業上の利用分野】
本発明は、ＣＰＵの外部メモリ等に対する書込命令の実行結果を格納して命令を終了させる出力バッファを備えたプロセッサ装置とその制御方法に関し、特に外部メモリ上のメモリマップドレジスタに対するＣＰＵの書込命令で、外部出力バッファに格納された書込アドレスと書込データのビットマップドレジスタに対する書込動作を、後続するＣＰＵの読出命令に同期して終了させるためのプロセッサ装置及びその制御方法に関する。
【０００２】
【従来の技術】
近年、メモリの階層化によるＣＰＵの高速化技術の１つに、ＣＰＵによる書込命令の実行で外部メモリや外部メモリ上に形成されたメモリマップドレジスタなどに出力されるデータを、ＣＰＵ内部バッファ及びＣＰＵ外部のバッファに格納し、書込命令を終了させる命令処理方法がある。このバッファを出力バッファという。
【０００３】
出力バッファとしては、通常、ＣＰＵ内部に設けた１次キャッシュ部のキャッシュメモリをストアバッファとして使用した内部出力バッファと、ＣＰＵ外部の２次キャッシュ部のキャッシュメモリを使用した外部出力バッファがある。
この命令処理方法は、ＣＰＵが実行した外部のメモリへのデータ出力（書込アドレスと書込データ）を伴う書込命令を、出力バッファにデータを格納した時点で終了させ、これによって実際のメモリへの書込時間、即ちＣＰＵが拘束される時間の短縮を図るものである。
【０００４】
図１９は従来の出力バッファを用いた命令処理方法である。まずＣＰＵ７００が制御プログラムに従って外部メモリ７４０に対する書込命令８００を実行する。この書込命令８００の実行はＣＰＵ７００の内部出力バッファ７１０に対する書込アドレスと書込データの格納で正常終了となり、ＣＰＵ７００は開放される。
【０００５】
内部出力バッファ７１０から２次キャッシュユニット７２０の外部出力バッファ７３０への転送書込み８１０は、ＣＰＵ７００の命令実行とは非同期に順次行われる。また外部出力バッファ７３０からアクセス対象である外部メモリ７４０への書込みも、同様にＣＰＵ７００の命令実行とは非同期に順次行われる。
ここで内部出力バッファ７１０から外部出力バッファ７３０への書込み、又は外部出力バッファ７３０から外部メモリ７４０への書込みにおいて異常が発生した場合、内部出力バッファ７１０及び外部出力バッファ７３０は、格納済みのアドレス及びデータを保持した状態で凍結され、以降、ＣＰＵ７００プログラムが凍結解除指令を行うまで凍結状態を継続させる。
【０００６】
この間、外部メモリ７４０への書込動作を伴うＣＰＵ７００の命令の実行は、内部出力バッファ７１０及び外部出力バッファ７３０を使用せず、直接、外部メモリ７４０に対し書込動作が行われる。またＣＰＵ７００は、凍結状態で書込み回復処理を実行する。この書込み回復処理は、内部出力バッファ７１０及び外部出力バッファユニット７３０の凍結で保持されている書込アドレスと書込データをＣＰＵ７００が認識し、外部メモリ７５０に対し直接にＣＰＵ７００自身が再書込みする回復処理を行う。
【０００７】
書込回復処理が終了したら、ＣＰＵ７００は内部出力バッファ７１０及び外部出力バッファユニット７３０の凍結状態を解除し、内部出力バッファ７１０及び外部出力バッファユニット７３０を使用したアクセス状態に復帰する。
ところで、このような出力バッファを使用したＣＰＵの外部メモリの書込動作と、書込み異常が発生した時の回復処理は、書込先が外部メモリ７４０のような受動素子である場合は問題ない。しかし、書込先がメモリマップドレジスタ７５０のような能動素子の場合、即ち書込みによって動作する例えば外部記憶装置の制御レジスタなどの場合、異常発生時に出力バッファを凍結してＣＰＵ７００でメモリマップドレジスタ７５０に直接書込むという単純な再書込みでは、回復することができない。
【０００８】
通常、制御レジスタとして機能するメモリマップドレジスタ７５０は、図２０のように、ＣＰＵ７００による複数の書込命令、例えば書込命令８０１，８０２，８０３を順次実行し、３回の書込動作８１１，８１２，８１３で必要なレジスタ書込みを完了し、書込完了後のＣＰＵ７００の読出動作でレジスタ内容に従った動作を行う。
【０００９】
このメモリマップドレジスタ７５０の書込動作８１１，８１２，８１３において異常が発生した場合、後続する書込命令のシーケンスが異なるようにしている。例えば書込異常がないときの書込命令のシーケンスは、図２１のステップＳ１〜Ｓ７のように「書込命令１」「書込命令２」「書込命令３」の順番となる。これに対し、例えば「書込命令１」の書込動作に異常があると、ステップＳ２からステップＳ８に進み、後続する命令シーケンスは「書込命令４」「書込命令３」と異なる。
【００１０】
このように複数の書込動作でレジスタ内容が決まるメモリマップドレジスタ７５０の場合、書込異常に対する回復処理として、内部出力バッファ７１０及び外部出力バッファ７３０を凍結し、ＣＰＵ７００で凍結した書込アドレス及びデータを認識して直接にメモリマップドレジスタ７５０に再書込みしても、レジスタ内容を回復することはできない。これは書込異常で後続する書込命令のシーケンスが異ならせているにも係わらず、異常無しの命令シーケンスに戻した書込みとなり、再書込みそのものが誤りとなる。
【００１１】
このようにメモリマップドレジスタ７５０の書込異常の回復処理に関する問題は、メモリマップドレジスタ７５０への書込動作の完了を、従来の非同期から、ＣＰＵ命令の実行完了に同期させることで、解決できる。具体的には、出力バッファを通過しないアクセス命令を設け、回復処理を行えばよい。
しかし、このアクセス方法は、ＣＰＵ７００の内部にある直接アクセスできる内部出力バッファ７１０には有効であるが、二次キャッシュ部７２０等のＣＰＵ７００外部にある外部出力バッファ７３０に対しては、一般的には有効ではなく、出力バッファに強制吐出し機能を持たせたアクセス方法が使用される。
【００１２】
この出力バッファに強制吐出し機能を持たせたアクセス方法は、メモリマップドレジスタ７５０に対するを外部割込みをＣＰＵ７００が受け付けない状態、即ち割込マスク状態にしてメモリマップドレジスタ７５０に対する出力バッファからの書込み動作を、次の手順で行う。
▲１▼ＣＰＵを割込マスク状態に設定する。
【００１３】
▲２▼ＣＰＵでメモリマップドレジスタの書込命令を実行し、出力バッファに格納する。
▲３▼ＣＰＵ命令の実行に同期し、出力バッファの強制吐出しにより、メモリマップドレジスタの書込動作を行う。
▲４▼ＣＰＵの割込マスク状態を解除する。
【００１４】
メモリマップドレジスタ７５０の書込アクセスで、ＣＰＵ７００を割込マスク状態に設定する理由は、次のとおりである。外部出力バッファ７３０に書込データと書込アドレスが保持された吐出し前の状態で、メモリマップドレジスタ７５０を割込先とした外部割込みが発生すると、出力バッファ吐き出し機能を使用したメモリマップドレジスタ７５０の書込動作が割込処理により行われる。
【００１５】
このとき書込異常が起きると、書込命令シーケンスの変更に伴い同様に書込回復ができなくなる問題を生ずる。そこで、メモリマップドレジスタ７５０を書込命令を実行する間は、ＣＰＵ７００を割込マスク状態とし、外部割込みを受け付けないようにする。
また出力バッファの強制吐出し機能は、ＣＰＵの通常動作では、マップドレジスタ７５０の書込命令（複数命令）に続きその読出命令を実行することから、ＣＰＵの読出命令の実行時に吐出し動作を行い、吐出し完了と同期してＣＰＵの読出命令の実行を完了させる。これ以外に、ＣＰＵに強制吐出しの専用命令をもたせる方法もあるが、一般には使用されない。
【００１６】
図２２は出力バッファの強制吐出し機能によるメモリマップドレジスタの書込動作である。まずＣＰＵ７００が割込みマスク状態で、メモリマップドレジスタ７５０の書込命令実行８２１を行い、内部出力バッファ７１０に書込アドレスと書込データを格納して命令実行を終了する。
次にメモリマップドレジタ７５０の読出命令をＣＰＵ７００が実行するが、この読出命令の実行に先立ち内部出力バッファ７１０から外部出力バッファ７３０への転送書込動作８２２が行われる。例えばＣＰＵ７００における次の読出命令を取出す命令フェッチサイクルで転送書込動作８２２を行う。
【００１７】
続いてＣＰＵ７００が読出命令を実行すると、この読出命令の実行によるバス動作を２次キャッシュ部７２０で検出し、外部出力バッファ７３０の保持データをメモリマップドレジスタ７５０に書き込むアクセス対象への書込動作８２３を実行する。このメモリマップドレジスタ７５０の書込動作８２３が正常に終了すると、吐出し完了の報告が読出命令の実行による読出データの応答と共にＣＰＵ７００に対し行われる。
【００１８】
一方、メモリマップドレジスタ７５０の書込動作に異常があると、読出命令の実行による読出データの応答に同期して書込異常がＣＰＵ７００に報告される。そこでＣＰＵ７００はメモリマップドレジスタ７５０に対する書込異常をリアルタイムで認識し、異常回復の再書込みを行う。このため複数の書込命令に対応した書込動作の途中で書込異常が報告されると、後続する命令シーケンスを変更してメモリマップドレジスタ７５０に確実に書込みを行うことができる。
【００１９】
【発明が解決しようとする課題】
しかしながら、このような従来の出力バッファの吐出し機能を利用したメモリマップドレジスタの書込命令の処理にあっては、書込命令の対象となるメモリマップドレジスタのアクセス頻度が非常に高いため、メモリマップドレジスタをアクセスするたびに、ＣＰＵで割込マスク状態の設定と解除の処理を伴い、書込オーバヘッドが大きいという問題がある。
【００２０】
またメモリマップドレジスタの書込異常の頻度は低いにも係わらず、ＣＰＵの割込マスク状態が頻繁に設定されるため、外部割込みの応答性能が低下するという問題もあった。
本発明の目的は、ＣＰＵに対する外部割込を禁止することなく、外部ターゲットの書込命令を出力バッファに対する書込みで実行完了とした場合のターゲット書込み異常発生に適切に対応できるプロセッサ装置及びその制御方法を提供する。
【００２１】
【課題を解決するための手段】
図１は本発明の原理説明図である。
ＣＰＵ２２には、制御プログラムに従った命令を実行する制御プログラム処理部６２と、外部割込みの発生で制御プログラム処理部６２の実行を中断して割込プログラムの命令を実行する割込プログラム処理部６４が設けられる。ＣＰＵ２２の外部メモリ３４上にはターゲットとしてメモリマップドレジスタ６８が設けられる。
【００２２】
出力バッファ部（内部出力バッファ２４と外部出力バッファ２６）は、ＣＰＵ２２の書込命令の実行よるメモリマップドレジスタ６８に対する書込アドレス及び書込データを受信格納してＣＰＵ２２の書込命令を終了させる。
同期バッファ回路部３２には、書込アドレス及び書込データの保持状態を示す使用状態表示レジスタ５４、書込アドレスを保持する書込アドレス保持レジスタ５６、及び書込データを保持する書込データ保持レジスタ５８が設けられる。
【００２３】
同期バッファ回路部３２は、ＣＰＵ２２のメモリマップドレジスタ６８に対する書込命令に続く読出命令の実行に先立って、出力バッファ部から転送された書込アドレス及び書込データを書込アドレス保持レジスタ５６と書込データ保持レジスタ５８の各々に格納すると共に、使用状態表示レジスタ５４をデータ保持状態にセットする。
【００２４】
次に、ＣＰＵ２２の読出命令の実行に伴って、書込データ保持レジスタ５８の書込データをメモリマップドレジスタ６８に書込み、この書込み終了を読出命令による読出データの応答に同期させる。具体的には、メモリマップドレジスタ６８への書込動作が正常に終了した際に、書込データ保持レジスタ５８のデータをダミーの読出データとしてＣＰＵ２２に応答する。
【００２５】
またメモリマップドレジスタ６８への書込動作で異常が発生した場合、ＣＰＵ２２の読出命令による読出データの応答に同期して、ＣＰＵ２２に書込動作の異常終了を報告する。
更に、同期バッファ回路部３２は、必要ならば、メモリマップドレジスタ６８に対するデータ書込みを行った後に、使用状態表示レジスタ５４をクリアして非保持状態とする。
【００２６】
ＣＰＵ２２の割込プログラム処理部６４は、メモリマップドレジタ６８に対する外部割込みの発生時、同期バッファ回路部３２の使用状態表示レジスタ５４を参照してデータ保持状態を判別した場合、割込終了時の制御プログラムへの復帰命令アドレスを、保持状態にある書込アドレス及び書込データの書込命令のアドレスに戻し、割込処理の終了で、戻した書込命令アドレスから制御プログラムを実行させる。
【００２７】
具体的には、割込プログラム処理部６４は、制御プログラム処理部６２でメモリマップドレジスタ６８の書込命令を終了してから、次の読出命令に先立って出力バッファユニットの書込データ及び書込アドレスを同期バッファ回路部３２に転送した後の読出命令の実行までの間に外部割込みが発生した場合、同期バッファ回路部３２の使用状態表示レジスタ５４を読出し、同期バッファ回路部３２が保持状態にある場合は、割込み復帰の命令アドレスを１命令戻してメモリマップドレジスタ６８に対する割込み処理を実行し、割込終了でメモリマップドレジスタの書込命令から再開させる。
【００２８】
ＣＰＵ２２の制御プログラム処理部６２は、通常、メモリマップドレジスタ６８に対する複数の書込命令を実行した後に、メモリマップドレジスタ６８の読出命令を実行する。またＣＰＵ２２の制御プログラム処理部６２は、メモリマップドレジスタ６８に対する複数の書込命令に続く読出命令の実行終了に伴って同期バッファ回路部３２から書込動作の異常報告を受信した場合、異なる書込命令列の実行でメモリマップドレジスタ６８に対する後続する書込動作を行う。メモリマップドレジスタ６８は、例えば入出力制御装置の制御レジスタである。
【００２９】
出力バッファ部は、ＣＰＵ２２の内部に設けた内部出力バッファ（ストアバッファ）２４と、ＣＰＵ２２の外部に設けた外部出力バッファ２６で構成される。ＣＰＵ２２の制御プログラム処理部６２は、内部出力バッファ２４に対する書込動作でメモリマップドレジスタ６８に対する書込命令を終了させる。内部出力バッファ２４に格納された書込アドレス及び読出アドレスは、書込命令に続く読出命令の実行に先立って外部出力バッファユニット２６を経由して、同期バッファ回路部３２に転送される。
【００３０】
内部出力バッファ２４は、ＣＰＵ２２の内部に設けた１次キャッシュ部のキャッシュメモリである。外部出力バッファユニット２６は、ＣＰＵ２２の外部に設けた２次キャッシュ部２８のキャッシュメモリである。
また本発明は、プロセッサの制御方法を提供する。
書込過程では、外部メモリ３４上にマッピングされたメモリマップドレジスタ６８に対する書込命令をＣＰＵ２２が実行した場合、メモリマップドレジスタ６８に対する書込アドレス及び書込データをＣＰＵ２２から出力バッファ（例えばＣＰＵ内部出力バッファ２４）に書込んで書込命令を終了させる。
【００３１】
次のバッファ転送過程では、ＣＰＵ２２のメモリマップドレジスタ６８に対する書込命令に続く読出命令の実行に先立って、出力バッファ部の書込アドレス及び書込データを同期バッファ回路部３２に転送し、その書込アドレス保持レジスタ５６と書込データ保持レジスタ５８の各々に格納し、使用状態表示レジスタ５４にデータ保持状態にセットする。
【００３２】
次の同期過程では、ＣＰＵ２２の読出命令の実行に伴って書込データ保持レジスタ５８の書込データをメモリマップドレジスタ６８に書き込み、この書込終了を読出命令による読出データの応答に同期させる。
更に、割込処理過程が設けられ、メモリマップドレジスタ６８に対する外部割込みの発生時、同期バッファ回路部３２の使用状態表示レジスタ５４を参照してデータ保持状態を判別した場合、割込終了時の制御プログラムへの復帰命令アドレスを、割込発生時にデータ保持状態にある書込アドレス及び書込データの書込命令のアドレスに戻し、割込処理の終了で、戻した書込命令アドレスから制御プログラムを実行させる。
【００３３】
【作用】
このような本発明のプロセッサ装置及びその制御方法によれば、メモリマップドレジスタのアクセスを実行する制御プログラムには、メモリマップドレジスタに対する外部割込みを禁止する割込マスク状態を設定する機能は設ける必要はなく、外部割込みはそのまま受け付けて実行させる。
【００３４】
制御プログラムでＣＰＵに割込マスクを設定する代わりに本発明は、外部割込みの発生によるメモリマップドレジスタの割込プログラムに、対応する機能を設ける。割込プログラムは、割込処理に先立ち同期バッファ回路部がデータ保持状態にあるか否かチェックする。
データ保持状態にあった場合にはメモリマップドレジスタを対象とした割込処理によって同期バッファ回路部に滞留中の書込データ及び書込アドレスが破壊されてしまうことから、割込終了で復帰する制御プログラムの復帰命令アドレスを、破壊される書込アドレスと書込データの書込命令のアドレスに戻しておく。
【００３５】
このため割込処理が終了すると、ＣＰＵで書込命令は実行されたが、メモリマップドレジスタに対して未書込みとなっている書込命令が、再度、ＣＰＵで実行され、外部割込みが発生しても制御プログラムによるメモリマップドレジスタの書込動作を確実に行うことができる。
このため制御プログラムによるメモリマップドレジスタのアクセスでＣＰＵを割込マスク状態に設定する必要がなくなり、これに伴う書込オーバヘッドをなくすことができる。
【００３６】
また制御プログラムによるメモリマップドレジスタのアクセス中であっても、外部割込みの発生時には、メモリマップドレジスタの割込プログラムによる割込処理が直ちに実行され、本来の割込応答性能を維持することができる。
【００３７】
【実施例】
図２は本発明のプロセッサ装置の動作環境となる計算機システムである。この計算機システムでは、４台のプロセッサマシン１０−１〜１０−４を設けている。各プロセッサマシン１０−１〜１０−４のＩＤは、＃００〜＃０３となる。プロセッサマシン１０−１〜１０−４に対しては、システムバス１４−１，１４−２によってシステム記憶装置１２−１，１２−２が接続される。
【００３８】
またプロセッサマシン１０−１〜１０−４に対しては、入出力バス１６−１，１６−２を介して、例えば４台の入出力制御装置１８−１〜１８−４が接続される。入出力制御装置１８−１〜１８−４のそれぞれは、入出力装置２０−１〜２０−４を接続している。
入出力装置２０−１〜２０−４としては、磁気ディスク装置、光ディスク装置、磁気テープ装置、プリンタ、キーボード、マウス、タブレットなどのマンマシンインタフェース、他の計算機システムとの通信制御装置などが設けられ、入出力制御装置１８−１〜１８−４はそれぞれの入出力装置に対応した入出力制御モジュールとなる。例えば入出力制御装置が磁気ディスク装置の場合は、入出力制御装置は磁気ディスク制御装置となる。
【００３９】
この計算機システムにあっては４台のプロセッサマシン１０−１〜１０−４を例にとっているが、最大構成として８台までプロセッサマシンを設けることができる。また、入出力制御装置は必要に応じて適宜に増設できる。
図３は、図２のプロセッサマシン１０−１のハードウェア構成である。他のプロセッサマシン１０−２〜１０−４についても同様である。
【００４０】
このプロセッサマシンにはＣＰＵ２２−１が設けられる。ＣＰＵ２２−１には１次キャッシュ機構が設けられており、この１次キャッシュ機構のキャッシュメモリはストアバッファ２４−１として示されている。
図４はＣＰＵ２２−１の内部構成である。ＣＰＵ２２−１には、浮動小数点演算制御ユニット１２８、浮動小数点演算実行ユニット１３０、整数演算制御ユニット１３２、スーパースカラ整数演算実行ユニット１３４、命令キャッシュメモリユニット１３６、データキャッシュメモリユニット１３８、メモリ管理ユニット（ＭＭＵ）１４０およびバスインタフェースユニット１４２が設けられる。
【００４１】
浮動小数点演算実行ユニット１３０は浮動小数点演算制御１２８の制御のもとに浮動小数点演算を実行する。スーパースカラ整数演算実行ユニット１３４は整数演算制御ユニット１３２の制御のもとに、動的に並列実行可能な整数演算命令を判別し、並列的に整数演算を実行する。
命令キャッシュメモリユニット１３６は、例えば２０キロバイトであり、メモリ管理ユニット１４０によりキャッシュ制御を受ける。命令キャッシュメモリユニット１３６には、浮動小数点演算制御１２８および整数演算制御ユニット１３２で使用する共有部のＥＥＰＲＯＭ１４からフェッチしたプログラムコードが格納される。一度、プロクラムコードが命令キャッシュメモリユニット１３６に格納されると、その後、浮動小数点演算制御１２８および整数演算制御ユニット１３２は命令キャッシュメモリユニット１３６のプログラムコードを使用した演算動作を実行する。
【００４２】
データキャッシュメモリユニット１３８は、例えば１６キロバイトの容量をもち、浮動小数点演算実行ユニット１３０およびスーパースカラ整数演算実行ユニット１３４の演算に使用する外部メモリから読み出したデータを格納する。データキャッシュメモリユニット１３８のキャッシュ制御もメモリ管理ユニット（ＭＭＵ）４０により行われる。データキャッシュメモリユニット１３８は内部出力バッファとなるストアバッファ２４−１として機能する。
【００４３】
再び図３を参照するに、ＣＰＵ２２−１の外部には２次キャッシュメモリ２６−１が設けられる。２次キャッシュメモリ２６−１は、２次キャッシュコントローラ２８により制御される。ＣＰＵ２２−１，２６−１に対し、必要に応じてＣＰＵ２２−２と２次キャッシュメモリ２６−２を増設することができる。
２次キャッシュコントローラ２８に続いては、メモリアクセスユニット３０を介してローカルストレージユニット３４が設けられる。ローカルストレージユニット３４は、ＣＰＵ２２−１に対する外部メモリとなる。更に、ＣＰＵ２２−１で実行する各種の制御プログラムを格納したＲＯＭ３６が設けられる。
【００４４】
ローカルストレージユニット３４には、ＣＰＵ２２−１に対応してメモリマップドレジスタ６８が設けられている。メモリマップドレジスタ６８は、図２の入出力制御装置１８−１〜１８−４の制御レジスタとして使用される。
ＣＰＵ２２−１は、制御プログラムのメモリマップドレジスタ書込命令を実行することにより、ローカルストレージユニット３４のメモリマップドレジスタ６８に対するデータ書込みを行う。通常、メモリマップドレジスタ６８に対する書込命令は、複数の書込命令を順次実行することで行われる。メモリマップドレジスタ６８をターゲットとした書込命令が複数回実行されて書込動作が完了すると、続いてＣＰＵ２２−１はメモリマップドレジスタ６８の読出命令を実行し、この読出データに基づいて入出力制御装置に対する制御動作を実行することになる。
【００４５】
ＣＰＵ２２−１におけるメモリマップドレジスタ６８の書込命令の実行は、内部出力バッファとして機能するストアバッファ２４−１に対し書込アドレスと書込データを格納することで終了する。ストアバッファ２４−１に格納された書込アドレスおよび書込データは、次のＣＰＵ２２−１によるメモリマップドレジスタ６８に対する読出命令の実行に先立ち、２次キャッシュメモリ２６−１に転送され、更に本発明で新たに設けているメモリアクセスユニット３０内の同期バッファ回路部３２に転送される。
【００４６】
同期バッファ回路部３２は、図５の回路構成をもつ。まずレジスタ回路５２には、使用状態表示レジスタ５４、書込アドレス保持レジスタ５６および書込データ保持レジスタ５８が設けられている。使用状態表示レジスタ５４は、例えば図６（Ａ）に示す３２ビットのレジスタであり、第１ビット目に同期バッファ回路部３２の使用状態の有無を表示するビジィビット５５を設けている。
【００４７】
ビジィビット５５は、書込アドレス保持レジスタ５６および書込データ保持レジスタ５８にデータが格納されるとビット１にセットされる。データが格納されていないとき、ビジィビット５５はビット０となっている。書込アドレス保持レジスタ５６および書込データ保持レジスタ５８も、図６（Ｂ）（Ｃ）に示すように、３２ビットのレジスタを使用している。
【００４８】
再び図５を参照するに、同期バッファ回路部３２には、転送回路４６，６０、ＣＰＵ命令検出解読回路４８およびレジスタ制御回路５０が設けられる。転送回路４６は、プロセッサマシンの内部バスを介して２次キャッシュコントローラ２８との間でアドレスおよびデータの転送を行う。
ＣＰＵ命令検出解読回路４８は、転送回路４６に対する２次キャッシュコントローラ２８からの内部バスの状態を監視しており、ＣＰＵ２２−１によるメモリマップドレジスタの書込命令の実行に伴うバス動作を検出してレジスタ制御回路５０に出力する。
【００４９】
レジスタ制御回路５０は、転送回路４６で受信した２次キャッシュコントローラ２８からのメモリマップドレジスタに対する書込アドレスおよび書込データを受けて、レジスタ回路５２の書込アドレス保持レジスタ５６および書込データ保持レジスタ５８に受信アドレスおよび受信データを格納する。また、書込アドレスおよび書込データの格納後に、使用状態表示レジスタ５４のビジィビット５５をビット１にセットする。
【００５０】
またレジスタ制御回路５０は、メモリマップドレジスタの書込アドレスおよび書込データの保持状態でＣＰＵ命令検出解読回路４８より読出命令の実行に伴うバス動作の検出出力を受けると、レジスタ回路５２の書込アドレス保持レジスタ５６の書込アドレスと書込データ保持レジスタ５８の書込データを読み出し、転送回路６０を介してローカルストレージユニット３４のメモリマップドレジスタ６８に対する書込動作を行う。
【００５１】
レジスタ回路５２に設けている各レジスタ５４，５６，５８の内容は、メモリマップドレジスタ６８に対する書込終了でクリアしてもよいし、クリアせずにそのまま放置しておくことで、次のデータ転送の際にレジスタ書替えを行うだけであってもよい。更に、必要ならば、各レジスタにバリッドビットを設け、バリッドビットによってレジスタの書込みと書込禁止を制御するようにしてもよい。
【００５２】
再び図３を参照するに、メモリアクセスユニット３０に続いては割込コントローラ３８が設けられる。割込コントローラ３８は、各種の外部割込みを検出し、ＣＰＵ２２−１に対し外部割込みの判別結果に応じた割込処理を指示する。
更に、入出力バス１６−１，１６−２に対してはメッセージコントローラ４０−１，４０−２と入出力バスコントローラ４２−１，４２−２を１つとしたユニットが設けられる。更に、システムバス１４−１，１４−２のそれぞれに対しては、システムバスコントローラ４４−１，４４−２が設けられる。
【００５３】
ここでプロセッサマシンには、ＣＰＵ２２−２及び次キャッシュメモリ２６−２を増設することができる。ＣＰＵ２２−２を増設した場合、ローカルストレージユニット３４には専用のメモリマップドレジスタが設けられる。
図７は、本発明のプロセッサマシンによるローカルストレージユニット３４に設けているメモリマップドレジスタ６８に対するアクセス機能である。まずＣＰＵ２２には、通常の制御プログラムを実行する制御プログラム処理部６２が設けられる。この制御プログラム処理部６２の処理には、ローカルストレージユニット３４に設けているメモリマップドレジスタ６８の各々に対するアクセス命令の実行も含まれる。以下の説明では、メモリマップドレジスタ６８に対する制御プログラムのアクセス命令のみを例にとる。
【００５４】
またＣＰＵ２２には、割込プログラム処理部６４が設けられる。割込プログラム処理部６４は、制御プログラム処理部６２による制御プログラムの実行中に割込コントローラ３８（図３参照）より外部割込みの発生に基づく割込起動の指示を受けると、制御プログラム処理部６２による制御プログラムを中断して、割込ゲインに対応した割込プログラムを実行する。
【００５５】
この割込プログラム処理部６４による割込処理には、ローカルストレージユニット３４に設けているメモリマップドレジスタ６８をターゲットとしたアクセス命令を行う割込処理プログラムも含まれる。
制御プログラム処理部６２で例えばローカルストレージユニット３４のメモリマップドレジスタ６８の書込命令を実行すると、内部出力バッファとなるストアバッファ２４に対する書込アドレスおよび書込データの格納で書込命令が終了する。通常、メモリマップドレジスタ６８に対する書込みは、複数の書込命令の実行で完了する。したがって、ストアバッファ２４には書込命令の数に応じた書込アドレスおよび書込データが格納されることになる。
【００５６】
複数の書込命令の実行が終了すると、制御プログラム処理部６２はメモリマップドレジスタ６８の読出命令を実行する。この読出命令の実行に先立って、ストアバッファ２４に格納された書込アドレスおよび書込データが２次キャッシュコントローラ２８のキャッシュメモリで実現される外部出力バッファ２６を経由して、メモリアクセスコントローラ３０に設けている同期バッファ回路部３２に転送される。
【００５７】
ストアバッファ２４から転送された書込アドレスおよび書込データは、レジスタ制御回路５０により書込アドレス保持レジスタ５６および書込データ保持レジスタ５８に格納される。このとき使用状態表示レジスタ５４のビジィビット５５がビット１にセットされ、同期バッファ回路部３２が使用状態にあることを表わす。
【００５８】
ストアバッファ２４からのデータ転送のきっかけは、制御プログラム処理部６２における次に実行する読出命令のフェッチサイクル動作を検出して行えばよい。続いて読出命令は実行サイクルに移行して、読出命令が実行される。この読出命令の実行は、内部バスを介してメモリアクセスコントローラ３０に読出コマンドおよび読出アドレスを転送することで実現される。
ＣＰＵ２２による読出命令の実行に対し、同期バッファ回路部３２にあっては、そのＣＰＵ命令検出解読回路４８（図５参照）によって読出命令に伴う内部バスのバス動作を検出し、これに基づきレジスタ制御回路５０が書込アドレス保持レジスタ５６の書込アドレスおよび書込データ保持レジスタ５８の書込データを読み出して、ローカルストレージユニット５４に対し書込動作を指示する。
【００５９】
これによって、書込アドレスで指定されたメモリマップドレジスタ６８−１に転送された書込データの書込動作が行われる。同時に、メモリアクセスコントローラ３０に対しては、ＣＰＵ２２よりメモリマップドレジスタ６８−１の読出コマンドが送られてきているため、読出データを応答しなければならない。
通常の読出動作はローカルストレージユニット３４のメモリマップドレジスタ６８−１から読み出すが、このときメモリマップドレジスタ６８−１に書き込まれたデータは同期バッファ回路部の書込データ保持レジスタ５８の書込データである。そこで、メモリマップドレジスタ６８−１の読出しは行わず、書込保持レジスタ５８の書込データの書込動作の終了後に書込データ保持レジスタ５８の書込データを読み出して、ダミーの読出データとして内部バスによりＣＰＵに応答する。
【００６０】
図８は、図７においてＣＰＵ２２の制御プログラム処理部６２がメモリマップドレジスタ６８に対する書込命令を実行して正常に書込動作が終了するまでを表わす。まずＣＰＵ２２は、ブロック１００でメモリマップドレジスタの書込命令を実行し、ブロック１０２で、内部のストアバッファ２４に書込アドレスと書込データを格納して命令を終了する。次にＣＰＵ２２は、ブロック１０４で読出命令の取出し即ちフェッチ動作を行う。
【００６１】
この読出命令の取出しを契機に、ストアバッファ２４から２次キャッシュメモリ２８にブロック２００に示すようにストアバッファ２４の滞留データを同期バッファ回路部３２に転送するためのバッファ転送を行い、更に２次キャッシュメモリ２８より同期バッファ回路部３２に転送して、転送されたデータ（書込アドレスと書込データ）を対応するレジスタに格納し、更に使用状態表示レジスタ  （ステータスレジスタ）５４をデータ保持状態にセットする。
【００６２】
次にＣＰＵ２２は、ブロック１０５で読出命令を実行する。この読出命令は、ブロック２０１に示すように、２次キャッシュメモリ２８を経由して同期バッファ回路部３２に通知される。具体的には、読出命令に対し２次キャッシュのヒット判定を行うが、ミスヒットとなることから、同期バッファ回路部３２を設けているメモリアクセスユニット３０に対し読出コマンドおよび読出アドレスのバス転送を行う。
【００６３】
このような読出命令の実行に伴うバス動作に対し、同期バッファ回路部３２で読出命令の実行を検出すると、ブロック３０１で、現在保持している保持アドレスとＣＰＵから通知された読出アドレスとを比較する。ブロック３０２でアドレス一致が得られると、ブロック３０３で、保持データを外部メモリとなるローカルストレージユニット３０４の書込アドレスで指定されるメモリマップドレジスタに書き込む。これが外部メモリ３４のブロック４００のデータ書込動作である。
【００６４】
外部メモリ３４のメモリマップドレジスタに対するデータ書込動作が正常に終了すると、同期バッファ回路部３２はレジスタに保持している書込データを読み出してダミーの読出データとしてＣＰＵ２２に転送し、読出命令の実行終了とする。
図９，図１０，図１１は、図８のメモリマップドレジスタに対する書込命令の実行からデータ書込みの正常終了までの処理を分けて示している。まず図９は、ＣＰＵ２２におけるメモリマップドレジスタに対する書込命令の実行処理である。制御プログラム処理部６２は、外部メモリ３４のメモリマップドレジスタ６８に対する書込命令実行７０を行う。この書込命令実行７０は、ＣＰＵ２２の内部に設けているストアバッファ２４に書込アドレスおよび書込データを格納することで正常終了となる。
【００６５】
図１０は、書込命令の実行に続いて、ＣＰＵ２２の制御プログラム処理部６２が次に実行する読出命令取出し７２を行った場合である。この読出命令取出し７２を契機として、ストアバッファ２４に格納されたメモリマップドレジスタ６８に対する書込アドレスと書込データは、２次キャッシュコントローラ２８のキャッシュメモリ２６である外部出力バッファを経由して同期バッファ回路部３２に転送され、書込アドレス保持レジスタ５６および書込データ保持レジスタ５８に格納され、更に使用状態表示レジスタ５４のビジィビットを１にセットする。
【００６６】
図１１は、読出命令取出し７２に続くＣＰＵ２２の制御プログラム処理部６２による読出命令実行７８の処理である。この読出命令実行７８に伴い、２次キャッシュコントローラ２８を経由してメモリアクセスユニットの同期バッファ回路部３２に内部バスによって読出コマンドおよび読出アドレスが転送され、このバス動作を検出することでＣＰＵ２２の読出命令実行７８を同期バッファ回路部３２で検出できる。
【００６７】
読出命令の実行を同期バッファ回路部３２で検出すると、書込アドレス保持レジスタ５６のアドレスとＣＰＵ２２から指示された読出アドレスとを比較する。アドレスが一致すれば、同期バッファ回路部３２より現在保持している書込アドレスと書込データを書込コマンドと共にローカルストレージユニット３４である外部ユニットに転送する書込動作８０を行い、メモリマップドレジスタ６８に書き込む。
【００６８】
メモリマップドレジスタ６８の書込みが正常にできると、正常終了のステータス応答８２が得られる。この終了応答８２を受けると、同期バッファ回路部３２はＣＰＵ２２の読出命令実行７８に対する応答として書込データ保持レジスタ５８の書込データを読み出して、ダミーの読出データとしてバス転送する。
なお、ＣＰＵ２２の読出命令実行７８で受信された読出アドレスが同期バッファ回路部３２の保持アドレスと不一致の場合は、同期バッファ回路部３２を内蔵しているメモリアクセスユニット３０（図３参照）による通常のローカルストレージユニット３４に対する読出動作が行われる。
【００６９】
図１２のタイムチャートは、メモリマップドレジスタに対する書込動作で異常が発生した場合である。ブロック３０３の外部メモリ３４のメモリマップドレジスタに対する書込動作において、ブロック４０１の書込み異常が発生すると、これに対しブロック３０５でＣＰＵ２２に異常報告を行う。喪私論、異常報告と同時に読出データ（ダミーデータ）も応答する。
【００７０】
図１３のフローチャートは、図７のＣＰＵ２２に設けた制御プログラム処理部６２によるメモリマップドレジスタのアクセス処理のフローチャートである。まずステップＳ１で、外部メモリに対する書込命令が実行されると、ステップＳ２でＣＰＵ２２内のストアバッファ２４に書込アドレスおよびデータを格納して処理を終了する。次にステップＳ３で、次の命令が外部メモリの読出命令であることを判別すると、ステップＳ４で、ＣＰＵ２２内のストアバッファ２４に滞留している書込アドレスと書込データを外部出力バッファとしての２次キャッシュメモリ２６を介して同期バッファ回路部３２に転送する。
【００７１】
続いてステップＳ５で外部メモリの読出命令を実行し、読出命令の実行に伴い、ステップＳ６で、同期バッファ回路部に対するバス動作によって読出コマンドおよび読出アドレスを通知する。続いてステップＳ７で、外部メモリからのステータスコマンドに対するステータス応答の受信をチェックしており、ステータス応答を受信すると、ステップＳ８でステータスを解読する。
【００７２】
このステータス解読で外部メモリから正常に読出データが応答され、且つ外部メモリに対する同期バッファ回路部３２からの書込動作の正常終了であった場合には一連の処理を終了する。一方、外部メモリから読出データの応答はあったが、これに同期して同期バッファ回路部より外部メモリに対する書込動作の異常報告があった場合には、ステップＳ１０に進み、外部メモリのメモリマップドレジスタの書込動作で異常を起こした書込命令を再度実行するリトライ処理を行って、再度書込動作を行う。
【００７３】
図１４のフローチャートは、図７の同期バッファ回路部の処理動作である。本発明の実施例にあっては、図５に示したように、同期バッファ回路部はハードウェアで構成しており、したがって図１４のフローチャートはハードウェアの動作手順を示すことになる。また、同期バッファ回路部３２をマイクロプロセッサによるソフトウェアで実現する場合には、図１４のフローチャートに従ったプログラム処理とすればよい。
【００７４】
図１４において、同期バッファ回路部３２は、ステップＳ１で上位の出力バッファ部からのデータ転送の有無をチェックしており、外部メモリのメモリマップドレジスタに対する書込アドレスと書込データのデータ転送を受けると、ステップＳ２で、受信したアドレスとデータをそれぞれ書込アドレス保持レジスタ５６と書込データ保持レジスタ５８に格納し、使用状態表示レジスタ５４のビジィビット５５をオンする。
【００７５】
続いてステップＳ３で、ＣＰＵ２２の読出動作を監視している。ＣＰＵ２２で読出命令が実行されて内部バスに読出コマンドおよび読出アドレスが表示されるバス動作からＣＰＵの読出動作を検出すると、ステップＳ４で、書込アドレス保持レジスタ５６の保持アドレスとＣＰＵの読出アドレスを比較する。
ステップＳ５でアドレス一致を判別すると、ステップＳ６で、保持データを外部メモリのメモリマップドレジスタに書き込む書込動作を行う。この書込動作が正常に行われると、ステップＳ７からステップＳ８に進み、同期バッファ回路部３２の書込データ保持レジスタ５６の保持データを読み出して、ダミーの読出データとしてＣＰＵ２２に転送して終了応答とする。
【００７６】
一方、メモリマップドレジスタの書込動作で異常が発生した場合には、ステップＳ９に進み、ステップＳ８と同様、保持データのダミー読出データとしての応答に同期してＣＰＵに書込動作の異常報告を応答する。この書込動作の異常報告を受けたＣＰＵは、図１３のステップＳ１０に示したように直ちにリトライ処理による書込動作の回復を図る。
【００７７】
一方、ステップＳ５で保持アドレスとＣＰＵの読出アドレスが一致しなかった場合には、同期バッファ回路部３２に保持しているデータの読出命令でないことから、ステップＳ１０に進み、通常通り外部メモリの読出動作を実行してＣＰＵ２２に転送する。これは同期バッファ回路部３２を設けているメモリアクセスユニット３０の機能で実現される。
【００７８】
次に、ＣＰＵ２２に設けた制御プログラム処理部６２により、メモリマップドレジスタ６８に対する書込命令と読出命令の実行中に同じメモリマップドレジスタ６８に対する外部割込みが発生した場合の割込プログラム処理部６４の処理を説明する。
図１５は、制御プログラム処理部６２がブロック５００で他の命令動作を行い、次にメモリマップドレジスタに対する書込命令動作をブロック５０２で行う前にブロック５０１の外部割込みが発生した場合のタイムチャートである。このようにブロック５０２のメモリマップドレジスタに対する書込命令動作の前にブロック５０１の外部割込みが発生すると、割込プログラム処理部６４は、まずブロック６００で同期バッファ回路部３２の使用状態表示レジスタ（ステータスレジスタ）５４を読み出す。
【００７９】
このときブロック５０２のメモリマップドレジスタに対する書込命令動作およびブロック５０３の読出命令動作は行われていないため、同期バッファ回路部３２はブロック６０１のようにデータ非保持状態にある。即ち、使用状態表示レジスタ５４の読出しでビジィビット５５をチェックするとビット０となっている。この場合には、ブロック６０２で、割込復帰命令アドレスをブロック５０１の外部割込発生の次のブロック５０２の書込命令動作の命令アドレスのまま維持して、ブロック６０３で割込処理を行う。ブロック６０３の割込処理は、制御プログラム処理部６２による処理と同様、図９のように、ＣＰＵ２２の割込プログラム処理部６４がメモリマップドレジスタ６８の書込命令を実行してストアバッファ２４に書込データおよび読出データを格納する。
【００８０】
次のメモリマップドレジスタ６８の読出命令に先立って、図１０のようにストアバッファ２４から２次キャッシュメモリ（外部出力バッファ）２６を介して同期バッファ回路部３２に書込アドレスおよび書込データが転送され、書込アドレス保持レジスタ５６および書込データ保持レジスタ５８に格納した後、使用状態表示レジスタ５４のビジィビット５５をビット１にオンする。
【００８１】
次に図１１のように、制御プログラム処理部６２によりＣＰＵ２２でメモリマップドレジスタ６８の読出命令が実行されると、これに伴うバスの読出動作を同期バッファ回路部３２で検出して保持アドレスと読出アドレスを比較し、アドレス一致が得られることから、保持データのメモリマップドレジスタ６８に対する書込みを行う。
【００８２】
このようなブロック６０３のメモリマップドレジスタ６８に対する割込処理が終了すると、ブロック６０２でセットした割込復帰命令アドレスにブロック６０４で復帰し、割込終了で、制御プログラム処理部６２はブロック５０２のメモリマップドレジスタに対する命令動作を行う。
図１６は、制御プログラム処理部６２でメモリマップドレジスタに対する書込命令動作をブロック５１０で行い、続いてブロック５１１で、メモリマップドレジスタの読出命令の取出しを行い、次にブロック５１３で読出命令を実行するまでの間にブロック５１２の外部割込みが発生した場合の処理である。
【００８３】
ブロック５１２の外部割込みが発生した状態では、ブロック５１０の書込命令動作でＣＰＵ２２がストアバッファ２４に格納した書込アドレスおよび書込データが、ブロック５１１の読出命令の取出しを契機にして同期バッファ回路部３２に転送され、同期バッファ回路部３２はデータ保持状態となっている。
この状態でブロック５１２の外部割込みの発生で割込プログラム処理部６４が起動すると、まずブロック６１０で、同期バッファ回路部３２の使用状態表示レジスタ（ステータスレジスタ）５４を読み出す。このときデータ書込みが行われていることから、ビジィビット５５はビット１となっており、ブロック６１１でデータ保持状態を認識する。
【００８４】
データ保持状態を認識すると、現在行っている割込処理により同期バッファ回路部３２の保持データは破壊されてしまうことから、ブロック６１２で、現在保持状態にあるデータの書込みを行った書込命令に復帰命令アドレスを戻す処理を行う。即ち、ブロック５１２の外部割込みの発生で本来の割込復帰命令アドレスは次のブロック５１３で実行される読出命令の命令アドレスとなっているが、ブロック６１２では、この読出命令の割込復帰命令アドレスを１命令戻したブロック５１０の書込命令の命令アドレスとする。
【００８５】
続いてブロック６１３で、メモリマップドレジスタに対する書込命令と読出命令の実行を伴う割込処理を行い、割込終了によるブロック６１４の復帰処理はブロック６１２で戻した外部割込み発生前の書込命令の命令アドレスとし、制御プログラム処理部５２はブロック５１０から再度書込命令動作を行う。
この割込終了後のブロック５１０の書込命令動作により、外部割込みの発生で破壊された同期バッファ回路部３２のデータが次のブロック５１１の読出命令取出しを通じて回復し、もし外部割込みが続いて発生しなければ、ブロック５１３で、ＣＰＵの読出命令の実行に伴い、メモリマップドレジスタに同期バッファ回路部３２に保持していたデータの書込動作が行われる。このため、外部割込みの発生により同期バッファ回路部３２に保持したデータが破壊されても、割込終了後に正しいメモリマップドレジスタに対する書込動作を行うことができる。
【００８６】
図１７は、ブロック５２１で書込命令動作を行い、次のブロック５２２で読出命令動作を行った後にブロック５２３で外部割込みが発生した場合の割込処理である。ブロック５２２の読出命令動作の終了後のブロック５２３の外部割込み発生にあっては、同期バッファ回路部３２の保持データは既にメモリマップドレジスタ６８に書き込まれていることから、同期バッファ回路部の格納データが破壊されても問題はなく、割込復帰命令アドレスを維持したまま割込処理を行う。この場合の割込処理プログラム処理部６４によるブロック６２０〜６２４までの処理は、図１５の書込命令動作前の割込処理と同じである。
【００８７】
図１８のフローチャートは、本発明の割込プログラム処理部６４の割込処理である。外部割込みで割込処理が起動すると、ステップＳ１で、同期バッファ回路部の使用状態表示レジスタ（ステータスレジスタ）５４を読み取り、ビジィビット５５の状態でデータ保持状態か否かチェックする。ステップＳ２でデータ保持状態を判別すると、ステップＳ３で、制御プログラムの割込復帰アドレスを１命令戻す処理を行い、ステップＳ５で割込処理を実行し、ステップＳ４でセットした制御プログラムの割込復帰アドレスにリターンする。
【００８８】
一方、ステップＳ２で、ビジィビットがビット０でデータ保持状態にないときには、ステップＳ３の割込復帰アドレスを１命令戻す処理を行わず、割込発生が起きた次の命令アドレスを割込復帰アドレスとして維持したまま、ステップＳ４の割込処理を行って、制御プログラムにリターンする。
尚、上記の実施例は、ＣＰＵ外部のアクセスターゲットとして外部メモリ上のメモリマップドレジスタを例にとっているが、本発明はこれに限定されず、ＣＰＵの外部に存在する適宜のアクセス対象となるターゲットについて同様な処理を適用することができる。更に本発明は実施例に示した数値による限定は受けない。
【００８９】
【発明の効果】
以上説明してきたように本発明によれば、外部割込みの発生による割込処理において、同期バッファ回路部にアクセスターゲットとなるメモリマップドレジスタに書き込むデータが保持状態にあるか否かチェックし、データ保持状態にあるときには、割込処理の実行で保持データが破壊される可能性があることから、制御プログラムの動作を保持データの書込動作以前の状態に復帰させることで、制御プログラムにおけるＣＰＵのマスク制御処理を不要とし、制御プログラムのオーバヘッドを低減すると共に、割込応答性を低下させることなく、出力バッファを用いた外部ターゲットに対する書込動作を確実に行うことができる。
【図面の簡単な説明】
【図１】本発明の原理説明図
【図２】本発明の動作環境となるシステム構成図
【図３】図２のプロセッサマシンのブロック図
【図４】図３のＣＰＵのブロック図
【図５】図３の同期バッファ回路部の回路ブロック図
【図６】図３の同期バッファ回路部に設けたレジスタの説明図
【図７】本発明の処理機能のブロック図
【図８】書込命令の実行から書込動作が正常に行われるまでのタイムチャート
【図９】書込命令の実行サイクルの説明図
【図１０】読出命令に先立って行われる転送サイクルの説明図
【図１１】読出命令の実行に同期した書込サイクルの説明図
【図１２】書込動作で異常が起きたときのタイムチャート
【図１３】ＣＰＵの制御プログラム処理のフローチャート
【図１４】同期バッファ回路部の処理動作のフローチャート
【図１５】書込命令の実行前に外部割込みが発生した時のタイムチャート
【図１６】書込命令の実行後で読出命令の実行前に外部割込みが発生した時のタイムチャート
【図１７】読出命令の終了後に外部割込が発生した時のタイムチャート
【図１８】割込処理のフローチャート
【図１９】従来の出力バッファを用いた外部メモリのアクセス機能のブロック図
【図２０】メモリマップドレジスタに対する複数の書込命令による書込動作の説明図
【図２１】メモリマップドレジスタに対するアクセス命令シーケンスのフローチャート
【図２２】ＣＰＵの命令実行に書込動作を同期させたアクセス方法の説明図
【符号の説明】
１０−１〜１０−４：プロセッサマシン
１２−１，１２−２：システム記憶装置（システムストレージユニット；SSU ）
１４−１，１４−２：システムバス
１６−１，１６−２：入出力バス
１８−１〜１８−４：入出力制御装置（入出力制御モジュール）
２０−１〜２０−４：入出力装置
２２，２２−１，２２−２：ＣＰＵ
２４，２４−１，２４−２：ストアバッファ（内部出力バッファ）
２６，２６−１，２６−２：２次キャッシュメモリ（外部出力バッファ）
２８：２次キャッシュコントローラ
３０：メモリアクセスコントローラ
３２：同期バッファ回路部
３４：ローカルストレージユニット（外部メモリ）
３６：ＲＯＭ
３８：割込みコントローラ
４０−１，４０−２：メッセージコントローラ
４２−１，４２−２：入出力バスコントローラ
４４−１，４４−２：システムバスコントローラ
４６，６０：転送回路
４８：ＣＰＵ命令検出解読回路
５０：レジスタ制御回路
５２：レジスタ回路
５４：使用状態表示レジスタ
５５：ビジィビット
５６：書込アドレス保持レジスタ
５８：書込データ保持レジスタ
６２：制御プログラム処理部
６４：割込プログラム処理部
【図１】
0003723243.tif 000002
【図２】
0003723243.tif 000003
【図３】
0003723243.tif 000004
【図４】
0003723243.tif 000005
【図５】
0003723243.tif 000006
【図６】
0003723243.tif 000007
【図７】
0003723243.tif 000008
【図８】
0003723243.tif 000009
【図９】
0003723243.tif 000010
【図１０】
0003723243.tif 000011
【図１１】
0003723243.tif 000012
【図１２】
0003723243.tif 000013
【図１３】
0003723243.tif 000014
【図１４】
0003723243.tif 000015
【図１５】
0003723243.tif 000016
【図１６】
0003723243.tif 000017
【図１７】
0003723243.tif 000018
【図１８】
0003723243.tif 000019
【図１９】
0003723243.tif 000020
【図２０】
0003723243.tif 000021
【図２１】
0003723243.tif 000022
【図２２】
0003723243.tif 000023