Linuxがメモリアクセスエラーをキャッチする方法について質問があります。私が知る限り、ユーザー空間プログラムはメモリにアクセスしようとするたびにOSに要求する必要はありません。プロセスがアドレス空間にないメモリ位置にアクセスしようとすると、CPUは停止してこのイベントをOSに転送します。
だから私の質問は:CPUはこのイベントをOSにどのように通知しますか?事前定義されたコードの実行は開始されますか?もしそうなら、そのコードがメモリのどこにあるのか、そのコードセクションの名前が何であるか、何をしているのかなどを教えてください。
答え1
あなたの推測は100%フィットするようです。
というハードウェアがあります。メモリ管理装置(MMU)(CPUの一部)。どのページが何を行うか(実行可能、読み取り可能、書き込み可能)を説明するページテーブルが提供されています。プロセスが許可されていない操作を試みると、MMUはCPUを中断します。その後、CPUは特定のアドレスでコードの実行を開始する。このアドレスは次に定義されます。割り込みベクトルテーブル。各割り込みタイプの開始アドレステーブル(一部のCPUはアドレスの代わりにこのテーブルにコマンドを格納しますが、同じことを行います)