- Cuando un proceso envía una señal a otro proceso, ¿bajo qué circunstancias espera el proceso de recepción hasta que se reprograma para su ejecución?
- ¿En qué circunstancias se invoca inmediatamente el controlador de señal instalado?
- ¿Cuánta sobrecarga incurre el proceso al elevar una señal en comparación con simplemente llamar al manejador de señal correspondiente directamente?
Respuesta
Sobre la entrega de señales, TLPI establece que las señales son "normalmente" entregado cuando una tarea está próximo programado, cuando se cambia de modo de núcleo a modo de usuario, o "inmediatamente" cuando la tarea se está ejecutando (presumiblemente "inmediatamente "tendría que suceder disparando primero una interrupción, de lo contrario, ¿cómo podría hacer eso?". Bueno, sea lo que sea que esto signifique, no es estrictamente vinculante, pero está muy cerca de lo que sucede.
Debe distinguir entre señales "normales" y en tiempo real, así como entre señales "normales" que se generan de forma síncrona, la mayoría de las veces debido a un evento de hardware (por ejemplo, falla de segmentación) y las que no (se generó asnychronously).
señales en tiempo real son cola señales, normales no son. Eso significa que la implementación de señales normales probablemente sea más bien algo así como una palabra por tarea que sirve como máscara de bits.
Generar una señal "normal" significa establecer un bit, y cuando el SO luego decide si una señal debe ser entregada, prueba la palabra contra cero, y si es necesario determina qué bit (s) se establecieron, y llama al gestor (es) de señales, en su caso, en consecuencia.
La única razón práctica por la cual uno necesita saber esto es porque es posible "perder" las señales. Si se generan dos o más señales antes de que se entregue la primera, sigue siendo solo una señal.
La implementación de señales en tiempo real (que son necesarias para cola hasta una longitud dependiente de la implementación) es obviamente mucho más complicada.
Las señales que suceden debido a un evento de hardware (por ejemplo segfault) se generan de forma síncrona, del mismo modo que si el proceso se llama kill
(capítulo 22.4 TLPI), es decir, se entregan "inmediatamente" por dos motivos. En primer lugar, no tiene sentido hacer otra cosa, y segundo, ya hay un cambio de kernel/usuario que ocurre cuando el controlador de trampa regresa. Entonces la entrega siempre es "inmediata" de todos modos.
Básicamente, las señales son asíncronas. Confían en los manejadores de señal para ejecutar el código cuando se recibe una señal porque nunca se sabe cuándo eso se debe a factores tales como el programador del proceso. La latencia de enviar una señal se basa en la interrupción de hardware/software, que se basa en la velocidad del reloj.
Si desea saber cómo se implementa algo en Linux, consulte los estándares POSIX.
gran información sobre Señales:
http://www.gnu.org/software/libc/manual/html_node/index.html#toc_Signal-Handling
Cuando se genera una señal, se convierte en pendientes. Normalmente permanece pendiente por solo un corto período de tiempo y luego es entregado al proceso que fue señalado. Sin embargo, si ese tipo de señal es actualmente bloqueado, puede permanecer pendiente indefinidamente - hasta que las señales de ese tipo sean desbloqueadas. Una vez desbloqueado, se entregará inmediatamente.
Otro extracto:
Cuando se entrega la señal, ya sea de inmediato o después de un largo de retardo, se toma la acción especificada para esa señal.
- 1. ¿Cuánto tiempo lleva compilar Glibc?
- 2. Conociendo C++, ¿cuánto tiempo lleva aprender Java?
- 3. ¿Cuánto tiempo lleva ejecutar un ciclo?
- 4. ¿Cuánto tiempo lleva hacer una implementación de yodlee?
- 5. ¿Cuánto tiempo lleva un módulo en el núcleo de Perl?
- 6. ¿Cuánto tiempo lleva cada segmento de tiempo de subprocesos en Windows XP?
- 7. ¿Cuánto tiempo le lleva a una aplicación de iOS reconocer un cambio en el DNS?
- 8. Mida el tiempo que lleva ejecutar una consulta t-sql
- 9. ¿Cuánto tiempo lleva construir un índice usando ALTER TABLE en MySQL?
- 10. ¿Cuánto tiempo lleva Google Maps en la memoria caché de los archivos kml?
- 11. Crear índice lleva demasiado tiempo
- 12. ¿Cómo puedo calcular cuánto tiempo tarda una función en jQuery?
- 13. ¿Cuánto tiempo durará una aplicación ASP.NET MVC?
- 14. ¿Cuánto tiempo puede durar una página web?
- 15. ¿Cuánto tiempo durará mi sesión?
- 16. ¿Cuánto tiempo toma un GC?
- 17. mysql "drop database" lleva tiempo, ¿por qué?
- 18. ¿Cuánto tiempo conserva su código?
- 19. Ordenamiento MySQL Resultados lleva mucho tiempo
- 20. ¿Cómo puedo cronometrar con precisión el tiempo que lleva invocar una función en el iPhone?
- 21. MySQL: ¿cuánto tiempo crear un índice?
- 22. ¿Cuánto tiempo debo mantener las URL antiguas?
- 23. ¿Cuánto tiempo puedo retener un ContentResolver en una AsyncTask?
- 24. ¿Cuánto tiempo debe aprobarse una aplicación para Amazon AppStore?
- 25. Averigüe cuánto tiempo tomó una solicitud de Ajax para completar
- 26. ¿Qué sucede cuando una única solicitud lleva mucho tiempo con estos servidores io no bloqueantes?
- 27. ¿Cuánto tiempo y esfuerzo gasta en IE6?
- 28. Android: ¿Por cuánto tiempo OpenGL almacena una textura?
- 29. JS: ¿Cuánto tiempo se tarda en llamar a una función?
- 30. ¿Cuánto tiempo pueden ser los parámetros en una solicitud get?