0

CPUが命令を並べ替えることができることはわかっています。および OS は、ディスパッチによってマルチスレッドをシミュレートします。

次のCPUマシン命令:

ins0
ins1
ins2

thread0 は、これら 3 つの in を 2 つの部分に分割します。part0 は ins0 を実行し、part1 は ins1 と ins2 を実行します。part0開始前、part2完了。その後、thread1 がトリガーされます。

私の質問は:スレッド1が開始する前にpart0を完了する必要がありますか? または、thread0 が ins0 を完了せずに ins1 と ins2 を完了している間に、thread1 が開始しますか?

4

1 に答える 1

3

簡単に言えば、ごくわずかな例外を除いて、CPU があるスレッドから別のスレッドに切り替わるとき、CPU は命令境界を選択し、その境界の前にすべての命令を完了し、その境界の後に開始しないということです。再開するときは、その境界の後の最初の命令から開始します。

例外または割り込みの処理後にプログラムまたはタスクを再開できるようにするために、すべての例外 (アボートを除く) は命令境界で例外を報告することが保証されています。すべての割り込みは、命令境界で発生することが保証されています。
...
割り込みは、継続性を失うことなく、中断されたプログラムとタスクの再開を厳密にサポートします。割り込み用に保存された戻り命令ポインタは、プロセッサが割り込みを受け取った命令境界で実行される次の命令を指します。実行されたばかりの命令に繰り返しプレフィックスがある場合、次の反復を実行するように設定されたレジスタを使用して、現在の反復の最後に割り込みが発生します。-- Intel x86システム プログラミング ガイド、ボリューム 3A、パート 1、セクション 6.6

于 2012-09-06T02:47:52.017 に答える