¿Los modules kernel son específicos para linux o un mecanismo general?

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

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 module kernel de Linux es un código kernel que ha sido comstackdo y vinculado a un file separado, en lugar de estar vinculado a la image del kernel. Este file de object kernel por separado (.ko) se puede cargar en el espacio de direcciones del núcleo, bajo demanda, en time de ejecución. Prácticamente todos los controlleres que se pueden comstackr como modules del kernel también se pueden vincular estáticamente en la image del kernel, sin ninguna diferencia en la funcionalidad una vez que se ha cargado el código.

El código del module es código de kernel y se ejecuta con el mismo privilegio que todos los demás códigos de kernel. Un module kernel puede en principio replace cualquier código kernel, pero para hacerlo limpiamente, el kernel apropiado debe proporcionar un mecanismo para que el module se enganche.

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

El concepto de nivel de privilegios se ha ampliado recientemente con la llegada de la tecnología de virtualización a nivel de hardware. Por ejemplo, la architecture ARM define tres niveles de privilegios: Usuario, Supervisor e Hipervisor. Bromeando, se ha dicho que finalmente cuatro anillos se usan en 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.

El concepto de kernel no se aplica a todos los sistemas operativos. Está muy extendido, pero la forma exacta de aplicarlo a un sistema en particular puede ser un tema de debate.

En el caso de los sistemas de multiprogtwigción donde los progtwigs están aislados unos de otros, existe una definición precisa del kernel: el kernel es la parte del sistema que tiene acceso a todo. El kernel es la parte que no está aislada. La function del kernel es, al less, proporcionar el mecanismo de aislamiento, pero puede hacer más. En una architecture de núcleo Unix tradicional, que incluye Linux, el núcleo también contiene controlleres de hardware, protocolos de networking, controlleres de sistema de files, etc.

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

La frase "los modules kernel manejan las E / S y la gestión de la memory del anillo 0" no tiene sentido. El kernel, en su set, maneja la gestión de la memory (a nivel de decidir qué process posee qué memory y a qué dirección accede) y E / S (a nivel de copy de datos dentro y fuera de los periféricos). El núcleo, como un todo, se ejecuta en el modo kernel del procesador, que es el anillo 0 en un procesador x86.

Un module kernel es una parte del kernel que se carga después del time de arranque. La única diferencia entre un module y el código de time de inicio es cómo se carga. El código en un module kernel se ejecuta con el mismo nivel de privilegios que el código kernel cargado en el momento del arranque y puede realizar las mismas funciones (cualquier código que pueda cargarse como module también se puede include en la image de time de arranque). Muchos sistemas Unix modernos tienen modules kernel, incluyendo Solaris, * BSD, Linux, etc.