Гигантский замок
В операционных системах гигантская блокировка , также известная как big-lock или kernel-lock , представляет собой блокировку , которая может использоваться в ядре для обеспечения управления параллелизмом, необходимого для систем симметричной многопроцессорной обработки (SMP).
Гигантская блокировка — это отдельная глобальная блокировка, которая удерживается всякий раз, когда поток входит в пространство ядра , и освобождается, когда поток возвращается в пространство пользователя ; системный вызов является архетипическим примером. В этой модели потоки в пространстве пользователя могут выполняться одновременно на любых доступных процессорах или ядрах процессоров , но в пространстве ядра может выполняться не более одного потока; любые другие потоки, пытающиеся войти в пространство ядра, вынуждены ждать. Другими словами, гигантская блокировка исключает любой параллельный доступ в пространстве ядра.
Благодаря изоляции ядра от параллелизма многие части ядра больше не нужно модифицировать для поддержки SMP. Однако, поскольку в системах SMP с гигантской блокировкой только один процессор может одновременно выполнять код ядра, производительность приложений, проводящих значительное количество времени в ядре, не сильно улучшается. [1] Соответственно, подход гигантской блокировки обычно рассматривается как предварительное средство обеспечения поддержки SMP в операционной системе, дающее преимущества только в пользовательском пространстве. Большинство современных операционных систем используют детальный подход к блокировке.
Линукс
[ редактировать ]Ядро Linux имело большую блокировку ядра (BKL) с момента появления SMP, пока Арнд Бергманн не удалил ее в 2011 году в версии ядра 2.6.39. [2] [3] при этом в остальных случаях большой замок удаляется или заменяется более мелким замком. Поэтому дистрибутивы Linux или выше на уровне CentOS 7 , Debian 7 (Wheezy) и Ubuntu 11.10 не используют BKL.
По состоянию на сентябрь 2022 г. [update], в ядре Linux все еще есть console_lock , который иногда называют BKL, и его удаление находится в процессе. [4] [5]
БСД
[ редактировать ]По состоянию на июль 2019 г. [update]OpenBSD NetBSD и для облегчения по-прежнему используют семейство примитивов spl (Unix) синхронизации критических разделов ядра. [6] [7] [8] это означает, что многие системные вызовы могут блокировать возможности SMP системы, и, по мнению Мэтью Диллона , возможности SMP этих двух систем не могут считаться современными. [9]
FreeBSD по-прежнему поддерживает мьютекс Giant . [10] который обеспечивает семантику, подобную старому интерфейсу spl, но критически важные для производительности основные компоненты уже давно преобразованы для использования более тонкой блокировки. [1]
утверждает Мэтью Диллон , что из с открытым исходным кодом операционных систем общего назначения только Linux , DragonFly BSD и FreeBSD имеют современную поддержку SMP, а OpenBSD и NetBSD отстают. [9]
Фонд NetBSD считает современную поддержку SMP жизненно важной для направления проекта NetBSD и предлагает гранты разработчикам, желающим работать над улучшениями SMP; NPF (межсетевой экран) был одним из проектов, возникших в результате этих финансовых стимулов, но дальнейшие улучшения основного сетевого стека все еще могут быть необходимы. [7] [11]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Jump up to: а б Роберт Н. М. Уотсон (25 ноября 2007 г.). «До и после под гигантским замком» . FreeBSD-Hackers@ (список рассылки). FreeBSD . Проверено 25 июля 2019 г.
- ^ "git.kernel.org: BKL: вот и все, ребята " . Архивировано из оригинала 20 июля 2012 г. Проверено 28 декабря 2019 г.
- ^ https://kernelnewbies.org/BigKernelLock – BigKernelLock на kernelnewbies.org
- ^ ИСПРАВЛЕНИЕ - fbcon: Сделайте fbcon встроенной зависимостью для fbdev . Дэниел Веттер. 28 июня 2017 г.
- ^ патч RFC 19/29 — printk: Добавить базовую инфраструктуру для консолей, отличных от BKL . Томас Глейкснер. 11 сентября 2022 г.
- ^ "/sys/net/if.c" . Перекрестная ссылка BSD . OpenBSD . 30 июня 2019 г. Проверено 25 июля 2019 г.
с = splnet();
- ^ Jump up to: а б "/sys/net/if.c" . Перекрестная ссылка BSD . НетБСД . 25 июля 2019 г. Проверено 25 июля 2019 г.
с = splnet();
- ^ «splx(9) — изменить уровень приоритета системного прерывания» . НетБСД , ОпенБСД . Проверено 25 июля 2019 г.
- ^ Jump up to: а б Мэтью Диллон (22 июля 2019 г.). «Обновление проекта DragonFlyBSD — обновление цвета, будущие тенденции» . пользователи @ (список рассылки). Драгонфлай БСД . Проверено 25 июля 2019 г.
- ^ Джулиан Элишер (2007). "locking(9) — примитивы синхронизации ядра" . Перекрестная ссылка BSD . FreeBSD . Проверено 25 июля 2019 г.
Giant — это специальный мьютекс, используемый для защиты структур данных, которые еще не имеют собственных блокировок. Поскольку он обеспечивает семантику, подобную старому интерфейсу spl(9),…
- «блокировка — примитивы синхронизации ядра». Страницы руководства FreeBSD .
- ^ «SMP Networking (также известный как снятие большой сетевой блокировки)» . НетБСД . 14 февраля 2013 г. Архивировано из оригинала 25 июля 2019 г. Проверено 26 марта 2023 г.