Detalles de ejecución de señal

Detalles de ejecución de señal

Estoy leyendo documentación de Linux sobre 'señales' y todavía tengo estas preguntas haciendo ruido en mi mente:

1) Un controlador de 'señal'ejecuciónse realiza cuando el proceso 'objetivo' recibe suficha de ejecucióndesde elProgramador?

2) O controlador de 'señal'ejecucióntiene lugar enlo queEl 'contexto' del proceso sucede.estar ejecutando¿Cuándo se envió la 'señal'? (El mismo estilo que un ISR de hardware).

3) ¿Qué pasa con la ejecución del proceso?prioridades? ¿Se dejan llevar cuando se trata de "señales"?

Respuesta1

1) El manejador de señales se ejecuta la próxima vez queproceso objetivoregresa del modo kernel al modo usuario.

Esto ocurre cuando el proceso está programado para ejecutarse nuevamente después de una interrupción de hardware (y aún no se estaba ejecutando en modo kernel), o cuando el proceso regresa de una llamada al sistema (en algunas arquitecturas, esto es lo mismo).

En funcionamiento normal, al salir del modo kernel, su proceso simplemente regresará a la siguiente instrucción después del punto donde originalmente salió del modo usuario.

Sin embargo, si hay una señal pendiente para su proceso, el kernelvolver a escribirel contexto de su proceso es tal que el regreso al modo de usuario irá a la primera instrucción de su manejador de señales y su pila se habrá modificado para que parezca que ha realizado una llamada de subrutina "especial" al manejador de señales en el punto donde originalmente abandonó el modo de usuario (el regreso de esta llamada de subrutina "especial" implica realizar una llamada al sistema para restaurar el estado original).

Para más detalles leaeste,esteyeste.

Entoncesel proceso 'objetivo' puede recibir suficha de ejecucióndesde elProgramadorcualquier número de veces antes de que finalmente se ejecute el controlador de señales (si permanece en modo kernel por algún motivo).

2) No: el controlador de señales solo se ejecutará en el contexto del modo de usuario de su proceso.

3) En realidad no hay ninguna ejecución.prioridadesen un sistema de tiempo compartido como Linux, a menos que cuente ellindovalor de un proceso, por lo que no se puedebarreralgo que no está ahí.


Las cosas se complican con los hilos y los llamadostiempo realpolíticas de programación, por lo que los comentarios anteriores solo son válidos para procesos de un solo subproceso que se ejecutan con políticas de programación que no son en tiempo real (el único tipo de proceso que existíaen los buenos viejos tiempos:-).

información relacionada