Cambio de contexto


En informática , un cambio de contexto es el proceso de almacenar el estado de un proceso o subproceso , para que pueda restaurarse y reanudar la ejecución en un momento posterior. Esto permite que múltiples procesos compartan una sola unidad central de procesamiento (CPU) y es una característica esencial de un sistema operativo multitarea .

El significado preciso de la frase "cambio de contexto" varía. En un contexto multitarea, se refiere al proceso de almacenar el estado del sistema para una tarea, de modo que esa tarea se pueda pausar y reanudar otra tarea. Un cambio de contexto también puede ocurrir como resultado de una interrupción , como cuando una tarea necesita acceder al almacenamiento en disco , liberando tiempo de CPU para otras tareas. Algunos sistemas operativos también requieren un cambio de contexto para moverse entre el modo de usuario y las tareas del modo kernel . El proceso de cambio de contexto puede tener un impacto negativo en el rendimiento del sistema. [1] : 28 

Los cambios de contexto suelen ser computacionalmente intensivos, y gran parte del diseño de los sistemas operativos es para optimizar el uso de cambios de contexto. Cambiar de un proceso a otro requiere una cierta cantidad de tiempo para realizar la administración: guardar y cargar registros y mapas de memoria, actualizar varias tablas y listas, etc. Lo que realmente implica un cambio de contexto depende de las arquitecturas, sistemas operativos y la cantidad de recursos compartidos (los subprocesos que pertenecen al mismo proceso comparten muchos recursos en comparación con procesos no relacionados que no cooperan). Por ejemplo, en el kernel de Linux , el cambio de contexto involucra registros de cambio, puntero de pila (es el típico registro de puntero de pila ), contador de programa , vaciado delbúfer de búsqueda de traducción (TLB) y cargar la tabla de páginas del siguiente proceso que se ejecutará (a menos que el proceso anterior comparta la memoria con el nuevo). [2] [3] Además, el cambio de contexto análogo ocurre entre subprocesos de usuario , especialmente subprocesos verdes , y a menudo es muy ligero, guardando y restaurando un contexto mínimo. En casos extremos, como cambiar entre rutinas en Go , un cambio de contexto es equivalente a un rendimiento de rutina , que es solo marginalmente más costoso que una llamada de subrutina .

Más comúnmente, dentro de algún esquema de programación , un proceso debe desconectarse de la CPU para que pueda ejecutarse otro proceso. Este cambio de contexto puede activarse cuando el proceso no se puede ejecutar, por ejemplo, al esperar a que se complete una operación de E/S o de sincronización . En un sistema multitarea preventivo , el programador también puede cambiar los procesos que aún se pueden ejecutar. Para evitar que otros procesos se queden sin tiempo de CPU, los programadores preventivos a menudo configuran una interrupción del temporizador para que se active cuando un proceso excede su intervalo de tiempo . Esta interrupción asegura que el programador obtenga el control para realizar un cambio de contexto.

Las arquitecturas modernas están impulsadas por interrupciones . Esto significa que si la CPU solicita datos de un disco, por ejemplo, no necesita estar ocupado esperando hasta que termine la lectura; puede emitir la solicitud (al dispositivo de E/S) y continuar con alguna otra tarea. Cuando finaliza la lectura, la CPU puede ser interrumpida (por un hardware en este caso, que envía una solicitud de interrupción a PIC ) y presentar la lectura. Para las interrupciones, se instala un programa llamado manejador de interrupciones , y es el manejador de interrupciones el que maneja la interrupción desde el disco.