1. ホーム
  2. operating-system

[解決済み] トラップハンドラとは具体的にどのようなものですか?

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) 異なる目的で使われるトラップ/割り込みが他にもあることに注意してください。