Windows system >> Windowsの知識 >  >> Linuxシステムチュートリアル >> Linuxチュートリアル >> スレッドのプロセス古典Linuxの記事

スレッドのプロセス古典Linuxの記事

  
 

プロセスはコンピュータ上のプログラムの実行アクティビティです。プログラムを実行すると、プロセスが始まります。明らかに、プログラムが死んで(静的)で、プロセスが生きている(動的)です。プロセスは、システムプロセスとユーザープロセスに分けられます。様々な

プロセスの機能は、状態自体のオペレーティングシステムで実行されているシステムプロセスです
オペレーティングシステムを完了するために使用される方は、ユーザー・プロセスは、すべてのプロセスがあなたによって開始ということです。プロセスとは、オペレーティングシステムがリソースを割り当てる単位です。

のWindows
において、プロセスは、つまり、小さな単位の数は、次のプロセスから独立して動作することができるがあり、スレッドとして洗練されてきました。教科書によると、スレッドやプロセス



のLinux関連の記事の下に

プロセスとスレッドをたくさん読んで、私はこれが最も古典的

Aの基本がいると言うことができると思います定義は、プロセスは、リソース管理の最小単位であり、スレッドは、プログラム実行の最小単位です。オペレーティングシステムの設計、プロセスからのスレッドの進化、主な目的は、SMPをよりよくサポートし、(プロセス/スレッド)コンテキスト切り替えのオーバーヘッドを減らすことです。

どんなにCPUに割り当てられた少なくとも1つの実行スレッド、その指示通り(など、CPU、メモリ、ファイル、など)のリソースを管理するプロセス、およびスレッドを必要とするプロセスに従い、ポイントシステムの種類実行。この時点でプロセスがSMPマシン上で実行されている場合は、複数のCPUを使用して各スレッドを同時に実行し、最大の並列処理を実現して効率を向上させることができます。マシン上では、マルチスレッドモデルを使用してプログラムを設計し、シングルプロセスモデルの代わりにマルチプロセスモデルを使用するのと同様に、設計がより簡潔になり、機能が完成し、プログラムの実行効率が向上します。このとき、マルチスレッドモデルによって実現される機能は、実際にはマルチプロセスモデルによって実現されることができ、後者と比較すると、スレッド切り替えのオーバーヘッドはプロセスよりもはるかに少なく、意味的にはレスポンスは同時以上です。そのような関数を入力すると、実際にはcpu以外のすべてのリソースが共有されます。それぞれ二つのスレッドモデルの

意義、コアレベルのスレッドとユーザレベルスレッド2つのスレッドモデルを開発し、分類基準は、スレッドスケジューラであるか、または核内核外。前者はマルチプロセッサリソースの同時使用を助長しますが、後者はコンテキスト切り替えのオーバーヘッドを重視します。現在の商用システムでは、通常2つを組み合わせて使用​​し、smpシステムのニーズを満たすコアスレッドを提供し、スレッドライブラリを使用してユーザー状態で別のスレッドメカニズムをサポートします。複数のユーザーモードスレッドのスケジューラになります。多くのテクノロジと同様に、「ハイブリッド」は通常より高い効率をもたらしますが、それは実装の難しさももたらしますシンプルなシンプルな設計のため、Linuxは最初から混在していません。モデルの計画ですが、実装には「混合」という別の考え方を使用します。特定の実施通し機構で
は、

、明らかに、少なくとも核プロセスを達成必要カーネルスレッドも外核で達成することができるオペレーティング・システムで達成することができるが、核一方で、前者の一般的な要件また、プロセスをサポートしています。コアレベルのスレッディングモデルは明らかに前者のサポートを必要としますが、ユーザーレベルのスレッディングモデルは必ずしも後者に基づいていません。前述のように、この違いは、2つの分類方法の規格が異なるためです。

