Be myself :: 3. 인터럽트 처리

달력

32024  이전 다음

  • 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

1 개요

인터럽트는 일반적인 의미로는 무엇인가를 방해한다는 뜻이다. 하지만 컴퓨터에선 방해한다는 의미보단, 우선순위가 높은 일을 먼저 처리하라고 알려주는 의미가 더 강하다. 인터럽트에 의해 우리는 마우스의 움직임, 키보드의 입력 등을 처리할 수 있는 것이다. 그렇다면 이러한 인터럽트를 어떻게 커널에서 처리하는지 그림으로 대략적인 개념을 잡고 가겠다.

 

 

 

 

 

 

 

 

 

 

 

 

 

2 PIC란??

인터럽트의 처리루틴을 가진 테이블(IDT)를 알아보기 전에 PIC의 개념을 잡고 가자. PC는 모든 외부로부터의 인터럽트(모니터, 마우스, 프린터, 스피커 등)을 8259A라는 칩을 통하여 입력 받는다. 이 8259A를 보통 PIC라 부른다. 여기까지만 말하면 PIC와 IDT가 무슨 연관인지 궁금해 질 것이다. 인터럽트가 처리되는 과정은, PIC에서 IRQ(인터럽트 처리 요청)을 받아 CPU의 INT포트에게 신호를 보내고, CPU에선 이 IRQ 번호를 이용해 IDT테이블에서 어떤 핸들러를 실행 시킬지 선택한 후, 인터럽트를 처리시킨다. 좀더 자세한 과정을 그림을 통해 알아보자.

Master PIC와 Slave PIC 각각의 작동순서를 살펴보면서 큰 흐름을 잡자. 일단 하인(?) 은 주인(?)의 IRQ 2번에 연결되어 있다. (왜 2번인지는 IBM의 고객센터에 따지자.) 그리고 각 장치들에서 IRQ요청이 왔다는 가정을 하자.

2-1. Master PIC동작 순서

자신의 INT핀에 신호를 실어 CPU의 INT피에 신호를 준다.
CPU는 이 신호를 받아 EFLAGS의 레지스터의 IE비트가 1로 세팅되어 인터럽트를 받을 수 있는 상황이라면 /INTA를 통해 마스터 PIC에 인터럽트를 잘 받았다는 신호를 보낸다.
마스터 PIC는 /INTA신호를 받고 몇 번째 IRQ에 연결된 장치에서 인터럽트 신호를 받았는지 숫자로 데이터 어드레스로 CPU에 전달한다.
CPU는 Protected Mode로 실행 중 이라면, 이 값을 리맵핑하여(IRQ번호를 바꿈) IDT에서 그 번호에 맞는 디스크립터를 찾아 처리한다.

여기서 리맵핑을 하는 이유는, 하드웨어 인터럽트와 예외상황 에서의 인터럽트를 구분하기 위해서 이다. CPU는 프로그래머가 시스템에 크거나 작은 충격이나 오류를 줄 수 있는 명령어를 실행시키는 것을 방지하기 위하여 예외처리를 하는데, 이 때 IRQ의 번호가 0번부터 시작해 PIC에서 받은 IRQ번호와 충돌이 일어 난다. 따라서, PIC에서 받은 IRQ번호를 리맵핑 한다.

2-2. Slave PIC동작 순서

자신의 INT핀에 신호를 실어 마스터 PIC의 IRQ2번핀에 인터럽트 신호를 보낸다.
마스터 PIC는 자신의 INT번호에 신호를 실어 CPU에게 전달한다.
그 이후는 마스터PIC의 처리 순서와 동일하다.

2-3. PIC초기화

PIC를 제대로 동작시키게 하기 위해선, PIC를 초기화시킬 필요가 있다. 각 PIC가 자신이 마스터인지 슬레이브인지 알아야 하고, 어떤 모드로 움직일지 등을 설정해야 하기 때문이다. 초기화 명령 프로그램의 구성은 ICW1, ICW2, ICW3, ICW4로 구성되는데 ICW는 하나의 명령어로 생각하자.

ICW1.

ICW2

ICW2는 PIC가 인터럽트를 받았을 때, IRQ번호에 얼마를 더해 CPU에게 알려줄지 지정한다. 즉 IRQ번호 리맵핑의 역할을 한다.

ICW3
PIC의 마스터, 슬레이브로서의 연결방법을 나타낸다. (마스터PIC)
S0~S7은 마스터 PIC의 각 IRQ선을 나타낸다. 각 비트에 0을 넣으면 그 IRQ선은 하드웨어 장치에 연결되어 있다는 것을 뜻하고, 비트에 1이 있으면, 그 IRQ선은 슬레이브 PIC가 연결되어 있다는 것을 나타낸다. (슬레이브 PIC)
3~7비트는 0으로 해두고 ID0~ID2는 Slave PIC가 Master PIC의 몇 째 IRQ에 연결되어 있는지 나타내는데 마스터 PIC에선 1로 나타내는 반면 여기선 숫자로 나타낸다.

ICW4

3 idt의 동작

PIC에서 인터럽트가 와 이를 CPU에서 어떤 순서로 처리하는지 등을 알아 보겠다.

3-1. Idt등록

동작 순서를 알아 보기 전에 IDT(Interrupt Descriptor Table)이 어떻게 생겼는지 알아 보자.

P는 페이지와 관련되어 있는데 항상 1이다 DPL은 핸들러가 실행될 특권레벨을 나타내고, D는 0이면 16비트, 1이면 32비트임을 나타낸다.

이러한 IDT를 IDTR레지스터에 등록하여 참조될 수 있도록 한다.

3-2 IDT동작 순서

그림으로 정리하고 이번 장을 마치겠다.

'컴퓨터구조&OS > OS' 카테고리의 다른 글

5. 보호  (0) 2014.05.05
4. Task switching  (0) 2014.05.05
2. Protected 모드로의 전환  (0) 2014.05.05
메모리 구조  (0) 2014.05.04
1.OS의 시작  (0) 2014.05.04
Posted by flack3r
|