Глава 8 Введение в синхронизацию выполнения кода ядра

Глава 8

Введение в синхронизацию выполнения кода ядра

В приложениях, рассчитанных на работу с совместно используемой памятью (shared memory), необходимо позаботиться о том, чтобы совместно используемые ресурсы были защищены от конкурентного доступа. Ядро — не исключение. Совместно используемые ресурсы требуют защиты от конкурентного доступа в связи с тем, что несколько потоков выполнения[43] могут одновременно манипулировать одними и теми же данными: эти потоки могут переписывать изменения, сделанные другими потоками, а также обращаться к данным, которые находятся в несогласованном (противоречивом, неконсистентном) состоянии. Конкурентный доступ к совместно используемым данным — это хороший способ получить нестабильность системы, причины которой, как показывает опыт, впоследствии очень сложно обнаружить и исправить. В связи с этим важно при разработке сразу сделать все правильно.

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

Эти дни закончились. Поддержка симметричной многопроцессорности была введена в ядрах серии 2.0, и с тех пор эта поддержка постоянно совершенствуется. Поддержка мультипроцессорности предполагает, что код ядра может одновременно выполняться на двух или более процессорах. Следовательно, без специальной защиты части кода ядра, которые выполняются на двух разных процессорах, принципиально могут обратиться к совместно используемым данным в один и тот же момент времени. Начиная с серии ядер 2.6 ядро операционной системы Linux является преемптивным (вытесняемым). Это подразумевает, что (при отсутствии необходимой защиты) планировщик может вытеснить код ядра в любой момент времени и запустить на выполнение другое задание. Сегодня есть много сценариев, благодаря которым может возникнуть конкурентный доступ к данным в ядре, и все эти варианты требуют защиты данных.

В этой главе рассматриваются проблемы, связанные с параллельным выполнением кода и синхронизацией выполнения кода в ядре операционной системы. В следующей главе детально рассмотрены механизмы и интерфейсы, которые предоставляет ядро операционной системы Linux для решения проблем синхронизации и предотвращения состояния конкуренции за ресурс (race condition, состояние "гонок").

Поделитесь на страничке

Следующая глава >

Похожие главы из других книг

ГЛАВА 2. ВВЕДЕНИЕ В АРХИТЕКТУРУ ЯДРА ОПЕРАЦИОННОЙ СИСТЕМЫ

Из книги Архитектура операционной системы UNIX автора Бах Морис Дж

ГЛАВА 2. ВВЕДЕНИЕ В АРХИТЕКТУРУ ЯДРА ОПЕРАЦИОННОЙ СИСТЕМЫ В предыдущей главе был сделан только поверхностный обзор особенностей операционной среды UNIX. В этой главе основное внимание уделяется ядру операционной системы, делается обзор его архитектуры и излагаются в


Глава 17. Обновление ядра

Из книги Linux для пользователя автора Костромин Виктор Алексеевич

Глава 17. Обновление ядра 17.1. Что такое ядро и когда его надо менять Каждый, кто хоть немного интересовался тем, что такое Linux, обязательно встречал в различных руководствах термин "ядро", по-английски - kernel. Ядро - это важнейшая часть Linux, как и любой другой операционной


Глава 5 Агрессивные формы кода и борьба с ними

Из книги Защити свой компьютер на 100% от вирусов и хакеров автора Бойцев Олег Михайлович

Глава 5 Агрессивные формы кода и борьба с ними ? Все гениальное – просто. Пишем вирус одной строкой!? Веб-страница в обличии Фредди Крюгера – "потрошит" ваш винчестер!? Антология сокрытия вирусного кода? Как работает эвристический анализатор кода и почему даже два


Концепция изоляции – вариант безопасного выполнения кода

Из книги Системное программирование в среде Windows автора Харт Джонсон М

Концепция изоляции – вариант безопасного выполнения кода Под chroot в UNIX-подобных операционных системах подразумевается техника, позволяющая создать изолированную среду – имитацию корневого каталога файловой системы. Запущенная в такой среде любая программа будет


ГЛАВА 7 Потоки и планирование выполнения

Из книги Сетевые средства Linux автора Смит Родерик В.

