¿Cuál es la diferencia entre el cambio de contexto y el manejo de interrupciones?

5

Soy un desarrollador integrado. No he trabajado con RTOS / linux. Estaba pasando por los conceptos de RTOS cuando me topé con el "cambio de contexto". Entiendo que cuando se produce un cambio de contexto, todos los registros junto con PC (Program Counter) se guardan en la pila antes de que se cargue otro subproceso en el procesador. ¿No ocurre algo similar cuando ocurre una interrupción (en un controlador que no utiliza ningún tipo de sistema operativo)?

¿Qué tan diferentes son esos dos términos?

    
pregunta seetharaman

2 respuestas

1

No hay una diferencia fundamental, es más una cuestión de grado: la cantidad de contexto que se necesita guardar.

Cuando se produce un cambio de contexto de subproceso RTOS, se debe guardar todo el estado de la CPU que pueda usar cualquier subproceso. Por lo general, esto incluye todos los registros de CPU, incluidos los registros de bandera o estado, de modo que cuando se restauran, el hilo se reanuda como si nunca hubiera pasado nada.

Cuando se produce una interrupción, todavía hay un cambio de contexto, pero solo el contexto que el controlador de interrupciones realmente necesita usar debe guardarse y luego restaurarse. Si escribe su controlador de interrupciones en un lenguaje de alto nivel, esto será prácticamente equivalente a un cambio de contexto de subproceso completo, porque no hay restricciones sobre qué recursos puede tocar un controlador de interrupciones de este tipo. Sin embargo, si escribe su controlador de interrupciones en lenguaje ensamblador, puede hacer un seguimiento de exactamente qué registros toca y guardar solo esos. Esto permite que la ejecución del controlador de interrupciones sea extremadamente rápida, reduciendo su impacto en el resto del sistema y / o permitiéndole manejar interrupciones a una tasa mayor.

    
respondido por el Dave Tweed
1

Tanto las interrupciones como los cambios de contexto son interrupciones. La principal diferencia está en lo que sucede después de la interrupción o cambio de contexto.

Con una interrupción, el estado actual (o el contexto) se almacena en un área temporal (generalmente, pero no siempre, la pila). El ISR hace su función, y luego el estado se restaura y la rutina de interrupción vuelve. Lo crucial aquí es que el ISR devuelve exactamente donde lo dejó en el mismo hilo .

Un cambio de contexto se parece a una interrupción. El estado se almacena en la pila como de costumbre. Sin embargo, la ubicación de esa pila y cualquier información de estado adicional se almacena en otro lugar (en el hilo ). Un nuevo conjunto de datos de otro hilo se sustituye con los datos actuales y el ISR vuelve. Sin embargo, aquí el ISR no regresa a donde lo dejó, sino que regresa al lugar donde se interrumpió el subproceso recién cambiado la última vez que ocurrió un cambio de contexto mientras se estaba ejecutando.

Es este cambio de ubicación y datos de devolución que, además de lo que puede ser el contenido del ISR, distingue un ISR de un cambio de contexto.

    
respondido por el Majenko

Lea otras preguntas en las etiquetas