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

10. Проблемы синхронизации(тупики) и способы их разрешения.

Тупик (или deadlock) (def моё) – ситуация, возникающая, когда два (или более) процессов работают с двумя (или более) общими ресурсами, причем запросы к этим ресурсам случайны.

Пример: Есть два ресурса Res1 и Res2, Есть два процесса Process1, Process2 и пусть обоим для выполнения какой-то операции необходимо получить блокировку на оба ресурса. Причем Process1, сначала запрашивает блокировку Res1, а Process2 блокировку Res2; далее Process1 подходит к точке, в которой ему необходима блокировка на Res2, а так как этот ресурс занят, Process1 встает в ожидание. В это время, Process2 подходит к точке, где ему необходима блокировка на Res1, что бы завершить выполнение, а так как этот ресурс уже занят, Process2 встает в ожидание момента, когда Process1 освободит Res1, но по понятным причинам, Process1 этого сделать не может, так как ожидает освобождения блокировки на Res2. -> Оба процесса ждут друг друга.->Deadlock

Необходимое условие: потребность процесса в нескольких ресурсах.

Способы разрешения:

  • Распознавание тупиков – использование программных методов, основанных на ведении таблиц распределения ресурсов и таблиц запросов к занятым ресурсам, анализ которых поможет найти блокировки.

  • Предотвращение тупиков – эту проблему можно решить, соблюдая определенные правила распределения ресурсов, к примеру, задать определенную последовательность получения ресурсов.

  • Восстановление системы после тупиков

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

  • игнорирование

11. Механизмы межпроцессного взаимодействия (каналы, очереди сообщений, разделяемая память)

Обмен данными между потоками одного процесса не представляет трудностей, так как операции проходят в одном адресном пространстве. Если рассматривать обмен данными между потоками нескольких процессов, то тут обмену будут препятствовать средства ОС по защите процессов друг от друга, находящихся к тому же в разных адресных пространствах.

Канал - однонаправленный механизм передачи данных (неструктурированного потока байтов) между процессами без необходимости создания файла на диске. Канал представляет собой буфер в оперативной памяти, поддерживающий очередь байт согласно FIFO (First In First Out).

Выделяют два типа каналов:

  • Обычный канал

  • Именованный канал – Реализуется путем создания одним, а чтения – другим процессом(потоком) файла типа FIFO с одним и тем же указанным в процессах именем. Данный канал существует в ОС и после завершения процессов, поэтому, после окончания использования, его надо отсоединить и удалить.

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

Очередь работает только в одном направлении: процесс-приемник может читать и удалять сообщения, а процессы-клиенты могут лишь помещать свои сообщения в очередь.

Отличие от каналов:

  1. Предоставляют несколько дисциплин обработки сообщений (FIFO, LIFO, приоритетный, произвольный доступы)

  2. При чтении, сообщения из очереди не удаляются, сообщение может быть прочитано несколько раз.

  3. В очередях присутствуют не сами сообщения, а их адреса в памяти и размер.

Основные операции над очередью:

  • Создание очереди

  • Открытие существующей очереди

  • Чтение и удаление сообщений из очереди

  • Чтение без последующего удаления

  • Добавление сообщения в очередь

  • Удаление всех сообщений из очереди

  • Определение числа элементов в очереди

Разделяемая память

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