En su vida útil, un proceso se ejecuta en modo usuario y modo kernel . El modo Usuario es el modo normal donde el proceso tiene acceso limitado. Mientras que el modo Kernel es el modo privilegiado en el que el proceso tiene acceso sin restricciones a los recursos del sistema como hardware, memoria, etc. Un proceso puede acceder a los registros de hardware de E/S para programarlo, puede ejecutar el código del kernel del sistema operativo y acceder a los datos del kernel en el modo Kernel. Todo lo relacionado con la gestión de procesos, la gestión de hardware de E/S y la gestión de memoria requiere que el proceso se ejecute en modo Kernel.
Es importante saber que un proceso en modo Kernel obtiene poder para acceder a cualquier dispositivo y memoria, y al mismo tiempo, cualquier bloqueo en modo kernel hace que todo el sistema se caiga. Pero cualquier bloqueo en el modo de usuario solo provoca el proceso defectuoso.
El kernel proporciona la interfaz de llamadas al sistema ( SCI ), que son los puntos de entrada para el kernel. Las llamadas al sistema son la única forma en que un proceso puede pasar al modo kernel desde el modo usuario. El siguiente diagrama explica en detalle la transición del modo usuario al modo kernel.
Para entrar en el modo Kernel, un proceso de aplicación.
- Llama a la función de la biblioteca Glibc .
- La biblioteca Glibc conoce la forma correcta de llamar a System Call para diferentes arquitecturas. Configura el paso de argumentos según la interfaz binaria de la aplicación (ABI) de la arquitectura para prepararse para la entrada de la llamada del sistema.
- Ahora Glibc llama a la instrucción SWI (instrucción de interrupción de software para ARM), que pone el procesador en modo Supervisor al actualizar los bits de modo del registro CPSR y salta a la dirección de vector 0x08.
- Hasta ahora la ejecución del proceso estaba en modo Usuario. Después de la ejecución de la instrucción SWI, el proceso puede ejecutar el código del núcleo. La Unidad de administración de memoria (MMU) ahora permitirá el acceso y la ejecución de la memoria virtual del kernel para este proceso.
- Desde la dirección del vector 0x08 , la ejecución del proceso se carga y salta a la rutina del controlador de interrupción SW, que es vector_swi() para ARM.
- En vector_swi() , el número de llamada del sistema ( SCNO ) se extrae de la instrucción SWI y la ejecución salta a la función de llamada del sistema utilizando SCNO como índice en la tabla de llamadas del sistema sys_call_table .
- Después de la ejecución de la llamada al sistema, en la ruta de retorno, los registros del espacio de usuario se restauran antes de iniciar la ejecución en el modo de usuario.
Para admitir el modo kernel y el modo de usuario, el procesador debe tener soporte de hardware para diferentes modos de privilegio. Por ejemplo, el procesador ARM admite siete modos diferentes.
Modo de procesador | Bits de modo CPSR | Observación |
---|---|---|
Usuario | 10000 | Sin privilegios ni modo de usuario |
FIQ | 10001 | Modo de interrupción rápida |
IRQ | 10010 | Modo de interrupción |
Supervisor | 10011 | Modo de núcleo |
Abortar | 10111 | Modo para el manejo de violaciones de memoria |
Indefinido | 11011 | Modo de manejo de instrucciones no definido |
Sistema | 11111 | Igual que el modo Supervisor pero con reingreso |
Conclusión:
para cualquier sistema, el modo privilegiado y el modo sin privilegios son importantes para la protección de acceso. El procesador debe tener soporte de hardware para el modo usuario/núcleo. Las interfaces de llamadas del sistema (SCI) son la única forma de pasar del espacio del usuario al espacio del kernel. El cambio de espacio del kernel se logra mediante la interrupción del software, que cambia el modo del procesador y salta la ejecución de la CPU al controlador de interrupciones, que ejecuta la rutina de llamada al sistema correspondiente.
Publicación traducida automáticamente
Artículo escrito por sandeepjainlinux y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA