컴퓨터 인터럽트 테이블 관련 구조에 대하여..
글쓴이: googlejoa / 작성시간: 금, 2004/11/26 - 7:35오후
외부 디바이스 등에서 인터럽트 신호가 걸리면 cpu 는 자체내의 레지스터 내용을 먼저 확인한다는 것을 알게 되었습니다.
따라서 부팅할때 해당 레지스터에 인터럽트벡터 테이블이 있는 곳을 등록해 주면 각각의 인터럽트에 해당하는 서브함수가 실행이 될 수 있답니다.
그런데 제가 궁금한 것은 과연 바이오스인터럽트는 어디에서 결정해 주냐는 거죠.
os 에서 부팅시에 레지스터 내용을 변경시킬때 바이오스함수의 주소는 보존하는 것일까요?
바이오스와 os 에서 지원해주는 인터럽트 벡터 테이블까지 가는 과정에 대해서 자세히 아시는 분 안 계신가요? 부탁드립니다.
Forums:
IRQ와 INT 매핑을 말씀하시는거군요...하드웨어에서 발생하는 인터
IRQ와 INT 매핑을 말씀하시는거군요...
하드웨어에서 발생하는 인터럽트는 IRQ라고 부르죠...
IRQ의 INT 매핑은 8259a칩 담당이죠.(옛날 PC 기준으로) 8259a 칩의 레지스터를
조작해서 IRQ의 INT 매핑을 변경할 수 있습니다. 이거 소스코드가 기억이
안나는군요... 8259a 조작하는 코드들은 짜보시면 아시겠지만 짜기가 X같습니다.
코드가 좀만 잘못되도 시스템 다운이고 원인 알기도 매우 어렵거든요 :evil:
PC의 IRQ매핑 초기값은 IRQ0-7은 INT8-INT0xf로 되어 있고,
IRQ8-15는 INT0x70-77로 매핑된걸로 압니다. (0x70-0x77인지 0x78-0x7f인지 헷갈림)
기값은 BIOS에 의해서 세팅됩니다. DOS의 경우 이것을 그대로 사용했지만
윈도우나 리눅스/x86 유닉스같은 32비트운영체제들은 이값을 자기맘대로
바꿔버리죠. 요새는 APIC라고 해서 8259a를 대신하는 것이 또 있는데
이건 내부를 안 뒤져봐서 잘 모르겠습니다. (요새 딴거에 정신없어서... 본래취미가 os짜는건데)
어쨌든 하드웨어로부터 IRQ가 걸리게 되면 8259a(PIC)나 APIC 등을
거쳐서 INT번호로 전환된다음 CPU에게 통보됩니다. 그러면 CPU는
하던일을 중단하고 INT번호에 지정된 인터럽트 핸들러를 실행시키게 되죠.
인터럽트 핸들러 찾는거는 아시겠죠...
Written By the Black Knight of Destruction
댓글 달기