Обмен технологиями

ОС_Синхронизация и взаимное исключение

2024-07-12

한어Русский языкEnglishFrançaisIndonesianSanskrit日本語DeutschPortuguêsΕλληνικάespañolItalianoSuomalainenLatina

04.07.2024: Примечания к исследованию синхронизации операционной системы и взаимного исключения

Раздел 9 Синхронизация и взаимное исключение


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


9.1 Основные понятия синхронизации и взаимного исключения

9.1.1 Отношения синхронизации

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


9.1.2 Взаимоисключающие отношения

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


9.1.3 Критические ресурсы

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

«Модель производителя и потребителя»
Вставьте сюда описание изображениясчетчик+ +

首先把变量放到寄存器里面
register1 = counter;
接下来对寄存器进行一个自增
register1 = register1 + 1;
再把结果返回到counter里
counter = register1;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

прилавок- -

首先把变量放到寄存器里面
register2 = counter;
接下来对寄存器进行一个自减
register2 = register2 - 1;
再把结果返回到counter里
counter = register2;
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

Вставьте сюда описание изображения

Решение: рассматривать счетчик как критический ресурс и разрешить процессу взаимный доступ к переменной счетчика (механизм синхронизации вы узнаете позже).


9.1.4 Критический раздел

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

  • Входная зона
  • критическая секция
  • Зона выхода
  • оставшаяся площадь

9.1.5 Механизмы синхронизации должны подчиняться правилам

  • Бесплатно впустить

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

  • Если ты занят, подожди

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

  • ограниченное ожидание

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

  • уступить дорогу и подождать

Когда процесс не может войти в свою критическую секцию, процессор (ЦП) следует немедленно освободить, чтобы предотвратить переход процесса в состояние «занятого ожидания».


9.2 Механизм синхронизации программного обеспечения

9.2.1 Метод одной оценки

  • Установите общедоступную целочисленную переменную, чтобы указать, есть ли процесс в критическом разделе. Если в критическом разделе уже есть процесс, он будет ожидать циклической проверки в области входа. После того, как процесс покинет критический раздел, устанавливается флаг. будет изменен в области выхода.
  • Метод с одним флагом устанавливает общедоступную целочисленную переменную поворот, чтобы указать номер процесса, которому разрешено войти в критическую секцию. Когда поворот = 0, процессу P0 разрешено войти в критическую секцию.
  • При повороте=1 процессу Р1 разрешается войти в критическую секцию, а при выходе из критической секции право использования критической секции дается другому процессу (когда Пи выходит из критической секции, пусть поворот=j)

Вставьте сюда описание изображения
Вставьте сюда описание изображения
两个进程必须交替进入临界区,若一个进程不再进入临界区,则另一个进程也无法进入临界区,违背了“空闲让进”准则


9.2.2 Метод первой проверки с двойной маркировкой

Метод первой проверки с двойным флагом устанавливает логический флаг массива[2] для обозначения готовности каждого процесса войти в критическую секцию. Флаг[i]=true означает, что Pi хочет войти в критическую секцию.

  • Прежде чем Пи войдет в критическую секцию, сначала проверьте, вошла ли другая сторона в критическую секцию. Если да, подождите.
  • В противном случае установите для флага [i] значение true перед входом в критическую секцию.
  • Когда Pi выйдет из критической секции, установите для флага [i] значение false.

Вставьте сюда описание изображения

Вставьте сюда описание изображения

  • Цикл while эквивалентен механизму светофора.
  • Установка флага другой стороны эквивалентна смене светофора другой стороны.
  • Однако, поскольку оба процесса сначала проверяют флаг [сначала посмотрите на светофор], и оба изначально являются ложными [оба зелёных света], возможно, что два процесса пройдут светофор одновременно и вместе войдут в критическую секцию. .

9.2.3 Метод последующей проверки с двойной маркировкой

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

Вставьте сюда описание изображения
Вставьте сюда описание изображения


9.2.4 Алгоритм Петерсона

Алгоритм Петерсона сочетает в себеметод одной отметкииМетод пост-проверки с двойной оценкойИдея состоит в том, чтобы использовать flag[] для решения проблемы взаимоисключающего доступа и использовать поворот для решения проблемы нехватки ресурсов.

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


9.3 Механизм аппаратной синхронизации

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

9.3.1 Отключение прерываний

(1) Определение отключения прерываний

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

(2) Недостатки отключения прерываний

  • Неправильное использование терминалов может привести к серьезным последствиям
  • Если время выключения слишком велико, это повлияет на эффективность системы.
  • Метод отключения прерываний не применим к многопроцессорным системам. Отключение прерываний на одном процессоре не мешает процессу выполнять тот же критический код на других процессорах.

9.3.2 Команда «Тестирование и установка» (команда TS)

Вставьте сюда описание изображения

Инструкцию TS можно рассматривать как функциональный процесс (примитив), процесс выполнения которого неделим.

  • замок имеет два состояния:
    • *lock=FALSE указывает, что ресурс свободен.
    • *lock=TRUE указывает, что ресурс используется.

Используйте TS для управления критическими разделами и установки блокировки для каждого критического ресурса.

  • Начальное значение — FALSE, что указывает на то, что критические ресурсы простаивают.
  • Прежде чем процесс войдет в критическую секцию, он сначала использует TS для проверки блокировки. Если она имеет значение FALSE, он может войти и присвоить блокировке значение TRUE, закрывая критический ресурс.

9.3.3 Команда обмена

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

  • Установите глобальную блокировку логической переменной для каждого критического ресурса с начальным значением FALSE.
  • Используйте приведенные выше аппаратные инструкции для завершения процесса взаимного исключения.
  • Однако этот метод также приведет к тому, что процесс доступа будет постоянно тестироваться и находиться в состоянии «ожидания занятости», что не соответствует принципу «ожидания правого доступа».

9.4 Механизм семафора

9.4.1 Целочисленный семафор

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

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

9.4.2 Запись семафора

Механизм синхронизации процессов без явления «занятого ожидания»

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

Вставьте сюда описание изображения

  • Операция ожидания эквивалентна операции P.
  • Сигнальная операция эквивалентна операции V.
  • Просто два разных названия, функции абсолютно одинаковые
  • ждать(А) = Р(А)
  • сигнал(B) = V(A)

(1) Используйте семафор для реализации взаимного исключения процессов.

Установите взаимоисключающий семафорный мьютекс = 1, а затем поместите критическую секцию для каждого процесса для доступа к критическим ресурсам между ожиданием (мьютекс) и сигналом (мьютекс).
Вставьте сюда описание изображения


(2) Используйте семафоры для синхронизации процессов.

Установите семафор синхронизации S=0, чтобы сначала выполнялся сигнал оператора(S), а затем ожидание(S).
Вставьте сюда описание изображения