Легкий процесс
В компьютерных операционных системах облегченный процесс ( 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]
Одним из решений этой проблемы является активация планировщика. Это метод взаимодействия ядра и библиотеки потоков. Ядро уведомляет планировщик библиотеки потоков об определенных событиях (например, о том, что поток собирается заблокироваться), и библиотека потоков может принять решение о том, какое действие предпринять. Вызов уведомления от ядра называется «upcall».
Библиотека пользовательского уровня не контролирует базовый механизм, она только получает уведомления от ядра и планирует пользовательские потоки на доступные LWP, а не на процессоры. Затем планировщик ядра решает, как запланировать LWP на процессорах. Это означает, что LWP могут рассматриваться библиотекой потоков как «виртуальные процессоры». [5]
Поддержка операционных систем
[ редактировать ]Начиная с версии 2.2, в Solaris реализован отдельный уровень LWP. До версии 9 Solaris допускал сопоставление «многие ко многим» между LWP и пользовательскими потоками. Однако от этого отказались из-за возникших сложностей и повышения производительности планировщика ядра. [1] [6]
UNIX System V и ее современные производные IRIX , SCO OpenServer , HP-UX и IBM AIX позволяют выполнять сопоставление «многие ко многим» между пользовательскими потоками и LWP. [5] [7]
В NetBSD 5.0 представлена новая масштабируемая модель потоков 1:1. Каждый пользовательский поток (pthread) имеет поток ядра, называемый облегченным процессом (LWP). Внутри ядра и процессы, и потоки реализованы как LWP и одинаково обслуживаются планировщиком. [8]
Реализации
[ редактировать ]- Параллельные расширения (Microsoft)
- Переносимые потоки GNU
- Зеленые нити (Java)
- Легкие потоки ядра
См. также
[ редактировать ]- Волокно (информатика)
- Задача (вычисления)
- Параллелизм задач
- Фьючерсы и обещания
- POSIX-потоки
- Форк (системный вызов)#Клонировать
Ссылки
[ редактировать ]- ^ Jump up to: а б с д и ж Вахалия, Уреш (1996). «Потоки и легкие процессы». Внутреннее устройство UNIX — новые горизонты . Prentice-Hall Inc. ISBN 0-13-101908-2 .
- ^ «Компиляторы IBM AIX» . ИБМ . 2004. Архивировано из оригинала 14 июля 2012 г. Проверено 24 января 2010 г.
В AIX термин «облегченный процесс» обычно относится к потоку ядра.
- ^ Бове, Дэниел П.; Чезати, Марко (2005). «3.1. Процессы, облегченные процессы и потоки». Понимание ядра Linux (3-е изд.). О'Рейли Медиа .
- ^ Уолтон, Шон (1996). «Часто задаваемые вопросы по Linux (FAQ)» . Проверено 24 января 2010 г.
- ^ Jump up to: а б Зильбершац; Гэлвин; Ганье (2004). «Глава 5 – Нити». Концепции операционной системы с Java (Шестое изд.). Джон Уайли и сыновья, Inc.
- ^ «Многопоточность в операционной среде SolarisTM» (PDF) . Сан Микросистемс . 2002 . Проверено 24 января 2010 г.
- ^ «IBM AIX 6.1 — Настройка потоков» . ИБМ . 2009 . Проверено 24 января 2010 г.
- ^ «Планирование потоков и связанные интерфейсы в NetBSD 5.0» (PDF) . Проект NetBSD. 2009 . Проверено 20 декабря 2022 г.