CS

인터럽트(Interrupt)란?

_minit 2024. 10. 10. 11:20

인터럽트는 시스템에서 예기치 않은 이벤트가 발생했을 때, 현재 실행 중인 작업을 잠시 중단하고, 해당 이벤트를 처리하는 기능을 의미한다. 쉽게 말해 끼어들기이다. 인터럽트가 발생하면, CPU는 현재 상태를 저장하고 인터럽트 서비스 루틴(ISR)을 실행하여 해당 이벤트를 처리한 후, 다시 이전 작업으로 복귀한다. 이를 통해 시스템은 중요한 이벤트에 빠르게 반응할 수 있다.

 

운영체제(OS)에서의 인터럽트

운영체제에서 인터럽트는 CPU가 외부 장치나 내부 이벤트에 즉각적으로 반응할 수 있도록 하는 중요한 메커니즘이다. 인터럽트를 통해 CPU는 외부의 요청(예: 키보드 입력, 마우스 클릭)이나 하드웨어 장치의 상태 변화를 빠르게 처리할 수 있다.

 

OS에서의 인터럽트 종류

  1. 하드웨어 인터럽트: 하드웨어 장치에서 발생하는 인터럽트이다. 예를 들어, 키보드를 누르거나 네트워크 패킷이 도착했을 때 발생한다.
  2. 소프트웨어 인터럽트: 소프트웨어가 직접 발생시키는 인터럽트로, 시스템 호출(System Call)이나 예외 상황에서 발생한다. 예를 들어, 프로그램에서 특정 자원을 요청할 때 소프트웨어 인터럽트를 통해 운영체제에 요청을 전달한다.

 

OS에서의 인터럽트 처리 과정

  1. 인터럽트 발생: 하드웨어나 소프트웨어 이벤트에 의해 인터럽트가 발생한다.
  2. 인터럽트 컨트롤러: CPU에 인터럽트를 전달하는 역할을 하며, 여러 인터럽트가 동시에 발생할 경우 우선순위를 관리한다.
  3. 인터럽트 서비스 루틴(ISR) 실행: CPU는 현재 작업을 중단하고 인터럽트를 처리하기 위해 ISR을 실행한다. ISR은 운영체제 커널의 일부로, 해당 이벤트를 처리한다.
  4. 복귀 및 스케줄링: ISR이 완료되면 운영체제는 원래 작업으로 돌아가거나, 스케줄러를 통해 다른 작업을 수행할지 결정한다.

 

OS 인터럽트의 활용

  • 장치 드라이버: 키보드, 마우스, 네트워크 카드 등의 장치가 동작할 때 인터럽트를 통해 운영체제와 상호작용한다.
  • 프로세스 관리: 프로세스 간의 문맥 전환(context switch) 시에도 인터럽트를 사용하여 CPU 자원을 효율적으로 나눈다.

 

MCU에서의 인터럽트

마이크로컨트롤러(MCU)에서 인터럽트(Interrupt)는 다양한 외부 장치나 내부 이벤트가 발생했을 때 이를 즉시 처리하기 위해 사용하는 중요한 메커니즘이다. MCU는 센서, 버튼, 타이머 등 여러 하드웨어 장치와 연결되어 동작하는 경우가 많은데, 이런 외부 장치에서 즉각적인 반응이 필요할 때 인터럽트를 사용한다.

 

MCU에서의 인터럽트 종류

  1. 외부 인터럽트 (External Interrupt) 외부 핀에서 특정 신호가 발생했을 때 트리거되는 인터럽트이다. 예를 들어, 버튼이 눌리거나 센서에서 신호가 들어올 때 사용한다. MCU의 특정 핀에 연결된 신호가 상승 엣지(Rising Edge)하강 엣지(Falling Edge)로 변할 때 인터럽트가 발생하도록 설정할 수 있다.
  2. 타이머 인터럽트 (Timer Interrupt) MCU 내부의 타이머가 일정 시간마다 인터럽트를 발생시키도록 설정할 수 있다. 이를 통해 주기적으로 특정 작업을 수행할 수 있는데, 예를 들어 일정 간격으로 LED를 깜빡이거나 센서 데이터를 읽어오는 데 유용하다.
  3. UART 인터럽트 (Serial Interrupt) UART 통신에서 데이터를 전송하거나 수신할 때 인터럽트를 발생시킨다. 이 방식으로 MCU는 데이터를 수신할 때마다 바로 처리할 수 있다.
  4. ADC 인터럽트 (Analog-to-Digital Converter Interrupt) 아날로그 신호를 디지털 값으로 변환하는 ADC 작업이 완료될 때 인터럽트를 발생시켜, 변환된 데이터를 처리할 수 있다.

