stringtranslate.com

Cerradura gigante

En los sistemas operativos , un bloqueo gigante , también conocido como big-lock o kernel-lock , es un bloqueo que puede usarse en el kernel para proporcionar el control de concurrencia requerido por los sistemas de multiprocesamiento simétrico (SMP).

Un bloqueo gigante es un bloqueo global solitario que se mantiene siempre que un subproceso ingresa al espacio del núcleo y se libera cuando el subproceso regresa al espacio del usuario ; una llamada al sistema es el ejemplo arquetípico. En este modelo, los subprocesos en el espacio del usuario pueden ejecutarse simultáneamente en cualquier procesador o núcleo de procesador disponible , pero no se puede ejecutar más de un subproceso en el espacio del núcleo; cualquier otro subproceso que intente ingresar al espacio del núcleo se ve obligado a esperar. En otras palabras, el bloqueo gigante elimina toda la concurrencia en el espacio del núcleo.

Al aislar el núcleo de la concurrencia, muchas partes del núcleo ya no necesitan ser modificadas para soportar SMP. Sin embargo, como en los sistemas SMP con bloqueo gigante solo un procesador puede ejecutar el código del núcleo a la vez, el rendimiento de las aplicaciones que pasan cantidades significativas de tiempo en el núcleo no mejora mucho. [1] En consecuencia, el enfoque de bloqueo gigante se considera comúnmente como un medio preliminar para brindar soporte SMP a un sistema operativo, lo que produce beneficios solo en el espacio de usuario. La mayoría de los sistemas operativos modernos utilizan un enfoque de bloqueo de grano fino .

Linux

El núcleo de Linux tenía un bloqueo de núcleo grande (BKL) desde la introducción de SMP, hasta que Arnd Bergmann lo eliminó en 2011 en la versión de núcleo 2.6.39, [2] [3] con los usos restantes del bloqueo grande eliminados o reemplazados por un bloqueo de grano más fino. Por lo tanto, las distribuciones de Linux en o por encima de CentOS 7 , Debian 7 (Wheezy) y Ubuntu 11.10 no utilizan BKL.

A partir de septiembre de 2022 , el kernel de Linux todavía tiene console_lock y rtnl_lock , que a veces se denominan BKL, y su eliminación está en proceso. [4] [5] [6] [7]

BSD

A partir de julio de 2019 , OpenBSD y NetBSD todavía utilizan la familia de primitivas spl para facilitar la sincronización de secciones críticas dentro del núcleo, [8] [9] [10] lo que significa que muchas llamadas al sistema pueden inhibir las capacidades SMP del sistema y, según Matthew Dillon , las capacidades SMP de estos dos sistemas no pueden considerarse modernas. [11]

FreeBSD todavía tiene soporte para el mutex Giant , [12] que proporciona una semántica similar a la antigua interfaz spl, pero los componentes centrales críticos para el rendimiento han sido convertidos desde hace mucho tiempo para usar un bloqueo de grano más fino. [1]

Matthew Dillon afirma que, de los sistemas operativos de propósito general de software de código abierto , solo Linux , DragonFly BSD y FreeBSD tienen soporte SMP moderno, y OpenBSD y NetBSD se quedan atrás. [11]

La Fundación NetBSD considera que el soporte SMP moderno es vital para la dirección del Proyecto NetBSD, y ha ofrecido subvenciones a los desarrolladores que deseen trabajar en mejoras de SMP; NPF (firewall) fue uno de los proyectos que surgieron como resultado de estos incentivos financieros, pero aún pueden ser necesarias mejoras adicionales en la pila de red central. [9] [13]

Véase también

Referencias

  1. ^ de Robert NM Watson (25 de noviembre de 2007). "Antes y después bajo el candado gigante". FreeBSD-Hackers@ (lista de correo). FreeBSD . Consultado el 25 de julio de 2019 .
  2. ^ "git.kernel.org: BKL: eso es todo amigos". Archivado desde el original el 20 de julio de 2012. Consultado el 28 de diciembre de 2019 .
  3. ^ https://kernelnewbies.org/BigKernelLock – BigKernelLock en kernelnewbies.org
  4. ^ PARCHE - fbcon: Hacer que fbcon sea una dependencia incorporada para fbdev. Daniel Vetter. 28 de junio de 2017
  5. ^ Thomas Gleixner (11 de septiembre de 2022). "[parche RFC 19/29] printk: Agregar infraestructura básica para consolas que no sean BKL". linux-kernel (Lista de correo).
  6. ^ Florian Westphal (noviembre de 2017). rtnl mutex, el gran bloqueo del kernel de la pila de red (PDF) . netdev 2.2. Seúl.
  7. ^ Kuniyuki Iwashima (18 de septiembre de 2024). Por Netns RTNL. Conferencia de fontaneros de Linux 2024. Viena, Austria.
  8. ^ "/sys/net/if.c". Referencia cruzada de BSD . OpenBSD . 2019-06-30 . Consultado el 2019-07-25 . s = splnet();
  9. ^ ab "/sys/net/if.c". Referencia cruzada de BSD . NetBSD . 2019-07-25 . Consultado el 2019-07-25 . s = splnet();
  10. ^ "splx(9) — modificar el nivel de prioridad de interrupción del sistema". NetBSD , OpenBSD . Consultado el 25 de julio de 2019 .
  11. ^ por Matthew Dillon (22 de julio de 2019). "Actualización del proyecto DragonFlyBSD: actualización de la configuración de color, tendencias futuras". users@ (Lista de correo). DragonFly BSD . Consultado el 25 de julio de 2019 .
  12. ^ Julian Elischer (2007). "locking(9) — primitivas de sincronización del núcleo". Referencia cruzada de BSD . FreeBSD . Consultado el 25 de julio de 2019 . Giant es un mutex especial que se utiliza para proteger estructuras de datos que aún no tienen sus propios bloqueos. Dado que proporciona una semántica similar a la antigua interfaz spl(9), …
    • "bloqueo - primitivas de sincronización del núcleo". Páginas del manual de FreeBSD.
  13. ^ "Redes SMP (también conocidas como eliminar el gran bloqueo de red)". NetBSD . 2013-02-14. Archivado desde el original el 2019-07-25 . Consultado el 2023-03-26 .