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