2012-02-29 8 views
1

특정 신호에 대해 사용자 정의 처리기 기능이 지정되었습니다.이 신호를 수신하면 처리기 기능이 호출됩니다. 핸들러 함수가 사용자 공간 또는 커널 공간에서 실행됩니까? 또는 일반적으로 모든 신호에 대한 작업이 사용자 공간 또는 커널 공간에서 실행됩니까?커널이나 사용자 공간에서 신호 처리기가 실행됩니까?

답변

5

핸들러는 사용자 공간에서 실행되며 프로세스의 가상 주소 공간에만 액세스 할 수 있습니다.

물론 C 표준은 "사용자"와 "커널"에 대해 아무 것도 모릅니다.

4

신호 처리기는 사용자 공간에서 실행해야합니다. 커널 공간에서 실행되면 커널이 모든 프로세스를 제어 할 수 있기 때문에 전체 시스템의 모든 항목에 액세스 할 수 있습니다. 결과적으로 악의적 인 프로그램은 다른 프로그램의 메모리를 손상 시키거나 데이터를 훔치거나 단순히 신호를 자신에게 보냄으로써 악화 될 수 있습니다.

4

일반적으로 신호는 사용자 공간에서 실행됩니다. 그러나 C 언어 표준은 실제로 사용자와 커널 공간 사이의 분리를 정의하지 않기 때문에 이것이 사실이 아닌 C 언어 구현이있을 수 있습니다.

그러나 Windows와 Unix의 모든 버전에서 사용자 공간에서 실행되는 신호는 입니다.

+0

신호 처리기는 C 언어 사양의 일부도 아닙니다. 나는 이것이 C 언어 스펙 밖에 있다고 생각한다. –

+2

@AdamMihalcin : C 언어 스펙은 실제로'signal()'및'raise()'함수와'SIGABRT','SIGFPE','SIGILL','SIGINT','SIGSEGV' 및'SIGTERM '. – caf

+0

@caf K & R을 확인하도록 설득 해 주셔서 감사합니다. 당신 말이 맞습니다. –

0

커널은 사용자 공간으로 신호를 보낼 수 있지만 그 반대는 아니며 전송할 데이터의 양은 매우 제한되어 있으며 신호 처리기는 사용자 공간에서 실행됩니다.

설명 : 사용자 공간에 커널 공간에서 신호를 보낼 수 있도록하기 위해

, 커널은 사용자 공간 프로세스의 PID를 알 필요가있다. 커널 모듈이 PID를 받자 마자, 해당 프로세스 디스크립터를 찾고 신호를 보낸다. 신호와 관련된 모든 정보는 struct siginfo에 저장됩니다.

사용자 공간 프로세스는 신호 처리기 기능을 커널에 등록합니다. 시그널 핸들러 함수의 주소를 프로세스 디스크립터에 추가한다. 이 함수는 특정 신호가 전달 될 때마다 실행됩니다.

관련 문제