일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- wrefresh
- mvwin
- level trigger
- DOCKER-USER
- wnourefresh
- epoll
- BOF
- NAPT
- LOB
- ioctl
- Docker
- rfc5508
- 어셈블리어
- C언어
- doupdate
- ncurses
- epoll_wait
- packet flow
- vtable
- architecture
- .net core 7
- 풀이
- iptables
- Compiler
- edge trigger
- .nret core 배포
- 취약점
- packet filter
- REDIS
- cbpf
- Today
- Total
Tuuna Computer Science
[OS 개발]보호모드의 하드웨어 인터럽트 처리과정 본문
IDT와 GDT가 헷갈렸던 참에 정리가 잘 돼서 여기에 마지막으로 정리를 하려한다.
일단 인터럽트의 종류에는 소프트웨어 인터럽트랑, 하드웨어 인터럽트가 존재한다.
소프트웨어 인터럽트는 말 그대로 소프트웨어단에서 CPU에게 인터럽트를 요청하는 거고
하드웨어 인터럽트는 CPU외의 주변 기기 장치로 부터 받는 인터럽트를 의미한다.
오늘은 소프트웨어보단 하드웨어 인터럽트에대해 정리할것이다.
일단 우리의 PC에는 8259A라는 인터럽트를 받는 PIC칩이 존재한다.
이 PIC는 2개로 이루어져 있다. 마스터 PIC + 슬레이브 PIC로 이루어져 있다.
도 이 각 각의 PIC에는 8개의 IRQ와 한 개의 INT핀 한 개의 /INTA핀이 존재한다.
(각 각의 IRQ핀은 번호가 매겨지는데 0번 째 부터 시작한다.)
마스터 PIC의 INT핀과 슬레이브 PIC의 INT핀은 CPU의 INT핀과 연결되어 있고
마스터의 /INTA핀과 슬레이브의 /INTA핀은 CPU의 /INTA핀과 연결되어 있다.
그리고 마스터의 IRQ중 하나의 IRQ핀과 슬레이브 IRQ핀과 연결되어 있다.
즉 마스터와 슬레이브가 서로 연결되어 있으니 사용가능한 하드웨어 인터럽트트는
0~15-1개의 하드웨어 인터럽트를 걸 수 있다.
일반적으로 IRQ2번에 슬레이브 PIC를 연결하는 경우가 많다.
각 각의 IRQ번호에 따라 처리 가능한 인터럽트가 정해져 있다.
- IRQ 0번 : 타이머
- IRQ 1번 : 키보드
- IRQ 2번 : 슬레이브 PIC
- IRQ 3번 : COM2
- IRQ 4번 : COM1
- IRQ 5번 : 프린터 포트 2
- IRQ 6번 : 플로피디스크 컨트롤러
- IRQ 7번 : 프린터 포트 1
- IRQ 8번 : 리얼 타임 클록
- IRQ 9번 : X
- IRQ 10번 : X
- IRQ 11번 : X
- IRQ 12번 : PS/2 마우스
- IRQ 13번 : Coprocessor
- IRQ 14번 : 하드디스크 1
- IRQ 15번 : 하드디스크 2
0을 넣으면 사용안함, 1을 넣으면 사용
ICW2는 IRQ번호에 얼마를 더해서 CPU에게 전달할 것인지 결정한다.
off7 off6 off5 off4 off3 0 0 0 (8비트)
뒤에 0~2비트는 0으로 고정되어 있는 비트이다. 왜냐면 이 값들은 8의 배수로 이루어져야 하기 때문에 ㅎ
ICW3은 마스터 PIC와 슬레이브 PIC의 연결방법이다.
s7 s6 s5 s4 s3 s2 s1 s0 (8비트)
이 비트의 번호는 IRQ의 번호와 대응한다. 각 각의 번호에 1을 넣음으로써 결정된다.
ICW4는 PIC를 추가적으로 세팅할 것인지 결정하는 명령어이다.
0 0 0 SFNM BUF M/S AEOI UPM (8비트)
SFNM과 BUF M/S는 사용하지 않는다.
AEOI 비트는 PIC의 Reset을 자동(1)으로 할 것인지 수동(0)으로 할 것인지 결정
PIC는 CPU에게 인터럽트를 알리고 리셋을해야 다음 인터럽트를 받을 수 있다.
UPM 비트에 1을 넣으면 8086모드로 작동하겠음을 알린다.
===========================================================
실제 어셈블리어로 PIC를 프로그램이하는 과정
ICW1
ICW2
ICW3
ICW4
공부하면서 궁금했던 점
Q. 0x20, 0x21이 나눠져 있던데 기준점이 있는가 그리고 ICW1, 2, 3, 4명령의 구분점
A. 0x20에 값을 넣음으로서 ICW1의 명령 시작점을 알리고 그 다음부턴 0x21 or 0xA0에 값을 넣는다.
여기서 ICW2의 명령이 이해가 잘 안갈 수 있다. 왜 번호를 붙여서 Data Bus를 통해 CPU에게 주는지
그이유는 예외처리에서 볼 수 있다.
INTEL사는 각 종 예외처리를 번호를 매겨서 관리하는데 0번부터 ~~~ A번까지 매겨져 있다.
즉, 0번은 예약된 예외처리가 있다는 것이다. 그런데 IRQ번호도 0번인데 CPU는 혼란에 빠질 수 있음.
그래서 IRQ번호에 알파를 더해서 CPU가 혼동하지 않게 할 수 있다.
'OS' 카테고리의 다른 글
멀티 스레드 환경에서의 성능 최적화 (0) | 2020.02.07 |
---|---|
[OS] 페이징이란 무엇인가? (메모리 효울적으로 사용하기) (0) | 2018.11.27 |
[OS]논리주소? 선형주소? 물리주소? 개념 이해하기 (1) | 2018.11.15 |
[OS]Protected Mode(보호모드)와 GDT (0) | 2018.11.10 |