
'신호'에 관한 일부 Linux 문서를 읽고 있는데 여전히 다음과 같은 질문이 마음에 떠오릅니다.
1) '신호' 처리기실행'대상' 프로세스가 해당 프로세스를 수신하면 완료됩니다.실행 토큰~로부터스케줄러?
2) 또는 '신호' 처리기실행에서 일어난다무엇이든프로세스 '컨텍스트' 발생실행 중'신호'가 언제 보내졌나요? (하드웨어 ISR과 동일한 스타일)
3) 프로세스 실행은 어떻습니까?우선순위? '신호'를 다룰 때 휩쓸려가는 걸까요?
답변1
1) 신호 처리기는 다음 번에 실행됩니다.대상 프로세스커널 모드에서 사용자 모드로 돌아갑니다.
이는 하드웨어 인터럽트 후 프로세스가 다시 실행되도록 예약된 경우(아직 커널 모드에서 실행되고 있지 않은 경우) 또는 프로세스가 시스템 호출에서 반환될 때(일부 아키텍처에서는 동일함) 발생합니다.
정상적인 작동에서 커널 모드를 종료하면 프로세스는 원래 사용자 모드를 종료한 지점 이후의 다음 명령어로 간단히 돌아갑니다.
그러나 프로세스에 대한 신호가 보류 중인 경우 커널은고쳐 쓰기사용자 모드로의 복귀가 대신 신호 처리기의 첫 번째 명령으로 이동하고 원래 지점에서 신호 처리기에 대한 "특별한" 서브루틴 호출을 수행한 것처럼 보이도록 스택이 수정되도록 프로세스 컨텍스트 왼쪽 사용자 모드(이 "특수" 서브루틴 호출에서 복귀하려면 원래 상태를 복원하기 위한 시스템 호출을 수행하는 것이 포함됩니다).
그래서'대상' 프로세스는실행 토큰~로부터스케줄러신호 처리기가 최종적으로 실행되기 전에 여러 번(어떤 이유로든 커널 모드에 유지되는 경우)
2) 아니요 - 신호 처리기는 프로세스의 사용자 모드 컨텍스트에서만 실행됩니다.
3) 실제로는 실행되지 않습니다.우선순위Linux와 같은 시간 공유 시스템에서는멋진프로세스의 가치가 있으므로쓸어 버리다거기에 없는 것.
스레드로 인해 상황이 복잡해지고 소위실시간스케줄링 정책이므로 위의 설명은 실시간이 아닌 스케줄링 정책(존재했던 유일한 종류의 프로세스)으로 실행되는 단일 스레드 프로세스에만 유효합니다.좋았던 옛날에:-).