참고: tech-interview-for-developer
인터럽트 (Interrupt)
프로그램을 실행하는 도중 예기치 않은 상황이 발생할 경우, 현재 실행 중인 작업을 즉시 중단하고 발생된 상황에 대한 우선 처리가 필요함을 CPU에게 알리는 것
- 지금 수행하는 작업보다 우선순위가 더 높은 작업을 먼저 처리하고 하던 일을 이어서 수행한다.
- 인터럽트가 발생하면 CPU는 해당 인터럽트를 무시할 수도 있다.
- Non maskable 인터럽트 (NMI): 항상 응답해야 하는 인터럽트
- Maskable 인터럽트: 그렇지 않은 경우
인터럽트 종류
인터럽트를 발생시키기 위해 하드웨어/소프트웨어는 CPU 내에 있는 인터럽트 라인을 세팅하여 인터럽트를 발생시킨다.
- 하드웨어 인터럽트 : 하드웨어 신호에 의해 발생 (외부/내부)
- 소프트웨어 인터럽트 : 명령어의 수행에 의해 발생
- 외부 인터럽트 :
- 입출력 장치, 타이밍 장치, 전원 등 외부적인 요인으로 발생
- ex) 전원 이상, 기계 착오, 외부 신호, 입출력
- 내부 인터럽트(Trap) :
- 잘못된 명령 또는 데이터를 사용할 때 발생
- ex) 0으로 나누기, 오버플로우, 명령어 잘못 사용 (Exception)
- 소프트웨어 인터럽트 :
- 프로그램 처리 중 명령의 요청에 의해 발생 (SVC 인터럽트)
- ex) 소프트웨어 이용 중에 다른 프로세스를 실행시키면, 시분할 처리를 위해 자원 할당 동작이 수행된다.
인터럽트 처리 과정
(입출력 장치를 예시로)
- 특정 장치가 CPU에게 인터럽트를 요구한다.
- CPU는 인터럽트 확인 신호(INTA)를 보낸다.
- INTA를 받은 입출력 장치는 인터럽트 요구 신호(INTR)를 삭제한다.
- CPU는 PC, PSW, 레지스터 등을 스택에 저장한다.
- CPU는 인터럽트 서비스 루트의 주소를 PC에 적재하고, 인터럽트 서비스 루틴(ISR)을 수행한다.
- CPU는 PSW, 레지스터 등을 스택으로부터 복귀한다.
- 본래 실행 중이던 프로그램을 수행한다.
컨트롤러가 입력을 받아들이는 방법
- 폴링 방식
- 사용자가 명령어를 사용해 입력 핀의 값을 계속 읽어 변화를 알아내는 방식
- 인터럽트 요청 플래그를 차례로 비교하여 우선순위가 가장 높은 인터럽트 자원을 찾아 이에 맞는 인터럽트 서비스 루틴을 수행한다. < 하드웨어에 비해 속도가 느림
- 인터럽트 방식
- MCU 자체가 하드웨어적으로 변화를 체크하여 변화 시에만 일정 동작을 수행하는 방식
- Daisy chain
- 병렬 우선순위 부여
인터럽트 기능이 없다면 컨트롤러는 어떤 일을 할 시기를 알기 위해 계속 체크해야 한다.(= 폴링) 이로 인해 컨트롤러는 상당한 시간을 소비하게 된다.
인터럽트 방식은 하드웨어를 사용해야 한다는 제약이 있지만, 폴링에 비해 신속하게 대응이 가능하다. 따라서 실시간 대응이 필요할 때는 필수적인 기능이다.
→ 인터럽트는 발생 시기를 예측하기 힘든 경우 컨트롤러가 가장 빠르게 대응할 수 있는 방법
MCU (microcontroller unit) : 마이크로 프로세스와 입출력 모듈의 하나의 칩으로 만들어 정해진 기능을 수행하는 컴퓨터
다중 인터럽트
CPU가 인터럽트를 처리하는 중에 또 인터럽트가 발생하는 경우 두 가지 처리 방식이 있다.
- CPU가 인터럽트 서비스 루틴을 처리하는 중 새로운 인터럽트가 들어오더라도 수행 중인 ISR이 끝날 때까지 새로운 인터럽트 사이클을 수행하지 않도록 하는 방식
- 인터럽트 간 우선순위를 정하고, 우선순위가 더 높은 인터럽트가 발생한다면, 현재 수행 중인 명령어를 멈춰두고 새로운 인터럽트를 먼저 처리하도록 하는 방식
'CS' 카테고리의 다른 글
[알고리즘] 최대 공약수 구하기 - 유클리드 호제법 (0) | 2023.07.18 |
---|---|
[CS 스터디] 프로세스 주소 공간 (0) | 2023.07.17 |
[CS 스터디] 운영체제(Operating System) (0) | 2023.07.13 |
[CS 스터디] 프로세스 (Process), 스레드 (Thread) (0) | 2023.07.13 |
[Java] Runnable, Thread (0) | 2023.07.11 |