Учебники

23) Синхронизация процессов

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

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

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

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

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

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

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

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

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

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

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

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

В критическом разделе должны соблюдаться все три правила:

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

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

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

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

Peterson Solution

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

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

пример

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

Оборудование для синхронизации

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

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

Мьютекс Замки

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

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

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

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

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

пример

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

Резюме:

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