BKL: Большая блокировка ядра

BKL: Большая блокировка ядра

Добро пожаловать к "рыжему пасынку" ядра. Большая блокировка ядра (Big Kernel Lock, BKL) — это глобальная спин-блокировка, которая была создана специально для того, чтобы облегчить переход от первоначальной реализации SMP в операционной системе Linux к мелкоструктурным блокировкам. Блокировка BKL имеет следующие интересные свойства.

• Во время удержания BKL можно переходить в состояние ожидания. Блокировка автоматически освобождается, когда задание переходит в состояние ожидания, и снова захватывается, когда задание планируется на выполнение. Конечно, это не означает, что безопасно переходить в состояние ожидания при удержании BKL, просто это можно делать и это не приведет к взаимоблокировке.

• Блокировка BKL рекурсивна. Один процесс может захватывать эту блокировку несколько раз подряд, и это не приведет к самоблокировке, как в случае обычных спин-блокировок.

• Блокировка BKL может использоваться только в контексте процесса.

• Блокировка BKL — это от лукавого.

Рассмотренные свойства дали возможность упростить переход от ядер серии 2.0 к серии 2.2. Когда в ядро 2.0 была введена поддержка SMP, только одно задание могло выполняться в режиме ядра в любой момент времени (конечно, сейчас ядро распараллелено очень хорошо — пройден огромный путь). Целью создания ядра серии 2.2 было обеспечение возможности параллельного выполнения кода ядра на нескольких процессорах. Блокировка BKL была введена для того, чтобы упростить переход к мелкоструктурным блокировкам. В те времена она оказала большую помощь, а сегодня она приводит к ухудшению масштабируемости[51].

Использовать блокировку BKL не рекомендуется. На самом деле, новый код никогда не должен использовать BKL. Однако эта блокировка все еще достаточно интенсивно используется в некоторых частях ядра. Поэтому важно понимать особенности большой блокировки ядра и интерфейса к ней. Блокировка BKL ведет себя, как обычная спин-блокировка, за исключением тех особенностей, которые были рассмотрены выше. Функция lock_kernel() позволяет захватить блокировку, а функция unlock_kernel() — освободить блокировку. Каждый поток выполнения может рекурсивно захватывать эту блокировку, но после этого необходимо столько же раз вызвать функцию unlock_kernel(). При последнем вызове функции освобождения блокировки блокировка будет освобождена. Функция kernel_locked() возвращает ненулевое значение, если блокировка в данный момент захвачена, в противном случае возвращается нуль. Эти интерфейсы определены в файле <linux/smp_lock.h>. Рассмотрим простой пример использования этой блокировки.

lock_kernel();

/*

* Критический раздел, который синхронизирован со всеми пользователями

* блокировки BKL...

* Заметим, что здесь можно безопасно переходить в состояние ожидания

* и блокировка будет прозрачным образом освобождаться.

* После перепланирования блокировка будет прозрачным образом снова

* захватываться.

* Это гарантирует, что не возникнет состояния взаимоблокировки,

* но все-таки лучше не переходить в состояние ожидания,

* если необходимо гарантировать защиту данных!

*/

unlock_kernel();

Когда эта блокировка захвачена, происходит запрещение преемптивности. Для ядер, скомпилированных под однопроцессорную машину, код BKL на самом деле не выполняет никаких блокировок. В табл. 9.8 приведен полный список функций работы с BKL.

Таблица 9.8. Функции работы с большой блокировкой ядра

Функция Описание
lock_kernel() Захватить блокировку BKL
unlock_kernel() Освободить блокировку BKL
kernel_locked() Возвратить ненулевое значение, если блокировка захвачена, и нуль- в противном случае

Одна из самых главных проблем, связанных с большой блокировкой ядра, — как определить, что защищается с помощью данной блокировки. Часто блокировка BKL ассоциируется с кодом (например, она "синхронизирует вызовы функции foo()"), а не с данными ("защита структуры foo"). Это приводит к тому, что заменить BKL обычными спин-блокировками бывает сложно, потому что нелегко определить, что же все-таки необходимо блокировать. На самом деле, подобная замена еще более сложна, так как необходимо учитывать все взаимоотношения между всеми участками кода, которые используют эту блокировку.

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

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

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

ТЕМА НОМЕРА: «Большая восьмерка» большого пестрого дятла

Из книги Журнал «Компьютерра» N 27-28 от 25 июля 2006 года автора Журнал «Компьютерра»

ТЕМА НОМЕРА: «Большая восьмерка» большого пестрого дятла Автор: Леонид Левкович-МаслюкЕсть детские вопросы, которые не оставляют человека всю жизнь, - и я постепенно прихожу к выводу, что они-то и есть единственно важные и интересные. О чем разговаривают животные - один из


