인터럽트(Interrupt)란?
프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우 현재 실행중인 작업을 중단하고 발생된 상황을 처리한 후 다시 실행중인 작업으로 복귀하는 것을 의미한다.
인터럽트의 종류
인터럽트는 크게 외부 인터럽트, 내부 인터럽트, 소프트웨어 인터럽트로 나뉜다. (중요도는 소프트웨어 인터럽트가 가장 낮다.)
외부 인터럽트 🔥
원인이 외부에서 기인한 인터럽트를 의미한다.
- 전원 이상 인터럽트(Power fail interrupt) : 정전, 파워 이상, 절전 모드(?) 등
- 기계 착오 인터럽트(Machine check interrupt) : CPU의 기능적인 오류
- 외부 신호 인터럽트(External interrupt)
- 타이머에 의한 인터럽트 : preemptive(선점형) 개념을 생각하면 됨. 자원이 할당된 시간이 다 끝난 경우
- 키보드로 인터럽트 키를 누른 경우 : 대표적인 경우가 Ctrl + Alt + Del(작업관리자 실행 혹은 재부팅)
- 외부장치로부터 인터럽트 요청이 있는 경우(I/O 인터럽트와 다른 개념)
- 입출력 인터럽트(I/O interrupt)
- 입출력장치가 데이터 전송을 요구하거나 전송이 끝나 다음 동작이 수행되어야 하는 경우
- CPU는 RAM(주기억장치)와 밀접하게 동작한다. 과거에는 CPU가 RAM을 직접 통제했으나 현재는 간접적으로 통제하는 방식을 채택했다. Memory Manager(=입출력 관리자)가 있어, ‘CPU → 입출력 관리자 → 램’ 혹은 ‘CPU ← 입출력 관리자 ← 램’ 방향으로 통신한다.
- 입출력 데이터에 이상이 있는 경우
- 입출력장치가 데이터 전송을 요구하거나 전송이 끝나 다음 동작이 수행되어야 하는 경우
내부 인터럽트
- 잘못된 명령이나 잘못된 데이터를 사용할 때 발생하며, Trap이라 부른다.
- 프로그램 검사 인터럽트(Program check interrupt)
- Division by zero(0으로 나눔)
- 컴퓨터는 5 / 2를 ‘나누어질 값이 나눌 값보다 큰 이상 계속해서 뺌으로써 몫과 나머지를 구하는 방식’으로 구한다. 즉, 5 - 2 를 수행한 후 그 값인 3이 여전히 2보다 크기 때문에 다시금 뺌으로써 몫은 2(두 번 나눔), 나머지는 1이 되는 것이다. 컴퓨터가 이러한 방식으로 동작하기 때문에 어떤 값을 0으로 나누게 되면 무한 루프를 돌게 되어 CPU가 손상을 입게 되어 이것을 막고 있다.
- Overflow/Underflow
- 기타 Exception
- 소프트웨어적인 내용이나 분류상 인터럽트가 아님
소프트웨어 인터럽트(SVC : SuperVisor Call)
- 사용자가 프로그램을 실행시키거나 감시프로그램(Supervisor)을 호출하는 동작을 수행하는 경우
인터럽트 동작 순서 🔥
- 이 과정에서 Context-Switching이 발생하게 된다.
- 인터럽트 요청
- 프로그램 실행 중단(CPU가 수행하고 있던 연산에 대해 일시 중지 한다.)
- 현재의 프로그램 상태 보존(백업) : PCB(Process Control Block), PC(Program Counter) 등
- 인터럽트 서비스 루틴 실행 : 인터럽트를 요청한 장치를 식별한다.
- 인터럽트 서비스 루틴 실행
- Cf. 인터럽트 서비스 루틴 실행 중에 더 높은 우선순위의 인터럽트가 발생하면 또 재귀적으로 1 ~ 5번 과정을 수행
- 상태 복구 : 인터럽트 발생 시 저장해둔 PC(Program Counter)를 다시 복구한다.
- 중단된 프로그램 실행 재개 : PC의 값을 이용해 수행중이던 프로그램을 재개한다
Cf. 인터럽트가 발생하면 이 인터럽트를 처리하는 ISR(인터럽트 마다의 서비스 루틴, Interrupt Service Routine)이 실행되게 되고, ISR이 끝날 때까지 프로그램 실행은 중단된다는 점에 유의
인터럽트 우선순위
여러 장치에서 인터럽트가 동시에 발생하거나 ISR 수행 중 새로운 인터럽트가 발생하는 경우 우선순위를 따져서 처리한다.
전원 이상 > 기계 착오 > 외부 신호 > 입출력 > 명령어 잘못 > 프로그램 검사 > SVC
일반적으로 하드웨어 인터럽트가 소프트웨어 인터럽트보다 우선순위가 높고, 외부 인터럽트가 내부 인터럽트보다 우선순위가 높다.
DirectX
중간에 시스템콜이 일어나거나 데이터를 복사하는 과정을 최소화하여 지연 시간을 줄인 예. 게임의 지연 시간을 줄이기 위해 사용되기 시작함(Windows Vista가 User/Kernel, Hardware 각 단계를 모두 DirectX로 연결되게 함으로써 속도를 증가시킨 예가 되기도 한다.)
IRQ
Device Driver 내부에서는 Interrupt를 요청(IRQ)한다. IRQ는 고유 번호를 가진다. 이 고유 번호를 가지고 요청을 하게 되면, CPU는 Interrupt를 발생시켜서 해당 장치(주변 기기)와 통신하게 된다.
DMA(Direct Memory Access)
I/O 과정에서 발생하는 인터럽트를 줄임으로써 지연이 줄어 성능을 극대화할 수 있다.
주변장치들(HDD, VDD, NIC 등)이 메모리에 직접 접근하여 읽거나 쓸 수 있도록 하는 기능이다. 대개의 경우, 메모리(RAM)의 일정 부분이 DMA에 사용될 영역으로 지정된다.
Cf. PIO
DMA의 반대 개념. 장치들 간에 송수신 되는 모든 데이터가 중앙처리장치를 거치게 하는 방식이다.
'개념' 카테고리의 다른 글
Network) TTL, 단편화, DHCP, ARP, RTT (0) | 2024.03.19 |
---|---|
Network) 특수한 IP 주소(Broadcast IP 주소, Loopback IP 주소) (0) | 2024.03.17 |
Network) IP 클래스와 서브넷팅, 서브넷 마스크 (0) | 2024.03.17 |
틈새 Network 공부(네트워크 계층, L2 - L4) (0) | 2024.03.16 |
쿠키, 토큰, 세션 (0) | 2021.10.10 |