Синхронизация процессов: проблема критического раздела в ОС

Содержание:

Anonim

Что такое синхронизация процессов?

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

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

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

В этом руководстве по операционной системе вы узнаете:

  • Что такое синхронизация процессов?
  • Как работает синхронизация процессов?
  • Разделы программы
  • Что такое проблема критического раздела?
  • Правила для критического раздела
  • Решения для критического раздела

Как работает синхронизация процессов?

Например, процесс A изменяет данные в ячейке памяти, в то время как другой процесс B пытается прочитать данные из той же ячейки памяти. Существует высокая вероятность того, что данные, прочитанные вторым процессом, будут ошибочными.

Разделы программы

Вот четыре основных элемента критического раздела:

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

Что такое проблема критического раздела?

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

  • Вход в критическую секцию обрабатывается функцией wait () и представлен как P ().
  • Выход из критического участка контролируется функцией signal (), представленной как V ().

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

Правила для критического раздела

Критический раздел должен обеспечивать соблюдение всех трех правил:

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

Решения для критического раздела

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

Вот несколько широко используемых методов решения проблемы критического сечения.

Петерсон Солюшн

Решение Peterson - широко используемое решение проблем критических участков. Этот алгоритм был разработан компьютерным ученым Петерсоном, поэтому он назван решением Петерсона.

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

Пример

PROCESS PiFLAG[i] = truewhile( (turn != i) AND (CS is !free) ){ wait;}CRITICAL SECTION FLAG[i] = falseturn = j; //choose another process to go to CS
  • Предположим, что существует N процессов (P1, P2,… PN), и каждый процесс в какой-то момент времени требует входа в критическую секцию.
  • Поддерживается массив FLAG [] размера N, который по умолчанию является ложным. Итак, всякий раз, когда процессу требуется войти в критическую секцию, он должен установить свой флаг как истинный. Например, если Pi хочет войти, он установит FLAG [i] = TRUE.
  • Другая переменная, называемая TURN, указывает номер процесса, который в настоящее время хочет войти в CS.
  • Процесс, который входит в критическую секцию при выходе, изменит TURN на другой номер из списка готовых процессов.
  • Пример: поворот равен 2, тогда P2 входит в критическую секцию и при выходе из поворота = 3 и, следовательно, P3 выходит из цикла ожидания.

Аппаратное обеспечение синхронизации

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

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

Блокировки мьютексов

Аппаратная синхронизация - непростой метод для всех, поэтому был введен строгий программный метод, известный как Mutex Locks.

В этом подходе во входном разделе кода достигается БЛОКИРОВКА критических ресурсов, используемых внутри критического раздела. В секции выхода этот замок снимается.

Семафорное решение

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

Он использует две атомарные операции: 1) ожидание и 2) сигнал для синхронизации процесса.

Пример

WAIT ( S ):while ( S <= 0 );S = S - 1;SIGNAL ( S ):S = S + 1;

Резюме:

  • Синхронизация процессов - это задача координации выполнения процессов таким образом, чтобы никакие два процесса не могли иметь доступ к одним и тем же общим данным и ресурсам.
  • Четыре элемента критического раздела: 1) Раздел входа 2) Критический раздел 3) Раздел выхода 4) Раздел напоминаний
  • Критический раздел - это сегмент кода, к которому может получить доступ сигнальный процесс в определенный момент времени.
  • Три обязательных правила, которые должны выполняться критической секцией: 1) Взаимное исключение 2) Технологическое решение 3) Связанное ожидание.
  • Взаимное исключение - это особый тип двоичного семафора, который используется для управления доступом к общему ресурсу.
  • Технологическое решение используется, когда в критической секции никого нет, а кто-то хочет войти.
  • В решении с привязанным ожиданием после того, как процесс делает запрос на попадание в свою критическую секцию, существует ограничение на количество других процессов, которые могут попасть в свою критическую секцию.
  • Решение Peterson - широко используемое решение проблем критических участков.
  • Проблемы Критического раздела также решаются синхронизацией оборудования.
  • Аппаратная синхронизация - это не простой метод для реализации, поэтому был также представлен строгий программный метод, известный как Mutex Locks.
  • Семафор - это еще один алгоритм или решение проблемы критического раздела.