프로세스가 커널 모드에 있을 때 커널 블록은 기본적으로 신호를 일시 중지합니까?

프로세스가 커널 모드에 있을 때 커널 블록은 기본적으로 신호를 일시 중지합니까?

컴퓨터 시스템: 프로그래머의 관점에서는 다음과 같이 말합니다.

8.5.1 신호 용어

보류 중인 신호는 최대 한 번 수신됩니다. 각 프로세스에 대해 커널은 pending비트 벡터에 보류 중인 신호 세트를 유지하고 비트 벡터에 차단 신호 세트를 유지합니다 blocked.

8.5.3 신호 수신

언제커널은 프로세스 p를 커널 모드에서 사용자 모드로 전환합니다. (예를 들어, 시스템 호출에서 복귀하거나 컨텍스트 전환을 완료하는 등) p에서 차단되지 않은 보류 신호 세트(보류 및 ~차단)를 확인합니다. 세트가 비어 있으면(일반적인 경우) 코어는 p의 논리적 제어 흐름(다음 I)의 다음 명령어로 제어를 전달합니다. 그러나 세트가 비어 있지 않으면커널은 세트에서 일부 신호 k를 선택합니다.(보통 가장 작은 k) p가 신호 k를 수신하도록 강제합니다. 신호를 수신하면 프로세스에서 특정 작업이 트리거됩니다.프로세스가 완료되면, 그런 다음 제어는 p의 논리적 제어 흐름에서 다음 명령어(I next)로 다시 전달됩니다.

  1. 프로세스가 커널 모드에 있을 때 커널 블록은 기본적으로 신호를 일시 중지합니까?

    blocked프로세스가 커널 모드에 있을 때 커널은 보류 중인 신호에 대해 비트 벡터의 비트를 설정합니까?

    이 경우 커널은 기본적으로 신호를 차단합니까? 아래 인용문의 "암시적 차단 메커니즘"과 같은 의미인가요?

    8.5.4 신호 차단 및 차단 해제

    Linux는 암시적 및 명시적 차단 신호 메커니즘을 제공합니다.

    암시적 차단 메커니즘. 기본적으로 커널은 핸들러가 현재 처리하고 있는 보류 중인 신호 유형을 차단합니다.

  2. 선택한 정지 신호 k가 처리를 완료한 후 프로세스가 커널 모드에 있는 동안 정지된 나머지 정지 신호가 처리됩니까? (인용문에는 "프로세스가 작업을 완료하면 제어가 p의 논리적 제어 흐름(I 다음)의 다음 명령으로 다시 전달됩니다."라고 나와 있습니다.)

감사해요.

답변1

아니요, 커널은 차단 벡터를 수정하지 않습니다.

컨텍스트가 커널 모드에서 프로세스로 전환될 때만 신호가 프로세스에 전달됩니다. 신호 처리기가 완료되면 프로세스 호출이 sigreturn(2)커널에 제어권을 반환합니다.

2번에 대해서는 예, 아니오가 있습니다. 예, 커널은 다음에 프로세스가 실행되도록 예약될 때 보류 중인 다른 신호를 전달합니다. 그러나 대부분의 신호에 대해 동일한 유형의 여러 보류 신호(예: SIGCHLD)는 한 번만 전송됩니다. 이것이 위에서 설명한 암시적 차단입니다.

SIGSEGV일부 신호는 사용 중에 실행 중인 신호 처리기를 중단할 수 있습니다 SA_NODEFER(참고자료 참조 sigaction(2)).

관련 정보