¿Qué sistema operativo le permite actualizar el kernel sin reiniciar completamente la máquina?

La palabra “Kernel” (no en la terminología del software) significa “una parte más suave, generalmente comestible de una nuez, semilla o piedra de fruta contenida dentro de su caparazón”.

¿Crees que podemos actualizar la piedra de fruta contenida dentro de su caparazón, sin tocar la cáscara?

Lo mismo se aplica para el kernel de Linux. En el mundo del software, a menudo usamos la palabra ‘abanico’ para mostrar el impacto de un módulo en otros módulos. Para una aplicación, el despliegue puede ser solo los procesos que obtienen información de él. En el caso de los módulos del núcleo, este despliegue es enorme, es decir, las aplicaciones impactadas o los infra son demasiado. Reiniciar todos esos módulos puede causar algún tipo de inconsistencia en el comportamiento del sistema, por lo tanto, para todas las actualizaciones o cambios del kernel, el reinicio de la máquina / dispositivo es un mandato.

Con el fin de abordar este reinicio del sistema, ciertos sistemas operativos hacen cosas de manera que provoquen la menor interrupción en las actividades del usuario. Un ejemplo de esto es el mecanismo de actualización de software en servicio desarrollado por los sistemas de Cisco para actualizar sus dispositivos con cero caída de paquetes y cero pérdida de topología. Para leer más sobre ISSU, puede consultar los siguientes enlaces:

Actualización de software en servicio (ISSU)

Me temo que las respuestas que desee dependerán en gran medida de la definición de “actualización” y “reinicio completo”.
En primer lugar, ni Windows, MacOS ni los BSD admiten este tipo de trucos como sistema operativo inicial (explicaré lo que esto significa) hasta donde puedo decir. De los sistemas menos exóticos para PC (a diferencia de los dispositivos integrados), solo queda Linux donde tiene kexec.

kexec funciona (muy simplificado) al cargar un nuevo kernel en la memoria y transferir el control a esta nueva copia. Sin embargo, primero detiene todos los programas de usuario y, por supuesto, no mantendrá el estado de los módulos del núcleo. Al hacer esto, lo único que está a salvo son todas las inicializaciones de firmware, que especialmente en los servidores pueden tomar varios minutos (diez para que una de las mías le dé una idea). Sin embargo, en términos de disponibilidad, este método solo minimiza el tiempo de inactividad, pero no le permite mantener conexiones abiertas o estados que no sean los persistentes, por lo que si eso es algo que le preocupa, generalmente usa alguna forma de virtualización, equilibrio de carga , solución de falla.

Ahora para el comentario anterior: kexec es compatible con Linux, pero técnicamente podría “arrancar” un núcleo que no sea Linux, por lo que la línea se vuelve aún más borrosa.

El ksplice mencionado anteriormente le permite aplicar parches menores a un kernel en ejecución sin reiniciar nada, pero la advertencia es que esto no puede cambiar muchas partes internas. Esto no se está actualizando en mi libro y sé que al menos algunos antivirus (y virus, por supuesto) hicieron algo similar en Windows antes de la introducción de patchguard. Básicamente, cargaron un controlador de núcleo, que debido a que funcionaba con los mismos privilegios que el núcleo en sí, podía sobrescribir en las estructuras del núcleo.

Entonces, en general, no diría que todavía hay un sistema de PC convencional que le permita actualizar el kernel sin reiniciar completamente el sistema. Puede argumentar que Linux es, pero solo por un tecnicismo (mi opinión). No significa que kexec no sea genial, todavía estoy sorprendido de que funcione en absoluto. Cuanto más aprendo sobre la inicialización de hardware, más soy.

Esperamos algunas respuestas en dispositivos integrados.

Es posible con Linux usando Kexec Systemcall.

El kernel de Linux tiene esta capacidad como parte del kernel mainline.

Oracle proporciona imágenes preconstruidas a través de https://www.ksplice.com/

Linux te permitirá hacer eso