ユーザプロセスがシステムコールを実行すると、カーネルプロセスが呼び出されます。今すぐどうすればはになりますか?カーネルプロセスは、ユーザプロセスと異なるです。あるいは、私は、カーネルルーチン(システムコールによって呼び出される)とユーザープロセスが同じプロセスに属していると誤っていますか?ユーザプロセスはコンテキスト切り替えを行わずにシステムコールをどのように実行しますか?
1
A
答えて
2
'ユーザプロセスがシステムコールを実行すると、カーネルプロセスが呼び出されます。実際には、カーネルコードが呼び出されることはありません。どのシステムコールでも、必然的に保護コンテキストの変更(リングサイクル)が発生します。これがどれだけ深くなるかは、コールに依存します。コールがリング0に到達した場合、そこにあるカーネルコードはすべてのユーザースレッドとカーネルスレッドにアクセスできるため、カーネルコードは一般に「プロセス」として記述することはできません。保護。典型的には、リング0からリング0へのリングサイクルは2000+ cpuサイクルを要する(ドイツオペラでは3日かかる)。このオーバーヘッドは、システムコールがスレッドコンテキストスイッチおよび/またはプロセスコンテキストスイッチになるかどうかにかかわらず、絶対に必要とされます。
システムコールによって実行中のスレッドセットが変更される場合は、特に変更に別のプロセッサで実行されているスレッドのプリエンプションが必要な場合は、スレッドコンテキストスイッチのオーバーヘッドが発生します。
新しく実行されているスレッドが、先取りされたスレッドとは異なるプロセスに属している場合は、プロセスコンテキストスイッチのオーバーヘッドがさらに大きくなります。
関連する問題
- 1. スレッドがシステムコールを呼び出すときのコンテキスト切り替え
- 2. どのように切り替えるかDatabaseGeneratedOption.Identityをオン/オフで実行時に
- 3. ビューで実行するようにクエリを切り替える
- 4. 実行時にTableAttributeを設定する方法はありますか、実行時にLINQタイプの切り替えを行う方法はありますか?
- 5. ゴルーチン間のコンテキスト切り替えをいつ実行するかを決定しますか?
- 6. アカウントをどのようにログアウト/切り替えますか?
- 7. コンテキスト切り替えデッドロック
- 8. ActiveXでデザインモードと実行モードの切り替えがいつ行われるのか分かりますか?
- 9. Linuxシステムコールに関して実装されたプロセスのバックグランドはどのようにして行われますか?
- 10. Java Swing - 実行時に動的にロケールを切り替える
- 11. 高速ユーザー切り替え後にスクリプト/プログラムを実行する
- 12. Webインターフェイスを使わずにDrupalでテーマを切り替える
- 13. 実行時にリピータのItemTemplateを切り替える
- 14. 実行時にTG2のデータベースを切り替える
- 15. C#はどのようにスレッドの切り替えを処理しますか?
- 16. 実行時にMasterPageFileを切り替える
- 17. 実行時にWCFで実行時にサービス契約の実装を切り替えます
- 18. 既に実行中のアプリケーション間の切り替え
- 19. 実行中の他のアプリケーションに切り替える方法
- 20. CountDownTimerは、アクティビティの切り替え時に古いアクティビティで実行されます。
- 21. Linuxのコンテキスト切り替えカーネルプロセス
- 22. Symfony:コンテキスト切り替えの問題
- 23. コンテキスト切り替えのgccインラインアセンブリ
- 24. コンテキスト切り替えネイティブスレッドはJVMにアタッチできません
- 25. Pythonで実行を新しいスクリプトに切り替える方法は?
- 26. 私のアプリケーションは実行されず、アクティビティを切り替えることはありません
- 27. RVMをインストールしてルビーバージョンを切り替えようとしましたが、実行しません。
- 28. 実行中のJavaプログラムの言語を切り替えるベストプラクティス
- 29. タスク間のコンテキスト切り替えを容易にする習慣
- 30. 呼び出し規約がコンテキスト切り替えに影響しますか?
ユーザプロセスのバイナリ/実行可能イメージのカーネルコード部分も同様ですか?カーネルコードはリンク中にユーザープロセスのバイナリファイルの一部になりますか? –
OSのリンクの詳細は、OSに依存します。通常、実行時にOSアクセスを提供するビルド時ライブラリがリンクされています。 DLLとの動的リンクによって。したがって、カーネルにアクセスするコードはバイナリ実行可能ファイルの一部となり、実際のカーネルコードはすべてのプロセスで共有されます。 –
クール..これは私が知る必要があったものです! :)ありがとう:) –