
Algunos artículos dicen que los módulos/controladores pertenecen al espacio del kernel ya que participan en la formación del kernel; (referencia:http://www.freesoftwaremagazine.com/articles/drivers_linux)
Mientras que otros dicen que solo Ring0 (interactúa directamente con el hardware) puede denominarse espacio del kernel (módulos/controladores excluidos como lo son en Ring2). (referencia:http://jaseywang.me/2011/01/04/vfs-kernel-space-user-space-2/)
¿Alguien podría decirme qué punto de vista es el correcto?
Respuesta1
En AMD64 y clones, y en ix86, Linux usa solo los anillos 0 y 3. De todos modos, ninguna otra arquitectura común tiene los "anillos", por lo que usarlos por completo sería totalmente no portátil. Además, Linux es monolítico. La idea completa del anillo es poder ejecutar el microkernel en el anillo 0 y hacer que los procesos de servicio se ejecuten en anillos superiores para que no puedan estropear el microkernel y, finalmente, ejecutar el espacio de usuario en el anillo más alto, donde no puede funcionar. mucho daño.
Respuesta2
¿Podrías proporcionar una referencia? Supongo que estás hablando de Linux, que (que yo sepa) solo usa los Anillos 0 (kernel) y 3 (usuario).
EDITAR:
Creo que depende del diseño del sistema operativo. Podría utilizar los anillos internos, por ejemplo, en una arquitectura de micronúcleo. ¿Está preguntando sobre un sistema específico (por ejemplo, Linux)? Creo que sólo es posible responder esta pregunta para un sistema operativo específico. Sin embargo, en la mayoría de los casos, los sistemas operativos basados en x86 sólo utilizan "kernel" (0) y "usuario" (3).
Respuesta3
Para un sistema operativo convencional (que no se ejecuta bajo virtualización), el espacio del núcleo y el anillo0 son sinónimos en términos de privilegio. Sin embargo, debo explicarlos por separado, para resaltar las diferencias presentes y los puntos en común que comparten.
Kernel space
- El sistema operativo normalmente tendrá dos modos de ejecución: el espacio del kernel y el espacio del usuario. El espacio del kernel es donde vive el código privilegiado del sistema operativo, como el programador, los controladores de dispositivos, etc. Su tarea es administrar el sistema general y asegurarse de que funcione de manera estable. El espacio de usuario contiene procesos como navegadores web, etc. que utilizan la funcionalidad proporcionada por el espacio del kernel.
Rings
- Los procesadores Intel vienen con 4 niveles de privilegios de operación. Estos se llaman anillos. El anillo 0 es el más privilegiado, mientras que el anillo 3 es el menos. Cualquier área de la memoria de la computadora se puede marcar con estos niveles. Si un área de memoria está marcada para acceso mediante ring0, entonces solo el código que reside en ring0 puede acceder a ella, todos los anillos pueden acceder a una región de memoria marcada para acceso mediante ring3. Esto proporciona un mecanismo que garantiza que si ejecuta código menos confiable en niveles de privilegios más bajos (anillo superior) y código más confiable en niveles de privilegios más altos (anillo inferior), el primero no pueda afectar al segundo. Qué código se ejecuta en qué anillo (nivel de privilegio) se puede configurar mediante programación.
Para simplificar el diseño y hacer que el código sea portátil (las CPU que no son Intel como ARM no tienen la arquitectura de 4 anillos), la mayoría de los sistemas operativos solo usan dos de los 4 anillos. Normalmente son ring0 y ring3. El kernel se ejecuta en ring0 y constituye el espacio del kernel (tenga en cuenta que si mañana el desarrollador del sistema operativo hace que el kernel se ejecute en ring1, en lugar de ring0, entonces ring1 constituirá el espacio del kernel). Los programas de aplicación se ejecutan en ring3 y constituyen el espacio de usuario.
Esta es la convención seguida por la mayoría de los sistemas operativos. Sin embargo, si soy el desarrollador del sistema operativo, soy libre de utilizar la arquitectura en anillo como quiera. Considere los siguientes escenarios:
(Kansas= Espacio del núcleo,A NOSOTROS= Espacio de usuario,DD= Controladores de dispositivo o módulos del kernel,RX= anillo X)
- Kansasen r0,A NOSOTROSen r3 - el más utilizado. p.ej. Linux, Windows, etc.
- Kansasen r1,A NOSOTROSen r3: configuración virtualizada, donde el hipervisor se ejecuta en ring0.
- Kansasen r0,DDen r1,A NOSOTROSen r3: algunos proyectos de investigación utilizan esta configuración para proteger el kernel de controladores de dispositivos con errores.
- Kansasen r0,DDen r3,A NOSOTROSen r3: los microkernels usan esta configuración.
- Kansasen r0,A NOSOTROSen r0 - todo en el mismo anillo. Algunos sistemas operativos de investigación, como el singularity de Microsoft, utilizan esta configuración. KS está protegido de Estados Unidos mediante otros mecanismos. (Los sistemas operativos más antiguos como MS DOS, Windows 98, etc. usaban esto. El KS no estaba protegido de EE. UU., por lo que las fallas del sistema operativo eran frecuentes).
- Kansasen r3,A NOSOTROSen r0 - Absurdo. Darle más privilegios a Estados Unidos le permitirá corromper a KS. Nunca he visto una configuración así, pero si quiero escribir un sistema operativo así, nada me impedirá hacerlo.
Nota: He realizado algunas simplificaciones mientras escribía, como llamar a la arquitectura x86 como CPU Intel. No se preocupe por las complejidades en este momento.