¿Cuál es la relación entre las llamadas al sistema, el paso de mensajes y las interrupciones?


15

Estoy leyendo el artículo de Wikipedia para la gestión de procesos . Mi enfoque está en Linux. No puedo entender la relación y las diferencias entre la llamada al sistema, el paso del mensaje y la interrupción, en sus conceptos y propósitos. ¿Son todos para procesos para hacer solicitudes al núcleo de recursos y servicios?

Algunas citas del artículo y algunas otras:

  1. Hay dos formas posibles para que un sistema operativo recupere el control del procesador durante la ejecución de un programa para que el sistema operativo realice la desasignación o asignación:

    1. El proceso emite una llamada al sistema (a veces llamada interrupción de software); por ejemplo, se produce una solicitud de E / S que solicita acceder a un archivo en el disco duro.
    2. Se produce una interrupción de hardware; por ejemplo, se presionó una tecla en el teclado o se agota el temporizador (utilizado en la multitarea preventiva).
  2. Hay dos técnicas mediante las cuales un programa que se ejecuta en modo de usuario puede solicitar los servicios del núcleo:

    * System call
    * Message passing
    
  3. Una interrupción es una señal asincrónica que indica la necesidad de atención o un evento síncrono en el software que indica la necesidad de un cambio en la ejecución.

    Una interrupción de hardware hace que el procesador guarde su estado de ejecución y comience la ejecución de un controlador de interrupciones. Las interrupciones de software generalmente se implementan como instrucciones en el conjunto de instrucciones, lo que provoca un cambio de contexto a un controlador de interrupciones similar a una interrupción de hardware.


2
Muy buena pregunta!
Stéphane Gimenez

Respuestas:


12
  1. Todos los sistemas operativos modernos admiten multitarea. Esto significa que el sistema puede ejecutar múltiples procesos al mismo tiempo; ya sea en pseudo-paralelo (cuando solo hay una CPU disponible) o hoy en día con CPU de múltiples núcleos que son comunes en paralelo (una tarea / núcleo).

    Tomemos el caso más simple de que solo hay una CPU disponible. Esto significa que si ejecuta al mismo tiempo dos procesos diferentes (digamos un navegador web y un reproductor de música), el sistema no podrá ejecutarlos al mismo tiempo. Lo que sucede es que la CPU está cambiando de un proceso a otro todo el tiempo; pero esto está sucediendo extremadamente rápido, por lo que nunca lo notas.

    Ahora supongamos que mientras se ejecutan esos dos procesos, presiona el botón de reinicio (chico malo). La CPU detendrá inmediatamente lo que esté haciendo y reiniciará el sistema. Felicidades: generaste una interrupción.

    El caso es similar cuando está programando y desea solicitar un servicio de la CPU. La diferencia es que en este caso ejecuta código de software, generalmente procedimientos de biblioteca que ejecutan llamadas al sistema (por ejemplo, fopenpara abrir un archivo).

    Por lo tanto, 1 describe dos formas diferentes de llamar la atención de la CPU.

  2. La mayoría de los sistemas operativos modernos admiten dos modos de ejecución: modo de usuario y modo de núcleo. Por defecto, un sistema operativo se ejecuta en modo de usuario. El modo de usuario es muy limitado. Por ejemplo, todas las E / S están prohibidas; por lo tanto, no puede abrir un archivo desde su disco duro. Por supuesto, esto nunca sucede en realidad, porque cuando abres un archivo, el sistema operativo cambia de modo transparente de usuario a kernel. En el modo kernel, tiene el control total del hardware.

    Si se pregunta por qué existen esos dos modos, la respuesta más simple es la protección. Los sistemas operativos basados ​​en microkernel (por ejemplo, MINIX 3) tienen la mayoría de sus servicios ejecutándose en modo de usuario, lo que los hace menos dañinos. Los núcleos monolíticos (como Linux) tienen casi todos sus servicios ejecutándose en modo kernel. Por lo tanto, es poco probable que un controlador que falla en MINIX 3 derribe todo el sistema, mientras que esto no es inusual en Linux.

    Las llamadas al sistema son las primitivas utilizadas en los núcleos monolíticos (modelo de datos compartidos) para cambiar del modo de usuario al de núcleo. El paso de mensajes es la primitiva utilizada en microkernels (modelo cliente / servidor). Para ser más precisos, en un mensaje que pasa los programadores del sistema también usan llamadas del sistema para llamar la atención de la CPU. La transmisión de mensajes solo es visible para los desarrolladores del sistema operativo. Los núcleos monolíticos que utilizan llamadas al sistema son más rápidos pero menos confiables, mientras que los microkernel que utilizan el paso de mensajes son más lentos pero tienen un mejor aislamiento de fallas.

    Por lo tanto, 2 menciona dos formas diferentes de cambiar de modo de usuario a kernel.

  3. Para revisar, la forma más común de crear una interrupción de software, también conocida como trap, es ejecutar una llamada al sistema. Las interrupciones, por otro lado, se generan únicamente por hardware.

    Cuando interrumpimos la CPU (ya sea por software o por hardware), necesita guardar en algún lugar su estado actual, el proceso que ejecuta y en qué momento se detuvo; de lo contrario, no podrá reanudar el proceso al volver a cambiar . Eso se llama cambio de contexto y tiene sentido: antes de apagar su computadora para hacer otra cosa, primero debe asegurarse de haber guardado todos sus programas / documentos, etc. para que pueda reanudar desde el punto donde detuvo el la próxima vez lo encenderás :)

    Por lo tanto, 3 explica qué debe hacerse después de ejecutar una trampa o una interrupción y qué tan similares son los dos casos.


