llamada al sistema y cambio de contexto


Lamento hacer esta pregunta cuando ya se ha hecho, pero no pude obtener una claridad de ellos. Así que estoy haciendo las siguientes preguntas relacionadas para obtener la diferencia entre la llamada al sistema (mode-switch) y el interruptor de contexto

  • ¿Por qué se dice que la llamada al sistema no requiere cambio de contexto cuando el contexto de la proceso de hacer la llamada tiene que ser guardado y luego recargado. ¿Es solo porque de acuerdo con la definición de interruptor de contexto un interruptor tiene que ser hecho a otro proceso.

  • Qué significa que cuando se realiza una llamada al sistema, el núcleo se ejecuta en "contexto de usuario".

  • Según el artículo de wikipedia: http://en.wikipedia.org/wiki/Context_switch

Un cambio de contexto no es necesario para una llamada al sistema, pero depende del sistema operativo y puede ocurrir un cambio de contexto durante una llamada al sistema. Me pregunto qué pasaría en el caso de que el cambio de contexto tenga lugar en el hora de la llamada al sistema. ¿Algún ejemplo ?

Author: vjain27, 2012-02-11

2 answers

Debe entender que un contexto de subproceso/proceso tiene varias partes, una, directamente asociada con la ejecución y se mantiene en la CPU y ciertas tablas del sistema en la memoria que utiliza la CPU (por ejemplo, tablas de páginas), y la otra, que es necesaria para el sistema operativo, para la contabilidad (piense en los varios ID, manejadores, permisos especiales específicos del sistema operativo, conexiones de red, etc.).

Un cambio de contexto completo implicaría intercambiar ambos, el subproceso/proceso actual antiguo desaparece por un while y el nuevo hilo/proceso actual entra por un tiempo. Esa es la esencia de la programación de subprocesos/procesos.

Ahora, las llamadas al sistema son muy diferentes w.r.t. entre sí.

Considere algo simple, por ejemplo, la llamada al sistema para solicitar la fecha y hora actuales. La CPU cambia del modo de usuario al modo de kernel, preservando los valores de registro de modo de usuario, ejecuta algún código de kernel para obtener los datos necesarios, lo almacena en la memoria o registra que el llamante puede acceso, restaura los valores de registro de modo de usuario y devuelve. No hay mucho de cambio de contexto aquí, solo lo que se necesita para la transición entre los modos, el usuario y el kernel.

Considere ahora una llamada al sistema que implica el bloqueo de la persona que llama hasta que algún evento o disponibilidad de datos. La manipulación de mutexes y la lectura de archivos serían ejemplos de tales llamadas al sistema. En este caso, el núcleo se ve obligado a guardar el contexto completo del llamante, marcarlo como bloqueado para que el programador no pueda ejecutarlo hasta que llegue ese evento o dato, y cargue el contexto de otro subproceso/proceso listo, para que pueda ejecutarse.

Así es como las llamadas al sistema se relacionan con los cambios de contexto.

La ejecución del kernel en el contexto de un usuario o un proceso significa que cada vez que el kernel funciona en nombre de un determinado proceso o usuario, tiene que tener en cuenta el contexto de ese usuario / proceso, por ejemplo, el ID de proceso/hilo/usuario actual, el directorio actual, la configuración regional, los permisos de acceso (por ejemplo, archivos), todas esas cosas, que pueden ser diferentes entre diferentes procesos / hilos / usuarios.

Si los procesos tienen espacios de direcciones individuales, los espacios de direcciones también forman parte del contexto del proceso. Por lo tanto, cuando el núcleo necesita acceder a la memoria de un proceso (para leer / escribir datos de archivos o paquetes de red), tiene que tener acceso al espacio de direcciones del proceso, IOW, tiene que estar en su contexto (sin embargo, no significa que el núcleo tenga que cargar el contexto completo solo para acceder a la memoria espacio de direcciones específico).

Es útil?

 54
Author: Alexey Frunze,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-02-11 08:37:25

El cambio de modo ocurre cuando un usuario solo quiere acceder a cosas que solo son adecuadas para un modo de kernel

 -2
Author: dennis,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-01 07:33:03