2009-05-08 7 views
5

신호가 별도의 스택을 가져야한다는 것을 읽었습니다. 왜 구현 되었습니까?신호 스택

동적으로 할당되었거나 정적으로 할당 되었습니까? 메모리 할당은 어떻게 이루어 집니까? 모든 신호에 대해 동일합니까?

답변

2

신호가 별도의 스택을 필요로하는 이유는 정상적인 스택이 손상되거나 오버플로되면 신호가 여전히 실행될 수 있기 때문입니다. 나는 시그널 스택이 대개 동적으로 할당된다고 생각하지만 어느 쪽이라도 구현 될 수있다. sigaltstack으로 새 신호 스택을 설정할 수 있습니다. 모든 신호에 대해 동일합니다.

+0

우리는 별도의 신호 스택에 모든 기본 핸들러가 있다는 것을 알고 있습니다. 사실입니까? 다른 신호 처리기를 사용하기로 결정하면 어떻게됩니까? 이 특별한 경우는 어떻게 처리됩니까? – Thunderboltz

+0

기본값이 아닌 신호 처리기도 동일한 신호 스택에서 실행됩니다. – Zifre

+0

어떻게 그럴 수 있습니까? 비 기본 신호 핸들러는 동일한 신호 스택에서 실행되지 않습니다. 기본값이 아닌 신호 핸들러는 사용자 프로그램에 정의되며 특수 신호 스택이 아닌 일반 사용자 스택을 사용합니다. BSD 신호 API와 함께 사용되는 기본이 아닌 신호 처리기에 포인터를 전달한다고 생각합니다. – Thunderboltz

1

또 다른 불가사의 한 이유는 사용자 수준 스레드를 만드는 것입니다. Ralf Engelschall의 논문 "Portable Multithreading"(http://www.gnu.org/software/pth/rse-pmt.ps)을 참조하십시오. 그것은 "신호 스택 트램 폴린 트릭"이 사용자 공간 스레딩을 수행하는 데 어떻게 사용되는지 설명합니다.

+0

이 질문 (불행히도),하지만 아주 멋진 링크 :-) – Mecki