АНАЛИЗЫ: Большая Жратва: Неочевидные взаимосвязи политики, разведки и ИТ-бизнеса

Из книги Журнал «Компьютерра» № 4 от 30 января 2007 года автора Журнал «Компьютерра»

АНАЛИЗЫ: Большая Жратва: Неочевидные взаимосвязи политики, разведки и ИТ-бизнеса Автор: Киви БердПервые недели наступившего нового года принесли из США пару любопытных известий, относящихся к абсолютно разным областям высокой политики и компьютерной индустрии, а потому


ПИСЬМОНОСЕЦ: Большая софтверная резолюция

Из книги Журнал «Компьютерра» № 15 от 17 апреля 2007 года автора Журнал «Компьютерра»

ПИСЬМОНОСЕЦ: Большая софтверная резолюция Автор: Илья Щуров VoyagerНе думал, что сподоблюсь вам написать, а поди ж ты…Вот, в 680-м номере порассуждал В. Щепетнев о писателях: мол, усредненно все пишут хорошо, а тем и сюжетов не хватает. Кончились они — вот беда. Успел Достоевский


Большая новость Nokia Алексей Стародымов

Из книги Цифровой журнал «Компьютерра» № 4 [19.01.2010-26.01.2010] автора Журнал «Компьютерра»

Большая новость Nokia Алексей Стародымов Не секрет, что 27 января Apple собирается представить некий новый продукт. Как это обычно и бывает в случае компании из Купертино, заслуживающей доверия информации о грядущем устройстве нет: может, это будет интернет-планшет, а может —


Самая большая проблема iPhone 4 Михаил Карпов

Из книги Цифровой журнал «Компьютерра» № 23 [28.06.2010 — 04.07.2010] автора Журнал «Компьютерра»

Самая большая проблема iPhone 4 Михаил Карпов Опубликовано 02 июля 2010 года Новый телефон iPhone 4 компании Apple вышел совсем недавно, но все обсуждают не столько сам мобильник, сколько проблемы с ним связанные. Хотя не стоит забывать, что после выпуска iPhone 3G


Кафедра Ваннаха: Большая Белковая Сестра Ваннах Михаил

Из книги Цифровой журнал «Компьютерра» № 69 [16.05.2011 — 22.05.2011] автора Журнал «Компьютерра»

Кафедра Ваннаха: Большая Белковая Сестра Ваннах Михаил Опубликовано 19 мая 2011 года Жить без страшилок человечество не может. А вот к девяностым годам прошлого века оно чуть не оказалась без таковых. Самодемонтаж Советского Союза снял с повестки


Ловись рыбка большая и малая

Из книги Интернет. Новые возможности. Трюки и эффекты [litres] автора Баловсяк Надежда Васильевна

Ловись рыбка большая и малая Если хочется получить нечто большее, чем просто программное обеспечение, придется «попотеть» в поиске сайтов фирм, проводящих рекламные акции по рассылке сувениров, образцов продукции. Чаще всего в качестве сувениров выступают ручки, майки,


D.2.3 Большая локальная сеть

Из книги TCP/IP Архитектура, протоколы, реализация (включая IP версии 6 и IP Security) автора Фейт Сидни М

D.2.3 Большая локальная сеть Наконец, предположим, что существует шесть больших локальных сетей. Мы хотим обеспечить соединение каждой из них с 500 хостами. Подойдет 7-битовая маска подсети (см. раздел D.1.1). Типичная 7-битовая подсеть содержит диапазон адресов, подобный


§ 96. Большая маркетологическая глупость

Из книги Ководство автора Лебедев Артём Андреевич

§ 96. Большая маркетологическая глупость 2 декабря 2002Стремление идти проверенным путем рождает уродцев без души и смысла. Без эксперимента и смелости нельзя добиться нового и интересного. Крупные компании набирают штаты маркетологов, большая часть которых с рождения


Большая проблема Big data в России Денис Викторов

Из книги Цифровой журнал «Компьютерра» № 159 (full) автора Журнал «Компьютерра»

Большая проблема Big data в России Денис Викторов Опубликовано 07 февраля 2013За последнее время я посетил несколько мероприятий, посвященных большим данным. Скажу честно, меня не интересует эта технология сама по себе. Я не заказчик. И общее понимание сути Big data у меня вроде бы


Большая статистика: наука, магия, искусство для искусства? Василий Щепетнёв

Из книги Цифровой журнал «Компьютерра» № 179 автора Журнал «Компьютерра»

Большая статистика: наука, магия, искусство для искусства? Василий Щепетнёв Опубликовано 24 июня 2013 Долгое время я верил на слово Ильфу и Петрову. Статистика знает всё! Да и как не знать, если тысячи, нет, миллионы людей ежедневно пишут всякие