Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
У. Столлингс ГЛАВА 4 Потоки.doc
Скачиваний:
49
Добавлен:
11.05.2015
Размер:
6.22 Mб
Скачать

Поддержка подсистем операционной системы

Средства общего назначения для работы с процессами и потоками должны поддерживать структуры процессов и потоков, соответствующие различным кли­ентам операционной системы. В обязанности каждой подсистемы входит исполь­зование функций обработки процессов и потоков операционной системы 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 демонстрируется комбинирован­ный подход. В нем несколько потоков на пользовательском уровне отображаются в несколько облегченных процессов, и вместе с этим один облегченный процесс закреплен за одним потоком на пользовательском уровне.

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