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?
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?
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.
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.
Completamente off-topic per questa domanda (purtroppo), ma collegamento molto interessante :-) – Mecki
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
Anche i gestori di segnale non predefiniti vengono eseguiti sullo stesso stack di segnali. – Zifre
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