2013-08-27 10 views
6

x86(特にPentium)のI/Oポートから読み取ろうとすると、INファミリの命令がデータを待っている間にブロックされたり、いつもすぐに復帰しますか?x86アセンブリのIN(およびINS、INSBなど)命令ブロックはブロックできますか?

+1

良い質問です。私は彼らがノンブロッキングだと信じています。そうしないと、存在しない、または誤動作している外部デバイスが、命令シーケンスを待っているプロセッサをハングアップさせ、正常に完了することがあります。入力命令(「IN」)は、CPUと外部装置との間で一連の信号を開始して、読み取りを要求するCPU、データを提示する装置などを指示する。これらはすべて所定の所定の時間内に生じる。 – lurker

+2

これらはありませんが、プロセッサはI/O命令の実行と外部バスの動作を同期させます。 インテル®64およびIA-32アーキテクチャー・ソフトウェア開発者マニュアル1/14.6 – user35443

+1

バスがロックされているとどうなりますか? INは最終的にタイムアウトしますか? –

答えて

3

短い答え:理論的にははい、I/Oデバイスでき I/Oリード(in命令)の "ブロック" にCPUを引き起こします。

しかし、実際にはかなりの時間停滞したメモリやI/Oデバイスを認識していないため、CPUの実行がブロックされてしまいます。


ロング回答:

inout命令がIを実行/ O典型的なメモリ・バス・サイクルとほぼ同一である、読み取り/書き込み。唯一の違いは、I/O対メモリアクセスを示すために異なる信号がアサートされていることです。

これはかなり低いレベルになり、詳細は後のCPUでより複雑になります。私は参照しているthis presentationは、8086/8088から始まるx86バスサイクルについての信号レベルの詳細に入ります。1つのウェイトステート我々がいることを示すために、メモリやI/OデバイスによってアサートされREADY信号が存在することがわかり 8086/8088 Read Cycle with 1 Wait State https://web.archive.org/web/20130319052544/http://www.ece.msstate.edu/~reese/EE3724/lectures/bustran/bustran.pdf

8088分の8086リードサイクルそれはバスにそのデータを提示し、CPUがそれをラッチするため準備でいる。そのPDF状態

のx86がREADYにしています制御バス上のラインを入れ

- T3

中に「チェック」READY入力

- READYがアクティブでない場合(LOW)、追加のT3国が追加され

- これらの追加T3国はと呼ばれ、「ウェイトステート」

だから、デバイスがメモリやI/O命令の「ブロック」にCPUを引き起こし、READYをアサートする前に多くのサイクルを待つことができると、少なくともこれらの古いCPUを搭載し、可能です。

私は、少なくとも"is asserted by the data driver on each data transfer, indicating valid data on the data bus. In a multi-common clock data transfer, DRDY# may be de-asserted to insert idle clocks."


長い回答ことDRDY#(データレディ)ピンがあるPentium 4を通じて、これはまだ有効であると考えている:初期のシステムでは

を、私は多くの信じているがは、アドレス/データ/他のラインに直接接続され、CPUと直接通信した。そのため、カスタムまたはルージュデバイスの中には、バスサイクルで「ストール」するものがあります。

今、アーキテクチャは大きく異なります。現代のx86プロセッサは、それ自体が "アドレス"と "データ"ピンを持っていなくても、代わりにDMIQPIのようなリンクを持ち、northbridge/southbridge(またはPlatform Controller Hub)の設定と通信します。これらのデバイスは、メモリ/ IO要求を適切なデバイスに転送します。この設定では、PCHが発信I/O読み取りでQPIリンクを介してプロセッサ要求をストールできるようにすることはできません。

4

x86ファミリのプロセッサには、わかっている限り、「ブロックする」命令が1つしかありません。「HLT」です。

"IN"と "OUT"(およびその変形)はメモリへの読み取り/書き込みアクセス以外は何もありません。したがって(ハードウェアを見ると)、メモリからの "MOV"命令とまったく同じように動作しますが、例外的に別のアドレス範囲にアクセスします。

"IN"ブロックを作成する可能性があります。アクセスされたときにコンピュータを停止させるハードウェアコンポーネントがいくつかあると思います。このようなコンポーネントが "メモリマップされた"アドレスを使用する場合、 "MOV"命令さえもCPUをブロックさせるでしょう!

しかし、このようなハードウェアコンポーネントは、より理論的であり、私の知る限り、現在のコンピュータには存在しません。

1

私の情報は非常に古いですが、私が知っているほとんどのプロセッサは、低速ハードウェアデバイスと高速CPUとの同期メカニズムを持っています。ここで遅くて速いのは相対的で遅いということは、通常はマイクロ秒とナノ秒の間を意味します。

したがって、入出力命令が実行されると、CPUはIOデバイスが情報を準備するまで少し待つことができます。

私はx86についてはわかりませんが、一部のアーキテクチャではIOデバイスがCPUを無限に停止させる可能性があります。

これは「ブロックしていますか?私は知らないが、これらの命令は遅くなる可能性があり、速度はハードウェアに依存する可能性がある。さらに、IO命令はキャッシュ可能ではなく、これも非常に遅いです。

参考までに、PCIバス仕様と最新のプロセッサーハードウェア仕様について詳しくお読みください。

+0

「待機」は、無期限に続行できる場合にのみブロックされます。 – lurker

関連する問題