- •Глава 4.
- •Многопоточность
- •Функциональность потоков
- •Потоки на пользовательском уровне и на уровне ядра
- •Другие схемы
- •4.2 Симметричная многопроцессорная обработка
- •Организация симметричной многопроцессорной системы
- •Архитектура многопроцессорных операционных систем
- •4.3. Микроядра
- •Архитектура микроядра
- •Достоинства архитектуры с микроядром
- •Производительность микроядра
- •Архитектура микроядер
- •4.4. Потоки и smp в windows 2000
- •Объекты процессов и потоков
- •Многопоточность
- •Состояния потоков
- •Поддержка подсистем операционной системы
- •Поддержка симметричной многопроцессорной обработки
- •4.5. Управление потоками и smp в solaris
- •Мотивация
- •Структура процессов
- •Выполнение потоков
- •Прерывания в роли потоков
- •4 6. Управление процессамии потоками в linux
- •4.7. Резюме, ключевые термины и контрольные вопросы
- •Контрольные вопросы
- •4.8. Рекомендуемая литература
- •4.9. Задачи
Поддержка подсистем операционной системы
Средства общего назначения для работы с процессами и потоками должны поддерживать структуры процессов и потоков, соответствующие различным клиентам операционной системы. В обязанности каждой подсистемы входит использование функций обработки процессов и потоков операционной системы W2K для эмуляции функций обработки процессов и потоков соответствующей подсистемы операционной системы. Система управления процессами и потоками довольно сложна; здесь мы приводим лишь ее краткий обзор.
Если новый процесс создается подсистемой Win32 или подсистемой поддержки OS/2, он наследует многие атрибуты создавшего его процесса. Однако в среде операционной системы W2K процесс создается непрямым образом. Процесс клиентского приложения генерирует запрос на создание процесса в адрес соответствующей подсистемы; процесс подсистемы, в свою очередь, отправляет запрос на создание процесса исполнительной системе W2K. Так как новый процесс должен наследовать характеристики процесса-клиента, а не обслуживающего процесса, подсистема W2K имеет возможность указывать родительский процесс нового процесса. Следовательно, новый процесс наследует признак доступа, квоты, базовый приоритет и принятое по умолчанию сродство процессоров родительского процесса.
Поддержка симметричной многопроцессорной обработки
Операционная система W2K поддерживает симметричную многопроцессорную конфигурацию аппаратного обеспечения. Потоки любого процесса, включая потоки исполнительной системы, могут выполняться на любом процессоре. При условии отсутствия ограничений на сродство процессоров микроядро выделяет готовому к выполнению потоку процессор, который освобождается первым. При этом гарантируется, что ни один процессор не будет простаивать или выполнять поток с более низким приоритетом, если готов к выполнению процесс с более высоким приоритетом. Несколько потоков одного и того же процесса могут одновременно выполняться на нескольких процессорах.
Выделяя потоку процессор, микроядро по умолчанию придерживается мягкой стратегии сродства процессоров: диспетчер пытается выделить готовому к выполнению потоку тот же процессор, на котором этот поток выполнялся прошлый раз. Это способствует рациональному использованию данных, оставшихся в кэшах процессора после предыдущего выполнения процесса. Приложение может ограничить круг возможного выбора доступных потоку процессоров, сузив его до одного фиксированного процессора (жесткое сродство).
4.5. Управление потоками и smp в solaris
В операционной системе Solaris реализован необычный многоуровневый подход к управлению потоками, способствующий значительной гибкости использования процессорных ресурсов.
Многопоточная архитектура
В операционной системе Solaris используются четыре отдельные концепции, связанные с потоками.
Процесс. Это обычный процесс UNIX, который включает в себя пользовательское адресное пространство, стек и управляющий блок процесса.
Потоки на пользовательском уровне. Эти потоки реализуются с помощью библиотеки потоков в адресном пространстве процесса; они невидимы для операционной системы. Потоки на пользовательском уровне играют роль интерфейса для параллелизма приложений.
Облегченные процессы. Облегченный процесс (lightweight process — LWP)можно рассматривать как отображение между потоками на пользовательском уровне и потоками ядра. Каждый из облегченных процессов поддерживает один или несколько потоков на пользовательском уровне и отображает их в один поток ядра. Планирование облегченных процессов производится ядром независимо. В многопроцессорной системе облегченные процессы могут выполняться параллельно на нескольких процессорах.
• Потоки ядра. Эти потоки являются фундаментальными элементами; планирование и выполнение каждого из них может осуществляться на одном из системных процессоров.
На рис. 4.15 проиллюстрирована взаимосвязь между этими четырьмя элементами. Заметим, что каждому облегченному процессу всегда соответствует один поток ядра. Облегченный процесс видим для приложения в рамках процесса. Таким образом, структуры данных облегченного процесса существуют в рамках адресного пространства соответствующего им процесса. В то же время каждый облегченный процесс связан с единственным диспетчеризуемым потоком ядра, а структуры данных этого потока ядра поддерживаются в адресном пространстве ядра.
В нашем примере процесс 1 состоит из одного потока на пользовательском уровне, связанного с одним облегченным процессом. Таким образом, выполняется один поток, что соответствует процессу в традиционной системе UNIX. Приложение использует такую структуру процесса, если для него не нужен параллелизм. Процесс 2 соответствует стратегии, в которой применяются только потоки на пользовательском уровне. Все эти потоки поддерживаются одним потоком ядра, поэтому в каждый момент времени может выполняться только один поток на пользовательском уровне. Такая структура полезна тогда, когда приложение лучше всего программировать с применением параллелизма, но не используя при этом параллельное выполнение нескольких потоков. В процессе 3 имеется несколько потоков, которым соответствует меньшее количество облегченных процессов. Вообще говоря, в операционной системе Solaris потоки на пользовательском уровне можно отображать в такое же или меньшее количество облегченных процессов. Это позволяет приложению указывать степень параллелизма на уровне ядра, которая будет поддерживаться для данного процесса. В процессе 4 реализовано взаимно однозначное соответствие между потоками и облегченными процессами. В такой структуре параллелизм на уровне ядра является полностью видимым для приложения. В процессе 5 демонстрируется комбинированный подход. В нем несколько потоков на пользовательском уровне отображаются в несколько облегченных процессов, и вместе с этим один облегченный процесс закреплен за одним потоком на пользовательском уровне.
На рисунке отсутствует изображение потоков ядра, не имеющих связи с облегченными процессами. Эти потоки создаются, запускаются и удаляются ядром для выполнения с их помощью определенных системных функций. Реализация системных функций с помощью потоков ядра вместо процессов ядра снижает накладные расходы по переключению в ядре (переключение потоков требует меньше ресурсов, чем переключение процессов).