Soy un desarrollador integrado. No he trabajado con RTOS/linux. Estaba revisando los conceptos de RTOS cuando me topé con el 'cambio de contexto'. Entiendo que cuando ocurre un cambio de contexto, todos los registros junto con PC (Contador de programa) se guardan en la pila antes de que se cargue otro subproceso en el procesador. ¿No sucede algo similar cuando ocurre una interrupción (en un controlador que no usa ningún tipo de sistema operativo)?
¿Qué tan diferentes son esos dos términos?
No hay una diferencia fundamental, es más una cuestión de grado: la cantidad de contexto que debe guardarse.
Cuando se produce un cambio de contexto de subproceso RTOS, se debe guardar todo el estado de la CPU que podría usar cualquier subproceso. Esto generalmente incluye todos los registros de la CPU, incluidos los registros de bandera o de estado, de modo que cuando se restauran, el subproceso se reanuda como si nada hubiera pasado.
Cuando ocurre una interrupción, todavía hay un cambio de contexto, pero solo se debe guardar el contexto que el controlador de interrupciones realmente necesita usar y luego restaurarlo. Si escribe su controlador de interrupciones en un lenguaje de alto nivel, esto será más o menos equivalente a un cambio de contexto de subproceso completo, porque no hay restricciones sobre qué recursos podría tocar dicho controlador de interrupciones. Sin embargo, si escribe su controlador de interrupciones en lenguaje ensamblador, puede realizar 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 velocidad más alta.
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 el cambio de contexto.
Con una interrupción, el estado actual (o contexto) se almacena en un área temporal (generalmente, pero no siempre, la pila). El ISR luego hace lo suyo, y luego se restaura el estado y regresa la rutina de interrupción. Lo crucial aquí es que el ISR regresa exactamente donde lo dejó en el mismo hilo .
Un cambio de contexto parece 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 subproceso ). A continuación, se sustituye un nuevo conjunto de datos de otro subproceso con los datos actuales y vuelve el ISR. Aquí, sin embargo, el ISR no regresa a donde lo dejó, sino que regresa a donde se interrumpió el subproceso recién cambiado la última vez que se produjo un cambio de contexto mientras se estaba ejecutando.
Es este cambio de ubicación y datos de retorno lo que, además de cuál puede ser el contenido de la ISR, distingue a una ISR de un cambio de contexto.
m.alin
Pablo A. Clayton
KyranF
verdraman