신호 실행 세부정보

신호 실행 세부정보

"신호"에 관한 일부 Linux 문서를 읽고 있지만 여전히 마음 속에는 다음과 같은 질문이 있습니다.

1) "신호" 처리기구현하다"대상" 프로세스가 이를 수신하면 완료됩니다.실행 토큰~에서스케줄러?

2) 또는 "신호" 처리기구현하다에 일어난어느프로세스 "컨텍스트" 발생처형될 예정"신호"는 언제 전송됩니까? (하드웨어 ISR과 동일한 스타일)

3) 프로세스는 어떻게 실행되나요?우선순위? "신호"를 처리하는 동안 휩쓸려 가고 있습니까?

답변1

1) 신호 처리기는 다음에 실행될 때 실행됩니다.대상 프로세스커널 모드에서 사용자 모드로 돌아갑니다.

이는 하드웨어 중단 후 프로세스가 다시 실행되도록 예약된 경우(아직 커널 모드에서 실행되고 있지 않은 경우) 또는 프로세스가 시스템 호출에서 반환될 때(일부 아키텍처에서는 동일함) 발생할 수 있습니다.

정상적인 작동에서 커널 모드를 종료하면 프로세스는 원래 사용자 모드를 종료한 지점 이후의 다음 명령어로 간단히 돌아갑니다.

그러나 프로세스에 보류 중인 신호가 있으면 커널은고쳐 쓰기프로세스 컨텍스트를 사용하여 사용자 모드로 돌아가면 신호 처리기의 첫 번째 명령으로 이동하고 스택은 원래 수행했던 신호 처리기에 "특별한" 서브루틴을 만든 것처럼 보이도록 수정됩니다. 호출은 사용자 모드를 종료합니다(반환 이 "특별한" 서브루틴 호출에는 원래 상태를 복원하기 위한 시스템 호출이 포함됩니다.

더 많은 정보를 원하시면 읽어주세요이것,이것그리고이것.

그래서"대상" 프로세스는실행 토큰~에서스케줄러신호 처리기가 최종적으로 실행되기 전의 횟수(어떤 이유로든 커널 모드에서 멈춘 경우).

2) 아니요 - 신호 처리기는 프로세스의 사용자 모드 컨텍스트에서만 실행됩니다.

3) 실제로 아무것도 실행되지 않습니다.우선순위Linux와 같은 시간 공유 시스템에서는 계산하지 않는 한좋아요프로세스 값이므로쓸어 버리다존재하지 않는 것.


스레드와 소위 말하는 것에 따라 상황이 다릅니다.실시간스케줄링 정책, 따라서 위 설명은 비실시간 스케줄링 정책(존재하는 유일한 프로세스 유형)으로 실행되는 단일 스레드 프로세스에만 적용됩니다.좋았던 옛날에:-).

관련 정보