2011-01-19 2 views

답변

3

인터럽트 핸들러에는 몇 가지 이유로 인해 리턴 값이 있습니다.

  1. 인터럽트 벡터는 여러 장치간에 공유 될 수 있습니다. IRQ_NONE/IRQ_HANDLED를 반환함으로써 인터럽트 처리기는 인터럽트가 특별히 관심이있는 장치와 관련이 있는지 여부를 나타낼 수 있습니다. IRQ_NONE이 반환되면 목록의 다음 처리기를 호출해야합니다.
  2. IRQ가 공유되지 않더라도 인터럽트 처리기는 인터럽트를 처리하는 데 문제가 있음을 인터럽트 하위 시스템에 알리고 irq 루프에서 시스템이 멈추지 않도록 비활성화해야합니다.
+0

'IRQ_WAKE_THREAD'는 최신 Linux 커널에서 지연 처리에도 사용할 수 있습니다. 즉, 현재 프로세스가 인터럽트의 느린 * 부분을 수행하기 위해 인터럽트 될 수 있음을 나타냅니다. –

1

인터럽트 핸들러는 인터럽트 벡터가 아닙니다. 인터럽트 벡터는 인터럽트가 트리거 될 때 프로세서가 점프하는 코드입니다. 이것은 총 단순화이지만, 여기 보이는 방법입니다

interrupt_vector { 
    num = check_interrupt_number() 
    f = get_interrupt_handler_func(num); 
    d = get_interrupt_handler_data(num); 
    /* call interrupt handler */ 
    ret = f(d); 
    } 

그래서 핸들러와 데이터를 함께 등록하고, 인터럽트 벡터 코드 등록 된 데이터를 전달 호출 registererd 핸들러, 및 반환 값을 확인합니다. 물론 우리는 하나의 핸들러 레벨을 가지고 있지만 여러 PCI Irq에 대해 하나의 핸들러를 가지고 있고, 특정 PCI irq에 대해 등록 된 핸들러를 확인한 다음 등록 된 데이터를 전달하는 등의 기능을 수행 할 수 있습니다. ..

물론 실제 코드는 훨씬 더 복잡합니다. 이 lxr link을 사용해 리눅스 커널 소스를 탐색 할 수 있습니다.

0

인터럽트 해당 벡터 코드를 관리 할 수 ​​있도록는 (일반적 86에 EAX와 같은 레지스터에 들어가는) 값을 리턴 할 수 — 인터럽트 핸들러 여러 부착 인터럽트 핸들러 (OS 고유의) 대 벡터 코드 핸들러 체인.

관련 문제