2009-05-08 14 views
5

Ho letto che i segnali devono avere uno stack separato, perché e come pensi che sia implementato?Stack di segnali

Sono allocati dinamicamente o allocati staticamente? Come viene eseguita l'allocazione della memoria? È lo stesso per tutti i segnali?

risposta

2

La ragione per cui i segnali richiedono uno stack separato è che, se lo stack normale viene danneggiato o trabocca, il segnale può ancora essere eseguito. Penso che lo stack di segnali sia solitamente assegnato dinamicamente, ma potrebbe essere implementato in entrambi i modi. È possibile impostare un nuovo stack di segnali con sigaltstack. È lo stesso per tutti i segnali.

+0

Quindi, come ho capito, abbiamo tutti i gestori predefiniti sullo stack del segnale separato, è vero? Cosa succede quando decidiamo di utilizzare un diverso gestore di segnale? Come si cura questo caso speciale? – Thunderboltz

+0

Anche i gestori di segnale non predefiniti vengono eseguiti sullo stesso stack di segnali. – Zifre

+0

Come potrebbe essere possibile? I gestori di segnale non predefiniti non verrebbero eseguiti sullo stesso stack di segnali. I gestori di segnale non predefiniti sarebbero definiti nel programma utente e utilizzerebbero il normale stack utente e non lo stack di segnali speciali. Penso che passiamo il puntatore al gestore di segnale non predefinito che viene successivamente utilizzato con l'API del segnale BSD. – Thunderboltz

1

Un altro motivo, più esoterico, è creare thread a livello utente. Vedi il documento "Portable Multithreading" di Ralf Engelschall: http://www.gnu.org/software/pth/rse-pmt.ps. Descrive come viene utilizzato il "trampolino trucco stack di segnale" per effettuare il threading di userspace.

+0

Completamente off-topic per questa domanda (purtroppo), ma collegamento molto interessante :-) – Mecki