TASK_INTERRUPTIBLE 상태의 선점된 프로세스가 실행 큐에 남아 있어야 하는 이유는 무엇입니까?

TASK_INTERRUPTIBLE 상태의 선점된 프로세스가 실행 큐에 남아 있어야 하는 이유는 무엇입니까?

저는 Linux 커널을 처음 접했습니다.

"Linux 커널 이해", 페이지 279에서 저자는 prev호출 프로세스를 언급하면서 다음과 같이 말합니다 schedule().

schedule()이전 상태를 확인하세요. 실행 가능하지 않고 커널 모드에서 선점되지 않은 경우(4장의 "인터럽트 및 예외에서 복귀" 섹션 참조) 실행 대기열에서 제거해야 합니다. 그러나 비차단 보류 신호가 있고 해당 상태가 TASK_INTERRUPTIBLE인 경우 이 함수는 프로세스 상태를 TASK_RUNNING으로 설정하고 이를 실행 큐에 유지합니다.

prev왜 잠들지 않고 실행 대기열에 머물러야 합니까 ?

prev커널 모드에서 실행할 수 없고 선점되면 어떻게 되나요?

답변1

위에서 말씀하신 내용에 따르면:

...비차단 보류 신호가 있고 상태가 TASK_INTERRUPTIBLE인 경우...

이를 실행 대기열에 유지함으로써 프로세스는 보류 중인 신호를 처리할 수 있는 기회를 갖게 됩니다. 프로세스는 잠들기 전에 보류 중인 신호를 처리해야 합니다.

관련 정보