En los sistemas operativos , un candado gigante , también conocido como big-lock o kernel-lock , es un candado que puede usarse en el kernel para proporcionar el control de concurrencia requerido por los sistemas de multiprocesamiento simétrico (SMP).
Un candado gigante es un candado global solitario que se mantiene cada vez que un hilo ingresa al espacio del kernel y se libera cuando el hilo 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 kernel; cualquier otro hilo que intente entrar en el espacio del núcleo se verá obligado a esperar. En otras palabras, el candado gigante elimina toda concurrencia en el espacio del kernel.
Al aislar el kernel de la simultaneidad, muchas partes del kernel ya no necesitan ser modificadas para admitir SMP. Sin embargo, como en los sistemas SMP de bloqueo gigante, solo un procesador puede ejecutar el código del kernel a la vez, el rendimiento de las aplicaciones que pasan una cantidad significativa de tiempo en el kernel no mejora mucho. [1] En consecuencia, el enfoque de bloqueo gigante se considera comúnmente como un medio preliminar de llevar soporte SMP a un sistema operativo, produciendo beneficios solo en el espacio del usuario. La mayoría de los sistemas operativos modernos utilizan un enfoque de bloqueo detallado .
Linux
El kernel de Linux tenía un gran bloqueo de kernel (BKL) desde la introducción de SMP, hasta que Arnd Bergmann lo eliminó en 2011 en la versión 2.6.39 del kernel, [2] [3] con los usos restantes del bloqueo grande eliminados o reemplazados por más finos. -bloqueo granulado. Por lo tanto, las distribuciones de Linux en CentOS 7 o superior , Debian 7 (Wheezy) y Ubuntu 11.10 no utilizan BKL.
BSD
A julio de 2019[actualizar], OpenBSD y NetBSD todavía están usando la familia de primitivas spl (Unix) para facilitar la sincronización de secciones críticas dentro del kernel, [4] [5] [6] lo que significa que muchas llamadas al sistema pueden inhibir las capacidades SMP del sistema y, de acuerdo con para Matthew Dillon , las capacidades SMP de estos dos sistemas no pueden considerarse modernas. [7]
FreeBSD todavía tiene soporte para Giant mutex , [8] que proporciona una semántica similar a la antigua interfaz spl, pero los componentes centrales críticos para el rendimiento se han convertido durante mucho tiempo para usar un bloqueo más detallado. [1]
Matthew Dillon afirma que, de los sistemas operativos de uso general de software de código abierto , solo Linux , DragonFly BSD y FreeBSD tienen soporte SMP moderno, con OpenBSD y NetBSD quedándose atrás. [7]
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 las mejoras de SMP; NPF (firewall) fue uno de los proyectos que surgieron como resultado de estos incentivos financieros, pero es posible que aún sean necesarias más mejoras en la pila de redes centrales. [5] [9]
Ver también
Referencias
- ↑ a b Robert NM Watson (25 de noviembre de 2007). "Antes y después bajo la cerradura gigante" . FreeBSD-Hackers @ (lista de correo). FreeBSD . Consultado el 25 de julio de 2019 .
- ^ "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 .
- ^ https://kernelnewbies.org/BigKernelLock - BigKernelLock en kernelnewbies.org
- ^ "/sys/net/if.c" . Referencia cruzada BSD . OpenBSD . 2019-06-30 . Consultado el 25 de julio de 2019 .
s = splnet ();
- ^ a b "/sys/net/if.c" . Referencia cruzada BSD . NetBSD . 2019-07-25 . Consultado el 25 de julio de 2019 .
s = splnet ();
- ^ "splx (9) - modificar el nivel de prioridad de interrupción del sistema" . NetBSD , OpenBSD . Consultado el 25 de julio de 2019 .
- ^ a b Matthew Dillon (22 de julio de 2019). "Actualización del proyecto DragonFlyBSD - actualización de colo, tendencias futuras" . usuarios @ (lista de correo). DragonFly BSD . Consultado el 25 de julio de 2019 .
- ^ Julian Elischer (2007). "bloqueo (9) - primitivas de sincronización del núcleo" . Referencia cruzada BSD . FreeBSD . Consultado el 25 de julio de 2019 . Lay resumen .
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), ...
- ^ "SMP Networking (también conocido como eliminar el bloqueo de red grande)" . NetBSD . 2013-02-14. Archivado desde el original el 25 de julio de 2019 . Consultado el 25 de julio de 2019 .