ГЛАВА 7 Потоки и планирование выполнения Основной единицей выполнения в Windows является поток, и одновременно несколько потоков могут выполняться в рамках одного процесса, разделяя его адресное пространство и другие ресурсы. В главе 6 процессы ограничивались только одним


Глава 1 Настройка сетевых средств ядра

Из книги Технология XSLT автора Валиков Алексей Николаевич

Глава 1 Настройка сетевых средств ядра "Все дороги ведут в Рим" — гласит пословица. Нечто подобное можно сказать и о сетевых средствах Linux; в этом случае в роли Рима выступает ядро операционной системы. Рано или поздно весь сетевой трафик будет обработан ядром. Различные


Глава 1 Введение в XML

Из книги Разработка приложений в среде Linux. Второе издание автора Джонсон Майкл К.

Глава 1 Введение в XML Что такое XML? За последние несколько десятков лет, прошедших с создания первых электронных устройств, в игру с природой человеком была введена третья сторона — вычислительные машины. Человек постепенно доверил им свою память, переложил на них сложные


Глава 27 Динамическая загрузка во время выполнения

Из книги C++. Сборник рецептов автора Диггинс Кристофер

Глава 27 Динамическая загрузка во время выполнения Загрузка разделяемых (совместно используемых) объектов во время выполнения может оказаться полезным способом для структурирования собственных приложений. Если правильно организовать этот процесс, то тогда можно будет


Глава 2 Организация кода

Из книги Программирование КПК и смартфонов на .NET Compact Framework автора Климов Александр П.

Глава 2 Организация кода 2.0. Введение Возможно, что одной из причин популярности C++ является его способность одинаково хорошо подходить для маленьких, средних и больших проектов. Для небольшого прототипа или исследовательского проекта можно написать всего несколько


Глава 13 Использование неуправляемого кода

Из книги Linux: Полное руководство автора Колисниченко Денис Николаевич

Глава 13 Использование неуправляемого кода Несмотря на то что библиотека .NET Compact Framework имеет множество классов для выполнения самых разных задач, во многих случаях приходится прибегать к вызовам функций Windows API. А в некоторых случаях использование функций Windows API даже


Глава 20 Настройка ядра

Из книги Linux автора Стахнов Алексей Александрович

Глава 20 Настройка ядра 20.1. Многообразие ядер Linux В дереве развития ядер Linux достаточно много веток. И хотя в большинстве случаев придерживаются официальных версий ядер (ветка 2.6.x), упускать из внимания все остальные ни в коем случае нельзя.2.6.xЭто главная ветка ядер Linux на


Глава 28 Программирование ядра

Из книги Разработка ядра Linux автора Лав Роберт

Глава 28 Программирование ядра Из главы 7 вы узнали, что драйверы устройств в Linux выполнены в виде модулей ядра, и познакомились с пакетом module-init-tools (он же modutils для ядер 2.4), содержащим утилиты для выполнения основных операций над модулями ядра. В этой главе я покажу, как


Глава 16 Обновление и компиляция ядра

Из книги автора

Глава 16 Обновление и компиляция ядра Системный администратор рано или поздно сталкивается с необходимостью обновления ядра операционной системы Linux. И возникает дилемма – искать новое ядро операционной системы в виде инсталляционного пакета или самостоятельно


Получение исходного кода ядра

Из книги автора

Получение исходного кода ядра Исходный программный код последней версии ядра всегда доступен как в виде полного архива в формате tar (tarball), так и виде инкрементной заплаты по адресу http://www.kernel.org.Если нет необходимости по той или другой причине работать со старыми версиями


Инсталляция исходного кода ядра

Из книги автора

Инсталляция исходного кода ядра Архив исходного кода ядра в формате tar распространяется в сжатых форматах GNU zip (gzip) и bzip2. Формат bzip2 наиболее предпочтителен, так как обеспечивает больший коэффициент сжатия по сравнению с форматом gzip. Архив ядра в формате bzip2 имеет имя


Глава 4 Планирование выполнения процессов

Из книги автора

Глава 4 Планирование выполнения процессов В предыдущей главе были рассмотрены процессы — абстракция операционной системы, связанная с активным программным кодом. В этой главе представлен планировщик процессов — код, который позволяет процессам