인터럽트 벡터 테이블

x86 인터럽트 벡터 테이블.

인터럽트 벡터 테이블 (interrupt vector table)은 대부분의 중앙 처리 장치 아키텍처에서 흔한 개념으로서, (인터럽트 요청과 함께 인터럽트 핸들러와 관련된) 인터럽트 벡터들의 테이블이다. 디스패치 테이블이란 인터럽트 벡터 테이블을 구현하는 방법 중의 하나이다.

인피니언, 마이크로칩[1] Atmel,[2] 프리스케일, AMD, 인텔 등 대부분의 중앙 처리 장치들은 인터럽트 벡터 테이블(IVT)을 가지고 있다.

인터럽트 벡터 테이블은 인터럽트 서비스 루틴의 시작 주소를 찾는 3가지 방법에서 사용된다.

"미리 정의된 (predefined)" 방식은 프로그램 카운터 (PC)에 인터럽트 벡터 테이블 내의 몇몇 엔트리의 주소를 직접적으로 채운다. 분기 테이블(jump table) 자체는 실행 가능한 코드가 담겨있다. 원칙적으로 매우 작은 인터럽트 핸들러는 전체가 인터럽트 벡터 테이블에 저장될 수 있지만, 실제로 각 위치한 코드와 엔트리들은 "JMP address"인데 이 "address"는 실제 인터럽트를 위한 인터럽트 서비스 루틴의 주소이다. Atmel AVR[3][4] 과 모든 8051 그리고 마이크로칩 마이크로컨트롤러[5]는 이 "미리 정의된" 방식을 사용한다.

"인출 (fetch)" 방식은 PC를 간접적으로 채운다. 이 방식은 테이블에서 주소를 꺼내기 위해 인터럽트 벡터 테이블 내의 몇몇 엔트리의 주소를 이용하는 방식으로서, 이후에 PC를 이 주소로 채운다. [5] IVT의 각 그리고 모든 엔트리는 인터럽트 서비스 루틴의 주소이다. 모든 모토롤라/프리스케일 마이크로컨트롤러는 이 "인출" 방식을 사용한다.[5]

"인터럽트 알리기 (interrupt acknowledge)" 방식은 외부 장치가 CPU에게 인터럽트 핸들러 번호의 주소를 알리는 방식이다. 이 방식은 인텔 펜티엄과 많은 오래된 마이크로프로세서들에서 사용된다.[5]

CPU가 인터럽트에 의해 인터럽트되면, 이것은 인터럽트 벡터 테이블의 인터럽트 핸들러를 보고 컨트롤을 그곳으로 이동시킨다.

같이 보기편집

각주편집

  1. "dsPIC33F Family Reference Manual" section 29.1.1 Interrupt Vector Table
  2. "AVR Libc User Manual" section: Introduction to avr-libc's interrupt handling
  3. Roger L. Traylor.
  4. Gary Hill.
  5. Huang, Han-Wat (2005). 《Pic Microcontroller: An Introduction to Software and Hardware Interfacing》. Cengage Learning. 247쪽. ISBN 978-1-4018-3967-3. 2013년 4월 22일에 확인함. 

외부 링크편집