본문으로 건너뛰기

인터럽트(Interrupt)와 시스템콜(System Call)

March 26, 2026

인터럽트(Interrupt)

정의

프로그램을 실행하는 도중에 예기치 않은 상황이 발생할 경우 현재 실행 중인 작업을 즉시 중단하고, 발생된 상황에 대한 우선 처리가 필요함을 CPU에게 알리는 것

인터럽트가 발생할 경우 기존 작업의 상태 레지스터와 PC 등을 스택에 잠시 저장한 뒤에 인터럽트 서비스 루틴으로 간다. 그리고 인터럽트 서비스 루틴이 끝난 이후 스택에서 정보들을 다시 불러서 기존 작업을 진행한다.

싱글코어 CPU가 장착된 컴퓨터라고 생각해보자.

이 컴퓨터는 한 순간에는 하나의 일만 처리할 수 있기 때문에, 어떤 일을 처리하는 도중에 우선 순위가 급한 일을 처리할 필요가 있을 때 대처할 수 있는 방안이 필요하다.

예를들어, 키보드의 키를 하나 누르면 눌려진 키 코드 값이 키보드 버퍼에 입력된 후 CPU에 인터럽트가 걸린다. 그럼 현재 처리하던 작업에 대한 정보를 수집하여 저장한 뒤에 키보드 버퍼에 있는 키 코드 값을 가져가는 일을 수행한다. (인터럽트 서비스 루틴) 이렇게 인터럽트 처리를 마친 후에는 다시 이전에 처리하던 작업으로 돌아간다. (저장해두었으니 돌아갈 수 있는 것이다)

인터럽트의 종류

외부 인터럽트(하드웨어 인터럽트)

  • 입출력 장치, 타이밍 장치, 전원 등 외부적인 요인으로 발생

내부 인터럽트(소프트웨어 인터럽트)

  • Trap 이라고 부르며, 잘못된 명령이나 데이터를 사용할 때 발생
  • ex: System Call, 0으로 나누기가 발생, 오버플로우, 잘못된 명령어 사용(Exception)

폴링 VS 인터럽트

만약 인터럽트 기능이 없었다면, 컨트롤러는 특정한 어떤 일을 할 시기를 알기 위해 주기적으로 계속 체크를 해야한다. (폴링)

폴링만 존재한다면 이러한 체크를 하는데에 자원을 많이 소모하기 때문에 비효율적이다. (위에 언급했던 예시를 활용한다면, CPU가 지속적으로 계속 키보드를 눌렀는지 안눌렀는지 키보드 버퍼를 체크하는 루틴을 돌려야한다)

구분폴링 (Polling)인터럽트 (Interrupt)
방식CPU가 주기적으로 상태 확인장치가 CPU에 신호 전달
CPU 효율낮음 (busy waiting)높음 (필요 시만 처리)
응답 속도폴링 주기에 따라 지연즉각 반응 가능
적합한 상황이벤트 빈번, 간격 일정 / 빠른 응답 불필요이벤트 드문드문 발생 / 즉각 반응 필요

시스템 콜(System Call)

정의

시스템 콜은 유저 프로그램이 커널 모드에서 가능한 기능을 안전하게 사용할 수 있도록 도와주는 인터페이스이다.

  • cf) 여기서 말하는 유저/커널 모드는 CPU에 관련된 것으로, 관리자/root 권한과는 아예 별개의 개념이다.

시스템 콜은 프로그램의 거의 모든 코드 실행에서 발생하며 파일 생성, 읽기, 쓰기, 키보드 입력, 그래픽 출력, 쓰레드 생성 및 제어와 같은 것도 결국 시스템 콜을 통해 커널에 요청하여 커널 모드에서 처리한다.

  • 결국 Python이나 Java에서 파일 읽기/생성 코드를 써도 결국 내부적으로는 시스템콜을 사용한다. (Python/Java -> 표준 API -> C/C++ 레벨 -> 시스템콜 -> 커널)
  • 우리가 사용하는 거의 모든 프로그램은 내부적으로 시스템 콜을 사용한다.
여러 시스템 콜이 있지만 굳이 그 디테일까지 알 필요는 없을 것 같다.

레퍼런스