ベストアンサー
プログラム、プロセスとスレッドは、すべてのコンピュータサイエンスエンジニアが精通している必要があるオペレーティングシステムの3つの基本概念です。 。ここでは、それぞれの概要と違いについて説明します。
プログラムとは何ですか?
プログラムは、コンピューターで特定のジョブを実行するために記述された一連の命令を含む実行可能ファイルです。たとえば、 notepad.exe は、テキストファイルの編集と印刷に役立つ一連の命令を含む実行可能ファイルです。
プログラムコンピュータのプライマリメモリには保存されません。それらは、コンピュータのディスクまたはセカンダリメモリに保存されます。それらはプライマリメモリに読み込まれ、カーネルによって実行されます。プログラムは、セカンダリメモリに存在するため、パッシブエンティティと呼ばれることもあります。
プロセスとは何ですか?
プロセスはプログラムの実行インスタンスです。たとえば、コンピュータのメモ帳アイコンをダブルクリックすると、メモ帳プログラムを実行するプロセスが開始されます。
プロセスはアクティブエンティティはプライマリメモリに存在し、システムが再起動されるとメモリを離れます。複数のプロセスが同じプログラムに関連している場合があります。たとえば、メモ帳プログラムの複数のインスタンスを実行できます。各インスタンスはプロセスと呼ばれます。
スレッドとは?
スレッドは、プロセスの最小の実行可能ユニットです。たとえば、メモ帳プログラムを実行すると、オペレーティングシステムがプロセスを作成し、そのプロセスのメインスレッドの実行を開始します。
プロセスは複数のスレッドを持つことができます。各スレッドには、プロセス内で独自のタスクと独自の実行パスがあります。たとえば、メモ帳プログラムでは、1つのスレッドがユーザー入力を受け取り、別のスレッドがドキュメントを印刷します。
同じプロセスのすべてのスレッドがそのプロセスのメモリを共有します。同じプロセスのスレッドは同じメモリを共有するため、スレッド間の通信は高速です。
まとめ…
これで、プログラム、プロセス、スレッドの違いが明確になり、それらの関係もわかりました…そうでない場合は、調べてください。以下。
プログラムはプロセスのスーパーセットですが、プロセスはスレッドのスーパーセットです。
学習をお楽しみください!!!
画像提供: www.google.com
回答
- プログラム:プログラムは、特定のジョブを実行するために必要なすべての命令のセットにすぎません。実行する前に、ローダーOSOSが理解できるバイナリコードに変換する必要があります。一般的にWindowsではPortable Executable(PE)に保存されているEXEファイルのようにハードディスクのようなセカンダリメモリでのフォーマット。プロセスは通常、実行中のプログラムのインスタンスとして定義され、2つのコンポーネントで構成されます。1)オペレーティングシステムがプロセスを管理するために使用するカーネルオブジェクト。カーネルオブジェクトは、システムがプロセスに関する統計情報を保持する場所でもあります。 2)すべての実行可能ファイルまたはDLLモジュールのコードとデータを含むアドレス空間。スレッドスタックやヒープ割り当てなどの動的メモリ割り当ても含まれます。プロセスは不活性です。プロセスが何かを実行するには、次のようなスレッドが必要です。そのコンテキストで実行されます。このスレッドは、プロセスのアドレス空間に含まれるコードの実行を担当します。実際、1つのプロセスに複数のスレッドが含まれ、それらすべてがプロセスのアドレス空間で「同時に」コードを実行する場合があります。これを行うために、各スレッドには独自のCPUレジスタセットと独自のスタックがあります。各プロセスには少なくともプロセスのアドレス空間でコードを実行する1つのスレッド。プロセスのアドレス空間にコードを実行するスレッドがない場合、プロセスが存在し続ける理由はなく、システムはプロセスとそのアドレス空間を自動的に破棄します。
- プロセス:各プロセスは、プログラムの実行に必要なリソースを提供します。プロセスには、仮想アドレススペース、実行可能コード、システムオブジェクトへのオープンハンドル、セキュリティコンテキスト、一意のプロセス識別子、環境変数、優先度クラス、最小および最大の作業セットサイズ、および少なくとも1つの実行スレッド。各プロセスは、プライマリスレッドと呼ばれることが多い単一のスレッドで開始されますが、そのスレッドのいずれかから追加のスレッドを作成できます。 。
- スレッド:スレッドは、実行をスケジュールできるプロセス内のエンティティです。 プロセスのすべてのスレッドは、その仮想アドレス空間とシステムリソースを共有します。 さらに、各スレッドは、例外ハンドラー、スケジューリングの優先順位、スレッドローカルストレージ、一意のスレッド識別子、およびスケジュールされるまでスレッドコンテキストを保存するためにシステムが使用する一連の構造を維持します。 スレッドコンテキストには、スレッドのマシンレジスタのセット、カーネルスタック、スレッド環境ブロック、およびスレッドのプロセスのアドレス空間内のユーザースタックが含まれます。 スレッドは、クライアントになりすますために使用できる独自のセキュリティコンテキストを持つこともできます。