4

私はこれに対する決定的な答えを得ることを本当に望んでいます。

以前、「スレッドとは (本当は) なんですか?」という質問がありました。私はいくつかの非常に良い答えを得ました。ここから得た教訓は、スレッドが次のようなものであるということです。

スレッドは、プロセッサー・レジスター (シングル・コア用) の独立した一連の値です。これには命令ポインタ (別名プログラム カウンタ) が含まれているため、何をどの順序で実行するかを制御します。また、スタック ポインターも含まれています。これは、スレッドごとに一意のメモリ領域を指す方が適切です。そうしないと、互いに干渉します。

すなわち

スレッドは、一連のレジスタ値よりも「具体的な」ものではありません

CPU レジスタの正確なリストはアーキテクチャによって異なりますが、命令ポインタとスタック ポインタはほぼ普遍的です。このスレッド (一連のレジスタ値) がプロセッサ コアにロードされ、スレッドが実行されている限り、スレッドを定義します。プロセッサは、スレッドが要求する命令をフェッチし、スレッド レジスタを更新しています。コンテキストの切り替えが必要な場合、プロセッサはこのレジスタ値のセットをメモリに保存し、通常は割り込み処理ロジックの一部として、別のスレッドに属するセットをロードします。

さらに、スレッドには TLS (Thread Local Storage) と独自の呼び出しスタックがあることも理解しています。

繰り返しますが、私の質問を明確にするために、スレッドのコンポーネント(タイトルに記載したとおり) は、レジスタ値、その TLS、およびそのコール スタックです。タイトルの他の項目 (プロセス、アプリドメイン、およびコンテキスト) のコンポーネントを知りたいです。

これは私が読んでいる本の図です (Pro C# 2008 and the .NET Platform)

Win32 プロセス/スレッドの関係

この図が Win32 プロセスに関するものであることは理解していますが、同じ TLS のコール スタックの考え方が .NET にも当てはまると思います。また、これらのスレッド (A および B) を定義するレジスタ値 (またはレジスタ値が存在することを示すもの) が含まれていれば、この図はより良くなると思います。

現在、調査を続けておりますので、まとめてお聞きしたいと思います。Processes、AppDomains、および Contexts について同じ情報を知りたいです (これは、ホスティングの「階層」として理解している順序です。つまり、プロセス ホスト appdomains、appdomains ホスト コンテキスト、contexts ホスト スレッド)。

私の最終的な目標は、これらすべてのエンティティ (またはそれらが何であれ) の間の関係を図式化できるだけでなく、それらを実際に構成するコンポーネント (たとえば、スレッドの場合、レジスタ値、TLS、実際にそれらを構成する呼び出しスタック)。その際、この質問の図を最後に編集として投稿します。今のところ、これは私が読んでいる本から取った図です (プロセス、アプリ ドメイン、およびコンテキストに関して):

プロセス、アプリケーション ドメイン、およびコンテキストの境界

PS 誰かが既にこれらすべてを説明している図を知っているなら、私はそれを見てみたい. そうでない場合。. . なぜ一体がないのですか??

編集:これまでのところ、図として持っているものは次のとおりです

プロセス、アプリケーション ドメイン、コンテキスト、およびスレッド - コンポーネントとそれらの関係

4

1 に答える 1

1

オンラインフォーラムに多くの情報を投稿して読みやすくすることは困難です。

むしろ、2冊の本を読むことをお勧めします。

  • Windows Internals、OSレベルの概念(プロセスとスレッド)用。
  • .NETレベルの概念(AppDomainsおよびマネージドスレッド)の場合は、C#経由のCLR 。
于 2011-03-05T23:00:14.083 に答える