x86(特にPentium)のI/Oポートから読み取ろうとすると、INファミリの命令がデータを待っている間にブロックされたり、いつもすぐに復帰しますか?x86アセンブリのIN(およびINS、INSBなど)命令ブロックはブロックできますか?
答えて
短い答え:理論的にははい、I/Oデバイスでき I/Oリード(in
命令)の "ブロック" にCPUを引き起こします。
しかし、実際にはかなりの時間停滞したメモリやI/Oデバイスを認識していないため、CPUの実行がブロックされてしまいます。
ロング回答:
in
とout
命令がIを実行/ O典型的なメモリ・バス・サイクルとほぼ同一である、読み取り/書き込み。唯一の違いは、I/O対メモリアクセスを示すために異なる信号がアサートされていることです。
これはかなり低いレベルになり、詳細は後のCPUでより複雑になります。私は参照しているthis presentationは、8086/8088から始まるx86バスサイクルについての信号レベルの詳細に入ります。1つのウェイトステート我々がいることを示すために、メモリやI/OデバイスによってアサートされREADY
信号が存在することがわかり 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プロセッサは、それ自体が "アドレス"と "データ"ピンを持っていなくても、代わりにDMIとQPIのようなリンクを持ち、northbridge/southbridge(またはPlatform Controller Hub)の設定と通信します。これらのデバイスは、メモリ/ IO要求を適切なデバイスに転送します。この設定では、PCHが発信I/O読み取りでQPIリンクを介してプロセッサ要求をストールできるようにすることはできません。
x86ファミリのプロセッサには、わかっている限り、「ブロックする」命令が1つしかありません。「HLT」です。
"IN"と "OUT"(およびその変形)はメモリへの読み取り/書き込みアクセス以外は何もありません。したがって(ハードウェアを見ると)、メモリからの "MOV"命令とまったく同じように動作しますが、例外的に別のアドレス範囲にアクセスします。
"IN"ブロックを作成する可能性があります。アクセスされたときにコンピュータを停止させるハードウェアコンポーネントがいくつかあると思います。このようなコンポーネントが "メモリマップされた"アドレスを使用する場合、 "MOV"命令さえもCPUをブロックさせるでしょう!
しかし、このようなハードウェアコンポーネントは、より理論的であり、私の知る限り、現在のコンピュータには存在しません。
私の情報は非常に古いですが、私が知っているほとんどのプロセッサは、低速ハードウェアデバイスと高速CPUとの同期メカニズムを持っています。ここで遅くて速いのは相対的で遅いということは、通常はマイクロ秒とナノ秒の間を意味します。
したがって、入出力命令が実行されると、CPUはIOデバイスが情報を準備するまで少し待つことができます。
私はx86についてはわかりませんが、一部のアーキテクチャではIOデバイスがCPUを無限に停止させる可能性があります。
これは「ブロックしていますか?私は知らないが、これらの命令は遅くなる可能性があり、速度はハードウェアに依存する可能性がある。さらに、IO命令はキャッシュ可能ではなく、これも非常に遅いです。
参考までに、PCIバス仕様と最新のプロセッサーハードウェア仕様について詳しくお読みください。
「待機」は、無期限に続行できる場合にのみブロックされます。 – lurker
- 1. X86アセンブリ - IDIV命令の処理
- 2. アセンブリx86補助演算命令
- 3. MIPS命令およびマシンコード
- 4. x86 ROR命令はどのように機能しますか?
- 5. x86アセンブリの乗算命令と除算命令のオペランド、16ビット以上
- 6. x86アセンブリ極端な初心者質問: "無効な命令オペランド"?
- 7. Drupal 7 - コンテンツタイプをブロックおよびブロック命名規約として表示
- 8. MOVSXアセンブリ命令はどのように機能しますか?
- 9. x86アセンブリでidiv命令がオーバーフローする最小値
- 10. "out"と "in"命令の特権命令はありますか?
- 11. このx86アセンブリ命令は何ですか(addsd xmm0、ds:__ xmm @ 41f000000000000000000000000000 [edx * 8])?
- 12. MVC3、EF4、およびUsingブロック
- 13. ブロック、スタック、およびヒープ
- 14. X86アセンブリ言語コード内の命令の数をカウント
- 15. x86のINC命令はどのようにアトミックではありませんか?
- 16. アセンブリのx86 REP、REPZ、REPNZ、XACQUIREとXRELEASE命令
- 17. x86 assembly-masm32:無効な命令のオペランド
- 18. X86 'cmpps'命令とLLVM IR 'fcmp'命令は入れ替え可能ですか?
- 19. x86デコード命令opcodeバイト
- 20. アセンブリMIPS TAl命令
- 21. アセンブリJZ命令CMP
- 22. MIPSアセンブリ命令数
- 23. 'および'、 'または'命令を検出する
- 24. MOVDQAとMOVAPS x86命令の違いは?
- 25. Rubyのメソッド、PROC、およびブロック混乱
- 26. 弱ブロック内の参照およびサイクル
- 27. アセンブリ言語のCALL命令
- 28. アセンブリの移動命令
- 29. なぜINCおよびDEC命令はキャリーフラグに影響しませんか?
- 30. SSE命令はどのように使用できますか?
良い質問です。私は彼らがノンブロッキングだと信じています。そうしないと、存在しない、または誤動作している外部デバイスが、命令シーケンスを待っているプロセッサをハングアップさせ、正常に完了することがあります。入力命令(「IN」)は、CPUと外部装置との間で一連の信号を開始して、読み取りを要求するCPU、データを提示する装置などを指示する。これらはすべて所定の所定の時間内に生じる。 – lurker
これらはありませんが、プロセッサはI/O命令の実行と外部バスの動作を同期させます。 インテル®64およびIA-32アーキテクチャー・ソフトウェア開発者マニュアル1/14.6 – user35443
バスがロックされているとどうなりますか? INは最終的にタイムアウトしますか? –