特定の信号に対してユーザ定義のハンドラ関数が指定されています。この信号を受信すると、ハンドラ関数が呼び出されます。ハンドラ関数は、ユーザ空間またはカーネル空間で実行されますか? または、一般に、任意のシグナルに対するアクションは、ユーザー空間またはカーネル空間で実行されますか?シグナルハンドラはカーネルまたはユーザ空間で実行されますか?
1
A
答えて
5
ハンドラはユーザー空間で実行され、プロセスの仮想アドレス空間にのみアクセスできます。
もちろん、Cの標準は "user"と "kernel"について何も知らない。
4
信号ハンドラはユーザ空間で実行する必要があります。カーネル空間で実行された場合、カーネルはすべてのプロセスを制御できるため、マシン全体で何かにアクセスすることができます。その結果、悪意のあるプログラムは他のプログラムのメモリを壊したり、データを盗み出したり、信号を送信するだけで悪化したりする可能性があります。
4
一般に、信号はユーザ空間で実行されます。しかし、C言語標準は実際にユーザーとカーネル空間の間の分離を定義していないので、そうでないC言語の実装が考えられることが考えられます。
しかし、WindowsではUnixのすべてのフレーバで、が保証されており、ユーザ空間ではが保証されています。
0
カーネルはユーザ空間に信号を送ることができますが、その逆もありません。また、送信されるデータ量は非常に限られており、シグナルハンドラはユーザ空間で実行されます。
説明:
ユーザ空間にカーネル空間からの信号を送信できるようにするために、カーネルはユーザ空間のプロセスのpidを知っている必要があります。カーネルモジュールがpidを受信するとすぐに、対応するプロセス記述子を探し、それにシグナルを送ります。信号に関連するすべての情報はstruct siginfo
に保存されます。
ユーザスペースプロセスは、シグナルハンドラ機能をカーネルに登録します。これにより、シグナルハンドラ関数のアドレスがプロセス記述子に追加されます。この関数は、特定のシグナルが配信されるたびに実行されます。
関連する問題
- 1. std :: threadsはユーザ空間またはカーネル空間で管理されますか?
- 2. カーネル空間からユーザ空間関数を実行
- 3. ユーザ空間またはカーネル空間にJavaスレッドが作成されていますか?
- 4. ODBCドライバはカーネル空間またはユーザ空間で動作しますか?どうして?
- 5. ユーザ空間とカーネル空間の間でメモリを共有する
- 6. カーネル空間からユーザ空間にパケットをバイパスする
- 7. ユーザ空間からカーネル空間へのmemcpy
- 8. カーネル空間とユーザ空間の時間の差異
- 9. ハードウェアアドレス空間または仮想アドレス空間でキャッシュプリフェッチが実行されていますか?
- 10. 、Linuxではカーネル空間
- 11. Linuxカーネル、ユーザ空間のバッファ、access_okを実行して待機して競合状態を作成しますか?
- 12. Djangoがmodels.pyまたはシグナルハンドラのユーザにログインしました
- 13. カーネルの起動から実行までの平均時間は?
- 14. ユーザ空間プログラムでカーネルlibcrc32c(または同じ機能)を使用するには?
- 15. カーネルからユーザー空間で作成されたノードにアクセスする方法は?
- 16. シグナルハンドラは無期限に実行されますか? WindowsとLinuxの
- 17. カーネル空間から返された構造体をユーザ空間にコピーすることは不可欠ですか?
- 18. カーネルとユーザ空間の間の共有メモリセグメントの保護
- 19. copy_to_userがカーネルからmmapユーザーにデータをコピーできませんでしたか?ユーザ空間プログラムの開発で
- 20. malloc()はカーネル空間にありますか?
- 21. Linuxカーネルは別のLinuxカーネルを読み込んで実行できますか?
- 22. linuxカーネル空間のユーザー空間スタックトレースを表示するには
- 23. カーネルはなぜプロセスアドレス空間にあると言われていますか?
- 24. カーネル空間でシステムコールを呼び出すことはできますか?
- 25. Linuxユーザー空間とカーネル空間スケジューリング
- 26. コードは実行されますが、Tkinterウィンドウは空白のままです
- 27. HTML5 RequestAnimationFrameはCPUまたはGPUで実行されますか?
- 28. glibcでコンパイルし、eglibcでコンパイルされたカーネルを実行する
- 29. 画像処理 - カーネル空間、関数、データとは何ですか?
- 30. 環境変数はカーネル空間の一部ですか?
シグナルハンドラは、C言語仕様の一部でもありません。私はこれがC言語仕様の外にあると思います。 –
@AdamMihalcin:C言語の仕様では、実際に 'signal()'と 'raise()'関数と 'SIGABRT'、' SIGFPE'、 'SIGILL'、' SIGINT'、 'SIGSEGV'と' SIGTERM '。 – caf
@caf K&Rをチェックするように私に説得してくれてありがとう。あなたは正しい。 –