Interrupt Mechanism and Application of Intel IA32 Architecture

김영휘

lachesis (at) kldp.org
http://lachesis.pe.kr

이 문서는 글쓴이가 펜티엄 프로세서의 인터럽트에 대한 리포트를 썼다가 버리기 아까워서 리눅스의 인터럽트 아키텍쳐에 대한 글로 발전시킨(시키고 있는) 문서입니다. 아직 쓰여지지 않은 부분도 많습니다만 차차 시간나는 대로 채워 나갈 계획입니다. 문서의 틀린점, 보완할 사항, 도와주고 싶으신 분(공동 저술) 들은 필자의 이메일로 연락하시기 바랍니다.

이 문서의 최신버젼은 http://lachesis.pe.kr/kernel/ia-interrupt 에서 확인하실 수 있습니다.

다음 링크에서 출력하기 편하게 한페이지에 문서를 보실 수 있습니다. http://lachesis.pe.kr/kernel/ia-interrupt/ia-interrupt.html 에서 확인하실 수 있습니다.

sgml 원본은 아래에서 구하실 수 있습니다 : http://lachesis.pe.kr/kernel/ia-interrupt/ia-interrupt.sgml 에서 확인하실 수 있습니다.

이 문서는 상업적 목적이 아닌 경우 자유롭게 수정/재배포 할 수 있습니다. 상업적 목적으로 배포할 경우 저자의 허락을 받아야 합니다

고친 과정
고침 Revision 0.032002. 1. 11고친이 라키시스
8259 컨트롤러에 대한 내용 추가
고침 Revision 0.032001. 11. 30고친이 라키시스
idt_table 의 초기화와 idtr 레지스터의 셋업 추가
고침 Revision 0.022001. 11. 29고친이 라키시스
_set_gate() 매크로에 대한 분석 추가
고침 Revision 0.012001. 10. 6고친이 라키시스
최초 작성 : IDT 초기화 까지

차례
1. 펜티엄 프로세서의 interrupt mechanism
1.1. Interrupt Descriptor Table(IDT)
1.1.1. IDTR
1.1.2. Interrupt Descriptor Table Structure
1.2. Context Change and Stack Handling
2. Linux 부팅과정의 간략한 review
3. 리눅스의 IDT 초기화
3.1. startup_32() 함수에서의 IDT 의 초기화
3.2. idtr 레지스터의 초기화
3.3. start_kernel() 함수에서의 IDT 의 초기화
3.3.1. trap_init() 함수
3.3.2. init_IRQ() 함수
3.3.2.1. 8259A and I/O APIC
3.3.2.2. init_IRQ() 함수
4. 리눅스의 Interrupt and Exception Handling
4.1. Exception Handling
4.2. Interrupt Handling
4.3. Softirq, Bottom Half, Tasklet
참고문헌
그림 목록
1-1. Relationship of the IDTR and IDT
1-2. Interrupt Procedure call
1-3. IDT Gate Descriptors
1-4. Stack usage with NO Privilege level change
1-5. Stack usage with Privilege level change
3-1. Making Interrupt Gate 1
3-2. Making Interrupt Gate 2
3-3. Interrupt gate descriptor
3-4. cascaded 8259A [2]