我真的很希望能得到一个明确的答案。
我有一个之前的问题,我问过“什么是线程(真的)?” 我得到了一些非常好的答案,我从中得出的结论是一个线程是:
线程是处理器寄存器的一组独立值(对于单个内核)。由于这包括指令指针(又名程序计数器),它控制以什么顺序执行的内容。它还包括堆栈指针,它最好指向每个线程的唯一内存区域,否则它们会相互干扰。
IE
线程并不比一组寄存器值更“具体”
和
CPU 寄存器的确切列表取决于架构,但指令指针和堆栈指针几乎是通用的。他们定义了一个线程,当这个线程(一组寄存器值)被加载到处理器内核中时,线程正在运行。处理器正在获取线程所需的指令并更新线程寄存器。当需要上下文切换时,处理器将这组寄存器值保存到内存中,并加载属于不同线程的一组值,通常作为中断服务逻辑的一部分。
此外,我了解线程具有 TLS(线程本地存储)和它们自己的调用堆栈。
所以重申一下,为了澄清我的问题,线程的组件(正如我在标题中提到的)是寄存器值、它的 TLS 和它的调用堆栈。我想知道我的标题中其他项目的组成部分(进程、应用程序域和上下文)。
这是我正在阅读的书中的图表(Pro C# 2008 和 .NET 平台)
我了解此图与 Win32 进程有关,但我认为相同的 TLS,调用 Stack 想法适用于 .NET。此外,我认为如果该图包含定义这些线程(A 和 B)的寄存器值(或指示存在寄存器值的东西),它会更好。
现在我正在继续我的调查,我只想一次问这个问题。我想知道进程、应用程序域和上下文的相同信息(这是我理解为托管“层次结构”的顺序,即进程托管应用程序域、应用程序域托管上下文、上下文托管线程)。
我的最终目标是获得足够的信息,以便我可以绘制所有这些实体(或任何实体)之间的关系,以及实际构成它们的组件(例如,在线程的情况下,有寄存器值、TLS、并调用实际上组成它们的堆栈)。当我这样做时,我会将这个问题的图表作为最后的编辑发布。现在,这是我正在阅读的书中的图表(关于进程、应用程序域和上下文):
PS如果有人知道那里已经解释了所有这些的图表,我很乐意看到它。如果不 。. . 为什么没有一个?
编辑:这是我到目前为止的图表