Методы синхронизации процессов
Краткие итоги
Синхронизация процессов – актуальная задача, исследование которой началось с работ Э. Дейкстры в 1960-х гг. Совместный доступ процессов к общим данным (race condition) может привести к нарушению их целостности, поэтому необходима их синхронизация.
При решении задачи ограниченного буфера, переменная counter (счетчик числа элементов в буфере) играет роль общего ресурса для производителя и потребителя, по которому необходима их синхронизация. Если ее не использовать, переменная может принять некорректное значение из-за совместного исполнения операций над ней в двух процессах (interleaving). Операции над ней должны быть атомарны, и должно быть обеспечено их взаимное исключение.
В общем случае, если имеется n процессов, у каждого из них есть своя критическая секция – фрагмент кода, работающий с общим ресурсом, и необходимо обеспечить взаимное исключение исполнения критических секций. Для решения проблемы критических секций необходимо выполнение трех условий: взаимное исключение, прогресс (выбор системой за конечное время одного из процессов для исполнения критической секции), ограниченное ожидание (ограничение на время ожидания от момента заявки процесса на исполнение критической секции до момента ее удовлетворения).
Рассмотрены три алгоритма решения проблемы критических секций. Первый использует переменную для номера текущего процесса, исполняющего критическую секцию (не удовлетворяет условию прогресс ). Второй хранит информацию о процессах-претендентах на исполнение критических секций, но не хранит информацию о номере текущего процесса (также не удовлетворяет условию прогресс ). Третий использует комбинацию этих подходов и решает проблему, однако он оказывается достаточно сложным для понимания и реализации.
Алгоритм булочной – еще один подход к решению проблемы критических секций. Использует присвоение уникального номера в очереди (приоритета) каждому процессу.
Алгоритмы синхронизации более просты, если они используют аппаратную поддержку атомарных операций – проверка и установка (test-and-set) и перестановка значений двух переменных (swap). Приведена реализация синхронизации процессов с использованием обеих операций.
Общий семафор (по Э. Дейкстре) – синхронизирующий примитив: целая переменная, над которой определены семафорные операции wait и signal. Приведено решение проблемы критических секций с помощью семафоров. Семафор реализуется в виде структуры из двух полей: счетчик и ссылка на список ждущих процессов. Для реализации операций над семафором достаточно двух примитивов: block – блокировка текущего процесса, wakeup(P) – разблокировка процесса P.
Семафоры могут использоваться как общее средство синхронизации по ресурсам и по событиям.
Используются две разновидности семафоров – общие (с целым значением) и двоичные (значениями могут быть только 0 и 1). Общий семафор может быть реализован с помощью двоичных семафоров.
В системе "Эльбрус" имеется вариант операции ожидания жуж (жужжать на процессоре) для системных процессов – без прерывания, с удержанием процессора до момента разблокировки.
Имеются три классических задачи (схемы) синхронизации процессов – ограниченный буфер, читатели-писатели и обедающие философы. Рассмотрены решения этих задач с использованием семафоров.
Критические области – высокоуровневая конструкция для синхронизации, основанная на описаниях разделяемых ресурсов (shared) и конструкции region, обеспечивающей взаимное исключение критических секций более удобным и надежным способом, чем семафоры. Рассмотрено решение задачи "ограниченный буфер" с помощью критических областей. Рассмотрена схема реализации критических областей с использованием семафоров.
Монитор (по Ч. Хоару) – высокоуровневая конструкция для синхронизации: многовходовый модуль, содержащий описание общих данных и операций над ними в виде процедур. Обеспечивается взаимное исключение исполнения мониторных операций. Монитор может также содержать условные переменные, для которых определены операции wait и signal для организации дополнительных очередей процессов. Рассмотрено решение задачи "обедающие философы" с использованием монитора. Описана реализация монитора и условных переменных с помощью семафоров.
В системе Solaris для синхронизации используются адаптивные мьютексы, блокировщики читателей-писателей, условные переменные и "вертушки" (turnstiles), позволяющие сочетать применение адаптивных мьютексов и блокировщиков читателей-писателей.
В системе Windows 2000 для синхронизации используются вертящиеся замки (spinlocks) и объекты-диспетчеры, генерирующие события (аналогичные условным переменным).
Набор для практики
Вопросы
- Почему необходима синхронизация параллельных процессов?
- В чем суть задачи "ограниченный буфер"?
- Почему необходимы атомарность и взаимное исключение операций над счетчиком числа элементов в буфере?
- Что такое interleaving и в чем его опасность при использовании общих переменных параллельными процессами?
- Что такое конкуренция за общие данные (race condition)?
- Сформулируйте в общем виде проблему критических секций.
- Какие условия необходимы дял решения проблемы критических секций?
- Что такое взаимное исключение?
- В чем суть условия "прогресс" для решения проблемы критических секций?
- В чем суть условия "ограниченное ожидание" для решения проблемы критических секций?
- Что такое алгоритм булочной и на какой идее упорядочения процессов он основан?
- Какие атомарные операции, поддержанные аппаратно, используются для синхронизации и каким образом?
- Чтло такое общий семафор и какие операции над ним определены?
- Как реализуются семафоры и операции над ними?
- Как использовать семафоры для синхронизации по событиям?
- Как используются семафоры для решения проблемы критических секций?
- Что такое двоичный семафор?
- Что такое семафорный бит?
- В чем суть операции ЖУЖ для системных процессов и в чем ее отличие от операции ЖДАТЬ?
- Как реализуются общие семафоры и операции над ними с использованием двоичных семафоров?
- Какие Вы знаете классические задачи (схемы) синхронизации?
- Как реализуется решение задачи ограниченный буфер с использованием семафоров?
- Как реализуется решение задачи читатели-писателис использованием семафоров?
- Как реализуется решение задачи обедающие философы с использованием семафоров?
- Что такое критические области?
- Как реализуется решение задачи ограниченный буфер с использованием критических областей?
- Как реализуются критические области с использованием семафоров?
- Что такое мониторы (как средство синхронизации)?
- Какие условия должны выполняться при исполнении операций монитора?
- Что такое условные переменные и какие операции над ними определены?
- Как реализуется решение задачи обедающие философы с использованием монитора?
- Как реализуются мониторы, их операции и условные переменные с использованием семафоров?
- Какие средства синхронизации используются в системе Solaris?
- Какие средства синхронизации используются в системе Windows 2000?
Упражнения
- Реализуйте алгоритм решения задачи ограниченный буфер со взаимным исключением критических секций.
- Реализуйте алгоритм булочной.
- Реализуйте алгоритмы синхронизации процессов с использованием операций TestAndSet и Swap (в предположении, что они атомарны).
- Реализуйте общие семафоры и операции над ними.
- Реализуйте двоичные семафоры и операции над ними.
- Реализуйте алгоритм синхронизации критических секций с использованием семафоров.
- Реализуйте общие семафоры с использованием двоичных семафоров.
- Реализуйте алгоритм решения задачи ограниченный буфер с использованием семафоров.
- Реализуйте алгоритм решения задачи читатели-писатели с использованием семафоров.
- Реализуйте алгоритм решения задачи обедающие философы с использованием семафоров.
- Реализуйте алгоритм решения задачи читатели-писатели с использованием критических областей.
- Реализуйте алгоритм решения задачи обедающие философы с использованием критических областей.
- Реализуйте общие области и конструкцию region с использованием семафоров.
- Реализуйте алгоритм решения задачи ограниченный буфер с использованием мониторов.
- Реализуйте алгоритм решения задачи читатели-писатели с использованием мониторов.
- Реализуйте мониторы и условные переменные с использованием семафоров.
Темы для курсовых работ, рефератов, эссе
- История синхронизации процессов (реферат).
- Сравнение возможностей достоинств и недостатков различных средств синхронизации процессов (реферат).
- Концепция семафора и ее использование для синхронизации процесов (реферат).
- Концепция монитора и ее использование для синхронизации процесов (реферат).
- Концепция критической области и ее использование для синхронизации процесов (реферат).
- Классические задачи и схемы синхронизации процессов и их решение (реферат).
- Средства синхронизации в ОС Solaris (реферат).
- Средства синхронизации в ОС Windows 2000 (реферат).
- Реализация алгоритмов решения задачи ограниченный буфер со взаимным исключением критических секций (курсовая работа).
- Реализация алгоритма булочной (курсовая работа).
- Реализация алгоритмов синхронизации процессов с использованием операций TestAndSet и Swap (в предположении, что они атомарны) (курсовая работа).
- Реализация общих семафоров и операций над ними (курсовая работа).
- Реализация двоичных семафоров и операций над ними (курсовая работа).
- Реализация алгоритма синхронизации критических секций с использованием семафоров (курсовая работа).
- Реализация общих семафоров с использованием двоичных семафоров (курсовая работа).
- Реализация алгоритма решения задачи ограниченный буфер с использованием семафоров (курсовая работа).
- Реализация алгоритма решения задачи читатели-писатели с использованием семафоров (курсовая работа).
- Реализация алгоритма решения задачи обедающие философы с использованием семафоров (курсовая работа).
- Реализация алгоритма решения задачи читатели-писатели с использованием критических областей (курсовая работа).
- Реализация алгоритма решения задачи обедающие философы с использованием критических областей (курсовая работа).
- Реализация критических областей и конструкции region с использованием семафоров (курсовая работа).
- Реализация алгоритма решения задачи ограниченный буфер с использованием мониторов (курсовая работа).
- Реализация алгоритма решения задачи читатели-писатели с использованием мониторов (курсовая работа).
- Реализация мониторов и условных переменных с использованием семафоров (курсовая работа).