뭔가

2012-06-20 2 views
3

이 I 을 통해 인정 때까지 인터럽트가 PIC에서 보낸뭔가

에서, PIC는/같은 소스에서 다른 인터럽트를 보낼 것이라고 말했다있다 O 포트. 이는 인터럽트 처리기가 대개 중요한 데이터 구조 인 을 조작하고 새로운 호출 (즉, 재진입 가능하지 않음)에 의해 중단되는 것을 견딜 수 없기 때문입니다.

나는 이해할 수 없다. 동일한 소스와 다른 소스의 인터럽트간에 다른 것이 있습니까?

+0

호기심에서이 인용문의 출처는 무엇입니까? – dsolimano

+0

@dsolimano : http://www.acm.jhu.edu/~nwf/cs438/p1/proj1.html –

답변

7

타이머, 하드 디스크, 네트워크 등 다양한 소스에서 인터럽트를 얻을 수 있습니다. 이러한 인터럽트는 각각 다른 인터럽트 처리기에서 처리합니다.

따라서 소스 (S2)에서 다른 인터럽트가 처리되는 동안 소스 (S1)에서 인터럽트가 도착하면 문제가 없습니다. 두 인터럽트는 서로 다른 인터럽트 핸들러에 의해 처리됩니다.

반면에 소스 (S)에서 발생한 인터럽트가 해당 소스의 핸들러가 다른 인터럽트를 처리하는 동안 도착하면 핸들러는 reentrant 웨이에서 설계되지 않았으므로 두 번째 인터럽트를 처리 할 수 ​​없습니다 즉, 인터럽트 할 수없고, 새 인터럽트를 처리 한 다음 원래 인터럽트를 처리하기 위해 다시 돌아갑니다).

인터럽트가 Linux 커널에서 작동하는 방식에 대한 자세한 내용은 Understanding the Linux Kernel을 참조하십시오.

3

동일한 소스의 인터럽트는 현재 활성 인터럽트와 동일한 데이터 구조에서 작동해야합니다. 다른 소스의 인터럽트는 다른 데이터 구조에서 작동합니다. 따라서 활동을 조정할만큼 현명하지 않은 한 동일한 소스에서 동시에 두 개의 인터럽트를 가질 수는 없으며 현재 디자인으로 인해 프로그래머가 복잡성에 대해 걱정할 필요가 없도록 활성 상태가되는 것을 방지 할 수 있습니다. 사람들이 마지막 이름에 따라 알파벳의 다른 범위에 대해 서로 다른 점원가 뭔가 티켓을 데리러 갈 곳 현실 세계에서 (인위적인) 예를 촬영

, 테이블을 상상한다. 성이 A로 끝나는 두 사람은 티켓을 동시에 수령 할 수 없습니다. 그렇지 않으면 책임자가 혼동을 일으켜 실수를 저지르기 때문입니다. 그러나 성이 A로 끝나는 사람은 성함이 Z로 끝나는 사람과 동시에 티켓을 수령 할 수 있습니다. 그 이유는 각각의 점원이 서로 다른 이름 목록과 티켓 더미에서 작동하기 때 문에 다른 사람에게 부정적인 영향을주지 않기 때문입니다 .

이 예에서 고객의 성의 문자가 원본이고 고객이 인터럽트입니다. 점원은 인터럽트 처리기이며, 티켓의 이름과 더미 목록은 커널 데이터 구조입니다.

1

다른 답변은 훌륭하지만 다른 점은 레벨 트리거 인터럽트입니다. 인터럽트 컨트롤러가 인터럽트를 작동시키지 않으면 인터럽트를 멈추도록 ISR이 하드웨어에 알리기 전에 레벨 트리거 인터럽트가 즉시 다시 트리거됩니다. 일반적으로 ISR은 PIC를 재설정해야 할뿐만 아니라 셧다운을하기 위해 말하고있는 하버에게 알릴 필요가 있습니다. 하드웨어가 중단되지 않으면 스택이 오버플로되고 OS가 토스트가됩니다.