Estou lendo o livro de sistemas operacionais da Galvin. Galvin explica, o que são modos de kernel e usuário, privilégios de instrução dados para ambos os modos e também sobre o modo bit. Mas estou interessado em saber como o modo muda de um para outro. Basicamente, quero resolver a seguinte pergunta:
Uma CPU possui 2 modos, privilegiados e não privilegiados. Para alterar o modo de pré-previlegiado para não pré-previlegiado
a) É necessária uma interrupção de hardware
b) É necessária uma interrupção do software.
c) É necessária uma instrução privilegiada.
d) É necessária uma instrução não privilegiada.
Pelo que entendi,
do modo de usuário para o modo de kernel - a interrupção de hardware é necessária [como em E / S de disco]. Agora, se o programa do usuário se cansar de acessar uma memória que está além do seu alcance permitido, ocorre uma armadilha, que é basicamente uma interrupção do software que será gerenciada pelo sistema operacional. Agora, no modo de usuário, não podemos executar nenhuma instrução privilegiada. Portanto, uma instrução não privilegiada, como solicitação de E / S, pode mudar o usuário para o modo kernel. Então eu acho que mudar
de não privilegiado (usuário) para privilegiado (kernel) - Interrupção H / W, Interrupção S / W e instruções sem privilégio.
Agora, vamos ao kernel para o modo de usuário. O sistema operacional pode mudar o kernel para o modo de usuário. Portanto, ele simplesmente executará uma instrução privilegiada para mudar do kernel para o modo de usuário. Ele não precisa gerar interrupção H / w ou S / w. Então eu concluo, para mudar
de previlegado para não previlegiado - uma instrução privilegiada servirá.
Estou certo ?
Além disso, ao executar no modo kernel, todas as interrupções serão desativadas, certo? Portanto, a resposta não pode ser (a) ou (b). Além disso, como o sistema operacional é basicamente um software, ele não pode gerar interrupções H / W.
Além disso, como o próprio sistema operacional lida com interrupções, não faz sentido para mim porque é necessário gerar uma interrupção (e repará-la) para mudar do kernel para o modo de usuário.
Informe-me se estiver errado em algum lugar. Qualquer ajuda sobre isso é apreciada.