2009-05-08 24 views
5

He leído que las señales necesitan tener una pila separada, ¿por qué y cómo crees que se implementa?Stack Stack

¿Están asignados dinámicamente o asignados estáticamente? ¿Cómo se hace la asignación de memoria? ¿Es lo mismo para todas las señales?

Respuesta

2

La razón por la cual las señales necesitan una pila separada es que, si la pila normal se corrompe o se desborda, la señal aún se puede ejecutar. Creo que la pila de señales generalmente se asigna dinámicamente, pero podría implementarse de cualquier manera. Puede establecer una nueva pila de señales con sigaltstack. Es lo mismo para todas las señales.

+0

Entonces, como tengo entendido, tenemos todos los controladores predeterminados en la pila de señales por separado, ¿es cierto? ¿Qué sucede cuando decidimos usar un manejador de señal diferente? ¿Cómo se cuida este caso especial? – Thunderboltz

+0

Los manejadores de señal no predeterminados también se ejecutan en la misma pila de señal. – Zifre

+0

¿Cómo podría ser posible? Los manejadores de señal no predeterminados no se ejecutarían en la misma pila de señal. Los manejadores de señal no predeterminados se definirían en el programa de usuario y usarían la pila de usuario normal y no la pila de señal especial. Creo que pasamos el puntero al manejador de señal no predeterminado que luego se usa con la API de señal BSD. – Thunderboltz

1

Otra razón más esotérica es crear subprocesos de nivel de usuario. Vea el documento, "Multithreading portátil" por Ralf Engelschall: http://www.gnu.org/software/pth/rse-pmt.ps. Describe cómo se usa el "truco trampolín de la pila de señal" para afectar el enrutamiento del espacio de usuario.

+0

Completamente fuera de tema para esta pregunta (desafortunadamente), pero un enlace muy bueno :-) – Mecki