Потоки.

Поток (нить) – это непрерывная последовательность инструкций, выполняющих определенную функцию.

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

Потоки процесса могут сообща пользоваться ресурсами процесса-родителя.

По умолчанию у потоков нет собственного маркера доступа и для целей безопасности используется маркер доступа процесса-родителя.

При необходимости каждый поток может получить собственный маркер доступа.


Дескрипторы виртуальных адресов (virtual address descriptors, VAD) – это структуры данных, используемые VMM для учета виртуальных адресов, задействованных процессом.

 

Атрибуты потоков:

Идентификатор клиента – уникальное значение, которое идентифицирует поток при ее обращении к серверу.

Контекст потока – информация, которая необходима ОС для того, чтобы продолжить выполнение прерванного потока. Контекст потока содержит текущее состояние регистров, стеков и индивидуальной области памяти.

Два стека, один из которых используется потоком при выполнении в режиме ядра, а другой – в пользовательском режиме.

Локальная память потока (thread local storage, TLS) – закрытая область памяти потока.

Динамический приоритет – значение приоритета потока в данный момент.

Базовый приоритет – нижний предел динамического приоритета потока.

Процессорная совместимость потока – перечень типов процессоров, на которых может выполняться поток.

Номер идеального процессора потока.

Номер процессора, на котором поток выполнялся прошлый раз.

Время выполнения потока – суммарное время выполнения потока в пользовательском режиме и в режиме ядра.

Счетчик приостановок – текущее количество приостановок выполнения потока.

 

Номер идеального процессора потока:

Идеальный процессор для потока выбирается случайным образом при его создании с использованием зародышевого значения (seed) в блоке процесса. Это значение увеличивается на 1 всякий раз, когда создается новый поток, поэтому создаваемые потоки равномерно распределяются по набору доступных процессоров. Например, первый поток в первом процессе в системе закрепляется за идеальным процессором 0, второй поток того же процесса – за идеальным процессором 1. Однако у следующего процесса в системе идеальный процессор для первого потока устанавливается в 1, для второго – в 2 и т. д. Благодаря этому потоки внутри каждого процесса равномерно распределяются между процессорами.

Номер идеального процессора может быть изменен с помощью функции SetThreadIdealProcessor .