2011-01-25 10 views
1

長い命令の途中でCPUが割り込みを受信した場合はどうなりますか? CPUが命令全体を実行するのか、その一部だけを実行するのか?プロセッサが割り込み時の命令を処理する方法

+1

「長い命令」とはどういう意味ですか?すべてのCPU命令はアトミックであり、(プロセッサの観点から)できるだけ小さな単位の時間を取る。それとも、授業中に何かが恋しいですか? :) – Jakob

+0

@Jakob:現代のスパースカラープロセッサーはどうですか?どこのクロックサイクルで100以上の命令を "飛行中"持っているのでしょうか?割り込みを処理するには、これらの命令をすべて完了する必要がありますか? –

+0

@ヤコブ:インテルマニュアルによると、異なる命令は時間(サイクル)の異なる量をとります –

答えて

1

、いずれかの特定の命令を引退され、そのすべての副作用は、レジスタ/メモリにコミットするかではない(と、それはいるかのようです命令は全く実行されなかった)。命令退職の全ポイントは、割り込みなどの外部イベントの時点でのプログラム状態の一貫したビューを保証することです。

これは特に、命令が順番に終了する理由で、外部のオブザーバはCPUのアーキテクチャ状態を、順番に命令を実行しているかのように見ることができます。

これには例外があります。特に、REP-stringクラスの命令があります。

私はこれがあなたが尋ねたことだと思っていますが、そうでない場合は、私に聞かせてください:どのように命令がどこからでも「部分的に」実行されたことを観察しますか?

1

私が知る限り、それはプロセッサーと命令に依存します。具体的には、プロセッサが保留中の割り込みをサンプリングするかどうかと、プロセッサが割り込みをサンプリングするかどうかとに依存します。プロセッサが現在の命令を完了した後に保留中の割り込みのみを探す場合、途中の命令は何も中断しません。しかし、長い命令が実行されている場合、命令の実行中に何回か割込みをサンプリングすると有益です(レイテンシに敏感です)。これには欠点があります。この場合、命令が部分的に実行された結果として、レジスタとフラグに加えられたすべての変更を復元する必要があります。なぜなら、割り込みが完了した後に戻ってその命令を再発行する必要があるからです。

(出典:ウィキペディア、http://en.wikipedia.org/wiki/Interrupt)プログラマの観点から

関連する問題