Легкий процесс - Light-weight process

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

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

Потоки ядра

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

Спектакль

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

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

Планировщик активации

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

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

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

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

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

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

Реализации

Смотрите также

Рекомендации

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

внешняя ссылка