まず、スレッドとプロセス
スレッドとプロセスの基本的な考え方
プロセスがリソース割り当て、オペレーティングシステムの保護の基本単位であり、オペレーティング・システムは、基本ユニットとしてのプロセスにリソースを割り当てます。スレッドは、実行の一連の流れを表すプロセスの不可欠な部分です。
2.スレッドとプロセスとの間の差
- プロセス・オペレーティング・システムは、リソース割り当ての基本単位であり、スレッドはタスクのスケジューリングおよび実行の基本単位です。
- オペレーティング・システムは、複数のプロセスを実行することができるプロセスは、複数のスレッドを実行することができます。
- プロセスコスト、小ねじオーバーヘッド:各プロセスの切り替えは、独自のコードとデータ領域を持ち、プロセスはより大きなオーバーヘッドを有することになる、軽量プロセスは、スレッドがコードやデータ空間の同じセットを共有するようスレッドを見ることができます各スレッドは、独自の独立したスタックを有しており、プログラムカウンタ、小さなスレッド間の切り替えのオーバーヘッドを実行します。
- 独立したリソース割り当てプロセス、スレッドグループの共有リソース:システムは、実行時に各プロセスの異なるメモリ空間を割り当てます。そのような仮想アドレス空間、などのスレッド共有システムリソース、ファイル記述子、および信号処理などは、自分の持っているコールスタックを、環境、スレッドローカルストレージを登録します。
- プロセスは、容器のスレッドである:プロセス内の複数のスレッドが存在する場合、完了するために一緒にマルチスレッド実行です。スレッドは、プロセスの一部であるため、スレッドはまた、軽量プロセスまたはLWPとして知られています。
第二に、スレッド間通信
- 未知パイプPIPE:パイプは半二重通信モードは、データが一方向にしか流れているが、唯一の間の遺伝的関係を有するプロセスで使用することができます。親族プロセスは通常、親子関係のプロセスを指し;
- 名前付きパイプFIFO:名前付きパイプは、半二重通信であるが、親族のプロセス間で通信を可能にしません。
- メッセージキューのメッセージキュー:メッセージキューは、カーネル識別子によってメッセージキューに格納されているリンクリストのメッセージです。シグナリングメッセージキューは、より少ない情報しか搬送パイプ無地バイトストリーム及びその他の欠点限られたバッファサイズを克服します。
- 共有ストレージの共有メモリ:共有メモリのメモリは、プロセスによって作成されたこの共有メモリを他のプロセスがアクセスすることができる期間をマッピングしているが、複数のプロセスによってアクセスすることができます。IPC共有メモリは、それが具体的に設計された低効率を実行している他のプロセス間通信のためのものである、最速の方法です。これは、多くの場合、プロセス間の同期通信を達成するために、組み合わせて使用されるこのようなセマフォなどの他の通信機構、関連付けられています。
- セマフォをセマフォ:セマフォはカウンタであり、複数のプロセスが共有リソースへのアクセスを制御するために使用することができます。それは、多くの場合、共有リソースへのアクセスを防止するためのロック機構として使用される他のプロセスは、リソースにアクセスすることができ、プロセスです。したがって、メインならびにプロセス間の同期は、同じプロセス内の異なるスレッド間意味します。
- ソケットソケット:ソリューションは、様々な他の通信機構と、ポートは、プロセス間通信機構であるスリーブは、異なるプロセス間の通信のために使用することができることです。
- 信号Sinal:信号が受信処理を通知するために使用されるイベントが発生した、通信のより洗練された手段です。
第三に、スレッドのデッドロック
1.基本概念デッドロック
デッドロックは、外部の力なしで、彼らはそれを促進することができなくなり、によるリソースの競合または起因互いに通信引き起こされるブロッキング現象を、実装プロセス内の2つの以上のプロセスを指します。この時点で、システムがデッドロック状態やデッドロックと呼ばれる別のプロセスを待っているの過程で常にデッドロックを生成するためのシステムであると言います。
2.デッドロック発生条件
- 相互に排他的な条件は:一度に一つのプロセスによって占有される資源を排他的に使用されるリソース割り当てのプロセスを指します。この時点で、要求を処理するために他のリソースがある場合は、要求者にのみリリースのプロセスが完了したとのリソースのシェアまで待つことができます。
- 要求と条件を維持:プロセスは、少なくとも1つのリソースを維持していることが、新しいリソース要求を提案し、リソースが今回要求プロセスがブロックされ、他のプロセスによって占められ、彼らはホールドを保つために利用可能な他のリソースのためされています。
- ない剥奪:リソースを使い切ったときに、唯一の自分のことで解除することができ拒否することができない、使用されていない前に得られているプロセスを指します。
- ループ待機条件は:デッドロックが発生し、必要な処理があるいう - リソースのP1を占めて待機しているリソースの無端チェーン、P0の、すなわち、プロセス集合{P0、P1、P2、···、Pnを}; P1 P2は......、PnはP0によって占有されたリソースを待っている、占有リソースを待っています。
3.デッドロックの原因
- プロセスがデッドロックによって引き起こされるリソースの競合:ときに複数のプロセスのためのリソース共有システム、など、プロセスの数は、プリンタのさまざまなニーズを満たすには不十分である、などパブリックキュー、そのようなプロセスは、資源やデッドロックの競合を引き起こします。
- 不正なプロセスを促進するため:動作中のプロセス、要求し、適切なリソースの解放を注文するには、また、デッドロックにつながります。例えば、同時プロセスのP1、P2は、それぞれ、リソースR1、R2、およびアプリケーションプロセスP1リソースR2、プロセスP2必要なリソースがブロックされているため占有されどちらもリソースR1、申請維持します。
4.予防デッドロック
デッドロックの発生を防ぐのに効果的なのために必要な4つの条件の一つを解除するには、
- 相互に排他的な条件を破る:仮想リソースへの排他的資源の転換は、資源のほとんどが改革することができませんでした。
- ブレーク条件をつかむない:プロセスの排他的資源の所持してから排他的資源の申請を満たすことができない場合は、元のリソースの所有権を終了します。
- 休憩や適格性基準の所持:事前に割り当てられたリソースの戦略の使用、すなわち占有し、アプリケーションしないように、実行を満たすために、または待つためにプロセスを実行する前に、すべてのリソースを適用します。
- 悪循環を断ち切るための条件を待ち:すべてのデバイスの分類番号を達成するための資源戦略の秩序分布を達成するために、すべてのプロセスは、アプリケーションのリソースの番号の形式を増やすことで使用することができます。