Wikipediaの記事を読んでいます。プロセス管理。私の焦点はLinuxです。システムコール、メッセージ転送、割り込みの概念と目的の関係と違いを理解することはできません。カーネルからリソースとサービスを要求するプロセスについてですか?
記事のいくつかの引用と他のいくつか:
プログラムの実行中に、オペレーティングシステムは割り当て解除または割り当てを実行できるようにプロセッサ制御を再取得する2つの方法があります。
- プロセスはシステムコール(ソフトウェア割り込みとも呼ばれる)を発行します。たとえば、ハードディスク上のファイルにアクセスするためにI / O要求が発生します。
- たとえば、キーボードのキーを押すか、タイマーがタイムアウトした場合(プリエンプティブマルチタスクに使用される)、ハードウェア割り込みが発生します。
ユーザーモードで実行されるプログラムは、次の2つのテクニックを使用してカーネルからサービスを要求できます。
* System call * Message passing
割り込みは、注意が必要であることを示す非同期信号、または実行の変更を示すソフトウェアの同期イベントです。
ハードウェア割り込みにより、プロセッサは実行状態を保存し、割り込みハンドラの実行を開始します。ソフトウェア割り込みは通常、命令セットの命令として実装され、これにより、ハードウェア割り込みと同様の割り込みハンドラにコンテキストが切り替わります。
ベストアンサー1
すべての最新のオペレーティングシステムはマルチタスクをサポートしています。これは、システムが擬似パラレル(1つのCPUしか使用できない場合)、またはマルチコアCPU(1つのタスク/コア)で普遍的に並列化された複数のプロセスを同時に実行できることを意味します。
1つのCPUしか使用できないより簡単なケースを考えてみましょう。つまり、2つの異なるプロセス(Webブラウザと音楽プレーヤーなど)を同時に実行すると、システムは実際には2つのプロセスを同時に実行できません。何が起こっているのかは、CPUがあるプロセスから別のプロセスに移行し続けますが、これは非常に迅速に発生するため、ユーザーはこれに全く気付かないでしょう。
さて、これら2つのプロセスの実行中にリセットボタンを押したとしましょう。 CPUは実行中のタスクをすぐに停止し、システムを再起動します。おめでとうございます。割り込みが発生しました。
状況はプログラミング中であり、CPUにサービスを要求したい場合と似ています。違いは、この場合はソフトウェアコード、
fopen
つまり通常はシステムコール(ファイルを開くなど)を実行するライブラリプロシージャを実行することです。したがって、1はCPUの注意を引く2つの異なる方法を説明します。
ほとんどの最新のオペレーティングシステムは、ユーザーモードとカーネルモードの2つの実行モードをサポートしています。デフォルトでは、オペレーティングシステムはユーザーモードで実行されます。ユーザーモードは非常に限られています。たとえば、すべてのI / Oが禁止されているため、ハードディスクからファイルを開くことはできません。もちろん、ファイルを開くとオペレーティングシステムがユーザーモードからカーネルモードに透過的に移行するため、実際にはこれは発生しません。カーネルモードでは、ハードウェアを完全に制御できます。
この2つのモードがなぜ存在するのか疑問に思うなら、最も簡単な答えは保存です。 MINIX 3などのマイクロカーネルベースのオペレーティングシステムは、ほとんどのサービスがユーザーモードで実行されるため、あまり有害ではありません。モノリシックカーネル(Linuxなど)のほとんどすべてのサービスはカーネルモードで実行されます。したがって、MINIX 3のドライバの競合によりシステム全体がダウンする可能性はほとんどなく、Linuxではまれではありません。
システムコールは、ユーザーモードからカーネルモードに切り替えるために使用されるモノリシックカーネル(共有データモデル)の基本要素です。メッセージ転送は、マイクロカーネル(クライアント/サーバーモデル)で使用される基本要素です。より正確には、メッセージングシステムでは、プログラマはシステムコールを使用してCPUの注意を引くこともあります。メッセージングはオペレーティングシステム開発者にのみ表示されます。システムコールを使用するモノリシックカーネルは高速ですが、信頼性は低くなりますが、メッセージ配信を使用するマイクロカーネルは遅いですが、エラー分離は優れています。
したがって、2では、ユーザーモードからカーネルモードに切り替える2つの異なる方法について説明します。
修正するには、ソフトウェア割り込み(トラップとも呼ばれる)を生成する最も一般的な方法は、システムコールを実行することです。一方、割り込みは純粋にハードウェアによって生成されます。
ソフトウェアまたはハードウェアを介してCPUを停止した場合は、現在の状態(実行中のプロセスと停止した時点)をどこかに保存する必要があります。それ以外の場合は、プロセスを再度切り替えると復元できません。これをコンテキスト切り替えといい、これは意味があります。他のタスクを実行するには、コンピュータをシャットダウンする前に、最初に中断した部分から再起動できるように、すべてのプログラム/文書などが保存されていることを確認する必要があります。次回開いてみましょう:)
したがって、3は、トラップまたは割り込みを実行した後に実行する必要があるタスクと2つの状況がどれだけ似ているかを説明します。