Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

В компьютерных операционных системах , А легкий процесс ( LWP ) является средством достижения многозадачности . В традиционном значении этого термина, используемом в Unix System V и Solaris , LWP запускается в пользовательском пространстве поверх одного потока ядра и разделяет свое адресное пространство и системные ресурсы с другими LWP в рамках того же процесса . Несколько потоков пользовательского уровня , управляемые библиотекой потоков, могут быть размещены поверх одного или нескольких LWP, что позволяет выполнять многозадачность на уровне пользователя, что может иметь некоторые преимущества в производительности. [1]

В некоторых операционных системах нет отдельного уровня LWP между потоками ядра и пользовательскими потоками. Это означает, что пользовательские потоки реализуются непосредственно поверх потоков ядра. В этих контекстах термин «облегченный процесс» обычно относится к потокам ядра, а термин «потоки» может относиться к пользовательским потокам. [2] В Linux пользовательские потоки реализуются, позволяя определенным процессам совместно использовать ресурсы, что иногда приводит к тому, что эти процессы называют «легковесными». [3] [4] Точно так же в SunOS версии 4 и выше (до Solaris ) «облегченный процесс» относился к пользовательским потокам. [1]

Обсуждения ядра [ править ]

Потоки ядра полностью обрабатываются ядром . Их не обязательно связывать с процессом; ядро может создавать их всякий раз, когда ему нужно выполнить конкретную задачу. Потоки ядра не могут выполняться в пользовательском режиме. LWP (в системах, где они представляют собой отдельный уровень) связываются с потоками ядра и предоставляют контекст на уровне пользователя. Это включает ссылку на общие ресурсы процесса, которому принадлежит LWP. Когда LWP приостановлен, он должен хранить свои регистры уровня пользователя до его возобновления, а основной поток ядра также должен хранить свои собственные регистры уровня ядра.

Производительность [ править ]

LWP медленнее и дороже в создании, чем пользовательские потоки. Всякий раз, когда создается LWP, сначала должен выполняться системный вызов для создания соответствующего потока ядра, вызывающего переключение в режим ядра. Эти переключатели режима обычно включают копирование параметров между ядром и пользовательским пространством, а также ядру могут потребоваться дополнительные шаги для проверки параметров для проверки недопустимого поведения. Переключение контекста между LWP , означает , что данный LWP , что в настоящее время упреждающий должен сохранить свои регистры, а затем перейти в режим ядра для нити ядра , чтобы сохранить свои регистры, и LWP , что в настоящее время запланированном необходимо восстановить ядра и пользовательские регистры отдельно также. [1]

По этой причине некоторые библиотеки потоков пользовательского уровня позволяют реализовать несколько пользовательских потоков поверх LWP. Пользовательские потоки могут создаваться, уничтожаться, синхронизироваться и переключаться между ними полностью в пользовательском пространстве без системных вызовов и переключения в режим ядра. Это обеспечивает значительное улучшение производительности во времени создания потока и переключениях контекста. [1] Однако существуют трудности с реализацией планировщика потоков на уровне пользователя, который хорошо работает вместе с ядром.

Активация планировщика [ править ]

В то время как библиотека пользовательских потоков будет планировать пользовательские потоки, ядро ​​будет планировать базовые LWP. Без координации между ядром и библиотекой потоков ядро ​​может принимать неоптимальные решения по планированию. Кроме того, возможны случаи взаимоблокировки, когда пользовательские потоки, распределенные по нескольким LWP, пытаются получить те же ресурсы, которые используются другим пользовательским потоком, который в данный момент не запущен. [1]

Одним из решений этой проблемы является активация планировщика. Это метод взаимодействия ядра и библиотеки потоков. Ядро уведомляет планировщик библиотеки потоков об определенных событиях (например, когда поток собирается заблокироваться), и библиотека потоков может принять решение о том, какое действие предпринять. Вызов уведомления от ядра называется "обратным вызовом".

Библиотека пользовательского уровня не контролирует базовый механизм, она только получает уведомления от ядра и планирует пользовательские потоки на доступные LWP, а не на процессоры. Затем планировщик ядра решает, как запланировать LWP на процессорах. Это означает, что LWP могут рассматриваться библиотекой потоков как «виртуальные процессоры». [5]

Поддерживающие операционные системы [ править ]

В Solaris с версии 2.2 реализован отдельный уровень LWP. До версии 9 Solaris допускал отображение «многие ко многим» между LWP и пользовательскими потоками. Однако он был удален из-за внесенных в него сложностей и улучшений производительности планировщика ядра. [1] [6]

UNIX System V и ее современные производные IRIX , SCO OpenServer , HP-UX и IBM AIX позволяют отображать "многие-ко-многим" между пользовательскими потоками и LWP. [5] [7]

Реализации [ править ]

  • Параллельные расширения (Microsoft)
  • Переносимые потоки GNU
  • Зеленые потоки (Java)
  • Облегченные потоки ядра

См. Также [ править ]

  • Волокно (информатика)
  • Задача (вычисление)
  • Параллелизм задач
  • Будущее и обещания
  • Потоки POSIX
  • clone (Системный вызов Linux)

Ссылки [ править ]

  1. ^ Б с д е е Vahalia, Uresh (1996). «Потоки и легкие процессы». Внутреннее устройство UNIX - Новые рубежи . ISBN компании Prentice-Hall Inc. 0-13-101908-2.
  2. ^ "Компиляторы IBM AIX" . IBM . 2004. Архивировано из оригинала на 2012-07-14 . Проверено 24 января 2010 года . В AIX термин «облегченный процесс» обычно относится к потоку ядра. CS1 maint: обескураженный параметр ( ссылка )
  3. ^ Бовет, Даниэль П .; Чезати, Марко (2005). «3.1. Процессы, легкие процессы и потоки». Понимание ядра Linux (3-е изд.). O'Reilly Media .
  4. ^ Уолтон, Шон (1996). «Часто задаваемые вопросы по Linux Threads (FAQ)» . Проверено 24 января 2010 года . CS1 maint: обескураженный параметр ( ссылка )
  5. ^ a b Зильбершац; Гальвин; Ганье (2004). «Глава 5 - Нити». Концепции операционной системы с Java (Шестое изд.). John Wiley & Sons, Inc.
  6. ^ «Многопоточность в операционной среде SolarisTM» (PDF) . Sun Microsystems . 2002 . Проверено 24 января 2010 года . CS1 maint: обескураженный параметр ( ссылка )
  7. ^ «IBM AIX 6.1 - Настройка потоков» . IBM . 2009 . Проверено 24 января 2010 года . CS1 maint: обескураженный параметр ( ссылка )

Внешние ссылки [ править ]

  • "Легкий пул процессов" Джим Мауро
  • "Процессы Соляриса" Скотта Кромара
  • Модели резьбы (из HP-UX Process Management: White Paper)