Linux 시스템 호출 구현은 캡처된 신호를 어떻게 처리합니까?

Linux 시스템 호출 구현은 캡처된 신호를 어떻게 처리합니까?

나는 일반적으로 신호가 어떻게 작동하는지 이해하고 시스템 호출이 작업 상태를 변경하거나 중요한 섹션에서 신호 인터럽트를 방지한다는 것을 이해 TASK_INTERRUPTIBLE합니다 TASK_UNINTERRUPTIBLE. 이제 TASK_INTERRUPTIBLE작업 상태가 이고 시스템 호출 중에 신호가 포착되면 어떤 일이 발생하는지 이해하려고 합니다 .

내 질문은 다음과 같습니다.

  • 시스템 호출 구현(예: read())이 신호를 처리하는 방법. 예를 들어 의 경우 read()ext2 파일 시스템 드라이버의 읽기 기능 내부에 있다고 가정해 보겠습니다. 이 기능은 신호가 발생할 때마다 확인합니까? 할당한 리소스를 해제하거나 획득한 잠금을 해제해야 하기 때문입니다. 전체적으로 내 질문은 시스템 호출 구현(커널과 드라이버에서 다양한 기능을 호출하는 것과 관련)이 신호가 발생했음을 어떻게 알고 할당된 리소스를 해제하는가입니다.

  • 시스템 호출이 뮤텍스가 사용 가능해지기를 기다리고 있고(작업이 차단됨) 신호가 발생하는 경우, 커널은 뮤텍스가 lock()잠겨 있지 않지만 신호가 발생했음을 호출 함수에 어떻게 알립니까?

  • read()ext2 드라이버에서 함수를 실행하는 동안 신호가 발생한다고 가정합니다 . VFS 계층과 메인 시스템 호출 기능( read())은 ext2 드라이버 읽기 기능이 신호로 인해 실패했음을 어떻게 알 수 있습니까? 필요한 검사를 모두 받았나요? 확인해야 할 게 너무 많지 않나요?

답변1

시스템 호출 구현(예: read())이 신호를 처리하는 방법.

글쎄, 이것은 오해의 일부일 수 있습니다. 우리는 종종 시스템 호출에 대해 동일한 것처럼 이야기하지만 실제로 사용자 공간 인터페이스는 일반적으로 stdlib를 통해 구현됩니다. 커널 공간의 일부, 즉 시스템 호출 작업을 수행하는 부분은 커널 코드를 실행하는 커널 스레드입니다. 커널 스레드는 사용자 공간 스레드와 동일한 규칙을 따르지 않으며 신호가 대기열에 추가되고 병합될 수 있으며 전달되지 않을 수도 있습니다.

...예를 들어 read()의 경우 ext2 파일 시스템 드라이버의 읽기 함수 내부에 있다고 가정해 보겠습니다. 이 기능은 신호가 발생할 때마다 확인합니까? 할당한 리소스를 해제하거나 획득한 잠금을 해제해야 하기 때문입니다. 전체적으로 내 질문은 시스템 호출 구현(커널과 드라이버에서 다양한 기능을 호출하는 것과 관련)이 신호가 발생했음을 어떻게 알고 할당된 리소스를 해제하는가입니다.

파일 시스템 코드는 신호 없이 커널 스레드로 실행되므로 필요하지 않습니다. 어떤 경우든 시스템 호출은 커널 작업을 즉시 트리거하지 않고 작업자 스레드가 완료하기 위해 대기열에 대기할 가능성이 높습니다. 이 경우 스레드는 일반적으로 I/O가 완료되기를 기다리는 동안 신호를 처리하는데, 이는 인터럽트 가능한 동작입니다. 이는 시스템 호출이 실행되는 컨텍스트 외부의 사용자 공간에서 발생합니다. 커널 스레드는 이상한 컨텍스트에서 저장하고 복원하기가 복잡하기 때문에 시스템 호출에 부분적으로 응답하지 않습니다.

시스템 호출이 뮤텍스가 사용 가능해질 때까지 기다리고 있고(작업이 차단됨) 신호가 발생하는 경우, 커널은 뮤텍스 lock() 호출 함수에 잠겨 있지 않지만 신호가 발생함을 어떻게 알립니까?

신호가 대기열에 있는 커널 공간에서는 이런 일이 발생해서는 안 됩니다. 안전하지 않은 조건으로부터 사용자 공간 코드를 보호하기 위해 신호를 사용하는 것이 중요하므로 문제인지, 해결 방법을 결정하기 위해 애플리케이션을 작성해야 합니다.

ext2 드라이버의 read() 함수 실행 중에 신호가 발생한다고 가정합니다. VFS 계층과 기본 시스템 호출 함수(read())는 ext2 드라이버 읽기 기능이 신호로 인해 실패했음을 어떻게 알 수 있습니까? 필요한 검사를 모두 받았나요? 확인해야 할 게 너무 많지 않나요?

커널 프로세스가 신호에 따라 작동하지 않기 때문에 실패하지 않기 때문에 그렇지 않습니다. 신호를 수신한 사용자 공간 프로세스로 제어가 반환될 때까지 대기열에 보관됩니다.

또한보십시오:

커널에서 신호를 처리하는 방법

이는 사기일 수 있습니다.

관련 정보