2016-08-19 7 views
2

私はユーザ/カーネルスレッドとモード/コンテキストスイッチ(プラットフォーム:Linux)を混同しています
私は2つのリンクされた質問があります。ユーザスレッドからカーネルスレッドへのモード切り替えが発生していますか?

(1)以下の文章は正しいですか?

システムコールを行うと、モード切り替え(ユーザーモードからカーネルモード)が発生し、最終的にユーザースレッドからカーネルスレッドに切り替わります。

システムコールはカーネルスレッドでしか実行できないため、ユーザースレッドからカーネルスレッドへの切り替えが発生する必要があります。

(2)次に、モード切り替えのオーバーヘッドとは、ユーザースレッドのオーバーヘッドをカーネルスレッドに切り替えることです。どのようなオーバーヘッドがありますか?


Iが知ってのとおり、
1)コンテキスト切り替えは、別のプロセスまたはスレッドからCPUの切り替えであり、唯一のカーネルモードで起こります。
2)(コンテキスト切り替えの代わりに)モード切り替えを呼び出す理由は、現在実行中のプロセスがモード切り替え中に変化しないということです。
3)プロセスコンテキストスイッチングは、スレッドコンテキストスイッチングよりもコストがかかります。


+0

もう1つ...モード切り替え(ユーザースレッドからカーネルスレッド)とスレッドコンテキストスイッチ(カーネルスレッドからカーネルスレッド)の大きな違いは何ですか?文が質問(1)であると仮定すると正しいです。 –

+0

syscallが処理された後に、カーネルスタックにユーザのregsを保存し、それらを復元する必要があります。これがオーバーヘッドです。 –

+0

プロセス全体が異なります.1つは例外です。もう1つは、regを変更するだけのOSコードです。 –

答えて

2

(1)以下の文章右か?

システムコールを行うと、モード切り替え(ユーザーモードからカーネルモード)が発生し、最終的にユーザースレッドからカーネルスレッドに切り替わります。

はい

(2)次に、我々は、モード切り替えのオーバーヘッドは、ユーザスレッドのオーバーヘッドを切り替えることスレッドをカーネルすることが何であるかを呼び出しますか?どのようなオーバーヘッドがありますか?

Good answer大きなモードスイッチとの間の差(ユーザスレッドスレッドカーネルへ)スレッドをカーネルスレッドコンテキストスイッチ(カーネルスレッドは何この質問

に等、セグメントセレクタを変更する、レジスタの保存)?

カーネルスレッドをカーネルスレッドに切り替える場合、セグメントセレクタは同じであると思います。アーキテクチャに依存する

関連する問題