web-dev-qa-db-ja.com

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

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

12
Brad Penney

短い答え:それらは異なるものです。

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

一部の割り込みはソフトウェアで発生させることができるため(ソフト割り込み)、私は通常は外部と言います

すべてのシステムコールは割り込みですか?依存する

すべてがシステムコールに割り込みますか?番号

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

OSが他のハードウェアとやり取りする場合、通常は、ハードウェアがジョブの実行後に実行および中断するタスクを設定するドライバーレイヤーを介して行われます。そのため、ドキュメントが印刷されるかページがなくなると、プリンターが中断する可能性があります。 。したがって、システムコールが割り込みの生成につながることがよくあります。

すべてのシステムコールは割り込みです-ソフト割り込みとして実装される可能性があるため、依存します。したがって、ユーザープログラムがシステムコールを行うと、ソフト割り込みが発生し、OSが呼び出しプロセスを一時停止し、要求自​​体を処理してからプロセスを再開します。しかし、そして私はウィキペディアから引用し、

「多くのRISCプロセッサでは、この(割り込み)が唯一のテクニックですが、x86などのCISCアーキテクチャは追加のテクニックをサポートしています。1つの例はSYSCALL/SYSRET、SYSENTER/SYSEXITです(2つのメカニズムはそれぞれAMDとIntelによって独立して作成されましたが、本質的に同じことを行います。これらは、割り込みのオーバーヘッドなしでシステムコールの制御をOSにすばやく転送するように設計された「高速」制御転送命令です。

22
Ali

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

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

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

それがあなたの最初の質問に対する答えです。

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

とはいえ、Intelのドキュメントでは、割り込み、システムコール、トラップ、および障害が「割り込み」としてまとめられていることがよくあります。

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

上記のすべてを同じ方法で処理するプロセッサでは、割り込み、トラップ、および障害の各タイプに固有の番号があります。プロセッサは、オペレーティングシステムがハンドラーへのポインターのベクトル(配列)をセットアップすることを期待します。さらに、オペレーティングシステムがシステムコールを実装するために使用できる1つ以上のハンドラーがあります。

使用可能なハンドラーの数に応じて、OSはシステムコールごとに個別のハンドラーを持つか、レジスター値を使用して、実行する特定のシステム関数を決定します。

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

たとえば、VAXでは

CHMK#4

命令は、4番目のカーネルモードハンドラーを呼び出します。インテルランドでは、彼らは

INT

大体同じことをする命令。

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

2
user3344003