プロセスとスレッド間の#Linuxの#-process通信#

プロセスの概念

プロセスは、オペレーティングシステムの観点から、我々はプログラムを実行するたびに、オペレーティングシステムの概念であり、リソースの割り当てと割り当て解除に伴い、このプロセスでは、プロセスを作成します。これは、プログラムの実行の過程とみなすことができます。

プロセス(プロセス)は、システムの活動に関するデータの集合で実行するコンピュータプログラムは、リソース割り当ておよびスケジューリングの基本単位であるオペレーティング・システム・インフラ。設計プロセスの初期段階のためのコンピュータ・アーキテクチャでは、基本的なプロセスは、プログラムの実体の実行で、スレッドのための現代のコンピュータアーキテクチャの設計では、スレッドが処理容器です。プログラム命令、データの編成であり、プロセスのその説明は固体プログラムです。

プロセスの2つの主要な概念があります。

  • まず、プロセスが実体です。各プロセスには、通常の状況下で、それ自体のアドレス空間を持つテキスト領域(文字領域)、データ領域(データ領域)とスタック(スタック領域)。コードは、プロセッサ記憶されたテキスト領域で実行され、実行プロセス変数の間に使用される、動的に割り当てられたメモリ領域のデータを格納する、スタック領域を格納する命令と呼び出し手順活動のローカル変数。
  • 第二に、このプロセスは「実行手順」です。プログラムが死んエンティティだけで処理我々は呼んで、生命のプログラムに接続されたデバイスが、それがアクティブなエンティティになることができます(オペレーティングシステムの実行)プロセスを。 

オペレーティング・システム・プロセスは、基本的で重要な概念です。システムがマルチチャネル・プログラムされた後、各チャンネルのプログラム導入内概念システム活動パターンを記述し、現れた内部システムのダイナミクスを特徴付けるために表示され、すべてのマルチプログラミングオペレーティングシステムは、プロセスに基づいています。

プロセスのステータス:

実装のプロセスの間に断続的には、プロセスが複数の状態を有することが決定します。実際には、実行中のプロセスは、以下の3つの基本状態を持つことができます。

  • 1)準備状態(レディ):プロセスは、プロセッサに加えて、要求されたリソースプロセッサリソースの割り当てを待って、;限りプロセッサ割り当て処理を実行することができるように。レディプロセスはより押すことができ、優先度を分割するキューを例えば、タイムスライスは、プロセスが入るので、期限切れになったときにレディ状態をローに放電した場合、優先度キュー、によって処理するときI / O動作が中に完了する準備状態、優先度の高いキューに排出します。
  • 2)動作状態(実行):プロセスは、プロセッサ・リソースを使用し、この状態で、プロセスの数がより少ないまたはプロセッサの数と同じです。他のプロセスは、(すべてのプロセスがされているように実行することができないときに状態をブロック)、通常は自動的にシステムのアイドル処理を実行します。
  • 3)状態ブロッキングブロックされたが):プロセスは、I / O動作として、またはいくつかの条件(待っているように、プロセスの同期)の条件が満たされるまで、続行することはできません。でも、このイベントの前にプロセスにプロセッサリソースを割り当てるために発生し、実行することはできません。

プロセスの概念

スレッド(英語:スレッド)は、オペレーティング・システム操作が可能なスケジューリングの最小単位。それに含まれるのプロセスであり、それは処理ユニットの実際の動作を制御します。スレッドが参照するプロセス制御の単一の一連の流れにおいて、プロセスの複数のスレッドが同時に、並行して各スレッドは、異なるタスクを実行します。UnixのシステムVとでのSunOSまた、軽量プロセス(軽量プロセス)と呼ばれているが、より軽量プロセスは、スレッドと呼ばれるユーザスレッド(ユーザスレッド)が、カーネルスレッド(カーネルスレッド)を指します。

スレッドは、スケジューリングと独立の派遣の基本単位です。カーネルスレッドのようなカーネルスレッド、スケジュールすることができ、オペレーティング・システム用のWin32スレッドを、自発的になどのユーザー・プロセスのスケジューリングユーザスレッドによるのLinuxプラットフォームで、POSIX  スレッド、またはによって、カーネルなど、ユーザーのプロセス、Windows 7の糸、混合スケジューリング。

