os커널 제작중에 인터럽트핸들러구현 부분에서 질문드립니다.
요즘 만들면서 배우는 os커널이라는 책으로 공부하고있는데
아무리봐도 이해안가는부분이 몇군데 있네요...ㅜㅜ
책에나온대로라면 인터럽트를 입력받는 pic라는 칩은 명령어를 네가지
가지고 있다고 알고있습니다 icw0, icw1, icw2, icw3 이렇게..
그런데 막상 소스코드를 보면 이명령어에대한 언급없이 그냥 사용하더군요...
mov al, 0x11 ;pic의 초기화
out 0x20, al ;마스터 pic
dw 0x00eb, 0x00eb ;jmp $ + 2,jmp $ + 2
out 0xa0, al ;슬레이브 pic
dw 0x00eb, 0x00eb
mov al, 0x20 ;마스터 pic인터럽트 시작점
out 0x21, al
dw 0x00eb, 0x00eb
mov al, 0x28
out 0xa1, al ;슬레이브 pic 인터럽트 시작점
dw 0x00eb, 0x00eb
mov al, 0x04 ;마스터 pic의 irq2번에
out 0x21, al ;슬레이브 pic이 연결되어있다.
dw 0x00eb, 0x00eb
mov al, 0x02
out 0xa1, al ;슬레이브 pic이 마스터 pic의
dw 0x00eb, 0x00eb ;irq 2번에 연결되어있다.
mov al, 0x01 ;8086모드를 사용한다.
out 0x21, al
dw 0x00eb, 0x00eb
out 0xa1, al
dw 0x00eb, 0x00eb
이렇게 쓰여져 있더군요 이부분이 icw명령어 부분인것같은데
그냥 순서대로 명령어 처리가 되는건가요??
예를들면 처음으로들어간 입력이 icw0 명령어
두번째가 icw1 이런식으로....
그리고 소스코드중에
mov al, 0x20
out 0x20, al
이부분이 pic를 리셋한다고 나와있는데요
이게 어떻게 pic를 리셋하는지 궁금합니다..
그리고 프로텍티드 모드로 들어가는 부분중에
jmp dword SysCodeSelector:0x10000
이게 어떤의미를 담고있는 건가요??
여기서 SysCodeSelector 는 코드세그먼트 셀렉터입니다... 0x08로 설정되어있음..
책에는 0x10000이부분이 offset 으로 나와있는데
SysCodeSelector:0x10000 이 부분의 물리주소를 구하려고한다면..
예를들어 SysCodeSelector 의 base address가 0x00000000 으로 설정되어있다면
최종물리주소는 어떻게되는건가요?? (페이징은 아직구현안되었습니다)
질문이 너무 많아 죄송합니다...
혼자하려니 조금 힘드네요 ㅜㅜ
불행히도 PIC
불행히도 PIC 컨트롤러 조작 및 Protected mode 에 대한 기반 지식이 전혀 없으시네요.
지금 상태로는 OS 구현은 무리입니다.
PC Intern 이라는 책이 있습니다.
http://www.amazon.com/PC-Intern-Encyclopedia-Programming-Developers/dp/1557553041
위 책에 나오는 내용을 숙지해두셔야 OS 구현이 가능합니다.
댓글 달기