Cambio de contexto

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 31 de enero de 2019; las comprobaciones requieren 7 ediciones .

Cambio de contexto ( interruptor de contexto en inglés  ): en sistemas operativos y entornos multitarea , el proceso de finalizar la ejecución de una tarea (proceso, subproceso, subproceso) por parte del procesador mientras se guarda toda la información necesaria y el estado necesario para la continuación posterior desde el lugar interrumpido. , y restaurar y cargar el estado de la tarea para ser ejecutado por el procesador.

El procedimiento de cambio de contexto incluye la llamada programación de tareas  , el proceso de decidir a qué tarea transferir el control.

Descripción

Un cambio de contexto guarda y restaura la siguiente información:

En el kernel del sistema operativo , las siguientes estructuras están asociadas con cada subproceso:

Cambio de contexto y rendimiento

Además, y muy importante, las siguientes acciones de hardware invisibles al software que afectan el rendimiento ocurren durante un cambio de contexto:

Además, se deben tener en cuenta los siguientes hechos que afectan el estado del sistema:

Cambio de contexto y sistema operativo

Desde el punto de vista de la capa de aplicación, el cambio de contexto se puede dividir en voluntario (voluntario) y forzado (no voluntario): un proceso/subproceso en ejecución puede transferir el control a otro subproceso, o el núcleo puede quitarle el control a la fuerza. eso.

  1. El kernel del sistema operativo puede tomar el control de un proceso/subproceso en ejecución cuando expira el período de tiempo. Desde el punto de vista del programador, esto significa que el control podría escapar del hilo en el "peor" momento, cuando las estructuras de datos podrían estar en un estado inconsistente porque su modificación no se completó.
  2. Ejecutar una llamada al sistema de bloqueo . Cuando una aplicación realiza E/S, el núcleo puede decidir que puede ceder el control a otro subproceso/proceso mientras espera que se complete la E/S de disco o red solicitada por ese subproceso. Esta opción es la más productiva.
  3. Primitivas de sincronización del núcleo. Mutexes , semáforos , etc. Esta es la principal fuente de problemas de rendimiento. Un trabajo insuficientemente pensado con primitivas de sincronización puede dar lugar a decenas de miles y, en casos especialmente desatendidos, a cientos de miles de cambios de contexto por segundo.
  4. Una llamada al sistema que espera explícitamente a que ocurra un evento (seleccionar, sondear, esondear, pausar, esperar, ...) o un punto en el tiempo (dormir, nanodormir, ...). Esta opción es relativamente productiva, ya que el kernel del sistema operativo tiene información sobre los procesos en espera.

Características del procedimiento del planificador

La diferencia entre los sistemas operativos de tiempo real y de tiempo compartido se ve más claramente en la diferencia en la lógica de programación para los cambios de contexto: el programador del sistema de tiempo compartido trata de maximizar el rendimiento de todo el sistema, posiblemente a expensas del rendimiento de procesos individuales. La tarea del programador del sistema en tiempo real es garantizar que los procesos críticos individuales se ejecuten con prioridad, sin importar cuán pesada sea la sobrecarga para el resto del sistema en su conjunto.

Implementaciones de cambio de contexto en sistemas operativos modernos

Como se puede ver en lo anterior, un cambio de contexto es una operación que consume muchos recursos, y cuanto más "elegante" es el procesador, más recursos se vuelve esta operación. En base a esto, el núcleo utiliza una serie de estrategias para, en primer lugar, reducir el número de cambios de contexto y, en segundo lugar, hacer que el cambio de contexto requiera menos recursos.

Métodos para reducir el número de cambios de contexto:

Métodos para reducir la intensidad de recursos del cambio de contexto:

Los ejemplos anteriores se refieren al kernel de Linux , sin embargo, otros sistemas operativos también usan métodos similares, aunque en el caso de los sistemas operativos propietarios es problemático probar/refutar el uso de este.

Notas de terminología

Enlaces