Каковы различные «компоненты», которые составляют процессы, домены приложений, контексты и потоки (и каковы их отношения)? - PullRequest
4 голосов
/ 06 марта 2011

Я действительно надеюсь получить окончательный ответ на этот вопрос.

У меня есть предыдущий вопрос, на котором я спросил «Что такое ветка (на самом деле)?» Я получил несколько действительно хороших ответов, и я понял, что нить:

Поток - это независимый набор значений для регистров процессора (для одного ядра). Поскольку это включает указатель инструкций (он же счетчик программ), он контролирует, что и в каком порядке выполняется. Он также включает указатель стека, который лучше указывает на уникальную область памяти для каждого потока, иначе они будут мешать друг другу.

1011 * т.е. *

Поток не является чем-то более "конкретным", чем набор значений регистров

и

Точный список регистров ЦП зависит от архитектуры, но указатель инструкций и указатель стека в значительной степени универсальны. Они определяют поток, поскольку когда этот поток (набор значений регистров) загружается в ядро ​​процессора, поток работает. Процессор выбирает инструкции, требуемые потоком, и обновляет регистры потока. Когда требуется переключение контекста, процессор сохраняет этот набор значений регистров в памяти и загружает набор, принадлежащий другому потоку, как правило, как часть логики обслуживания прерываний.

Кроме того, я понимаю, что у потоков есть TLS (Thread Local Storage) и их собственный стек вызовов.

Итак, еще раз, чтобы прояснить мой вопрос , компоненты потока (как я положил в своем заголовке) - это значения регистра, его TLS и его стек вызовов. Я хочу знать компоненты других элементов в моем заголовке (процессы, домены приложений и контексты).

Вот схема из книги, которую я читаю (Pro C # 2008 и платформа .NET)

The Win32 Process/Thread Relationship

Я понимаю, что эта диаграмма относится к процессам Win32, но я думаю, что тот же TLS, идея стека вызовов имеет место для .NET. Кроме того, я думаю, что эта диаграмма была бы намного лучше, если бы она включала значения регистров (или что-то, указывающее, что были значения регистров), которые определяли эти потоки (A и B).

Сейчас я продолжаю свое расследование, и я хочу просто спросить все это сразу. Я хочу знать ту же информацию о процессах, доменах приложений и контекстах (и это порядок, который я понимаю как «иерархия» хостинга, то есть обрабатывает доменные домены приложений, доменные контексты приложений, контексты хост-потоков).

Моя конечная цель - получить достаточно информации, чтобы я мог наметить отношения между всеми этими сущностями (или какими бы они ни были), но также и компонентами, которые фактически их составляют (например, в случае потоков, существуют значения регистров). , TLS, и стек вызовов, которые фактически составляют их). Когда я это сделаю, я опубликую диаграмму по этому вопросу в качестве редактирования в конце. А пока вот диаграмма, взятая из книги, которую я читаю (в отношении процессов, доменов приложений и контекстов):

Processes, application domains, and context boundaries

P.S. если кто-то знает диаграмму, которая уже объясняет все это, я хотел бы увидеть ее. Если не . , , какого черта там не один ??

РЕДАКТИРОВАТЬ: ЗДЕСЬ ТО, ЧТО Я ТАК ДАЛЬШЕ, КАК ДИАГРАММА

Processes, Application Domains, Contexts and Threads - components and their relationships

1 Ответ

1 голос
/ 06 марта 2011

Трудно разместить много информации на онлайн-форуме и сохранить ее читабельной.

Скорее, я рекомендую вам прочитать две книги:

  • Windows Internals, для концепций уровня ОС (процессы и потоки).
  • CLR через C # , для концепций уровня .NET (домены приложений и управляемые потоки).
...