Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Bezopasnost_operatsionnykh_sistem_Nastya.docx
Скачиваний:
0
Добавлен:
01.04.2025
Размер:
846.67 Кб
Скачать

11. Параллельные процессы, критические ресурсы и участки.

Рабочая смесь состоит из параллельных процессов. Они могут быть: несвязанными, т.е. не обменивающиеся целенаправленной информацией друг с другом, связанными, в противном случае, при этом связанные процессы могут быть, как синхронными, требующими, согласование скоростей развития, так и асинхронными в противном случае.

В механизмах синхронизации нуждаются все процессы, в том числе и несвязанные. Основная потребность синхронизации определяется тем, что одни и те же физические и логические устройства могут потребоваться разным процессам. Ресурс системы называется критическим если он допускает каждый момент времени обслуживание только одного процесса. Для решения данной задачи синхронизации, т. е. по ресурсам, применяется принцип взаимоисключения. Т.е. каждый процесс обращающийся к критическим ресурсам (иногда их называют разделяемые) должен исключить возможность для всех других процессов использования данного ресурса. В соответствии с этим принципом в программы процессов должны быть включены механизмы синхронизации, обеспечивающие выполнение следующих условий:

1) При обращении нескольких процессов к критическому ресурсу, только одному из них разрешается воспользоваться ресурсом

2) В каждый момент времени только один процесс должен владеть критическим ресурсом.

Все механизмы синхронизации, реализующие принцип взаимоисключения основаны на применении концепции критического участка. Им называется тот отрезок программного кода процесса, на котором данный процесс обращается к критическому участку. Когда один процесс находится на своем критическом участке, другие процессы могут продолжать выполнение, но без входа в их критические участки, если речь идет об одном ресурсе. Когда процесс выходит из критического участка, то должно быть обеспечено освобождение критического ресурса.

Общим подходом к построению таких механизмов синхронизации является использование примитивов взаимоисключения . Таких примитивов должно быть два

1) Вход взаимоисключения(ВВ) 2) Выход взаимоисключения(ВхВ)

Первый из них фиксирует захват критического ресурса процессом и запрет на использование его другими процессами. Второй информирует систему и другие процессы через нее об освобождении критического ресурса. Предположим у нас есть два процесса организованных следующим образом, где каждый критический участок выполняется следующими примитивами:

Если П1 выполняет свой примитив ВВ и при этом П2 находится вне критического участка, то П1 входит в совй КУ(критический участок) по завершении которого выполняет примитив выхода сообщает об окончании работы с критическим ресурсом.

Если П1 выполняет примитив ВВ(входа), в то время, когда П2 находится на своем критическом участке, то П1 переходит в состояние ожидания до тех пор, пока П2 не выполнит примитив выхода, если же процессы П1 и П2 выполняют примитив входа одновременно, то одному из них операционная система разрешает продолжить работу, а другой переводит в состояние ожидания. Такие примитивы могут быть реализованы программно или аппаратно.

При программной реализации необходимо соблюдать следующие ограничения:

1)Задача решается ВС, не имеющей специальных команд взаимоисключения.

2)Не должно быть никаких предположений относительно скорости выполнения параллельных процессов.

3)Процессы, находящиеся вне своих критических участков не могут препятствовать другим процессам входить в их критические участки.

4) Не должно быть бесконечного откладывания момента входа процессов в их критические участки.

Классическое выполнение этих условий предложено математиками Деккером и Дейкстра. Для синхронизации с использованием аппаратных средств необходимо наличие в системе команд для синхранизации с использованием аппаратных средств. Команды, которые обеспечивают следующие операции:

1) Чтение переменной. 2) Запись её значения в область сохранения. 3) Установка необходимого значения этой переменной. 4) Все это в одной команде - testandset - это неделимая команда с двумя переменными а и b читает значение логической переменной b, копирует его в а и затем устанавливает для b значение "истина". Все это в рамках единой неделимой операции.

Отсюда перейдем к понятию семафора. Семафор - это защищенная переменная, значения которой можно опрашивать и изменять только при помощи операции "инициализация семафора" и операции Р(S), V(S), где S - семафор. Операция P выполняется по правилам, если S больше нуля, то S присвоить S = -1. Иначе ожидать на этом семафоре(на S). Операция V - если один или более процессов ожидает на семафоре, то разрешить одному из процессов продолжить работу, иначе S = S+1. Тоесть вход в критические участки можно контролировать с помощью семафоров.

Различают два вида: 1) Двоичные - S = 0 или S = 1 .2) Считающие, когда S принимает целые неотрицательные значения.

Т.е. участки взаимоисключения или критические участки обрамляются операциями P и V. Если одновременно несколько процессов попытаются выполнить операцию P для данного семафора, то продолжен будет только один из них, а остальные перейдут в режим ожидания. Так же как и примитивы, они могут быть реализованы и программно и аппаратно.

Еще один механизм обработки критических участков связан с понятием монитора. Монитор содержит как данные, так и процедуры необходимые для реализации динамического распределения конкретного общего ресурса. Необходимость обращения использования ресурса называют необходимость обращения соответствующему монитору. В различные моменты времени потребность в таком входе может возникнуть у многих процессов. Но монитор на входе осуществляет взаимоисключение процессов и только одному из них разрешается вход в монитор. Остальные переходят в режим ожидания, которым автоматически управляет монитор. Таким образом, монитор не только выполняет операции взаимоисключения, но и функции по обслуживанию очереди ожидающих процессов. Рассмотрим алгоритмы управления ресурсами. Ресурсы могут распределяться двумя способами:

  1. Статически, на основе информации из пакета задания.

  2. Динамически, по запросам процессов и при возникновении соответствующих событий.

Конечно, возможны и комбинации двух этих подходов. Самым простым из алгоритмов является алгоритм по предоставлению ресурса при первом обращении к нему. Он состоит в следующем:

  1. Независимо от места выдачи запроса система фиксирует первое упоминание имени запрашиваемого ресурса.

  2. Распределяет конкретное физическое устройство, соответствующее имени источнику запроса.

  3. Помечает ресурс в соответствующей таблице, как выделенный или занятый.

Выделенный ресурс не может быть выделен другим процессам, пока процесс, использующий его, не освободит ресурс или не прекратит свою работу.

.порождает проблему тупиков

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]