2014-02-18 3 views
2

이 기본 시나리오를 파악하려고합니다.
내 CPU가 예외 또는 인터럽트를 수신했다고 가정합니다. 내가 알고있는 것은 cpu가 인터럽트 서비스 루틴 (idt 테이블을 찾기 위해 idtr 레지스터를보고 isr 주소를 받기 위해 적절한 엔트리로 간다)을 실행하기 시작하지만, 어떤 컨텍스트에서 코드가 실행되고 있는지를 알 수있다.실행 컨텍스트를 인터럽트

의미 현재 스레드가 실행 중이고 일종의 인터럽트를 생성하는 경우, 스레드가 "보유하고있는"초기 프로세스에서 또는 다른 마법 스레드에서 컨텍스트가 실행됩니까?

감사합니다.

답변

1

몇 가지 다른 문제가 제기되는 흥미로운 질문입니다.

첫 번째는 인터럽트가 실제로 CPU의 관점에서 어떤 스레드 내부에서도 실행되지 않는다는 것입니다. 실제로 CPU 자체는 스레드를 간신히 인식하고 있습니다. 그것은 하이퍼 스레딩이나 유사한 기술을 가지고 있다면 조금 더 알 수 있지만 스레드는 실제로 운영 체제 (또는 경우에 따라 응용 프로그램)입니다.

둘째는 일반적으로 일부 높은 수준에서 실행되는 ISR (인터럽트 서비스 루틴)입니다. 당신은 정말로 어떤 프로세서 제품군을 말하고 있지 않으므로 구체적으로 설명하기는 어렵지만, 현대의 프로세서는 일반적으로 인터럽트 처리를 위해 입력하는 특수 모드를 하나 이상 가지고 있습니다. 또한, 인터럽트 중에 페이지 테이블이 활성화되어 있는지 질문 할 수도 있습니다.

세 번째는 입력 된 메모리 맵 ISR의 질문입니다. 대답은 다시 프로세서 고유의 것이 될 것입니다. ISR 항목에서 페이징을 사용하지 않는 아키텍처, 인터럽트 페이지 테이블로 자동으로 전환하는 다른 아키텍처, ISR을 시작할 때 페이지 테이블에 대해 아무 것도하지 않기로 결정한 아키텍처 (가장 일반적인 방법)를 상상해 볼 수 있습니다.

네 번째는 운영 체제에 이러한 종류의 정책이 적용되어 있다는 것입니다. 최신 운영 체제의 일반적인 접근 방식은 가능한 한 ISR 자체를 짧게 만드는 것입니다. 중요한 작업을 수행해야하는 경우 인터럽트를 커널 스레드에서 처리 할 수있는 일종의 이벤트로 변환하십시오 (또는 잠재적으로는 사용자 스레드). 이런 종류의 시스템에서는 실제로 인터럽트를 처리하는 코드가 특정 스레드에서 실행 중일 수 있습니다.하지만 실제로는 인터럽트 서비스 루틴이 아닙니다.

요약 :

  • ISR은 자신이 할 정말 주어진 스레드의 맥락에서 실행됩니다.
  • ISRs 은 인터럽트 된 스레드의 페이지 테이블로 실행됩니다 (아키텍처에 따라 다름).
  • ISRs 은 스레드의 레지스터 복사본으로 시작합니다 (아키텍처에 따라 다름).
  • 현대 시스템에서 ISR은 일반적으로 이벤트를 예약 한 다음 빠르게 종료하려고 시도합니다. 이 이벤트는 특정 스레드에서 처리 할 수 ​​있습니다 (예 : 프로세서 예외의 경우 신호 또는 구조적 예외 또는 이와 유사한 스레드로 전달됨). 또는 스레드 풀 (예 : 커널의 I/O 서비스)에 의해 생성됩니다.당신이 86에 대한 세부 사항에 관심이 있다면

, 당신은 ' 당신을 Intel 64 and IA-32 Architectures Software Developer’s Manual, 볼륨 3B, 을보고 할 필요가 (난 당신이 귀하의 질문에 어떤 인텔 특정 용어를 사용할 때, 추측) 운영 체제 설명서를 살펴볼 필요가 있습니다. x86은 매우 복잡한 아키텍처입니다. 예를 들어, (IDT에 "작업 게이트"를 배치 한 경우) 인터럽트 전달시 작업 전환을 수행 할 수 있습니다.이 경우 자체 세트가있을 것입니다 레지스터와 상당히 자체 페이지 테이블; 이 기능이 특정 운영 체제에서 사용 되더라도 x86 작업이 운영 체제 프로세스 및/또는 스레드에 직접적으로 (또는 전혀) 매핑되지 않을 수도 있습니다.

+0

감사합니다. 그것은 대단한 대답입니다. 사실 저는 제 관심이 X86임을 명시하는 것을 게을리했습니다. 후속 질문으로서, 이제는 나에게 동의합니다. 초기 스레드의 상태는 어디에 저장됩니까? 그것의 더미에, 몇몇 열성적인 숫양에서? – rig

+0

@rig 전통적으로, 스택에. 약간의 문제는 해당 스택이 이미 다른 권한 수준에 있는지 여부에 따라 스택이 다른 스택이되는 경우가 많다는 것입니다. x86은이 점에서 전통적인 아키텍처입니다. 일부 다른 아키텍처 대신 보조 레지스터 뱅크로 전환하여 ISR 작성자로 남겨두고 RAM에 상태를 저장할지 여부를 결정할 수 있습니다. – alastair