C では、自分のものではないメモリに書き込もうとすると、セグメンテーション違反が発生する可能性があります。(技術的には、自分のものではないメモリに書き込もうとしたときの動作は定義されていませんが、OS がそのような状況を処理できる方法の 1 つは、segfault をスローすることです)。不正なメモリ アクセスを試みるユーザー空間コードの場合、カーネルが不正なメモリ アクセスを検出し、segfault をスローします。
現在、Linux カーネル モジュールを作成しています。私のコードはカーネル空間で実行されます。関連する質問が 2 つあります。
配列の境界を超えると、コードでセグメンテーション違反が発生します。このセグメンテーション違反を検出しているものを知りたいですか? ユーザー空間アプリケーションの場合、カーネルはセグメンテーション違反を検出します。カーネルコード自体はどうですか? カーネルコードで範囲外のメモリアクセスを検出するのは何ですか?
私が書いたカーネル モジュールと insmod は別のプロセスとして実行されますか? はいの場合、モジュールのセグメンテーション違反時にカーネル全体でセグメンテーション違反が発生するのはなぜですか? 私のモジュールだけが segfault せず、残りのカーネルは実行し続けるのはなぜですか?
このチュートリアルのセクション 3.1.5 を読んでいます: http://www.tldp.org/LDP/lkmpg/2.6/html/lkmpg.html