システムコール、メッセージパッシング、割り込みの関係は何ですか?


15

プロセス管理に関するウィキペディアの記事を読んでいます。私の焦点はLinuxにあります。システムコール、メッセージパッシング、割り込みの概念と目的の関係と違いを理解することはできません。これらはすべて、リソースとサービスをカーネルに要求するプロセスのためのものですか?

この記事からの引用とその他の引用:

  1. OSが割り当て解除または割り当てを実行するために、プログラムの実行中にOSがプロセッサの制御を取り戻すには、2つの方法があります。

    1. プロセスはシステムコール(ソフトウェア割り込みとも呼ばれます)を発行します。たとえば、ハードディスク上のファイルへのアクセスを要求するI / O要求が発生します。
    2. ハードウェア割り込みが発生します。たとえば、キーボードでキーが押された、またはタイマーが切れた(プリエンプティブマルチタスクで使用)。
  2. ユーザーモードで実行しているプログラムがカーネルのサービスを要求できる方法は2つあります。

    * System call
    * Message passing
    
  3. 割り込みは、注意の必要性を示す非同期信号、または実行の変更の必要性を示すソフトウェアの同期イベントです。

    ハードウェア割り込みにより、プロセッサは実行状態を保存し、割り込みハンドラーの実行を開始します。ソフトウェア割り込みは通常、命令セット内の命令として実装され、ハードウェア割り込みと同様の割り込みハンドラーへのコンテキスト切り替えを引き起こします。


2
とても良い質問です!
ステファンギメネス

回答:


12
  1. 最新のオペレーティングシステムはすべて、マルチタスクをサポートしています。これは、システムが複数のプロセスを同時に実行できることを意味します。擬似並列(1つのCPUのみが利用可能な場合)または最近ではマルチコアCPUが並列で一般的である(1つのタスク/コア)。

    使用可能なCPUが1つだけの単純なケースを考えてみましょう。つまり、2つの異なるプロセス(Webブラウザーと音楽プレーヤーなど)を同時に実行すると、システムは実際にそれらを同時に実行することができません。起こるのは、CPUが常に1つのプロセスから別のプロセスに切り替えていることです。しかし、これは非常に高速で発生しているため、気付くことはありません。

    ここで、これら2つのプロセスの実行中に、リセットボタン(悪い子)を押したとします。CPUは実行中の処理を直ちに停止し、システムを再起動します。おめでとうございます:割り込みが発生しました。

    プログラミング中にCPUにサービスを要求する場合も同様です。違いは、この場合、ソフトウェアコードを実行することです。通常、システムコールを実行するライブラリプロシージャ(たとえばfopen、ファイルを開くため)です。

    したがって、1はCPUから注意を引く2つの異なる方法を説明しています。

  2. 最新のオペレーティングシステムのほとんどは、ユーザーモードとカーネルモードの2つの実行モードをサポートしています。デフォルトでは、オペレーティングシステムはユーザーモードで実行されます。ユーザーモードは非常に制限されています。たとえば、すべてのI / Oは禁止されています。したがって、ハードディスクからファイルを開くことはできません。もちろん、ファイルを開くとオペレーティングシステムがユーザーモードからカーネルモードに透過的に切り替わるため、これは実際には決して起こりません。カーネルモードでは、ハードウェアを完全に制御できます。

    これら2つのモードがなぜ存在するのか疑問に思っている場合、最も簡単な答えは保護です。マイクロカーネルベースのオペレーティングシステム(MINIX 3など)では、ほとんどのサービスがユーザーモードで実行されているため、有害性が低くなります。モノリシックカーネル(Linuxなど)では、ほぼすべてのサービスがカーネルモードで実行されています。したがって、MINIX 3でクラッシュするドライバーがシステム全体をダウンさせることはほとんどありませんが、これはLinuxでは珍しいことではありません。

    システムコールは、ユーザーからカーネルモードに切り替えるために、モノリシックカーネル(共有データモデル)で使用されるプリミティブです。メッセージパッシングは、マイクロカーネル(クライアント/サーバーモデル)で使用されるプリミティブです。より正確には、メッセージパッシングシステムプログラマはシステムコールを使用してCPUから注意を引きます。メッセージの受け渡しは、オペレーティングシステムの開発者にのみ表示されます。システムコールを使用するモノリシックカーネルは高速ですが、信頼性が低くなります。一方、メッセージパッシングを使用するマイクロカーネルは低速ですが、より優れた障害分離があります。

    したがって、2では、ユーザーモードからカーネルモードに切り替える2つの異なる方法に言及しています。

  3. 修正するために、ソフトウェア割り込み(トラップ)を作成する最も一般的な方法は、システムコールを実行することです。一方、割り込みは純粋にハードウェアによって生成されます。

    CPUを(ソフトウェアまたはハードウェアによって)中断する場合、現在の状態(実行するプロセスと停止した時点)をどこかに保存する必要があります。そうしないと、元に戻すときにプロセスを再開できません。 。それはコンテキストスイッチと呼ばれ、理にかなっています:コンピューターの電源を切って何か他のことを行う前に、最初にすべてのプログラム/ドキュメントなどを保存したことを確認して、停止した時点から再開できるようにする必要があります次回はオンにします:)

    したがって、3では、トラップまたは割り込みを実行した後に何を行う必要があるか、および2つのケースがどれほど似ているかを説明しています。


