Internos de cambio de contexto

Quiero aprender y llenar vacíos en mi conocimiento con la ayuda de esta pregunta.

Entonces, un usuario está ejecutando un subproceso (nivel de kernel) y ahora llamayield (Una llamada al sistema supongo). El programador ahora debe guardar el contexto del subproceso actual en el TCB (que está almacenado en algún lugar del kernel) y elegir otro subproceso para ejecutarse, cargar su contexto y saltar a suCS:EIP. Para limitar las cosas, estoy trabajando en Linux ejecutándose sobre la arquitectura x86. Ahora, quiero entrar en los detalles:

Entonces, primero tenemos una llamada al sistema:

1) La función de envoltura parayield empujará los argumentos de llamada del sistema en la pila. Presione la dirección de retorno y genere una interrupción con el número de llamada del sistema en algún registro (por ejemplo,EAX).

2) La interrupción cambia el modo de CPU del usuario al kernel y salta a la tabla de vectores de interrupción y de allí a la llamada real del sistema en el kernel.

3) Supongo que el programador se llama ahora y ahora debe guardar el estado actual en el TCB. Aquí está mi dilema. Desde entonces, el programador utilizará la pila del kernel y no la pila del usuario para realizar su operación (lo que significa queSS ySP debe cambiarse) cómo almacena el estado del usuario sin modificar ningún registro en el proceso. He leído en los foros que hay instrucciones especiales de hardware para guardar el estado, pero luego, ¿cómo el programador obtiene acceso a ellos y quién ejecuta estas instrucciones y cuándo?

4) El programador ahora almacena el estado en el TCB y carga otro TCB.

5) Cuando el programador ejecuta el subproceso original, el control vuelve a la función de envoltura que borra la pila y el hilo se reanuda.

Preguntas secundarias: ¿el programador se ejecuta como un subproceso de solo kernel (es decir, un subproceso que solo puede ejecutar código de kernel)? ¿Hay una pila de kernel separada para cada hilo del kernel o cada proceso?

Respuestas a la pregunta(3)

Su respuesta a la pregunta