Понятие нити (Thread). Основные отличия нити от процесса.



Для того чтобы, структурировать свое понимание – что представляют собой threads (в переводе на русский язык - «нити», «потоки») и определить, чем они отличаются от процессов, можно воспользоваться следующими двумя определениями:

Ø Thread – это виртуальный процессор, имеющий свой собственный набор регистров, аналогичных регистрам настоящего центрального процессора. Один из наиважнейших регистров у виртуального процессора, как и у реального – это индивидуальный указатель на текущую инструкцию (например, индивидуальный регистр EIP на процессорах семейства x86);

Ø Процесс – это в первую очередь адресное пространство. И уже во последнюю очередь на процесс следует смотреть как на точку привязки «ресурсов» в ОC. Если мы разбираем такой аспект, как многозадачность для того, чтобы понять суть threads, то нам не нужно в этот момент думать о «ресурсах» ОС и к чему они привязаны.

Важно понять следующее: thread – это концептуально виртуальный процессор, и когда мы пишем реализацию threads в ядре ОС или в user-level библиотеке, то мы решаем именно задачу «размножения» центрального процессора во многих виртуальных экземплярах, которые логически или даже физически (на SMP, SMT и multi-core CPU платформах) работают параллельно друг с другом.

На основном, концептуальном уровне, нет никакого «контекста». Контекст – это название той структуры данных, в которую ядро ОС или наша библиотека (реализующая threads) сохраняет регистры виртуального процессора, когда она переключается между ними, эмулируя их параллельную работу. Переключение контекстов – это способ реализации threads, а не более фундаментальное понятие, через которое нужно определять thread.

При подходе к определению понятия thread через анализ API конкретных ОС обычно вводят слишком много сущностей: процессы, адресные пространства, контексты, переключения этих контекстов, прерывания от таймера, кванты времени с приоритетами, и даже «ресурсы», привязанные к процессам (в противовес threads).

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

Главное свойство процесса наличие у него своих собственных страничных таблиц, образующих его индивидуальное адресное пространство. Однако он не является сам по себе чем-то исполнимым.

Можно говорить в определении, что «у каждого процесса в системе всегда есть по крайней мере один thread». А можно сказать иначе –адресное пространство логически лишено смысла для пользователя, если оно не видно хотя бы одному виртуальному процессору (thread). Поэтому все современные ОС уничтожают адресное пространство (завершают процесс) при завершении работы последнего thread, работающего на данном адресном пространстве. И можно не говорить в определении процесса, что в нем есть «по крайней мере, один thread». Тем более, что на нижнем системном уровне процесс, как правило, может существовать как объект ОС, при этом не имея в своем составе threads.

При взгляде на исходный материал, например, ядра Windows, можно заметить, что адресное пространство и прочие структуры процесса конструируются до создания в нем начальной нити (начальной thread для этого процесса). По сути, изначально в процессе не существует threads. В Windows можно создать thread в чужом адресном пространстве через user-level API.

Если смотреть на thread как на виртуальный процессор, то его привязка к адресному пространству представляет собой загрузку в виртуальный регистр базы станичных таблиц нужного значения. Более того, что на нижнем уровне именно это и происходит – каждый раз при переключении на thread связанную с другим процессом ядро ОС перезагружает регистр указателя на страничные таблицы. Это происходит на тех процессорах, которые не поддерживают на аппаратном уровне работу со многими пространствами одновременно.


Дата добавления: 2018-08-06; просмотров: 947; Мы поможем в написании вашей работы!

Поделиться с друзьями:






Мы поможем в написании ваших работ!