プロセスkeventdを考えてみましょう。カーネルモードでは、すべての時間を費やしています。 私が知る限り、Linuxはコンテキストスイッチが期限切れかどうかを確認しますが、プロセスはカーネルモードからユーザーモードに切り替わります。私が知る限り、keventdはカーネルモードからユーザーモードに切り替えることはありません。 Linuxカーネルはいつスイッチを切るべきかを知っていますか?Linuxのコンテキスト切り替えカーネルプロセス
4
A
答えて
4
あなたが言ったようにカーネルを実行していて、プロセスが明示的なユーザ - カーネルモードの切り替えで切り替えられるかどうかをチェックするだけの場合、次のループはコンピュータのコアをロックします:
while (1);
明らかに、これは通常のデスクトップオペレーティングシステムでは発生しません。理由はなぜプリエンプションです。プロセスがそのタイムスライスのために実行された後、カーネルはアラームを取得し、ステップインし、必要に応じてコンテキストを強制的に切り替えます。
プリエンプションは原則としてカーネルプロセスでも機能します。しかし、私はそれが何であるか分かりませんkeventd
- 定期的にタイムスライスを自発的に放棄する可能性がより高いです(特に、カーネルを非ゼロにするように設定することができるので、同じ効果のユーザスペース呼び出しであるsched_yield
を参照してください)先制。それはカーネルプロセスの特権です。
関連する問題
- 1. コンテキスト切り替えデッドロック
- 2. Symfony:コンテキスト切り替えの問題
- 3. コンテキスト切り替えのgccインラインアセンブリ
- 4. Visual Studio Team Explorerのソース管理コンテキストの切り替え
- 5. タスク間のコンテキスト切り替えを容易にする習慣
- 6. スレッドがシステムコールを呼び出すときのコンテキスト切り替え
- 7. jQueryクラスの切り替えとクッキーの値の切り替え?
- 8. 他のビューの切り替えに切り替えるapp xcode
- 9. メニューの切り替えの切り替え
- 10. 例外処理コンテキスト切り替えとSEH
- 11. コンテキスト切り替えネイティブスレッドはJVMにアタッチできません
- 12. 切り替えガレリアフルスクリーンモード
- 13. スレッド切り替え
- 14. Linuxでスイングフレームを切り替えるときの白い画面
- 15. Linuxのドライバでリアルモードに切り替える方法
- 16. linuxの下でのPythonのtime.sleep(0)の振る舞い - コンテキスト切り替えを引き起こしますか?
- 17. エンティティデータモデルの切り替え
- 18. javaFXの切り替えシーン
- 19. ビデオストリーミングの切り替え
- 20. カスタムリストビューでの切り替え
- 21. ビュー間の切り替え
- 22. モーダルビューコントローラ間の切り替え
- 23. アプリ間の切り替え
- 24. スローネスの切り替えTabItems
- 25. Outlook FormRegionの切り替え
- 26. ByteStringsへの切り替え
- 27. クラスの切り替え?
- 28. アニメーションタブバーページの切り替え
- 29. アプリケーションのドメイン切り替え
- 30. アクティビティの切り替え
(1)はscheduler_tick()ごとにカーネルモードに切り替えるので、プロセスのタイムスライスがカーネルモードになっている間にカーネルはそれを知り、p-> need_resched = 1を実行します。ユーザーモードに切り替えるには、schedule()を呼び出します。 – Shmoopy
@Shmoopy正解!あなたの元の投稿から、プログラムがシステムコールをしていないときに起こる暗黙的なカーネルモード遷移があることを理解したので、私は明確にしました。私は私の答えに "明示的"という言葉を追加します。もちろん、 'scheduler_tick'はあなたがカーネル空間にいても起動します。そして、あなたはticklessカーネルを持つことができます... – Borealid
keventd(またはそのようなカーネルプロセスについては)のscheduler_tick()私の質問は、いつLinuxカーネルがそのフラグをチェックするかは決してカーネルとカーネルの関係がない場合です。スケジューラータグ(他のものの中でも)は:if(! - p-> time_slice){p-> need_recsched =カーネルプロセスのユーザ遷移(この例ではkeventd)。 – Shmoopy