Многопоточная архитектура


В операционной системе Solaris используются четыре отдельные концепции, связанные с потоками.

• Процесс. Это обычный процесс UNIX, который включает в себя пользова­тельское адресное пространство, стек и управляющий блок процесса.

• Потоки на пользовательском уровне. Эти потоки реализуются с помощью библиотеки потоков в адресном пространстве процесса; они невидимы для операционной системы. Потоки на пользовательском уровне играют роль интерфейса для параллелизма приложений.

• Облегченные процессы. Облегченный процесс (lightweight process — LWP)можно рассматривать как отображение между потоками на пользовательском уровне и потоками ядра. Каждый из облегченных процессов поддер­живает один или несколько потоков на пользовательском уровне и отобра­жает их в один поток ядра. Планирование облегченных процессов произво­дится ядром независимо. В многопроцессорной системе облегченные процес­сы могут выполняться параллельно на нескольких процессорах.

• Потоки ядра. Эти потоки являются фундаментальными элементами; плани­рование и выполнение каждого из них может осуществляться на одном из системных процессоров.

На рис. 4.15 проиллюстрирована взаимосвязь между этими четырьмя элемен­тами. Заметим, что каждому облегченному процессу всегда соответствует один поток ядра. Облегченный процесс видим для приложения в рамках процесса. Таким обра­зом, структуры данных облегченного процесса существуют в рамках адресного про­странства соответствующего им процесса. В то же время каждый облегченный про­цесс связан с единственным диспетчеризуемым потоком ядра, а структуры данных этого потока ядра поддерживаются в адресном пространстве ядра.

В нашем примере процесс 1 состоит из одного потока на пользовательском уровне, связанного с одним облегченным процессом. Таким образом, выполняет­ся один поток, что соответствует процессу в традиционной системе UNIX. При­ложение использует такую структуру процесса, если для него не нужен паралле­лизм. Процесс 2 соответствует стратегии, в которой применяются только потоки на пользовательском уровне. Все эти потоки поддерживаются одним потоком яд­ра, поэтому в каждый момент времени может выполняться только один поток на пользовательском уровне. Такая структура полезна тогда, когда приложение лучше всего программировать с применением параллелизма, но не используя при этом параллельное выполнение нескольких потоков. В процессе 3 имеется несколько потоков, которым соответствует меньшее количество облегченных процессов. Вообще говоря, в операционной системе Solaris потоки на пользова­тельском уровне можно отображать в такое же или меньшее количество облег­ченных процессов. Это позволяет приложению указывать степень параллелизма на уровне ядра, которая будет поддерживаться для данного процесса. В процессе 4 реализовано взаимно однозначное соответствие между потоками и облегчен­ными процессами. В такой структуре параллелизм на уровне ядра является пол­ностью видимым для приложения. В процессе 5 демонстрируется комбинирован­ный подход. В нем несколько потоков на пользовательском уровне отображаются в несколько облегченных процессов, и вместе с этим один облегченный процесс закреплен за одним потоком на пользовательском уровне.

На рисунке отсутствует изображение потоков ядра, не имеющих связи с об­легченными процессами. Эти потоки создаются, запускаются и удаляются ядром для выполнения с их помощью определенных системных функций. Реализация системных функций с помощью потоков ядра вместо процессов ядра снижает накладные расходы по переключению в ядре (переключение потоков требует меньше ресурсов, чем переключение процессов).

Мотивация

 

Совместное использование потоков на пользовательском уровне и на уровне ядра дает возможность программисту выбрать вариант параллелизма, который будет наиболее эффективным для данного приложения и подойдет для него больше других.

В некоторых программах используется логический параллелизм, который позволяет упростить и структурировать код, но для которого не нужен аппарат­ный параллелизм. Например, приложение со многими окнами, из которых толь­ко одно является активным, можно эффективно реализовать в виде набора пото­ков на пользовательском уровне, которым отвечает один облегченный процесс. Преимущество использования для таких приложений только потоков на пользо­вательском уровне заключается в их эффективности. Потоки на пользователь­ском уровне можно создавать, уничтожать, блокировать, активизировать и т.д. без участия ядра. Если бы ядру было известно о каждом потоке на пользователь­ском уровне, оно должно было бы размещать структуры данных для каждого потока, а также выполнять переключение потоков. Как мы видели в табл. 4.1, при переключении потоков на уровне ядра потребляется больше ресурсов, чем при переключении потоков на пользовательском уровне.

Если в приложение входят потоки, которые могут быть блокированы, на­пример, при выполнении ввода-вывода, то заманчиво использовать несколько облегченных процессов, поддерживающих такое же или большее количество по­токов на пользовательском уровне. Чтобы в рамках этого же процесса могли вы­полняться и другие потоки, не нужно никакого вмешательства приложения или библиотеки потоков. Если один из потоков процесса будет блокирован, другие его потоки могут выполняться в оставшихся облегченных процессах.

В некоторых приложениях эффективным является взаимно однозначное отображение потоков на уровне ядра и облегченных процессов. Например, мож­но реализовать такое параллельное вычисление элементов массива, чтобы эле­менты, стоящие в разных строках, вычислялись в разных потоках. Если каждому потоку на пользовательском уровне соответствует свой облегченный процесс, то переключать потоки при вычислениях не потребуется.

Для некоторых приложений подходит смешанное использование потоков, постоянно связанных с облегченными процессами, и несвязанных потоков (при этом несколько облегченных процессов совместно используются несколькими по­токами). Например, при реализации прикладной системы реального времени программист может захотеть, чтобы одни потоки обладали приоритетом в мас­штабе всей системы и планировались в реальном времени, а другие — выполня­ли функции в фоновом режиме и могли совместно использовать один или не­большое количество облегченных процессов.



Дата добавления: 2016-06-05; просмотров: 1986;


Поиск по сайту:

Воспользовавшись поиском можно найти нужную информацию на сайте.

Поделитесь с друзьями:

Считаете данную информацию полезной, тогда расскажите друзьям в соц. сетях.
Poznayka.org - Познайка.Орг - 2016-2024 год. Материал предоставляется для ознакомительных и учебных целей.
Генерация страницы за: 0.008 сек.