Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
kt.doc
Скачиваний:
9
Добавлен:
26.09.2019
Размер:
590.34 Кб
Скачать

28. Синхронизация

Синхронизация (от др.-греч. σύγχρονος — одновременный) в информатике обозначает одно из двух: синхронизацию процессов, либо синхронизацию данных.

Синхронизация процессов — приведение двух или нескольких процессов к такому их протеканию, когда определённые стадии разных процессов совершаются в определённом порядке, либо одновременно.

Синхронизация необходима в любых случаях, когда параллельно протекающим процессам необходимо взаимодействовать. Для её организации используются средства межпроцессного взаимодействия. Среди наиболее часто используемых средств — сигналы и сообщения, семафоры и мьютексы, каналы (англ. pipe), совместно используемая память.

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

Способ синхронизации данных зависит от делаемых дополнительных предположений. Главной проблемой тут является то, что независимо сделанные изменения могут быть несовместимы друг с другом (так называемый «конфликт правок»), и даже теоретически не существует общего способа разрешения подобных ситуаций.

Тем не менее, есть ряд частных способов, применимых в тех или иных случаях:

  • Наиболее простой способ: предполагают, что изменения вносились лишь в одну из копий — «рабочую» — и другая копия просто перезаписывается её содержимым. Этот способ реализуют большинство приложений синхронизации; в силу необратимости делаемых изменений пользователю даётся выбор, какую копию считать «главной».

  • Если данные представляют собой набор независимых записей (то есть любое сочетание записей является корректным — это, напр., телефонная книга), то можно просто объединить множества записей. Это ликвидирует риск потери информации, но чтобы удалить запись из набора, этот способ приходится сочетать с первым.

  • Если наборы синхронизируются неоднократно, можно автоматически вводить в них дополнительную служебную информацию: дата и время последнего изменения записи, пометки об удалённых записях (стираются после следующей синхронизации или через достаточно большое время) и пр. . Этот подход используется, например, в Outlook.

  • Обрабатывать конфликты правок: автоматически (если возможно), иначе — вручную. Этот, наиболее общий способ применяется только если указанные выше упрощённые недопустимы — например, в системах контроля версий. Так, CVS при обнаружении двух независимых изменений объявляет о «конфликте» и либо (в простых случаях) разрешает его автоматически, либо предоставляет пользователю разрешить его вручную. В этих случаях конфликтов стараются просто избегать — например, распределением областей компетенции.

29. Тупики

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

typedef int semaphore

semaphore rc1, rc2;

void process_A(void) void process_B(void) void process_C(void)

{down(&rc1); {down(&rc1); {down(&rc2);

down(&rc2); down(&rc2); down(&rc1);

use_2_resources(); use_2_resources(); use_2_resources();

up(&rc2); up(&rc2); up(&rc1);

up(&rc1);} up(&rc1);} up(&rc2);}

Пусть пока в системе только 2 процесса А и В. В этом случае никакая взаимоблокировка невозможна. Действительно, если процесс А получит доступ к ресурсу 1, процесс В будет заблокирован на получении доступа. Процесс 1 блокирует второй ресурс, использует ресурсы, и освобождает их, после чего доступ получает второй процесс. В случае, если это процессы А и С возможна следующая ситуация: процесс А захватил ресурс 1, диспетчер переключил процессы, процесс С получил управ-ление и захватил ресурс 2. Теперь процесс А ожидает освобождение ресурса 2, а процесс С – ресурса 1. Произошла взаимо-блокировка. Т.о., на взаимоблокировки существенное влияние может оказывать код программы. Однако в системе, в которой существует несколько самых разных видов ресурсов, и за доступ к которым конкурируют несколько процессов предусмот-реть корректное написание последовательности запросов не представляется возможным.

Коффман доказал, что для возникновения взаимоблокировки необходимо выполнение следующих 4 условий:

- условие взаимного исключения. Каждый ресурс в данный момент времени или отдан ровно одному процессу, или дос-тупен

- Условие удержания и ожидания. Процессы, в данный момент удерживающие полученные ранее ресурсы, могут запра-шивать новые ресурсы

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

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

Для моделирования взаимоблокировок используют графы:

Ребро, направленное от ресурса к процессу, означает, что ресурс ранее был запрошен процессом, получен и в данный момент используется процессом. Ребро, направленное от процесса к ресурсу. означает, что процесс в данный момент блокирован и находится в состоянии ожидания доступа к этому ресурсу. Далее показана ситуация взаимоблокировки: Процесс А ожидает ресурс, который захвачен процессом В, а процесс В ожидает ресурс, который захвачен процессом А. В обозначении ресурса может быть указано число доступных единиц ресурса. Число ребер, исходя-щих из ресурса, не может превышать числа единиц этого ресурса. Модель, представленную таким графом, называют моде-лью повторно используемых ресурсов Холта.

Возможны 4 стратегии при решении проблемы тупиковых ситуаций:

- пренебрежение проблемой.

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

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

- избегание тупиковых ситуаций с помощью аккуратного распределения ресурсов

Фактически тупиковые ситуации возможны не только при борьбе за ресурсы устройств ввода-вывода. Например, в системе всегда ограничивается максимальное число открытых файлов. Пусть это 100. В системе существует 10 процессов, каждый из которых требует открытия 12 файлов. Возможна ситуация, когда каждый из этих процессов откроет ровно 10 файлов, полно-стью исчерпав ресурс таблицы. Ни один из процессов не сможет продолжить работу. Большинство ОС игнорируют такую проблему.

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