7 votos

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

Soy un desarrollador empotrado. No he trabajado con RTOS/linux. Estaba repasando conceptos de RTOS cuando me topé con la "conmutación de contexto". Entiendo que cuando se produce el cambio de contexto, todos los registros junto con PC (Contador de Programa) se guarda en la pila antes de que otro hilo se carga en el procesador. ¿No ocurre algo similar cuando se produce una interrupción (en un controlador que no utiliza ningún tipo de SO)?

¿Qué diferencia hay entre estos dos términos?

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".

1voto

GSerg Puntos 33571

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

Cuando se produce un cambio de contexto del RTOS, se debe guardar todo el estado de la CPU que cualquier hilo pueda utilizar. Esto normalmente incluye todos los registros de la CPU, incluyendo los registros de bandera o de estado, de modo que cuando se restauran, el hilo se reanuda como si nada hubiera sucedido.

Cuando se produce una interrupción, sigue habiendo un cambio de contexto, pero sólo es necesario guardar el contexto que el gestor de la interrupción realmente necesita utilizar y posteriormente restaurarlo. Si escribes tu manejador de interrupción en un lenguaje de alto nivel, esto será más o menos equivalente a un cambio de contexto de un hilo completo, porque no hay restricciones sobre los recursos que un manejador de interrupción puede tocar. Sin embargo, si escribes tu manejador de interrupción en lenguaje ensamblador, puedes llevar un registro exacto de los registros que toca y guardar sólo esos. Esto permite que la ejecución del manejador de interrupciones sea extremadamente rápida, reduciendo su impacto en el resto del sistema, y/o permitiéndole manejar las interrupciones a un ritmo mayor.

2 votos

Incluso cuando un manejador de interrupción está escrito en un lenguaje de alto nivel, si el manejador no llama a ningún código externo que el compilador no "conozca", el compilador puede ser capaz de generar código de guardado/restauración de registros que ignore los registros que no son utilizados por el propio manejador de interrupción. Dado que la propia naturaleza de un cambio de contexto "completo" es permitir la ejecución de código arbitrario, debe guardar/restaurar todos los registros, independientemente de que el compilador conozca o no algo que realmente los utilice.

1voto

user4245 Puntos 324

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.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X