Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Шпора_ОС_модуль_2.docx
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
56.8 Кб
Скачать
  1. Цели и средства синхронизации. Необходимость синхронизации и гонки

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

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

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

Необходимость синхронизаций и гонки

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

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

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

  1. Считать из файла БД в буфер, запись о клиенте, с заданным идентификатором

  2. Внести новое значение в поле «заказ» (поток А) или «оплата» (поток Б)

  3. Внести модифицированную запись в БД

Предположим, что в некоторый момент, поток А обновляет поле «заказ». Для этого он считывает (А1), модифицирует заказ (А2), но закончился квант времени и работа данного потока была прервана. В этот момент потоку Б потребовалось внести информацию об оплате, относительно того же клиента. Значит, он успевает считать запись (Б1), выполнить обновление поля «оплата» (Б2), а затем прерывается. После этого, когда управление возвращается потоку А, ему остается выполнить А3, а потом Б выполняет шаг Б3.

Важным понятием синхронизации потока является понятие критической секции программы.

  1. Критическая секция

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

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

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