1
¡Gracias! (1) En 1, ¿quiere decir que las dos formas de llamar la atención de las CPU son la interrupción del software (el programa con el ejemplo de llamada del sistema) y la interrupción del hardware (el ejemplo de la tecla de reinicio)? (2) En 2, ¿quiere decir que la llamada al sistema y el paso de mensajes son dos formas de interrupción del software? (3) ¿Es correcto que el propósito de la interrupción del software sea que el proceso solicite los servicios y recursos del kernel, y el propósito de la interrupción del hardware no ? En caso afirmativo, ¿cuál es el propósito de la interrupción de hardware?
StackExchange for All

1
(1) Correcto. (2) Bueno, las llamadas al sistema y el paso de mensajes son dos técnicas diferentes que se pueden utilizar para lograr la comunicación entre procesos. Pero es cierto que ambos están basados ​​en software, por lo tanto, para llamar la atención de la CPU, ejecuta una trampa (interrupción de software). (3) En cierto sentido, sí. Un ejemplo de solicitar un servicio de kernel es ejecutar un procedimiento de biblioteca (que se traducirá en 1 o más llamadas al sistema) como creatpara crear un nuevo archivo. Un ejemplo de interrupción es que la impresora envía una señal a la CPU para informarle que la impresión se ha completado.
sakisk

1
¡Gracias! Con respecto a (3), ¿te refieres en un sentido no? ¿Cuáles son los propósitos generales de interrupción de hardware y de interrupción de software?
StackExchange for All

1
Un reinicio del sistema no es una interrupción; no guarda el estado para reanudar después.
psusi

1
@faif reset y NMI (interrupción no enmascarable) son dos pines diferentes en la CPU. Este último provoca una interrupción, lo que significa guardar el estado y saltar al controlador. El primero inicializa la CPU (descartando intencionalmente todos los estados) tal como lo hace al encender (el reinicio se confirma automáticamente al encender). Como parte de la definición de una interrupción es que guarda el estado, el restablecimiento no cumple con esa definición.
psusi

9

Las llamadas al sistema, la transmisión de mensajes (como se describe en el artículo de Wikipedia) y las interrupciones son todas las cosas que causan un cambio de contexto o un cambio del modo de kernel al usuario. Como probablemente sabes:

  • modo kernel: los programas tienen una vista plana o real de la memoria, y los programas pueden leer / escribir libremente en toda la memoria y en todos los dispositivos de hardware directamente sin restricciones.

  • modo de usuario: los programas tienen una vista virtualizada de la memoria, los programas no pueden leer / escribir libremente en toda la memoria y no pueden leer / escribir dispositivos de hardware directamente. Para obtener más memoria o acceder a dispositivos de hardware, el programa de modo de usuario debe llamar al kernel. Las llamadas al sistema y el paso de mensajes son dos métodos para hacer esto.

Las llamadas al sistema implican ejecutar una instrucción de CPU específica o un conjunto de instrucciones, lo que hace que la CPU salte (primero guardando la dirección de retorno en la pila) a una dirección predefinida (no escribible en el modo de usuario) y mueve la CPU del modo de usuario al modo de núcleo (anillo 3 para sonar 0 en la arquitectura Intel).

Las interrupciones de hardware hacen lo mismo, hacen que la CPU salte (primero guardando la dirección de retorno en la pila) a una dirección predefinida y mueve la CPU del modo de usuario al modo kernel. Entonces, en muchas CPU, el software puede invocar el mismo mecanismo (llamado "interrupción de software") y puede usarse para llamadas de CPU.

La transmisión de mensajes implica (al menos para mí) que el núcleo es un "proceso en ejecución" que recibirá una secuencia de mensajes y que existe una función accesible en modo de usuario que enviará dichos mensajes. O podría ser que la función "enviar" simplemente inserte valores en una pila y la próxima vez que el kernel tenga control (ya sea si un proceso se bloquea o se produce una interrupción), saca los mensajes de la pila y los envía a las rutinas internas en consecuencia.

En una arquitectura de microkernel donde el "kernel" real es muy mínimo y la mayoría de las funciones que proporciona un kernel se trasladan a procesos de "servidor", todo lo cual puede ejecutarse simultáneamente en un sistema de CPU múltiple, algo como esto podría ser más útil que el simple enfoque de llamada al sistema antiguo. Interpretar y enrutar "mensajes" al "servidor" del núcleo apropiado sería uno de los pocos trabajos del microkernel.


3
El modo kernel usa las mismas tablas de páginas y presenta la misma vista de memoria virtual que el modo usuario. La diferencia es que tiene acceso a las páginas marcadas como restringidas al modo kernel.
psusi

5

El paso de mensajes es un concepto de nivel superior de un proceso que envía un mensaje a otro. Se implementa mediante una llamada al sistema (kernel), que le pide al kernel que pase el mensaje al otro proceso. Las llamadas al sistema solicitan al núcleo que realice varios servicios para el proceso. Se implementan mediante una interrupción de software / interrupción del sistema, lo que hace que la CPU guarde algún estado en la pila para que pueda regresar más tarde, luego cambie al modo kernel y salte al controlador del kernel.

Tanto las interrupciones de hardware como de software hacen que la CPU guarde el estado, cambie al modo kernel y salte a un controlador definido para esa interrupción. La diferencia es que las interrupciones de hardware son generadas por hardware externo cuando necesitan un poco de atención, como un teclado que indica que se ha presionado una tecla. El controlador del teclado puede leer el puerto IO del teclado para ver qué tecla se presionó y tomar las medidas adecuadas, y luego regresar al programa que se interrumpió.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.