Межпроцессное взаимодействие. Состояние состязания. Критические области.
Межпроцессное взаимодействие
Во время работы системы возникает необходимость организованного взаимодействия между процессами, по возможности не используя прерывания. Такое взаимодействие называется межпроцессным (IPC - Interprocess Communication).
Проблемы разбиваются на 3 пункта:
- передача информации от одного процесса другому;
- контроль над деятельностью процесса - необходимо гарантировать, что 2 процесса не пересекутся в критических ситуациях (например, одновременный доступ к файлу);
- согласованность действий процессов (если процесс А поставляет информацию процессу Б, то процесс Б не должен отработать раньше А).
Второй и третий пункты так же относятся к межпоточному взаимодействию. Первый пункт проблемным не является для межпоточного взаимодействия, поскольку потоки одного процесса работают в одном адресном пространстве.
Состояние состязания
Процессы, работающие совместно, могут использовать некие общие ресурсы, например, участок памяти либо файл. Ситуации, в которых 2 и более процессов используют общий ресурс одновременно и конечный результат зависит от того, какой из них был первым, называются состоянием состязания.
|
|
К ритические области
Основным способом предотвращения состояния состязания является запрет одновременной записи и чтения общих ресурсов более чем одним процессом - взаимное исключение. Часть программы, в которой есть обращение к общим ресурсам, называется критической областью.
Для правильной совместной работы взаимного исключения недостаточно. Необходимо выполнение четырех условий:
- два процесса не должны одновременно находится в критической области;
- в программе не должно быть предположений о скорости или количестве процессов;
- процесс, находящийся вне критической области, не может блокировать другие процессы;
- невозможна ситуация, в которой процесс вечно ждет попадания в критическую область.
1. Запрет прерываний. Самое простое решение состоит в запрещении всех прерываний при входе процесса в критическую область. Таким образом становится невозможным прерывание по таймеру, что исключает передачу процессора другому процессу. Недостатки:
- если прерывания отключены пользовательским процессом и, в результате какого-либо сбоя, не включены обратно - это приведет к краху системы;
- в многопроцессорной системе запрет прерываний касается только одного процессора. Остальные процессоры продолжат свою работу в нормальном режиме, сохраняя доступ к разделяемым данным.
2. Переменные блокировки. Допустим, существует одна совместно используемая переменная, изначально равная нулю. Если процесс хочет попасть в критическую область, он считывает значение этой переменной, сравнивает ее с нулем, и, в случае равенства, изменяет значение на единицу и входит в критическую область. Если переменная равна 1, то процесс ожидает (не уходит в состояние блокировки или готовности). Недостаток: один процесс считывает переменную, успешно сравнивает ее с нулем, но до того, как успевает сменить ее значение на единицу, управление получает другой процесс. Он изменяет значение на единицу и входит в критическую область. При передаче управления первому процессу, он повторно устанавливает значение переменной блокировки в единицу и входит в критическую область. Соответственно, в критической области находится 2 процесса, что противоречит условию №1. Повторной проверкой значения переменной такая ситуация не решается.
|
|