Post

2026-06-05 TIL (70일차)

2026-06-05 TIL (70일차)

공휴일,예비군

6월4일은 공휴일, 6월 5일은 예비군 갔다와서 TIL이 없습니다!

컴퓨터 구조: CPU와 인터럽트 (Interrupt)


1. 인터럽트(Interrupt)란?

CPU가 수행하고 있는 정상적인 작업 흐름을 방해(중단)하는 신호입니다.

  • CPU는 인터럽트가 발생하면 하던 일을 잠시 멈추고, 해당 인터럽트를 처리한 뒤 다시 원래 작업으로 돌아옵니다.
  • 예: Ctrl + C 로 프로그램 강제 종료, 마우스/키보드 입력 알림, 오류 발생 등.

2. 인터럽트의 종류 (동기 vs 비동기)

① 동기 인터럽트 (Synchronous Interrupt) = 예외 (Exception)

  • 발생 주체: CPU 자체 (내부)
  • 원인: CPU가 명령어를 실행하는 과정에서 예상치 못한 상황이나 실행 불가능한 오류를 마주쳤을 때 자발적으로 발생시키는 인터럽트입니다.

② 비동기 인터럽트 (Asynchronous Interrupt) = 하드웨어 인터럽트 (Hardware Interrupt)

  • 발생 주체: 다른 하드웨어 (주로 입출력 장치)
  • 원인: 프린터 출력 완료, 키보드 입력 발생 등과 같이 “알림” 역할을 하기 위해 발생합니다.
  • 사용 목적 (매우 중요): 명령어 처리의 효율성을 위해 사용됩니다.
    • 만약 하드웨어 인터럽트가 없다면? CPU는 입출력 장치의 작업 완료 여부를 계속해서 주기적으로 확인(Polling)해야 하므로 자원 낭비가 심해집니다.
    • 인터럽트가 있다면? 알림(인터럽트)이 올 때까지 CPU는 온전히 자신의 다른 작업을 수행할 수 있습니다.

3. 하드웨어 인터럽트의 처리 과정 (순서)

인터럽트의 종류를 막론하고, CPU가 인터럽트를 처리하는 큰 틀의 양상은 마치 “함수를 호출하고 리턴하는 과정”과 거의 똑같습니다.

  1. 인터럽트 요청 신호 발송: 입출력 장치가 CPU에게 “지금 끼어들어도 되나요?”라고 묻습니다.
  2. 인터럽트 여부 확인: CPU는 현재 실행 사이클이 끝나고 다음 명령어를 인출하기 전에 항상 인터럽트가 발생했는지 확인합니다.
  3. 인터럽트 플래그(Interrupt Flag) 확인: CPU는 레지스터의 인터럽트 플래그를 확인하여 현재 인터럽트를 받아들일 수 있는 상태인지 검사합니다. (단, NMI라 불리는 치명적인 하드웨어 오류는 플래그로 무시할 수 없음)
  4. 현재 작업 스택(Stack)에 백업: 인터럽트를 수락하면, CPU는 프로그램 카운터(PC) 값 등 돌아올 위치와 현재 레지스터 상태를 메모리의 스택 영역에 백업합니다.
  5. 인터럽트 벡터(Vector) 참조 및 ISR 실행:
    • 인터럽트 벡터: 발생한 인터럽트가 ‘무엇’인지 식별하고, 해당 처리 프로그램의 시작 주소를 알려주는 정보.
    • 인터럽트 서비스 루틴(ISR): 해당 인터럽트가 발생했을 때 “어떻게 행동해야 하는지” 정의되어 있는 프로그램. (인터럽트 핸들러)
    • CPU는 벡터를 통해 해당 ISR로 점프하여 프로그램을 실행합니다.
  6. 작업 복구 및 재개: ISR 실행이 끝나면(리턴), 스택에 백업해 둔 값을 꺼내어 본래 하던 작업(프로그램 카운터 주소)으로 돌아가 실행을 재개합니다.

4. 동기 인터럽트(예외)의 4가지 종류

예외 역시 큰 틀의 인터럽트 처리 과정은 동일하지만, “예외 처리 후 어디서부터 실행을 재개하는가?”에 따라 나뉩니다.

  1. 폴트 (Fault):
    • 예외 처리가 끝난 후, 예외가 발생했던 그 명령어부터 다시 실행을 재개합니다.
    • 대표 예시: 페이지 폴트(Page Fault) - 실행할 명령어가 메모리에 없고 보조기억장치에 있을 때 발생. 데이터를 메모리에 가져온 후, 다시 그 명령어를 실행해야 함.
  2. 트랩 (Trap):
    • 예외 처리가 끝난 후, 예외가 발생했던 명령어의 “다음” 명령어부터 실행을 재개합니다.
    • 대표 예시: 디버거의 브레이크포인트(Break Point) - 멈춘 지점의 처리를 끝내면 그 다음 줄의 코드부터 실행됨.
  3. 중단 (Abort):
    • 강제로 중단할 수밖에 없는 심각한 시스템 오류가 발생했을 때.
  4. 소프트웨어 인터럽트 (Software Interrupt):
    • 주로 운영체제에게 서비스를 요청하는 시스템 콜(System Call)에 의해 발생합니다.
This post is licensed under CC BY 4.0 by the author.