1 の概念スレッド
のスレッドでLinuxの、とも呼ばれる軽量プロセス(軽量プロセス)、自然の中でプロセスを。
初期のLinuxは、スレッドがプロセスによって達成され、どのスレッドではありません。コアスレッドは、プロセスは、cloneメソッドシステムを呼び出しています。
スレッドとプロセスとの間の差は、:(説明:PCB、すなわちプロセス制御ブロック)
プロセスは、PCB、別個のアドレス空間を有しています。オペレーティングシステムは、リソース割り当ての最小単位です。(単独のアドレス空間)
スレッドもPCBを持っていますが、全く別々のアドレス空間は、同じアドレス空間を共有していないがあります。オペレーティングシステムは、実行の最小単位です。(共有アドレススペース)
:Linuxカーネルのスレッド実装の原則は、
クローン1)軽量プロセスが、また、PCB、スレッドとプロセスを作成するために使用される基本的な方法と同じです。
2)スレッドがそれぞれのPCBを有するが、それぞれのメモリリソースPCB 3ページテーブルの点は同一です。だから、アドレス空間、すなわち共有アドレススペース、同じです。
3)スレッドとスタックレジスタのコレクションとして。
三ページテーブルマッピング:プロセスPCB - >ページディレクトリ(アレイ、PCB内の最初のアドレスとして見ることができる) - >ページテーブル(アレイ要素と見なすことができる) - >物理ページテーブル- >メモリユニット
リソースを共有するスレッド:
ファイル記述子、信号処理、現在の作業ディレクトリは、ユーザIDとグループID、メモリアドレス空間(の.text / .DATA / .bssの/ヒープ /ので)
非共有リソーススレッド:
スレッドID、およびカーネルスタックポインタフィールドプロセッサユーザスタック空間、errnoを可変信号のマスク文字、スレッドのスケジューリング優先順位、スレッドのスケジューリングポリシー
2 。pthreadのスレッド関数
がpthread_t pthread_self(無効); //はGETPID()関数の処理と同様のスレッドIDを取得。
pthread_create(がpthread_t * TID、のpthread_attr_t * attrの、void *型(ラン)(void *型)、void *型のarg); // フォーク()関数の処理と同様のスレッドを作成します。
attrのパラメータ//スレッド属性、コールpthread_attr_init()関数初期化し、次にプロパティを設定し、最後のコールは、pthread_attr_destroyは()破壊しました。
//実行パラメータは、ボイド*ラン(ボイド*){の形で、関数ポインタであり 、} 、糸端を実行する機能であるスレッドの実行サイクルライフサイクルの両方でスレッド作成成功コールバック関数、後。
引数パラメータ// run関数のパラメータ。
pthread_exit(); //出口()関数の処理と同様のスレッドを終了します。
注1:いずれかのスレッドコール出口()関数は、処理が終了すると、出口にすべてのスレッドを引き起こします。だから、pthread_exit()関数を呼び出す必要があるスレッドを終了します。
注2:復帰後のメインスレッドのリターンは、すべての子スレッドが終了しますその時点でプロセスから撤退しました。
pthread_joinを(); //メインスレッドを終了するには、子スレッドを待ってブロックされ、子スレッドの終了ステータスを取得しています。待機()関数での処理と同様に
pthread_detachの(); //スレッドがPCBリリースの自動リカバリの実施後と言うことです状態から分離されているスレッドを含むすべてのリソース、。
;のpthread_cancel()に
は、pthread_equal();
3 。
4。