2015-11-11 7 views
5

オペレーティングシステムでは、システムコールと割り込みの違いは何ですか?すべてのシステムコールが割り込みを受けていますか?すべての割り込みはシステムコールですか?オペレーティングシステムでは、システムコールと割り込みの違いは何ですか?

+0

最小限の割り込みの例と、いくつかのLinuxがシステムコールでそれをどのように使用しているかについては、http://stackoverflow.com/questions/1817577/what-does-int-0x80-mean-in-assembly-code/31836988#31836988 –

答えて

13

短答: これらは異なるものです。

  • システムコールは、OSで実行されるソフトウェアによって呼び出され、OSによって提供されるサービス にコールされます。
  • 割り込みが通常はソフトウェアで処理する必要のあるイベント(通常はドライバ)をCPU /マイクロプロセッサに通知する外部ハードウェアコンポーネントです。

いくつかの割り込みがソフトウェア(ソフト割り込み)によって上昇させることができるので、私は、外部通常を言う

は、すべてのシステムが割り込みを呼び出していますか?依存関係

すべてはシステムコールを中断しますか?いいえ

長い答え: OSはCPUに接続されたCPU時間と他のハードウェア(メモリ(RAM)、HDD、キーボードなど)を管理します。これは、ユーザプログラムが基盤となるハードウェアにアクセスすることを可能にするサービスを公開し、これらはシステムコールです。通常は、メモリの割り当て、ファイルの読み書き、文書の印刷などを扱います。

OSが他のハードウェアとやりとりするとき、OSは通常、ドライバ層を介して実行します。ドライバ層は、ジョブが実行されるとハードウェアが実行し割り込みを実行するように設定します。ページがなくなってしまいます。したがって、システムコールによって割り込みが発生することがよくあります。

すべてのシステムコール割り込みは、ソフト割り込みとして実装されている可能性があります。したがって、ユーザプログラムがシステムコールを行うと、ソフト割り込みが発生し、OSが呼び出しプロセスを中断し、要求自​​体を処理してプロセスを再開します。しかし、私はこの(割り込み)が提供される唯一の技術であるが、このようなx86のサポート追加の技術として CISCアーキテクチャ多くのRISCプロセッサの場合は」

、ウィキペディアからの引用。一つ の例では、SYSCALL/SYSRET、SYSENTER /ありますSYSEXIT(2つのメカニズムはそれぞれAMDとIntelが独自に作成した でしたが、本質的には と同じです)これらは、システム用のOSに迅速に制御を移すように設計された「高速」制御転送命令 です。 呼び出し割り込みのオーバヘッドなしで "

+0

ありがとうあなたの迅速な対応。したがって、割り込みはハードウェアですが、ソフトウェアのシステムコールによって引き起こされる可能性がありますか?あれは正しいですか? –

+0

"ソフトウェアのシステムコールによって引き起こされる可能性があります"ソフトウェアは割り込みの原因の1つですが、通常はすべての周辺機器がイベントを生成します。クロックティックは、ユーザ/ソフトウェアの介入を必要としないシステムクロックによって生成される割り込みです。 – Ali

+0

多くのOSクラスでは、カーネルに入るすべてのシステムコールは、「実際の」ハードウェア割り込みを模倣する古典的な「ソフトウェア割り込み」がメカニズムに含まれていなくても、「割り込み」として記述されています。また、「割り込み」という言葉は、Javaのような言語ではさらにオーバーロードされています。うれしいことは完全にクリアです:) –

1

質問に対する回答は、基礎となるハードウェア(および場合によってはオペレーティングシステムの実装)によって異なります。私は少しそれに戻ります。

割り込みハンドラとシステムコール(およびフォルトハンドラ)の目的はほぼ同じです:プロセッサをカーネルモードに切り替えると同時に、意図しないまたは悪意のあるカーネル構造へのアクセスから保護します。

割り込みは、非同期の外部イベントによってトリガされます。 コードを実行すると、システムコール(またはフォルトまたはトラップ)が同期的にトリガされます。

これは最初の質問に対する答えです。

あなたのセクションの質問に対する答えは、ハードウェアによって非同期にトリガされないため、システムコールは割り込みではないということです。プロセスは、システムコールでコードストリームを実行し続けますが、割り込みでは実行しません。

つまり、インテルのドキュメントでは、割り込み、システムコール、トラップ、フォールトが「割り込み」として頻繁に競合しています。

一部のプロセッサは、システムコールのトラップ、フォールト、割り込みをほぼ同じ方法で処理します。他の人(特にIntel)は、システムコールを実装するためのさまざまな方法を提供しています。

上記のすべてを同じように処理するプロセッサでは、割り込み、トラップ、フォルトの各タイプに固有の番号があります。プロセッサは、オペレーティングシステムがハンドラへのポインタのベクトル(配列)を設定することを期待しています。さらに、オペレーティングシステムがシステムコールを実装するための1つまたは複数のハンドラがあります。

使用可能なハンドラの数に応じて、OSはシステムコールごとに個別のハンドラを持つか、システム機能を実行する。

このようなシステムでは、システムコールを呼び出すのと同じ方法で割り込みハンドラを同期的に実行することができます。例えば

、VAX上

CHMK#4

命令は、第四カーネルモードハンドラを呼び出します。インテルランドでは、彼らはほぼ同じになる

INT

命令です。

インテルプロセッサは、システムコールを実装するさまざまな方法を提供するSYSCALLメカニズムをサポートしています。