
- •Понятия «процесс» и «поток». Создание процессов и потоков. Состояния потока
- •Вытесняющие и невытесняющие алгоритмы планирования
- •Алгоритмы планирования, основанные на квантовании
- •Алгоритмы планирования, основанные на приоритетах
- •Системные вызовы
- •Цели и средства синхронизации. Необходимость синхронизации и гонки
- •Критическая секция
- •Блокирующие переменные
- •Семафоры
- •Функции ос по управлению памятью
- •Типы адресов
- •Алгоритмы распределения памяти
- •Распределение памяти с фиксированными разделами
- •Распределение памяти с динамическими разделами
- •Свопинг и виртуальная память
- •Страничное распределение
- •Сегментное распределение
- •Сегментно-страничное распределение
- •Иерархия запоминающих устройств
- •Задачи ос по управлению файлами и устройствами
- •Многослойная модель подсистемы ввода-вывода
- •Многоуровневые драйверы
- •Цели и задачи файловой системы
- •Файловая система unix. Общая структура. Монтирование фс.
- •Имена файлов. Атрибуты файлов.
- •Структура магнитного дискового накопителя. Блоки (кластеры).
- •Безопасность ос. Основные виды угроз и аспекты безопасности ос. Принцип адекватности защиты.
- •Безопасность ос. Понятие сервисов и механизмов защиты ос. Сервисы идентификации и автентификации пользователей. Маркер доступа
- •Понятия «процесс» и «поток». Создание процессов и потоков. Состояния потока
Цели и средства синхронизации. Необходимость синхронизации и гонки
Существует достаточно обширный класс средств ОС, с помощью которых обеспечивается взаимная синхронизация процессов и потоков. Необходимость, в синхронизации возникает только в мультипрограммной ОС и связана с совместным использованием аппаратных и информационных ресурсов.
Синхронизация необходима для предотвращения эффекта гонки и тупиков, при обмене данными между потоками. Любое взаимодействие процессов или потоков связано с их синхронизацией, которая заключается в согласовании их скоростей путем приостановления потока до наступления некоторого события и последующей его активации при наступлении этого события. Синхронизация лежит в основе любого взаимодействия потоков, независимо от того связано ли это с распределением ресурсов или с обменом данными.
Для синхронизации потока прикладных программ, программист может использовать как собственные средства и приемы синхронизации, так и средства ОС.
Необходимость синхронизаций и гонки
Потребность в синхронизации возникает в многопоточной системе при работе с общими данными. Пренебрежение данным средством может вести, как минимум, к неправильному решению задач, или к краху системы в целом.
Рассмотрим, например, задачу ведения базы данных, клиентов некоторого предприятия. Каждому клиенту отводится отдельная запись, в которой имеются поля «оплата» и «заказ». Программа, ведущая БД, оформлена как единый процесс, имеющий множество потоков. В том числе, поток А, который вносит в БД информацию о заказах, поступивших от клиента, поток Б, который фиксирует в БД сведения об оплате выставленных счетов.
Эти два потока совместно работают над общим файлом БД, используя однотипные алгоритмы:
Считать из файла БД в буфер, запись о клиенте, с заданным идентификатором
Внести новое значение в поле «заказ» (поток А) или «оплата» (поток Б)
Внести модифицированную запись в БД
Предположим, что в некоторый момент, поток А обновляет поле «заказ». Для этого он считывает (А1), модифицирует заказ (А2), но закончился квант времени и работа данного потока была прервана. В этот момент потоку Б потребовалось внести информацию об оплате, относительно того же клиента. Значит, он успевает считать запись (Б1), выполнить обновление поля «оплата» (Б2), а затем прерывается. После этого, когда управление возвращается потоку А, ему остается выполнить А3, а потом Б выполняет шаг Б3.
Важным понятием синхронизации потока является понятие критической секции программы.
Критическая секция
Критическая секция – часть программы, результат выполнения которой может непредсказуемо меняется, если переменная, относящаяся к этой части программы, изменяется другими потоками, в то время когда выполнение этой части еще не завершено. Критическая секция всегда определяется по отношению к критическим данным, при несогласовании которых, могут возникнуть нежелательные эффекты.
Чтобы исключить эффект гонки по отношению к критическим данным, необходимо обеспечить, чтобы в каждый момент времени, в критической секции находился только 1 поток. При том неважно, в каком состоянии находится этот поток (активном или ожидающем). Этот прием, называют взаимным исключением.
ОС используют различные способы реализации взаимных исключений. Самый не эффективный, но простой способ взаимоисключения состоит в том, что ОС позволяет потоку запрещать любые прерывания, во время его нахождения в критической секции.