Durante una interrupción de software x86, ¿cuándo se realiza exactamente un cambio de contexto?

Pregunto esto porque estoy tratando de implementar interrupciones en mi kernel de juguete. Entonces, sé que cuando ocurre una interrupción, la CPU empuja varios bits de información a la pila. Sin embargo, en todas partes que busco en línea se muestra información diferente en un orden diferente. También sé que si la interrupción se produjo en modo de usuario (Anillo 3), la CPU debe cambiar al modo de núcleo (Anillo 0) antes de poder ejecutar el ISR. Creo que tiene algo que ver con elTSS yss yespSin embargo, no estoy seguro. He leído varias explicaciones diferentes en todo Internet y todavía no he encontrado ninguna uniformidad en ninguna de ellas.

Entoncesmi pregunta es, en queexacto El orden hace que la CPU (x86) empuje los datos a la pila durante una interrupción y cuándo lo hace, y en qué momento hace un cambio de contexto a través delTSS ¿Y cómo afecta esto a los datos que se insertan en la pila, si es que lo hacen?

Lo que he aprendido de la investigación hasta ahora (corrígeme si está equivocado): Estoy bastante seguro de que el procesador empujaeflags, cs yeip en la pila, así como unerror code si es necesario durante una interrupción. Sin embargo, ¿es esto todo lo que se empuja? He leído en otra parte quess yesp son empujados pero no sé si esto sucede todo el tiempo, opor qué es empujado

Además, creo que la CPU se verá en elTSS para el anillo0ss yesp yen algún momento cargarlos, pero no estoy seguro de cuándo. ¿Quizás hace esto justo después de que ocurra la interrupción? Además, cómo escs yds manejado durante todo esto? Escs cargado por la CPU desde la entrada en elIDT? Qué pasads? ¿Debo cargar eso manualmente?

Lo siento si este es el lugar equivocado para preguntar, no estoy seguro de dónde más debería hacerlo.

Respuestas a la pregunta(1)

Su respuesta a la pregunta