Estoy leyendo el libro de Sistemas Operativos de Galvin. Galvin explica qué son los modos kernel y de usuario, privilegios de instrucción otorgados para ambos modos y también sobre el modo-bit. Pero me interesa saber cómo cambia el modo de uno a otro. Básicamente quiero resolver la siguiente pregunta:
Una CPU tiene 2 modos, privilegiados y no privilegiados. Para cambiar el modo de previo a no previo
a) Se necesita una interrupción de hardware
b) Se necesita una interrupción de software.
c) Se necesita una instrucción privilegiada.
d) Se necesita una instrucción no privilegiada.
Por lo que entiendo,
del modo de usuario al modo de núcleo: se necesita la interrupción de hardware [como en la E / S de disco]. Ahora, en caso de que el programa de usuario se canse para acceder a una memoria que está más allá de su rango permitido, se produce una trampa, que es básicamente una interrupción de software que será manejada por el sistema operativo. Ahora, en modo de usuario no podemos ejecutar ninguna instrucción privilegiada. Por lo tanto, una instrucción no privilegiada, como una solicitud de E / S, puede cambiar al usuario al modo kernel. Entonces creo que cambiar
de no privilegiado (usuario) a privilegiado (núcleo): la interrupción H / W, la interrupción S / W y la instrucción no privilegiada funcionarán.
Ahora llegando a kernel a modo de usuario. El sistema operativo puede cambiar el kernel al modo de usuario. Por lo tanto, simplemente ejecutará una instrucción privilegiada para cambiar de kernel a modo de usuario. No necesita generar interrupción H / w o S / w. Entonces concluyo, para cambiar
de previo a no previo - una instrucción privilegiada servirá.
Estoy en lo cierto?
Además, cuando se ejecuta en modo kernel, todas las interrupciones se desactivarán, ¿verdad? Entonces la respuesta no puede ser (a) o (b). Además, dado que el sistema operativo es básicamente un software, no puede generar interrupciones H / W.
Además, dado que el sistema operativo mismo maneja las interrupciones, no tiene sentido para mí por qué tiene que generar una interrupción (y mantenerla) para cambiar del modo kernel al modo usuario.
Por favor, avíseme si me equivoco en alguna parte. Cualquier ayuda con respecto a esto es apreciada.