2010-08-06 3 views
9

inteerupt 핸들러에 들어가면 먼저 해당 CPU에서 "interrupt interrupts"를 해제합니다 (x86에서는 cli 명령과 같은 것을 사용). 인터럽트가 비활성화되는 동안 사용자가 대개 인터럽트를 일으킬 수있는 키보드의 'a'문자를 눌렀다 고 가정하십시오. 인터럽트를 사용할 수 있기 때문에 그러나, 그 의미 않습니다 :인터럽트를 비활성화하는 것은 무엇을 의미합니까?

  1. 에 대한 인터럽트 핸들러 'A'인터럽트가 임계 영역 또는 사용할 수 있기 때문에, 호출되지 않을 것이다
  2. 인터럽트가 운영 체제에 의해 처리되지만 인터럽트가 다시 활성화 될 때까지 지연됩니다. 특히 처음에 'a'를 눌렀을 때 인터럽트가 비활성화 된 경우 사용자가 'a'를 다시 눌러야합니까?

답변

5

종종 하나의 인터럽트가 하드웨어에 의해 "대기"됩니다.

[인터럽트는 종종 고정 될 수있는 논리 게이트입니다. 일단 켜져 있으면 얼마 동안 계속됩니다.]

인터럽트가 비활성화 된 기간에만 'a'를 한 번 누르면 사용자가 다시 활성화되었을 때 인터럽트로 등록됩니다.

인터럽트가 비활성화 된 동안 사용자가 어떻게 든 'a'를 두 번 치면 그럴 경우 인터럽트로 등록됩니다. 첫 번째인지 두 번째인지 여부는 정확한 로직 게이트 구성에 달려 있습니다.

+1

이렇게하면 두 개의 키보드 문자를 CPU가 인터럽트를 처리하는 데 걸리는 시간보다 빠르게 입력 할 수 있다면 그 중 하나가 손실된다는 의미입니까? 이 주제가 다시 생겨서 죄송합니다 – Juan

+0

@Juan 키보드에 달려 있습니다. 현대 키보드에는 컴퓨터가 처리하는 동안 키보드 이벤트를 저장하는 작은 버퍼가 있습니다. 대부분의 키보드는 CPU가 유지할 수없는 극한 상황에서 일부 키 누름 조합이 올바르게 등록되지 않도록 막대한 비용과 대역폭을 절약하기 위해 문자 키 누르기 위치 (X + Y)를 지정하지만 일부 키보드는 특정 키 개별적으로 대부분의 키보드는 예를 들어 수식 키 이벤트를 별도로 보내고 일부 게임 키보드는 'WASD'및 화살표 키에 대해 동일한 작업을 수행합니다. – YoYoYonnY

5

대답은 키보드 인터럽트를 이미 처리하고 있는지 여부에 달려 있습니다.

대부분의 인터럽트 서비스 루틴 (ISR)은 하드웨어를 "서비스"했음을 알리는 코드를 종료시 사용합니다. 키보드 컨트롤러의 경우 수신 된 바이트를 확인하는 명령이 키보드 컨트롤러에 기록됩니다. 키보드 컨트롤러 하드웨어가 전기 사용을 중단하여 인터럽트 상태를 신호하는 것은 승인 시점입니다.

키보드가 아닌 인터럽트를 처리하는 경우 화재 경고 인터럽트가 발생하면 전기를 인터럽트하는 키보드 하드웨어가 키를 누를 때 트리거됩니다. CPU가 인터럽트를 다시 활성화 할 때까지 전기 신호는 무시됩니다. 화재 경보 인터럽트 서비스가 끝나면 화재 경보 ISR은 모든 데이터를 확인하고 CPU의 인터럽트를 다시 활성화합니다. 즉시, 키보드 컨트롤러는 여전히 전기적으로 인터럽트 상태를 신호하기 때문에 CPU는 인터럽트를 시작합니다.

키보드 인터럽트를 처리하는 중에 사용자가 키보드 ISR을 실행하는 동안 두 번째 키 입력을 신속하게 입력하는 경우 두 번째 키 입력에서 데이터가 누락되거나 나중에 데이터를 수신 할 수 있습니다. 조금도. 특히 ISR이 승인을 통해 키보드 컨트롤러를 재설정하지만 ISR이 키보드 컨트롤러에서 사용 가능한 모든 바이트를 실제로 수신하지 못하면 문제가 발생합니다.

자주 ISR은 먼저 활성화를 트리거 한 인터럽트를 처리 한 다음 인터럽트를 확인한 후 장치를 폴링하여 첫 번째 인터럽트 이후 더 많은 데이터를 수신했는지 확인합니다. 그렇다면 소프트웨어 인터럽트를 생성하여 ISR을 다시 입력하고 장치를 수리하십시오.

0

사용자가 일반적인 인터럽트 처리 중에 "a"를 두 번 누르는 것은 물리적으로 불가능합니다. 한 번에 두 개의 키를 눌렀음에도 불구하고, 하드웨어가 적어도 하나의 키를 보유해야만 CPU가 키를 얻을 준비가 될 때까지 기다려야합니다.

PC의 경우 - PCXT 일까지 다시 도달합니다. 키보드 하위 시스템이 CPU의 13 건의 키 누르기 영역에있을 수 있습니다.

1

간단한 대답은 인터럽트가 자동으로 추가 인터럽트를 비활성화한다는 것입니다. 인터럽트는 최단 시간 동안 비활성화되어야하며 비활성화되어야합니다. 원래 AT BIOS 키보드 ISR의 첫 번째 명령은 인터럽트를 활성화하는 STI이었습니다.

행복한 대답

PIC가 하드웨어 인터럽트, 심지어 인터럽트가 키보드 ISR을 중단 할 수 있습니다 만 타이머 인터럽트 IRQ0 활성화에 우선 순위를한다는 것입니다. 물론 NMI도 어느 쪽의 방법 으로든 생길 수 있지만 행복하게 이것은 현재 PC에서 결코 발생하지 않습니다.

-2

인터럽트 해제에는 다른 증거가 있습니다. 1. 하드웨어 오류 2. 예외 (예 : 0으로 나누기) 및 요법.

  1. 하드웨어 오류가 발생하면 os가 혼합 작동해야합니다.
  2. 예외가 발생하면 os는 시스템을 망가뜨려야하고 interupt를 처리 할 다른 프로세스로 전환해야합니다.

예 : I/O 장치의 경우. 간섭이 없다면 컴퓨터가 효율적이지 않았습니다!