Книга: Разработка ядра Linux
Синхронизация и параллелизм
Синхронизация и параллелизм
Ядро подвержено состояниям конкуренции за ресурсы (race condition). В отличие от однопоточной пользовательской программы, ряд свойств ядра позволяет осуществлять параллельные обращения к ресурсам общего доступа, и поэтому требуется выполнять синхронизацию для предотвращения состояний конкуренции за ресурсы. В частности, возможны следующие ситуации.
• Ядро Linux поддерживает многопроцессорную обработку. Поэтому, без соответствующей защиты, код ядра может выполняться на одном, двух или большем количестве процессоров и при этом одновременно обращаться к одному ресурсу.
• Прерывания возникают асинхронно по отношению к исполняемому коду. Поэтому, без соответствующей защиты, прерывания могут возникнуть во время обращения к ресурсу общего доступа, и обработчик прерывания может тоже обратиться к этому же ресурсу.
• Ядро Linux является преемптивным. Поэтому, без соответствующей защиты, исполняемый код ядра может быть вытеснен в пользу другого кода ядра, который тоже может обращаться к некоторому общему ресурсу.
Стандартное решение для предотвращения состояния конкуренции за ресурсы (состояния гонок) — это использование спин-блокировок и семафоров.
Более полное обсуждение вопросов синхронизации и параллелизма приведено в следующих главах.
- 1 Синхронизация данных
- Глава 7. Параллелизм
- 1.2. Параллелизм
- ЧАСТЬ 3 СИНХРОНИЗАЦИЯ
- 2.15. Синхронизация данных
- Синхронизация с помощью семафоров
- Синхронизация с помощью мьютексов
- Откуда берется параллелизм
- Подключение сетевых дисков и синхронизация времени при регистрации пользователей
- ГЛАВА 8 Синхронизация потоков
- Синхронизация куч
- 13.2.2. Синхронизация доступа к ресурсам (mutex.rb)