同じプロセスの複数のスレッドが、仮想アドレス空間として、プロセスのすべてのシステム・リソースを共有するファイル記述子、及び信号処理ように、そして。しかし、同じプロセスで複数のスレッドが、自身の持っているコールスタック(コールスタック)を、ご使用の環境(レジスタコンテキスト)、自身のスレッドローカルストレージ(スレッドローカルストレージ)を登録。

プロセスのメインコンセプト5つのポイントがあります。

1)ライトエンティティ:スレッドは、企業が所有していない基本的にシステムリソース、独立して確保するために、ほんの少しの不可欠の操作リソースを。プログラム、データおよびTCBを含むスレッドの実体、。スレッドは、スレッド制御ブロックTCBの動特性によって説明される動的な概念、(制御ブロックスレッド)です。TCBは、次の情報が含まれます。

  • (1)スレッドの状態。
  • スレッドが実行されていない場合は(2)、それがオンサイトのリソースを格納しています。
  • (3)実行スタックのグループ。
  • 各スレッドのメインメモリの(4)ローカル変数記憶領域。
  • (5)メインメモリおよび他のリソースの同じプロセスにアクセスします。

実行すべき命令のシーケンスを示すために使用されるプログラム・カウンタを保持するために、ローカル変数を、状態パラメータと少数のリターン・アドレスのセットのようなレジスタスタック

2)基本的なスケジューリング単位と独立のディスパッチは:マルチスレッドOSに、スレッドが独立して実行する、基本的な単位のスケジューリングとディスパッチとは無関係である基本ユニットを、。スレッドは、「光」であるように、迅速かつ非常に少ないオーバーヘッド(同じでスレッドを切り替えるプロセスの)。

3)同時に実行することができる:プロセスの複数のスレッドが同時に実行し、さらにすべてのスレッドが一つのプロセスで同時に実行することができる可能にする間、同様に、プロセス内の異なるスレッドが同時に実行することができ、完全な利用をプロセッサ並列能力で動作し、周辺機器。

4)共有のプロセスと同じで:資源プロセスのすべてのスレッドが同じ持っている:各スレッドは、最初に現れプロセスが所有するリソース共有できるアドレス空間をプロセスのアドレス空間()、あなたがスレッドできることを意味しますアドレス空間にアクセスするには、各仮想アドレス;あなたは、プロセスへのアクセスも持つことができます開くファイルを、タイマー、セマフォの機関。同じので、プロセス内のスレッドの共有メモリファイルは、それがお互いのスレッドと通信する必要はありません呼び出すカーネルを

スレッドの状態:

ライフサイクルのスレッドは、5つの状態に分けることができます。

1.  新しい状態(新規)         :スレッドオブジェクトが作成されたら、新しい状態に入りました。たとえば、スレッドのスレッドが新しいスレッドを=() 。
2.  レディ状態(Runnableを):としても知られている「実行可能状態。」スレッドオブジェクトを作成した後、他のスレッドは、スレッドを開始するように、オブジェクトのstart()メソッドを呼び出します。例えば、thread.start()。いつでも即応の状態をスレッドはCPUスケジューリングによって実行することができます。
3.  Run状態は(実行)  :CPUスレッドを実行するための許可を得ること。なお、スレッドが実行されているだけの状態に準備完了状態から入力することができます。
4.  (ブロック)ブロックされた   :スレッドが使用CPUへの権利を放棄するためにいくつかの理由でブロックされて一時的に実行を停止します。レディ状態にスレッド、ランニング行く機会まで。三つのカテゴリーの閉塞の場合:

  •     (01)ブロックを待つ - ジョブの完了を待つスレッド待ち()メソッドは、スレッドを呼び出すことによって。
  •     (02)同期ブロック - (ロックが別のスレッドによって占領されたため)スレッドは、同期ロックの失敗を同期します、それは同期ブロッキング状態になります。
  •     (03)その他の障害物 - スリープから()、または呼び出し元のスレッドを()に参加またはブロックされた状態にするI / O要求、スレッドを発行します。睡眠()タイムアウトは、参加()またはスレッドのタイムアウト待ちが終了するため、またはI / O処理は、準備完了状態にスレッドが再び完了しています。

5.  死状態(デッド)     :スレッドの実行がrun()メソッド、ライフサイクルの糸端を介して、または異常終了によるものです。

プロセス間通信の概念

プロセスは、エンティティです。各プロセスは、独自のアドレス空間を持ちます。したがって、ユーザ空間プロセスは、一般的にお互いにアクセスすることができない、互いに独立しています。しかし、多くの場合、システムの機能を達成するために、相互にプロセス間通信を必要としました。カーネルと他のプロセスとの間の通信を介して相互にその動作を調整するプロセス。

