[解決済み] トラップハンドラとは具体的にどのようなものですか?
2022-03-03 16:30:29
質問
私の知る限り、トラップとは特殊な事象が発生したときに発生するものです。 システムコールが発生した場合、プログラムはトラップ命令を実行し、カーネルモードにジャンプします。その後、トラップハンドラから目的のハンドラ(fork、exec、openなど)にジャンプします。
fork, exec, openなどの実行が終了すると、OSはreturn-from-trap命令を呼び出し、プログラムをユーザモードに戻させる。
しかし、トラップハンドラとは一体何なのでしょうか?(また、よろしければ、トラップテーブルとは何でしょうか?)
どのように解決するのか?
トラップハンドラは、トラップがトリガーされたときに実行されるコードです。この例では、OSがハンドラをインストールし(つまり、トラップが発生したときに実行するコードのメモリアドレスをCPUに伝え)、そのハンドラがシステムコールを実行します。それは NOT カーネルモードへジャンプするプログラム。プログラムは、トラップをトリガーした直後に中断されます。トラップハンドラで実行が再開されます。
このように、保護モードで動作するプログラム、特権モードで動作するOS、現在実行中のコードが保護モードを抜け出せないようにするCPU/ハードウェアの3層が、互いに制御を受け渡すことができます。
また、a) 最新のCPUにはシステムコール専用の命令があり、トラップよりも効率的なメカニズムですが、概念的には同じ働きをすること、b) 異なる目的で使われるトラップ/割り込みが他にもあることに注意してください。
関連
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン