Поток ядра и пользовательский поток и их механизм

У меня возникла путаница с пониманием потока ядра, пользовательского потока, модели потока из-за «режима ядра», «пользовательского режима», «пользовательские потоки и потоки ядра точно такие же». Кто-нибудь может это прояснить?

Поток ядра

  • Поток ядра — это «облегченная» единица планирования ядра.
  • В каждом процессе существует по крайней мере один поток ядра .
  • Если в процессе существует несколько потоков ядра, они совместно используют одну и ту же память и файловые ресурсы.
  • Потоки ядра не владеют ресурсами, за исключением стека, копии регистров, включая программный счетчик, и локального хранилища потока (если оно есть), поэтому их создание и уничтожение относительно дешевы.
  • Ядро может назначать по одному потоку каждому логическому ядру в системе (поскольку каждый процессор разбивается на несколько логических ядер, если он поддерживает многопоточность, или поддерживает только одно логическое ядро ​​на физическое ядро, если нет), и может выгружать потоки, которые получить блокировку.
  • Однако для переключения потоков ядра требуется гораздо больше времени, чем для пользовательских потоков.

  • Поток ядра — это объект потока, поддерживаемый операционной системой.
  • Это фактический поток, который может планироваться и выполняться процессором.
  • Планировщик потоков ядра отвечает за планирование потоков ядра.

Тема пользователя

  • Потоки иногда реализуются в библиотеках пользовательского пространства, поэтому они называются пользовательскими потоками.
  • Ядро не знает о них, поэтому они управляются и планируются в пользовательском пространстве.
  • Пользовательские потоки, реализованные виртуальными машинами, также называются зелеными потоками.

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

Потоки: почему все пользовательские потоки должны быть сопоставлены с потоком ядра?, stackoverflowПотоки: почему все пользовательские потоки должны быть сопоставлены с потоком ядра?, stackoverflow

Зеленая нить

  • зеленые потоки или виртуальные потоки [оспариваются - обсуждаются] — это потоки, запланированные библиотекой времени выполнения или виртуальной машиной (ВМ), а не изначально базовой операционной системой (ОС) .

Зеленые нити, википедия

Модель резьбы

Модель резьбы

Модель 1:1

  • Потоки, созданные пользователем в соответствии 1:1 с запланированными объектами в ядре, представляют собой простейшую возможную реализацию многопоточности. OS/2 и Win32 использовали этот подход с самого начала.

Тема, википедияТема, википедияТема, википедия

До сих пор мое понимание было следующим.

  • В окне модель резьбы 1:1.
  • Если я вызываю функцию CreateThread, создаются 2 потока: 1 пользовательский поток, 1 поток ядра.
  • Поскольку «каждый пользовательский поток фактически не может работать сам по себе» и «потоку ядра фактически приказано выполнить код, содержащийся в пользовательском потоке», потоку ядра предлагается выполнить код, содержащийся в пользовательском потоке, который LPTHREAD_START_ROUTINE.
- Для функции CreateThread требуется Kernel32.dll.
- Функция CreateThread возвращает HANDLE потока, подразумевая "объект потока, поддерживаемый операционной системой".
- Потоки, созданные CreateThread, выполняются одновременно в многоядерной среде, что означает, что «ядро может назначить по одному потоку каждому логическому ядру».
  • CreateThread по крайней мере создает поток ядра.

Однако в этой ссылке

  • Пользовательские потоки и потоки ядра абсолютно одинаковы.
  • Пользовательский поток — это тот, который выполняет код пользовательского пространства.
  • Поток ядра — это поток, выполняющий только код ядра и не связанный с процессом пользовательского пространства.
  • Фактически все потоки начинаются в пространстве ядра.
  • В процессах на x86 Windows потоки чередуются между пользовательским режимом и режимом ядра (между программой и вызовами ОС/системы). Существуют рабочие потоки ядра, но они не участвуют напрямую и не всегда в выполнении процессов.

Разница между потоками на уровне пользователя и потоками, поддерживаемыми ядром?

Это испортило мой разум. Что это значит?

Означает ли это, что создается 1 поток ядра (например, CreateThread), и этот поток ядра чередуется между режимами пользователя и ядра?

0 ответов

Другие вопросы по тегам