Критическая секция программы
Существует ряд механизмов, гарантирующих, что в каждый конкретный момент времени критическая секция, связанная с определенным элементом данных, будет выполняться только одним процессом. Эти механизмы обеспечивают монопольный доступ к общим данным. На практике их можно реализовать на основе аппаратных средств, таких как запрет прерываний или запрет определенных машинных команд.
Любая возможность обеспечения поддержки взаимодействия исключений должна соответствовать следующим требования:
1) взаимоисключения должны осуществляться в принудительном порядке; в любой момент времени из всех процессов имеющих критический раздел для одного и того же ресурса или разделяемого объекта, в этом разделе может находиться только один процесс.
2) процесс, завершивший работу вне критического раздела не должен влиять на другие процессы.
3) не должна возникать ситуация бесконечного ожидания доступа к критическому разделу.
4) когда в критическом разделе нет ни одного процесса, любой процесс, запросивший возможность входа в него, должен немедленно его получить.
5) не делается никаких предположений о количестве процессов или их относительной скорости работы.
6) процессы остаются в критической секции только в течение ограниченного времени.
Имеется ряд способов удовлетворить перечисленным условиям. Одним из них является передача ответственности за соответствие требованиям самому процессу, который должен выполняться параллельно. Таким образом, процесс, независимо от того является ли он системной программой или приложением, должен координировать свои действия с другими процессами для работы взаимоисключений без поддержки со стороны ОС.
Другой подход включает использование машинных команд специального назначения. Достоинство этого подход заключается в снижении накладных расходов, но не решает проблему в общем случае.
Еще один подход заключается в предоставлении определенного уровня поддержки со стороны ОС или языка программирования.
Если у процессов имеется общее адресное пространство, планировщик системы может использовать общие объекты данных для их взаимодействия и управления соревнованием за ресурсы.
При рассмотрении проблемы, связанной с процессами, которые не имеют общих данных в памяти, главный вопрос заключается в том, как организовать совместное использование информации процессами, взаимодействующими друг с другом для достижения общей цели. Системы где, процессы не имеют общей памяти, нуждаются в механизме передачи информации между процессами и синхронизации по принципу «ждать-сигнализировать». Такая передача данных внутри системы вполне возможна, но могут возникнуть следующие проблемы:
1) процессы, участвующие в обмене данными должны знать имена друг друга; в единой централизованной системе пространство имен процессов можно расширить для организации взаимодействия последних.
2) на копирование данных между адресными пространствами уходит много времени; необходимо минимизировать это время с помощью аппаратного обеспечения управления памятью.
3) на переключение между процессами с разделяемым адресным пространством также требуется много времени.