ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • [OS] Interrupt 인터럽트란 ?
    Computer Science/Operating System 2021. 1. 22. 00:50

    인터럽트는 펌웨어 개발의 필수 기능이자 OS 개념이다

    Interrupt: 마이크로프로세서(CPU)가 프로그램을 실행하고 있을 때, 입출력 하드웨어 등의 장치나 또는 예외상황이 발생하여 처리가 필요할 경우에 마이크로프로세서에게 알려 처리할 수 있도록 하는 것 - 출처: 위키백과

    인터럽트는 위와 같은 정의를 가지고 있는데, 주로 "프로그램을 실행하던 중에 예기치 못한 상황이 발생했을 때, 현재 처리하던 작업을 중단하고 해당 상황을 먼저 처리한 뒤에 기존의 작업을 진행하는 것" 이라고 하기도 한다.

    이러한 설명은 인터럽트의 발생을 굉장히 예외적이고, 급작스러운 것으로 묘사하는 것 같지만 실제로는 인터럽트는 매우 빈번하고 흔하게 일어난다.

     

    AVR MCU에 존재하는 인터럽트 핀

    OS는 CPU라는 한정된 자원을 가지고 있고, 이것을 적절하게 프로세스들에게 분배해야 한다.

    이 때, 외부 장치(입출력 장치)와의 통신도 계속해서 해야한다.

     

    예를 들어 비정기적인 키보드 입력이 발생할 수 있거나, MCU에 센서가 연결되어 있어서 센서 값을 읽어와야 하는 기능이 존재한다고 하자.

    이 작업의 실행 유무는 외부 장치에 달려있기 때문에, 이 작업의 시행 시기를 결정할 수 없다.

    따라서 외부 장치에서 signal 혹은 data를 받아야만 입출력 장치와 관련된 일을 수행할 수 있다.

    하지만 CPU는 이 작업이 들어오기를 놀면서 기다릴 수는 없고, 자원을 낭비시킬 수 없기 때문에 다른 일을 해야만 한다.

     

    따라서 평소에는 원래의 작업을 하고 있다가, 외부에서 신호가 들어왔을 때(상황이 발생했을 때)에만 해당 기능을 처리하는 기능이 필요한 것이다.

    이것을 외부 인터럽트라고 한다.

    내부 인터럽트는 수식을 0으로 나누거나, 비정상적인 메모리에 접근하는 등 SW적 예외 상황이 발생할 때 주로 사용한다.

     

    인터럽트와 상반되는 개념으로는 폴링이 있다. 폴링은 특정 핀이나 상태를 주기적으로 감시하면서, 상태가 변화했을 때 해당 작업을 수행하는 것을 말한다.

    위에서 언급한 것 처럼 주기적으로 감시하는 행위 자체가 자원 낭비로 이어질 수 있기 때문에, 외부에서 CPU로 직접 신호를 전달하는 인터럽트 기능을 많이 사용한다.

     

     

    인터럽트가 발생하게 되면, 인터럽트를 처리하기 위한 루틴인 ISR(Interrupt Service Routine)이 실행된다.

     

    인터럽트의 처리 과정은 다음과 같다.

    1️⃣ 주 프로그램을 실행한다.

    2️⃣ 인터럽트의 발생을 감지한다.

    3️⃣ ISR을 처리하고 난 뒤 실행중이던 주 프로그램으로 다시 복귀해야 하기 때문에 복귀 주소를 미리 저장한다.

    4️⃣ 인터럽트 벡터 테이블에서 ISR 주소값을 얻어서 ISR로 점프한다.

    5️⃣ ISR에서 인터럽트 발생 상황을 처리한다.

    6️⃣ 복귀 주소를 가져온다.

    7️⃣ 주 프로그램에서 마지막으로 실행중이던 주소를 가져온 뒤, 1번으로 돌아가 정상 수행한다.

     

     

    펌웨어에서는 주로 센서 값 송수신을 위한 외부 인터럽트, 정기적인 작업 수행을 위한 타이머 인터럽트 등이 존재한다.

Designed by Tistory.