<aside>
💡 선 요약
인터럽트의 종류
파이프라인에서의 precise interrupt
CSR(OS 전용 레지스터)
Pre-Fixed, Vectored 방식
Priority 개념
</aside>
Unplanned Events!
어떻게 처리할까?
- Polling: 계속 상태를 체크한다.
- 간단한 임베디드에서는 유용하다(토스터 등)
- overhead 너무 많다! 이벤트 수가 많아질수록 체크에 걸리는 시간도 비례할 것.
- Interrupt: 인터럽트를 발생시킨다
- 예외처리를 하는 것.
- control을 handler로 옮겨서 처리 후 다시 돌아간다.
- 이때 control의 이동, handler의 작동, 원래 flow로 복귀 전 과정은
Entirely Transparent 해야 한다.
- 즉 inturruption 발생했다고 실행되고 있던게 망가지면 안된다는 말!
Interrupt Sources
마프 참고
Exceptional Control Flow: Exceptions, Procecces
- Synchronous interrupts (Exceptions)
- 특정 instruction에서 발생
- 잘못된 opcode, 잘못된 연산자, 가상 메모리 fault들
- 발생 즉시 handling ; handle 중에는 진행되어서는 안됨!
- Asynchronous interrupts (Interrupts)
- 키보드 인터럽트 등 외부의 이벤트에서 발생
- 발생하더라도 handle까지 조금 delay 걸릴 수는 있다.
따라서 interrupt 핸들러에는 두가지 소스가 박혀 있다.

Control Transfer
OS의 방식을 대략적으로만 짚고 넘어간다.
- 추상화와 보호
- 유저 레벨에서는 각자 개인마다의 architectural states, 메모리를 할당받는 것처럼만 보인다.
- 전체 총괄은 OS가, 유저가 개입하지 못하는 선에서 처리한다.
- 따라서 유저는 하드 디스크에 직접 개입하는 등의 일은
“OS 레벨에서” 불가능하다.
- 이렇게 보호받는 곳을 Privileged Level이라고 한다.
- 유저와 Privileged의 중계는 커널이 맡는다!
- 인터럽트 발생 시 Privileged Code를 실행할 수 있게 된다.

Implementing Interrupts