MCU에서의 인터럽트 동작 원리

  1. 인터럽트 발생: MCU의 특정 핀이나 내부 모듈에서 이벤트가 발생하면, 인터럽트 요청 (IRQ) 신호가 발생한다.
  2. 현재 상태 저장: MCU는 현재 작업을 중단하고, 현재 상태(레지스터, 프로그램 카운터 등)를 스택에 저장한다.
  3. 인터럽트 서비스 루틴(ISR) 실행: 해당 인터럽트에 맞는 ISR(Interrupt Service Routine)이 호출된다. ISR은 짧고 간단하게 설계되어야 한다.
  4. 복귀: ISR 실행이 끝나면, 저장했던 상태를 복원하고 중단했던 작업을 이어서 실행한다.

 

인터럽트의 우선순위와 중첩

MCU에서는 여러 인터럽트가 동시에 발생할 수 있다. 이때 인터럽트의 우선순위에 따라 어떤 인터럽트를 먼저 처리할지 결정한다. 대부분의 MCU는 우선순위를 설정할 수 있도록 인터럽트 컨트롤러를 갖추고 있다.

  • 우선순위 높은 인터럽트는 먼저 처리된다.
  • 만약 한 인터럽트를 처리 중에 우선순위가 높은 인터럽트가 발생하면, 기존 인터럽트를 일시 중지하고 새로운 인터럽트를 처리하는 중첩 인터럽트가 발생할 수 있다.

 

인터럽트 사용 시 주의사항

  1. ISR은 짧고 간단하게: 인터럽트 서비스 루틴(ISR)은 가능한 짧게 작성해야 한다. ISR에서 너무 오래 걸리는 작업을 수행하면 다른 인터럽트가 지연될 수 있고, 시스템 전체 성능이 저하될 수 있다.
  2. 전역 변수 사용 시 주의: ISR에서 전역 변수를 사용할 때는 동기화 문제에 주의해야 한다. MCU와 OS 모두에서 인터럽트가 실행되면서 전역 변수에 접근할 경우 데이터 경합 문제가 발생할 수 있다. 이를 방지하기 위해 volatile 키워드를 사용해서 최적화 방지를 설정하거나, 인터럽트를 잠시 비활성화하는 방법도 사용한다.
  3. 인터럽트 플래그 클리어: 일부 MCU와 OS에서는 인터럽트가 발생한 후 인터럽트 플래그를 수동으로 클리어해 줘야 인터럽트가 다시 발생할 수 있다. 이를 잊으면 동일한 인터럽트가 더 이상 발생하지 않는 문제가 생길 수 있다.

 

마이크로컨트롤러와 운영체제에서의 인터럽트 활용 비교

  • OS: 사용자 입력 처리, 장치 드라이버와의 상호작용, 프로세스 스케줄링 등 시스템 전반의 자원 관리 프로세스 간의 조정을 위해 사용된다.
  • MCU: 실시간 데이터 수집, 센서와 사용자 입력 처리, 저전력 모드에서의 깨우기 등 하드웨어 중심의 즉각적인 반응을 처리하는 데 주로 사용된다.
728x90

'CS' 카테고리의 다른 글

2의 보수(Two's complement)란?  (0) 2024.10.23
ISO 파일이란?  (1) 2024.10.14
BIOS / BootLoader란?  (0) 2024.10.07
JTAG / J-LINK란?  (0) 2024.10.07
CRC에 대하여  (0) 2024.10.07