0

Linux環境を考慮して、それらの違いは何ですか?トラップハンドラ、例外ハンドラ、割り込みハンドラとシステムコールとの違いは?

方法は、システムコールは、通常の関数呼び出しと異なっているのですか?

+0

この質問をチェックアウトしましたか? http://stackoverflow.com/questions/3149175/what-is-the-difference-between-trap-and-interrupt/37558741#37558741 答えが見つかるかもしれませんか? – Jolta

+0

もう1つ、この質問に2つの質問を入れたようです。おそらくあなたはそれらを別々に掲示するべきです。 https://meta.stackexchange.com/questions/222735/can-i-ask-only-one-question-per-post – Jolta

+0

タグ[タグ:例外処理]は、一般にC++タイプの例外であり、OS "例外/トラップ/フォールト "などがあります。例外と呼ぶのが一般的です。しかし、用語はしばしば誰がCPUを設計したかによって決まります。Linux自体はコアセクションではかなりCPUにとらわれず、CPUに応じて例外を処理するためのさまざまなコアメカニズムを選択する設定がしばしばあります。例えば、mm(メモリ管理)層は、しばしば「ページフォールト」ハンドラに結びついています。フォルトは、スワップまたは非存在のメモリにアクセスすることができます(バスエラー)。 –

答えて

0

wikipediaによれば、TRAPは例外である。例外は、あなたが誰と話しているかによって異なって定義されます。一般的な形では、割り込みは例外です。例外は、ページフォールト(コードまたはデータ)、配向、未定義命令、ゼロによる除算、等であってもよい

一般に、それらはすべて非常に類似しています。彼らはOSにコンテキストを切り替えて問題を処理し、レジスタセーブ(ユーザスペースからOSコンテキストスイッチへ)と要求または状況に応じて可能なプロセスコンテキストスイッチをもたらす。 OSに移行すると、異なるMMU保護(メモリのCPUビュー)が有効になり、別のスタックが使用されます。ほとんどの場合、フォールトの原因となった命令は、スイッチが実行されたときに実行されていた命令です。

割り込みが任意のユーザ空間の命令が中断することができている点が異なっています。ほとんどの場合、障害の原因となる特定のクラスの命令しかありません。これは、物事を原子的に(スレッド、プロセス、またはシステムにグローバルに)行う必要があるコンパイラとライブラリに影響を与えます。詳細は、実際に使用しているCPUによって異なります。 Linux環境を考慮


、それらの間の違いは何ですか?

これは、明確な方法で、ほとんどunanswerableです。 Linuxのバージョン、CPUのバージョン、これらの定義が答えに影響します。しかし、私は上記のことが良い概念のガイドだと思います。システムコールは、通常の関数呼び出しと異なる方法

通常の関数呼び出しは、「カーネル空間」に遷移しません。カーネルスペースに入ると、多くのアクセス許可が変更されます。通常、これにはCPUへの物理的ハード配線があります。しかし、Linuxの 'mm'と 'io'レイヤーは全く違っていて、そうするためにはコードが必要かもしれません。また、「システムコール」が何をするかによって異なります。場合によっては、Linuxが最適化されているため、(あるバージョンから次のバージョンへの)システムコールは不要です。たとえば、vdso man pageを参照してください。他の場合には、Cライブラリまたは他のメカニズムがシステムコールを回避する可能性があります。 DNSネームキャッシングなど)

+0

質問がx86固有であることを意図していた場合、これは[トラップと割り込みの違い]の複製です(http://stackoverflow.com/questions/3149175/what-is-the-difference-between-trap- and interrupt/37558741#37558741)そうでなければ、質問は非常に似ているので、そこを見るのは良い考えです。 –

+0

ありがとうございます。これは助けになりました。 – Yggdrasil