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