¿Cómo se realiza el cambio de contexto en el hardware?

4

Tengo una pregunta sobre cómo se guardaría el estado del proceso durante un cambio de contexto.

Dado un diseño relativamente simple para una CPU que utiliza la arquitectura de estilo de von Neumann, ¿cómo se guarda la imagen del proceso sin anular parte de ese estado en el proceso?

Por ejemplo, si quiero guardar el estado actual de todos los registros, incluidos los registros de dirección de memoria y programa, ¿cómo puedo escribirlos en una ubicación de memoria sin anular la pila y los punteros base en el proceso?

¿Existe un hardware auxiliar que contenga valores intermedios y, de ser así, qué aspecto tiene en un sentido más simple en comparación con el estándar de la industria?

    
pregunta Miles

2 respuestas

2

Existen ambas opciones, de hardware dedicado y enfoques de propósito general.

Modo real X86 (ver descripción) usa la pila de configuración actual para presionar FLAGS, seguido de CS, luego IP.

  

La instrucción iret restaura CS: IP y FLAGS, permitiendo que el programa interrumpido no se vea afectado. Para las interrupciones de hardware, todos los demás registros (incluidos los registros de propósito general) deben conservarse explícitamente (por ejemplo, si una rutina de interrupción utiliza AX, debe presionar AX cuando comienza y abrir AX cuando termina). Es una buena práctica que las interrupciones de software conserven todos los registros excepto aquellos que contienen valores de retorno.

Obviamente, este proceso cambia la pila, pero de manera reversible.

Por el contrario, el modo ARM FIQ (consulte enlace ) tiene un conjunto de registros bancarios. Al ingresar al modo FIQ, el procesador cambia automáticamente a los registros almacenados. Esto guarda en los accesos de memoria.

    
respondido por el pjc50
1

Hablando de manera muy general, el enfoque más común es empujar el estado del proceso a su propia pila y luego cambiar las pilas actualizando el puntero de la pila al valor guardado para que se ejecute el siguiente proceso. Una vez que el estado del proceso se restaura desde esta pila, todo, incluido el puntero de la pila, se restaura a los valores que tenían la última vez que se ejecutó este proceso.

El sistema operativo mantiene una tabla de datos en la que cada entrada representa un proceso en el sistema. Además de almacenar el puntero de pila para cada proceso, tiene indicadores que indican si el proceso está activo o suspendido, cuál es la prioridad del proceso en relación con otros procesos y qué tipo de eventos pueden "reactivar" un proceso suspendido.

    
respondido por el Dave Tweed

Lea otras preguntas en las etiquetas