1
ありがとう!(1)1では、CPUから注意を引くための2つの方法は、ソフトウェア割り込み(システムコールの例が含まれるプログラム)とハードウェア割り込み(リセットキーの例)です。(2)2では、システムコールとメッセージパッシングがソフトウェア割り込みの2つの方法であることを意味しますか?(3)ソフトウェア割り込みの目的はプロセスがカーネルサービスとリソースを要求することであり、ハードウェア割り込みの目的はそうでないことは正しいですか?はいの場合、ハードウェア割り込みの目的は何ですか?
すべてのStackExchange

1
(1)正解。(2)システムコールとメッセージパッシングは、プロセス間通信を実現するために使用できる2つの異なる手法です。ただし、どちらもソフトウェアベースであるため、CPUから注意を引くために、トラップ(ソフトウェア割り込み)を実行します。(3)ある意味で、はい。カーネルサービスを要求する例はcreat、新しいファイルを作成するなどのライブラリプロシージャ(1つ以上のシステムコールに変換されます)の実行です。割り込みの例は、プリンターがCPUに信号を送信して、印刷が完了したことを通知することです。
サキスク

1
ありがとう!(3)に関して、あなたはある意味で「いいえ」という意味ですか?ハードウェア割り込みとソフトウェア割り込みの一般的な目的は何ですか?
24分すべてのStackExchange

1
システムリセットは割り込みではありません。後で再開するために状態を保存しません。
-psusi

1
@faifリセットとNMI(マスク不能割り込み)は、CPUの2つの異なるピンです。後者は、状態を保存してハンドラにジャンプすることを意味する割り込みを発生させます。前者は、電源投入時と同じようにCPUを初期化します(意図的にすべての状態を破棄します)(電源投入時にリセットが自動的にアサートされます)。割り込みの定義の一部は状態を保存することであるため、リセットはその定義を満たすことができません。
-psusi

9

システムコール、メッセージングの受け渡し(Wikipediaの記事で説明)、および割り込みはすべて、コンテキストの切り替えまたはユーザーからカーネルモードへの切り替えを引き起こすものです。ご存知のとおり:

  • カーネルモード:プログラムはメモリのフラットビューまたはリアルビューを持ち、プログラムはすべてのメモリおよびすべてのハードウェアデバイスに対して、制限なしに直接読み書きできます。

  • ユーザーモード:プログラムはメモリの仮想化されたビューを持ち、プログラムはすべてのメモリに自由に読み書きできず、ハードウェアデバイスを直接読み書きできません。メモリを追加したり、ハードウェアデバイスにアクセスするには、ユーザーモードプログラムがカーネルを呼び出す必要あります。これを行うには、システムコールとメッセージパッシングが2つの方法です。

システムコールには、特定のCPU命令または命令セットの実行が含まれます。これにより、CPUが事前定義されたアドレス(ユーザーモードに書き込み不可)にジャンプ(スタックに最初に戻りアドレスを保存)し、CPUをユーザーモードからカーネルモードに移動します(リングIntelアーキテクチャでは3から0を呼び出します)。

ハードウェア割り込みはほぼ同じことを行い、CPUを事前定義されたアドレスにジャンプ(スタックに最初に戻りアドレスを保存)し、CPUをユーザーモードからカーネルモードに移動します。そのため、多くのCPUでは、ソフトウェアによって同じメカニズムを呼び出し(「ソフトウェア割り込み」と呼ばれる)、CPU呼び出しに使用できます。

メッセージの受け渡しは、(少なくとも私にとっては)カーネルがメッセージのストリームを受信する「実行プロセス」であり、そのようなメッセージを送信するユーザーモードでアクセス可能な機能が存在することを意味します。または、「送信」関数はスタック上の値を表示するだけで、次にカーネルが制御を取得すると(プロセスがブロックまたは割り込みが発生した場合)、スタックからメッセージをポップし、それに応じて内部ルーチンにディスパッチします。

実際の「カーネル」が非常に最小で、カーネルが提供する機能のほとんどが「サーバー」プロセスに移動されるマイクロカーネルアーキテクチャでは、すべてがマルチCPUシステムで同時に実行される場合があります。単純な古いシステムコールアプローチよりも便利です。「メッセージ」を解釈して適切なカーネル「サーバー」にルーティングすることは、マイクロカーネルの数少ない仕事の1つです。


3
カーネルモードは同じページテーブルを使用し、ユーザーモードと同じ仮想メモリビューを表示します。違いは、カーネルモードに制限されているとマークされたページにアクセスできることです。
-psusi

5

メッセージの受け渡しは、あるプロセスが別のプロセスにメッセージを送信するという高レベルの概念です。システム(カーネル)呼び出しによって実装され、カーネルにメッセージを他のプロセスに渡すように要求します。システムコールは、プロセスに対してさまざまなサービスを実行するようカーネルに要求します。これらはソフトウェア割り込み/システムトラップによって実装されます。これにより、CPUはスタックに何らかの状態を保存し、後で戻ることができます。その後、カーネルモードに切り替えて、カーネルハンドラーにジャンプします。

ハードウェアとソフトウェアの両方の割り込みにより、CPUは状態を保存し、カーネルモードに切り替え、その割り込みに対して定義されたハンドラーにジャンプします。違いは、キーが押されたことを示すキーボードなど、注意が必要なときにハードウェア割り込みが外部ハードウェアによって生成されることです。キーボードハンドラーは、キーボードIOポートを読み取って、どのキーが押されたかを確認し、適切なアクションを実行して、中断されたプログラムに戻ることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.