[ComputerScience] CPU 인터럽트
CPU 인터럽트
인터럽트(Interrupt)는 CPU가 프로그램을 실행 중일 때 예외 상황이나 외부 요청이 발생하면, 현재 작업을 일시 중단하고 해당 요청을 우선 처리하도록 하는 메커니즘입니다.
이는 응답성과 안정성을 확보하고, 입출력 효율 개선과 예외 처리 등 다양한 용도로 사용됩니다.
인터럽트의 분류
동기 인터럽트
동기 인터럽트(Synchronous Interrupts)는 CPU가 명령어 실행 중 내부적으로 발생시키는 인터럽트입니다.
주로 프로그래밍 오류, 예외 상황(예: 0으로 나누기, 페이지 폴트, 브레이크포인트 등)에 의해 발생합니다.
일반적으로 예외(Exception)라고 부르며, 현재 실행중인 명령어의 결과로 예측 가능한 시점에 발생합니다.
비동기 인터럽트
비동기 인터럽트(Asynchronous Interrupts)는 CPU 외부의 하드웨어 장치가 발생시키는 인터럽트입니다.
CPU의 명령어 실행과 무관하게, 임의의 시점에 발생합니다.
키보드 입력, 마우스 클릭, 디스크 입출력 완료 등 주로 입출력 장치가 발생시킵니다.
CPU가 프린터와 같은 입출력장치에게 입출력 작업을 부탁하고, 작업을 끝낸 입출력장치가 CPU에게 완료 알림(인터럽트)을 보냅니다.
키보드, 마우스와 같은 입출력 장치가 어떤 입력을 받아들였을 때, 이를 처리하기 위해 CPU에게 입력 알림(인터럽트)을 보냅니다.
하드웨어 인터럽트라고도 불립니다.
비동기 인터럽트 처리하는 순서
CPU는 하드웨어 인터럽트를 다음과 같은 단계로 처리합니다.
- 하드웨어 장치(입출력장치)가 인터럽트 요청을 발생합니다.
- 인터럽트 컨트롤러가 우선순위와 마스킹을 적용해 CPU로 전달합니다.
- CPU는 명령어 사이클 종료 시점에 인터럽트 여부를 확인합니다.
- 명령어를 인출하기 전
- 인터럽트 플래그를 검사하여 수용 가능한지 판단합니다.
- 수용 가능하다면, 현재 작업 상태(Program Counter, 레지스터 등)를 백업합니다.
- 인터럽트 벡터를 통해 인터럽트 서비스 루틴 주소로 이동합니다.
- 인터럽트 서비스 루틴을 수행 후, 컨트롤러에 EOI(End Of Interrupt) 신호를 보냅니다.
- CPU는 백업한 상태를 복원하고 원래 작업을 계속 수행합니다.
인터럽트 관련 개념
인터럽트 요청
인터럽트 요청(Interrupt Request)은 하드웨어 장치가 CPU에 보내는 신호로, 특정 이벤트가 발생해 인터럽트를 요청하는 신호입니다.
CPU는 이를 통해 외부 요청을 비동기적으로 감지할 수 있습니다.
CPU의 실행 흐름을 끊는 것이기 때문에 인터럽트 하기 전에 CPU에게 인터럽트의 가능 여부를 확인합니다.
인터럽트 컨트롤러
인터럽트 컨트롤러(Interrupt Controller)는 하드웨어 장치로부터 들어오는 인터럽트 요청을 효율적으로 관리하고 중재하는 하드웨어 장치입니다.
CPU는 한 번에 하나의 인터럽트만 처리할 수 있기 때문에 우선순위(Priority)를 정하고, 마스킹을 적용해 CPU에 전달합니다.
여기에서 마스킹은 특정 상황에서 중요하지 않은 인터럽트를 차단합니다.
하드웨어 장치 $\rightarrow$ 인터럽트 컨트롤러 $\rightarrow$ CPU 순으로 전달됩니다.
인터럽트 플래그
인터럽트 플래그(Interrupt Flag)는 플래그 레지스터의 상태 비트 중 하나로, CPU가 인터럽트를 수용할지 결정합니다.
인터럽트 플래그가 비활성화되면, 인터럽트 요청을 보류 혹은 무시됩니다.
막을 수 있는 인터럽트(Maskable Interrupt)와 막을 수 없는 인터럽트(NMI, Non Maskable Interrupt)가 있습니다.
막을 수 없는 인터럽트는 시스템 치명 오류 등의 이유로 반드시 처리되어야 하는 인터럽트 들이 있습니다.
인터럽트 벡터
인터럽트 벡터(Interrupt Vector)는 각 인터럽트 요청에 대응하는 인터럽트 서비스 루틴의 주소를 저장한 테이블입니다.
CPU는 벡터를 참조하여 어떤 루틴을 실행할지 결정합니다.
인터럽트 서비스 루틴
인터럽트 서비스 루틴(ISR, Interrupt Service Routine)은 인터럽트 발생 시 CPU가 실행하는 특정 처리 루틴입니다.
인터럽트 서비스 루틴을 실행 후, CPU는 이전 상태로 돌아가 중단되었던 명령어 실행을 재개합니다.
인터럽트 핸들러(Interrupt Handler)라고도 불립니다.
예외의 종류
- 폴트(Fault)
- 예외가 발생한 명령어를 다시 실행합니다.
- 예시: 페이지 폴트
- 트랩(Trap)
- 예외가 발생한 직후 다음 명령어부터 실행합니다.
- 예시: 디버깅의 브레이크 포인트
- 중단(Abort)
- 심각한 오류로 복귀 지점이 불명확한 상태, 프로그램을 중단
- 예시: 하드웨어 오류
- 소프트웨어 인터럽트
- 시스템 콜 등 소프트웨어에 의해 발생하는 예외
CPU는 예외가 발생하면 하던 일을 중단하고 해당 예외를 처리합니다.
예외를 처리하고 나면 다시 본래 하던 작업으로 되돌아와 실행을 재개합니다.
댓글남기기