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

Как правило, поток работает в пользовательском режиме, но когда он обращается к системному вызову, то переключается в режим ядра, после чего продолжает выполнять тот же поток, с теми же свойствами и ограничениями, которые были у него в режиме пользователя.

Каждый процесс начинается с одного потока, но новые потоки могут создаваться динамически.

Маркер доступа, хранящий информацию защиты.

Один или несколько потоков,

Идентификатор процесса,

список дескрипторов объектов (управляемых в режиме ядра),

Процессы создаются с помощью вызова Win32, который принимает на входе имя исполняемого файла, определяющего начальное содержимое адресного пространства, и создает первый поток.

 

Потоки

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

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

Идентификаторы процессов и потоков кратны четырем, поэтому они могут использоваться в роли байтовых индексов в таблицах ядра, как и другие объекты.

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

Помимо состояния, идентификатора и двух стеков, у каждого потока есть

  • контекст (в котором сохраняются его регистры, когда он не работает),
  • приватная область для локальных переменных,
  • а также может быть свой собственный маркер доступа.

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

Когда поток завершает свою работу, он может прекратить свое существование.

Когда прекращает существование последний активный поток, процесс завершается.

Любой поток может получить доступ ко всем объектам его процесса. Все, что ему для этого нужно сделать - это заполучить дескриптор и обратиться к соответствующему вызову Win32. Система не следит за тем, какой объект, каким потоком создан. Как только дескриптор объекта помещен в таблицу дескрипторов процесса, любой поток процесса может его использовать.

Помимо нормальных потоков, работающих в процессах пользователя, в операционной системе Windows 2000 есть множество процессов-демонов, не связанных ни с каким пользовательским процессом (они ассоциированы со специальной системой или простаивающими процессами).

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

 

Волокна

Переключение потоков в операционной системе Windows 2000 занимает довольно много времени, так как для этого необходимо переключение в режим ядра, а затем возврат в режим пользователя.

Для предоставления сильно облегченного псевдопараллелизма в Windows 2000 используются волокна.