Tanto las interrupciones como los cambios de contexto son interrupciones. La principal diferencia está en lo que ocurre 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 (normalmente, pero no siempre, la pila). El ISR hace entonces lo suyo, y el estado se restablece y la rutina de interrupción regresa. 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 rosca ). Un nuevo conjunto de datos de otro hilo es entonces sustituido por los datos actuales y el ISR regresa. Aquí, sin embargo, el ISR no vuelve al punto en el que se quedó, sino que vuelve al punto en el que se interrumpió el hilo 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 del contenido del ISR, distingue a un ISR de un cambio de contexto.
1 votos
AFAIK, en la mayoría de los microcontroladores el ahorro de contexto cuando se produce una interrupción ocurre en el hardware mientras que el ahorro de contexto en un RTOS ocurre en el software
0 votos
Un manejador de interrupciones puede no necesitar guardar todo el estado del hilo (teniendo relativamente poco trabajo que hacer). Algunos ISAs proporcionan registros shadow/banked (MIPS/ARM) para evitar la sobrecarga de guardar/restaurar o guardar automáticamente una cantidad limitada de estado (lo que es comparable a tener tales registros shadow/banked). (Por cierto, la Extensión Específica de Aplicaciones MIPS MultiThreading extiende los Conjuntos de Registros Sombra (31 GPRs) a los Contextos de Hilo). [Demasiado corto para una respuesta, pero una respuesta rápida].
0 votos
Cada contexto suele tener su propia pila asignada, por lo que es más rápido cambiar a ellos que tener que guardar todos los valores de los registros en la pila antes de cambiar y sacarlos después. Los controladores de interrupción en un microcontrolador a menudo tienen que hacer esto manualmente en el código, pero si se utiliza un RTOS en el microcontrolador como uCOS-II/III de Jean C Labrosse, cada tarea/contexto tiene su propia pila y "contexto".
0 votos
@PaulA.Clayton puede elaborar su respuesta, no tengo idea de cómo un hilo se ejecuta sólo una comprensión de alto nivel. gracias sin embargo