Durante uma interrupção do software x86, quando exatamente é feita uma troca de contexto?

Estou perguntando isso porque estou tentando implementar interrupções no meu kernel de brinquedo. Então, eu sei que quando ocorre uma interrupção, a CPU envia vários bits de informação para a pilha. No entanto, em todos os lugares em que procuro on-line, são exibidas informações diferentes em ordem diferente. Eu também sei que se a interrupção ocorreu no modo de usuário (Anel 3), a CPU deve alternar para o modo kernel (Anel 0) antes de poder executar o ISR. Eu acho que tem algo a ver com oTSS ess eesp, no entanto, não tenho certeza. Li várias explicações diferentes em toda a Internet e ainda não encontrei nenhuma uniformidade em nenhuma delas.

assimminha pergunta é, em quêexato ordem: a CPU (x86) envia os dados para a pilha durante uma interrupção e quando isso ocorre; e em que momento ele faz uma troca de contexto viaTSS e como isso afeta os dados que são enviados para a pilha, se houver?

O que aprendi com a pesquisa até agora (corrija-me se estiver errado): Tenho certeza que o processador empurraeflags, cs eeip na pilha, bem como umerror code se necessário durante uma interrupção. No entanto, isso é tudo o que é empurrado? Eu li em outro lugar quess eesp são pressionados, mas não sei se isso acontece o tempo todo, ouporque é empurrado.

Além disso, acredito que a CPU procurará noTSS para o Ring0ss eesp eem algum ponto carregá-los, mas não tenho certeza de quando. Talvez faça isso logo após a interrupção? Além disso, como écs eds tratado durante tudo isso? Écs carregado pela CPU a partir da entrada noIDT? Sobreds? Preciso carregar isso manualmente?

Desculpe se este é o lugar errado para perguntar, não sei onde mais devo.

questionAnswers(1)

yourAnswerToTheQuestion