IRQF_DISABLED 플래그 정보

IRQF_DISABLED 플래그 정보

내가 읽고 있는 내용은지도 시간request_irq, 저는 이 주제를 처음 접했기 때문에 확인할 몇 가지 아이디어가 필요합니다.

  • 이 플래그가 설정되면 이 인터럽트 핸들러를 실행하는 동안 모든 인터럽트를 비활성화하도록 커널에 지시합니다.
  • 설정되지 않은 경우 인터럽트 핸들러는 모든 인터럽트와 함께 실행됩니다.그들이 활성화하는 것 외에도.

굵은 글씨로 표시된 부분의 경우 인터럽트가 어떤 방식으로든 직렬로 실행됩니까? 즉, 한 번에 하나씩 실행됩니까?

답변1

참고로 IRQF_DISABLED 플래그는 Linux 커널에서 완전히 제거되었습니다.이번 업데이트.

전체 깃발을 제거하게 된 두 가지 주요 이유는 다음과 같습니다.

  1. 여러 장치가 물리적 인터럽트 라인을 공유하는 경우(하드웨어 비용으로 인해) 해당 장치가 처리하는 인터럽트뿐만 아니라 동일한 물리적 인터럽트 라인을 공유하는 다른 인터럽트 신호도 허용됩니다.
  2. 또한, 인터럽트가 처리되는 동안 인터럽트가 발생하면 다른 인터럽트를 처리하기 위해 현재 인터럽트 컨텍스트를 커널 스택에 저장해야 하기 때문에 커널 스택이 오버플로될 수 있습니다.

또한 일부 지연 메커니즘의 도움으로 커널 인터럽트 핸들러의 99.999%가 가능한 한 빨리 완료되는 것이 중요합니다. 따라서 인터럽트의 특성(빠름 또는 느림)에 따라 IRQF_DISABLED 플래그를 설정하는 것은 의미가 없습니다.

귀하의 질문에 대답하려면 IRQF_DISABLED 플래그를 설정 해제하면 다른 인터럽트가 인터럽트 처리기의 실행을 중단할 수 있기 때문에 인터럽트를 하나씩 처리하지 않습니다. 이는 플래그가 설정되지 않은 경우 오버플로가 발생하는 이유입니다. 또한 부탁드립니다자세한 내용은 이 문서를 참조하세요.

관련 정보