Безопасность операционных систем. Безбогов А.А - 34 стр.

UptoLike

Общим принципом, положенным в основу всех механизмов синхронизации процессов, является принцип взаимоисклю-
чения.
Принцип взаимоисключения: каждый процесс, обращающий к разделяемым (критическим) ресурсам, должен исклю-
чить возможность для всех других процессов одновременного с ним использования этого ресурса.
Использование принципа взаимоисключения требует встраивания в программы процессов механизмов синхронизации,
обеспечивающих выполнение следующих условий:
при обращении нескольких процессов к одному разделяемому ресурсу только одному из них разрешено воспользоваться
этим ресурсом;
в каждый момент времени только один процесс должен владеть критическим ресурсом.
Все механизмы синхронизации, реализующие принцип взаимоисключения, основаны на применении концепции крити-
ческого участка программы.
Критическим участком, критической областью программы процесса называется тот отрезок программного кода
процесса, на котором этот процесс образуется к критическому ресурсу.
Количество критических участков в процессе зависит только от того, к ресурсам какого вида он обращается при своем
функционировании.
Когда некоторый процесс находится на своем критическом участке, другие процессы могут продолжать выполнение, но
без входа в их критические участки (занятым критическим ресурсам), когда процесс выходит из критического участка, то
должно быть разрешено использование освобожденного критического ресурса. Обеспечение взаимоисключения является
основной проблемой параллельного программирования.
3.4.2.2. ПРИМИТИВЫ ВЗАИМОИСКЛЮЧЕНИЯ
Общим подходом к построению механизмов синхронизации с использованием концепции критических участков явля-
ется применение примитивов взаимоисключения.
Примитивами взаимоисключения называется программная конструкция, обеспечивающая реализацию взаимоисключе-
ний для параллельных процессов. В обобщенном виде можно указать два примитива взаимоисключений:
1) примитив
вход_взаимоисключенияс его помощью фиксируется захват критического ресурса данным процессом и
устанавливается запрет на использование его другими процессами;
2) примитив
выход_взаимоисключенияс его помощью процесс сообщает об освобождении им критического ресурса.
Простейший алгоритм синхронизации с применением примитивов взаимоисключения состоит в следующем (рис. 3.2). Главный
процесс запускает в работу два параллельных процесса П
1
и П
2
, после чего он может закончить свою работу. Каждый из параллель-
ных процессов в своем теле имеет области работы с критическим ресурсом. Эти области обязательно обрамляются примитивами
вход_взаимоисключения
и выход_взаимоисключения.
В рассматриваемом случае двух процессов эти примитивы работают следующим образом. Когда процесс П
1
выполняет
примитив
вход_взаимоисключения и если при этом процесс П
2
находится вне своего критического участка, то П
1
входит в
свой критический участок, выполняет работу с критическим ресурсом, а затем выполняет примитив вы-
ход_взаимоисключения, показывая тем самым, что он вышел из своего критического участка. Если П
1
выполняет
вход_взаимоисключения, в то время как П
2
находится на своем критическом участке, то процесс П
1
переводится в состояние
ожидания, пока процесс П
2
не выполнит выход_взаимоисключения. Только после этого процесс П
1
может выйти из состояния
ожидания и войти в свой критический участок.
Если процессы П
1
и П
2
выполняют вход_взаимоисключения одновременно, то одному из них операционная система раз-
решает продолжить работу, а другой переводит в состояние ожидания.
3.4.2.3. ПРОГРАММНАЯ РЕАЛИЗАЦИЯ ПРИМИТИВОВ ВЗАИМОИСКЛЮЧЕНИЯ
Программная реализация примитивов взаимоисключения осуществляется с соблюдением следующих ограничений:
1) задача должна быть решена чисто программным способом на машине, не имеющей специальных команд взаимоис-
ключения;
2) не должно быть никаких предположений об относительных скоростях выполнения асинхронных параллельных про-
цессов;
3) процессы, находящиеся вне своих критических участков, не могут препятствовать другим процессам входить в их
собственные критические участки;
4) не должно быть бесконечного откладывания момента входа процессов в их критические участки.