저는 Linux 커널을 처음 접했습니다.
"Linux 커널 이해", 페이지 279에서 저자는 prev
호출 프로세스를 언급하면서 다음과 같이 말합니다 schedule()
.
schedule()
이전 상태를 확인하세요. 실행 가능하지 않고 커널 모드에서 선점되지 않은 경우(4장의 "인터럽트 및 예외에서 복귀" 섹션 참조) 실행 대기열에서 제거해야 합니다. 그러나 비차단 보류 신호가 있고 해당 상태가 TASK_INTERRUPTIBLE인 경우 이 함수는 프로세스 상태를 TASK_RUNNING으로 설정하고 이를 실행 큐에 유지합니다.
prev
왜 잠들지 않고 실행 대기열에 머물러야 합니까 ?
prev
커널 모드에서 실행할 수 없고 선점되면 어떻게 되나요?
답변1
위에서 말씀하신 내용에 따르면:
...비차단 보류 신호가 있고 상태가 TASK_INTERRUPTIBLE인 경우...
이를 실행 대기열에 유지함으로써 프로세스는 보류 중인 신호를 처리할 수 있는 기회를 갖게 됩니다. 프로세스는 잠들기 전에 보류 중인 신호를 처리해야 합니다.