Programming/System
[OS] 4장 인터럽트와 예외 : 만들면서 배우는 OS 커널의 구조와 원리
appHunter
2009. 6. 15. 15:06
먼저 IDT 에 대해서 공부하고 온다.
관련 글 : http://sagidong.tistory.com/198
IDT 값 설정.
1: idt_ignore:
2: dw isr_ignore
3: dw SysCodeSelector
4: db 0
5: db 0x8E
6: dw 0x0001
IDT 와 동일하다.
2. 핸들러의 오프셋 . 즉 인터럽트 핸들러 가 수행될 오프셋 이다.
3. 코드 세그먼트 셀렉터 (시작 주소 = 0x00000000 )
6. 상위 0x00010000
인터럽트 서비스 루틴
1: ;****************************************
2: ;**** Interrupt Service Rutines ******
3: ;****************************************
4: isr_ignore:
5: push gs
6: push fs
7: push es
8: push ds
9: pushad
10: pushfd
11:
12: mov ax, VideoSelector
13: mov es, ax
14: mov edi, (80*7*2)
15: lea esi, [msg_isr_ignore]
16: call printf
17:
18: popfd
19: popad
20: pop ds
21: pop es
22: pop fs
23: pop gs
24:
25: iret
5~10. 인터럽트가 발생하기 전의 상태 저장 (레지스터, FLAG)
12~16. 인터럽트 처리 ( 문자열을 화면의 7번째 줄에 출력)
18~25. 인터럽트가 발생한 당시의 프로그램 다음 명령으로 돌아가서 재개
IDTR 등록
1: lidt [idtr]
2:
3: ;****************************************
4: ;************* IDT ******************
5: ;****************************************
6: idtr:
7: dw 256*8-1 ; IDT 의 Limit
8: dd 0 ; IDT 의 Base Address
CPU가 사용할 수 있게, IDTR 을 등록해야 한다.