Medir el tiempo pasado en el cambio de contexto?

Un cambio de contexto es el tiempo que transcurre entre dos procesos (es decir, poner en ejecución un proceso en espera y enviar un proceso en ejecución a un estado de espera). Esto sucede en la multitarea. El sistema operativo debe traer la información de estado si está esperando un proceso en la memoria y guardar la información de estado del proceso que se está ejecutando actualmente. 

Para resolver este problema, nos gustaría registrar las marcas de tiempo de la primera y la última instrucción de los procesos de intercambio. El tiempo de cambio de contexto es la diferencia entre los dos procesos. 

Tomemos un ejemplo: supongamos que solo hay dos procesos, P1 y P2. 
P1 se está ejecutando y P2 está esperando la ejecución. En algún momento, el sistema operativo debe intercambiar P1 y P2, supongamos que sucede en la instrucción n de P1. Si t(x, k) indica la marca de tiempo en microsegundos de la k-ésima instrucción del proceso x, entonces el cambio de contexto tomaría t(2, 1) – t(1, n). 

Otro problema es que el intercambio se rige por el algoritmo de programación del sistema operativo y puede haber muchos subprocesos a nivel de kernel que también realizan cambios de contexto. Otros procesos podrían estar compitiendo por la CPU o el kernel que maneja las interrupciones. El usuario no tiene ningún control sobre estos cambios de contexto extraños. Por ejemplo, si en el tiempo t(1, n) el núcleo decide manejar una interrupción, entonces el tiempo de cambio de contexto se exageraría. 

Para evitar estos obstáculos, debemos construir un entorno tal que después de que se ejecute P1, el programador de tareas seleccione inmediatamente P2 para ejecutar. Esto puede lograrse mediante la construcción de un canal de datos, como una tubería entre P1 y P2. 

Es decir, permitamos que P1 sea el remitente inicial y que P2 sea el receptor. Inicialmente, P2 está bloqueado (dormido) mientras espera el token de datos. Cuando se ejecuta P1, entrega el token de datos a través del canal de datos a P2 e inmediatamente intenta leer el token de respuesta. Se produce un cambio de contexto y el programador de tareas debe seleccionar otro proceso para ejecutar. Dado que P2 ahora está en un estado listo para ejecutarse, es un candidato deseable para ser seleccionado por el programador de tareas para su ejecución. Cuando se ejecuta P2, se intercambian los roles de P1 y P2. P2 ahora actúa como remitente y P1 como receptor bloqueado. 

a los resúmenes – 

  1. Bloques P2 en espera de datos de P1
  2. P1 marca la hora de inicio.
  3. P1 envía un token a P2.
  4. P1 intenta leer un token de respuesta de P2. Esto induce un cambio de contexto.
  5. P2 está programado y recibe el token.
  6. P2 envía un token de respuesta a P1.
  7. P2 intenta leer un token de respuesta de P1. Esto induce un cambio de contexto.
  8. P1 está programado y recibe el token.
  9. P1 marca el tiempo final.

La clave es que la entrega de un token de datos induce un cambio de contexto. Sean Td y Tr el tiempo que se tarda en entregar y recibir un token de datos, respectivamente, y sea Tc la cantidad de tiempo que se pasa en un cambio de contexto. En el paso 2, P1 registra la marca de tiempo de la entrega del token, y en el paso 9, registra la marca de tiempo de la respuesta. La cantidad de tiempo transcurrido, T, entre estos eventos, puede expresarse por: 
 

 T = 2 * (Td + Tc + Tr)

Esta fórmula surge debido a los siguientes eventos: 
 

  • P1 envía el token (3)
  • Cambios de contexto de CPU (4)
  • P2 lo recibe (5)
  • P2 luego envía el token de respuesta (6)
  • Cambios de contexto de CPU (7)
  • y finalmente, P1 lo recibe (8)

Preguntas de práctica de GATE CS: 
 

Publicación traducida automáticamente

Artículo escrito por brahmanisai y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *