¿Los módulos del kernel son específicos para Linux o un mecanismo general?

¿Los módulos del kernel son específicos para Linux o un mecanismo general?

Leí en el libro de Tanenbaum sobre sistemas operativos que existen anillos de protección y el anillo 0 pertenece al kernel. ¿Es en general que se puede decir que "los módulos del kernel manejan la E/S y la administración de memoria del anillo 0" o es el "módulo del kernel" específico para Linux y no aplicable, por ejemplo, para OpenBSD y MULTICS?

Respuesta1

Las ideas presentadas por Andrew Tanenbaum generalmente no son directamente aplicables a Linux (ni a ningún kernel monolítico tradicional de Unix). La respuesta a su pregunta es mucho más simple de lo que sugiere: un módulo del kernel de Linux es un código del kernel que ha sido compilado y vinculado en un archivo separado, en lugar de estar vinculado a la imagen del kernel. Este archivo objeto del kernel independiente (.ko) se puede cargar en el espacio de direcciones del kernel, bajo demanda, en tiempo de ejecución. Prácticamente todos los controladores que se pueden compilar como módulos del kernel también se pueden vincular estáticamente a la imagen del kernel, sin ninguna diferencia en la funcionalidad una vez que se ha cargado el código.

El código del módulo es código del kernel y se ejecuta con el mismo privilegio que todos los demás códigos del kernel. En principio, un módulo del kernel puede reemplazar cualquier código del kernel, pero para hacerlo limpiamente, el kernel propiamente dicho debe proporcionar un mecanismo al que pueda conectarse el módulo.

Una nota al margen sobre la terminología: Protection Rings es un concepto introducido con el sistema operativo Multics. "Anillo 0" a "Anillo 3" son términos específicos de los procesadores Intel. Otras arquitecturas de procesador utilizan otros términos, como modo Usuario/Supervisor. Aunque los procesadores Intel proporcionan cuatro niveles diferentes de privilegios, la mayoría de los sistemas operativos sólo han utilizado dos: Anillo 3 para código de nivel de usuario y Anillo 0 para código de kernel, reflejando los modos Usuario/Supervisor de otros procesadores. (La excepción es OS/2, que utilizaba tres niveles de privilegio).

El concepto de nivel de privilegio se ha ampliado últimamente con la llegada de la tecnología de virtualización a nivel de hardware. Por ejemplo, la arquitectura ARM define tres niveles de privilegios: Usuario, Supervisor e Hipervisor. En broma, se ha dicho que finalmente se utilizan cuatro anillos en las máquinas basadas en Intel: Anillo 3 para código de nivel de usuario, Anillo 0 para código de kernel (máquina virtual), Anillo -1 para código de hipervisor y Anillo -2 para modo SMM.

Respuesta2

El concepto de kernel no se aplica a todos los sistemas operativos. Está muy extendido, pero cómo aplicarlo exactamente a un sistema particular puede ser un tema de debate.

En el caso de los sistemas multiprogramación donde los programas están aislados unos de otros, existe una definición precisa del núcleo: el núcleo es la parte del sistema que tiene acceso a todo. El núcleo es la parte que no está aislada. La función del núcleo es al menos proporcionar el mecanismo de aislamiento, pero puede hacer más. En una arquitectura de kernel tradicional de Unix, que incluye Linux, el kernel también contiene controladores de hardware, protocolos de red, controladores de sistema de archivos, etc.

En la mayoría de los sistemas, el aislamiento entre los programas en ejecución depende de las características del hardware (modos de privilegios del procesador, unidad de administración de memoria). El kernel es entonces la parte del sistema que se ejecuta en el modo de mayor privilegio del procesador, el modo donde se pueden controlar los privilegios de todo el sistema. En los procesadores x86, este modo se denomina “anillo 0”; tenga en cuenta que "anillo 0" es terminología x86, no un concepto general. El concepto general se denomina “modo kernel” o “modo privilegiado” o “modo supervisor”.

La afirmación “los módulos del kernel manejan las E/S y la gestión de memoria del anillo 0” no tiene sentido. El núcleo, en su conjunto, maneja la gestión de la memoria (al nivel de decidir qué proceso posee qué memoria y en qué dirección accede a ella) y la E/S (al nivel de copiar datos dentro y fuera de los periféricos). El kernel, en su conjunto, se ejecuta en el modo kernel del procesador, que es el anillo 0 en un procesador x86.

Un módulo del kernel es una parte del kernel que se carga después del tiempo de arranque. La única diferencia entre un módulo y el código de arranque es cómo se carga. El código de un módulo del kernel se ejecuta con el mismo nivel de privilegios que el código del kernel cargado en el momento del arranque y puede realizar las mismas funciones (cualquier código que se pueda cargar como módulo también se puede incluir en la imagen del momento del arranque). Muchos sistemas Unix modernos tienen módulos de kernel, incluidos Solaris, *BSD, Linux, etc.

información relacionada