Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
LINUX_EXAM.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
399.05 Кб
Скачать

2.4 Параллелизм

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

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

КРИТИЧЕСКИЕ УЧАСТКИ

• Критические участки (critical regions) – ветки кода, совместно использующие данные • Состояние гонки (race condition) – два потока одновременно находятся в критическом участке – Возникает не определённо (undetermined) – Трудно воспроизвести – сложно обнаружить при отладке • Для предотвращения состояний гонок код д. б. атомарным (atomic) (без перерывов)

ВОЗНИКНОВЕНИЕ ОДНОВРЕМЕННОГО ДОСТУПА

• Одновременный доступ при однопроцессорной обработке: Получение прерывания, Явная перепланировка выполнения кода ядра • При симметричной многопроцессорности (с 2.0): Код ядра может одновременно выполняться на нескольких процессорных ядрах • С серии 2.6 ядро Linux является вытесняемым (preemptive)

СОГЛАСОВАННОСТЬ НА УРОВНЕ ЯДРА

• Параллелизм (concurrency) – возможность параллельного выполнения кода: Критические участки не выполняются одновременно, Остальной код может выполняться одновременно

• Синхронизация (synhronization) – защита кода от возникновения состояния гонок

• Одновременный доступ (concurrent access) – одновременное выполнение критического участка кода

ВИДЫ ПАРАЛЛЕЛИЗМА

Псевдо-параллелизм (pseudo-concurrency) – один код выполняется во время приостановки выполнения другого – Пример. В пространстве пользователя программы выполняются вытесняемо (preemptively): вытеснение во время работы одного процесса и начало работы другого • Истинный параллелизм (true concurrency) – при симметричной многопроцессорности два процессора могут одновременно выполнять один код • Их причины и семантика разные – приводят к одинаковым состояниям гонок – аналогичные средства защиты • Критические участки не должны участвовать в параллелизме – не должны выполняться один во время прерывания другого или одновременно

ПРИЧИНЫ ПАРАЛЛЕЛИЗМА

• Прерывания. Могут возникать асинхронно • Вытеснение ядра. В режиме ядра одно задание м. вытеснить другое • Переход в состояние ожидания и синхронизация с пространством пользователя • Симметричная многопроцессорность. Несколько процессоров могут выполнять код одновременно

БЕЗОПАСНОСТЬ

• Безопасный при прерываниях (interruptsafe) – код, который безопасно выполнять с обработчиком прерывания • Безопасный при вытеснениях (preemptsafe) – код, который имеет защиту от одновременного доступа к ресурсам при вытеснении кода ядра • Безопасный при симметричной многопроцессорности (SMP-обработке) (SMP-safe) – код, который безопасно выполнять с обработчиком прерывания

АТОМАРНЫЕ ОПЕРАЦИИ

Атомарные операции (atomic operations) – инструкции, которые выполняются, не прерываясь – атомарно. Параллельное выполнение двух атомарных операций с одной и той же переменной невозможно – состояние гонки возникнуть не может. Под атомарными операциями подразумеваются команды изменения данных в оперативной памяти, которые выполняются процессором с полной блокировкой шины памяти, т. е. ни один другой процессор гарантированно не будет конкурировать с монополистом. В Linux в качестве атомарной выбраны операции инкремента и декремента с проверкой счетчика на равенство нулю. Эти примитивы являются наиболее общими случаями для координации параллельных вычислений, на основе которых можно построить семафоры, спин-блокировку и другие, более сложные механизмы координации работы процессоров.

Семафоры — стандартное средство синхронизации процессов в Unix. Для того чтобы их можно было использовать и в SMP-системах, нужно обеспечить атомарность изменения счетчика семафора, поэтому в многопроцессорных версиях функций up (увеличение счетчика семафора) и down (его уменьшение) также используются атомарные команды. Основное отличие семафора от атомарных операций в том, что он предоставляет стандартный сервис, доступный для пользовательских программ.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]