- •Глава 5
- •5.1. Принципы параллельных вычислений
- •Простой пример
- •Взаимодействие процессов
- •Листинг 5.1. Взаимные исключения
- •5.2. Взаимоисключения
- •Листинг 5.3. Алгоритм Петерсона для двух процессов
- •5.3. Взаимоисключения: аппаратная поддержка
- •Специальные машинные команды
- •5.4. Семафоры
- •5.5. Мониторы
- •5.6. Передача сообщений
- •Синхронизация
- •Принцип работы очереди
- •5.7. Задача читателей/писателей
- •Приоритетное чтение
- •5.8. Резюме, ключевые термины и контрольные вопросы
- •5.9. Pекомендуемая литература
- •5.10. Задачи
5.8. Резюме, ключевые термины и контрольные вопросы
Центральными вопросами современных операционных систем являются многозадачность, многопроцессорность и распределенные вычисления. Фундаментальным понятием этих тем (как и технологий разработки операционных систем в целом) являются параллельные вычисления. При параллельном выполнении нескольких задач (не важно, реальном ли параллельном выполнении на разных процессорах или виртуальном в однопроцессорной системе) перед разработчиком возникают вопросы разрешения конфликтов и сотрудничества процессов.
Параллельно выполняющиеся процессы могут взаимодействовать друг с другом различными путями. Процессы, не осведомленные о наличии других процессов, могут, тем не менее, участвовать в конкурентной борьбе за использование ресурсов, например за процессорное время или порты ввода-вывода. Процессы могут быть косвенно осведомлены о наличии других процессов при совместном использовании объектов, таких, как блок основной памяти или файл. И, наконец, процессы могут быть осведомлены о наличии других процессов непосредственно и сотрудничать с ними путем обмена информацией. Ключевыми вопросами при таком взаимодействии процессов становятся взаимные исключения и взаимоблокировки.
Взаимное исключение представляет собой выполнение условия, при котором из множества параллельно выполняющихся процессов одновременно получить доступ к некоторому ресурсу или выполнить определенную функцию в определенный момент времени может только один из них. Технология взаимоисключений может применяться для разрешения конфликтов, таких, как конкуренция за использование ресурсов, и для синхронизации сотрудничающих процессов. Примером последнего может служить модель производителя/потребителя, в которой один процесс помещает данные в буфер, а другой (или несколько процессов) извлекает их оттуда.
Разработан ряд алгоритмов для обеспечения взаимных исключений, наиболее известным из которых является алгоритм Деккера. Недостатки программного подхода — высокие накладные расходы процессорного времени и риск логических ошибок. Другой подход к решению задачи взаимоисключений состоит в использовании специализированных машинных команд. Этот подход несколько снижает накладные расходы, однако все равно имеет низкую эффективность в связи с использованием технологии пережидания занятости.
Еще один подход к решению задачи поддержки взаимных исключений состоит в обеспечении специализированных возможностей в операционной системе. Наиболее широко распространенными технологиями являются семафоры и система передачи сообщений. Семафоры используются для передачи сигналов между процессами и могут быть легко применены для решения задачи взаимоисключений. Сообщения, кроме обеспечения взаимоисключений, являются эффективным средством связи между процессами.
Ключевые термины
Бинарный семафор Монитор Пережидание занятости Блокирующие операции Неблокирующие операции Семафор Взаимоблокировка Параллельные вычисления Сильный семафор Взаимоисключение Параллельные процессы Слабый семафор Голодание Передача сообщений Сопрограммы |
Контрольные вопросы
Перечислите основные проблемы, связанные с концепцией параллельных вычислений.
Каковы три различных контекста, в которых проявляются параллельные вычисления?
Каковы основные требования к выполнению параллельных процессов?
Перечислите три степени осведомленности процесса о наличии других процессов и вкратце опишите их.
В чем основное различие между конкурирующими и сотрудничающими процессами?
Перечислите основные проблемы, связанные с конкуренцией процессов, и вкратце опишите их.
Перечислите требования к взаимоисключениям.
Какие операции могут выполняться над семафорами?
В чем различие между бинарными и обобщенными семафорами?
В чем различие между сильными и слабыми семафорами?
Что такое монитор?
В чем состоит различие между блокирующими и неблокирующими операциями в системе передачи сообщений?
Какие условия обычно связаны с задачей читателей/писателей?