カーネルは両方のプロセスはまた、スレッドを達成することができる、スレッドをサポートサポートしている場合 - QUOT&プロセスを、多対"モデル、核によるプロセスのスケジューリングの、すなわち糸、それはまたすることができるがユーザレベルスケジューラのスレッドプールとして、その空間で実行されている適切なユーザレベルスレッドを選択します。これは、マルチプロセッサシステムのニーズを満たし、スケジューリングのオーバーヘッドを最小限に抑える前述の「ハイブリッド」スレッドモデルです。このスレッドモデルが完全に使用されている(例えばDigitalUnix、Solaris版、Irixのは、など)、市販のオペレーティング・システムの大半のPOSIX1003.1c基準を実現することができます。カーネルの外部に実装されたスレッドは、「一対一」、「多対一」の2つのモデルに分けることができます。前者は、1つのスレッドにコアプロセス(おそらく軽量プロセス)を使用し、スレッドスケジューリングは次のようになります。プロセスのスケジューリングはコアに渡され、後者はコアの外側で完全にマルチスレッド化され、スケジューリングはユーザーモードで行われます。後者のスレッドは、前述の単純なユーザーレベルのスレッドモデルの実装ですが、明らかに、この余分なコアスレッドスケジューラは、実際にはスレッド実行スタックの切り替えを完了するだけで十分です。同期か非同期かは、プロセスに基づいているためスレッドに配置できないため、この実装はマルチプロセッサシステムでは使用できず、この要件はますます大きくなっています。純粋なユーザーレベルのスレッドの実装は、アルゴリズムの研究目的を除いて、ほとんど姿を消しました。
は、

のLinuxカーネルは、この欠陥を補うため、より効率的なスレッドモデルの実現を制限する、軽量プロセスのサポートを提供しますが、ある程度、Linuxのプロセスのスケジューリングオーバーヘッドを最適化することに焦点を当てました。現在、最も普及しているスレッド機構であるLinuxThreadsは、コアに引き渡されるスレッドプロセス「1対1」モデルを採用し、ユーザーレベルでの信号処理を含むスレッド管理機構を実装している。 Linux-LinuxThreadsの動作メカニズムがこの記事の焦点です。

2
達成する軽量プロセスの.Linux2.4コア

最初のプロセス定義は、プロシージャ、リソース典型的にオペレーティング・システム・レベルでプログラムコードとリソースを意味する3つの部分の実装を含みますリソースは、典型的には、通常、CPUの占有を含む、実行コンテキストと理解、およびそれ以降のスレッドに展開されたメモリ、IOリソース、信号処理部、及びプログラムの実行を含みます。スレッドの概念が登場する前は、プロセス切り替えのオーバーヘッドを減らすために、オペレーティングシステムの設計者はプロセスの概念を徐々に見直し、プロセスによって占有されていたリソースを徐々に削除していました。軽量なプロセスの概念を発展させます。 Linuxカーネルは、バージョン2.0.xで軽量プロセスを実装しました。アプリケーションは、統合されたclone()システムコールインタフェースを介して、異なるパラメータで軽量プロセスまたは通常のプロセスを指定できます。カーネルでは、呼パラメータ通過した後のクローン()コール、および、核はまた、フォーク(の機能)、最終のvfork()システムコールである()do_forkを説明するであろう:

<のLinux-2.4 0.20 /カーネル/fork.c>
マクロ"から取得され、

intdo_fork(unsignedlongclone_flags、unsignedlongstack_start、

structpt_regs * REGS、unsignedlongstack_size)

clone_flags;または"値:

< Linuxベース2.4.20 //リナックス/sched.h>を含む;

#defineCSIGNAL 0x000000ff /* signalmasktobesentatexit * /

#defineCLONE_VM 0x00000100 /* setifVMsharedbetweenprocesses * /

#defineCLONE_FS0x00000200 /* setiffsinfosharedbetweenprocesses * /

#defineCLONE_FILES0x00000400 /* setifopenfilessharedbetweenprocesses * /

#defineCLONE_SIGHAND 0x00000800 /* setifsignalhandlersandblockedsignalsshared * /

#defineCLONE_PID 0x00001000 /* setifpidshared * /

#defineCLONE_PTRACE 0x00002000 /* setifwewanttolettracingcontinueonthechildtoo * /

#defineCLONE_VFORK 0x00004000 /* setiftheparentwantsthechildtowakeitup onmm_release * /

#defineCLONE_PARENT 0x00008000 /* setifwewanttohavethesameparentasthecloner * /

Copyright © Windowsの知識 All Rights Reserved