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