148

両方の状況で正確に何が行われるか教えてもらえますか? それぞれの主な費用はいくらですか?

4

10 に答える 10

230

スレッド切り替えとプロセス切り替えの主な違いは、スレッド切り替え中は仮想メモリ空​​間が同じままであるのに対し、プロセス切り替え中は変わらないことです。どちらのタイプも、オペレーティング システム カーネルに制御を渡してコンテキスト スイッチを実行する必要があります。OS カーネルの切り替えプロセスとレジスタの切り替えコストは、コンテキスト切り替えを実行するための最大の固定コストです。

よりあいまいなコストは、コンテキスト スイッチがプロセッサのキャッシュ メカニズムを台無しにすることです。基本的に、コンテキストを切り替えると、プロセッサがキャッシュに「記憶」しているすべてのメモリ アドレスが事実上役に立たなくなります。ここでの大きな違いの 1 つは、仮想メモリ空​​間を変更すると、プロセッサの Translation Lookaside Buffer (TLB) または同等のものがフラッシュされ、しばらくの間メモリ アクセスのコストが高くなることです。これは、スレッドの切り替え中は発生しません。

于 2011-03-26T03:18:51.613 に答える
18

プロセス コンテキストの切り替えには、メモリ アドレス空間の切り替えが含まれます。これには、メモリ アドレス、マッピング、ページ テーブル、およびカーネル リソースが含まれますが、これは比較的高価な操作です。一部のアーキテクチャでは、アドレス空間間で共有できないさまざまなプロセッサ キャッシュをフラッシュすることさえ意味します。たとえば、x86 は TLB をフラッシュする必要があり、一部の ARM プロセッサは L1 キャッシュ全体をフラッシュする必要があります!

スレッド切り替えとは、同じプロセス内のスレッド間でコンテキストを切り替えることです (プロセスをまたがるスレッドからスレッドへの切り替えは、単なるプロセス切り替えです)。プロセッサの状態 (プログラム カウンターやレジスタの内容など) の切り替えは、一般的に非常に効率的です。

于 2014-08-24T03:57:07.210 に答える
17

まず、オペレーティング システムは、カーネル モードで実行されるスレッド間でのみスレッドの切り替えを実行できるため、発信スレッドがまだ存在しない場合はカーネル モードにします。次に、スケジューラが呼び出され、切り替え先のスレッドが決定されます。決定が下されると、カーネルは CPU (CPU レジスタ) にあるスレッド コンテキストの一部をメモリ内の専用の場所 (多くの場合、発信スレッドのカーネル スタックの一番上) に保存します。次に、カーネルは、送信スレッドのカーネル スタックから受信スレッドのカーネル スタックへの切り替えを実行します。その後、カーネルは以前に保存された受信スレッドのコンテキストをメモリから CPU レジスタにロードします。最後に、制御をユーザー モードに戻しますが、新しいスレッドのユーザー モードに戻します。着信スレッドが実行されていると OS が判断した場合別のプロセスでは、カーネルは 1 つの追加の手順を実行します: 新しいアクティブな仮想アドレス空間を設定します。

両方のシナリオの主なコストは、キャッシュ汚染に関連しています。ほとんどの場合、送信スレッドで使用されるワーキング セットは、受信スレッドで使用されるワーキング セットとは大きく異なります。その結果、着信スレッドはキャッシュ ミスの雪崩でその寿命を開始し、キャッシュから古くて役に立たないデータをフラッシュし、メモリから新しいデータをロードします。同じことが TLB (CPU 上にある変換ルック アサイド バッファー) にも当てはまります。仮想アドレス空間のリセット (異なるプロセスで実行されるスレッド) の場合、仮想アドレス空間のリセットは TLB 全体のフラッシュにつながるため、ペナルティはさらに悪化します新しいスレッドが実際に少数の新しいエントリのみをロードする必要がある場合。その結果、新しいスレッドは、多くの TLB ミスと頻繁なページ ウォーキングでタイム クォンタムを開始します。スレッド切り替えの直接的なコストも無視できず (~250 から~1500-2000 サイクルまで)、CPU の複雑さ、両方のスレッドの状態、およびそれらが実際に使用するレジスタのセットに依存します。

PS: コンテキスト スイッチのオーバーヘッドに関する良い記事: http://blog.tsunanet.net/2010/11/how-long-does-it-take-to-make-context.html

于 2016-10-27T10:16:20.357 に答える
3
  • プロセスの切り替え:マルチプログラミング環境でプロセスに常駐する2つのメモリ間の遷移です。
  • コンテキストの切り替え:実行中のプログラムから割り込みサービスルーチン(ISR)へのコンテキストの変更です。
于 2012-12-03T05:32:59.063 に答える
-1

OS が実行する CPU に高レイテンシ デバイスが接続されていると仮定すると、

待ち時間の長いデバイスが応答している間に、プロセスのアドレス空間の別のスレッドを実行することは理にかなっています。

ただし、高レイテンシ デバイスの応答が、テーブルのセットアップと新しいプロセスの仮想メモリから物理メモリへの変換に必要な時間よりも速い場合、スイッチが必要かどうかは疑問です。

また、HOT キャッシュ (プロセス/スレッドの実行に必要なデータに短時間で到達可能) を選択することをお勧めします。

于 2011-12-29T01:52:58.427 に答える
-1

つまり、スレッド コンテキスト スイッチはまったく新しいメモリと pid のセットを割り当てず、同じプロセス内で実行されているため、親と同じものを使用します。プロセス 1 は新しいプロセスを生成し、新しい mem と pid を割り当てます。

それにはさらに多くのことがあります。彼らはそれについて本を書いています。

コストに関しては、すべてのスタックカウンターなどをリセットする必要があるため、プロセスコンテキストスイッチ >>>> スレッド。

于 2011-03-26T03:14:30.177 に答える