私はユーザ/カーネルスレッドとモード/コンテキストスイッチ(プラットフォーム:Linux)を混同しています
私は2つのリンクされた質問があります。ユーザスレッドからカーネルスレッドへのモード切り替えが発生していますか?
(1)以下の文章は正しいですか?
システムコールを行うと、モード切り替え(ユーザーモードからカーネルモード)が発生し、最終的にユーザースレッドからカーネルスレッドに切り替わります。
システムコールはカーネルスレッドでしか実行できないため、ユーザースレッドからカーネルスレッドへの切り替えが発生する必要があります。
(2)次に、モード切り替えのオーバーヘッドとは、ユーザースレッドのオーバーヘッドをカーネルスレッドに切り替えることです。どのようなオーバーヘッドがありますか?
Iが知ってのとおり、
1)コンテキスト切り替えは、別のプロセスまたはスレッドからCPUの切り替えであり、唯一のカーネルモードで起こります。
2)(コンテキスト切り替えの代わりに)モード切り替えを呼び出す理由は、現在実行中のプロセスがモード切り替え中に変化しないということです。
3)プロセスコンテキストスイッチングは、スレッドコンテキストスイッチングよりもコストがかかります。
もう1つ...モード切り替え(ユーザースレッドからカーネルスレッド)とスレッドコンテキストスイッチ(カーネルスレッドからカーネルスレッド)の大きな違いは何ですか?文が質問(1)であると仮定すると正しいです。 –
syscallが処理された後に、カーネルスタックにユーザのregsを保存し、それらを復元する必要があります。これがオーバーヘッドです。 –
プロセス全体が異なります.1つは例外です。もう1つは、regを変更するだけのOSコードです。 –