コンテキスト切り替えとモード切り替えのうち、最も頻繁に発生するものは何ですか?
私自身には2つの答えがありますが、どちらが正しいかわかりません。
ユーザーモードではコンテキスト切り替えが発生しますが、これがシステムコールを必要とするわけではないため、コンテキスト切り替えが発生したときにモードは変更されません。
コンテキスト切り替えは、予約が必要であることを意味します。これは権限があると思うので、コンテキスト切り替えを実行するにはユーザーモードからカーネルモードに変更する必要があります。言い換えれば、コンテキストスイッチはモードスイッチを伴う。
これに対して明確な答えを持っている人はいますか?
ベストアンサー1
プロセス間コンテキスト切り替えには、常にプロセッサレベルのハイパーバイザモードエントリが含まれます。スケジューラはプロセステーブルと次のプロセスのメモリマップにアクセスする必要があり、両方とも前のプロセスではアクセスできないため、特権の昇格が必要です。その後、スケジューラはMMUが依然として権限を必要とする新しいプロセスのメモリマップを指す必要があります。高度。
同じプロセスのスレッド間コンテキスト遷移にカーネルをまったく含める必要はありません。
したがって、最も頻繁に発生するのは、システムに軽量のスレッドがたくさんあるかどうかによって異なります。
背景素材:それ以上ウィキペディア、この記事(Linux情報プロジェクトのコンテキスト切り替え)。そしてもちろんLinuxカーネルについて学ぶ(3章).