switch statement - program - Modo usuario vs modo supervisor
switch case c++ menu (2)
Tengo algunas preguntas sobre el modo de usuario y el modo supervisor en máquinas tipo Unix.
¿Cuál es la diferencia entre user-mode y supervisor-mode? Sé que los procesos del usuario no pueden acceder a toda la memoria y el hardware y ejecutar todas las instrucciones. ¿Hay más en esto?
¿Cuáles son las ventajas de tener diferentes modos?
¿Cuáles son los pasos involucrados cuando uno cambia del modo de usuario al modo de supervisor?
Cuando un programa de usuario realiza una llamada al sistema, el modo tiene que cambiar de modo usuario a modo supervisor. He leído en otro lugar que esto se logra en máquinas x86 utilizando un int x80. Entonces, ¿cómo es un cambio de modo diferente del manejo de interrupciones?
¿Cómo es diferente de un cambio de contexto?
¿Cómo se implementan los modos de supervisor en diferentes arquitecturas?
¡Cualquier respuesta o puntero será apreciado!
Existen dos conceptos:
- modos de usuario / kernel de software, que se conmutan entre sí al realizar una llamada al sistema o una llamada al sistema de devolución de llamada,
- modos de usuario / supervisor de hardware, que se conmutan entre sí en las interrupciones.
Muy pocos códigos se ejecutan en modo HW supervisor, principalmente rutinas de interrupción a bajo nivel y al comienzo del inicio. Incluso la mayor parte del modo kernel SW se ejecuta en el modo de usuario HW.
La CPU no permitirá físicamente el acceso a las áreas que están determinadas como "privilegiadas". Debido a que esto se aplica en el hardware, le da a su sistema operativo la capacidad de protegerse a sí mismo. Sin este mecanismo no habría "seguridad" en un sistema operativo, ya que la parte más oscura del código podría simplemente acceder a la memoria kernel y leer todas las contraseñas, por ejemplo.
El cambio del modo de usuario al modo de supervisor es costoso porque es un cambio de contexto, y por razones de seguridad, el caché debe ser enjuagado (de lo contrario, es posible que pueda acceder a algo que no estaba destinado a usar).
En cuanto a un cambio de contexto, esto inherentemente implica un cambio al modo kernel para realizar una tarea. Cuando se dispara la interrupción del temporizador del Programador de la CPU, cambia al modo kernel, selecciona la siguiente tarea para ejecutar y luego vuelve al modo de usuario con la siguiente tarea para reanudar.