Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции / 3_управление процессами.doc
Скачиваний:
76
Добавлен:
20.06.2014
Размер:
1.59 Mб
Скачать

3.3.2.4. Мультиплексирование потоков ядра пользовательскими потоками

В случае мультиплексирования потоков ядра пользовательскими потоками:

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

  • Каждый виртуальный процессор (активация планировщика) представлен отдельным потоком ядра со специальными функциями.

  • Библиотека, управляющая пользовательскими потоками, полностью управляет направлением своих потоков на конкретные виртуальные процессоры.

  • Ядро информирует библиотеку о каждом, относящемся к ней событии: блокировании активации планировщика, её пробуждении, изменении количества активаций планировщика.

  • Библиотека информирует ядро о необходимости уменьшить или увеличить число процессоров, сообщает о подмножестве событий потоков, которые могут отражаться на решениях о распределении процессоров.

3.3.3. Параллельность, обеспечиваемая средствами языка

3.3.3.1. Параллельность, обеспечиваемая средствами последовательного языка

В каждый конкретный момент выполнения такой программы имеется один поток управления, один стек и одна куча. Когда раздельные подзадачи ("потоки") реализованы в одной программе, написанной на последовательном языке программирования, справедливы следующие выводы:

  • Исполнительная система языковой среды и ОС никак не помогают управлять подзадачами как отдельными единицами исполнения.

  • Если выполнение одной подзадачи должно быть приостановлено (т.к. не может продолжаться до наступления определенного события), а выполнение другой продолжено, сохранением и восстановлением состояния должен управлять код пользовательского уровня.

  • Отсутствует возможность немедленной реакции на событие путём передачи управления в нужную точку кода пользовательского уровня. После обработки прерывания выполнение процесса просто продолжается с той же точки, в которой оно было прервано (т.е. возврат управления тому "потоку", который ожидал завершения этого события не происходит, а произойдет тогда, когда может быть завершит работу текущий поток – все зависит от программиста).

3.3.3.2. Сопрограммы

Особый метод реализации независимых подпрограмм в одной программе – так называемые сопрограммы. Цель – обеспечить совместное использование общих данных и создание локальных данных путем поддержки отдельного стека для каждой сопрограммы. Язык программирования (BCPL,Modula2) включает инструкции для создания, удаления, временной приостановки работы сопрограммы с сохранением её состояния. Если в одной программе отдельные подзадачи реализуются как сопрограммы, справедливо следующее:

  • Исполнительная система поддерживает создание активаций сопрограмм, а также их запуск, передачу между ними управления. Она обеспечивает активациям доступ к их совместно используемым и приватным данным.

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

  • Существует единственный поток управления, в котором осуществляется планирование сопрограмм и их выполнение.

  • Отсутствует возможность немедленной реакции на события путем передачи управления в нужную точку кода пользовательского уровня.

  • Приостановка выполнения сопрограммы производится исключительно по её собственной инициативе. Поэтому можно считать, что те общие структуры данных, с которыми работает сопрограмма, всегда остаются в согласованном состоянии.

  • Затраты на передачу управления очень малы.