[001 オペレーティングシステム] スレッドとプロセスとは何ですか? スレッドプロセスの違いは何ですか?

1. スレッドとプロセスとは何ですか?

プロセス: プロセスはリソース割り当ての基本単位であり、実行中のプログラムのインスタンスであり、プログラムの実行中に作成されます。

Linux 環境では、各プロセスが独自の独立した 4G アドレス空間を持ち、各プロセスが互いに干渉することはありません。さまざまなプロセスは、ページ テーブル マッピングを通じて物理メモリ上の独立した記憶領域にマッピングされ、オペレーティング システムのスケジューリングに従って、相互に干渉することなく、影響を与えることなく、またそれぞれのプロセスを認識することなく、順番に CPU を占有して実行されます。他の。各プロセスにとって CPU はその世界のすべてであり、スリープ状態を保ちますが、動作を再開すると、何事もなかったかのように目を覚まし、CPU 全体を所有し、占有していると考えます。

例えば:

オペレーティング システムの場合、タスクはプロセス(プロセス) です。たとえば、ブラウザを開くとブラウザ プロセスが開始され、メモ帳を開くとメモ帳プロセスが開始され、2 つのメモ帳を開くと 2 つのメモ帳が開始されます。このプロセスでは、Word を開くと、ワードプロセス。

スレッド: スレッドはプログラム実行の最小単位であり、プロセスの実行フローであり、プロセスは複数のスレッドで構成されます。

プロセスには複数のスレッドが存在する場合があり、各スレッドは共有リースの各テナントに似ています。同じプロセス内の複数のスレッドは、コード セグメント、データ セグメント、オープン ファイルなどのリソースを共有できますが、各スレッドにはそれぞれレジスタとスタックの独立したセット。これにより、スレッドの制御フローが比較的独立していることが保証されます。スレッドでは、ロックとロック解除のさまざまな同期メカニズムを使用して、ミューテックス、条件変数、読み取り/書き込みロックなどの共有リソースにアクセスする複数のスレッド間の競合を防ぐこともできます。

例えば:

Word のように、入力、スペル チェック、印刷などを同時に実行できるプロセスもあります。プロセス内で複数のことを同時に実行したい場合は、複数の「サブタスク」を同時に実行する必要があり、これをプロセスのスレッド(スレッド)で「サブタスク」と呼びます。

個人的な理解:

プログラムが実行されると、オペレーティング システムはそのプロセスを作成し、そのプロセスに一定量の物理メモリを割り当てます。MMU はこのメモリを仮想アドレス空間にマップします。つまり、小さな物理メモリを 0- 4G 仮想アドレス空間。0~3G はユーザー空間 (プライベートプロセス) に属し、最上位の 1G はカーネル空間 (プロセス間で共有) に属します。各プロセスは仮想メモリ空​​間を 4 つのセグメントに分割し、コードセグメント、データセグメント、bss セグメント、ヒープ領域、スタック領域はすべてプロセスのユーザー空間に属します。

オペレーティング システムは複数のプログラムを同時に実行でき、各プログラムはプロセスに対応します。異なるプロセスが CPU を「交互に占有」します。これは実際には、プロセス内の異なるスレッドが交互に CPU を占有していることを意味します。プロセスが CPU 上で実行されるようにスケジュールされると、オペレーティング システムは CPU のタイム スライスをプロセス内のスレッドに割り当て、一定期間実行させます。プロセス内に複数のスレッドがある場合、オペレーティング システムは、スケジューリング アルゴリズムに従ってタイム スライスを異なるスレッドに順番に割り当て、複数のスレッドの同時実行を実現します。

小さな物理空間は 4G 仮想アドレス空間にどのようにマッピングされるのでしょうか?

次の図は、仮想メモリ空​​間と物理メモリ空間の間のマッピング関係を示しています。これらは、ページ マッピング テーブル (ページ テーブル)によって関連付けられており、仮想メモリ空​​間内の色付き部分は、物理メモリ空間内の対応する色付き部分にマッピングされます。記憶空間。仮想メモリ空​​間の灰色の部分は、物理メモリ空間に対応する部分がないこと、つまり、灰色の部分が物理メモリ空間にマッピングされていないことを示します。これは、 「オンデマンド マッピング」という指導的なイデオロギーにも基づいています。仮想メモリ空​​間は非常に大きく、その多くの部分はプログラムの実行中にアクセスする必要がないため、これらの部分をマップする必要はありません。仮想メモリ空​​間を物理メモリ空間に変換します。

 プロセスの仮想メモリ、物理メモリ、共有メモリの詳しい解説_プロセスメモリ_zimuyaのブログ - CSDNブログ

仮想アドレスと物理アドレスのマッピング関係_仮想アドレスから物理アドレスへのマッピング_qq_cccのブログ - CSDNブログ


次に、スレッドとプロセスの違いは何でしょうか?

  1. 基本単位とは:プロセスはリソース割り当ての基本単位、スレッドはプログラム実行の基本単位であり、両方とも同時に実行できます。
  2. 独立したアドレス空間を持つかどうか:プロセスには独自のアドレス空間があり、プロセスが開始されるたびにシステムがそのプロセスにアドレス空間を割り当てます。スレッドは CPU リソースの割り当てとは関係がなく、複数のスレッドがリソースを共有します。同じプロセスと同じアドレス空間を使用します。
  3. 構成と所属:スレッドは 1 つのプロセスにのみ属することができ、スレッドはプロセスの存在に依存します。また、プロセスには複数のスレッドを含めることができますが、少なくとも 1 つのスレッドを含めることができます。
  4. 切り替えのオーバーヘッド:プロセス切り替えのオーバーヘッドも、スレッド切り替えのオーバーヘッドよりもはるかに大きくなります
  5. 注: マルチスレッド プログラムの 1 つのスレッドが終了すると、プロセス全体も終了します。プロセスには独自の独立したアドレス空間があるため、1 つのプロセスが終了しても他のプロセスには影響しません。

プロセスが作成またはキャンセルされると、システムはそのプロセスにメモリ空間や I/O デバイスなどのリソースを割り当てたり再利用したりする必要があるためです。したがって、オペレーティング システムが支払うオーバーヘッドは、スレッドの作成または破棄時のオーバーヘッドよりも大幅に大きくなります。同様に、プロセスの切り替え中には、現在のプロセス全体の CPU 環境の保存と、新しくスケジュールされた実行プロセスの CPU 環境の設定が含まれます。ただし、スレッド切り替えでは少数のレジスタの内容を保存して設定するだけでよく、メモリ管理操作は必要ありません。


3. マルチプロセスとマルチスレッドをいつ使用するか?

  1. リソースの管理と保護の要件が高く、オーバーヘッドと効率が制限されない場合は、マルチプロセスが使用されます。
  2. 高効率が必要な場合、頻繁に切り替える場合、リソースの保護と管理の要件がそれほど高くない場合は、マルチスレッドが使用されます。


4、オペレーティング システムの 4 つの特徴は?

1. 同時実行性

2. 共有

3. 仮想

4. 非同期

その中で、同時実行性と共有は2 つの最も基本的な機能であり、この 2 つは相互に存在するための条件です。


5. 参考内容

1. プロセススレッド (1) - 基礎知識、プロセスとは何ですか? スレッドとは何ですか? Pocket-CSDN ブログの _Process Thread_Init のブログ

2. 最後に誰かがプロセスとスレッドを明確に説明しました - Zhihu

3. プロセスとスレッドの概念と違い、プロセスとスレッド間の通信 - Tencent Cloud Developer Community - Tencent Cloud

おすすめ

転載: blog.csdn.net/qq_41709234/article/details/131865821