プロセス間通信は、プロセス間のデータの送信(情報のやり取り)を指します。どのくらいの通信処理の低レベル通信および高度な通信に分割情報の交換のレベル及び効率に応じ。

  • 下位通信:のみ透過状態と整数値、主に同期のために使用される、プロセスは終了との間の相互排除は、制御情報のようなハングアップに渡されます。一般的な低レベルのプロセス間通信:セマフォ(semophore)、信号(sinal)。
  • 高度な通信:信号通信、データ転送、大量の効率を改善する、主にプロセスブロック間のデータ交換及び共有のため、プログラミングの複雑さを低減します。高いコモン・プロセス間通信:パイプ(管)、名前付きパイプ(名前付きパイプ)、共有メモリ(共有メモリ)、ソケット(ソケット)

プロセス通信シナリオ

  • データ転送:プロセスが他のプロセスに数メガバイトにバイト単位で送信されるデータの量を、そのデータを送信する必要があります。
  • 共有データ:複数のプロセスが動作データ、共有データへのプロセス変更を共有したい、他のプロセスがすぐに見られるべきです。
  • 通知イベント:別のプロセスまたはプロセスのグループにメッセージを送信する必要がある(例えば、親プロセスの終了を通知するときのように)それ(それら)いくつかのイベントが発生を通知します。
  • リソースの共有:複数のプロセス間で同じリソースを共有します。これを行うために、我々は、カーネルのロックと同期メカニズムを提供する必要があります。
  • プロセス制御:いくつかの完全に(例えばデバッグプロセスなど)別のプロセスの実行のプロセスを制御したい、と制御は、すべての希望別のプロセスにインターセプトし、例外のことができるように、そしてタイムリーにその状況に変化を知ることができるようにするために処理します。

 

双方向通信プロセス

 

パイプ(パイプ):

パイプラインは、3種類が含まれています。

  • 匿名パイプPIPE:カーネルに保存されている、唯一の親と子または兄弟プロセス間で使用することができます。
  • 標準的な流れの導管のための:匿名パイプパイプパッケージのシリーズ。ファイルストリームを返します。
  • FIFO名前付きパイプ:ファイルシステムに格納されているファイルの特殊なタイプは、多くのプロセス間で通信することができますが関連していません。

 

セマフォ(semophore):

セマフォは、複数のプロセスが共有リソースへのアクセスを制御するために使用することができ、カウンタです。それは、多くの場合、共有リソースへのアクセスを防止するためのロック機構として使用される他のプロセスは、リソースにアクセスすることができ、プロセスです。同じプロセス内の異なるスレッド間のプロセス間の同期手段、並びにそのため、メイン。

 

メッセージキュー(メッセージキュー):

メッセージキューは、カーネルに格納されたメッセージキュー識別子によって、メッセージのリンクリストです。シグナリングメッセージは、搬送パイプ無地バイトストリームバッファサイズが制限され、より少ない情報を克服し、そして他の欠点キュー。

 

信号(sinal):

信号は受信処理を通知するために使用されるイベントが発生した、通信のより洗練された手段です。

 

共有メモリ(共有メモリ):

共有メモリは、メモリマップされたいくつかのプロセスによって作成されたこの共有メモリは、他のプロセスがアクセスすることができるが、複数のプロセスによってアクセス可能です。IPC共有メモリは、それが具体的に設計された低効率を実行している他のプロセス間通信のためのものである、最速の方法です。これは、多くの場合、プロセス間の同期通信を達成するために組み合わせて使用​​される他の通信機構、例えば2つの信号、に関連しています。

 

ソケット(ソケット):

溶液スリーブポートは、種々の他の通信機構と、プロセス間通信機構であり、それは、異なるマシン上のプロセス間の通信のために使用することができることです。

 

IPC・オペレーティング・システム関連のコマンド

 

  • IPCS:ビューIPC情報
  • IPCS -q:メッセージキューを見ます
  • IPCS -m:ビューの共有メモリ
  • IPCS -s:ビューセマフォ
  • ipcrm:削除IPC
  • ipcrm -q msqid指定したメッセージキューを削除
  • ipcrm -m msqid指定された共有メモリを削除
  • セマフォのipcrm -s msqid指定を削除
公開された170元の記事 ウォンの賞賛207 ビュー459万+

おすすめ

転載: blog.csdn.net/xiaoting451292510/article/details/103729312