2012-05-20 4 views
4

x86에서 cli 명령어로 인터럽트를 비활성화하면 정확히 어떤 일이 발생합니까?인터럽트를 비활성화하면 어떻게됩니까? 처리 방법을 모르는 인터럽트로 무엇을합니까?

  • PIC는 인터럽트를 켜고 인터럽트를 발생시킬 때까지 기다릴 수 있습니까? (만약 그렇다면 얼마나 오래 기다리는가? '만료되면 어떻게됩니까?')

  • 디바이스의 관점에서 인터럽트가 응답없이 "블랙홀"로 전송됩니까?

  • PIC가 "CPU가 사용 중입니다"라고 말하면 어떻게 되나요?

  • 아니면 다른 일이 발생합니까?

또한 처리 방법을 모르는 인터럽트는 어떻게 처리합니까?
PIC (또는 장치가 무엇인지 모르는 경우)에게 "그래, 메시지를 받았는데 어떻게해야할지 모르겠다"고 말할 수 있습니까?

+0

"메시지"는 잘못된 정신 이미지이며 신호 일뿐입니다. CLI는 프로세서에이를 무시하도록 지시합니다. 장치는 인터럽트 처리기가 데이터 전송을 시작하여 요청을 다시 시작하기를 기다리는 동안 아무 것도하지 않습니다. 인터럽트를 처리하는 방법을 알 수없는 시나리오는 없으며 IRQ를 사용하도록 PIC를 프로그래밍하지 않았을 것입니다. –

+0

@HansPassant : 아아, 고마워! – Mehrdad

답변

5

8259a PIC는 CPU로부터 INTA 신호를 기다립니다. CPU는 해당 ISR로 컨트롤을 전송하여 인터럽트 처리를 시작할 때이를 보냅니다. 어떤 ISR인가? PIC는 CPU에 인터럽트 벡터를 제공합니다. CPU는 주소에 대한 IVT/IDT를 찾고 나머지는 알고 있습니다. PIC는 INTA를 수신 할 때까지 인터럽트 벡터를 제공하지 않습니다.

8259a PIC는 I/O 장치와 단방향 통신 만합니다. 그들은 서비스가 필요한 인터럽트가 있음을 알 수 있습니다.

CPU가 인터럽트에 응답하지 않으면 모든 것이 PIC에서 대기 중입니다. 그러나 장치는 자신의 어색한 상태에서 인터럽트 요청 신호를 디어 써트하고 다시 어서 트할 수있다. 어떤 일인지 모르겠다. 또한 인터럽트 서비스에 시간 요구 사항이 있는지 알 수 없습니다.

특정 소스의 인터럽트에 관심이 없다면 마스크만으로도 아무 것도 얻을 수 없습니다. 인터럽트를 처리하지만 처리 방법을 모르는 경우 PIC에 처리 한 사실을 알릴 수 있습니다. 이로 인해 중단 된 장치가 "고정 된"상태로 남겨져 서비스가 무한정 대기하게됩니다. 또한 장치가 인터럽트 요청 신호를 높게 유지할 수 있습니다. 이는 레벨 트리거 모드에서 인터럽트를 취하는 경우 문제가 될 수 있습니다. 인터럽트를 계속 가져올 수 있습니다.

3

인터럽트는 계속 발생하지만 CPU는 수신 대기하지 않습니다. 다시 듣기 시작하면 (sti) 신호가 그대로 나타나 첫 번째 기회에 적용됩니다.

PC PIC에는 여러 수준의 인터럽트가 있으며 각 우선 순위 수준에 대해 하나의 활성 인터럽트를 보유 할 수 있다고 생각합니다. CPU가 해당 처리가 완료되었음을 알릴 때까지 각 항목을 유지합니다. 오랜 시간 동안 인터럽트를 사용하지 못하게하면 아마 이런 일이 일어날 것입니다. 그렇게하지 마십시오!

인터럽트를 담당하는 장치는 대기 중에 응답을받지 못합니다. 어쨌든 응답 일 것입니다. 기다릴 수 없으면 CPU가 결국 돌아올 때 볼 수있는 오류 상태가 될 수 있습니다.

당신은 명시 적으로 활성화 한 인터럽트만을 얻을 수 있으므로 놀라움이 없어야합니다. 인터럽트를 켜는 장치 드라이버는이를 처리하는 방법을 더 잘 알고 있습니다.